From 42225b2641eab592f67f238c364b237ee036bf0a Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Tue, 18 Jan 2022 03:01:07 +0000 Subject: CTAN sync 202201180301 --- CTAN.sites | 9 + FILES.byname | 543 ++-- FILES.byname.gz | Bin 2412327 -> 2412500 bytes FILES.last07days | 538 ++-- graphics/mcf2graph/CHANGELOG | 17 +- graphics/mcf2graph/README | 42 +- graphics/mcf2graph/mcf2graph.mf | 2387 --------------- graphics/mcf2graph/mcf2graph.mp | 2187 ++++++++++++++ graphics/mcf2graph/mcf_data_base.mcf | 72 +- graphics/mcf2graph/mcf_exa_soc.mf | 43 - graphics/mcf2graph/mcf_exa_soc.mp | 39 + graphics/mcf2graph/mcf_example.pdf | Bin 313350 -> 431913 bytes graphics/mcf2graph/mcf_example.tex | 128 +- graphics/mcf2graph/mcf_man_soc.mf | 1339 -------- graphics/mcf2graph/mcf_man_soc.mp | 1296 ++++++++ graphics/mcf2graph/mcf_manual.pdf | Bin 384512 -> 291141 bytes graphics/mcf2graph/mcf_manual.tex | 386 +-- graphics/mcf2graph/mcf_mplib_exa.pdf | Bin 185017 -> 184925 bytes graphics/mcf2graph/mcf_mplib_exa.tex | 246 +- graphics/mcf2graph/mcf_setup.sty | 90 - macros/latex/contrib/apa7/README.txt | 2 +- macros/latex/contrib/apa7/apa7.dtx | 51 +- macros/latex/contrib/apa7/apa7.ins | 8 +- macros/latex/contrib/apa7/apa7.pdf | Bin 555774 -> 555936 bytes macros/latex/contrib/apa7/samples/longsample.pdf | Bin 204050 -> 204049 bytes macros/latex/contrib/apa7/samples/shortsample.pdf | Bin 69708 -> 69692 bytes macros/latex/contrib/bewerbung/README | 6 +- macros/latex/contrib/bewerbung/README_DE | 6 +- .../contrib/bewerbung/argetabelle-example.pdf | Bin 41294 -> 43179 bytes .../latex/contrib/bewerbung/bewerbung-example.pdf | Bin 148575 -> 144541 bytes macros/latex/contrib/bewerbung/bewerbung.dtx | 96 +- macros/latex/contrib/bewerbung/bewerbung.ins | 4 +- macros/latex/contrib/bewerbung/bewerbung.pdf | Bin 693654 -> 765001 bytes .../biblatex-contrib/biblatex-lncs/lncs.bbx | 6 +- .../biblatex-contrib/biblatex-lncs/lncs.cbx | 2 +- macros/latex/contrib/dbshow/dbshow.dtx | 3186 ++++++++++++++------ macros/latex/contrib/dbshow/dbshow.pdf | Bin 440283 -> 602868 bytes macros/latex/contrib/easybook/easybook.dtx | 62 +- macros/latex/contrib/easybook/easybook.pdf | Bin 595578 -> 595806 bytes macros/latex/contrib/easybook/easybook.tex | 14 +- macros/latex/contrib/kanbun/README.md | 24 + macros/latex/contrib/kanbun/kanbun-example.pdf | Bin 0 -> 45616 bytes macros/latex/contrib/kanbun/kanbun-example.tex | 44 + macros/latex/contrib/kanbun/kanbun.lua | 224 ++ macros/latex/contrib/kanbun/kanbun.pdf | Bin 0 -> 376249 bytes macros/latex/contrib/kanbun/kanbun.sty | 317 ++ macros/latex/contrib/kanbun/kanbun.tex | 301 ++ macros/latex/contrib/llncs/README.md | 40 + macros/latex/contrib/llncs/history.txt | 144 + macros/latex/contrib/llncs/llncs.cls | 1218 ++++++++ macros/latex/contrib/llncs/llncsdoc.pdf | Bin 0 -> 218741 bytes macros/latex/contrib/llncs/llncsdoc.tex | 422 +++ macros/latex/contrib/llncs/splncs04.bst | 1548 ++++++++++ .../texlive/tlnet/tlpkg/installer/ctan-mirrors.pl | 1 + systems/texlive/tlnet/tlpkg/texlive.tlpdb | 81 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 | 2 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 | 2 +- .../texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc | 14 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz | Bin 2340064 -> 2341356 bytes systems/win32/miktex/tm/packages/next/pr.ini | 8 +- systems/win32/miktex/tm/packages/pr.ini | 8 +- timestamp | 2 +- 62 files changed, 11258 insertions(+), 5947 deletions(-) delete mode 100644 graphics/mcf2graph/mcf2graph.mf create mode 100644 graphics/mcf2graph/mcf2graph.mp delete mode 100644 graphics/mcf2graph/mcf_exa_soc.mf create mode 100644 graphics/mcf2graph/mcf_exa_soc.mp delete mode 100644 graphics/mcf2graph/mcf_man_soc.mf create mode 100644 graphics/mcf2graph/mcf_man_soc.mp delete mode 100644 graphics/mcf2graph/mcf_setup.sty create mode 100644 macros/latex/contrib/kanbun/README.md create mode 100644 macros/latex/contrib/kanbun/kanbun-example.pdf create mode 100644 macros/latex/contrib/kanbun/kanbun-example.tex create mode 100644 macros/latex/contrib/kanbun/kanbun.lua create mode 100644 macros/latex/contrib/kanbun/kanbun.pdf create mode 100644 macros/latex/contrib/kanbun/kanbun.sty create mode 100644 macros/latex/contrib/kanbun/kanbun.tex create mode 100644 macros/latex/contrib/llncs/README.md create mode 100644 macros/latex/contrib/llncs/history.txt create mode 100644 macros/latex/contrib/llncs/llncs.cls create mode 100644 macros/latex/contrib/llncs/llncsdoc.pdf create mode 100644 macros/latex/contrib/llncs/llncsdoc.tex create mode 100644 macros/latex/contrib/llncs/splncs04.bst diff --git a/CTAN.sites b/CTAN.sites index 87eff8e698..a063a39f86 100644 --- a/CTAN.sites +++ b/CTAN.sites @@ -173,6 +173,12 @@ by country): URL: https://download.nus.edu.sg/mirror/ctan/ + mirror.kku.ac.th (Thailand) + URL: http://mirror.kku.ac.th/CTAN/ + URL: https://mirror.kku.ac.th/CTAN/ + URL: rsync://mirror.kku.ac.th/CTAN/ + + Europe ====== @@ -503,6 +509,9 @@ by country): URL: https://mirrors.ucr.ac.cr/CTAN/ + bay.uchicago.edu (USA) + URL: http://bay.uchicago.edu/CTAN/ + ctan.math.illinois.edu (USA) URL: https://ctan.math.illinois.edu/ diff --git a/FILES.byname b/FILES.byname index 8d0bf71ab6..8d121ca5d4 100644 --- a/FILES.byname +++ b/FILES.byname @@ -1919,7 +1919,7 @@ 1989/12/11 | 6196 | biblio/tib/tib.man 1989/03/29 | 23265 | biblio/tib/vitaMake 2005/12/15 | 366385 | biblio/tib.zip -2021/11/05 | 16949 | CTAN.sites +2022/01/17 | 16644 | CTAN.sites 1990/10/03 | 5032 | dviware/beebe/00readme.txt 1990/10/03 | 479 | dviware/beebe/doc/00dir.cmd 1990/10/03 | 1209 | dviware/beebe/doc/00dir.lst @@ -5108,7 +5108,7 @@ 1990/10/02 | 5440 | dviware/vutex/vaxvms.hlp 1990/10/02 | 812 | dviware/vutex/vaxvms.ins 1990/10/02 | 127576 | dviware/vutex/vutex.web -2022/01/16 | 184134 | FILES.last07days +2022/01/17 | 169762 | 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 @@ -150413,20 +150413,19 @@ 2011/05/31 | 231925 | graphics/mathspic/perl/sourcecode113.html 2011/05/31 | 183530 | graphics/mathspic/perl/sourcecode113.nw 2011/05/31 | 2864043 | graphics/mathspic/perl/sourcecode113.pdf -2021/12/30 | 16852 | graphics/mcf2graph/CHANGELOG -2022/01/02 | 121796 | graphics/mcf2graph/mcf2graph.mf -2022/01/02 | 98259 | graphics/mcf2graph/mcf_data_base.mcf -2022/01/02 | 313350 | graphics/mcf2graph/mcf_example.pdf -2021/12/10 | 2417 | graphics/mcf2graph/mcf_example.tex -2022/01/02 | 2303 | graphics/mcf2graph/mcf_exa_soc.mf -2021/12/30 | 44751 | graphics/mcf2graph/mcf_man_soc.mf -2022/01/02 | 384512 | graphics/mcf2graph/mcf_manual.pdf -2022/01/02 | 62569 | graphics/mcf2graph/mcf_manual.tex -2022/01/02 | 185017 | graphics/mcf2graph/mcf_mplib_exa.pdf -2022/01/01 | 16056 | graphics/mcf2graph/mcf_mplib_exa.tex -2021/09/20 | 3963 | graphics/mcf2graph/mcf_setup.sty -2022/01/02 | 4525 | graphics/mcf2graph/README -2022/01/02 | 953578 | graphics/mcf2graph.zip +2022/01/17 | 17257 | graphics/mcf2graph/CHANGELOG +2022/01/17 | 112283 | graphics/mcf2graph/mcf2graph.mp +2022/01/17 | 100620 | graphics/mcf2graph/mcf_data_base.mcf +2022/01/17 | 431913 | graphics/mcf2graph/mcf_example.pdf +2022/01/17 | 2803 | graphics/mcf2graph/mcf_example.tex +2022/01/17 | 2062 | graphics/mcf2graph/mcf_exa_soc.mp +2022/01/17 | 42941 | graphics/mcf2graph/mcf_man_soc.mp +2022/01/17 | 291141 | graphics/mcf2graph/mcf_manual.pdf +2022/01/17 | 57835 | graphics/mcf2graph/mcf_manual.tex +2022/01/17 | 184925 | graphics/mcf2graph/mcf_mplib_exa.pdf +2022/01/17 | 14293 | graphics/mcf2graph/mcf_mplib_exa.tex +2022/01/17 | 3825 | graphics/mcf2graph/README +2022/01/17 | 961729 | graphics/mcf2graph.zip 2004/07/13 | 8567 | graphics/metaplot/axes.mp 2004/06/28 | 1122 | graphics/metaplot/examples/cap1.cc 2004/06/28 | 2178 | graphics/metaplot/examples/cap1.mp @@ -201476,14 +201475,14 @@ 2020/01/13 | 6908 | macros/latex/contrib/apa6/samples/longsample.tex 2020/01/13 | 6249 | macros/latex/contrib/apa6/samples/shortsample.tex 2020/01/13 | 627172 | macros/latex/contrib/apa6.zip -2021/11/21 | 145011 | macros/latex/contrib/apa7/apa7.dtx -2021/11/21 | 6700 | macros/latex/contrib/apa7/apa7.ins -2021/11/21 | 555774 | macros/latex/contrib/apa7/apa7.pdf -2021/11/21 | 1557 | macros/latex/contrib/apa7/README.txt +2022/01/03 | 144972 | macros/latex/contrib/apa7/apa7.dtx +2022/01/03 | 6700 | macros/latex/contrib/apa7/apa7.ins +2022/01/03 | 555936 | macros/latex/contrib/apa7/apa7.pdf +2022/01/03 | 1557 | macros/latex/contrib/apa7/README.txt 2020/06/20 | 5068 | macros/latex/contrib/apa7/samples/Figure1.pdf -2021/11/21 | 204050 | macros/latex/contrib/apa7/samples/longsample.pdf -2021/11/21 | 69708 | macros/latex/contrib/apa7/samples/shortsample.pdf -2021/11/21 | 853411 | macros/latex/contrib/apa7.zip +2022/01/03 | 204049 | macros/latex/contrib/apa7/samples/longsample.pdf +2022/01/03 | 69692 | macros/latex/contrib/apa7/samples/shortsample.pdf +2022/01/17 | 853566 | macros/latex/contrib/apa7.zip 2008/12/09 | 58148 | macros/latex/contrib/apa/apa.cls 2008/12/09 | 37023 | macros/latex/contrib/apa/apacls.html 2008/12/23 | 15056 | macros/latex/contrib/apa/apacls.txt @@ -202956,18 +202955,18 @@ 2008/05/31 | 106113 | macros/latex/contrib/beton/beton.pdf 2002/05/26 | 521 | macros/latex/contrib/beton/legal.txt 2008/06/01 | 69098 | macros/latex/contrib/beton.zip -2020/11/24 | 251 | macros/latex/contrib/bewerbung/anschrift.csv -2020/11/24 | 41294 | macros/latex/contrib/bewerbung/argetabelle-example.pdf -2020/11/24 | 2015 | macros/latex/contrib/bewerbung/argetabelle-example.tex -2020/11/24 | 116705 | macros/latex/contrib/bewerbung/bewerbung.dtx -2020/11/24 | 148575 | macros/latex/contrib/bewerbung/bewerbung-example.pdf -2020/11/24 | 3686 | macros/latex/contrib/bewerbung/bewerbung-example.tex -2020/11/24 | 2341 | macros/latex/contrib/bewerbung/bewerbung.ins -2020/11/24 | 693654 | macros/latex/contrib/bewerbung/bewerbung.pdf -2017/06/07 | 13720 | macros/latex/contrib/bewerbung/Foto.pdf -2020/11/24 | 4525 | macros/latex/contrib/bewerbung/README -2020/11/24 | 4698 | macros/latex/contrib/bewerbung/README_DE -2020/11/24 | 920487 | macros/latex/contrib/bewerbung.zip +2022/01/17 | 251 | macros/latex/contrib/bewerbung/anschrift.csv +2022/01/17 | 43179 | macros/latex/contrib/bewerbung/argetabelle-example.pdf +2022/01/17 | 2015 | macros/latex/contrib/bewerbung/argetabelle-example.tex +2022/01/17 | 116023 | macros/latex/contrib/bewerbung/bewerbung.dtx +2022/01/17 | 144541 | macros/latex/contrib/bewerbung/bewerbung-example.pdf +2022/01/17 | 3686 | macros/latex/contrib/bewerbung/bewerbung-example.tex +2022/01/17 | 2340 | macros/latex/contrib/bewerbung/bewerbung.ins +2022/01/17 | 765001 | macros/latex/contrib/bewerbung/bewerbung.pdf +2021/04/03 | 13720 | macros/latex/contrib/bewerbung/Foto.pdf +2022/01/17 | 4517 | macros/latex/contrib/bewerbung/README +2022/01/17 | 4690 | macros/latex/contrib/bewerbung/README_DE +2022/01/17 | 967530 | macros/latex/contrib/bewerbung.zip 2009/09/08 | 62493 | macros/latex/contrib/bez123/bez123.dtx 2009/09/08 | 2563 | macros/latex/contrib/bez123/bez123.ins 2009/09/08 | 289117 | macros/latex/contrib/bez123/bez123.pdf @@ -203844,14 +203843,14 @@ 2021/03/16 | 5876 | macros/latex/contrib/biblatex-contrib/biblatex-license/biblatex-license.tex 2021/03/16 | 3485 | macros/latex/contrib/biblatex-contrib/biblatex-license/README.md 2021/03/16 | 232289 | macros/latex/contrib/biblatex-contrib/biblatex-license.zip -2021/08/22 | 3043 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/biblatex-lncs-test.bib -2021/08/22 | 2206 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/biblatex-lncs-test.tex -2021/08/22 | 19039 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/LICENSE -2021/08/22 | 10388 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/lncs.bbx -2021/08/22 | 153 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/lncs.cbx -2021/08/22 | 184 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/lncs.dbx -2021/08/22 | 1462 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/README.md -2021/08/22 | 12927 | macros/latex/contrib/biblatex-contrib/biblatex-lncs.zip +2022/01/17 | 3043 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/biblatex-lncs-test.bib +2022/01/17 | 2206 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/biblatex-lncs-test.tex +2022/01/17 | 19039 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/LICENSE +2022/01/17 | 10507 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/lncs.bbx +2022/01/17 | 153 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/lncs.cbx +2022/01/17 | 184 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/lncs.dbx +2022/01/17 | 1462 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/README.md +2022/01/17 | 12953 | macros/latex/contrib/biblatex-contrib/biblatex-lncs.zip 2019/02/03 | 1390 | macros/latex/contrib/biblatex-contrib/biblatex-lni/CHANGELOG.md 2019/02/03 | 19106 | macros/latex/contrib/biblatex-contrib/biblatex-lni/LICENSE 2019/02/03 | 10417 | macros/latex/contrib/biblatex-contrib/biblatex-lni/LNI.bbx @@ -207675,11 +207674,11 @@ 2012/12/31 | 7429 | macros/latex/contrib/dblfloatfix/dblfloatfix.sty 2012/12/31 | 2019 | macros/latex/contrib/dblfloatfix/dblfloatfix.tex 2013/01/29 | 220773 | macros/latex/contrib/dblfloatfix.zip -2022/01/13 | 122225 | macros/latex/contrib/dbshow/dbshow.dtx -2022/01/13 | 3425 | macros/latex/contrib/dbshow/dbshow.ins -2022/01/13 | 440283 | macros/latex/contrib/dbshow/dbshow.pdf -2022/01/13 | 2197 | macros/latex/contrib/dbshow/README.md -2022/01/13 | 454999 | macros/latex/contrib/dbshow.zip +2022/01/17 | 167135 | macros/latex/contrib/dbshow/dbshow.dtx +2022/01/17 | 3425 | macros/latex/contrib/dbshow/dbshow.ins +2022/01/17 | 602868 | macros/latex/contrib/dbshow/dbshow.pdf +2022/01/17 | 2197 | macros/latex/contrib/dbshow/README.md +2022/01/17 | 624711 | macros/latex/contrib/dbshow.zip 2021/09/03 | 59921 | macros/latex/contrib/dccpaper/dccpaper-by.eps 2021/09/03 | 5012 | macros/latex/contrib/dccpaper/dccpaper-by.pdf 2021/09/03 | 99097 | macros/latex/contrib/dccpaper/dccpaper.dtx @@ -208604,12 +208603,12 @@ 2008/02/10 | 19110 | macros/latex/contrib/ean13isbn/License.txt 2021/01/24 | 422 | macros/latex/contrib/ean13isbn/README 2021/01/24 | 322624 | macros/latex/contrib/ean13isbn.zip -2022/01/16 | 78696 | macros/latex/contrib/easybook/easybook.dtx +2022/01/17 | 78899 | macros/latex/contrib/easybook/easybook.dtx 2022/01/02 | 2085 | macros/latex/contrib/easybook/easybook.ins -2022/01/16 | 595578 | macros/latex/contrib/easybook/easybook.pdf -2022/01/16 | 82639 | macros/latex/contrib/easybook/easybook.tex +2022/01/17 | 595806 | macros/latex/contrib/easybook/easybook.pdf +2022/01/17 | 82833 | macros/latex/contrib/easybook/easybook.tex 2021/11/17 | 795 | macros/latex/contrib/easybook/README.md -2022/01/16 | 637256 | macros/latex/contrib/easybook.zip +2022/01/17 | 637606 | macros/latex/contrib/easybook.zip 2009/06/17 | 82589 | macros/latex/contrib/easy/doc/docbib.pdf 2009/06/17 | 78378 | macros/latex/contrib/easy/doc/docbmat.pdf 2009/06/17 | 99132 | macros/latex/contrib/easy/doc/doceqn.pdf @@ -214698,6 +214697,14 @@ 2018/09/21 | 1402 | macros/latex/contrib/kalendarium/README.md 2018/09/23 | 385406 | macros/latex/contrib/kalendarium.zip 2008/06/10 | 9939 | macros/latex/contrib/kalender/kalender.sty +2022/01/16 | 45616 | macros/latex/contrib/kanbun/kanbun-example.pdf +2022/01/17 | 2323 | macros/latex/contrib/kanbun/kanbun-example.tex +2022/01/16 | 8545 | macros/latex/contrib/kanbun/kanbun.lua +2022/01/16 | 376249 | macros/latex/contrib/kanbun/kanbun.pdf +2022/01/17 | 12474 | macros/latex/contrib/kanbun/kanbun.sty +2022/01/17 | 11209 | macros/latex/contrib/kanbun/kanbun.tex +2022/01/17 | 991 | macros/latex/contrib/kanbun/README.md +2022/01/17 | 427335 | macros/latex/contrib/kanbun.zip 2019/07/24 | 203112 | macros/latex/contrib/kantlipsum/kantlipsum.dtx 2019/07/24 | 585715 | macros/latex/contrib/kantlipsum/kantlipsum.pdf 2019/07/24 | 1018 | macros/latex/contrib/kantlipsum/README.md @@ -216051,6 +216058,13 @@ 2020/05/10 | 6666 | macros/latex/contrib/llncsconf/llncsconf.sty 2020/05/10 | 3467 | macros/latex/contrib/llncsconf/README.md 2020/05/10 | 127321 | macros/latex/contrib/llncsconf.zip +2022/01/17 | 7636 | macros/latex/contrib/llncs/history.txt +2022/01/17 | 42307 | macros/latex/contrib/llncs/llncs.cls +2022/01/17 | 218741 | macros/latex/contrib/llncs/llncsdoc.pdf +2022/01/17 | 16935 | macros/latex/contrib/llncs/llncsdoc.tex +2022/01/17 | 991 | macros/latex/contrib/llncs/README.md +2022/01/17 | 32146 | macros/latex/contrib/llncs/splncs04.bst +2022/01/17 | 216661 | macros/latex/contrib/llncs.zip 2012/05/30 | 40104 | macros/latex/contrib/lmacs/docs/lmacs.pdf 2012/05/16 | 1296 | macros/latex/contrib/lmacs/examples/lmacs_aeb.def 2012/05/16 | 142 | macros/latex/contrib/lmacs/examples/lmacs_aeb.js @@ -275375,10 +275389,10 @@ 2007/07/22 | 600 | support/wp2latex/readme.1st 2021/08/01 | 7401 | support/wp2latex/readme.txt 2020/02/11 | 305310 | support/wp2latex/wp2latex-3.87.deb -2020/02/04 | 3581789 | support/wp2latex/wp2latex-3.87.zip +2020/03/01 | 3591233 | support/wp2latex/wp2latex-3.88.zip 2018/01/26 | 45297 | support/wp2latex/wp2latex.doc.htm 2018/01/26 | 7259 | support/wp2latex/wp2latex.faq -2020/02/02 | 1647887 | support/wp2latex/WP2LaTeX_Installer-3.87.exe +2020/03/01 | 1650350 | support/wp2latex/WP2LaTeX_Installer-3.88.exe 2021/08/01 | 1241 | support/wp2latex/wp2latex.lsm 2018/01/26 | 35145 | support/wp2latex/wp2latex_pas-2.3.zip 2000/02/22 | 481 | support/wsuipa2tipa/README @@ -280100,7 +280114,7 @@ 2020/03/04 | 408 | systems/texlive/tlnet/archive/collection-langpolish.r54074.tar.xz 2020/03/04 | 392 | systems/texlive/tlnet/archive/collection-langportuguese.r54074.tar.xz 2020/03/07 | 380 | systems/texlive/tlnet/archive/collection-langspanish.r54141.tar.xz -2022/01/15 | 6540 | systems/texlive/tlnet/archive/collection-latexextra.r61607.tar.xz +2022/01/17 | 6548 | systems/texlive/tlnet/archive/collection-latexextra.r61624.tar.xz 2020/12/03 | 696 | systems/texlive/tlnet/archive/collection-latex.r57048.tar.xz 2021/02/24 | 772 | systems/texlive/tlnet/archive/collection-latexrecommended.r57862.tar.xz 2021/10/15 | 780 | systems/texlive/tlnet/archive/collection-luatex.r60764.tar.xz @@ -281448,9 +281462,9 @@ 2021/07/19 | 313228 | systems/texlive/tlnet/archive/easing.doc.r59975.tar.xz 2021/07/19 | 2220 | systems/texlive/tlnet/archive/easing.r59975.tar.xz 2021/07/19 | 7876 | systems/texlive/tlnet/archive/easing.source.r59975.tar.xz -2022/01/16 | 616464 | systems/texlive/tlnet/archive/easybook.doc.r61616.tar.xz -2022/01/16 | 17052 | systems/texlive/tlnet/archive/easybook.r61616.tar.xz -2022/01/16 | 17112 | systems/texlive/tlnet/archive/easybook.source.r61616.tar.xz +2022/01/17 | 617072 | systems/texlive/tlnet/archive/easybook.doc.r61623.tar.xz +2022/01/17 | 17076 | systems/texlive/tlnet/archive/easybook.r61623.tar.xz +2022/01/17 | 17132 | systems/texlive/tlnet/archive/easybook.source.r61623.tar.xz 2019/02/28 | 4540 | systems/texlive/tlnet/archive/easy.doc.r19440.tar.xz 2020/09/08 | 175976 | systems/texlive/tlnet/archive/easyfig.doc.r56291.tar.xz 2020/09/08 | 1936 | systems/texlive/tlnet/archive/easyfig.r56291.tar.xz @@ -284193,6 +284207,9 @@ 2019/02/28 | 348 | systems/texlive/tlnet/archive/latexindent.x86_64-linuxmusl.r46840.tar.xz 2019/02/28 | 344 | systems/texlive/tlnet/archive/latexindent.x86_64-linux.r32150.tar.xz 2019/02/28 | 344 | systems/texlive/tlnet/archive/latexindent.x86_64-solaris.r32150.tar.xz +2022/01/17 | 929856 | systems/texlive/tlnet/archive/latex-lab-dev.doc.r61624.tar.xz +2022/01/17 | 2656 | systems/texlive/tlnet/archive/latex-lab-dev.r61624.tar.xz +2022/01/17 | 5572 | systems/texlive/tlnet/archive/latex-lab-dev.source.r61624.tar.xz 2021/10/27 | 969744 | systems/texlive/tlnet/archive/latex-make.doc.r60874.tar.xz 2021/10/27 | 9596 | systems/texlive/tlnet/archive/latex-make.r60874.tar.xz 2021/10/27 | 29356 | systems/texlive/tlnet/archive/latex-make.source.r60874.tar.xz @@ -289250,7 +289267,7 @@ 2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.amd64-freebsd.r55172.tar.xz 2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.amd64-netbsd.r55172.tar.xz 2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.armhf-linux.r55172.tar.xz -2022/01/16 | 402676 | systems/texlive/tlnet/archive/texlive-scripts.doc.r61609.tar.xz +2022/01/17 | 402736 | systems/texlive/tlnet/archive/texlive-scripts.doc.r61621.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 @@ -289274,7 +289291,7 @@ 2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.i386-linux.r55172.tar.xz 2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.i386-netbsd.r55172.tar.xz 2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.i386-solaris.r55172.tar.xz -2022/01/16 | 108224 | systems/texlive/tlnet/archive/texlive-scripts.r61609.tar.xz +2022/01/17 | 108264 | systems/texlive/tlnet/archive/texlive-scripts.r61621.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 @@ -291050,16 +291067,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/12/06 | 105168 | systems/texlive/tlnet/install-tl -2022/01/16 | 6811727 | systems/texlive/tlnet/install-tl-unx.tar.gz -2022/01/16 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 -2022/01/16 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc +2022/01/17 | 6811619 | systems/texlive/tlnet/install-tl-unx.tar.gz +2022/01/17 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 +2022/01/17 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc 2021/04/11 | 4945 | systems/texlive/tlnet/install-tl-windows.bat -2022/01/16 | 20874648 | systems/texlive/tlnet/install-tl-windows.exe -2022/01/16 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 -2022/01/16 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc -2022/01/16 | 25631634 | systems/texlive/tlnet/install-tl.zip -2022/01/16 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 -2022/01/16 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc +2022/01/17 | 20873972 | systems/texlive/tlnet/install-tl-windows.exe +2022/01/17 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 +2022/01/17 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc +2022/01/17 | 25631642 | systems/texlive/tlnet/install-tl.zip +2022/01/17 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 +2022/01/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 @@ -291069,7 +291086,7 @@ 2021/07/03 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg 2022/01/12 | 49482 | systems/texlive/tlnet/tlpkg/installer/config.guess 2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt -2022/01/15 | 6615 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl +2022/01/16 | 6661 | 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 @@ -291111,12 +291128,12 @@ 2021/05/16 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm 2021/12/21 | 5429 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm 2021/12/21 | 27582 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm -2022/01/16 | 17065106 | systems/texlive/tlnet/tlpkg/texlive.tlpdb -2022/01/16 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +2022/01/17 | 17067120 | systems/texlive/tlnet/tlpkg/texlive.tlpdb +2022/01/17 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 2021/12/21 | 86654 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm -2022/01/16 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 -2022/01/16 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc -2022/01/16 | 2340064 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +2022/01/17 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +2022/01/17 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +2022/01/17 | 2341356 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz 2021/12/21 | 58848 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm 2021/12/21 | 42112 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm 2021/12/21 | 16130 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm @@ -296173,7 +296190,7 @@ 2020/10/03 | 318630 | systems/win32/miktex/tm/packages/filehook.tar.lzma 2012/12/04 | 924573 | systems/win32/miktex/tm/packages/fileinfo.tar.lzma 2011/09/21 | 281409 | systems/win32/miktex/tm/packages/filemod.tar.lzma -2022/01/16 | 631204 | systems/win32/miktex/tm/packages/files.csv.lzma +2022/01/17 | 631204 | 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 @@ -297671,9 +297688,9 @@ 2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma 2021/12/09 | 39714 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma 2021/12/09 | 43639 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma -2022/01/16 | 260690 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma -2022/01/16 | 1404512 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma -2022/01/16 | 1300697 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma +2022/01/17 | 260747 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma +2022/01/17 | 1404993 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma +2022/01/17 | 1300010 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma 2021/12/09 | 13527 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma 2021/12/09 | 14417 | systems/win32/miktex/tm/packages/miktex-zzip-bin-x64-2.9.tar.lzma 2016/07/15 | 35914 | systems/win32/miktex/tm/packages/mil3.tar.lzma @@ -297897,189 +297914,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 -2022/01/16 | 631997 | systems/win32/miktex/tm/packages/next/files.csv.lzma -2022/01/16 | 51535 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma -2022/01/16 | 57341 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma -2022/01/16 | 959840 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma -2022/01/16 | 1087177 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma -2022/01/16 | 28754 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma -2022/01/16 | 31551 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma -2022/01/16 | 30173 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma -2022/01/16 | 35242 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma -2022/01/16 | 56674 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma -2022/01/16 | 65086 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma -2022/01/16 | 86664 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma -2022/01/16 | 95330 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma -2022/01/16 | 68782 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma -2022/01/16 | 77066 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma -2022/01/16 | 27269 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma -2022/01/16 | 31336 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma -2022/01/16 | 332744 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma -2022/01/16 | 394302 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma -2022/01/16 | 32958 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma -2022/01/16 | 37097 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma -2022/01/16 | 51501 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma -2022/01/16 | 57256 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma -2022/01/16 | 256461 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma -2022/01/16 | 281545 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma -2022/01/16 | 179828 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma -2022/01/16 | 196135 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma -2022/01/16 | 54989 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma -2022/01/16 | 62427 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma -2022/01/16 | 21322 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma -2022/01/16 | 24092 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma -2022/01/16 | 470364 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma -2022/01/16 | 46095 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma -2022/01/16 | 52043 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma -2022/01/16 | 285739 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma -2022/01/16 | 326302 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma -2022/01/16 | 41391 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma -2022/01/16 | 45775 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma -2022/01/16 | 120220 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma -2022/01/16 | 135133 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma -2022/01/16 | 1304426 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma -2022/01/16 | 1452739 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma -2022/01/16 | 99701 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma -2022/01/16 | 113014 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma -2022/01/16 | 43670 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma -2022/01/16 | 48844 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma -2022/01/16 | 25104 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma -2022/01/16 | 28556 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma -2022/01/16 | 57029 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma -2022/01/16 | 63367 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma -2022/01/16 | 136039 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma -2022/01/16 | 155304 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma -2022/01/16 | 73462 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma -2022/01/16 | 79037 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma -2022/01/16 | 71991 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma -2022/01/16 | 81532 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma -2022/01/16 | 259313 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma -2022/01/16 | 296106 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma -2022/01/16 | 22154 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma -2022/01/16 | 25063 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma -2022/01/16 | 97082 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma -2022/01/16 | 112664 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma -2022/01/16 | 64575 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma -2022/01/16 | 73280 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma -2022/01/16 | 96923 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma -2022/01/16 | 115647 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma -2022/01/16 | 38468 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma -2022/01/16 | 43822 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma -2022/01/16 | 483936 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma -2022/01/16 | 566721 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma -2022/01/16 | 152076 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma -2022/01/16 | 168843 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma -2022/01/16 | 95484 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma -2022/01/16 | 109562 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma -2022/01/16 | 16500 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma -2022/01/16 | 18359 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma -2022/01/16 | 28321 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma -2022/01/16 | 30513 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma -2022/01/16 | 630239 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma -2022/01/16 | 681613 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma -2022/01/16 | 532455 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma -2022/01/16 | 599013 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma -2022/01/16 | 477924 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma -2022/01/16 | 527828 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma -2022/01/16 | 93942 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma -2022/01/16 | 103440 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma -2022/01/16 | 1731303 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma -2022/01/16 | 1992377 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma -2022/01/16 | 68015 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma -2022/01/16 | 74059 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma -2022/01/16 | 27699 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma -2022/01/16 | 32155 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma -2022/01/16 | 7757 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma -2022/01/16 | 8782 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma -2022/01/16 | 199663 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma -2022/01/16 | 216349 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma -2022/01/16 | 251406 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma -2022/01/16 | 286565 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma -2022/01/16 | 99181 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma -2022/01/16 | 104678 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma -2022/01/16 | 126843 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma -2022/01/16 | 139122 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma -2022/01/16 | 246042 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma -2022/01/16 | 276122 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma -2022/01/16 | 199684 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma -2022/01/16 | 181570 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma -2022/01/16 | 68652 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma -2022/01/16 | 76281 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma -2022/01/16 | 31399 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma -2022/01/16 | 35175 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma -2022/01/16 | 38565 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma -2022/01/16 | 43928 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma -2022/01/16 | 43451 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma -2022/01/16 | 47911 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma -2022/01/16 | 45892 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma -2022/01/16 | 52310 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma -2022/01/16 | 198989 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma -2022/01/16 | 213500 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma -2022/01/16 | 36057 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma -2022/01/16 | 41266 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma -2022/01/16 | 753220 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma -2022/01/16 | 824782 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma -2022/01/16 | 200083 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma -2022/01/16 | 202745 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma -2022/01/16 | 210222 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma -2022/01/16 | 244846 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma -2022/01/16 | 78966 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma -2022/01/16 | 88163 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma -2022/01/16 | 1180762 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma -2022/01/16 | 1322450 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma -2022/01/16 | 20195 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma -2022/01/16 | 23948 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma -2022/01/16 | 31575 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma -2022/01/16 | 37390 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma -2022/01/16 | 64736 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma -2022/01/16 | 72884 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma -2022/01/16 | 50850 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma -2022/01/16 | 58660 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma -2022/01/16 | 691228 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin.tar.lzma -2022/01/16 | 752398 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma -2022/01/16 | 1355965 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma -2022/01/16 | 1499385 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma -2022/01/16 | 42770 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma -2022/01/16 | 52551 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma -2022/01/16 | 57446 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma -2022/01/16 | 63757 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma -2022/01/16 | 25537 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma -2022/01/16 | 27503 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma -2022/01/16 | 16578 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma -2022/01/16 | 18484 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma -2022/01/16 | 64578 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma -2022/01/16 | 70971 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma -2022/01/16 | 157601 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma -2022/01/16 | 172572 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma -2022/01/16 | 58708 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma -2022/01/16 | 67223 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma -2022/01/16 | 101459 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma -2022/01/16 | 109142 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma -2022/01/16 | 2672852 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma -2022/01/16 | 2797477 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma -2022/01/16 | 55339 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma -2022/01/16 | 62338 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma -2022/01/16 | 37117 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma -2022/01/16 | 41208 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma -2022/01/16 | 28693 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma -2022/01/16 | 34032 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma -2022/01/16 | 67763 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma -2022/01/16 | 71915 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma -2022/01/16 | 317773 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma -2022/01/16 | 355357 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma -2022/01/16 | 55734 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma -2022/01/16 | 57402 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma -2022/01/16 | 591458 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma -2022/01/16 | 629342 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma -2022/01/16 | 39737 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma -2022/01/16 | 43697 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma -2022/01/16 | 260713 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma -2022/01/16 | 1405492 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma -2022/01/16 | 1301304 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma -2022/01/16 | 13512 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma -2022/01/16 | 14412 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma +2022/01/17 | 631997 | systems/win32/miktex/tm/packages/next/files.csv.lzma +2022/01/17 | 51534 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma +2022/01/17 | 57340 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma +2022/01/17 | 959837 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma +2022/01/17 | 1087176 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma +2022/01/17 | 28758 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma +2022/01/17 | 31553 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma +2022/01/17 | 30172 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma +2022/01/17 | 35242 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma +2022/01/17 | 56676 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma +2022/01/17 | 65086 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma +2022/01/17 | 86664 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma +2022/01/17 | 95330 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma +2022/01/17 | 68781 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma +2022/01/17 | 77065 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma +2022/01/17 | 27269 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma +2022/01/17 | 31336 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma +2022/01/17 | 332746 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma +2022/01/17 | 394301 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma +2022/01/17 | 32958 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma +2022/01/17 | 37097 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma +2022/01/17 | 51502 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma +2022/01/17 | 57256 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma +2022/01/17 | 256460 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma +2022/01/17 | 281547 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma +2022/01/17 | 179829 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma +2022/01/17 | 196133 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma +2022/01/17 | 54992 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma +2022/01/17 | 62428 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma +2022/01/17 | 21322 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma +2022/01/17 | 24091 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma +2022/01/17 | 470363 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma +2022/01/17 | 46096 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma +2022/01/17 | 52043 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma +2022/01/17 | 285739 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma +2022/01/17 | 326303 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma +2022/01/17 | 41390 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma +2022/01/17 | 45773 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma +2022/01/17 | 120220 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma +2022/01/17 | 135131 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma +2022/01/17 | 1304426 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma +2022/01/17 | 1452739 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma +2022/01/17 | 99701 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma +2022/01/17 | 113014 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma +2022/01/17 | 43670 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma +2022/01/17 | 48844 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma +2022/01/17 | 25103 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma +2022/01/17 | 28556 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma +2022/01/17 | 57030 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma +2022/01/17 | 63367 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma +2022/01/17 | 136038 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma +2022/01/17 | 155304 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma +2022/01/17 | 73463 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma +2022/01/17 | 79036 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma +2022/01/17 | 71991 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma +2022/01/17 | 81530 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma +2022/01/17 | 259313 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma +2022/01/17 | 296107 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma +2022/01/17 | 22154 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma +2022/01/17 | 25064 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma +2022/01/17 | 97082 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma +2022/01/17 | 112663 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma +2022/01/17 | 64575 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma +2022/01/17 | 73280 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma +2022/01/17 | 96924 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma +2022/01/17 | 115647 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma +2022/01/17 | 38469 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma +2022/01/17 | 43822 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma +2022/01/17 | 483939 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma +2022/01/17 | 566720 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma +2022/01/17 | 152077 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma +2022/01/17 | 168843 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma +2022/01/17 | 95485 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma +2022/01/17 | 109562 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma +2022/01/17 | 16502 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma +2022/01/17 | 18359 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma +2022/01/17 | 28320 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma +2022/01/17 | 30513 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma +2022/01/17 | 630240 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma +2022/01/17 | 681613 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma +2022/01/17 | 532453 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma +2022/01/17 | 599014 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma +2022/01/17 | 477926 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma +2022/01/17 | 527829 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma +2022/01/17 | 93941 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma +2022/01/17 | 103440 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma +2022/01/17 | 1731303 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma +2022/01/17 | 1992377 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma +2022/01/17 | 68014 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma +2022/01/17 | 74060 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma +2022/01/17 | 27698 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma +2022/01/17 | 32155 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma +2022/01/17 | 7758 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma +2022/01/17 | 8783 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma +2022/01/17 | 199664 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma +2022/01/17 | 216350 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma +2022/01/17 | 251405 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma +2022/01/17 | 286565 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma +2022/01/17 | 99180 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma +2022/01/17 | 104678 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma +2022/01/17 | 126843 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma +2022/01/17 | 139123 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma +2022/01/17 | 246043 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma +2022/01/17 | 276121 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma +2022/01/17 | 199685 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma +2022/01/17 | 181570 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma +2022/01/17 | 68654 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma +2022/01/17 | 76281 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma +2022/01/17 | 31400 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma +2022/01/17 | 35174 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma +2022/01/17 | 38565 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma +2022/01/17 | 43927 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma +2022/01/17 | 43452 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma +2022/01/17 | 47910 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma +2022/01/17 | 45892 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma +2022/01/17 | 52310 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma +2022/01/17 | 198989 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma +2022/01/17 | 213500 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma +2022/01/17 | 36058 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma +2022/01/17 | 41266 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma +2022/01/17 | 753220 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma +2022/01/17 | 824780 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma +2022/01/17 | 200083 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma +2022/01/17 | 202745 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma +2022/01/17 | 210221 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma +2022/01/17 | 244845 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma +2022/01/17 | 78966 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma +2022/01/17 | 88163 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma +2022/01/17 | 1180762 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma +2022/01/17 | 1322449 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma +2022/01/17 | 20195 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma +2022/01/17 | 23948 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma +2022/01/17 | 31573 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma +2022/01/17 | 37391 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma +2022/01/17 | 64735 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma +2022/01/17 | 72884 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma +2022/01/17 | 50849 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma +2022/01/17 | 58661 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma +2022/01/17 | 691229 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin.tar.lzma +2022/01/17 | 752397 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma +2022/01/17 | 1355965 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma +2022/01/17 | 1499387 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma +2022/01/17 | 42769 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma +2022/01/17 | 52552 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma +2022/01/17 | 57445 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma +2022/01/17 | 63755 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma +2022/01/17 | 25537 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma +2022/01/17 | 27503 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma +2022/01/17 | 16580 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma +2022/01/17 | 18483 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma +2022/01/17 | 64577 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma +2022/01/17 | 70971 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma +2022/01/17 | 157600 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma +2022/01/17 | 172572 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma +2022/01/17 | 58707 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma +2022/01/17 | 67222 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma +2022/01/17 | 101458 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma +2022/01/17 | 109143 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma +2022/01/17 | 2672853 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma +2022/01/17 | 2797478 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma +2022/01/17 | 55336 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma +2022/01/17 | 62339 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma +2022/01/17 | 37117 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma +2022/01/17 | 41208 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma +2022/01/17 | 28694 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma +2022/01/17 | 34032 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma +2022/01/17 | 67765 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma +2022/01/17 | 71915 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma +2022/01/17 | 317773 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma +2022/01/17 | 355357 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma +2022/01/17 | 55735 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma +2022/01/17 | 57402 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma +2022/01/17 | 591458 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma +2022/01/17 | 629342 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma +2022/01/17 | 39736 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma +2022/01/17 | 43699 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma +2022/01/17 | 260695 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma +2022/01/17 | 1405559 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma +2022/01/17 | 1300187 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma +2022/01/17 | 13514 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma +2022/01/17 | 14412 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma 2019/03/12 | 1412 | systems/win32/miktex/tm/packages/nextpage.tar.lzma -2022/01/16 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini +2022/01/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 @@ -298522,7 +298539,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 -2022/01/16 | 922 | systems/win32/miktex/tm/packages/pr.ini +2022/01/17 | 922 | 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 @@ -300261,7 +300278,7 @@ 2004/06/04 | 404 | tds/tds.sed 2004/06/23 | 65418 | tds/tds.tex 2019/05/29 | 304264 | tds.zip -2022/01/17 | 186 | timestamp +2022/01/18 | 186 | timestamp 2002/08/26 | 61898 | usergrps/dante/antrag.pdf 2002/08/26 | 118217 | usergrps/dante/antrag.ps 2021/11/11 | 917 | usergrps/dante/dtk/doc/beispiel.bib diff --git a/FILES.byname.gz b/FILES.byname.gz index ee465bb772..c3855b97b5 100644 Binary files a/FILES.byname.gz and b/FILES.byname.gz differ diff --git a/FILES.last07days b/FILES.last07days index 217989c31d..cad7100483 100644 --- a/FILES.last07days +++ b/FILES.last07days @@ -1,233 +1,292 @@ +2022/01/17 | 99701 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma +2022/01/17 | 991 | macros/latex/contrib/llncs/README.md +2022/01/17 | 991 | macros/latex/contrib/kanbun/README.md +2022/01/17 | 99180 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma +2022/01/17 | 97082 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma +2022/01/17 | 96924 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma +2022/01/17 | 967530 | macros/latex/contrib/bewerbung.zip +2022/01/17 | 961729 | graphics/mcf2graph.zip +2022/01/17 | 959837 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma +2022/01/17 | 95485 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma +2022/01/17 | 95330 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma +2022/01/17 | 93941 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma +2022/01/17 | 929856 | systems/texlive/tlnet/archive/latex-lab-dev.doc.r61624.tar.xz +2022/01/17 | 922 | systems/win32/miktex/tm/packages/pr.ini +2022/01/17 | 88163 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma +2022/01/17 | 8783 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma +2022/01/17 | 86664 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma +2022/01/17 | 853566 | macros/latex/contrib/apa7.zip +2022/01/17 | 82833 | macros/latex/contrib/easybook/easybook.tex +2022/01/17 | 824780 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma +2022/01/17 | 81530 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma +2022/01/17 | 79036 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma +2022/01/17 | 78966 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma +2022/01/17 | 78899 | macros/latex/contrib/easybook/easybook.dtx +2022/01/17 | 7758 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma +2022/01/17 | 77065 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma +2022/01/17 | 765001 | macros/latex/contrib/bewerbung/bewerbung.pdf +2022/01/17 | 7636 | macros/latex/contrib/llncs/history.txt +2022/01/17 | 76281 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma +2022/01/17 | 753220 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma +2022/01/17 | 752397 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma +2022/01/17 | 74060 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma +2022/01/17 | 73463 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma +2022/01/17 | 73280 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma +2022/01/17 | 72884 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma +2022/01/17 | 71991 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma +2022/01/17 | 71915 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma +2022/01/17 | 70971 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma +2022/01/17 | 691229 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin.tar.lzma +2022/01/17 | 68781 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma +2022/01/17 | 68654 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma +2022/01/17 | 681613 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma +2022/01/17 | 6811619 | systems/texlive/tlnet/install-tl-unx.tar.gz +2022/01/17 | 68014 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma +2022/01/17 | 67765 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma +2022/01/17 | 67222 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma +2022/01/17 | 6548 | systems/texlive/tlnet/archive/collection-latexextra.r61624.tar.xz +2022/01/17 | 65086 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma +2022/01/17 | 64735 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma +2022/01/17 | 64577 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma +2022/01/17 | 64575 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma +2022/01/17 | 637606 | macros/latex/contrib/easybook.zip +2022/01/17 | 63755 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma +2022/01/17 | 63367 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma +2022/01/17 | 631997 | systems/win32/miktex/tm/packages/next/files.csv.lzma +2022/01/17 | 631204 | systems/win32/miktex/tm/packages/files.csv.lzma +2022/01/17 | 630240 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma +2022/01/17 | 629342 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma +2022/01/17 | 624711 | macros/latex/contrib/dbshow.zip +2022/01/17 | 62428 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma +2022/01/17 | 62339 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma +2022/01/17 | 617072 | systems/texlive/tlnet/archive/easybook.doc.r61623.tar.xz +2022/01/17 | 602868 | macros/latex/contrib/dbshow/dbshow.pdf +2022/01/17 | 599014 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma +2022/01/17 | 595806 | macros/latex/contrib/easybook/easybook.pdf +2022/01/17 | 591458 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma +2022/01/17 | 58707 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma +2022/01/17 | 58661 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma +2022/01/17 | 57835 | graphics/mcf2graph/mcf_manual.tex +2022/01/17 | 57445 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma +2022/01/17 | 57402 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma +2022/01/17 | 57340 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma +2022/01/17 | 57256 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma +2022/01/17 | 57030 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma +2022/01/17 | 56676 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma +2022/01/17 | 566720 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma +2022/01/17 | 55735 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma +2022/01/17 | 5572 | systems/texlive/tlnet/archive/latex-lab-dev.source.r61624.tar.xz +2022/01/17 | 55336 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma +2022/01/17 | 54992 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma +2022/01/17 | 532453 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma +2022/01/17 | 527829 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma +2022/01/17 | 52552 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma +2022/01/17 | 52310 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma +2022/01/17 | 52043 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma +2022/01/17 | 51534 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma +2022/01/17 | 51502 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma +2022/01/17 | 50849 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma +2022/01/17 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +2022/01/17 | 48844 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma +2022/01/17 | 483939 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma +2022/01/17 | 47910 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma +2022/01/17 | 477926 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma +2022/01/17 | 470363 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma +2022/01/17 | 4690 | macros/latex/contrib/bewerbung/README_DE +2022/01/17 | 46096 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma +2022/01/17 | 45892 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma +2022/01/17 | 45773 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma +2022/01/17 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +2022/01/17 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc +2022/01/17 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc +2022/01/17 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc +2022/01/17 | 4517 | macros/latex/contrib/bewerbung/README +2022/01/17 | 43927 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma +2022/01/17 | 43822 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma +2022/01/17 | 43699 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma +2022/01/17 | 43670 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma +2022/01/17 | 43452 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma +2022/01/17 | 431913 | graphics/mcf2graph/mcf_example.pdf +2022/01/17 | 43179 | macros/latex/contrib/bewerbung/argetabelle-example.pdf +2022/01/17 | 42941 | graphics/mcf2graph/mcf_man_soc.mp +2022/01/17 | 42769 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma +2022/01/17 | 427335 | macros/latex/contrib/kanbun.zip +2022/01/17 | 42307 | macros/latex/contrib/llncs/llncs.cls +2022/01/17 | 41390 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma +2022/01/17 | 41266 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma +2022/01/17 | 41208 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma +2022/01/17 | 402736 | systems/texlive/tlnet/archive/texlive-scripts.doc.r61621.tar.xz +2022/01/17 | 39736 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma +2022/01/17 | 394301 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma +2022/01/17 | 38565 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma +2022/01/17 | 38469 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma +2022/01/17 | 3825 | graphics/mcf2graph/README +2022/01/17 | 37391 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma +2022/01/17 | 37117 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma +2022/01/17 | 37097 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma +2022/01/17 | 3686 | macros/latex/contrib/bewerbung/bewerbung-example.tex +2022/01/17 | 36058 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma +2022/01/17 | 355357 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma +2022/01/17 | 35242 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma +2022/01/17 | 35174 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma +2022/01/17 | 3425 | macros/latex/contrib/dbshow/dbshow.ins +2022/01/17 | 34032 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma +2022/01/17 | 332746 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma +2022/01/17 | 32958 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma +2022/01/17 | 326303 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma +2022/01/17 | 32155 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma +2022/01/17 | 32146 | macros/latex/contrib/llncs/splncs04.bst +2022/01/17 | 317773 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma +2022/01/17 | 31573 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma +2022/01/17 | 31553 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma +2022/01/17 | 31400 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma +2022/01/17 | 31336 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma +2022/01/17 | 30513 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma +2022/01/17 | 3043 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/biblatex-lncs-test.bib +2022/01/17 | 30172 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma +2022/01/17 | 296107 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma +2022/01/17 | 291141 | graphics/mcf2graph/mcf_manual.pdf +2022/01/17 | 28758 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma +2022/01/17 | 28694 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma +2022/01/17 | 286565 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma +2022/01/17 | 285739 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma +2022/01/17 | 28556 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma +2022/01/17 | 28320 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma +2022/01/17 | 281547 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma +2022/01/17 | 2803 | graphics/mcf2graph/mcf_example.tex +2022/01/17 | 2797478 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma +2022/01/17 | 27698 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma +2022/01/17 | 276121 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma +2022/01/17 | 27503 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma +2022/01/17 | 27269 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma +2022/01/17 | 2672853 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma +2022/01/17 | 2656 | systems/texlive/tlnet/archive/latex-lab-dev.r61624.tar.xz +2022/01/17 | 260747 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma +2022/01/17 | 260695 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma +2022/01/17 | 259313 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma +2022/01/17 | 256460 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma +2022/01/17 | 25631642 | systems/texlive/tlnet/install-tl.zip +2022/01/17 | 25537 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma +2022/01/17 | 251 | macros/latex/contrib/bewerbung/anschrift.csv +2022/01/17 | 251405 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma +2022/01/17 | 25103 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma +2022/01/17 | 25064 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma +2022/01/17 | 246043 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma +2022/01/17 | 244845 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma +2022/01/17 | 24091 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma +2022/01/17 | 23948 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma +2022/01/17 | 2341356 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +2022/01/17 | 2340 | macros/latex/contrib/bewerbung/bewerbung.ins +2022/01/17 | 2323 | macros/latex/contrib/kanbun/kanbun-example.tex +2022/01/17 | 22154 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma +2022/01/17 | 2206 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/biblatex-lncs-test.tex +2022/01/17 | 2197 | macros/latex/contrib/dbshow/README.md +2022/01/17 | 218741 | macros/latex/contrib/llncs/llncsdoc.pdf +2022/01/17 | 216661 | macros/latex/contrib/llncs.zip +2022/01/17 | 216350 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma +2022/01/17 | 213500 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma +2022/01/17 | 21322 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma +2022/01/17 | 210221 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma +2022/01/17 | 20873972 | systems/texlive/tlnet/install-tl-windows.exe +2022/01/17 | 2062 | graphics/mcf2graph/mcf_exa_soc.mp +2022/01/17 | 202745 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma +2022/01/17 | 20195 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma +2022/01/17 | 2015 | macros/latex/contrib/bewerbung/argetabelle-example.tex +2022/01/17 | 200083 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma +2022/01/17 | 199685 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma +2022/01/17 | 199664 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma +2022/01/17 | 1992377 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma +2022/01/17 | 198989 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma +2022/01/17 | 196133 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma +2022/01/17 | 19039 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/LICENSE +2022/01/17 | 184 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/lncs.dbx +2022/01/17 | 184925 | graphics/mcf2graph/mcf_mplib_exa.pdf +2022/01/17 | 18483 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma +2022/01/17 | 18359 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma +2022/01/17 | 181570 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma +2022/01/17 | 179829 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma +2022/01/17 | 1731303 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma +2022/01/17 | 17257 | graphics/mcf2graph/CHANGELOG +2022/01/17 | 172572 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma +2022/01/17 | 17132 | systems/texlive/tlnet/archive/easybook.source.r61623.tar.xz +2022/01/17 | 17076 | systems/texlive/tlnet/archive/easybook.r61623.tar.xz +2022/01/17 | 17067120 | systems/texlive/tlnet/tlpkg/texlive.tlpdb +2022/01/17 | 16935 | macros/latex/contrib/llncs/llncsdoc.tex +2022/01/17 | 168843 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma +2022/01/17 | 167135 | macros/latex/contrib/dbshow/dbshow.dtx +2022/01/17 | 16644 | CTAN.sites +2022/01/17 | 16580 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma +2022/01/17 | 16502 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma +2022/01/17 | 157600 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma +2022/01/17 | 155304 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma +2022/01/17 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 +2022/01/17 | 153 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/lncs.cbx +2022/01/17 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 +2022/01/17 | 152077 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma +2022/01/17 | 1499387 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma +2022/01/17 | 1462 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/README.md +2022/01/17 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 +2022/01/17 | 1452739 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma +2022/01/17 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +2022/01/17 | 144541 | macros/latex/contrib/bewerbung/bewerbung-example.pdf +2022/01/17 | 14412 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma +2022/01/17 | 14293 | graphics/mcf2graph/mcf_mplib_exa.tex +2022/01/17 | 1405559 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma +2022/01/17 | 1404993 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma +2022/01/17 | 139123 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma +2022/01/17 | 136038 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma +2022/01/17 | 1355965 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma +2022/01/17 | 13514 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma +2022/01/17 | 135131 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma +2022/01/17 | 1322449 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma +2022/01/17 | 1304426 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma +2022/01/17 | 1300187 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma +2022/01/17 | 1300010 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma +2022/01/17 | 12953 | macros/latex/contrib/biblatex-contrib/biblatex-lncs.zip +2022/01/17 | 126843 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma +2022/01/17 | 12474 | macros/latex/contrib/kanbun/kanbun.sty +2022/01/17 | 120220 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma +2022/01/17 | 1180762 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma +2022/01/17 | 116023 | macros/latex/contrib/bewerbung/bewerbung.dtx +2022/01/17 | 115647 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma +2022/01/17 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini +2022/01/17 | 113014 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma +2022/01/17 | 112663 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma +2022/01/17 | 112283 | graphics/mcf2graph/mcf2graph.mp +2022/01/17 | 11209 | macros/latex/contrib/kanbun/kanbun.tex +2022/01/17 | 109562 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma +2022/01/17 | 109143 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma +2022/01/17 | 1087176 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma +2022/01/17 | 108264 | systems/texlive/tlnet/archive/texlive-scripts.r61621.tar.xz +2022/01/17 | 10507 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/lncs.bbx +2022/01/17 | 104678 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma +2022/01/17 | 103440 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma +2022/01/17 | 101458 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma +2022/01/17 | 100620 | graphics/mcf2graph/mcf_data_base.mcf 2022/01/16 | 9980 | systems/texlive/tlnet/archive/karnaugh-map.source.r61614.tar.xz -2022/01/16 | 99701 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma -2022/01/16 | 99181 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma -2022/01/16 | 97082 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma -2022/01/16 | 96923 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma -2022/01/16 | 959840 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma -2022/01/16 | 95484 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma -2022/01/16 | 95330 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma -2022/01/16 | 93942 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma -2022/01/16 | 922 | systems/win32/miktex/tm/packages/pr.ini 2022/01/16 | 884948 | systems/texlive/tlnet/archive/beebe.r61609.tar.xz -2022/01/16 | 88163 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma -2022/01/16 | 8782 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma -2022/01/16 | 86664 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma +2022/01/16 | 8545 | macros/latex/contrib/kanbun/kanbun.lua 2022/01/16 | 82844 | systems/texlive/tlnet/archive/fontspec.source.r61617.tar.xz -2022/01/16 | 82639 | macros/latex/contrib/easybook/easybook.tex -2022/01/16 | 824782 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma -2022/01/16 | 81532 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma -2022/01/16 | 79037 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma -2022/01/16 | 78966 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma -2022/01/16 | 78696 | macros/latex/contrib/easybook/easybook.dtx -2022/01/16 | 7757 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma -2022/01/16 | 77066 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma -2022/01/16 | 76281 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma -2022/01/16 | 753220 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma -2022/01/16 | 752398 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma -2022/01/16 | 74059 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma -2022/01/16 | 73462 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma -2022/01/16 | 73280 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma -2022/01/16 | 72884 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma -2022/01/16 | 71991 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma -2022/01/16 | 71915 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma -2022/01/16 | 70971 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma -2022/01/16 | 691228 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin.tar.lzma -2022/01/16 | 68782 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma -2022/01/16 | 68652 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma -2022/01/16 | 681613 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma -2022/01/16 | 6811727 | systems/texlive/tlnet/install-tl-unx.tar.gz -2022/01/16 | 68015 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma -2022/01/16 | 67763 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma -2022/01/16 | 67223 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma -2022/01/16 | 65086 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma -2022/01/16 | 64736 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma -2022/01/16 | 64578 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma -2022/01/16 | 64575 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma -2022/01/16 | 63757 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma -2022/01/16 | 637256 | macros/latex/contrib/easybook.zip -2022/01/16 | 63367 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma -2022/01/16 | 631997 | systems/win32/miktex/tm/packages/next/files.csv.lzma -2022/01/16 | 631204 | systems/win32/miktex/tm/packages/files.csv.lzma -2022/01/16 | 630239 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma -2022/01/16 | 629342 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma -2022/01/16 | 62427 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma -2022/01/16 | 62338 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma -2022/01/16 | 616464 | systems/texlive/tlnet/archive/easybook.doc.r61616.tar.xz +2022/01/16 | 6661 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2022/01/16 | 6116 | systems/texlive/tlnet/archive/karnaugh-map.r61614.tar.xz -2022/01/16 | 599013 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma -2022/01/16 | 595578 | macros/latex/contrib/easybook/easybook.pdf -2022/01/16 | 591458 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma -2022/01/16 | 58708 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma -2022/01/16 | 58660 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma -2022/01/16 | 57446 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma -2022/01/16 | 57402 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma -2022/01/16 | 57341 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma -2022/01/16 | 57256 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma -2022/01/16 | 57029 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma -2022/01/16 | 56674 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma -2022/01/16 | 566721 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma -2022/01/16 | 55734 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma -2022/01/16 | 55339 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma -2022/01/16 | 54989 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma -2022/01/16 | 532455 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma -2022/01/16 | 527828 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma -2022/01/16 | 52551 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma -2022/01/16 | 52310 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma -2022/01/16 | 52043 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma -2022/01/16 | 51535 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma -2022/01/16 | 51501 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma -2022/01/16 | 50850 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma -2022/01/16 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 -2022/01/16 | 48844 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma -2022/01/16 | 483936 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma -2022/01/16 | 47911 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma -2022/01/16 | 477924 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma -2022/01/16 | 470364 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma -2022/01/16 | 46095 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma -2022/01/16 | 45892 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma -2022/01/16 | 45775 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma -2022/01/16 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc -2022/01/16 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc -2022/01/16 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc -2022/01/16 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc -2022/01/16 | 43928 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma -2022/01/16 | 43822 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma -2022/01/16 | 43697 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma -2022/01/16 | 43670 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma -2022/01/16 | 43451 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma -2022/01/16 | 42770 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma -2022/01/16 | 41391 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma -2022/01/16 | 41266 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma -2022/01/16 | 41208 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma +2022/01/16 | 45616 | macros/latex/contrib/kanbun/kanbun-example.pdf 2022/01/16 | 40628 | systems/texlive/tlnet/archive/njuthesis.source.r61618.tar.xz -2022/01/16 | 402676 | systems/texlive/tlnet/archive/texlive-scripts.doc.r61609.tar.xz -2022/01/16 | 39737 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma -2022/01/16 | 394302 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma -2022/01/16 | 38565 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma -2022/01/16 | 38468 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma -2022/01/16 | 37390 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma -2022/01/16 | 37117 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma -2022/01/16 | 37097 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma -2022/01/16 | 36057 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma -2022/01/16 | 355357 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma -2022/01/16 | 35242 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma -2022/01/16 | 35175 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma -2022/01/16 | 34032 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma -2022/01/16 | 332744 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma -2022/01/16 | 32958 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma -2022/01/16 | 326302 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma -2022/01/16 | 32155 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma -2022/01/16 | 317773 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma -2022/01/16 | 31575 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma -2022/01/16 | 31551 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma -2022/01/16 | 31399 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma -2022/01/16 | 31336 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma -2022/01/16 | 30513 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma -2022/01/16 | 30173 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma -2022/01/16 | 296106 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma +2022/01/16 | 376249 | macros/latex/contrib/kanbun/kanbun.pdf 2022/01/16 | 287964 | systems/texlive/tlnet/archive/karnaugh-map.doc.r61614.tar.xz -2022/01/16 | 28754 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma -2022/01/16 | 28693 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma -2022/01/16 | 286565 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma -2022/01/16 | 285739 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma -2022/01/16 | 28556 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma -2022/01/16 | 28321 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma -2022/01/16 | 281545 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma -2022/01/16 | 2797477 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma -2022/01/16 | 27699 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma -2022/01/16 | 276122 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma -2022/01/16 | 27503 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma 2022/01/16 | 2734884 | systems/texlive/tlnet/archive/pst-3dplot.doc.r61615.tar.xz -2022/01/16 | 27269 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma -2022/01/16 | 2672852 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma 2022/01/16 | 26664 | systems/texlive/tlnet/archive/fontspec.r61617.tar.xz -2022/01/16 | 260713 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma -2022/01/16 | 260690 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma -2022/01/16 | 259313 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma -2022/01/16 | 256461 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma -2022/01/16 | 25631634 | systems/texlive/tlnet/install-tl.zip -2022/01/16 | 25537 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma -2022/01/16 | 251406 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma -2022/01/16 | 25104 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma -2022/01/16 | 25063 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma -2022/01/16 | 246042 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma -2022/01/16 | 244846 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma -2022/01/16 | 24092 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma -2022/01/16 | 23948 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma -2022/01/16 | 2340064 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz 2022/01/16 | 222952 | macros/latex/contrib/chemmacros/chemmacros.sty -2022/01/16 | 22154 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma 2022/01/16 | 21856 | systems/texlive/tlnet/archive/pst-3dplot.r61615.tar.xz -2022/01/16 | 216349 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma -2022/01/16 | 213500 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma -2022/01/16 | 21322 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma -2022/01/16 | 210222 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma -2022/01/16 | 20874648 | systems/texlive/tlnet/install-tl-windows.exe -2022/01/16 | 202745 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma -2022/01/16 | 20195 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma -2022/01/16 | 200083 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma -2022/01/16 | 199684 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma -2022/01/16 | 199663 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma -2022/01/16 | 1992377 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma -2022/01/16 | 198989 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma -2022/01/16 | 196135 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma 2022/01/16 | 1932 | systems/texlive/tlnet/archive/collection-fontsextra.r61613.tar.xz 2022/01/16 | 1854880 | systems/texlive/tlnet/archive/concmath-otf.doc.r61613.tar.xz -2022/01/16 | 18484 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma -2022/01/16 | 18359 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma -2022/01/16 | 181570 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma -2022/01/16 | 179828 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma -2022/01/16 | 1731303 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma -2022/01/16 | 172572 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma -2022/01/16 | 17112 | systems/texlive/tlnet/archive/easybook.source.r61616.tar.xz -2022/01/16 | 17065106 | systems/texlive/tlnet/tlpkg/texlive.tlpdb -2022/01/16 | 17052 | systems/texlive/tlnet/archive/easybook.r61616.tar.xz -2022/01/16 | 168843 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma -2022/01/16 | 16578 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma -2022/01/16 | 16500 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma -2022/01/16 | 157601 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma -2022/01/16 | 155304 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma 2022/01/16 | 155017 | macros/latex/contrib/chemmacros/chemmacros-manual.tex -2022/01/16 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 -2022/01/16 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 -2022/01/16 | 152076 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma -2022/01/16 | 1499385 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma 2022/01/16 | 1482 | macros/latex/contrib/chemmacros/README -2022/01/16 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 -2022/01/16 | 1452739 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma -2022/01/16 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 -2022/01/16 | 14412 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma -2022/01/16 | 1405492 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma -2022/01/16 | 1404512 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma -2022/01/16 | 139122 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma -2022/01/16 | 136039 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma -2022/01/16 | 1355965 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma -2022/01/16 | 135133 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma -2022/01/16 | 13512 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma -2022/01/16 | 1322450 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma -2022/01/16 | 1304426 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma 2022/01/16 | 130408 | systems/texlive/tlnet/archive/concmath-otf.r61613.tar.xz -2022/01/16 | 1301304 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma -2022/01/16 | 1300697 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma -2022/01/16 | 126843 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma 2022/01/16 | 1221668 | systems/texlive/tlnet/archive/fontspec.doc.r61617.tar.xz -2022/01/16 | 120220 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma -2022/01/16 | 1180762 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma -2022/01/16 | 115647 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma -2022/01/16 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini -2022/01/16 | 113014 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma -2022/01/16 | 112664 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma -2022/01/16 | 109562 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma -2022/01/16 | 109142 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma -2022/01/16 | 1087177 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma -2022/01/16 | 108224 | systems/texlive/tlnet/archive/texlive-scripts.r61609.tar.xz 2022/01/16 | 1072575 | macros/latex/contrib/chemmacros.zip 2022/01/16 | 1060088 | systems/texlive/tlnet/archive/njuthesis.doc.r61618.tar.xz 2022/01/16 | 10560 | systems/texlive/tlnet/archive/njuthesis.r61618.tar.xz -2022/01/16 | 104678 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma -2022/01/16 | 103440 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma 2022/01/16 | 1014895 | macros/latex/contrib/chemmacros/chemmacros-manual.pdf -2022/01/16 | 101459 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma 2022/01/15 | 9356 | macros/unicodetex/latex/fontspec/fontspec-code-feat-aat.dtx 2022/01/15 | 9309 | macros/unicodetex/latex/fontspec/fontspec-doc-enc.tex 2022/01/15 | 9241 | macros/unicodetex/latex/fontspec/fontspec-code-vars.dtx @@ -241,9 +300,7 @@ 2022/01/15 | 7191 | macros/unicodetex/latex/fontspec/fontspec-code-interfaces.dtx 2022/01/15 | 6966792 | support/pkgcheck/bin/pkgcheck 2022/01/15 | 683 | graphics/pgf/contrib/karnaugh-map/karnaugh-map.ins -2022/01/15 | 6615 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2022/01/15 | 657454 | macros/unicodetex/latex/fontspec/fontspec-code.pdf -2022/01/15 | 6540 | systems/texlive/tlnet/archive/collection-latexextra.r61607.tar.xz 2022/01/15 | 6469 | macros/unicodetex/latex/fontspec/fontspec-code-scripts.dtx 2022/01/15 | 6420 | systems/texlive/tlnet/archive/dbshow.r61605.tar.xz 2022/01/15 | 6385 | macros/unicodetex/latex/fontspec/fontspec-code-opening.dtx @@ -415,12 +472,10 @@ 2022/01/13 | 4627 | macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.dtx 2022/01/13 | 4618 | macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf 2022/01/13 | 4617 | macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty -2022/01/13 | 454999 | macros/latex/contrib/dbshow.zip 2022/01/13 | 45340 | systems/texlive/tlnet/archive/l3packages.source.r61588.tar.xz 2022/01/13 | 452626894 | systems/mac/mactex/MacTeXtras-20220113.zip 2022/01/13 | 446113 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf 2022/01/13 | 44358 | macros/latex/contrib/tagpdf/tagpdf-struct.dtx -2022/01/13 | 440283 | macros/latex/contrib/dbshow/dbshow.pdf 2022/01/13 | 43292 | systems/texlive/tlnet/archive/tuda-ci.r61586.tar.xz 2022/01/13 | 4284 | macros/latex/contrib/tagpdf/ex-patch-sectioning-koma.tex 2022/01/13 | 424541 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf @@ -434,7 +489,6 @@ 2022/01/13 | 3780 | systems/texlive/tlnet/archive/sillypage.source.r61584.tar.xz 2022/01/13 | 3687 | macros/latex/contrib/siunitx/siunitx.ins 2022/01/13 | 36148056 | macros/latex-dev/base.zip -2022/01/13 | 3425 | macros/latex/contrib/dbshow/dbshow.ins 2022/01/13 | 34008 | macros/latex/contrib/siunitx/siunitx-print.dtx 2022/01/13 | 33799 | macros/latex/contrib/siunitx/siunitx-compound.dtx 2022/01/13 | 32184 | systems/texlive/tlnet/archive/l3backend.source.r61588.tar.xz @@ -477,7 +531,6 @@ 2022/01/13 | 22818 | macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.pdf 2022/01/13 | 22636 | systems/texlive/tlnet/archive/knowledge.r61583.tar.xz 2022/01/13 | 22111 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx -2022/01/13 | 2197 | macros/latex/contrib/dbshow/README.md 2022/01/13 | 217098 | macros/latex/contrib/esami/doc/examples/testA.pdf 2022/01/13 | 21640 | systems/texlive/tlnet/archive/l3packages.r61588.tar.xz 2022/01/13 | 2150 | macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.tex @@ -525,7 +578,6 @@ 2022/01/13 | 13335 | macros/latex/contrib/tagpdf/tagpdf-tree.dtx 2022/01/13 | 1238904 | systems/texlive/tlnet/archive/tex4ht.source.r61591.tar.xz 2022/01/13 | 1237 | macros/latex/contrib/tagpdf/ex-AF-file.tex -2022/01/13 | 122225 | macros/latex/contrib/dbshow/dbshow.dtx 2022/01/13 | 122028 | macros/latex/contrib/siunitx/siunitx-number.dtx 2022/01/13 | 12060 | systems/texlive/tlnet/archive/luamplib.r61587.tar.xz 2022/01/13 | 1200 | macros/latex/contrib/pdfmanagement-testphase/README.md @@ -1650,7 +1702,6 @@ 2022/01/11 | 34840 | fonts/cochineal/tfm/Cochineal-Bold-tlf-sc-ly1.tfm 2022/01/11 | 3481 | fonts/cochineal/enc/coch_dx3muq.enc 2022/01/11 | 3480 | fonts/cochineal/enc/coch_ygltby.enc -2022/01/11 | 3470082 | fonts/cochineal/afm/Cochineal-Bold.afm 2022/01/11 | 3466 | fonts/cochineal/enc/coch_nlwa7l.enc 2022/01/11 | 3465 | fonts/cochineal/enc/coch_vpdkzq.enc 2022/01/11 | 3465 | fonts/cochineal/enc/coch_tkhq7f.enc @@ -1834,7 +1885,6 @@ 2022/01/11 | 2350 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex 2022/01/11 | 23428 | macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf 2022/01/11 | 234021 | fonts/zlmtt/doc/zlmtt-doc.pdf -2022/01/11 | 233604 | fonts/cochineal/opentype/Cochineal-Bold.otf 2022/01/11 | 232 | fonts/cochineal/tfm/Cochineal-osf.tfm 2022/01/11 | 224508 | macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf 2022/01/11 | 2188 | fonts/cochineal/vf/zcochbmia.vf @@ -2232,53 +2282,3 @@ 2022/01/11 | 10078 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty 2022/01/11 | 1006705 | macros/latex/contrib/reledmac/reledpar.pdf 2022/01/11 | 10012 | fonts/cochineal/tfm/Cochineal-Roman-osf-ot2.tfm -2022/01/10 | 926068 | graphics/pgf/contrib/pgf-interference.zip -2022/01/10 | 87836 | systems/texlive/tlnet/archive/pstricks.r61548.tar.xz -2022/01/10 | 824 | macros/latex/contrib/zref-clever/README.md -2022/01/10 | 70 | macros/latex/contrib/zref-clever/DEPENDS.txt -2022/01/10 | 637816 | systems/texlive/tlnet/archive/njuvisual.doc.r61555.tar.xz -2022/01/10 | 5456 | macros/latex/contrib/keyfloat/images/image.pdf -2022/01/10 | 5427 | macros/latex/contrib/asmejour/asmewide_example/asmewide.sty -2022/01/10 | 49152 | systems/texlive/tlnet/archive/xurl.doc.r61553.tar.xz -2022/01/10 | 4700 | macros/latex/contrib/keyfloat/images/image2.pdf -2022/01/10 | 4068 | fonts/newtx/tex/newtx.sty -2022/01/10 | 347843 | fonts/newtx/doc/newtxdoc.pdf -2022/01/10 | 334474 | macros/latex/contrib/bibarts/bibarts.tex -2022/01/10 | 332462 | macros/latex/contrib/bibarts/ba-short.pdf -2022/01/10 | 3082 | macros/latex/contrib/zref-clever/zref-clever.ins -2022/01/10 | 306402 | macros/latex/contrib/zref-clever/zref-clever.pdf -2022/01/10 | 296440 | macros/latex/contrib/bibarts/bibsort.c -2022/01/10 | 29417 | macros/latex/contrib/bibarts/ba-short.tex -2022/01/10 | 27192 | systems/texlive/tlnet/archive/biblatex-readbbl.doc.r61549.tar.xz -2022/01/10 | 255029 | macros/latex/contrib/zref-clever/zref-clever.dtx -2022/01/10 | 23120 | systems/texlive/tlnet/archive/kdpcover.r61552.tar.xz -2022/01/10 | 229888 | macros/latex/contrib/bibarts/bibsort.exe -2022/01/10 | 22769 | macros/texinfo/latest/htmlxref.cnf -2022/01/10 | 1928 | systems/texlive/tlnet/archive/ffcode.r61550.tar.xz -2022/01/10 | 190352 | systems/texlive/tlnet/archive/ffcode.doc.r61550.tar.xz -2022/01/10 | 1764 | systems/texlive/tlnet/archive/iexec.r61551.tar.xz -2022/01/10 | 176228 | systems/texlive/tlnet/archive/njuvisual.source.r61555.tar.xz -2022/01/10 | 169212 | systems/texlive/tlnet/archive/njuvisual.r61555.tar.xz -2022/01/10 | 165179 | macros/latex/contrib/keyfloat/keyfloat.dtx -2022/01/10 | 1644 | macros/latex/contrib/keyfloat/keyfloat.ins -2022/01/10 | 1600 | systems/texlive/tlnet/archive/xurl.r61553.tar.xz -2022/01/10 | 1544 | macros/latex/contrib/zref-clever/CHANGELOG.md -2022/01/10 | 1486 | macros/latex/contrib/zref-clever/zref-clever-code.tex -2022/01/10 | 1444 | systems/texlive/tlnet/archive/biblatex-readbbl.r61549.tar.xz -2022/01/10 | 1433166 | install/macros/latex/contrib/zref-clever.tds.zip -2022/01/10 | 142424 | macros/latex/contrib/bibarts/bibarts.sty -2022/01/10 | 1403089 | macros/latex/contrib/zref-clever.zip -2022/01/10 | 1381314 | macros/latex/contrib/bibarts.zip -2022/01/10 | 13286 | macros/latex/contrib/zref-clever/MANIFEST.md -2022/01/10 | 127304 | systems/texlive/tlnet/archive/iexec.doc.r61551.tar.xz -2022/01/10 | 1264 | systems/texlive/tlnet/archive/collection-bibtexextra.r61549.tar.xz -2022/01/10 | 12463000 | systems/texlive/tlnet/archive/pstricks.doc.r61548.tar.xz -2022/01/10 | 1144 | macros/latex/contrib/keyfloat/README.txt -2022/01/10 | 111819 | macros/latex/contrib/zref-clever/zref-clever.tex -2022/01/10 | 1069860 | macros/latex/contrib/zref-clever/zref-clever-code.pdf -2022/01/10 | 1069794 | macros/latex/contrib/keyfloat.zip -2022/01/10 | 1044258 | macros/latex/contrib/bibarts/bibarts.pdf -2022/01/10 | 1038224 | macros/latex/contrib/keyfloat/keyfloat.pdf -2022/01/10 | 101132 | systems/texlive/tlnet/archive/kdpcover.doc.r61552.tar.xz -2022/01/10 | 10040 | macros/latex/contrib/bibarts/README.txt -2022/01/10 | 100054 | fonts/newtx/doc/newtxdoc.tex diff --git a/graphics/mcf2graph/CHANGELOG b/graphics/mcf2graph/CHANGELOG index ce3badf918..21454bf072 100644 --- a/graphics/mcf2graph/CHANGELOG +++ b/graphics/mcf2graph/CHANGELOG @@ -1,6 +1,21 @@ ******************************************************************************* - Changelog of mcf2graph software package by Akira Yamaji 2022-01-02 + Changelog of mcf2graph software package by Akira Yamaji 2022-01-17 ******************************************************************************* +[ver. 4.78 / 2022-01-17] + -from this version use MetaPost only + -change file name + mcf2graph.mf => mcf2graph.mp + mcf_exa_soc.mf => mcf_exa_soc.mp + mcf_man_soc.mf => mcf_exa_soc.mp + -change function name + beginfont => beginfigm + endfont => endfigm + -delete style file mcf_setup.sty + -update mcf_example.tex + typeset with LuaLaTeX + -update mcf_data_base.mcf + -update MCF manual,example + [ver. 4.77 / 2022-01-02] -change syntax of add group {a'}:*/_ : {a}:/*_ diff --git a/graphics/mcf2graph/README b/graphics/mcf2graph/README index 556778b61f..51cbf86411 100644 --- a/graphics/mcf2graph/README +++ b/graphics/mcf2graph/README @@ -1,7 +1,7 @@ ******************************************************************************** - mcf2graph : Convert Molecular Coding Format to graphics with METAFONT/METAPOST + mcf2graph : Convert Molecular Coding Format to graphics with MetaPost Author : Akira Yamaji - version : 4.77 2022-01-02 + version : 4.78 2022-01-17 E-mail : mcf2graph@gmail.com Located at : http://www.ctan.org/pkg/mcf2graph ******************************************************************************** @@ -11,37 +11,29 @@ chemical structure diagrams. This Coding is named from programing technique such as operator, array, scope, macro, adressing, etc. - mcf2graph convert from MCF to pk font, PNG, SVG, EPS, MOL file. + mcf2graph convert from MCF to PNG, SVG, EPS, MOL file. It is also able to calculate molecular weight, exact mass, molecular formula. 2. The distribution of software ( 1) README This file ( 2) CHANGELOG Changelog file of mcf2graph - ( 3) mcf2graph.mf Main macro of Metafont / Metapost + ( 3) mcf2graph.mp Main macro of Metapost ( 4) mcf_data_base.mcf Molecular data base file - ( 5) mcf_setup.sty Style file for aux file input + ( 5) mcf_exa_soc.mp MCF souce file example ( 6) mcf_manual.tex MCF syntax manual(LaTeX file) make files 'mcf_man_soc-***.mps' before typeset >mpost mcf_man_soc.mf - ( 7) mcf_man_soc.mf Molecular definition file for mcf_manual.tex + ( 7) mcf_man_soc.mp Molecular definition file for mcf_manual.tex ( 8) mcf_manual.pdf PDF of (6) (used pdftex(LaTeX),makeindex) - ( 9) mcf_example.tex LaTeX example - make file 'mcf_exa_soc-info.aux' before typeset - >mpost -s ahlength=1 mcf_exa_soc.mf - make files 'mcf_exa_soc-***.mps' before typeset - >mpost mcf_exa_soc.mf - (for metafont) - make file 'mcf_exa_soc-mf.aux' before typeset - >mpost -s ahlength=7 mcf_exa_soc.mf - (10) mcf_exa_soc.mf Metafont/Metapost souce file for mcf_example.tex - (11) mcf_example.pdf PDF of (9) typeset with pdftex(LaTeX) - (12) mcf_mplib_exa.tex luamplib(LuaLaTeX) example - (13) mcf_mplib_exa.pdf PDF of (12) typeset with LuaTeX(LaTeX) + ( 9) mcf_example.tex MCF example + (10) mcf_example.pdf PDF of (9) typeset with LuaTeX(LuaLaTeX) + (11) mcf_mplib_exa.tex luamplib(LuaLaTeX) example + (12) mcf_mplib_exa.pdf PDF of (11) typeset with LuaTeX(LuaLaTeX) -3. How to use mcf2graph with Metapost +3. How to use mcf2graph with MetaPost Minimum requirement to use mcf2graph : mpost.exe,mpost.dll,mpost.mp,plain.mp ( 1) >mpost FILENAME => output eps(.mps) file - ( 2) >mpost -s bboxmargin=1 FILENAME => output first font only (for test) + ( 2) >mpost -s bboxmargin=1 FILENAME => output first figure only (for test) ( 3) >mpost -s ahangle=1 FILENAME => output png file (600dpi) ( 4) >mpost -s ahangle=11 FILENAME => output png file (1200dpi) ( 5) >mpost -s ahangle=2 FILENAME => output svg file @@ -51,16 +43,14 @@ ( 8) >mpost -s ahlength=2 FILENAME => output information-aux file tag1;tag2; var1;var2; - ( 9) >mpost -s ahlength=3 FILENAME => output report file + ( 9) >mpost -s ahlength=3 FILENAME => output data-base-aux file (10) >mpost -s ahlength=5 FILENAME => output mol file(V2000) (11) >mpost -s ahlength=6 FILENAME => output mol file(V3000) - (12) >mpost -s ahlength=7 FILENAME => output metafont-aux file - (13) >mpost -s ahlength=8 FILENAME => output data-base-aux file - (14) >mpost -s labeloffset=1 FILENAME => use plain.mp 'label','drawarrow' - (15) >mpost -s labeloffset=2 FILENAME => atomfont="uhvr8r" + (12) >mpost -s ahlength=7 FILENAME => output report file + (13) >mpost -s labeloffset=2 FILENAME => atomfont="uhvr8r" 4. License - mcf2graph ver 4.77 Copyright (c) 2013-2022 Akira Yamaji + mcf2graph ver 4.78 Copyright (c) 2013-2022 Akira Yamaji Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/graphics/mcf2graph/mcf2graph.mf b/graphics/mcf2graph/mcf2graph.mf deleted file mode 100644 index 0a89d9de33..0000000000 --- a/graphics/mcf2graph/mcf2graph.mf +++ /dev/null @@ -1,2387 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% mcf2graph ver 4.77 Copyright (c) 2013-2022 Akira Yamaji -% -% Permission is hereby granted, free of charge, to any person obtaining a copy of this software -% and associated documentation files (the "Software"), to deal in the Software without restriction, -% including without limitation the rights to use, copy, modify, merge, publish, distribute, -% sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is -% furnished to do so, subject to the following conditions: -% -% The above copyright notice and this permission notice shall be included in all copies -% or substantial portions of the Software. -% -% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,EXPRESS OR IMPLIED, -% INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE -% AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -% DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% mcf2graph is METAFONT/METAPOST macro package convert -% Molecular Coding Format(MCF) to font(pk)/eps/sgv/png/mdl molfile -%-------------------------------------------------------------------------------------------------- -% This package is located at : http://www.ctan.org/pkg/mcf2graph -% Suggestion or request mail to : mcf2graph@gmail.com -%-------------------------------------------------------------------------------------------------- -% Set outputformat to "eps"(.mps) : mpost FILENAME -% Set output first font only : mpost -s bboxmargin=1 FILENAME -% Set outputformat to "png" : mpost -s ahangle=1 FILENAME -% Set outputformat to "svg" : mpost -s ahangle=2 FILENAME -% Set outputformat to "eps" (.eps) : mpost -s ahangle=3 FILENAME -% Set output information aux file (tag1:var1;tag2:var2) : mpost -s ahlength=1 FILENAME -% Set output information aux file (tag1;tag2 var1;var2) : mpost -s ahlength=2 FILENAME -% Set output report : mpost -s ahlength=3 FILENAME -% Set output MOL file (V2000) : mpost -s ahlength=5 FILENAME -% Set output MOL file (V3000) : mpost -s ahlength=6 FILENAME -% Set output aux metafont file : mpost -s ahlength=7 FILENAME -% Set output aux data-base file : mpost -s ahlength=8 FILENAME -% Set to use plain.mp (label,arrow) : mpost -s labeloffset=1 FILENAME -% Set to use plain.mp (label,arrow,atom) : mpost -s labeloffset=2 FILENAME -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -tracingstats:=1; -message "* This is mcf2graph ver 4.77 2022.01.02"; -%------------------------------------------------------------------------------------------------- -newinternal cntA,cntB,cntM,minX,minY,maxX,maxY,sftX,sftY,com,par,envT,envB,lenT,lineT,angT,rotT, - crR,nA,nB,nC,nD,nE,nF,nS,nL,nR,nU,nP,xpos,ypos,markA,markB,saveA,saveB,bondL; -numeric save_num[],comD[][],parD[][],adrD[][],cntD[],tbl_atom[],tbl_group[][],f_char[], - tbl_atom_wt[],tbl_atom_mi[],tbl_char_wd[],tbl_char_ht[],addA[],add_rot[],chargeA[], - com_group[][],par_group[][],cnt_group[],colorA[],colorB[],sumA[],bondC[],hideH[],lineB[], - sB[],eB[],angB[],angA[],lenB[],angX[],numS[],wdM[],htM[],wdA[],dxA[], - cmm_adr[],mc_indent[],at_semicol[]; -string save_str[],tbl_atom_str[],strD[],tag[],file_name_output,blank_str,aux_delimiter,atomfont, - temps,default_data_file,default_temp_file,mpfont,tag_s,var_s,cal_FM,cal_MW,cal_MI, - inf_Cat,inf_NO,inf_EN,inf_JN,inf_FM,inf_CAS,inf_USE,inf_EXA,inf_EXB,inf_MW; -pair save_pair[],posA[],posM[][],msize,mposition,fsize,fmargin,save_mposition,posBs,posBe,dum; -picture mol_stru[],atom_picture,save_picture,temp_picture; -path arrow_path,dottedline_path,line_path,arrow_head; -%------------------------------------------------------------------------------------------------- -char_num:=str_cnt:=tbl_cnt:=proc_end:=mangle:=sw_expand:=sw_frame:=sw_trimming:=sw_ext_all:=0; -sw_abbreviate:=sw_arrow_emu:=sw_numbering:=sw_output:=0; numbering_start:=1; numbering_end:=4095; -%------------------------------------------------------------------------------------------------- -aux_max:=max_inf_num:=20; aux_delimiter:=";"; blank_str:= " "; dum:=(-4091,0); -for i=1 upto aux_max: tag[i]:=""; endfor -Font:=1; Mfont:=2; Mcode:=4; Temp:=8; Info:=16; Table:=32; Report:=64; MOL2k:=128; MOL3k:=256; -Atom:=8; Bond:=16; Brock:=32; Inverse:=64; Group:=32; Mol:=64; -Outside:=1; Inside:=2; Bothside:=Outside+Inside; -%------------------------------------------------------------------------------------------------- -a_prn_s:=ASCII("("); a_prn_e:=ASCII(")"); a_brc_s:=ASCII("{"); a_brc_e:=ASCII("}"); -a_brk_s:=ASCII("["); a_brk_e:=ASCII("]"); a_cmm:=ASCII(","); a_equ:=ASCII("="); -a_ast:=ASCII("*"); a_sls:=ASCII("/"); a_gtn:=ASCII("<"); a_ltn:=ASCII(">"); a_and:=ASCII("&"); -a_dol:=ASCII("$"); a_hsh:=ASCII("#"); a_hat:=ASCII("^"); a_tld:=ASCII("~"); a_bqt:=ASCII("`"); -a_cln:=ASCII(":"); a_amk:=ASCII("@"); a_zero:=ASCII("0"); a_nine:=ASCII("9"); a_qut:=ASCII("'"); -a_bar:=ASCII("|"); a_plus:=ASCII("+"); a_minus:=ASCII("-"); -%-------------------------------------------------------------------------------------------------- -let DIV= /; let MUL= *; let LT= <; let GT= >; let AND= &; let :: = : ; let == = =; let ef=elseif; -def ]]]=] ] ] enddef; -%-------------------------------------------------------------------------------------------------- -primarydef a at b = fat(a,b) enddef; -def fat(expr a,b)= mposition:=b; a enddef; -def ext(text TXT)= sw_ext_all:=1; def EXT_ALL = TXT enddef; enddef; -def ext_clear= sw_ext_all:=0; def EXT_ALL = enddef; enddef; -%-------------------------------------------------------------------------------------------------- -vardef frac primary n= n-floor n enddef; -vardef iif(expr a,b,c)=if a: b else: c fi enddef; -vardef subc(expr i,s)= substring(i-1,i) of s enddef; -vardef sfrt(expr a,b,c)= a shifted ((b,0) rotated c) enddef; -def wpcs expr n= withpen pencircle scaled n enddef; -def ppcs expr n= pickup pencircle scaled n enddef; -def sbp(expr m,n)expr p=subpath(m*length(p),n*length(p)) of p enddef; -%------------------------------------------------------------------------------------------------- -vardef fsr(expr n)(expr s)= (substring(0,n-length(s)) of blank_str)&s enddef; -vardef fsl(expr n)(expr s)= s&(substring(0,n-length(s)) of blank_str) enddef; -vardef fdr(expr n)(expr s)= fsr(n)(decimal(s)) enddef; -vardef fdl(expr n)(expr s)= fsl(n)(decimal(s)) enddef; -def warning(expr s)= message "% "&decimal(char_num)&fdr(3)(incr warning_cnt)&")"&s; enddef; -%================================================================================================= -if (known green)and(known ahlength): - f_MP:=1; - color color_list[]; - for i=1 upto 100: colorA[i]:=colorB[i]:=0; endfor - prologues:=3; - default_data_file:="mcf_data_base.mcf"; - default_temp_file:="temp.mcf"; - mpfont:="uhvr8r"; - atomfont:=defaultfont:=""; - %--default ahangle=45--------------------------------------------------------------------- - if ahangle=0: outputformat:="eps"; % eps format(.mps) - ef ahangle=1: outputformat:="png"; hppp:=vppp:=0.12; % png format(600dpi) - ef ahangle=11: outputformat:="png"; hppp:=vppp:=0.06; % png format(1200dpi) - ef ahangle=2: outputformat:="svg"; % svg format - ef ahangle=3: outputformat:="eps"; % eps format(.eps) - ef ahangle=45: outputformat:="eps"; % eps format(.mps) *default - fi - %--default ahlength=4--------------------------------------------------------------------- - if ahlength=1: sw_output:=Info; % output aux file - ef ahlength=2: sw_output:=Info+Table; % output aux file(Table mode) - ef ahlength=3: sw_output:=Report; % output report - ef ahlength=4: sw_output:=Font; % *default - ef ahlength=5: sw_output:=MOL2k; % output MOL(V2000) - ef ahlength=6: sw_output:=MOL3k; % output MOL(V3000) - ef ahlength=7: sw_output:=Mfont; % output aux mf - ef ahlength=8: sw_output:=Mcode+Info; % output aux data-base - fi - %-- default bboxmargin=2------------------------------------------------------------------ - if bboxmargin=1: proc_end:=1; % output first font only - ef bboxmargin=3: ext(defaultfont:="uhvr8r"; defaultscale:=.3; label.rt(inf_EN,(0,0));) - ef bboxmargin=4: sw_output:=Font+Info; - ext(defaultfont:="uhvr8r"; defaultscale:=.3; - label.rt(inf_EN&" / "&cal_MW&" / "&decimal(num_MW-scantokens(inf_MW)),(0,0));) - fi - %--default labeloffset=3------------------------------------------------------------------ - if labeloffset=1: defaultfont:=mpfont; % mpost label - elseif labeloffset=2: defaultfont:=atomfont:=mpfont; % mpost label,atom - fi - %--default outputtemplate:="%j-%3c."&"mps"------------------------------------------------ - if (outputformat="eps")and(ahangle<>3): outputtemplate:="%j-%3c."&"mps"; - else: outputtemplate:="%j-%3c."&outputformat; - fi - %----------------------------------------------------------------------------------------- - def endchar = endfig enddef; - def printf expr s= write s to file_name_output enddef; - def # = enddef; - vardef totalweight expr a= 0 enddef; - def Cp(expr s) = if known s: if s<>0: withcolor color_list[s] fi fi enddef; - if atomfont="": atomfont:="draw"; fi % default atom font - if defaultfont="": defaultfont:="draw"; fi % default label font - %----------------------------------------------------------------------------------------- - if sw_output>=Info: - if bboxmargin=1: message "* output first font only"; fi - message "* jobname="&jobname; - message "* numbersystem="&numbersystem; - if (ahlength=1)or(ahlength=2): - message "* output information file"; - message "* file name="&jobname&"-info.aux"; - message "* info delimiter="&aux_delimiter; - ef ahlength=3: message "* output report file"; - message "* file name="&jobname&"-report.txt"; - ef ahlength=5: message "* output MOL file(V2000)"; - message "* "&jobname&"-nnn-"&"inf_EN"&".mol"; - ef ahlength=6: message "* output MOL file(V3000)"; - message "* "&jobname&"-nnn-"&"inf_EN"&".mol"; - ef ahlength=7: message "* output metafont file"; - message "* mf file name="&jobname&"-mf.aux"; - ef ahlength=8: message "* output data-base file"; - message "* data-base file name="&jobname&"-data.aux"; - fi - message "* outputformat="&outputformat; - if outputformat="png": message "* hppp="&decimal(hppp)&"/vppp="&decimal(vppp); fi - message "* outputtemplate="&outputtemplate; - message "* atomfont="&atomfont; - message "* defaultfont="&defaultfont; - fi -else: - f_MP:=0; - def image = image_emu enddef; - def llcorner = llcorner_emu enddef; - def lrcorner = lrcorner_emu enddef; - def urcorner = urcorner_emu enddef; - def ulcorner = ulcorner_emu enddef; - string defaultfont; - defaultscale:=1.2; - dotlabeldiam:=3bp; - def Cp(expr s) = enddef; - def color = transform enddef; - atomfont:="draw"; - defaultfont:="draw"; - sw_output:=Font; - mode_setup; -fi -clearit; -%-------------------------------------------------------------------------------------------------- -?3:=?20:=Ph:=Ph1:=Ph2:=hz:=0; vt:=1; -ratio_chain_ring:=0.66; ratio_atom_bond:=0.36; ratio_thickness_bond:=0.015; -ratio_thickness_char:=0.1; ratio_char_bond:=1.5; ratio_bondgap_bond:=0.15; -ratio_hashgap_bond:=0.12; ratio_hash_black:=0.4; ratio_wedge_bond:=0.12; -ratio_atomgap_atom:=0.04; -offset_thickness:=0.2bp; offset_bond_gap:=0.3bp; offset_hash_gap:=0.1bp; -offset_atom:=0.8pt; offset_wedge:=0.4bp; thickness_frame:=0.2bp; -max_blength:=10mm; blength:=mangle:=0; max_labelsize:=20mm; dottedline_gap:=1.5bp; -%-------------------------------------------------------------------------------------------------- -fsize:=(30mm,20mm); fmargin:=(0.4mm,0.4mm); msize:=(1,1); mposition:=(0.5,0.5); -%================================================================================================== -bboxmargin:=0; % 2bp => 0 -ahangle:=45; -ahlength:=4bp; -defaultsize:=8bp; -defaultscale:=1; -labeloffset:=3bp; -ext_defaultline:=0.5bp; -lonepairdiam:=lonepairspace:=circlediam:=circlepen:=0; -%================================================================================================== -parts_emb_start:=1000; % 1001 => 2000 for embedded parts (max 1900) -parts_emi_start:=1900; % 1901 => 2000 for embedded internal parts (max 100) -parts_usr_start:=2000; % 2001 => 3000 for user parts (max 1000) -parts_int_start:=3000; % 3001 => 4000 for internal parts (max 1000) -%-------------------------------------------------------------------------------------------------- -def def_com(expr n)(text tx)= nA:=n; forsuffixes list=tx:: list:=nA; nA:=nA+1; endfor enddef; -def_com(-4090)(_com,_jp_atom,_jp_absA,_jp_bond,_cyc,_cyc_sB,_cyc_eB,_set_line,_tmp_line, - _chg_len,_get_len,_ring_len,_tmp_len,_rot_ang,_adj_ang,_chg_env,_tmp_env, - _set_colorA,_set_colorB,_group_si,_group_dm,_group_wf,_group_zf, - _set_adr,_mk_bond,_set_atom,_arrange_ang,_chg_atom,_tmp_rot,_fuse,_size_atom,_numeric, - _jump_at,_set_add,_chg_add,_nop,_mark,_moff,_term,_len_s,_len_e,_len_ss,_len_ee, - _group_s,_group_e,_rest,_charge,_from,_until, - si,dl,dl_,dr,dr_,db,dm,dm_,tm,wf,wb,bd,bz,zf,zb,dt,wv,nl,vf,vb,nb,wf_r,wb_r,bd_r, - arc_lb,arc_br,arc_lbr,arc_ltr,si_,wf_,wb_,zf_,zb_,wv_,bd_); -%-------------------------------------------------------------------------------------------------- -def parameter_list= - sw_numbering,sw_expand,sw_output,sw_ext_all,sw_frame,sw_trimming,sw_arrow_emu,sw_abbreviate, - ratio_atom_bond,ratio_thickness_bond,ratio_char_bond,ratio_chain_ring,ratio_bondgap_bond, - ratio_hash_black,ratio_hashgap_bond,ratio_thickness_char,ratio_wedge_bond,ratio_atomgap_atom, - lonepairdiam,lonepairspace,offset_atom,offset_wedge,max_blength,offset_hash_gap, - offset_bond_gap,thickness_frame,offset_thickness, - numbering_start,numbering_end,defaultsize,defaultscale,labeloffset,mangle,blength, - fsize,fmargin,msize,mposition,defaultfont,atomfont,dottedline_gap, - Me,Et,CH3,NH,NH2,NO,NO2,OH,CHO,COOH,CN,SH,!CH3,!NH2,!NO2,!OH,!CHO,!COOH,!CN,!SH -enddef; -%-------------------------------------------------------------------------------------------------- -def init_par(text t)= - nA:=nB:=nC:=0; - for list=t: - if numeric list: nA:=nA+1; save_num[nA]:=list; - elseif pair list: nB:=nB+1; save_pair[nB]:=list; - elseif string list: nC:=nC+1; save_str[nC]:=list; - fi - endfor -enddef; -%-------------------------------------------------------------------------------------------------- -def store_par(text t)= - nA:=nB:=nC:=0; - for list=t: - if numeric list: nA:=nA+1; if save_num[nA]<>list: save_num[nA]:=list; fi - elseif pair list: nB:=nB+1; if save_pair[nB]<>list: save_pair[nB]:=list; fi - elseif string list: nC:=nC+1; if save_str[nC]<>list: save_str[nC]:=list; fi - fi - endfor -enddef; -%-------------------------------------------------------------------------------------------------- -def restore_par(text t)= - nA:=nB:=nC:=0; - forsuffixes list=t: - if numeric list: nA:=nA+1; if list<>save_num[nA]: list:=save_num[nA]; fi - elseif pair list: nB:=nB+1; if list<>save_pair[nB]: list:=save_pair[nB]; fi - elseif string list: nC:=nC+1; if list<>save_str[nC]: list:=save_str[nC]; fi - fi - endfor -enddef; -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -def beginfont(text s)= - begingroup - save ',f_beginchar,f_ext,blen,ext,add,ang_br,fw_n,bw_n,at_colon,temp_tag,info_cnt, - mc,info,file_name_input,bond_cnt,warning_cnt,hideH_cnt,bondC,filter_s; - string info[],mc[],mc,file_name_input,temp_tag,filter_s; - %------------------------------------------------------------------------------------------------ - def ext=ext_to_font enddef; - def add=add_to_molecule enddef; - def '=read_ud enddef; - %------------------------------------------------------------------------------------------------ - inf_NO:=inf_EN:=inf_JN:=inf_MW:=inf_FM:=inf_CAS:=inf_Cat:=inf_EXA:=inf_EXB:="-"; - mc:=temp_tag:=cal_MW:=cal_MI:=cal_FM:=filter_s:=""; - file_name_input:=default_data_file; - %------------------------------------------------------------------------------------------------ - parts_cnt:=parts_usr_start; - parts_int:=parts_int_start; - %------------------------------------------------------------------------------------------------ - char_num:=char_num+1; - store_par(parameter_list); - f_ext:=cntM:=mc_row:=info_cnt:=f_EOF:=0; - %------------------------------------------------------------------------------------------------ - for list=s: - at_colon:=scan_char(":",list,0,1); - if at_colon=1: - fw_n:=scan_char(" ",list,1,2); - bw_n:=scan_char(" ",list,-1,2); - mc_row:=mc_row+1; - mc_indent[mc_row]:=fw_n-2; - mc[mc_row]:=substring (fw_n-1,bw_n) of list; - mc:=mc&mc[mc_row]; - ef at_colon>=1: - info_cnt:=info_cnt+1; info[info_cnt]:=list; - tag_s:=substring (0,at_colon-1) of list; - var_s:=substring (at_colon,length(list)) of list; - if tag_s="f": - if f_MP=1: - if scan_char(".",var_s,0,1)=0: file_name_input:=var_s&".mcf"; - else: file_name_input:=var_s; - fi - fi - ef tag_s="t": if f_MP=1: temp_tag:=var_s; fi - ef tag_s="v": if f_MP=1: pickup_data_unit(temp_tag,var_s,1); fi - ef tag_s="v+": if f_MP=1: pickup_data_unit(temp_tag,var_s,0); fi - else: if known scantokens("inf_"&tag_s): scantokens("inf_"&tag_s):=var_s; fi - fi - fi - endfor - %------------------------------------------------------------------------------------------------ - mol_stru[0]:=nullpicture; -enddef; -%================================================================================================== -def endfont= - if f_EOF=0: - %-------------------------------------------------------------------------------------------- - if scan_bit(sw_output,Font): - if cntM>=1: - if sw_ext_all=1: ext_to_font(EXT_ALL); fi - if sw_trimming>=1: - nA:=nC:=4095; nB:=nD:=-4095; - for i=1 upto cntM: - if xpart(posM[1][i])nB: nB:=xpart(posM[2][i]); fi - if ypart(posM[1][i])nD: nD:=ypart(posM[2][i]); fi - endfor - font_wd:=nB-nA+2margin_lr; - font_ht:=nD-nC+2margin_tb; - fsize:=(font_wd,font_ht); - for i=1 upto cntM: - posM[0][i]:=posM[0][i]+(margin_lr-nA,margin_tb-nC); - posM[1][i]:=posM[1][i]+(margin_lr-nA,margin_tb-nC); - endfor - fi - %---------------------------------------------------------------------------------------- - if f_MP=0: beginchar(char_num,font_wd/bp*bp#,font_ht/bp*bp#,0) - else: beginfig(char_num) w:=charwd:=font_wd; h:=charht:=font_ht; chardp:=0; - if scan_bit(sw_frame,Outside): else: draw_corner((0,0),w,h,0.05bp); fi - fi - if scan_bit(sw_frame,Outside): draw_frame((0,0),w,h,thickness_frame); fi - if scan_bit(sw_frame,Inside): - draw_frame((margin_lr,margin_tb),w-2margin_lr,h-2margin_tb,thickness_frame); - fi - for i=1 upto cntM: - addto currentpicture also mol_stru[i] shifted posM[0][i]; mol_stru[i]:=nullpicture; - if scan_bit(sw_frame,Mol): ext(draw_frame(p[i],w[i],h[i],thickness_frame)) fi - endfor - if f_ext=1: addto currentpicture also mol_stru[0]; mol_stru[0]:=nullpicture; fi - %---------------------------------------------------------------------------------------- - else: - font_wd:=xpart(fsize); font_ht:=ypart(fsize); - if f_MP=0: beginchar(char_num,font_wd/bp*bp#,font_ht/bp*bp#,0) - else: beginfig(char_num) w:=charwd:=font_wd; h:=charht:=font_ht; - fi - draw (0,h)--(0,0)--(w,0)--(w,h)--(0,h)--(w,0) wpcs thickness_frame; - fi - %----------------------------------------------------------------------------------------- - endchar; - clearit; - %----------------------------------------------------------------------------------------- - if sw_output=Font+Info+Temp: proc_info_out(1,1); - ef sw_output=Font+Mcode+Temp: proc_mc_out(1); - ef sw_output=Font+Info+Mcode+Temp: proc_info_out(1,1); proc_mc_out(1); - ef sw_output=Font+Report+Temp: proc_report_out(1); - fi - %----------------------------------------------------------------------------------------- - ef sw_output=Info: proc_info_out(1,0); - ef sw_output=Info+Table: proc_info_out(2,0); - ef sw_output=Info+Temp: proc_info_out(1,1); - ef sw_output=Info+Mcode: proc_info_out(1,2); - ef sw_output=Mcode: proc_mc_out(0); - ef sw_output=Mcode+Temp: proc_mc_out(1); - ef sw_output=Mfont: proc_mf_out(1); - ef sw_output=Report: proc_report_out(0); - ef sw_output=Report+Temp: proc_report_out(1); - ef sw_output=MOL2k: proc_mol_out(1); - ef sw_output=MOL3k: proc_mol_out(2); - ef sw_output=Info+Mcode+Temp: proc_mc_out(1); proc_info_out(1,1); - fi - %--------------------------------------------------------------------------------------------- - %% message "* parts_cnt (0)="& decimal(parts_cnt) &" "& decimal(parts_usr-parts_usr_start); - %% message "* parts_int (0)="& decimal(parts_int) &" "& decimal(parts_int-parts_int_start); - %--------------------------------------------------------------------------------------------- - fi - %--------------------------------------------------------------------------------------------- - restore_par(parameter_list); - if proc_end=1: scantokens("bye"); fi - endgroup; -enddef; -%------------------------------------------------------------------------------------------------- -def pickup_data_unit(expr t,v,f)= - begingroup - save unit_cnt,f_end,semicol_cnt,f_match,var_n,tag_a,var_a,info_s; - string tag_a[],var_a[],info_s; - f_end:=unit_cnt:=semicol_cnt:=f_match:=inf_num:=0; - if t="n": var_n:=scantokens(v); fi - forever: - temps:=readfrom file_name_input; - if temps=EOF: f_EOF:=1; fi - exitif temps=EOF; - if subc(1,temps)="%": - ef (subc(1,temps)="+")and(subc(2,temps)<>"-"): - unit_cnt:=unit_cnt+1; - if v="*": f_match:=1; - ef t="n": if unit_cnt=var_n: f_match:=1; fi - fi - if f_match=1: - forever: - temps:=readfrom file_name_input; - if temps=EOF: f_EOF:=1; fi - exitif temps=EOF; - exitif subc(1,temps)="+"; - if subc(1,temps)<>"%": - mc_row:=mc_row+1; - fw_n:=scan_char(" ",temps,1,1); - mc_indent[mc_row]:=fw_n-1; - mc[mc_row]:=substring (fw_n-1,length(temps)) of temps; - mc:=mc&mc[mc_row]; - fi - endfor - for i=1 upto inf_num: - if known scantokens("inf_"&tag_a[i]): scantokens("inf_"&tag_a[i]):=var_a[i]; fi - endfor - f_end:=1; - else: - forever: - temps:=readfrom file_name_input; - if temps=EOF: f_EOF:=1; fi - exitif temps=EOF; - exitif (subc(1,temps)="+")and(subc(2,temps)="-"); - endfor - fi - else: - semicol_cnt:=count_semicol(temps); - inf_num:=semicol_cnt+1; - for i=1 upto inf_num: - if i<=semicol_cnt: info_s:=substring (at_semicol[i-1],at_semicol[i]-1) of temps; - else: info_s:=substring (at_semicol[semicol_cnt],length(temps)) of temps; - fi - at_colon:=scan_char(":",info_s,0,1); - tag_a[i]:=substring (0,at_colon-1) of info_s; - var_a[i]:=substring (at_colon,length(info_s)) of info_s; - if t=tag_a[i]: if v=var_a[i]: f_match:=1; fi fi - endfor - fi - exitif f_end=1; - endfor - if f=1: closefrom file_name_input; fi - endgroup; -enddef; -%-------------------------------------------------------------------------------------------------- -vardef scan_bit(expr n,b)= if b>=1: odd(floor(n/b)) else: odd(floor((frac n)/b)) fi enddef; -%-------------------------------------------------------------------------------------------------- -vardef scan_char(expr c,s,d,n)= - save k,n_s; - n_s:=0; - if d=0: for k=n upto length(s): if subc(k,s)=c: n_s:=k; fi exitif n_s>0; endfor - ef d=1: for k=n upto length(s): if subc(k,s)<>c: n_s:=k; fi exitif n_s>0; endfor - ef d=-1: for k=length(s) downto n: if subc(k,s)<>c: n_s:=k; fi exitif n_s>0; endfor - fi - n_s -enddef; -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -def set_def_MC= - save /,//,/*,*/,**,*/*,~,^,',`,<,>,:,=,\,\\,*\,\*,*\*,@,@$,$,&,&$,#,##,{,},|,||,_,inside_def_MC; - inside_def_MC:=1; - pair |,||,##; - | :=(_com,_mark); || := (_com,_moff); ##:=(_com,_len_e); - _:=Me; \:=0; \\:=zero_dm; *\:=zero_wf; \*:=zero_zf; *\*:=zero_wv; - let = ==op_equ; let : ==op_col; let ^ ==op_hat; let ~ ==op_til; let > ==op_lt; let ` ==op_bq; - def @$ == jump_atom_abs enddef; def { == read_number( enddef; let } == ); def '==read_id enddef; - def < == rot_angle enddef; def @ == jump_atom enddef; def & == cyc_atom enddef; - def # == chg_length enddef; def $ == abs_adress enddef; def &$ == &.$ enddef; - def / == group_si enddef; def // == group_dm enddef; def */ == group_wf enddef; - def /* == group_zf enddef; def */* == group_wv enddef; def ** == group_nb enddef; -enddef; -%------------------------------------------------------------------------------------------------- -vardef '(text TXT)= parts_cnt:=parts_cnt+1; read_mcf(parts_cnt)(TXT); parts_cnt enddef; -vardef read_id(text TXT)=read_mcf(incr parts_cnt)(|,#crR,TXT,##,(_com,_rest)); parts_cnt enddef; -vardef read_ud(text TXT)=read_mcf(incr parts_cnt)(dum,dum,|,TXT,(_com,_rest)); parts_cnt enddef; -vardef abs_adress primary n = if n LT 0:: (n+360)-4095 else:: n-4095 fi enddef; -primarydef a from_until b = (_from,a),(_until,b) enddef; -tertiarydef a op_equ b = if (known a)and(known b):: change_bond(a,b) else:: _nop fi enddef; -tertiarydef a op_col b = if (known a)and(known b):: change_atom(a,b) else:: _nop fi enddef; -tertiarydef a op_hat b = if known b:: (_tmp_rot,b),a else:: _nop,a fi enddef; -tertiarydef a op_til b = if known b:: (_tmp_line,b),a else:: _nop,a fi enddef; -tertiarydef a op_lt b = if known b:: (_tmp_env,b),a else:: _nop,a fi enddef; -tertiarydef a op_bq b = if known b:: (_tmp_len,b),a else:: _nop,a fi enddef; -def rot_angle primary n = (_rot_ang,n) enddef; -def cyc_atom primary n = (_cyc,n) enddef; -def jump_atom_abs primary a = - if numeric a:: (_jp_atom,$a) ef pair a:: (_jp_atom,$1),<$0,angle(a)~0`length(a),<$0 fi -enddef; -def jump_atom primary a = - if numeric a:: (_jp_atom,a) ef pair a:: <$0,angle(a)~0`length(a),<$0 fi -enddef; -def chg_length primary n = (_com,_len_s),(_chg_len,n) enddef; -def group_si secondary n = if known n:: (_group_si,n) else:: _nop fi enddef; -def group_dm secondary n = if known n:: (_group_dm,n) else:: _nop fi enddef; -def group_wf secondary n = if known n:: (_group_wf,n) else:: _nop fi enddef; -def group_zf secondary n = if known n:: (_group_zf,n) else:: _nop fi enddef; -def group_wv secondary n = /n~wv enddef; -def group_nb secondary n = /n~nb enddef; -%------------------------------------------------------------------------------------------------- -def CP = com_par enddef; def CPe = com_par_ex(0) enddef; def CPx = com_par_ex(1) enddef; -%================================================================================================= -def read_mcf(expr n)(text TXT)= - begingroup - save list_cnt,nCP; - if unknown inside_def_MC:: set_def_MC fi - nCP:=list_cnt:=0; - for list==TXT:: - if known list:: - list_cnt:=list_cnt+1; - if pair list:: nCP:=nCP+1; comD[n][nCP]:=xpart(list); parD[n][nCP]:=ypart(list); - elseif numeric list:: - if list==_nop:: message "unknown command in "AND decimal(n); - elseif list>=parts_emb_start:: - for i==1 upto cntD[list]:: - nCP:=nCP+1; comD[n][nCP]:=comD[list][i]; parD[n][nCP]:=parD[list][i]; - endfor - else:: nCP:=nCP+1; comD[n][nCP]:=_mk_bond; parD[n][nCP]:=list; - fi - elseif string list:: - str_cnt:=str_cnt+1; strD[str_cnt]:=list; - nCP:=nCP+1; comD[n][nCP]:=_set_atom; parD[n][nCP]:=str_cnt; - fi - else:: message "unknown command in "AND decimal(n); - fi - endfor - cntD[n]:=nCP; - endgroup -enddef; -%------------------------------------------------------------------------------------------------- -vardef read_number(text TXT)= - save ','`,:,nA,nB,nC; - let : == from_until; - def ' == +0.5 enddef; - def '` == +0.5` enddef; - parts_int:=parts_int+1; - nA:=0; - for list==TXT:: - if known list:: - if numeric list:: - if list==_nop:: message "unknown command in "AND decimal(parts_int); - else:: nA:=nA+1; comD[parts_int][nA]:=_numeric; parD[parts_int][nA]:=list; - fi - elseif pair list:: - if xpart(list)==_from:: nB:=ypart(list); - ef xpart(list)==_until:: nC:=ypart(list); - for i==nB upto nC:: - nA:=nA+1; comD[parts_int][nA]:=_numeric; parD[parts_int][nA]:=i; - endfor - else:: nA:=nA+1; comD[parts_int][nA]:=xpart(list); parD[parts_int][nA]:=ypart(list); - fi - fi - else:: message "unknown command in "AND decimal(parts_int); - fi - endfor - cntD[parts_int]:=nA; - parts_int %------- Retern value ------- -enddef; -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -def fuse_ring(expr a,b) = - CP(_jp_bond,a) CP(_rot_ang,180) CP(_get_len,a) CP(_com,_len_s) CP(_chg_len,_ring_len) - for i==1 upto b-2:: CP(_mk_bond,360 DIV b) endfor - CP(_com,_len_e) if a<=0:: CP(_cyc_eB,a-b+2) else:: CP(_cyc_eB,a) fi -enddef; -%------------------------------------------------------------------------------------------------- -def fuse_ring_bonds(expr a,b,c) = - CP(_jp_bond,xpart(a)) CP(_rot_ang,180) CP(_com,_len_s) - if b==6:: CP(_chg_len,1) for i==1 upto c-1:: CP(_mk_bond,60) endfor - elseif b==5:: if c==2:: CP(_chg_len,1.25) CP(_mk_bond,80) - elseif c==3:: CP(_chg_len,1.1) CP(_mk_bond,78) CP(_mk_bond,72) fi - elseif b==4:: CP(_chg_len,1.225) CP(_mk_bond,105) fi - CP(_com,_len_e) if ypart(a)<=0:: CP(_cyc_eB,ypart(a)-c+1) else:: CP(_cyc_eB,ypart(a)) fi -enddef; -%------------------------------------------------------------------------------------------------- -def fuse_ring_size(expr a,b,c) = - CP(_jp_bond,a) CP(_rot_ang,180) CP(_com,_len_s) CP(_chg_len,c DIV 10) - if b==5:: CP(_mk_bond,72-((c-9) MUL 1.5)) CP(_mk_bond,72+(c-9)) CP(_mk_bond,72+(c-9)) - elseif b==6:: CP(_mk_bond,60-(c-8)) for i==1 upto 3:: CP(_mk_bond,60+((c-8) DIV 2)) endfor - elseif b==7:: CP(_mk_bond,360 DIV 7-(c-8)) - for i==1 upto 4:: CP(_mk_bond,360 DIV 7+((c-8) DIV 2.5)) endfor - elseif b==8:: CP(_mk_bond,45-(c-8)) for i==1 upto 5:: CP(_mk_bond,45+((c-8) DIV 3)) endfor fi - CP(_com,_len_e) if a<=0:: CP(_cyc_eB,a-b+2) else:: CP(_cyc_eB,a) fi -enddef; -%================================================================================================= -vardef change_bond(expr a,b) = - save nCP; - if known b:: - parts_int:=parts_int+1; - nCP:=0; - if numeric b:: - if (b>=si)and(b<=bd_):: - if a>=parts_int_start:: - for i==1 upto cntD[a]:: - if comD[a][i]==_numeric:: - if frac parD[a][i]==0:: - com_par(_set_adr,parD[a][i]) com_par(_set_line,b) - ef b==dl:: com_par(_set_adr,floor parD[a][i]) com_par(_set_line,dr) - ef b==dr:: com_par(_set_adr,floor parD[a][i]) com_par(_set_line,dl) - else:: com_par(_set_adr,floor parD[a][i]) com_par(_set_line,b) - fi - fi - endfor - else:: com_par(_set_adr,a) com_par(_set_line,b) - fi - elseif (b>=?3)and(b<=?8[15]):: - if numeric a:: - if a>=parts_int_start:: - for i==1 upto cntD[a]:: - if comD[a][i]==_numeric:: - if b==Ph1:: fuse_ring(parD[a][i],6) - CP(_set_adr,-2) CP(_set_line,dl) CP(_set_adr,-4) CP(_set_line,dl) - ef b==Ph2:: fuse_ring(parD[a][i],6) - CP(_set_adr,-1) CP(_set_line,dl) CP(_set_adr,-3) CP(_set_line,dl) - CP(_set_adr,-5) CP(_set_line,dl) - ef (b>=?5[11])and(b<=?5[15]):: fuse_ring_size(a,5,b-?5[11]+11) - ef (b>=?6[11])and(b<=?6[15]):: fuse_ring_size(a,6,b-?6[11]+11) - ef (b>=?7[11])and(b<=?7[15]):: fuse_ring_size(a,7,b-?7[11]+11) - ef (b>=?8[11])and(b<=?8[15]):: fuse_ring_size(a,8,b-?8[11]+11) - else:: fuse_ring(parD[a][i],b-?3+3) - fi - else:: - if b==?6:: - if (frac comD[a][i]==0)and(frac parD[a][i]==0):: - fuse_ring_bonds((comD[a][i],parD[a][i]),6,4) - ef frac comD[a][i]==0:: fuse_ring_bonds((comD[a][i],floor parD[a][i]),6,3) - ef frac parD[a][i]==0:: fuse_ring_bonds((floor comD[a][i],parD[a][i]),6,3) - else:: fuse_ring_bonds((floor comD[a][i],floor parD[a][i]),6,2) - fi - ef b==?5:: - if (frac comD[a][i]==0)and(frac parD[a][i]==0):: - fuse_ring_bonds((comD[a][i],parD[a][i]),5,3) - ef frac comD[a][i]==0:: fuse_ring_bonds((comD[a][i],floor parD[a][i]),5,2) - ef frac parD[a][i]==0:: fuse_ring_bonds((floor comD[a][i],floor parD[a][i]),5,2) - fi - ef b==?4:: fuse_ring_bonds((comD[a][i],parD[a][i]),4,2) - ef b==?6[3]:: fuse_ring_bonds((comD[a][i],parD[a][i]),6,3) - ef b==?6[2]:: fuse_ring_bonds((comD[a][i],parD[a][i]),6,2) - ef b==?5[2]:: fuse_ring_bonds((comD[a][i],parD[a][i]),5,2) - ef b==Ph1:: fuse_ring_bonds((comD[a][i],parD[a][i]),6,4) - CP(_set_adr,-1) CP(_set_line,dl) CP(_set_adr,-3) CP(_set_line,dl) - ef b==Ph2:: fuse_ring_bonds((comD[a][i],parD[a][i]),6,4) - CP(_set_adr,-2) CP(_set_line,dl) CP(_set_adr,-4) CP(_set_line,dl) - fi - fi - endfor - else:: - if b==Ph1:: fuse_ring(a,6) CP(_set_adr,-2) CP(_set_line,dl) - CP(_set_adr,-4) CP(_set_line,dl) - ef b==Ph2:: fuse_ring(a,6) CP(_set_adr,-1) CP(_set_line,dl) - CP(_set_adr,-3) CP(_set_line,dl) CP(_set_adr,-5) CP(_set_line,dl) - ef (b>=?5[11])and(b<=?5[15]):: fuse_ring_size(a,5,b-?5[11]+11) - ef (b>=?6[11])and(b<=?6[15]):: fuse_ring_size(a,6,b-?6[11]+11) - ef (b>=?7[11])and(b<=?7[15]):: fuse_ring_size(a,7,b-?7[11]+11) - ef (b>=?8[11])and(b<=?8[15]):: fuse_ring_size(a,8,b-?8[11]+11) - else:: fuse_ring(a,b-?3+3) - fi - fi - ef pair a:: - if b==?6:: fuse_ring_bonds(a,6,4) - ef b==?5:: fuse_ring_bonds(a,5,3) - ef b==?4:: fuse_ring_bonds(a,4,2) - ef b==?6[3]:: fuse_ring_bonds(a,6,3) - ef b==?6[2]:: fuse_ring_bonds(a,6,2) - ef b==?5[2]:: fuse_ring_bonds(a,5,2) - ef b==Ph1:: fuse_ring_bonds(a,6,4) - CP(_set_adr,-1) CP(_set_line,dl) CP(_set_adr,-3) CP(_set_line,dl) - ef b==Ph2:: fuse_ring_bonds(a,6,4) - CP(_set_adr,-2) CP(_set_line,dl) CP(_set_adr,-4) CP(_set_line,dl) - fi - fi - fi - elseif color b:: color_list[incr cntC]:=b; CPe(a)(_set_colorB,cntC) - fi - cntD[parts_int]:=nCP; - parts_int %------- Retern value ------- - fi -enddef; -%------------------------------------------------------------------------------------------------- -vardef change_atom(expr a,b)= - save nCP; - if known b:: - parts_int:=parts_int+1; - nCP:=0; - if numeric b:: - if (b GT parts_emb_start)and(b<=parts_atom_end):: CPe(a)(_chg_atom,b) - ef b==NH:: CPe(a)(_chg_atom,N) if NH<>xNH:: CP(_tmp_line,nl) fi - CP(_com,_group_s) CPx(a)(_group_si,H) CP(_com,_group_e) - ef b==N!:: CPe(a)(_chg_atom,N) CP(_com,_group_s) CPx(a)(_group_si,_) CP(_com,_group_e) - ef b==N!2:: CPe(a)(_chg_atom,N) CP(_com,_group_s) CPx(a)(_group_si,!) CP(_com,_group_e) - ef b==??:: CP(_com,_group_s) CP(_tmp_rot,35) CPx(a)(_group_si,_) - CP(_tmp_rot,-35) CPx(a)(_group_si,_) CP(_com,_group_e) - ef b==SOO:: CPe(a)(_chg_atom,S) CP(_com,_group_s) CP(_tmp_rot,35) CPx(a)(_group_dm,O) - CP(_tmp_rot,-35) CPx(a)(_group_dm,O) CP(_com,_group_e) - ef b==SO:: CPe(a)(_chg_atom,S) CP(_com,_group_s) CPx(a)(_group_dm,O) CP(_com,_group_e) - ef b==n_:: CP(_com,_group_s) CP(_set_add,a_minus) CP(_chg_add,a) CP(_com,_group_e) - ef b==p_:: CP(_com,_group_s) CP(_set_add,a_plus) CP(_chg_add,a) CP(_com,_group_e) - fi - ef pair b:: - CP(_com,_group_s) - if a>=parts_emb_start:: - for i==1 upto cntD[a]:: - if comD[a][i]==_numeric:: - if xpart(b)==_group_wf:: - if frac parD[a][i]==0:: CP(_set_adr,parD[a][i]) CP(_group_wf,ypart(b)) - else:: CP(_set_adr,floor parD[a][i]) CP(_group_zf,ypart(b)) - fi - ef xpart(b)==_group_zf:: - if frac parD[a][i]==0:: CP(_set_adr,parD[a][i]) CP(_group_zf,ypart(b)) - else:: CP(_set_adr,floor parD[a][i]) CP(_group_wf,ypart(b)) - fi - else:: - CP(_set_adr,parD[a][i]) CP(xpart(b),ypart(b)) - fi - else:: - CP(comD[a][i],parD[a][i]) - fi - endfor - else:: CP(_set_adr,a) CP(xpart(b),ypart(b)) - fi - CP(_com,_group_e) - ef color b:: color_list[incr cntC]:=b; CPe(a)(_set_colorA,cntC) - fi - cntD[parts_int]:=nCP; - parts_int %------- Retern value ------- - fi -enddef; -%------------------------------------------------------------------------------------------------- -def com_par(expr a,b)= nCP:=nCP+1; comD[parts_int][nCP]:=a; parD[parts_int][nCP]:=b; enddef; -%------------------------------------------------------------------------------------------------- -def com_par_ex(expr f)(expr c)(expr a,b)= - if c>=parts_emb_start:: - for i==1 upto cntD[c]:: - if comD[c][i]==_numeric:: com_par(_set_adr,parD[c][i]) com_par(a,b) - ef f==1:: com_par(comD[c][i],parD[c][i]) fi - endfor - else:: com_par(_set_adr,c) com_par(a,b) - fi -enddef; -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -def puts(expr POS)(expr STR)= - begingroup - save temp_c,temp_p; - pair temp_p; - string temp_c; - temp_p:=POS; - nC:=defaultscale*defaultsize; - if (defaultfont="draw")or(f_MP=0): - for i=1 upto length(STR): - temp_c:=subc(i,STR); - draw_char(temp_c,temp_p,nC,ratio_thickness_char*nC,0); - temp_p:=temp_p+(nC*tbl_char_wd[ASCII(temp_c)],0); - endfor - else: - for i=1 upto length(STR): - temp_c:=subc(i,STR); - temp_picture:=temp_c infont defaultfont scaled defaultscale; - addto currentpicture also temp_picture shifted temp_p; - temp_p:=temp_p+(lrcorner temp_picture-llcorner temp_picture); - endfor - fi - endgroup -enddef; -%================================================================================================= -def ext_setup= - pickup pencircle scaled ext_defaultline; - dotlabeldiam:=3bp; - labeloffset:=3bp; - save em; - em=defaultscale*defaultsize; - if (defaultfont="draw")or(f_MP=0): - save label,dotlabel; - def label = label_emu enddef; - def dotlabel = dotlabel_emu enddef; - else: - defaultfont:=mpfont; - fi - if (sw_arrow_emu=1)or(f_MP=0): - save drawarrow,drawdblarrow; - def drawarrow = drawarrow_emu enddef; - def drawdblarrow = drawdblarrow_emu enddef; - fi -enddef; -%------------------------------------------------------------------------------------------------- -def add_to_molecule(text TXT)= - begingroup - save w,h,n,l,p,am,aw,A,B,plus,minus,lonepair,__,**,=>,<<,/*; - numeric A[]dir,B[]up,A[]ang,B[]ang; - pair __,p[],A[],B[]s,B[]e,B[]m,A[]up,A[]left,A[]right,A[]down,B[]up,B[]left,B[]right,B[]down; - path B[]; - ext_setup; - def plus = circled_plus_add enddef; - def minus = circled_minus_add enddef; - def lonepair = lone_pair_add enddef; - let ** = scaled; - let << = rotated; - let => = shifted; - __ = (1,0); - primarydef a /* b = point b of a enddef; - %---------------------------------------------- - w:=mol_wd; h:=mol_ht; l:=blen; aw:=atom_wd; - p0:=(minX,minY); - An:=cntA; Bn:=cntB; - lonepairdiam:=0.3aw; - lonepairspace:=.7aw; - circlediam:=.6aw; - circlepen:=.2bp; - for i=1 upto cntA: - A[i]:=posA[i]; A[i]ang:=angX[i]; A[i]up:=dir(angX[i]); - A[i]left:=dir(angX[i]+90); A[i]right:=dir(angX[i]-90); A[i]down:=dir(angX[i]+180); - endfor - for i=1 upto cntB: - B[i]s:=posA[sB[i]]; B[i]e:=posA[eB[i]]; B[i]m:=0.5[B[i]s,B[i]e]; - B[i]:=B[i]s--B[i]e; - B[i]ang:=angB[i]; B[i]up:=dir(angB[i]); - B[i]down:=dir(angB[i]+180); B[i]left:=dir(angB[i]+90); B[i]right:=dir(angB[i]-90); - endfor - TXT addto mol_stru[cntM] also currentpicture; clearit; - endgroup; -enddef; -%------------------------------------------------------------------------------------------------- -def ext_to_font(text TXT)= - begingroup - save w,h,An,Bn,wd,ht,n,p,am,aw,__,**,<<,=>,/*; - pair __,p[]; - let ** = scaled; - let << = rotated; - let => = shifted; - primarydef a /* b = point b of a enddef; - __ = (1,0); - %---------------------------------------------------------------------- - ext_setup; - w:=xpart(fsize); - h:=ypart(fsize); - An:=cntA; - Bn:=cntB; - w0:=w-2margin_lr; - h0:=h-2margin_tb; - p0:=(margin_lr,margin_tb); - aw:=atom_wd; - n:=cntM; - for i=1 upto n: p[i]:=posM[1][i]; w[i]:=wdM[i]; h[i]:=htM[i]; endfor - TXT addto mol_stru[0] also currentpicture; clearit; f_ext:=1; - endgroup; -enddef; -%------------------------------------------------------------------------------------------------- -vardef image_emu(text TXT) = - save_picture:=currentpicture; currentpicture:=nullpicture; - TXT; - temp_picture:=currentpicture; currentpicture:=save_picture; - temp_picture -enddef; -%------------------------------------------------------------------------------------------------- -vardef scan_picture(expr PIC,SD)= - save iw,erase_h,erase_v; - path erase_h,erase_v; - nD:=0.2bp; - if (SD=1)or(SD=3): nS:=-max_labelsize; nE:=max_labelsize; nB:=nD; nC:=-nD; - elseif (SD=2)or(SD=4): nS:=max_labelsize; nE:=-max_labelsize; nB:=-nD; nC:=0; - fi - if (SD=1)or(SD=2): - erase_h:=unitsquare xscaled 2max_labelsize yscaled nD shifted (-max_labelsize,nC); - elseif (SD=3)or(SD=4): - erase_v:=unitsquare xscaled nD yscaled 2max_labelsize shifted (nC,-max_labelsize); - fi - temp_picture:=currentpicture; - currentpicture:=PIC; - erase fill unitsquare scaled nD shifted (-max_labelsize,-max_labelsize); - iw:=totalweight currentpicture; - if iw>=0: - for i=nS step nB until nE: - if (SD=1)or(SD=2): erase fill erase_h shifted (0,i); - elseif (SD=3)or(SD=4): erase fill erase_v shifted (i,0); - fi - nA:=i; - exitif (totalweight currentpicture)=1: ratio_atom_bond:=0.25; fi - if (sw_expand=1)or(scan_bit(sw_output,MOL2k))or(scan_bit(sw_output,MOL3k)): - expand_set; crR:=1; else: crR:=-ratio_chain_ring; - fi - cntA:=cntB:=cntC:=cnt_group:=0; strD[0]:="C"; str_cnt:=2000; - %----------------------------------------------------------------------------------------------- - font_wd:=xpart(fsize); - font_ht:=ypart(fsize); - margin_lr:=xpart(fmargin); - margin_tb:=ypart(fmargin); - %=============================================================================================== - read_mcf(0)(TXT,(_com,_term)); - proc_bond_atom(0)(1); - if (cnt_group>0)and(not scan_bit(sw_abbreviate,Group)): read_group(0)(1); fi - char_use_check; - %-scaling--------------------------------------------------------------------------------------- - if blength>1: blen:=blength; proc_size_setup; proc_skeleton(0); proc_scaling; - elseif blength>0: blen:=font_wd*blength; proc_size_setup; proc_skeleton(0); proc_scaling; - else: - blen:=3mm; - proc_size_setup; - if xpart(msize)<1: m_wd:=font_wd*xpart(msize); else: m_wd:=font_wd; fi - if ypart(msize)<1: m_ht:=font_ht*ypart(msize); else: m_ht:=font_ht; fi - for i=1 upto 6: - proc_skeleton(0); proc_scaling; - if (mol_ht/mol_wd)>(m_ht/m_wd): - if ypart(msize)>1: factor:=ypart(msize)/mol_ht; - else: factor:=((font_ht-2margin_tb)*ypart(msize))/mol_ht; - fi - else: - if xpart(msize)>1: factor:=xpart(msize)/mol_wd; - else: factor:=((font_wd-2margin_lr)*xpart(msize))/mol_wd; - fi - fi - exitif (factor>=1-eps)and(factor<=1+eps); blen:=blen*factor; proc_size_setup; - endfor - if blen>max_blength: blen:=max_blength; proc_size_setup; proc_skeleton(0); proc_scaling; fi - fi - %----------------------------------------------------------------------------------------------- - for i=1 upto cntA: - if addA[i]<>0: - temp_c:=char(addA[i]); - if temp_c="+": chargeA[i]:=1; elseif temp_c="-": chargeA[i]:=-1; else: chargeA[i]:=0; fi - else: chargeA[i]:=0; - fi - endfor - %=============================================================================================== - if scan_bit(sw_output,Font): - %-draw atom----------------------------------------------------------------------------------- - if sw_numbering=0: for i=1 upto cntA: draw_atom(i); endfor fi - %-draw add to atom---------------------------------------------------------------------------- - if (not scan_bit(sw_numbering,Atom))and(not scan_bit(sw_numbering,Bond)): - for i=1 upto cntA: - if addA[i]<>0: - nA:=angX[i]+add_rot[i]; nC:=nA mod 90; - if numS[i]=0: nB:=.5atom_wd; - else: nB:=.85wdA[i]+iif(nC<45,sind(nC),cosd(nC))*.5wdA[i]; - fi - temp_p:=sfrt(posA[i]-(.35atom_wd,.35atom_wd),nB,nA); - draw_char(temp_c,temp_p,atom_wd,bond_pen_wd*ratio_char_bond,0); - fi - endfor - fi - %-draw bond----------------------------------------------------------------------------------- - for i=1 upto cntB: if lineB[i]=si_: draw_bond(i); fi endfor - %-atom numbering------------------------------------------------------------------------------ - if scan_bit(sw_numbering,Atom): - for i=1 upto cntA: - if (i>=numbering_start)and(i<=numbering_end): - if scan_bit(sw_numbering,Brock): nA:=i-numbering_start+1; - elseif scan_bit(sw_numbering,Inverse): - nA:=iif(numbering_end=numbering_start)and(i<=numbering_end): - if scan_bit(sw_numbering,Brock): nB:=i-numbering_start+1; - elseif scan_bit(sw_numbering,Inverse): - nB:=iif(numbering_end1: sftX:=xpart(mposition)-minX; - else: sftX:=margin_lr-minX+(font_wd-mol_wd-2margin_lr)*xpart(mposition); - fi - if ypart(mposition)>1: sftY:=ypart(mposition)-minY; - else: sftY:=margin_tb-minY+(font_ht-mol_ht-2margin_tb)*ypart(mposition); - fi - cntM:=cntM+1; - posM[0][cntM]:=(sftX,sftY); - posM[1][cntM]:=(minX+sftX,minY+sftY); - posM[2][cntM]:=(maxX+sftX,maxY+sftY); - wdM[cntM]:=mol_wd; - htM[cntM]:=mol_ht; - mol_stru[cntM]:=currentpicture; - clearit; - if cntC>=1: - for i=1 upto cntA: if colorA[i]<>0: colorA[i]:=0; fi endfor - for i=1 upto cntB: if colorB[i]<>0: colorB[i]:=0; fi endfor - fi - fi - if sw_output>=Info: proc_check_structure(0); fi - endgroup; -enddef; -%------------------------------------------------------------------------------------------------- -def add_group= - if f_at=1: nE:=getA(adrT); check_adrA(nE); else: nE:=cntA+1; fi - cnt_group:=cnt_group+1; cnt_group[cnt_group]:=0; - store_group(_jp_absA,nE) - store_group(_com,_len_s) - if lineT<>nb: store_group(_tmp_line,lineT) fi - if rotT<>0: store_group(_rot_ang,rotT) fi - if lenT<>crR: store_group(_chg_len,lenT) - ef bondL<>crR: if bondL>=0: store_group(_chg_len,-bondL) else: store_group(_chg_len,bondL) fi - fi - if envT<>hz: store_group(_chg_env,envT) fi - if lineT=nl: store_group(_chg_len,_size_atom) store_group(_adj_ang,0) fi - if lineT<>nb: store_group(_mk_bond,0) fi - for i=1 upto cntD[par]: store_group(comD[par][i],parD[par][i]) endfor - store_group(_com,_len_e) - store_group(_chg_env,hz) - store_group(_com,_term) - if f_lineT=0: lineT:=si; fi - if f_lenT=0: lenT:=crR; fi - if f_rotT=0: rotT:=0; fi - if f_envT=0: envT:=hz; fi -enddef; -%------------------------------------------------------------------------------------------------- -def store_group(expr a,b)= - cnt_group[cnt_group]:=cnt_group[cnt_group]+1; - com_group[cnt_group][cnt_group[cnt_group]]:=a; par_group[cnt_group][cnt_group[cnt_group]]:=b; -enddef; -%================================================================================================= -def read_group(expr a)(expr n)= - save_cnt_group:=cnt_group; - save_cntD:=cntD[a]; - for i=n upto cnt_group: - for j=1 upto cnt_group[i]: - cntD[a]:=cntD[a]+1; comD[a][cntD[a]]:=com_group[i][j]; parD[a][cntD[a]]:=par_group[i][j]; - endfor - endfor - proc_bond_atom(a)(save_cntD+1); - if cnt_group>save_cnt_group: read_group(a)(save_cnt_group+1); fi -enddef; -%================================================================================================= -def draw_frame(expr PS,LX,LY,PN)= - draw ((0,0)--(LX,0)--(LX,LY)--(0,LY)--cycle) shifted PS withpen pensquare scaled PN; -enddef; -%------------------------------------------------------------------------------------------------- -def draw_corner(expr PS,LX,LY,PN)= - draw( 0, 0) shifted PS wpcs PN; draw(LX, 0) shifted PS wpcs PN; - draw(LX,LY) shifted PS wpcs PN; draw( 0,LY) shifted PS wpcs PN; -enddef; -%------------------------------------------------------------------------------------------------- -def proc_size_setup= - if (blen*ratio_atom_bond+offset_atom)<.8blen: - atom_wd:=blen*ratio_atom_bond+offset_atom; - else: - atom_wd:=.8blen; ratio_chain_ring:= .5; - fi - wedge_wd:= blen*ratio_wedge_bond+offset_wedge; - hash_gap:= blen*ratio_hashgap_bond+offset_hash_gap; - bondgap:= blen*ratio_bondgap_bond+offset_bond_gap; - bond_pen_wd:= blen*ratio_thickness_bond+offset_thickness; -enddef; -%------------------------------------------------------------------------------------------------- -def proc_scaling= - minX:=minY:=4095; - maxX:=maxY:=-4095; - for i=1 upto cntA: - xpos:=xpart(posA[i]); - ypos:=ypart(posA[i]); - if numS[i]<>0: - nU:=nD:=nP:=nL:=nR:=0; - for j=1 upto length(strD[numS[i]]): - temp_c:=subc(j,strD[numS[i]]); - if (temp_c="^"): nU:=.5atom_wd; - elseif (temp_c="_"): nD:=.5atom_wd; - elseif (temp_c<>"{")and(temp_c<>"}"): nP:=nP+atom_wd*tbl_char_wd[ASCII(temp_c)]; - fi - endfor - if (angX[i]<=90)or(angX[i]>=270): nR:=nP; else: nL:=nP; fi - if (xpos-nL+.5atom_wd)maxX: maxX:=xpos+nR-.5atom_wd; fi - if (ypos-nD-.5atom_wd)maxY: maxY:=ypos+nU+.5atom_wd; fi - else: if xposmaxX: maxX:=xpos; fi - if yposmaxY: maxY:=ypos; fi - fi - endfor - mol_wd:=maxX-minX; mol_ht:=maxY-minY; -enddef; -%------------------------------------------------------------------------------------------------- -def char_use_check= - for i=1 upto 128: f_char[i]:=0; endfor - if sw_numbering>=1: for j=a_zero upto a_nine: f_char[j]:=1; endfor - else: - for i=1 upto cntA: - if numS[i]<>0: - for j=1 upto length(strD[numS[i]]): f_char[ASCII(subc(j,strD[numS[i]]))]:=1; endfor - fi - endfor - fi -enddef; -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -def proc_bond_atom(expr a)(expr n)= - f_bra:=f_term:=rotT:=f_lineT:=f_rotT:=f_lenT:=f_envT:=envT:=envB:=strAT:=f_at:=0; - bondL:=crR; lenT:=crR; sB[0]:=0; eB[0]:=1; lineT:=si; - addAT:=markA:=markB:=saveA:=saveB:=0; - %----------------------------------------------------------------------------------------------- - for i=n upto cntD[a]: com:=comD[a][i]; par:=parD[a][i]; - if com=_mk_bond: if (par=0)and(rotT<>0): rotT:=0; fi add_atom(0); - ef com=_set_adr: adrT:=par; - ef com=_com: if par=_mark: saveA:=markA; saveB:=markB; markA:=cntA; markB:=cntB; - ef par=_rest: markA:=saveA; markB:=saveB; - ef par=_moff: markA:=markB:=0; - ef par=_term: termA; - ef par=_len_s: temp_lenE:=bondL; ef par=_len_e: bondL:=temp_lenE; - ef par=_len_ss: temp_lenF:=bondL; ef par=_len_ee: bondL:=temp_lenF; - ef par=_group_s: f_at:=1; if lineT<>si: f_lineT:=1; fi if rotT<>0: f_rotT:=1; fi - if lenT<>crR: f_lenT:=1; fi if envT<>hz: f_envT:=1; fi - ef par=_group_e: f_at:=0; f_lineT:=f_rotT:=f_lenT:=f_envT:=rotT:=envT:=0; - lineT:=si; lenT:=crR; - fi - ef com=_set_atom: strAT:=par; - ef com=_group_si: add_group; - ef com=_group_dm: lineT:=dm; add_group; - ef com=_group_wf: lineT:=wf; add_group; - ef com=_group_zf: lineT:=zf; add_group; - ef com=_jp_bond: termA; nA:=getB(par); check_adrB(nA); sB[cntB+1]:=sB[nA]; f_bra:=1; - ef com=_jp_atom: termA; nA:=getA(par); check_adrA(nA); sB[cntB+1]:=nA; f_bra:=1; - ef com=_jp_absA: sB[cntB+1]:=par; f_bra:=1; temp_cntB:=cntB; - ef com=_chg_atom: numS[getA(adrT)]:=parD[par][1]; - ef com=_chg_len: if par=_ring_len: bondL:=ringL; else: bondL:=par; fi - ef com=_get_len: if par=_tmp_len: if bondL=crR: bondL:=lenT; fi - ef par=_ring_len: if lenT<>crR: bondL:=lenT; else: if bondL<0: bondL:=1; fi fi - else: ringL:=lenB[getB(par)]; fi - ef com=_tmp_len: lenT:=par; - ef com=_set_line: lineB[getB(adrT)]:=par; - ef com=_tmp_line: lineT:=par; - ef com=_tmp_rot: rotT:=par; - ef com=_cyc: check_adrA(getA(par)); add_atom(getA(par)); - ef com=_cyc_eB: add_atom(eB[getB(par)]); - ef com=_cyc_sB: add_atom(sB[getB(par)]); - ef com=_chg_env: envB:=par; - ef com=_tmp_env: envT:=par; - ef com=_set_colorA: colorA[getA(adrT)]:=par; - ef com=_set_colorB: colorB[getB(adrT)]:=par; - ef com=_set_add: addAT:=par; - ef com=_chg_add: addA[getA(par)]:=addAT; addAT:=0; if rotT<>0: add_rot[getA(par)]:=rotT; fi - else: - fi - endfor -enddef; -%------------------------------------------------------------------------------------------------- -def add_atom(expr n)= - cntB:=cntB+1; lineB[cntB]:=lineT; lineT:=si; - if lenT=crR: lenB[cntB]:=bondL; else: lenB[cntB]:=lenT; lenT:=crR; fi - if f_bra=0: cntA:=cntA+1; sB[cntB]:=cntA; numS[cntA]:=strAT; - addA[cntA]:=addAT; addAT:=strAT:=add_rot[cntA]:=0; - if rotT<>0: add_rot[cntA]:=rotT; rotT:=0; fi - else: f_bra:=0; fi - if n=0: eB[cntB]:=cntA+1; f_term:=0; else: eB[cntB]:=n; f_term:=1; fi -enddef; -%------------------------------------------------------------------------------------------------- -def check_adrA(expr n)= - if (n>iif(f_term=0,cntA+1,cntA))or(n<=0): errmessage("cntA=[ "&decimal(n)&" ]"); fi -enddef; -def check_adrB(expr n)= if (n>cntB)or(n<=0): errmessage("cntB=[ "&decimal(n)&" ]"); fi enddef; -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -def proc_skeleton(expr a)= - markA:=markB:=cntA:=cntB:=f_bra:=rotT:=f_term:=0; - envT:=envB:=f_lineT:=f_rotT:=f_lenT:=f_envT:=0; lineT:=si; angT:=mangle; - angA[0]:=angB[0]:=angX[0]:=0; posA[0]:=posBs:=posBe:=(0,0); - %----------------------------------------------------------------------------------------------- - for i=1 upto cntD[a]: com:=comD[a][i]; par:=parD[a][i]; - if com=_mk_bond: if (par=0)and(rotT<>0):par:=rotT; rotT:=0; fi add_bond(par,1); - ef com=_com: if par=_mark: saveA:=markA; saveB:=markB; markA:=cntA; markB:=cntB; - ef par=_rest: markA:=saveA; markB:=saveB; - ef par=_moff: markA:=markB:=0; ef par=_term: termB; - ef par=_group_e: lineT:=si; lenT:=crR; rotT:=envT:=0; - fi - ef com=_jp_bond: termB; nA:=getB(par); posBs:=posA[sB[nA]]; angT:=angB[nA]; f_bra:=1; rotT:=0; - ef com=_jp_atom: termB; adrT:=getA(par); posBs:=posA[adrT]; angT:=angX[adrT]; f_bra:=1; rotT:=0; - ef com=_jp_absA: adrT:=par; posBs:=posA[adrT]; - angT:=angX[adrT]; f_bra:=1; rotT:=0; temp_cntB:=cntB; - ef com=_adj_ang: angT:=adjust_ang(angT); - ef com=_rot_ang: if par>-3700: angT:=(angT+par) mod 360; else: angT:=(par+4095) mod 360; fi - ef com=_tmp_rot: rotT:=par; - ef com=_group_si: rotT:=0; - ef com=_group_wf: rotT:=0; - ef com=_chg_env: envB:=par; - ef com=_tmp_env: envT:=par; - ef com=_cyc: add_bond(angle(posA[getA(par)]-posBs)-angT,0); - ef com=_cyc_sB: add_bond(angle(posA[sB[getB(par)]]-posBs)-angT,0); - ef com=_cyc_eB: add_bond(angle(posA[eB[getB(par)]]-posBs)-angT,0); - else: - fi - endfor -enddef; -%------------------------------------------------------------------------------------------------- -def add_bond(expr ROT,FLG)= - if ROT=_arrange_ang: nA:=arrange_ang(angT mod 360); else: nA:=ROT; fi - if f_bra=0: - adrT:=cntA:=cntA+1; posA[cntA]:=posBs; angA[cntA]:=angT; - angX[cntA]:=(angT+nA/2+iif(nA>=0,-90,90)) mod 360; - else: f_bra:=0; - fi - cntB:=cntB+1; - if nA>-3700: angB[cntB]:=angT:=(angT+nA) mod 360; else: angB[cntB]:=angT:=nA+4095; fi - if FLG=1: - if lenB[cntB]=_size_atom: posBe:=sfrt(posBs,atom_wd,angT); - else: - nA:=lenB[cntB]; - if nA<0: nB:=glu_atom(adrT)+glu_atom(cntA+1); nA:=abs(nA); else: nB:=0; fi - posBe:=sfrt(posBs,nA*blen+nB,angT); - fi - posA[cntA+1]:=posBe; f_term:=0; - else: f_term:=1; - fi - posBs:=posBe; -enddef; -%------------------------------------------------------------------------------------------------- -vardef arrange_ang(expr n)= - if cntB=0: angT:=(angT-180) mod 360; 180 - else: - if envB>=parts_emb_start: parD[envB][cntB-temp_cntB+3] - else: if envB=hz: if n=0: 60 ef n<=90: -60 ef n<=180: 60 ef n<270: -60 else: 60 fi - ef envB=vt: if n=0: -60 ef n<90: 60 ef n<=180: -60 ef n<=270: 60 else: -60 fi - ef abs(envB)<=180: envB fi - fi - fi -enddef; -%------------------------------------------------------------------------------------------------- -vardef adjust_ang(expr n)= if (n<40)or(n>320): 0 ef n<140: 90 ef n<220: 180 else: 270 fi enddef; -%================================================================================================= -vardef getA(expr n)= if n>=0: markA+n ef n>=-999: cntA+n+1 else: n+4095 fi enddef; -vardef getB(expr n)= if n>=0: markB+n ef n>=-999: cntB+n+1 else: n+4095 fi enddef; -%------------------------------------------------------------------------------------------------- -def termA= - if f_term=0: - if f_bra=0: - cntA:=cntA+1; numS[cntA]:=strAT; addA[cntA]:=addAT; add_rot[cntA]:=rotT; - addAT:=strAT:=rotT:=0; - else: f_bra:=0; - fi - f_term:=1; - fi -enddef; -%------------------------------------------------------------------------------------------------- -def termB= - if f_term=0: if f_bra=0:cntA:=cntA+1; angX[cntA]:=angT mod 360; else:f_bra:=0; fi f_term:=1; fi -enddef; -%------------------------------------------------------------------------------------------------- -vardef glu_atom(expr NUM)= - if numS[NUM]<>0: nE:=angT mod 90; nF:=0.5atom_wd;(iif(nE<45,sind(nE),cosd(nE))*nF)++nF else: 0 fi -enddef; -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -def draw_atom(expr NUM)= - begingroup - if numS[NUM]<>0: - save slen,f_wd,f_ht,r_ff,pos_a,pos_c,temp_c,temp_s,dir_str; - string temp_c,temp_s; - pair pos_a,pos_c; - %------------------------------------------------------- - temp_s:=strD[numS[NUM]]; slen:=length(temp_s); nA:=angX[NUM]; - dxA[NUM]:=dir_str:=iif((nA<=90)or(nA>=270),1,-1); - wdA[NUM]:=nC:=0; pos_c:=(0,0); - pos_a:=posA[NUM]-(.5atom_wd*dir_str,.5atom_wd); - if (atomfont<>"draw")and(f_MP=1): - atom_picture:="C" infont atomfont; - r_ff:=atom_wd/(ypart(ulcorner atom_picture)-ypart(llcorner atom_picture)); - fi - for i=1 upto slen: - if nC=0: - temp_c:=subc(i,temp_s); - if (dir_str=-1)and(temp_c="{"): - nD:=i; nC:=0; for j=nD upto slen: nC:=nC+1; exitif subc(j,temp_s)="}"; endfor - fi - else: nC:=nC-1; temp_c:=subc(nD+nC,temp_s); - fi - if temp_c="_": pos_c:=iif(pos_c=(0,0),(0,-.5atom_wd),(0,0)); - elseif temp_c="^": pos_c:=iif(pos_c=(0,0),(0, .5atom_wd),(0,0)); - elseif (temp_c<>"{")and(temp_c<>"}"): - if (atomfont="draw")or(f_MP=0): - f_wd:=atom_wd*tbl_char_wd[ASCII(temp_c)]; - if dir_str=-1: pos_a:=pos_a-(f_wd,0); fi - draw_char(temp_c,pos_a+pos_c,atom_wd,bond_pen_wd*ratio_char_bond,NUM); - if scan_bit(sw_frame,Atom): draw_frame(pos_a+pos_c,f_wd,atom_wd,thickness_frame); fi - if dir_str=1: pos_a:=pos_a+(f_wd,0); fi - else: - atom_picture:=temp_c infont atomfont; - f_wd:=(xpart(lrcorner atom_picture)-xpart(llcorner atom_picture))*r_ff; - f_ht:=(ypart(urcorner atom_picture)-ypart(llcorner atom_picture))*r_ff; - if dir_str=-1: pos_a:=pos_a-(f_wd,0); fi - addto currentpicture also atom_picture scaled (r_ff*(1-2ratio_atomgap_atom)) - shifted (pos_a+pos_c+(f_wd*ratio_atomgap_atom,f_ht*ratio_atomgap_atom)) - Cp(colorA[NUM]); - if scan_bit(sw_frame,Atom): draw_frame(pos_a+pos_c,f_wd,f_ht,thickness_frame); fi - if dir_str=1: pos_a:=pos_a+(f_wd,0); fi - fi - wdA[NUM]:=wdA[NUM]+f_wd; - fi - endfor - fi - endgroup -enddef; -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -def draw_bond(expr NUM)= - begingroup - save ww,aw,ap,am,ang,col,len,Ls,Le,pA,zA,zL; - pair pA,Ls,Le; - path zA,zL; - %----------------------------------------------------------------------------------------------- - nL:=lineB[NUM]; ang:=angB[NUM]; nS:=sB[NUM]; nE:=eB[NUM]; - col:=colorB[NUM]; zL:=posA[nS]--posA[nE]; ww:=wedge_wd; ap:=ang+90; am:=ang-90; aw:=atom_wd; - %----------------------------------------------------------------------------------------------- - if (numS[nS]=0)and(numS[nE]=0)or(sw_numbering>=1): - Ls:=posA[nS]; Le:=posA[nE]; pA:=(.1,.9); - ef numS[nS]=0: Le:=zL intersectionpoint frame_str(nE); Ls:=posA[nS]; pA:=(.15,1); - ef numS[nE]=0: Ls:=zL intersectionpoint frame_str(nS); Le:=posA[nE]; pA:=(0,.85); - else: Ls:=zL intersectionpoint frame_str(nS); Le:=zL intersectionpoint frame_str(nE); pA:=(0,1); - fi - zA:=Ls--Le; len:=length(Le-Ls); - %----------------------------------------------------------------------------------------------- - pickup pencircle scaled bond_pen_wd; - if (nL=si)or(scan_bit(sw_abbreviate,Bond)): draw zA Cp(col); - ef nL=dl: draw zA Cp(col); draw sfrt(subpath pA of zA,bondgap,ap) Cp(col); - ef nL=dr: draw zA Cp(col); draw sfrt(subpath pA of zA,bondgap,am) Cp(col); - ef nL=dm: draw sfrt(zA,bondgap/1.75,ap) Cp(col); draw sfrt(zA,bondgap/1.75,am) Cp(col); - ef nL=db: nA:=iif(((ang-angX[nS]) mod 360)<=180,ap,am); - draw zA Cp(col); draw sfrt(subpath pA of zA,bondgap,nA) Cp(col); - ef nL=tm: draw zA Cp(col);draw sfrt(zA,bondgap,ap) Cp(col); draw sfrt(zA,bondgap,am) Cp(col); - ef nL=wf: fill Ls--sfrt(Le,ww,am)--sfrt(Le,ww,ap)--cycle Cp(col); - ef nL=wb: fill sfrt(Ls,ww,am)--Le--sfrt(Ls,ww,ap)--cycle Cp(col); - ef nL=bd: draw zA withpen penrazor rotated ap scaled bondgap Cp(col); - ef nL=bz: bz_put(sfrt(Ls,ww,ap),sfrt(Le,ww,ap),sfrt(Ls,ww,am),sfrt(Le,ww,am)); - ef nL=zf: wz_put(Ls,sfrt(Le,ww,ap),sfrt(Le,ww,am)); - ef nL=zb: wz_put(Le,sfrt(Ls,ww,am),sfrt(Ls,ww,ap)); - ef nL=dt: for i=0 step .75hash_gap/len until 1: drawdot i[Ls,Le] Cp(col); endfor - ef nL=wv: nA:=3bond_pen_wd; nB:=len/nA; - draw Le for i=1 upto nB: - ..controls(((i-.5)/nB)[sfrt(Le,nA,iif(odd(i),ap,am)),sfrt(Ls,nA,iif(odd(i),ap,am))]) - ..(i/nB)[Le,Ls] endfor ..Ls Cp(col); - ef nL=wf_r: filldraw Ls--sfrt(Le,.35ww,am)--sfrt(Le,.35ww,ap)--cycle wpcs .05ww Cp(col); - ef nL=wb_r: filldraw sfrt(Ls,.35ww,am)--Le--sfrt(Ls,.35ww,ap)--cycle wpcs .05ww Cp(col); - ef nL=bd_r: draw zA wpcs .65bondgap Cp(col); - ef nL=vf: draw zA Cp(col);draw sfrt(Le,bondgap,ang-150)--Le--sfrt(Le,bondgap,ang+150) Cp(col); - ef nL=vb: draw zA Cp(col);draw sfrt(Ls,bondgap,ang-30)--Ls--sfrt(Ls,bondgap,ang+30) Cp(col); - ef nL=si_: erase draw subpath (.15,.85) of zA wpcs 0.8bondgap; draw zA Cp(col); - ef nL=dl_: erase draw subpath (.15,.85) of sfrt(subpath pA of zA,.5bondgap,ap) wpcs 1.8bondgap; - draw zA Cp(col); draw sfrt(subpath pA of zA,bondgap,ap) Cp(col); - ef nL=dr_: erase draw subpath (.15,.85) of sfrt(subpath pA of zA,.5bondgap,am) wpcs 1.8bondgap; - draw zA Cp(col); draw sfrt(subpath pA of zA,bondgap,am) Cp(col); - ef nL=dm_: erase draw subpath(0.15,0.85) of zA wpcs 1.8 bondgap; - draw sfrt(zA,bondgap/1.75,ap) Cp(col); draw sfrt(zA,bondgap/1.75,am) Cp(col); - ef nL=wf_: erase draw subpath (0.15,0.85) of (Ls--sfrt(Le,ww,am)) wpcs 0.8bondgap; - erase draw subpath (0.15,0.85) of (Ls--sfrt(Le,ww,ap)) wpcs 0.8bondgap; - fill Ls--sfrt(Le,ww,am)--sfrt(Le,ww,ap)--cycle Cp(col); - ef nL=wb_: erase draw subpath (0.15,0.85) of (sfrt(Ls,ww,am)--Le) wpcs 0.8bondgap; - erase draw subpath (0.15,0.85) of (sfrt(Ls,ww,ap)--Le) wpcs 0.8bondgap; - fill sfrt(Ls,ww,am)--Le--sfrt(Ls,ww,ap)--cycle Cp(col); - ef nL=zf_: erase draw subpath (0.15,0.85) of (Ls--sfrt(Le,ww,am)) wpcs 0.8bondgap; - erase draw subpath (0.15,0.85) of zA wpcs 0.8bondgap; - erase draw subpath (0.15,0.85) of (Ls--sfrt(Le,ww,ap)) wpcs 0.8bondgap; - wz_put(Ls,sfrt(Le,ww,ap),sfrt(Le,ww,am)); - ef nL=zb_: erase draw subpath (0.15,0.85) of (sfrt(Ls,ww,am)--Le) wpcs 0.8bondgap; - erase draw subpath (0.15,0.85) of zA wpcs 0.8bondgap; - erase draw subpath (0.15,0.85) of (sfrt(Ls,ww,ap)--Le) wpcs 0.8bondgap; - wz_put(Le,sfrt(Ls,ww,am),sfrt(Ls,ww,ap)); - ef nL=bd_: erase draw subpath(0.15,0.85) of zA wpcs 1.6bondgap; - draw zA withpen penrazor rotated ap scaled bondgap Cp(col); - ef nL=nb: - %-- bond type for glycan ---------------------------------------------------------------------- - ef nL=arc_lb: draw Ls--Ls-(0,aw)..posA[nE]+(-1.2aw,0)..posA[nE]-(.6aw,0) Cp(col); - ef nL=arc_br: draw posA[nS]+(.6aw,0)..posA[nS]+(1.2aw,0)..Le-(0,aw)--Le Cp(col); - ef nL=arc_lbr: draw posA[nS]+(0,iif(numS[nS]=0,0,-.6aw))--posA[nS]+(0,-.8aw) - ..0.5[posA[nS],posA[nE]]+(0,-1.7aw)..posA[nE]+(0,-.8aw) - --posA[nE]+(0,iif(numS[nE]=0,0,-.6aw)) Cp(col); - ef nL=arc_ltr: draw posA[nS]+(0,iif(numS[nS]=0,0,0.6aw))--posA[nS]+(0,.8aw) - ..0.5[posA[nS],posA[nE]]+(0,1.7aw)..posA[nE]+(0,.8aw) - --posA[nE]+(0,iif(numS[nE]=0,0,.6aw)) Cp(col); - %---------------------------------------------------------------------------------------------- - fi - endgroup -enddef; -%------------------------------------------------------------------------------------------------ -def wz_put(expr PA,PB,PD)= - for i=0 upto len/hash_gap: - nA:=hash_gap*i/len; nD:=(hash_gap*i+ratio_hash_black*hash_gap)/len; - if nD>((len-hash_gap)/len): nD:=1; fi - fill nA[PB,PA]--nA[PD,PA]--nD[PD,PA]--nD[PB,PA]--cycle Cp(col); - endfor -enddef; -%------------------------------------------------------------------------------------------------ -def bz_put(expr PA,PB,PC,PD)= - for i=0 upto len/hash_gap: - nA:=hash_gap*i/len; nD:=(hash_gap*i+ratio_hash_black*hash_gap)/len; - fill nA[PB,PA]--nA[PD,PC]--nD[PD,PC]--nD[PB,PA]--cycle Cp(col); - endfor -enddef; -%------------------------------------------------------------------------------------------------ -vardef frame_str(expr NUM)= - nA:=1.12atom_wd; nB:=wdA[NUM]+.12atom_wd; - ((0,0)--(nB,0)--(nB,nA)--(0,nA)--cycle) shifted - (posA[NUM]-(.5nA+iif((dxA[NUM]=-1)and(wdA[NUM]>atom_wd),nB-nA,0),.5nA)) -enddef; -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -def char_size_set(expr WD)(expr HT)(expr STR)= - for j=1 upto length(STR): - nA:=ASCII(subc(j,STR)); tbl_char_wd[nA]:=WD; tbl_char_ht[nA]:=HT; - endfor -enddef; -%------------------------------------------------------------------------------------------------- -char_size_set( 1)( 1)("CGHMNOQW"); -char_size_set( .9)( 1)("ABDFIJKPRSTUVXY/><#\%@"); -char_size_set( .8)( 1)("ELZ&"); -char_size_set( .7)( 1)(" ()[]{}0123456789nh=tfg?~^"); -char_size_set( .7)( .9)("$"); -char_size_set( .7)( .7)("-+*_"); -char_size_set(.45)(.95)("l"); -char_size_set(.75)( .8)("opq"); -char_size_set( .8)( .8)("e"); -char_size_set( .9)( .8)("wm"); -char_size_set( .7)( .8)("abdcksuvrxyz"); -char_size_set(.35)( .9)("i"); -char_size_set( .5)( .9)("j"); -char_size_set(.35)( 1)("!|"); -char_size_set( .4)( 1)(".,:;'`"); -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -def draw_char(expr CHR,POS,WD,PEN,NUM)= -begingroup -save Z,aW,aH,fW,fH,hW,hW,hH,fP,hP,zO,zOh,pos,dw,dwh,dwv,cdw,sC; -path zO,zOh,zOa; -string sC; -pair Z[],pos; -%------------------------------------------------------------------------------------------------- -def dw expr p = draw (p) shifted pos Cp(colorA[NUM]) enddef; -def dwv expr p = draw (p) withpen penrazor scaled fP shifted pos Cp(colorA[NUM]) enddef; -def dwvs (expr n)expr p= - draw (p) withpen penrazor scaled fP scaled n shifted pos Cp(colorA[NUM]) enddef; -def dwh expr p=draw (p) withpen penrazor rotated 90 scaled fP shifted pos Cp(colorA[NUM]) enddef; -def cdw expr p=cutdraw (p) shifted pos Cp(colorA[NUM]) enddef; -%------------------------------------------------------------------------------------------------- -sC:=CHR; fP:=PEN; hP:=0.5fP; -aW:=WD*tbl_char_wd[ASCII(sC)]*(1-2ratio_atomgap_atom); -aH:=WD*tbl_char_ht[ASCII(sC)]*(1-2ratio_atomgap_atom); -pos:=POS+(WD*ratio_atomgap_atom,WD*ratio_atomgap_atom); -%------------------------------------------------------------------------------------------------- -fW:=aW-hP; hW:=.5aW; fH:=aH-hP; hH:=.5aH; -Z01:=( 0,hP); Z02:=(hP, 0); Z03:=(hP,hP); Z04:=(aW,hP); Z05:=(fW, 0); Z06:=(hW,aH); Z07:=(hW, 0); -Z08:=( 0,hH); Z09:=(hP,hH); Z10:=(fW,hH); Z11:=(hW,aW); Z12:=( 0,fH); Z13:=(hP,fH); Z14:=(hW,fH); -Z15:=(fW,aH); Z16:=(aW,fH); Z17:=(aW,hH); Z18:=(hP,aH); Z19:=(hW,hP); Z20:=(hW,hH); Z21:=(fW,hP); -Z22:=(fW,fH); Z23:=(hW,fW); -%------------------------------------------------------------------------------------------------- -zO:=Z10..(.8aW,fH-.5hP)..tension 1.5..(.2aW,fH-.5hP)..Z09.. - (.2aW,1.5hP)..tension 1.5..(.8aW,1.5hP)..cycle; -zOh:=(hP,.25aH)..Z19..(fW,.25aH)..Z20..cycle; -zOa:=(hP,.35aH)..(hW,hP)..(fW,.35aH)..(hW,.7aH)..cycle; -%------------------------------------------------------------------------------------------------- -ppcs fP; -if sC="A": dwvs(1.14) Z02--Z06--Z05; dw .33[Z02,Z06]--.33[Z05,Z06]; -ef sC="B": dw Z13--Z14{right}..(.9fH,.75aH)..{left}Z20--Z09--Z20{right}..(.9fH,.25aH).. - {left}Z19--Z03; dwv Z02--Z18; -ef sC="C": cdw sbp(.05,.95)zO; -ef sC="D": dw Z13--Z14..Z10..Z19--Z03; dwv Z02--Z18; -ef sC="E": pickup pensquare scaled fP; dw Z21--Z03--Z13--Z22; dw Z09--Z10; -ef sC="F": dwh Z12--Z16; dwh (0,.45aH)--(fW,.45aH); dw Z02--Z13; -ef sC="G": cdw sbp(.06,.97)zO; dwh bot Z20-- bot Z17; -ef sC="H": dwv Z02--Z18; dw Z09--Z10; dwv Z05--Z15; -ef sC="I": dwv Z19--Z14; dwh (hW-fP,hP)--(hW+fP,hP); dwh (hW-fP,fH)--(hW+fP,fH); -ef sC="J": cdw Z09..(hP,.4aH){down}..{right}Z19{right}..{up}(fW,.4aH)..Z15; -ef sC="K": cdw Z02--Z18; cdw .35[.45[Z02,Z18],Z16]--Z05; cdw .35[Z02,Z18]--Z16; -ef sC="L": dwh Z04--Z01; dwv Z02--Z18; -ef sC="M": dwv Z02--Z18; dwvs(1.14) Z18--Z19--Z15; dwv Z15--Z05; -ef sC="N": dwv Z02--Z18; dwv Z05--Z15; dwvs(1.4) (1.4hP,aH)--(aW-1.4hP,0); -ef sC="O": dw zO; -ef sC="P": dwv Z02--Z18; dw Z13--(.65aW,fH){right}..(fW,.7aH)..{left}(.65aW,.44aH)..(hP,.44aH); -ef sC="Q": dw zO; dw (.6aW,.4aH)--Z05; -ef sC="R": dwv Z02--Z18; dw Z13--(.65aW,fH){right}..(fW,.7aH)..{left}(.65aW,.44aH)..(hP,.44aH); - cdw Z05{up}..{left}(hW,.44aH); -ef sC="S": cdw sbp(.05,.45)zO; cdw sbp(.55,.95)zO; dw (fW,.3aH){up}..{up}(hP,.7aH); -ef sC="T": dwh Z12--Z16; dwv .5[Z12,Z16]--Z07; -ef sC="U": cdw Z18..Z09{down}..{right}Z19{right}..{up}Z10..Z15; -ef sC="U": cdw Z18..(hP,.4fH){down}..{right}Z19{right}..{up}(fW,.4fH)..Z15; -ef sC="V": dwvs(1.2) Z18--Z07--Z15; -ef sC="W": dwvs(1.08) Z18--(.25aW,0)--Z06--(.75aW,0)--Z15; -ef sC="X": dwvs(1.4) Z18..Z05; dwvs(1.4) Z02..Z15; -ef sC="Y": dwvs(1.2) Z18--Z20--Z15; dwv Z20--Z07; -ef sC="Z": dwh Z12--Z16; dwvs(1.4) (1.4hP,fP)--(aW-1.4hP,aH-fP); dwh Z01--Z04; -ef sC="a": dw Z19..Z10..Z14..Z09..cycle; dwv Z05--Z15; -ef sC="b": dw Z19..Z10..Z11..Z09..cycle; dwv Z02--(hP,1.3aH) -ef sC="c": cdw sbp(.06,.94)Z10..Z14..Z09..Z19..cycle; -ef sC="d": dw Z19..Z10..Z11..Z09..cycle; dwv Z05--(fW,1.3aH); -ef sC="e": cdw sbp(0,.92)Z10..Z14..Z09..Z19..cycle; dw Z10--Z09; -ef sC="f": cdw (.4fW,0)--(.4fW,.75aH){up}..(.75aW,fH)..{down}(fW,.8aH); dwh Z08--Z17; -ef sC="g": dw zOa; dw sbp(0,.5)zOh shifted (0,-.5fH); cdw (aW-hP,.7aH)--(aW-hP,-.25aH); -ef sC="h": cdw Z02..(hP,.3aH){up}..(hW,.7fH)..{down}(fW,.3aH)..Z05; dwv (hP,.3aH)--Z18; -ef sC="i": dwv Z07--(hW,.7aH); ppcs 1.4fP; dw Z14; -ef sC="j": cdw (fW,.7aH)--Z21..(.25aW,-.66fP)..Z03; ppcs 1.4fP; dw Z22; -ef sC="k": dwv Z02--(hP,1.3fH); cdw .5[Z02,Z18]--Z05; cdw .5[Z02,Z18]--Z16; -ef sC="l": dwv Z07--Z06; dwh Z14--Z13; dwh Z19--Z21; -ef sC="m": cdw Z02..(hP,.3aH){up}..(.28aW,fH)..{down}(hW,.3aH)..Z07; - cdw (hW,.6aH){up}..(.7aW,aH-hP)..{down}(fW,.6aH)..Z05; dwv (hP,.3aH)--(hP,aH); -ef sC="n": cdw Z02{up}..(hW,.8fH)..{down}(fW,.5aH)..Z05; dwv (hP,0)--(hP,.8aH); -ef sC="o": dw Z19..Z10..Z14..Z09..cycle; -ef sC="p": dw Z19..Z10..Z14..Z09..cycle; dwv (hP,aH)--(hP,-.3aH); -ef sC="q": dw Z19..Z10..Z14..Z09..cycle; dwv (fW,aH)--(fW,-.3aH); -ef sC="r": cdw (sbp(.33,.72)Z19..Z10..Z14..Z09..cycle) shifted(0,-hP); dwv Z02--Z18; -ef sC="s": cdw sbp(.05,.45)zO; cdw sbp(.55,.95)zO; dw (fW,.3aH){up}..{up}(hP,.7aH); -ef sC="t": dwv Z07--Z06; dwh (0,.66aH)--(aW,.66aH); -ef sC="u": cdw Z18..(hP,.55aH){down}..Z19..(fW,.55aH){up}..Z15; dwv Z15--Z05; -ef sC="v": dwv Z18--Z07--Z15; -ef sC="w": dwv Z18--(.25aW,0)--Z06--(.75aW,0)--Z15; -ef sC="x": dwvs(1.4) Z18--Z05; dwvs(1.4) Z15--Z02; -ef sC="y": dwvs(1.4) (Z18--Z20) shifted (0,-.3aH); dwvs(1.4) (Z15--Z02) shifted (0,-.3aH); -ef sC="z": dwh Z12--Z16; dwvs(1.4) (1.4hP,fP)--(aW-1.4hP,aH-fP); dwh Z01--Z04; -ef sC="0": dw Z09...Z14...Z10...Z19...cycle; -ef sC="1": dwv Z07--(hW,aH-.3hP)--(hW-fP,aH-fP)--(hW-fP,aH-1.5fP); -ef sC="2": cdw (hP,1.3hP)..(.4fW,.35fH)..(fW,.65aH)..Z14..(hP,.65aH); dwh Z04--Z01; -ef sC="3": cdw sbp(0,.75)zOh; cdw sbp(.25,.98)zOh shifted (0,hH-hP); dwh (.3aW,hH)--Z20; -ef sC="4": dwh (0,.25aH)--(aW,.25aH); dwv (.75aW,0)--(.75aW,aH)--(1.2hP,.25aH+hP); - dwv (.75aW+.5hP,aH)--(1.7hP,.25aH+hP); -ef sC="5": dwh Z12--Z16; dwv Z13--(hP,.55fH); - cdw (.5hP,.18aH)..(.65aW,1.3hP)..(fW,.4aH)..(hW,.63aH)..(.7hP,.56aH); -ef sC="6": dw Z19..(fW,.5fW)..Z23..(hP,.5fW)..cycle; cdw (.8fP,hH)--Z06; -ef sC="7": dwh (0,.fH)--Z16; dwvs(1.2) (aW-1.2hP,aH-fP)--(.4aW,0); -ef sC="8": dw zOh; dw (hP,.75aH)...Z14...(fW,.75aH)...Z20...cycle; -ef sC="9": dw (Z19..(fW,.5fW)..Z23..(hP,.5fW)..cycle) shifted (0,.32aH); cdw (fW-.45fP,hH)--Z07; -ef sC=" ": -ef sC=".": ppcs 1.4fP; dw Z19; -ef sC=",": dw (hW+.5fP,hP)..(hW+.3fP,-fP)..(hW-.5fP,hP-2fP); ppcs 1.4fP; dw Z19; -ef sC="'": dw (hW+.5fP,fH)..(hW+.3fP,fH-fP)..(hW-.5fP,fH-2fP); ppcs 1.4fP; dw Z14; -ef sC="`": dw (hW-.5fP,fH-2fP)..(hW-.3fP,fH-fP)..(hW+.5fP,fH); ppcs 1.4fP; dw (hW,fH-2fP); -ef sC=":": ppcs 1.4fP; dw (hW,.2aH); dw (hW,.8aH); -ef sC=";": dw (hW+hP,.2aH)..(hW-hP,.2aH-2fP); ppcs 1.4fP; dw (hW,.2aH); dw (hW,.8aH); -ef sC="(": dw Z19...Z09...Z14; -ef sC=")": dw Z19...Z10...Z14; -ef sC="[": dwv Z07--Z06; dwh Z14--Z22; dwh Z19--Z21; -ef sC="]": dwv Z07--Z06; dwh Z14--Z13; dwh Z03--Z19; -ef sC="{": dw Z19..(.3aW,.2aH)..(.3aW,.45aH)..(.2aW,.5aH)..(.3aW,.55aH)..(.3aW,.8aH)..Z14; -ef sC="}": dw Z19..(.7aW,.2aH)..(.7aW,.45aH)..(.8aW,.5aH)..(.7aW,.55aH)..(.7aW,.8aH)..Z14; -ef sC="<": cdw Z16--Z08--Z04; -ef sC=">": cdw Z01--Z17--Z12; -ef sC="-": dwh Z09--Z10; -ef sC="=": dwh (hP,.3aH)--(fW,.3aH); dwh (hP,.6aH)--(fW,.6aH); -ef sC="/": dw Z22..Z01; -ef sC="+": dwv Z19--Z14; dwh Z09--Z10; -ef sC="*": dw Z19--Z14; dw Z09--Z10; dw (.2aW,.2aH)--(.8aW,.8aH); dw (.2aW,.8aH)--(.8aW,.2aH); -ef sC="$": cdw sbp(.05,.45)zO; cdw sbp(.55,.95)zO; dw (fW,.3aH){up}..{up}(hP,.7aH); - dwv (hW,-fP)--(hW,fH+1.5fP); -ef sC="#": dwv (.3aW,0)--(.3aW,aH); dwv (.7aW,0)--(.7aW,aH); - dwh (0,.3aH)--(aW,.3aH); dwh (0,.7aH)--(aW,.7aH); -ef sC="!": dwv Z06--(hW,.25aH); ppcs 1.4fP; dw Z07; -ef sC="?": cdw (hP,.75fH)..(hW,aH)..(fW,.75fH)..(hW,.4fH)--(hW,.2fH); ppcs 1.4fP; dw Z07; -ef sC="|": dwv Z07--Z06; -ef sC="\": dw Z13--Z21; -ef sC="%": dw Z22..Z01; dw fullcircle scaled 2.7fP shifted (.2fH,.9fH); - dw fullcircle scaled 2.7fP shifted (.73fH,.20fH); -ef sC="~": dw (hP,.8aH)..(.3aW,.9aH)..(.6aW,.7aH)..(fW,.8aH); -ef sC="&": cdw Z21..(hW,.35aH)..(.25aW,.75aH)..(hW,.fH)..(.75aW,.75fH)..(hP,.3aH)..(hW,.hP)..Z10; -ef sC="@": cdw sbp(0,.7)zO; dwv (fW,hH)--(fW,0); - dw (fW,.45aH)..(.7aW,.75aH)..(.3aW,.45aH)..(.7aW,.15aH)..cycle; -ef sC="_": dwh Z01--Z04; -ef sC="^": dw (hP,.6aH)--(.5aW,fH)--(fW,.6aH); -else: -fi -endgroup -enddef; -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -def warning_bond(expr a)= - if addA[a]=0: - warning("A"&decimal(a)&" ( "&fsl(8)(strD[numS[a]])&") has"&fdr(2)(bond_cnt)&" bonds"); - fi -enddef; -%------------------------------------------------------------------------------------------------- -vardef erase_brace(expr ATOM)= - save temp_c,temp_s; - string temp_c,temp_s; - temp_s:=""; - if (length(ATOM)>=4)and(ATOM<>"COOH"): - for i=1 upto length(ATOM): - temp_c:=subc(i,ATOM); - if (temp_c<>"{")and(temp_c<>"}")and(temp_c<>"_")and(temp_c<>"^") - and(temp_c<>"+")and(temp_c<>"-"): - temp_s:=temp_s&temp_c; fi - endfor - temp_s - else: ATOM - fi -enddef; -%------------------------------------------------------------------------------------------------- -vardef erase_space(expr TXT)= - save temp_c,temp_s; - string temp_c,temp_s; - temp_s:=""; - for i=1 upto length(TXT): - temp_c:=subc(i,TXT); - if temp_c=" ": temp_s:=temp_s&"_"; else: temp_s:=temp_s&temp_c; fi - endfor - temp_s -enddef; -%================================================================================================= -def proc_check_structure(expr n)= - begingroup - save knownA,tmp_wtp; - num_MW:=num_MI:=cen_MW:=cen_MI:=tbl_atom_max:=warning_cnt:=hideH_cnt:=0; - nE:=parts_emb_start; - for i=1 upto tbl_atom_end: sumA[i]:=0; endfor - for i=1 upto cntA: - knownA:=bond_cnt:=0; - nS:=numS[i]; - for j=1 upto cntB: - if (lineB[j]>=dl)and(lineB[j]<=dm_): bondC[j]:=2; - ef lineB[j]=tm: bondC[j]:=3; - ef (lineB[j]=vf)or(lineB[j]=vb): bondC[j]:=0; - ef lineB[j]=0: bondC[j]:=0; - else: bondC[j]:=1; - fi - if (sB[j]=i)or(eB[j]=i): bond_cnt:=bond_cnt+bondC[j]; fi - endfor - Bcnt[i]:=bond_cnt; - if ((nS=0)or(nS=(C-nE)))and(bond_cnt<4): - hideH[i]:=4-bond_cnt; hideH_cnt:=hideH_cnt+hideH[i]; else: hideH[i]:=0; - fi - if nS=0: if bond_cnt>4: warning_bond(i) fi - ef nS=(O-nE): if bond_cnt<>2: warning_bond(i) fi - ef nS=(N-nE): if (bond_cnt<>3)and(bond_cnt<>5): warning_bond(i) fi - ef nS=(S-nE): if (bond_cnt<>2)and(bond_cnt<>4)and(bond_cnt<>6): warning_bond(i) fi - ef nS=(H-nE): if bond_cnt<>1: warning_bond(i) fi - ef nS=(OH-nE): if bond_cnt<>1: warning_bond(i) fi - ef nS=(COOH-nE): if bond_cnt<>1: warning_bond(i) fi - ef nS=(NH2-nE): if bond_cnt<>1: warning_bond(i) fi - ef nS=(CN-nE): if bond_cnt<>1: warning_bond(i) fi - ef nS=(P-nE): if bond_cnt<>5: warning_bond(i) fi - ef nS=(C-nE): if bond_cnt>4: warning_bond(i) fi - ef nS=(F-nE): if bond_cnt<>1: warning_bond(i) fi - ef nS=(Cl-nE): if bond_cnt<>1: warning_bond(i) fi - ef nS=(Br-nE): if bond_cnt<>1: warning_bond(i) fi - fi - for j=1 upto tbl_group_end: - if strD[nS]=tbl_atom_str[j]: - if tbl_atom[j]=0: sumA[j]:=sumA[j]+1; if j>tbl_atom_max: tbl_atom_max:=j; fi - else: - for k=1 upto tbl_atom[j]: - sumA[tbl_group[j][k]]:=sumA[tbl_group[j][k]]+1; - if tbl_group[j][k]>tbl_atom_max: tbl_atom_max:=tbl_group[j][k]; fi - endfor - fi - knownA:=1; - fi - exitif knownA=1; - endfor - if knownA=0: warning(" Unknown Str("&strD[numS[i]]&") is used "&decimal(i)); fi - endfor - %------------------------------------------------------------------------------------- - sumA[2]:=sumA[2]+hideH_cnt; - if (tbl_atom_max=1)and(sumA[2]>0): tbl_atom_max:=2; fi - for i=1 upto tbl_atom_max: - if sumA[i]>=1: - nA:=tbl_atom_wt[i]/100*sumA[i]; nB:=tbl_atom_mi[i]/100*sumA[i]; - cen_MW:=cen_MW+nA; cen_MI:=cen_MI+nB; - if (cen_MW<40)and(cen_MI<40): - num_MW:= num_MW+tbl_atom_wt[i]*sumA[i]; - num_MI:= num_MI+tbl_atom_mi[i]*sumA[i]; - fi - cal_FM:=cal_FM&erase_brace(tbl_atom_str[i]) if sumA[i]>=2: &decimal(sumA[i]) fi; - fi - endfor - %------------------------------------------------------------------------------------- - if cen_MW<40: cal_MW:=substring (0,8) of decimal(num_MW); - else: num_MW:=cen_MW; cal_MW:=fdr(6)(cen_MW)&"*100"; fi - if cen_MI<40: cal_MI:=substring (0,10) of decimal(num_MI); - else: num_MI:=cen_MI; cal_MI:=fdr(8)(cen_MI)&"*100"; fi - %------------------------------------------------------------------------------------- - endgroup -enddef; -%================================================================================================= -def proc_info_out(expr n,f)= - message "["&decimal(char_num)&"]:"&inf_EN; - if f=1: file_name_output:="temp-info.aux"; - ef f=2: file_name_output:=jobname&"-data.aux"; - else: file_name_output:=jobname&"-info.aux"; - fi - %-------------------------------------------------------------------------------------- - if (char_num=1)and(n=2): - printf tag[1] for i=2 upto aux_max: exitif tag[i]=""; &aux_delimiter&tag[i] endfor ; - fi - %-------------------------------------------------------------------------------------- - for i=1 upto aux_max: exitif tag[i]=""; - if i=1: printf "" else: &aux_delimiter fi - if n=1: &tag[i]&":" fi - %------------------------------------------- - if tag[i]="J": & jobname - ef tag[i]="C": & decimal(char_num) - ef tag[i]="mw": & cal_MW - ef tag[i]="fm": & cal_FM - ef tag[i]="mi": & cal_MI - ef tag[i]="w": & decimal(xpart(fsize)) - ef tag[i]="h": & decimal(ypart(fsize)) - ef tag[i]="w1": & decimal(mol_wd) - ef tag[i]="h1": & decimal(mol_ht) - ef tag[i]="An": & decimal(cntA) - ef tag[i]="Bn": & decimal(cntB) - %------------------------------------------- - ef tag[i]="NO": & inf_NO - ef tag[i]="EN": & inf_EN - ef tag[i]="JN": & inf_JN - ef tag[i]="MW": & inf_MW - ef tag[i]="MI": & inf_MI - ef tag[i]="FM": & inf_FM - ef tag[i]="CAS": & inf_CAS - ef tag[i]="USE": & inf_USE - ef tag[i]="EXA": & inf_EXA - ef tag[i]="EXB": & inf_EXB - ef tag[i]="MC": & inf_MC - fi - endfor ; - if f=1: printf EOF; - ef f=2: printf "+"; - for i=1 upto mc_row: printf (substring(0,mc_indent[i]) of blank_str)&mc[i]; endfor - printf "+-----------------------------------------------------------------------------"; - fi -enddef; -%================================================================================================= -def proc_report_out(expr f)= - message "["&decimal(char_num)&"]:"&inf_EN; - if f=1: file_name_output:="temp-report.aux"; - else: file_name_output:=jobname&"-report.txt"; - fi - printf "==========================================================================="; - printf " No."&fdr(4)(char_num)&" / Name = "& inf_EN&" / file = "& file_name_input; - if mc_row>=1: - printf "---------------------------------------------------------------------------"; - for i=1 upto mc_row: printf (substring(0,mc_indent[i]) of blank_str)&mc[i]; endfor - printf "---------------------------------------------------------------------------"; - printf " row="&fdr(3)(mc_row)&" / length="&fdr(4)(length(mc))& - " / commands="&fdr(3)(cnt_cmm); - printf " {}=X ="&fdr(3)(cnt_chg_bonds)&" / {}:X ="&fdr(3)(cnt_chg_atoms)& - " / '() ="&fdr(3)(cnt_inline_def)&" / @ ="&fdr(3)(cnt_at)& - " / & ="&fdr(3)(cnt_and)&" / < ="&fdr(3)(cnt_gtn); - fi - printf "---------------------------------------------------------------------------"; - printf " Warnings = "&fdr(3)(warning_cnt)&" / Code= "&decimal(cntD[0]); - printf " Width * Height = " & fdr(10)(mol_wd)&" * "&fdr(10)(mol_ht); - printf " Shift width * height = "& fdr(10)(minX)&" * "&fdr(10)(minY); - printf " Bond length = "&fdr(3)(blen)&" Atom size = "&fdr(3)(atom_wd); - printf " Atom count="&fdr(3)(cntA)&" Bond count="&fdr(3)(cntB)& - " Ring count="&fdr(3)(cntB-cntA+1)&" Hide H count="&fdr(3)(hideH_cnt); - printf "---------------------------------------------------------------------------"; - printf "< NO. >( x axis , y axis )"; - for i=1 upto cntA: - printf " A"&fdl(6)(i)&fsl(8)(erase_brace(strD[numS[i]]))& - " ("&fdr(10)(round_auto(xpart(posA[i])/blen))&" , "& - fdr(10)(round_auto(ypart(posA[i])/blen))&" ) "&fdr(4)(Bcnt[i])& - iif(hideH[i]>0,fdr(6)(hideH[i])," ") - if chargeA[i]<>0: &fdr(4)(chargeA[i]) fi; - endfor - printf "---------------------------------------------------------------------------"; - printf "< NO. >< bond (sdt)>"; - for i=1 upto cntB: - nC:=lenB[i]; if nC=_size_atom: nC:=ratio_atom_bond; elseif nC<0: nC:=-nC; fi - nB:=angB[i]; if nB>180: nB:=nB-360; fi - printf " B"&fdl(4)(i)&fdr(3)(sB[i])&" -> "&fdr(3)(eB[i])& - " ("&fdr(3)(bondC[i])&")"&fdr(8)(round_auto(angB[i]))& - " ("&fdr(6)(round_auto(nB))&")"&fdr(8)(nC)&" ("&fdr(8)(round_auto(nC*blen))&")"; - endfor - printf "---------------------------------------------------------------------------"; - printf "( atom wt )[ mi wt ] < cnt > < sum wt >[ sum mi wt ]"; - for i=1 upto tbl_atom_max: - if sumA[i]>=1: - nA:=tbl_atom_wt[i]/100*sumA[i]; nB:=tbl_atom_mi[i]/100*sumA[i]; - printf " "& - fsl(5)(erase_brace(tbl_atom_str[i]))& - "("&fdr(9)(tbl_atom_wt[i])&")"&"["&fdr(9)(tbl_atom_mi[i])&"]"&" * "&fdr(4)(sumA[i]) - if nA<40: &fdr(15)(tbl_atom_wt[i]*sumA[i])&"["&fdr(12)(tbl_atom_mi[i]*sumA[i])&"]"; - else: &fdr(11)(nA)&"*100"&"["&fdr(9)(nB)&"*100"&"]"; - fi - fi - endfor - printf " Molecular Weight [Mono Isotopic] = "&fsr(12)(cal_MW)&"["&fsr(12)(cal_MI)&"]"; - printf "---------------------------------------------------------------------------"; - printf " Weight Calc: " &cal_MW &" / Input: " - if inf_MW<>"-": &inf_MW &" / weight gap= " &decimal(num_MW-scantokens(inf_MW)) fi; - printf " Fomula Calc: "&cal_FM&" / Input: " - if inf_FM<>"-": &inf_FM&" / "& iif(inf_FM=cal_FM,"MACTCH","NOT MACTCH") fi; - printf "==========================================================================="; - if f=1: printf EOF; fi -enddef; -%------------------------------------------------------------------------------------------------- -vardef round_auto(expr n)= - if (n<4) and(n>-4): round(n*1000)/1000 elseif (n<40) and(n>-40): round(n*100)/100 - elseif (n<400)and(n>-400): round(n*10)/10 else: round(n) fi -enddef; -%================================================================================================= -def proc_mol_out(expr n)= - message "["&decimal(char_num)&"]:"&inf_EN; - file_name_output:=jobname&"-"&fit_zero(char_num)&"-"&erase_space(inf_EN)&".mol"; - %-V2000--------------------------------------------------------------------------------------- - if n=1: - printf ""; printf " -MCFtoMOL- "&fsl(20)(info[1]); printf ""; - printf fdr(3)(cntA)&fdr(3)(cntB)&" 0 0 0 0 0 0 0 0999 V2000"; - for i=1 upto cntA: - printf fdr(10)(xpart(posA[i])/blen)& fdr(10)(ypart(posA[i])/blen)&fdr(10)(0)&" "& - fsl(2)(erase_brace(strD[numS[i]]))&" 0"&fdr(3)(bond_charge(chargeA[i]))&" 0 0"; - endfor - for i=1 upto cntB: - if lineB[i]<>0: - printf fdr(3)(sB[i])&fdr(3)(eB[i])&fdr(3)(bond_type(lineB[i]))& - fdr(3)(bond_stereo(lineB[i]))&" 0 0"; - fi - endfor - printf "M END"; - %-V3000--------------------------------------------------------------------------------------- - elseif n=2: - printf ""; printf " -MCFtoMOL- "&fsl(20)(info[1]); printf ""; - printf " 0 0 0 0 0 999 V3000"; - printf "M V30 BEGIN CTAB"; - printf "M V30 COUNTS "&decimal(cntA)&" "&decimal(cntB)&" 0 0 0"; - printf "M V30 BEGIN ATOM"; - for i=1 upto cntA: - printf "M V30 "&decimal(i)&" "&erase_brace(strD[numS[i]])&" "& - decimal(xpart(posA[i])/blen)&" "&decimal(ypart(posA[i])/blen)&" 0 0" - if chargeA[i]<>0: &" CHG="&decimal(chargeA[i]) fi; - endfor - printf "M V30 END ATOM"; printf "M V30 BEGIN BOND"; - for i=1 upto cntB: - if lineB[i]<>0: - printf "M V30 "&decimal(i)&" "&decimal(bond_type(lineB[i]))& - " "&decimal(sB[i])&" "&decimal(eB[i]) - if bond_stereo(lineB[i])<>0: &" CFG="&decimal(bond_config(lineB[i])) fi; - fi - endfor - printf "M V30 END BOND"; printf "M V30 END CTAB"; printf "M END"; - fi -enddef; -%================================================================================================= -def proc_mf_out(expr f)= - message "["&decimal(char_num)&"]:"&inf_EN; - file_name_output:=jobname&"-mf.aux"; - printf "beginfont("&ditto&"NO:"&decimal(char_num)&ditto&","&ditto&"EN:"&inf_EN&ditto&")"; - printf "MC("; - for i=1 upto mc_row: printf mc[i]; endfor - printf ")"; - printf "endfont"; - if f=1: printf "%-------------------------------------------------------------------------"; fi -enddef; -%================================================================================================= -def proc_mc_out(expr f)= - message "["&decimal(char_num)&"]:"&inf_EN; - if f=1: file_name_output:="temp-mc.aux"; - else: file_name_output:=jobname&"-"&fit_zero(char_num)&"-"&erase_space(inf_EN)&"-mc.aux"; - fi - for i=1 upto mc_row: printf (substring(0,mc_indent[i]) of blank_str)&mc[i]; endfor - printf EOF; -enddef; -%================================================================================================= -vardef fit_zero(expr n)=if n<=9: "00" elseif n<=99: "0" else: "" fi &decimal(n) enddef; -%------------------------------------------------------------------------------------------------- -vardef bond_type(expr n)= - if (n=dl)or(n=dr)or(n=dm)or(n=db)or(n=dl_)or(n=dr_)or(n=dm_): 2 ef n=tm: 3 else: 1 fi enddef; -%------------------------------------------------------------------------------------------------- -vardef bond_charge(expr n)= if n=2: 1 ef n=1: 3 ef n=-1: 5 ef n=-2: 6 else: 0 fi enddef; -%------------------------------------------------------------------------------------------------- -vardef bond_stereo(expr n)= - if (n=wf)or(n=zb)or(n=bd): 1 ef (n=zf)or(n=wb)or(n=dt): 6 ef n=wv: 4 else: 0 fi enddef; -%------------------------------------------------------------------------------------------------- -vardef bond_config(expr n)= - if (n=wf)or(n=zb)or(n=bd): 1 ef (n=zf)or(n=wb)or(n=dt): 3 ef n=wv: 2 else: 0 fi enddef; -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -vardef STa(expr ATOM,WT,MI)= - str_cnt:=str_cnt+1; tbl_cnt:=tbl_cnt+1; parts_cnt:=parts_cnt+1; - comD[parts_cnt][1]:=_set_atom; parD[parts_cnt][1]:=str_cnt; cntD[parts_cnt]:=1; - strD[str_cnt]:=tbl_atom_str[tbl_cnt]:=ATOM; - tbl_atom[tbl_cnt]:=0; - tbl_atom_wt[tbl_cnt]:=WT; tbl_atom_mi[tbl_cnt]:=MI; - parts_cnt -enddef; -%------------------------------------------------------------------------------------------------- -vardef STb(expr ATOM)(text TXT)= - str_cnt:=str_cnt+1; tbl_cnt:=tbl_cnt+1; parts_cnt:=parts_cnt+1; - comD[parts_cnt][1]:=_set_atom; parD[parts_cnt][1]:=str_cnt; cntD[parts_cnt]:=1; - strD[str_cnt]:=tbl_atom_str[tbl_cnt]:=ATOM; - tbl_atom[tbl_cnt]:=0; - for list=TXT: - tbl_atom[tbl_cnt]:=tbl_atom[tbl_cnt]+1; - tbl_group[tbl_cnt][tbl_atom[tbl_cnt]]:=list-parts_emb_start; - endfor - parts_cnt -enddef; -%================================================================================================= -parts_int:=parts_emi_start; -parts_cnt:=parts_emb_start; -%------------------------------------------------------------------------------------------------- -C:= STa("C" ,12.0107, 12.0000000); H:= STa("H" , 1.00794, 1.00782503223); -D:= STa("D" ,2.012, 2.01410177812); Ag:=STa("{Ag}",107.868, 106.905095); -Al:=STa("{Al}",26.9815, 26.98153853); As:=STa("{As}",74.9216, 74.92159457); -B:= STa("B" ,10.811, 11.00930536); Ba:=STa("{Ba}",137.33, 136.905816); -Bi:=STa("{Bi}",208.9804, 208.980338); Br:=STa("{Br}",79.904, 78.9183376); -Ca:=STa("{Ca}",40.078, 39.962590863); Cd:=STa("{Cd}",112.41, 110.904182); -Cl:=STa("{Cl}",35.453, 34.968852); Co:=STa("{Co}",58.933194, 58.93319429); -Cr:=STa("{Cr}",51.9961, 51.94050623); Cu:=STa("{Cu}",63.546, 62.92959772); -F:= STa("F" ,18.9984, 18.99840316273); Fe:=STa("{Fe}",55.845, 55.93493633); -Hg:=STa("{Hg}",200.59, 201.97064340); I:= STa("I" ,126.90447,126.9044719); -K:= STa("K" ,39.0983, 38.9637064864); Li:=STa("{Li}",6.941, 7.0160034366); -Mg:=STa("{Mg}",24.305, 23.985041697); Mn:=STa("{Mn}",54.938044, 54.93804391); -N:= STa("N" ,14.0067, 14.00307400443); Na:=STa("{Na}",22.98977, 22.9897692820); -Ni:=STa("{Ni}",58.693, 57.93534241); O:= STa("O" ,15.9994, 15.99491461957); -P:= STa("P" ,30.973762, 30.97376199842); Pb:= STa("Pb" ,207.2, 205.974455); -Pd:=STa("Pd" ,106.4, 107.905075); -S:= STa("S" ,32.065, 31.9720711744); Sb:= STa("Sb" ,121.75, 120.90381); -Se:=STa("{Se}",78.971, 79.9165218); Si:=STa("{Si}",28.0855, 27.97692653465); -Sn:=STa("{Sn}",118.71, 119.90220163); Ti:=STa("{Ti}",47.867, 47.94794198); -U:= STa("U", 238.0289, 238.05079); V:= STa("V", 50.9415, 50.943957); -W:= STa("W", 183.85, 181.948225); Zn:=STa("{Zn}",65.409, 63.92914201); -tbl_atom_end:=tbl_cnt; -%------------------------------------------------------------------------------------------------- -CH3:=STb("C{H_3_}")(C,H,H,H); CH2:=STb("C{H_3_}")(C,H,H); CN:=STb("CN")(C,N); OH:=STb("OH")(O,H); -COOH:=STb("COOH")(C,O,O,H); SH:= STb("SH")(S,H); CHO:=STb("CHO")(C,H,O); -NO:=STb("NO")(N,O); NO2:=STb("N{O_2_}")(N,O,O); NH2:=STb("N{H_2_}")(N,H,H); -SO2H:=STb("S{O_2_}H")(S,O,O,H); SO3H:=STb("S{O_3_}H")(S,O,O,O,H); -ONa:=STb("O{Na}")(O,Na); SO3Na:=STb("S{O_3_}{Na}")(S,O,O,O,Na); -%------------------------------------------------------------------------------------------------- -tbl_group_end:=tbl_cnt; -parts_atom_end:=parts_cnt; -%================================================================================================= -for i=3 upto 20: - ?[i]:='((_com,_len_ss),(_get_len,_ring_len),<((-180 DIV i)-90) - for j==2 upto i:: ,(360 DIV i) endfor,(_cyc_sB,1-i),(_com,_len_ee)); -endfor -Ph:=Ph1:='(?6,-2=dl,-4=dl,-6=dl); Ph2:='(?6,-1=dl,-3=dl,-5=dl); -for i=4,5,6: for j=2 upto i-2: ?[i][j]:='(); endfor endfor -for i=5,6,7,8: for j=11 upto 15: ?[i][j]:='(); endfor endfor -%------------------------------------------------------------------------------------------------- -!:=!1:='((_mk_bond,_arrange_ang)); !!:='(!~db); !!!:='(!~tm); -for i==2 upto 20: - ![i]:='((_com,_len_ss),(_get_len,_tmp_len),! for j==2 upto i::,! endfor ,(_com,_len_ee)); -endfor -Me:='(); Et:='(!); iPr:=?!:='(/_,!); ?!2:='(/_,!2); tBu:=??!:='(/_,/_^60,60); -!?:='(!,/_); !?!:='(!,/_,!); -n_:='((_set_add,a_minus)); p_:='((_set_add,a_plus)); -zero_wf:='(0~wf); zero_zf:='(0~zf); zero_dm:='(0~dm); zero_wv:='(0~wv); -%------------------------------------------------------------------------------------------------- -NH:='(N,/H~nl); N!:='(N,/_); N!2:='(N,/!); SO:='(S,//O); SOO:='(S,//O^-35,//O^35); -O!:='(O,!); O!2:='(O,!,!); O!3:='(O,!,!,!); O!?!:='(O,!,?!); O!??!:='(O,!,??!); OPh:='(O,!,Ph); -S!:='(S,!); S!2:='(S,!,!); S!3:='(S,!,!,!); S!?!:='(S,!,?!); S!??!:='(S,!,??!); -%------------------------------------------------------------------------------------------------- -COO:='(//O,!,O); COO!:='(COO,!); COO!2:='(COO,!,!); COO!??:='(COO,!,?!); COO!3:='(COO,!,!,!); -CO!:='(//O,!); CO!2:='(//O,!,!); CO!3:='(//O,!,!,!); OCO!:='(O,!,//O,!); -N?!:='(N,!,@-2,0); N?!2:='(N!,!,!); NH!:='(NH,!); NH!2:='(NH,!,!); NH!3:='(NH,!,!,!); -NH!?!:='(NH,!,?!); NHCO!:='(NH,!,//O,!); CONH2:='(//O,!,NH2); ??:='(/_^35,/_^-35); -%------------------------------------------------------------------------------------------------- -!OH:='(!,OH); !SH:='(!,SH); !NH2:='(!,NH2); !CO!:='(!,//O,!); !CO!2:='(!,CO!2); !CO!3:='(!,CO!3); -!O!:='(!,O!); !O!2:='(!,O!2); !O!3:='(!,O!3); !S!:='(!,S!); !S!2:='(!,S!2); !S!3:='(!,S!3); -!NH!:='(!,NH!); !NH!2:='(!,NH!2); !NH!3:='(!,NH!3); -!COOH:='(!,COOH); !COO!:='(!,COO!); !COO!2:='(!,COO!2); !CH3:='(!,CH3); !CN:='(!,CN); -!CHO:='(!,CHO); !NO2:='(!,NO2); !Cl:='(!,Cl); !Br:='(!,Br); !F:='(!,F); -!?3:='(!,?3); !?4:='(!,?4); !?5:='(!,?5); !?6:='(!,?6); !?7:='(!,?7); !?8:='(!,?8); !Ph:='(!,Ph); -%------------------------------------------------------------------------------------------------- -CF2:='(/F,60,F); CCl2:='(/Cl,60,Cl); CBr2:='(/Br,60,Br); -CF3:='(/F,/F^60,60,F); CCl3:='(/Cl,/Cl^60,60,Cl); CBr3:='(/Br,/Br^60,60,Br); -%------------------------------------------------------------------------------------------------- -lr:='(0,0,0,60 for i==1 upto 10:: ,-60,60 endfor); -rl:='(0,0,0,-60 for i==1 upto 10:: ,60,-60 endfor); -%------------------------------------------------------------------------------------------------- -R:='("R"); R1:='("{R^1^}"); R2:='("{R^2^}"); R3:='("{R^3^}"); R4:='("R^4^"); R5:='("{R^5^}"); -R6:='("R6"); R7:='("{R^7^}"); R8:='("{R^8^}"); R9:='("{R^9^}"); R10:='("R^10^"); R11:='("{R^11^}"); -%------------------------------------------------------------------------------------------------- -hexose_hp:='(#1.4,-30~wf_r,30~bd_r`1,30~wb_r,120,O,30,&1,##); -Pyranose_hp:='(#1.4,-35~wf_r,35~bd_r`1,30~wb_r,130`1.66,O,&1,##); -%------------------------------------------------------------------------------------------------- -xCH3:='(/H,/H^60,/H^-60); xNH:='(N,/H); xNH2:='(N,/H^60,/H^-60); xNO2:='(N,//O^60,//O^-60); -xOH:='(O,/H); xNO:='(N,//O); xSO2H:='(S,//O^60,/OH^-60); xSO3H:='(S,/OH,//O^60,//O^-60); -xCHO:='(//O^-60,/H^60); xCOOH:='(//O^-60,/xOH^60); xCN:='(/N~tm); xSH:='(S,/H); -!xOH:='(!,xOH); !xCHO:='(!,xCHO); !xCOOH:='(!,xCOOH); !xCH3:='(!,xCH3); !xCN:='(!,xCN); -!xNH2:='(!,xNH2); !xNO2:='(!,xNO2); !xSH:='(!,xSH); -%================================================================================================= -init_par(parameter_list); -%------------------------------------------------------------------------------------------------- -%%%%message "parts_emb =" & decimal(parts_emb_start) &" => " & decimal(parts_cnt); -%%%%message "parts_emi =" & decimal(parts_emi_start) &" => " & decimal(parts_int); -%------------------------------------------------------------------------------------------------- -def expand_set= - CH3:=xCH3; NH:=xNH; NH2:=xNH2; NO:=xNO; NO2:=xNO2; OH:=xOH; CHO:=xCHO; COOH:=xCOOH; CN:=xCN; - SH:=xSH; SO2H:=xSO2H; SO3H:=xSO3H; !SH:=!xSH; - !CH3:=!xCH3; !OH:=!xOH; !NH2:=!xNH2; !CHO:=!xCHO; !COOH:=!xCOOH; !CN:=!xCN; !NO2:=!xNO2; -enddef; -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -vardef check(expr s)= - save mc_char,mc_char,temp_c,err_cnt,char_cnt,f_depth, - cnt_prn_s,cnt_prn_e,cnt_brc_s,cnt_brc_e,cnt_brk_s,cnt_brk_e; - string temp_c,err_str[],err_type[]; - numeric mc_char[],err_adr[],err_code[]; - err_cnt:=char_cnt:=code_cnt:=f_depth:=cnt_cmm:=cnt_chg_atoms:=cnt_chg_bonds:=0; - err_type[0]:="no mc-row "; - err_type[1]:=" '(' > ')' "; err_type[2]:=" '(' < ')' "; - err_type[3]:=" '{' > '}' "; err_type[4]:=" '{' < '}' "; - err_type[5]:=" '[' > ']' "; err_type[6]:=" '[' < ']' "; - err_type[7]:="missing arg"; err_type[8]:="extra arg "; - %--------------------------------------------------------------------------------------------- - if mc_row>=1: - %--------------------------------------------------------------------------------------------- - for i=1 upto length(s): - temp_c:=subc(i,s); - if temp_c<>" ": char_cnt:=char_cnt+1; mc_char[char_cnt]:=ASCII(temp_c); fi - endfor - mc_char[0]:=mc_char[char_cnt+1]:=mc_char[char_cnt+2]:=a_cmm; - %-- argument missing chkeck ---------------------------------------------------------------- - cnt_prn_s:=cnt_prn_e:=cnt_brc_s:=cnt_brc_e:=cnt_brk_s:=cnt_brk_e:=cnt_inline_def:=cnt_at:=0; - cnt_cmm:=cnt_and:=cnt_gtn:=cnt_gtn:=nA:=f_depth:=0; - forever: - nA:=nA+1; nB:=mc_char[nA-1]; nC:=mc_char[nA]; nD:=mc_char[nA+1]; - %----------------------------------------------------------------------------------------- - if nC=a_cmm: if f_depth=0: cnt_cmm:=cnt_cmm+1; cmm_adr[cnt_cmm]:=nA; fi - ef nC=a_ast: - if nD=a_sls: - if mc_char[nA+2]=a_ast: if mc_char[nA+3]=a_cmm: proc_err(7,nA) nA:=nA+2; fi % */* x - ef mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi % */ x - ef nD=a_ast: if mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi fi % ** x - ef nC=a_sls: if nD=a_sls: if mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi % // x - ef nD=a_ast: if mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi % /* x - ef nD=a_cmm: proc_err(7,nA) fi % / x - ef nC=a_hsh: if nD=a_hsh: nA:=nA+1; % ## - ef nD=a_cmm: proc_err(7,nA) fi % # x - if nB<>a_cmm: proc_err(8,nA) fi % a # - ef nC=a_dol: if nD=a_cmm: proc_err(7,nA) fi % $ x - ef nC=a_equ: if nD= a_cmm: proc_err(7,nA) fi % = x - if nB= a_cmm: proc_err(7,nA) fi % x = - ef nC=a_cln: if nD= a_cmm: proc_err(7,nA) fi % : x - if nB= a_cmm: proc_err(7,nA) fi % x : - ef nC=a_amk: cnt_at:=cnt_at+1; - if nD= a_cmm: proc_err(7,nA) fi % @ x - if nB<>a_cmm: proc_err(8,nA) fi % a @ - ef nC=a_and: cnt_and:=cnt_and+1; - if nD= a_cmm: proc_err(7,nA) fi % & x - if nB<>a_cmm: proc_err(8,nA) fi % a & - ef nC=a_gtn: cnt_gtn:=cnt_gtn+1; - ef nC=a_ltn: if nD= a_cmm: proc_err(7,nA) fi % > x - if nB= a_cmm: proc_err(7,nA) fi % x > - ef nC=a_tld: if nD= a_cmm: proc_err(7,nA) fi % ~ x - if nB= a_cmm: proc_err(7,nA) fi % x ~ - ef nC=a_hat: if nD= a_cmm: proc_err(7,nA) fi % ^ x - if nB= a_cmm: proc_err(7,nA) fi % x ^ - ef nC=a_bqt: if nD= a_cmm: proc_err(7,nA) fi % ` x - if nB= a_cmm: proc_err(7,nA) fi % x ` - ef nC=a_bar: if nD= a_bar: - if mc_char[nA+2]=a_bar: nA:=nA+1; % || - ef mc_char[nA+2]<>a_cmm: proc_err(8,nA) % | a - fi - if nB<>a_cmm: proc_err(8,nA) fi % a | - fi - %------------------------------------------------------------------------------------------ - ef nC=a_prn_s: if nD= a_cmm: proc_err(7,nA) fi % ( x - cnt_prn_s:=cnt_prn_s+1; f_depth:=1; - if nB=a_qut: cnt_inline_def:=cnt_inline_def+1; fi - ef nC=a_prn_e: cnt_prn_e:=cnt_prn_e+1; f_depth:=0; - ef nC=a_brc_s: if nD= a_cmm: proc_err(7,nA) fi % { x - cnt_brc_s:=cnt_brc_s+1; f_depth:=1; - ef nC=a_brc_e: if nD= a_cmm: proc_err(7,nA) fi % } x - cnt_brc_e:=cnt_brc_e+1; f_depth:=0; - if nD=a_cln: cnt_chg_atoms:=cnt_chg_atoms+1; - ef nD=a_equ: cnt_chg_bonds:=cnt_chg_bonds+1; - fi - ef nC=a_brk_s: if nD= a_cmm: proc_err(7,nA) fi % [ x - cnt_brk_s:=cnt_brk_s+1; f_depth:=1; - ef nC=a_brk_e: if nB= a_cmm: proc_err(7,nA) fi % x ] - cnt_brk_e:=cnt_brk_e+1; f_depth:=0; - %------------------------------------------------------------------------------------------- - fi - exitif nA>=char_cnt+1; - endfor - %-- brackets balance check ------------------------------------------------------------------- - if cnt_prn_s>cnt_prn_e: proc_err(1,0) ef cnt_prn_scnt_brc_e: proc_err(3,0) ef cnt_brc_scnt_brk_e: proc_err(5,0) ef cnt_brk_s0): readstring; fi - %--------------------------------------------------------------------------------------------- - err_cnt -enddef; -%------------------------------------------------------------------------------------------------- -def proc_err(expr ERR_CODE,ADR)= - err_cnt:=err_cnt+1; err_adr[err_cnt]:=ADR; err_code[err_cnt]:=ERR_CODE; - if ERR_CODE<=6: err_str[err_cnt]:=" "; - else: err_str[err_cnt]:=substring (ADR-3,ADR+2) of mc; - fi -enddef; -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -def query(text s)= - begingroup - save file_name,f_mcf,f_line,unit_row,unit_cnt,line_s,unit_row_cnt,mc_row,line_cnt, - semicol_cnt,info_cnt,info_s,filter_n,order,min_s,min_n,par_cnt,key_cnt,var_n,info_s, - sign_at,sign_n,filter_tag,filter_var,filter_sign,filter_cnt,filter_p,temp_s,par_s, - at_colon,at_equal,at_less,at_greater,at_n,info_cnt; - string line_s[][],sort_s[],par_s[],sort_all[],key_s[],filter_s[],filter_tag[],filter_var[], - info_s[],file_name_input,temp_s,min_s; - numeric unit_row_cnt[],order[],order_tbl[],filter_sign[],filter_p[]; - unit_row:=f_mcf:=mc_row:=line_cnt:=info_cnt:=par_cnt:=key_cnt:=filter_cnt:=0; - unit_cnt:=1; - %----------------------------------------------------------------------------------------------- - file_name_input:=default_data_file; - file_name_output:=default_temp_file; - %----------------------------------------------------------------------------------------------- - for list=s: - at_colon:=scan_char(":",list,0,1); - at_equal:=scan_char("=",list,0,1); - at_less:=scan_char("<",list,0,1); - at_greater:=scan_char(">",list,0,1); - %--------------------------------------------------------------------------------------------- - if at_colon>=2: sign_at:=at_colon; sign_n:=0; at_n:=1; - ef at_equal>=2: if (at_equal-1)=at_less: sign_at:=at_equal; sign_n:=5; at_n:=2; - ef (at_equal-1)=at_greater: sign_at:=at_equal; sign_n:=6; at_n:=2; - else: sign_at:=at_equal; sign_n:=1; at_n:=1; fi - ef at_greater>=2: if (at_greater-1)=at_less: sign_at:=at_greater; sign_n:=2; at_n:=2; - else: sign_at:=at_greater; sign_n:=4; at_n:=1; fi - ef at_less>=2: sign_at:=at_less; sign_n:=3; at_n:=1; - fi - tag_s:=substring (0,sign_at-at_n) of list; - var_s:=substring (sign_at,length(list)) of list; - %--------------------------------------------------------------------------------------------- - if sign_n=0: - if tag_s="f": - if scan_char(".",var_s,0,1)=0: file_name_input:=var_s&".mcf"; - else: file_name_input:=var_s; - fi - ef tag_s="o": - if scan_char(".",var_s,0,1)=0: file_name_output:=var_s&".aux"; - else: file_name_output:=var_s; - fi - ef tag_s="s": key_cnt:=key_cnt+1; key_s[key_cnt]:=var_s; - fi - %--------------------------------------------------------------------------------------------- - else: - filter_cnt:=filter_cnt+1; - filter_tag[filter_cnt]:=tag_s; - filter_sign[filter_cnt]:=sign_n; - if (sign_n>=3)and(is_num(var_s)=1): filter_var[filter_cnt]:=fix_num(var_s); - else: filter_var[filter_cnt]:=var_s; - fi - fi - endfor - %----------------------------------------------------------------------------------------------- - forever: - temps:=readfrom file_name_input; exitif temps=EOF; - if subc(1,temps)<>"%": - line_cnt:=line_cnt+1; unit_row:=unit_row+1; - line_s[unit_cnt][unit_row]:=temps; - if (subc(1,temps)="+")and(subc(2,temps)<>"-"): f_mcf:=1; mc_row:=1; - ef (subc(1,temps)="+")and(subc(2,temps)="-"): - unit_row_cnt[unit_cnt]:=unit_row; - f_mcf:=unit_row:=0; - filter_n:=1; - for i=1 upto filter_cnt: filter_p[i]:=0; endfor - for i=1 upto key_cnt: sort_s[i]:=""; endfor - %--------------------------------------------------------------------------------------- - for i=1 upto info_cnt: - at_colon:=scan_char(":",info_s[i],0,1); - tag_s:=substring (0,at_colon-1) of info_s[i]; - var_s:=substring (at_colon,length(info_s[i])) of info_s[i]; - %------------------------------------------------------------------------------------- - for j=1 upto key_cnt: - if key_s[j]=tag_s: - if is_num(var_s)=1: sort_s[j]:=fix_num(var_s); else: sort_s[j]:=var_s; fi - fi - endfor - %------------------------------------------------------------------------------------- - for j=1 upto filter_cnt: - if filter_tag[j]=tag_s: - filter_p[j]:=1; - if (filter_sign[j]>=3)and(is_num(var_s)=1): temp_s:=fix_num(var_s); - else: temp_s:=var_s; - fi - if filter_sign[j]=1: if not(temp_s= filter_var[j]): filter_n:=0; fi - ef filter_sign[j]=2: if not(temp_s<>filter_var[j]): filter_n:=0; fi - ef filter_sign[j]=3: if not(temp_s< filter_var[j]): filter_n:=0; fi - ef filter_sign[j]=4: if not(temp_s> filter_var[j]): filter_n:=0; fi - ef filter_sign[j]=5: if not(temp_s<=filter_var[j]): filter_n:=0; fi - ef filter_sign[j]=6: if not(temp_s>=filter_var[j]): filter_n:=0; fi - fi - fi - endfor - endfor - for i=1 upto filter_cnt: if filter_p[i]=0: filter_n:=0; fi endfor - %------------------------------------------------------------------------------------- - sort_all[unit_cnt]:=""; - for j=1 upto key_cnt: - if j=key_cnt: sort_all[unit_cnt]:=sort_all[unit_cnt]&sort_s[j]; - else: sort_all[unit_cnt]:=fix_str(15,sort_s[1]); - fi - endfor - %------------------------------------------------------------------------------------- - info_cnt:=0; - if filter_n=1: unit_cnt:=unit_cnt+1; fi - %------------------------------------------------------------------------------------- - ef (subc(1,temps)<>"+")and(subc(1,temps)<>"%"): - if f_mcf=1: mc_row:=mc_row+1; - else: - semicol_cnt:=count_semicol(temps); - for i=1 upto semicol_cnt+1: - info_cnt:=info_cnt+1; - if i<=semicol_cnt: - info_s[info_cnt]:=substring (at_semicol[i-1],at_semicol[i]-1) of temps; - else: - info_s[info_cnt]:=substring (at_semicol[semicol_cnt],length(temps)) of temps; - fi - endfor - fi - fi - fi - endfor - %============================================================================================= - unit_cnt:=unit_cnt-1; - %--------------------------------------------------------------------------------------------- - if key_cnt>=1: - for i=1 upto unit_cnt: order[i]:=0; endfor - for i=1 upto unit_cnt: min_s:="~"; - for j=1 upto unit_cnt: - if order[j]=0: if sort_all[j]n: temp_s:=substring(0,n) of s; - fi - temp_s -enddef; -%--------------------------------------------------------------------------------------------- -vardef fix_num(expr s)= - save temp_s,at_dot; - string temp_s; - temp_s:=s; - at_dot:=scan_char(".",temp_s,0,1); - if at_dot=0: temp_s:=fsr(4)(temp_s); ef at_dot=1: temp_s:=" 0"&temp_s; - ef at_dot=2: temp_s:=" "&temp_s; ef at_dot=3: temp_s:=" "&temp_s; - ef at_dot=4: temp_s:=" "&temp_s; - fi - temp_s -enddef; -%--------------------------------------------------------------------------------------------- -vardef is_num(expr s)= - save numeric_n; - numeric_n:=1; - for i=1 upto length(s): - if ((subc(i,s)>="0")and(subc(i,s)<="9"))or(subc(i,s)="."): else: numeric_n:=0; fi - endfor - numeric_n -enddef; -%------------------------------------------------------------------------------------------------- -vardef count_semicol(expr s)= - save nS; - nS:=at_semicol[0]:=0; - for i=1 upto length(s): if subc(i,s)=";": nS:=nS+1; at_semicol[nS]:=i; fi endfor - nS -enddef; -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/graphics/mcf2graph/mcf2graph.mp b/graphics/mcf2graph/mcf2graph.mp new file mode 100644 index 0000000000..107606aae4 --- /dev/null +++ b/graphics/mcf2graph/mcf2graph.mp @@ -0,0 +1,2187 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% mcf2graph ver 4.78 Copyright (c) 2013-2022 Akira Yamaji +% +% Permission is hereby granted, free of charge, to any person obtaining a copy of this software +% and associated documentation files (the "Software"), to deal in the Software without restriction, +% including without limitation the rights to use, copy, modify, merge, publish, distribute, +% sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is +% furnished to do so, subject to the following conditions: +% +% The above copyright notice and this permission notice shall be included in all copies +% or substantial portions of the Software. +% +% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,EXPRESS OR IMPLIED, +% INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE +% AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +% DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% mcf2graph is MetaPost macro package convert Molecular Coding Format(MCF) to graphic file +% font(pk)/eps/sgv/png/mdl molfile +%-------------------------------------------------------------------------------------------------- +% This package is located at : http://www.ctan.org/pkg/mcf2graph +% Suggestion or request mail to : mcf2graph@gmail.com +%-------------------------------------------------------------------------------------------------- +% Set outputformat to "eps"(.mps) : mpost FILENAME +% Set output first font only : mpost -s bboxmargin=1 FILENAME +% Set outputformat to "png" : mpost -s ahangle=1 FILENAME +% Set outputformat to "svg" : mpost -s ahangle=2 FILENAME +% Set outputformat to "eps" (.eps) : mpost -s ahangle=3 FILENAME +% Set output information aux file (tag1:var1;tag2:var2) : mpost -s ahlength=1 FILENAME +% Set output information aux file (tag1;tag2 var1;var2) : mpost -s ahlength=2 FILENAME +% Set output aux data-base file : mpost -s ahlength=3 FILENAME +% Set output MOL file (V2000) : mpost -s ahlength=5 FILENAME +% Set output MOL file (V3000) : mpost -s ahlength=6 FILENAME +% Set output report : mpost -s ahlength=7 FILENAME +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +tracingstats:=1; +message "* This is mcf2graph ver 4.78 2022.01.16"; +%------------------------------------------------------------------------------------------------- +newinternal cntA,cntB,cntM,minX,minY,maxX,maxY,sftX,sftY,com,par,envT,envB,lenT,lineT,angT,rotT, + crR,nA,nB,nC,nD,nE,nF,nS,nL,nR,nU,nP,xpos,ypos,markA,markB,saveA,saveB,bondL; +numeric save_num[],comD[][],parD[][],adrD[][],cntD[],tbl_atom[],tbl_group[][],f_char[], + tbl_atom_wt[],tbl_atom_mi[],tbl_char_wd[],tbl_char_ht[],addA[],add_rot[],chargeA[], + com_group[][],par_group[][],cnt_group[],colorA[],colorB[],sumA[],bondC[],hideH[],lineB[], + sB[],eB[],angB[],angA[],lenB[],angX[],numS[],wdM[],htM[],wdA[],dxA[], + cmm_adr[],mc_indent[],at_semicol[]; +string save_str[],tbl_atom_str[],strD[],tag[],file_name_output,blank_str,aux_delimiter,atomfont, + temps,default_data_file,default_temp_file,mpfont,tag_s,var_s,cal_FM,cal_MW,cal_MI, + inf_Cat,inf_NO,inf_EN,inf_JN,inf_FM,inf_CAS,inf_USE,inf_EXA,inf_EXB,inf_MW; +pair save_pair[],posA[],posM[][],msize,mposition,fsize,fmargin,save_mposition,posBs,posBe,dum; +picture mol_stru[],atom_picture,save_picture,temp_picture; +%------------------------------------------------------------------------------------------------- +char_num:=str_cnt:=tbl_cnt:=proc_end:=mangle:=sw_expand:=sw_frame:=sw_trimming:=sw_ext_all:=0; +sw_abbreviate:=sw_numbering:=sw_output:=0; numbering_start:=1; numbering_end:=4095; +%------------------------------------------------------------------------------------------------- +aux_max:=max_inf_num:=20; aux_delimiter:=";"; blank_str:= " "; dum:=(-4091,0); +for i=1 upto aux_max: tag[i]:=""; endfor +Fig:=1; Mcode:=2; Calc:=4; Info:=8; Table:=16; Report:=32; MOL2k:=64; MOL3k:=128; +Atom:=8; Bond:=16; Brock:=32; Inverse:=64; Group:=32; Mol:=64; +Outside:=1; Inside:=2; Bothside:=Outside+Inside; +%------------------------------------------------------------------------------------------------- +a_prn_s:=ASCII("("); a_prn_e:=ASCII(")"); a_brc_s:=ASCII("{"); a_brc_e:=ASCII("}"); +a_brk_s:=ASCII("["); a_brk_e:=ASCII("]"); a_cmm:=ASCII(","); a_equ:=ASCII("="); +a_ast:=ASCII("*"); a_sls:=ASCII("/"); a_gtn:=ASCII("<"); a_ltn:=ASCII(">"); a_and:=ASCII("&"); +a_dol:=ASCII("$"); a_hsh:=ASCII("#"); a_hat:=ASCII("^"); a_tld:=ASCII("~"); a_bqt:=ASCII("`"); +a_cln:=ASCII(":"); a_amk:=ASCII("@"); a_zero:=ASCII("0"); a_nine:=ASCII("9"); a_qut:=ASCII("'"); +a_bar:=ASCII("|"); a_plus:=ASCII("+"); a_minus:=ASCII("-"); +%-------------------------------------------------------------------------------------------------- +let DIV= /; let MUL= *; let LT= <; let GT= >; let AND= &; let :: = : ; let == = =; let ef=elseif; +def ]]]=] ] ] enddef; +%-------------------------------------------------------------------------------------------------- +primarydef a at b = fat(a,b) enddef; +def fat(expr a,b)= mposition:=b; a enddef; +def ext(text TXT)= sw_ext_all:=1; def EXT_ALL = TXT enddef; enddef; +def ext_clear= sw_ext_all:=0; def EXT_ALL = enddef; enddef; +%-------------------------------------------------------------------------------------------------- +vardef frac primary n= n-floor n enddef; +vardef iif(expr a,b,c)=if a: b else: c fi enddef; +vardef subc(expr i,s)= substring(i-1,i) of s enddef; +vardef sfrt(expr a,b,c)= a shifted ((b,0) rotated c) enddef; +def wpcs expr n= withpen pencircle scaled n enddef; +def ppcs expr n= pickup pencircle scaled n enddef; +def sbp(expr m,n)expr p=subpath(m*length(p),n*length(p)) of p enddef; +%------------------------------------------------------------------------------------------------- +vardef fsr(expr n)(expr s)= (substring(0,n-length(s)) of blank_str)&s enddef; +vardef fsl(expr n)(expr s)= s&(substring(0,n-length(s)) of blank_str) enddef; +vardef fdr(expr n)(expr s)= fsr(n)(decimal(s)) enddef; +vardef fdl(expr n)(expr s)= fsl(n)(decimal(s)) enddef; +def warning(expr s)= message "% "&decimal(char_num)&fdr(3)(incr warning_cnt)&")"&s; enddef; +%================================================================================================= +color color_list[]; +for i=1 upto 100: colorA[i]:=colorB[i]:=0; endfor +prologues:=3; +warningcheck:=0; +default_data_file:="mcf_data_base.mcf"; +default_temp_file:="temp.mcf"; +mpfont:="uhvr8r"; +atomfont:="draw"; +defaultfont:=mpfont; +%--default ahangle=45--------------------------------------------------------------------- +if ahangle=0: outputformat:="eps"; % eps format(.mps) +ef ahangle=1: outputformat:="png"; hppp:=vppp:=0.12; % png format(600dpi) +ef ahangle=11: outputformat:="png"; hppp:=vppp:=0.06; % png format(1200dpi) +ef ahangle=2: outputformat:="svg"; % svg format +ef ahangle=3: outputformat:="eps"; % eps format(.eps) +ef ahangle=45: outputformat:="eps"; % eps format(.mps) *default +fi +%--default ahlength=4--------------------------------------------------------------------- +if ahlength=1: sw_output:=Info; % output aux file +ef ahlength=2: sw_output:=Info+Table; % output aux file(Table mode) +ef ahlength=3: sw_output:=Info+Mcode; % output aux data-base +ef ahlength=4: sw_output:=Fig; % *default +ef ahlength=5: sw_output:=MOL2k; % output MOL(V2000) +ef ahlength=6: sw_output:=MOL3k; % output MOL(V3000) +ef ahlength=7: sw_output:=Report; % output report +fi +%-- default bboxmargin=2------------------------------------------------------------------ +if bboxmargin=1: proc_end:=1; % output first font only +ef bboxmargin=3: ext(defaultfont:=mpfont; defaultscale:=.3; label.rt(inf_EN,(0,0));) +ef bboxmargin=4: sw_output:=Fig+Calc; + ext(defaultfont:=mpfont; defaultscale:=.3; + label.rt(inf_EN&" / "&cal_MW&" / "&decimal(num_MW-scantokens(inf_MW)),(0,0));) +fi +%--default outputtemplate:="%j-%3c."&"mps"------------------------------------------------ +if (outputformat="eps")and(ahangle<>3): outputtemplate:="%j-%3c."&"mps"; +else: outputtemplate:="%j-%3c."&outputformat; +fi +%----------------------------------------------------------------------------------------- +def printf expr s= write s to file_name_output enddef; +vardef totalweight expr a= 0 enddef; +def Cp(expr s) = if known s: if s<>0: withcolor color_list[s] fi fi enddef; +%----------------------------------------------------------------------------------------- +if sw_output>=Info: + if bboxmargin=1: message "* output first font only"; fi + message "* jobname="&jobname; + message "* numbersystem="&numbersystem; + if (ahlength=1)or(ahlength=2): + message "* output information file"; + message "* file name="&jobname&"-info.aux"; + message "* info delimiter="&aux_delimiter; + ef ahlength=3: message "* output data-base file"; + message "* data-base file name="&jobname&"-data.aux"; + ef ahlength=5: message "* output MOL file(V2000)"; + message "* "&jobname&"-nnn-"&"inf_EN"&".mol"; + ef ahlength=6: message "* output MOL file(V3000)"; + message "* "&jobname&"-nnn-"&"inf_EN"&".mol"; + ef ahlength=7: message "* output report file"; + message "* file name="&jobname&"-report.txt"; + fi + message "* outputformat="&outputformat; + if outputformat="png": message "* hppp="&decimal(hppp)&"/vppp="&decimal(vppp); fi + message "* outputtemplate="&outputtemplate; + message "* atomfont="&atomfont; + message "* defaultfont="&defaultfont; +fi +clearit; +%-------------------------------------------------------------------------------------------------- +?3:=?20:=Ph:=Ph1:=Ph2:=hz:=0; vt:=1; +ratio_chain_ring:=0.66; ratio_atom_bond:=0.36; ratio_thickness_bond:=0.015; +ratio_thickness_char:=0.1; ratio_char_bond:=1.5; ratio_bondgap_bond:=0.15; +ratio_hashgap_bond:=0.12; ratio_hash_black:=0.4; ratio_wedge_bond:=0.12; +ratio_atomgap_atom:=0.04; +offset_thickness:=0.2; offset_bond_gap:=0.3; offset_hash_gap:=0.1; +offset_atom:=0.8; offset_wedge:=0.4; thickness_frame:=0.2; +max_blength:=10mm; blength:=mangle:=0; max_labelsize:=20mm; dottedline_gap:=1.5; +%-------------------------------------------------------------------------------------------------- +fsize:=(30mm,20mm); fmargin:=(0.4mm,0.4mm); msize:=(1,1); mposition:=(0.5,0.5); +%================================================================================================== +bboxmargin:=0; % 2bp => 0 +ahangle:=45; +ahlength:=4; +defaultsize:=8; +defaultscale:=1; +labeloffset:=3; +ext_defaultline:=0.5; +lonepairdiam:=lonepairspace:=circlediam:=circlepen:=0; +%================================================================================================== +parts_emb_start:=1000; % 1001 => 2000 for embedded parts (max 1900) +parts_emi_start:=1900; % 1901 => 2000 for embedded internal parts (max 100) +parts_usr_start:=2000; % 2001 => 3000 for user parts (max 1000) +parts_int_start:=3000; % 3001 => 4000 for internal parts (max 1000) +%-------------------------------------------------------------------------------------------------- +def def_com(expr n)(text tx)= nA:=n; forsuffixes list=tx:: list:=nA; nA:=nA+1; endfor enddef; +def_com(-4090)(_com,_jp_atom,_jp_absA,_jp_bond,_cyc,_cyc_sB,_cyc_eB,_set_line,_tmp_line, + _chg_len,_get_len,_ring_len,_tmp_len,_rot_ang,_adj_ang,_chg_env,_tmp_env, + _set_colorA,_set_colorB,_group_si,_group_dm,_group_wf,_group_zf, + _set_adr,_mk_bond,_set_atom,_arrange_ang,_chg_atom,_tmp_rot,_fuse,_size_atom,_numeric, + _jump_at,_set_add,_chg_add,_nop,_mark,_moff,_term,_len_s,_len_e,_len_ss,_len_ee, + _group_s,_group_e,_rest,_charge,_from,_until, + si,dl,dl_,dr,dr_,db,dm,dm_,tm,wf,wb,bd,bz,zf,zb,dt,wv,nl,vf,vb,nb,wf_r,wb_r,bd_r, + arc_lb,arc_br,arc_lbr,arc_ltr,si_,wf_,wb_,zf_,zb_,wv_,bd_); +%-------------------------------------------------------------------------------------------------- +def parameter_list= + sw_numbering,sw_expand,sw_output,sw_ext_all,sw_frame,sw_trimming,sw_abbreviate, + ratio_atom_bond,ratio_thickness_bond,ratio_char_bond,ratio_chain_ring,ratio_bondgap_bond, + ratio_hash_black,ratio_hashgap_bond,ratio_thickness_char,ratio_wedge_bond,ratio_atomgap_atom, + lonepairdiam,lonepairspace,offset_atom,offset_wedge,max_blength,offset_hash_gap, + offset_bond_gap,thickness_frame,offset_thickness, + numbering_start,numbering_end,defaultsize,defaultscale,labeloffset,mangle,blength, + fsize,fmargin,msize,mposition,defaultfont,atomfont,dottedline_gap, + Me,Et,CH3,NH,NH2,NO,NO2,OH,CHO,COOH,CN,SH,!CH3,!NH2,!NO2,!OH,!CHO,!COOH,!CN,!SH +enddef; +%-------------------------------------------------------------------------------------------------- +def init_par(text t)= + nA:=nB:=nC:=0; + for list=t: + if numeric list: nA:=nA+1; save_num[nA]:=list; + elseif pair list: nB:=nB+1; save_pair[nB]:=list; + elseif string list: nC:=nC+1; save_str[nC]:=list; + fi + endfor +enddef; +%-------------------------------------------------------------------------------------------------- +def store_par(text t)= + nA:=nB:=nC:=0; + for list=t: + if numeric list: nA:=nA+1; if save_num[nA]<>list: save_num[nA]:=list; fi + elseif pair list: nB:=nB+1; if save_pair[nB]<>list: save_pair[nB]:=list; fi + elseif string list: nC:=nC+1; if save_str[nC]<>list: save_str[nC]:=list; fi + fi + endfor +enddef; +%-------------------------------------------------------------------------------------------------- +def restore_par(text t)= + nA:=nB:=nC:=0; + forsuffixes list=t: + if numeric list: nA:=nA+1; if list<>save_num[nA]: list:=save_num[nA]; fi + elseif pair list: nB:=nB+1; if list<>save_pair[nB]: list:=save_pair[nB]; fi + elseif string list: nC:=nC+1; if list<>save_str[nC]: list:=save_str[nC]; fi + fi + endfor +enddef; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +def beginfigm(text s)= + begingroup + save ',f_ext,blen,ext,add,ang_br,fw_n,bw_n,at_colon,temp_tag,info_cnt, + mc,info,file_name_input,bond_cnt,warning_cnt,hideH_cnt,bondC,filter_s; + string info[],mc[],mc,file_name_input,temp_tag,filter_s; + %------------------------------------------------------------------------------------------------ + def ext=ext_to_font enddef; + def add=add_to_molecule enddef; + def '=read_ud enddef; + %------------------------------------------------------------------------------------------------ + inf_NO:=inf_EN:=inf_JN:=inf_MW:=inf_FM:=inf_CAS:=inf_Cat:=inf_EXA:=inf_EXB:="-"; + mc:=temp_tag:=cal_MW:=cal_MI:=cal_FM:=filter_s:=""; + file_name_input:=default_data_file; + %------------------------------------------------------------------------------------------------ + parts_cnt:=parts_usr_start; + parts_int:=parts_int_start; + %------------------------------------------------------------------------------------------------ + char_num:=char_num+1; + store_par(parameter_list); + f_ext:=cntM:=mc_row:=info_cnt:=f_EOF:=0; + %------------------------------------------------------------------------------------------------ + for list=s: + at_colon:=scan_char(":",list,0,1); + if at_colon=1: + fw_n:=scan_char(" ",list,1,2); + bw_n:=scan_char(" ",list,-1,2); + mc_row:=mc_row+1; + mc_indent[mc_row]:=fw_n-2; + mc[mc_row]:=substring (fw_n-1,bw_n) of list; + mc:=mc&mc[mc_row]; + ef at_colon>=1: + info_cnt:=info_cnt+1; info[info_cnt]:=list; + tag_s:=substring (0,at_colon-1) of list; + var_s:=substring (at_colon,length(list)) of list; + if tag_s="f": + if scan_char(".",var_s,0,1)=0: file_name_input:=var_s&".mcf"; + else: file_name_input:=var_s; + fi + ef tag_s="t": temp_tag:=var_s; + ef tag_s="v": pickup_data_unit(temp_tag,var_s,1); + ef tag_s="v+": pickup_data_unit(temp_tag,var_s,0); + else: if known scantokens("inf_"&tag_s): scantokens("inf_"&tag_s):=var_s; fi + fi + fi + endfor + %------------------------------------------------------------------------------------------------ + mol_stru[0]:=nullpicture; +enddef; +%================================================================================================== +def endfigm= + if f_EOF=0: + %-------------------------------------------------------------------------------------------- + if scan_bit(sw_output,Fig): + if cntM>=1: + if sw_ext_all=1: ext_to_font(EXT_ALL); fi + if sw_trimming>=1: + nA:=nC:=4095; nB:=nD:=-4095; + for i=1 upto cntM: + if xpart(posM[1][i])nB: nB:=xpart(posM[2][i]); fi + if ypart(posM[1][i])nD: nD:=ypart(posM[2][i]); fi + endfor + fig_wd:=nB-nA+2margin_lr; + fig_ht:=nD-nC+2margin_tb; + fsize:=(fig_wd,fig_ht); + for i=1 upto cntM: + posM[0][i]:=posM[0][i]+(margin_lr-nA,margin_tb-nC); + posM[1][i]:=posM[1][i]+(margin_lr-nA,margin_tb-nC); + endfor + fi + %---------------------------------------------------------------------------------------- + beginfig(char_num) w:=charwd:=fig_wd; h:=charht:=fig_ht; chardp:=0; + if scan_bit(sw_frame,Outside): else: draw_corner((0,0),w,h,0.05); fi + if scan_bit(sw_frame,Outside): draw_frame((0,0),w,h,thickness_frame); fi + if scan_bit(sw_frame,Inside): + draw_frame((margin_lr,margin_tb),w-2margin_lr,h-2margin_tb,thickness_frame); + fi + for i=1 upto cntM: + addto currentpicture also mol_stru[i] shifted posM[0][i]; mol_stru[i]:=nullpicture; + if scan_bit(sw_frame,Mol): ext(draw_frame(p[i],w[i],h[i],thickness_frame)) fi + endfor + if f_ext=1: addto currentpicture also mol_stru[0]; mol_stru[0]:=nullpicture; fi + %---------------------------------------------------------------------------------------- + else: + fig_wd:=xpart(fsize); fig_ht:=ypart(fsize); + beginfig(char_num) w:=charwd:=fig_wd; h:=charht:=fig_ht; + draw (0,h)--(0,0)--(w,0)--(w,h)--(0,h)--(w,0) wpcs thickness_frame; + fi + %----------------------------------------------------------------------------------------- + endfig; + clearit; + fi + %------------------------------------------------------------------------------------------- + if scan_bit(sw_output,Info): + if scan_bit(sw_output,Table): proc_info_out(2); + ef scan_bit(sw_output,Mcode): proc_info_out(3); + else: proc_info_out(1); + fi + fi + if scan_bit(sw_output,Mcode): proc_mc_out(0); fi + if scan_bit(sw_output,Report): proc_report_out(0); fi + if scan_bit(sw_output,MOL2k): proc_mol_out(1); fi + if scan_bit(sw_output,MOL3k): proc_mol_out(2); fi + %------------------------------------------------------------------------------------------- + %% message "* parts_cnt (0)="& decimal(parts_cnt) &" "& decimal(parts_usr-parts_usr_start); + %% message "* parts_int (0)="& decimal(parts_int) &" "& decimal(parts_int-parts_int_start); + %------------------------------------------------------------------------------------------- + fi + %--------------------------------------------------------------------------------------------- + restore_par(parameter_list); + if proc_end=1: scantokens("bye"); fi + endgroup; +enddef; +%------------------------------------------------------------------------------------------------- +def pickup_data_unit(expr t,v,f)= + begingroup + save unit_cnt,f_end,semicol_cnt,f_match,var_n,tag_a,var_a,info_s; + string tag_a[],var_a[],info_s; + f_end:=unit_cnt:=semicol_cnt:=f_match:=inf_num:=0; + if t="n": var_n:=scantokens(v); fi + forever: + temps:=readfrom file_name_input; + if temps=EOF: f_EOF:=1; fi + exitif temps=EOF; + if subc(1,temps)="%": + ef (subc(1,temps)="+")and(subc(2,temps)<>"-"): + unit_cnt:=unit_cnt+1; + if v="*": f_match:=1; + ef t="n": if unit_cnt=var_n: f_match:=1; fi + fi + if f_match=1: + forever: + temps:=readfrom file_name_input; + if temps=EOF: f_EOF:=1; fi + exitif temps=EOF; + exitif subc(1,temps)="+"; + if subc(1,temps)<>"%": + mc_row:=mc_row+1; + fw_n:=scan_char(" ",temps,1,1); + mc_indent[mc_row]:=fw_n-1; + mc[mc_row]:=substring (fw_n-1,length(temps)) of temps; + mc:=mc&mc[mc_row]; + fi + endfor + for i=1 upto inf_num: + if known scantokens("inf_"&tag_a[i]): scantokens("inf_"&tag_a[i]):=var_a[i]; fi + endfor + f_end:=1; + else: + forever: + temps:=readfrom file_name_input; + if temps=EOF: f_EOF:=1; fi + exitif temps=EOF; + exitif (subc(1,temps)="+")and(subc(2,temps)="-"); + endfor + fi + else: + semicol_cnt:=count_semicol(temps); + inf_num:=semicol_cnt+1; + for i=1 upto inf_num: + if i<=semicol_cnt: info_s:=substring (at_semicol[i-1],at_semicol[i]-1) of temps; + else: info_s:=substring (at_semicol[semicol_cnt],length(temps)) of temps; + fi + at_colon:=scan_char(":",info_s,0,1); + tag_a[i]:=substring (0,at_colon-1) of info_s; + var_a[i]:=substring (at_colon,length(info_s)) of info_s; + if t=tag_a[i]: if v=var_a[i]: f_match:=1; fi fi + endfor + fi + exitif f_end=1; + endfor + if f=1: closefrom file_name_input; fi + endgroup; +enddef; +%-------------------------------------------------------------------------------------------------- +vardef scan_bit(expr n,b)= if b>=1: odd(floor(n/b)) else: odd(floor((frac n)/b)) fi enddef; +%-------------------------------------------------------------------------------------------------- +vardef scan_char(expr c,s,d,n)= + save k,n_s; + n_s:=0; + if d=0: for k=n upto length(s): if subc(k,s)=c: n_s:=k; fi exitif n_s>0; endfor + ef d=1: for k=n upto length(s): if subc(k,s)<>c: n_s:=k; fi exitif n_s>0; endfor + ef d=-1: for k=length(s) downto n: if subc(k,s)<>c: n_s:=k; fi exitif n_s>0; endfor + fi + n_s +enddef; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +def set_def_MC= + save /,//,/*,*/,**,*/*,~,^,',`,<,>,:,=,\,\\,*\,\*,*\*,@,@$,$,&,&$,#,##,{,},|,||,_,inside_def_MC; + inside_def_MC:=1; + pair |,||,##; + | :=(_com,_mark); || := (_com,_moff); ##:=(_com,_len_e); + _:=Me; \:=0; \\:=zero_dm; *\:=zero_wf; \*:=zero_zf; *\*:=zero_wv; + let = ==op_equ; let : ==op_col; let ^ ==op_hat; let ~ ==op_til; let > ==op_lt; let ` ==op_bq; + def @$ == jump_atom_abs enddef; def { == read_number( enddef; let } == ); def '==read_id enddef; + def < == rot_angle enddef; def @ == jump_atom enddef; def & == cyc_atom enddef; + def # == chg_length enddef; def $ == abs_adress enddef; def &$ == &.$ enddef; + def / == group_si enddef; def // == group_dm enddef; def */ == group_wf enddef; + def /* == group_zf enddef; def */* == group_wv enddef; def ** == group_nb enddef; +enddef; +%------------------------------------------------------------------------------------------------- +vardef '(text TXT)= parts_cnt:=parts_cnt+1; read_mcf(parts_cnt)(TXT); parts_cnt enddef; +vardef read_id(text TXT)=read_mcf(incr parts_cnt)(|,#crR,TXT,##,(_com,_rest)); parts_cnt enddef; +vardef read_ud(text TXT)=read_mcf(incr parts_cnt)(dum,dum,|,TXT,(_com,_rest)); parts_cnt enddef; +vardef abs_adress primary n = if n LT 0:: (n+360)-4095 else:: n-4095 fi enddef; +primarydef a from_until b = (_from,a),(_until,b) enddef; +tertiarydef a op_equ b = if (known a)and(known b):: change_bond(a,b) else:: _nop fi enddef; +tertiarydef a op_col b = if (known a)and(known b):: change_atom(a,b) else:: _nop fi enddef; +tertiarydef a op_hat b = if known b:: (_tmp_rot,b),a else:: _nop,a fi enddef; +tertiarydef a op_til b = if known b:: (_tmp_line,b),a else:: _nop,a fi enddef; +tertiarydef a op_lt b = if known b:: (_tmp_env,b),a else:: _nop,a fi enddef; +tertiarydef a op_bq b = if known b:: (_tmp_len,b),a else:: _nop,a fi enddef; +def rot_angle primary n = (_rot_ang,n) enddef; +def cyc_atom primary n = (_cyc,n) enddef; +def jump_atom_abs primary a = + if numeric a:: (_jp_atom,$a) ef pair a:: (_jp_atom,$1),<$0,angle(a)~0`length(a),<$0 fi +enddef; +def jump_atom primary a = + if numeric a:: (_jp_atom,a) ef pair a:: <$0,angle(a)~0`length(a),<$0 fi +enddef; +def chg_length primary n = (_com,_len_s),(_chg_len,n) enddef; +def group_si secondary n = if known n:: (_group_si,n) else:: _nop fi enddef; +def group_dm secondary n = if known n:: (_group_dm,n) else:: _nop fi enddef; +def group_wf secondary n = if known n:: (_group_wf,n) else:: _nop fi enddef; +def group_zf secondary n = if known n:: (_group_zf,n) else:: _nop fi enddef; +def group_wv secondary n = /n~wv enddef; +def group_nb secondary n = /n~nb enddef; +%------------------------------------------------------------------------------------------------- +def CP = com_par enddef; def CPe = com_par_ex(0) enddef; def CPx = com_par_ex(1) enddef; +%================================================================================================= +def read_mcf(expr n)(text TXT)= + begingroup + save list_cnt,nCP; + if unknown inside_def_MC:: set_def_MC fi + nCP:=list_cnt:=0; + for list==TXT:: + if known list:: + list_cnt:=list_cnt+1; + if pair list:: nCP:=nCP+1; comD[n][nCP]:=xpart(list); parD[n][nCP]:=ypart(list); + elseif numeric list:: + if list==_nop:: message "unknown command in "AND decimal(n); + elseif list>=parts_emb_start:: + for i==1 upto cntD[list]:: + nCP:=nCP+1; comD[n][nCP]:=comD[list][i]; parD[n][nCP]:=parD[list][i]; + endfor + else:: nCP:=nCP+1; comD[n][nCP]:=_mk_bond; parD[n][nCP]:=list; + fi + elseif string list:: + str_cnt:=str_cnt+1; strD[str_cnt]:=list; + nCP:=nCP+1; comD[n][nCP]:=_set_atom; parD[n][nCP]:=str_cnt; + fi + else:: message "unknown command in "AND decimal(n); + fi + endfor + cntD[n]:=nCP; + endgroup +enddef; +%------------------------------------------------------------------------------------------------- +vardef read_number(text TXT)= + save ','`,:,nA,nB,nC; + let : == from_until; + def ' == +0.5 enddef; + def '` == +0.5` enddef; + parts_int:=parts_int+1; + nA:=0; + for list==TXT:: + if known list:: + if numeric list:: + if list==_nop:: message "unknown command in "AND decimal(parts_int); + else:: nA:=nA+1; comD[parts_int][nA]:=_numeric; parD[parts_int][nA]:=list; + fi + elseif pair list:: + if xpart(list)==_from:: nB:=ypart(list); + ef xpart(list)==_until:: nC:=ypart(list); + for i==nB upto nC:: + nA:=nA+1; comD[parts_int][nA]:=_numeric; parD[parts_int][nA]:=i; + endfor + else:: nA:=nA+1; comD[parts_int][nA]:=xpart(list); parD[parts_int][nA]:=ypart(list); + fi + fi + else:: message "unknown command in "AND decimal(parts_int); + fi + endfor + cntD[parts_int]:=nA; + parts_int %------- Retern value ------- +enddef; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +def fuse_ring(expr a,b) = + CP(_jp_bond,a) CP(_rot_ang,180) CP(_get_len,a) CP(_com,_len_s) CP(_chg_len,_ring_len) + for i==1 upto b-2:: CP(_mk_bond,360 DIV b) endfor + CP(_com,_len_e) if a<=0:: CP(_cyc_eB,a-b+2) else:: CP(_cyc_eB,a) fi +enddef; +%------------------------------------------------------------------------------------------------- +def fuse_ring_bonds(expr a,b,c) = + CP(_jp_bond,xpart(a)) CP(_rot_ang,180) CP(_com,_len_s) + if b==6:: CP(_chg_len,1) for i==1 upto c-1:: CP(_mk_bond,60) endfor + elseif b==5:: if c==2:: CP(_chg_len,1.25) CP(_mk_bond,80) + elseif c==3:: CP(_chg_len,1.1) CP(_mk_bond,78) CP(_mk_bond,72) fi + elseif b==4:: CP(_chg_len,1.225) CP(_mk_bond,105) fi + CP(_com,_len_e) if ypart(a)<=0:: CP(_cyc_eB,ypart(a)-c+1) else:: CP(_cyc_eB,ypart(a)) fi +enddef; +%------------------------------------------------------------------------------------------------- +def fuse_ring_size(expr a,b,c) = + CP(_jp_bond,a) CP(_rot_ang,180) CP(_com,_len_s) CP(_chg_len,c DIV 10) + if b==5:: CP(_mk_bond,72-((c-9) MUL 1.5)) CP(_mk_bond,72+(c-9)) CP(_mk_bond,72+(c-9)) + elseif b==6:: CP(_mk_bond,60-(c-8)) for i==1 upto 3:: CP(_mk_bond,60+((c-8) DIV 2)) endfor + elseif b==7:: CP(_mk_bond,360 DIV 7-(c-8)) + for i==1 upto 4:: CP(_mk_bond,360 DIV 7+((c-8) DIV 2.5)) endfor + elseif b==8:: CP(_mk_bond,45-(c-8)) for i==1 upto 5:: CP(_mk_bond,45+((c-8) DIV 3)) endfor fi + CP(_com,_len_e) if a<=0:: CP(_cyc_eB,a-b+2) else:: CP(_cyc_eB,a) fi +enddef; +%================================================================================================= +vardef change_bond(expr a,b) = + save nCP; + if known b:: + parts_int:=parts_int+1; + nCP:=0; + if numeric b:: + if (b>=si)and(b<=bd_):: + if a>=parts_int_start:: + for i==1 upto cntD[a]:: + if comD[a][i]==_numeric:: + if frac parD[a][i]==0:: + com_par(_set_adr,parD[a][i]) com_par(_set_line,b) + ef b==dl:: com_par(_set_adr,floor parD[a][i]) com_par(_set_line,dr) + ef b==dr:: com_par(_set_adr,floor parD[a][i]) com_par(_set_line,dl) + else:: com_par(_set_adr,floor parD[a][i]) com_par(_set_line,b) + fi + fi + endfor + else:: com_par(_set_adr,a) com_par(_set_line,b) + fi + elseif (b>=?3)and(b<=?8[15]):: + if numeric a:: + if a>=parts_int_start:: + for i==1 upto cntD[a]:: + if comD[a][i]==_numeric:: + if b==Ph1:: fuse_ring(parD[a][i],6) + CP(_set_adr,-2) CP(_set_line,dl) CP(_set_adr,-4) CP(_set_line,dl) + ef b==Ph2:: fuse_ring(parD[a][i],6) + CP(_set_adr,-1) CP(_set_line,dl) CP(_set_adr,-3) CP(_set_line,dl) + CP(_set_adr,-5) CP(_set_line,dl) + ef (b>=?5[11])and(b<=?5[15]):: fuse_ring_size(a,5,b-?5[11]+11) + ef (b>=?6[11])and(b<=?6[15]):: fuse_ring_size(a,6,b-?6[11]+11) + ef (b>=?7[11])and(b<=?7[15]):: fuse_ring_size(a,7,b-?7[11]+11) + ef (b>=?8[11])and(b<=?8[15]):: fuse_ring_size(a,8,b-?8[11]+11) + else:: fuse_ring(parD[a][i],b-?3+3) + fi + else:: + if b==?6:: + if (frac comD[a][i]==0)and(frac parD[a][i]==0):: + fuse_ring_bonds((comD[a][i],parD[a][i]),6,4) + ef frac comD[a][i]==0:: fuse_ring_bonds((comD[a][i],floor parD[a][i]),6,3) + ef frac parD[a][i]==0:: fuse_ring_bonds((floor comD[a][i],parD[a][i]),6,3) + else:: fuse_ring_bonds((floor comD[a][i],floor parD[a][i]),6,2) + fi + ef b==?5:: + if (frac comD[a][i]==0)and(frac parD[a][i]==0):: + fuse_ring_bonds((comD[a][i],parD[a][i]),5,3) + ef frac comD[a][i]==0:: fuse_ring_bonds((comD[a][i],floor parD[a][i]),5,2) + ef frac parD[a][i]==0:: fuse_ring_bonds((floor comD[a][i],floor parD[a][i]),5,2) + fi + ef b==?4:: fuse_ring_bonds((comD[a][i],parD[a][i]),4,2) + ef b==?6[3]:: fuse_ring_bonds((comD[a][i],parD[a][i]),6,3) + ef b==?6[2]:: fuse_ring_bonds((comD[a][i],parD[a][i]),6,2) + ef b==?5[2]:: fuse_ring_bonds((comD[a][i],parD[a][i]),5,2) + ef b==Ph1:: fuse_ring_bonds((comD[a][i],parD[a][i]),6,4) + CP(_set_adr,-1) CP(_set_line,dl) CP(_set_adr,-3) CP(_set_line,dl) + ef b==Ph2:: fuse_ring_bonds((comD[a][i],parD[a][i]),6,4) + CP(_set_adr,-2) CP(_set_line,dl) CP(_set_adr,-4) CP(_set_line,dl) + fi + fi + endfor + else:: + if b==Ph1:: fuse_ring(a,6) CP(_set_adr,-2) CP(_set_line,dl) + CP(_set_adr,-4) CP(_set_line,dl) + ef b==Ph2:: fuse_ring(a,6) CP(_set_adr,-1) CP(_set_line,dl) + CP(_set_adr,-3) CP(_set_line,dl) CP(_set_adr,-5) CP(_set_line,dl) + ef (b>=?5[11])and(b<=?5[15]):: fuse_ring_size(a,5,b-?5[11]+11) + ef (b>=?6[11])and(b<=?6[15]):: fuse_ring_size(a,6,b-?6[11]+11) + ef (b>=?7[11])and(b<=?7[15]):: fuse_ring_size(a,7,b-?7[11]+11) + ef (b>=?8[11])and(b<=?8[15]):: fuse_ring_size(a,8,b-?8[11]+11) + else:: fuse_ring(a,b-?3+3) + fi + fi + ef pair a:: + if b==?6:: fuse_ring_bonds(a,6,4) + ef b==?5:: fuse_ring_bonds(a,5,3) + ef b==?4:: fuse_ring_bonds(a,4,2) + ef b==?6[3]:: fuse_ring_bonds(a,6,3) + ef b==?6[2]:: fuse_ring_bonds(a,6,2) + ef b==?5[2]:: fuse_ring_bonds(a,5,2) + ef b==Ph1:: fuse_ring_bonds(a,6,4) + CP(_set_adr,-1) CP(_set_line,dl) CP(_set_adr,-3) CP(_set_line,dl) + ef b==Ph2:: fuse_ring_bonds(a,6,4) + CP(_set_adr,-2) CP(_set_line,dl) CP(_set_adr,-4) CP(_set_line,dl) + fi + fi + fi + elseif color b:: color_list[incr cntC]:=b; CPe(a)(_set_colorB,cntC) + fi + cntD[parts_int]:=nCP; + parts_int %------- Retern value ------- + fi +enddef; +%------------------------------------------------------------------------------------------------- +vardef change_atom(expr a,b)= + save nCP; + if known b:: + parts_int:=parts_int+1; + nCP:=0; + if numeric b:: + if (b GT parts_emb_start)and(b<=parts_atom_end):: CPe(a)(_chg_atom,b) + ef b==NH:: CPe(a)(_chg_atom,N) if NH<>xNH:: CP(_tmp_line,nl) fi + CP(_com,_group_s) CPx(a)(_group_si,H) CP(_com,_group_e) + ef b==N!:: CPe(a)(_chg_atom,N) CP(_com,_group_s) CPx(a)(_group_si,_) CP(_com,_group_e) + ef b==N!2:: CPe(a)(_chg_atom,N) CP(_com,_group_s) CPx(a)(_group_si,!) CP(_com,_group_e) + ef b==??:: CP(_com,_group_s) CP(_tmp_rot,35) CPx(a)(_group_si,_) + CP(_tmp_rot,-35) CPx(a)(_group_si,_) CP(_com,_group_e) + ef b==SOO:: CPe(a)(_chg_atom,S) CP(_com,_group_s) CP(_tmp_rot,35) CPx(a)(_group_dm,O) + CP(_tmp_rot,-35) CPx(a)(_group_dm,O) CP(_com,_group_e) + ef b==SO:: CPe(a)(_chg_atom,S) CP(_com,_group_s) CPx(a)(_group_dm,O) CP(_com,_group_e) + ef b==n_:: CP(_com,_group_s) CP(_set_add,a_minus) CP(_chg_add,a) CP(_com,_group_e) + ef b==p_:: CP(_com,_group_s) CP(_set_add,a_plus) CP(_chg_add,a) CP(_com,_group_e) + fi + ef pair b:: + CP(_com,_group_s) + if a>=parts_emb_start:: + for i==1 upto cntD[a]:: + if comD[a][i]==_numeric:: + if xpart(b)==_group_wf:: + if frac parD[a][i]==0:: CP(_set_adr,parD[a][i]) CP(_group_wf,ypart(b)) + else:: CP(_set_adr,floor parD[a][i]) CP(_group_zf,ypart(b)) + fi + ef xpart(b)==_group_zf:: + if frac parD[a][i]==0:: CP(_set_adr,parD[a][i]) CP(_group_zf,ypart(b)) + else:: CP(_set_adr,floor parD[a][i]) CP(_group_wf,ypart(b)) + fi + else:: + CP(_set_adr,parD[a][i]) CP(xpart(b),ypart(b)) + fi + else:: + CP(comD[a][i],parD[a][i]) + fi + endfor + else:: CP(_set_adr,a) CP(xpart(b),ypart(b)) + fi + CP(_com,_group_e) + ef color b:: color_list[incr cntC]:=b; CPe(a)(_set_colorA,cntC) + fi + cntD[parts_int]:=nCP; + parts_int %------- Retern value ------- + fi +enddef; +%------------------------------------------------------------------------------------------------- +def com_par(expr a,b)= nCP:=nCP+1; comD[parts_int][nCP]:=a; parD[parts_int][nCP]:=b; enddef; +%------------------------------------------------------------------------------------------------- +def com_par_ex(expr f)(expr c)(expr a,b)= + if c>=parts_emb_start:: + for i==1 upto cntD[c]:: + if comD[c][i]==_numeric:: com_par(_set_adr,parD[c][i]) com_par(a,b) + ef f==1:: com_par(comD[c][i],parD[c][i]) fi + endfor + else:: com_par(_set_adr,c) com_par(a,b) + fi +enddef; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +def puts(expr POS)(expr STR)= + begingroup + save temp_c,temp_p; + pair temp_p; + string temp_c; + temp_p:=POS; + nC:=defaultscale*defaultsize; + if defaultfont="draw": + for i=1 upto length(STR): + temp_c:=subc(i,STR); + draw_char(temp_c,temp_p,nC,ratio_thickness_char*nC,0); + temp_p:=temp_p+(nC*tbl_char_wd[ASCII(temp_c)],0); + endfor + else: + for i=1 upto length(STR): + temp_c:=subc(i,STR); + temp_picture:=temp_c infont defaultfont scaled defaultscale; + addto currentpicture also temp_picture shifted temp_p; + temp_p:=temp_p+(lrcorner temp_picture-llcorner temp_picture); + endfor + fi + endgroup +enddef; +%================================================================================================= +def ext_setup= + pickup pencircle scaled ext_defaultline; + dotlabeldiam:=3; + labeloffset:=3; + save em; + em=defaultscale*defaultsize; + defaultfont:=mpfont; +enddef; +%------------------------------------------------------------------------------------------------- +def add_to_molecule(text TXT)= + begingroup + save w,h,n,l,p,am,aw,A,B,plus,minus,lonepair,__,**,=>,<<,/*; + numeric A[]dir,B[]up,A[]ang,B[]ang; + pair __,p[],A[],B[]s,B[]e,B[]m,A[]up,A[]left,A[]right,A[]down,B[]up,B[]left,B[]right,B[]down; + path B[]; + ext_setup; + def plus = circled_plus_add enddef; + def minus = circled_minus_add enddef; + def lonepair = lone_pair_add enddef; + let ** = scaled; + let << = rotated; + let => = shifted; + __ = (1,0); + primarydef a /* b = point b of a enddef; + %---------------------------------------------- + w:=mol_wd; h:=mol_ht; l:=blen; aw:=atom_wd; + p0:=(minX,minY); + An:=cntA; Bn:=cntB; + lonepairdiam:=0.3aw; + lonepairspace:=.7aw; + circlediam:=.6aw; + circlepen:=.2; + for i=1 upto cntA: + A[i]:=posA[i]; A[i]ang:=angX[i]; A[i]up:=dir(angX[i]); + A[i]left:=dir(angX[i]+90); A[i]right:=dir(angX[i]-90); A[i]down:=dir(angX[i]+180); + endfor + for i=1 upto cntB: + B[i]s:=posA[sB[i]]; B[i]e:=posA[eB[i]]; B[i]m:=0.5[B[i]s,B[i]e]; + B[i]:=B[i]s--B[i]e; + B[i]ang:=angB[i]; B[i]up:=dir(angB[i]); + B[i]down:=dir(angB[i]+180); B[i]left:=dir(angB[i]+90); B[i]right:=dir(angB[i]-90); + endfor + TXT addto mol_stru[cntM] also currentpicture; clearit; + endgroup; +enddef; +%------------------------------------------------------------------------------------------------- +def ext_to_font(text TXT)= + begingroup + save w,h,An,Bn,wd,ht,n,p,am,aw,__,**,<<,=>,/*; + pair __,p[]; + let ** = scaled; + let << = rotated; + let => = shifted; + primarydef a /* b = point b of a enddef; + __ = (1,0); + %---------------------------------------------------------------------- + ext_setup; + w:=xpart(fsize); + h:=ypart(fsize); + An:=cntA; + Bn:=cntB; + w0:=w-2margin_lr; + h0:=h-2margin_tb; + p0:=(margin_lr,margin_tb); + aw:=atom_wd; + n:=cntM; + for i=1 upto n: p[i]:=posM[1][i]; w[i]:=wdM[i]; h[i]:=htM[i]; endfor + TXT addto mol_stru[0] also currentpicture; clearit; f_ext:=1; + endgroup; +enddef; +%------------------------------------------------------------------------------------------------- +vardef circled_plus_add= + nA:=circlediam; nB:=circlepen; + image(draw fullcircle scaled nA wpcs nB; + draw (-.5nA,0)--(.5nA,0) wpcs nB; draw (0,-.5nA)--(0,.5nA) wpcs nB;) +enddef; +%-------------------------------------------------------------------- +vardef circled_minus_add= + nA:=circlediam; nB:=circlepen; + image(draw fullcircle scaled nA wpcs nB; draw (-.5nA,0)--(.5nA,0) wpcs nB;) +enddef; +%-------------------------------------------------------------------- +vardef lone_pair_add expr ANG= + image(draw (0,0) wpcs lonepairdiam; draw ((0,lonepairspace) rotated ANG) wpcs lonepairdiam;) +enddef; +%================================================================================================= +def MCat(expr FW,FH)(text TXT)= + save_mposition:=mposition; mposition:=(FW,FH); MC(TXT) mposition:=save_mposition; +enddef; +%------------------------------------------------------------------------------------------------- +def MC(text TXT)= + begingroup + save f_bra,strAT,cnt_group,temp_lenE,temp_lenF,temp_cntB,f_term,f_at,f_lineT,f_rotT, + f_lenT,f_envT,temp_c,factor,m_wd,m_ht,temp_p,defaultsize,defaultscale; + string temp_c; + pair temp_p; + %----------------------------------------------------------------------------------------------- + if sw_numbering>=1: ratio_atom_bond:=0.20; fi + if (sw_expand=1)or(scan_bit(sw_output,MOL2k))or(scan_bit(sw_output,MOL3k)): + expand_set; crR:=1; else: crR:=-ratio_chain_ring; + fi + cntA:=cntB:=cntC:=cnt_group:=0; strD[0]:="C"; str_cnt:=2000; + %----------------------------------------------------------------------------------------------- + fig_wd:=xpart(fsize); + fig_ht:=ypart(fsize); + margin_lr:=xpart(fmargin); + margin_tb:=ypart(fmargin); + %=============================================================================================== + read_mcf(0)(TXT,(_com,_term)); + proc_bond_atom(0)(1); + if (cnt_group>0)and(not scan_bit(sw_abbreviate,Group)): read_group(0)(1); fi + char_use_check; + %-scaling--------------------------------------------------------------------------------------- + if blength>1: blen:=blength; proc_size_setup; proc_skeleton(0); proc_scaling; + elseif blength>0: blen:=fig_wd*blength; proc_size_setup; proc_skeleton(0); proc_scaling; + else: + blen:=3mm; + proc_size_setup; + if xpart(msize)<1: m_wd:=fig_wd*xpart(msize); else: m_wd:=fig_wd; fi + if ypart(msize)<1: m_ht:=fig_ht*ypart(msize); else: m_ht:=fig_ht; fi + for i=1 upto 6: + proc_skeleton(0); proc_scaling; + if (mol_ht/mol_wd)>(m_ht/m_wd): + if ypart(msize)>1: factor:=ypart(msize)/mol_ht; + else: factor:=((fig_ht-2margin_tb)*ypart(msize))/mol_ht; + fi + else: + if xpart(msize)>1: factor:=xpart(msize)/mol_wd; + else: factor:=((fig_wd-2margin_lr)*xpart(msize))/mol_wd; + fi + fi + exitif (factor>=1-eps)and(factor<=1+eps); blen:=blen*factor; proc_size_setup; + endfor + if blen>max_blength: blen:=max_blength; proc_size_setup; proc_skeleton(0); proc_scaling; fi + fi + %----------------------------------------------------------------------------------------------- + for i=1 upto cntA: + if addA[i]<>0: + temp_c:=char(addA[i]); + if temp_c="+": chargeA[i]:=1; elseif temp_c="-": chargeA[i]:=-1; else: chargeA[i]:=0; fi + else: chargeA[i]:=0; + fi + endfor + %=============================================================================================== + if scan_bit(sw_output,Fig): + %-draw atom----------------------------------------------------------------------------------- + if sw_numbering=0: for i=1 upto cntA: draw_atom(i); endfor fi + %-draw add to atom---------------------------------------------------------------------------- + if (not scan_bit(sw_numbering,Atom))and(not scan_bit(sw_numbering,Bond)): + for i=1 upto cntA: + if addA[i]<>0: + nA:=angX[i]+add_rot[i]; nC:=nA mod 90; + if numS[i]=0: nB:=.5atom_wd; + else: nB:=.85wdA[i]+iif(nC<45,sind(nC),cosd(nC))*.5wdA[i]; + fi + temp_p:=sfrt(posA[i]-(.35atom_wd,.35atom_wd),nB,nA); + draw_char(temp_c,temp_p,atom_wd,bond_pen_wd*ratio_char_bond,0); + fi + endfor + fi + %-draw bond----------------------------------------------------------------------------------- + for i=1 upto cntB: if lineB[i]=si_: draw_bond(i); fi endfor + %-atom numbering------------------------------------------------------------------------------ + if scan_bit(sw_numbering,Atom): + for i=1 upto cntA: + if (i>=numbering_start)and(i<=numbering_end): + if scan_bit(sw_numbering,Brock): nA:=i-numbering_start+1; + elseif scan_bit(sw_numbering,Inverse): + nA:=iif(numbering_end=numbering_start)and(i<=numbering_end): + if scan_bit(sw_numbering,Brock): nB:=i-numbering_start+1; + elseif scan_bit(sw_numbering,Inverse): + nB:=iif(numbering_end1: sftX:=xpart(mposition)-minX; + else: sftX:=margin_lr-minX+(fig_wd-mol_wd-2margin_lr)*xpart(mposition); + fi + if ypart(mposition)>1: sftY:=ypart(mposition)-minY; + else: sftY:=margin_tb-minY+(fig_ht-mol_ht-2margin_tb)*ypart(mposition); + fi + cntM:=cntM+1; + posM[0][cntM]:=(sftX,sftY); + posM[1][cntM]:=(minX+sftX,minY+sftY); + posM[2][cntM]:=(maxX+sftX,maxY+sftY); + wdM[cntM]:=mol_wd; + htM[cntM]:=mol_ht; + mol_stru[cntM]:=currentpicture; + clearit; + if cntC>=1: + for i=1 upto cntA: if colorA[i]<>0: colorA[i]:=0; fi endfor + for i=1 upto cntB: if colorB[i]<>0: colorB[i]:=0; fi endfor + fi + fi + if sw_output>=Calc: proc_calc(0); fi + endgroup; +enddef; +%------------------------------------------------------------------------------------------------- +def add_group= + if f_at=1: nE:=getA(adrT); check_adrA(nE); else: nE:=cntA+1; fi + cnt_group:=cnt_group+1; cnt_group[cnt_group]:=0; + store_group(_jp_absA,nE) + store_group(_com,_len_s) + if lineT<>nb: store_group(_tmp_line,lineT) fi + if rotT<>0: store_group(_rot_ang,rotT) fi + if lenT<>crR: store_group(_chg_len,lenT) + ef bondL<>crR: if bondL>=0: store_group(_chg_len,-bondL) else: store_group(_chg_len,bondL) fi + fi + if envT<>hz: store_group(_chg_env,envT) fi + if lineT=nl: store_group(_chg_len,_size_atom) store_group(_adj_ang,0) fi + if lineT<>nb: store_group(_mk_bond,0) fi + for i=1 upto cntD[par]: store_group(comD[par][i],parD[par][i]) endfor + store_group(_com,_len_e) + store_group(_chg_env,hz) + store_group(_com,_term) + if f_lineT=0: lineT:=si; fi + if f_lenT=0: lenT:=crR; fi + if f_rotT=0: rotT:=0; fi + if f_envT=0: envT:=hz; fi +enddef; +%------------------------------------------------------------------------------------------------- +def store_group(expr a,b)= + cnt_group[cnt_group]:=cnt_group[cnt_group]+1; + com_group[cnt_group][cnt_group[cnt_group]]:=a; par_group[cnt_group][cnt_group[cnt_group]]:=b; +enddef; +%================================================================================================= +def read_group(expr a)(expr n)= + save_cnt_group:=cnt_group; + save_cntD:=cntD[a]; + for i=n upto cnt_group: + for j=1 upto cnt_group[i]: + cntD[a]:=cntD[a]+1; comD[a][cntD[a]]:=com_group[i][j]; parD[a][cntD[a]]:=par_group[i][j]; + endfor + endfor + proc_bond_atom(a)(save_cntD+1); + if cnt_group>save_cnt_group: read_group(a)(save_cnt_group+1); fi +enddef; +%================================================================================================= +def draw_frame(expr PS,LX,LY,PN)= + draw ((0,0)--(LX,0)--(LX,LY)--(0,LY)--cycle) shifted PS withpen pensquare scaled PN; +enddef; +%------------------------------------------------------------------------------------------------- +def draw_corner(expr PS,LX,LY,PN)= + draw( 0, 0) shifted PS wpcs PN; draw(LX, 0) shifted PS wpcs PN; + draw(LX,LY) shifted PS wpcs PN; draw( 0,LY) shifted PS wpcs PN; +enddef; +%------------------------------------------------------------------------------------------------- +def proc_size_setup= + atom_wd:= blen*ratio_atom_bond+offset_atom; + wedge_wd:= blen*ratio_wedge_bond+offset_wedge; + hash_gap:= blen*ratio_hashgap_bond+offset_hash_gap; + bondgap:= blen*ratio_bondgap_bond+offset_bond_gap; + bond_pen_wd:= blen*ratio_thickness_bond+offset_thickness; +enddef; +%------------------------------------------------------------------------------------------------- +def proc_scaling= + minX:=minY:=4095; + maxX:=maxY:=-4095; + for i=1 upto cntA: + xpos:=xpart(posA[i]); + ypos:=ypart(posA[i]); + if numS[i]<>0: + nU:=nD:=nP:=nL:=nR:=0; + for j=1 upto length(strD[numS[i]]): + temp_c:=subc(j,strD[numS[i]]); + if (temp_c="^"): nU:=.5atom_wd; + elseif (temp_c="_"): nD:=.5atom_wd; + elseif (temp_c<>"{")and(temp_c<>"}"): nP:=nP+atom_wd*tbl_char_wd[ASCII(temp_c)]; + fi + endfor + if (angX[i]<=90)or(angX[i]>=270): nR:=nP; else: nL:=nP; fi + if (xpos-nL+.5atom_wd)maxX: maxX:=xpos+nR-.5atom_wd; fi + if (ypos-nD-.5atom_wd)maxY: maxY:=ypos+nU+.5atom_wd; fi + else: if xposmaxX: maxX:=xpos; fi + if yposmaxY: maxY:=ypos; fi + fi + endfor + mol_wd:=maxX-minX; mol_ht:=maxY-minY; +enddef; +%------------------------------------------------------------------------------------------------- +def char_use_check= + for i=1 upto 128: f_char[i]:=0; endfor + if sw_numbering>=1: for j=a_zero upto a_nine: f_char[j]:=1; endfor + else: + for i=1 upto cntA: + if numS[i]<>0: + for j=1 upto length(strD[numS[i]]): f_char[ASCII(subc(j,strD[numS[i]]))]:=1; endfor + fi + endfor + fi +enddef; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +def proc_bond_atom(expr a)(expr n)= + f_bra:=f_term:=rotT:=f_lineT:=f_rotT:=f_lenT:=f_envT:=envT:=envB:=strAT:=f_at:=0; + bondL:=crR; lenT:=crR; sB[0]:=0; eB[0]:=1; lineT:=si; + addAT:=markA:=markB:=saveA:=saveB:=0; + %----------------------------------------------------------------------------------------------- + for i=n upto cntD[a]: com:=comD[a][i]; par:=parD[a][i]; + if com=_mk_bond: if (par=0)and(rotT<>0): rotT:=0; fi add_atom(0); + ef com=_set_adr: adrT:=par; + ef com=_com: if par=_mark: saveA:=markA; saveB:=markB; markA:=cntA; markB:=cntB; + ef par=_rest: markA:=saveA; markB:=saveB; + ef par=_moff: markA:=markB:=0; + ef par=_term: termA; + ef par=_len_s: temp_lenE:=bondL; ef par=_len_e: bondL:=temp_lenE; + ef par=_len_ss: temp_lenF:=bondL; ef par=_len_ee: bondL:=temp_lenF; + ef par=_group_s: f_at:=1; if lineT<>si: f_lineT:=1; fi if rotT<>0: f_rotT:=1; fi + if lenT<>crR: f_lenT:=1; fi if envT<>hz: f_envT:=1; fi + ef par=_group_e: f_at:=0; f_lineT:=f_rotT:=f_lenT:=f_envT:=rotT:=envT:=0; + lineT:=si; lenT:=crR; + fi + ef com=_set_atom: strAT:=par; + ef com=_group_si: add_group; + ef com=_group_dm: lineT:=dm; add_group; + ef com=_group_wf: lineT:=wf; add_group; + ef com=_group_zf: lineT:=zf; add_group; + ef com=_jp_bond: termA; nA:=getB(par); check_adrB(nA); sB[cntB+1]:=sB[nA]; f_bra:=1; + ef com=_jp_atom: termA; nA:=getA(par); check_adrA(nA); sB[cntB+1]:=nA; f_bra:=1; + ef com=_jp_absA: sB[cntB+1]:=par; f_bra:=1; temp_cntB:=cntB; + ef com=_chg_atom: numS[getA(adrT)]:=parD[par][1]; + ef com=_chg_len: if par=_ring_len: bondL:=ringL; else: bondL:=par; fi + ef com=_get_len: if par=_tmp_len: if bondL=crR: bondL:=lenT; fi + ef par=_ring_len: if lenT<>crR: bondL:=lenT; else: if bondL<0: bondL:=1; fi fi + else: ringL:=lenB[getB(par)]; fi + ef com=_tmp_len: lenT:=par; + ef com=_set_line: lineB[getB(adrT)]:=par; + ef com=_tmp_line: lineT:=par; + ef com=_tmp_rot: rotT:=par; + ef com=_cyc: check_adrA(getA(par)); add_atom(getA(par)); + ef com=_cyc_eB: add_atom(eB[getB(par)]); + ef com=_cyc_sB: add_atom(sB[getB(par)]); + ef com=_chg_env: envB:=par; + ef com=_tmp_env: envT:=par; + ef com=_set_colorA: colorA[getA(adrT)]:=par; + ef com=_set_colorB: colorB[getB(adrT)]:=par; + ef com=_set_add: addAT:=par; + ef com=_chg_add: addA[getA(par)]:=addAT; addAT:=0; if rotT<>0: add_rot[getA(par)]:=rotT; fi + else: + fi + endfor +enddef; +%------------------------------------------------------------------------------------------------- +def add_atom(expr n)= + cntB:=cntB+1; lineB[cntB]:=lineT; lineT:=si; + if lenT=crR: lenB[cntB]:=bondL; else: lenB[cntB]:=lenT; lenT:=crR; fi + if f_bra=0: cntA:=cntA+1; sB[cntB]:=cntA; numS[cntA]:=strAT; + addA[cntA]:=addAT; addAT:=strAT:=add_rot[cntA]:=0; + if rotT<>0: add_rot[cntA]:=rotT; rotT:=0; fi + else: f_bra:=0; fi + if n=0: eB[cntB]:=cntA+1; f_term:=0; else: eB[cntB]:=n; f_term:=1; fi +enddef; +%------------------------------------------------------------------------------------------------- +def check_adrA(expr n)= + if (n>iif(f_term=0,cntA+1,cntA))or(n<=0): errmessage("cntA=[ "&decimal(n)&" ]"); fi +enddef; +def check_adrB(expr n)= if (n>cntB)or(n<=0): errmessage("cntB=[ "&decimal(n)&" ]"); fi enddef; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +def proc_skeleton(expr a)= + markA:=markB:=cntA:=cntB:=f_bra:=rotT:=f_term:=0; + envT:=envB:=f_lineT:=f_rotT:=f_lenT:=f_envT:=0; lineT:=si; angT:=mangle; + angA[0]:=angB[0]:=angX[0]:=0; posA[0]:=posBs:=posBe:=(0,0); + %----------------------------------------------------------------------------------------------- + for i=1 upto cntD[a]: com:=comD[a][i]; par:=parD[a][i]; + if com=_mk_bond: if (par=0)and(rotT<>0):par:=rotT; rotT:=0; fi add_bond(par,1); + ef com=_com: if par=_mark: saveA:=markA; saveB:=markB; markA:=cntA; markB:=cntB; + ef par=_rest: markA:=saveA; markB:=saveB; + ef par=_moff: markA:=markB:=0; ef par=_term: termB; + ef par=_group_e: lineT:=si; lenT:=crR; rotT:=envT:=0; + fi + ef com=_jp_bond: termB; nA:=getB(par); posBs:=posA[sB[nA]]; angT:=angB[nA]; f_bra:=1; rotT:=0; + ef com=_jp_atom: termB; adrT:=getA(par); posBs:=posA[adrT]; angT:=angX[adrT]; f_bra:=1; rotT:=0; + ef com=_jp_absA: adrT:=par; posBs:=posA[adrT]; + angT:=angX[adrT]; f_bra:=1; rotT:=0; temp_cntB:=cntB; + ef com=_adj_ang: angT:=adjust_ang(angT); + ef com=_rot_ang: if par>-3700: angT:=(angT+par) mod 360; else: angT:=(par+4095) mod 360; fi + ef com=_tmp_rot: rotT:=par; + ef com=_group_si: rotT:=0; + ef com=_group_wf: rotT:=0; + ef com=_chg_env: envB:=par; + ef com=_tmp_env: envT:=par; + ef com=_cyc: add_bond(angle(posA[getA(par)]-posBs)-angT,0); + ef com=_cyc_sB: add_bond(angle(posA[sB[getB(par)]]-posBs)-angT,0); + ef com=_cyc_eB: add_bond(angle(posA[eB[getB(par)]]-posBs)-angT,0); + else: + fi + endfor +enddef; +%------------------------------------------------------------------------------------------------- +def add_bond(expr ROT,FLG)= + if ROT=_arrange_ang: nA:=arrange_ang(angT mod 360); else: nA:=ROT; fi + if f_bra=0: + adrT:=cntA:=cntA+1; posA[cntA]:=posBs; angA[cntA]:=angT; + angX[cntA]:=(angT+nA/2+iif(nA>=0,-90,90)) mod 360; + else: f_bra:=0; + fi + cntB:=cntB+1; + if nA>-3700: angB[cntB]:=angT:=(angT+nA) mod 360; else: angB[cntB]:=angT:=nA+4095; fi + if FLG=1: + if lenB[cntB]=_size_atom: posBe:=sfrt(posBs,atom_wd,angT); + else: + nA:=lenB[cntB]; + if nA<0: nB:=glu_atom(adrT)+glu_atom(cntA+1); nA:=abs(nA); else: nB:=0; fi + posBe:=sfrt(posBs,nA*blen+nB,angT); + fi + posA[cntA+1]:=posBe; f_term:=0; + else: f_term:=1; + fi + posBs:=posBe; +enddef; +%------------------------------------------------------------------------------------------------- +vardef arrange_ang(expr n)= + if cntB=0: angT:=(angT-180) mod 360; 180 + else: + if envB>=parts_emb_start: parD[envB][cntB-temp_cntB+3] + else: if envB=hz: if n=0: 60 ef n<=90: -60 ef n<=180: 60 ef n<270: -60 else: 60 fi + ef envB=vt: if n=0: -60 ef n<90: 60 ef n<=180: -60 ef n<=270: 60 else: -60 fi + ef abs(envB)<=180: envB fi + fi + fi +enddef; +%------------------------------------------------------------------------------------------------- +vardef adjust_ang(expr n)= if (n<40)or(n>320): 0 ef n<140: 90 ef n<220: 180 else: 270 fi enddef; +%================================================================================================= +vardef getA(expr n)= if n>=0: markA+n ef n>=-999: cntA+n+1 else: n+4095 fi enddef; +vardef getB(expr n)= if n>=0: markB+n ef n>=-999: cntB+n+1 else: n+4095 fi enddef; +%------------------------------------------------------------------------------------------------- +def termA= + if f_term=0: + if f_bra=0: + cntA:=cntA+1; numS[cntA]:=strAT; addA[cntA]:=addAT; add_rot[cntA]:=rotT; + addAT:=strAT:=rotT:=0; + else: f_bra:=0; + fi + f_term:=1; + fi +enddef; +%------------------------------------------------------------------------------------------------- +def termB= + if f_term=0: if f_bra=0:cntA:=cntA+1; angX[cntA]:=angT mod 360; else:f_bra:=0; fi f_term:=1; fi +enddef; +%------------------------------------------------------------------------------------------------- +vardef glu_atom(expr NUM)= + if numS[NUM]<>0: nE:=angT mod 90; nF:=0.5atom_wd;(iif(nE<45,sind(nE),cosd(nE))*nF)++nF else: 0 fi +enddef; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +def draw_atom(expr NUM)= + begingroup + if numS[NUM]<>0: + save slen,f_wd,f_ht,r_ff,pos_a,pos_c,temp_c,temp_s,dir_str; + string temp_c,temp_s; + pair pos_a,pos_c; + %------------------------------------------------------- + temp_s:=strD[numS[NUM]]; slen:=length(temp_s); nA:=angX[NUM]; + dxA[NUM]:=dir_str:=iif((nA<=90)or(nA>=270),1,-1); + wdA[NUM]:=nC:=0; pos_c:=(0,0); + pos_a:=posA[NUM]-(.5atom_wd*dir_str,.5atom_wd); + if atomfont<>"draw": + atom_picture:="C" infont atomfont; + r_ff:=atom_wd/(ypart(ulcorner atom_picture)-ypart(llcorner atom_picture)); + fi + for i=1 upto slen: + if nC=0: + temp_c:=subc(i,temp_s); + if (dir_str=-1)and(temp_c="{"): + nD:=i; nC:=0; for j=nD upto slen: nC:=nC+1; exitif subc(j,temp_s)="}"; endfor + fi + else: nC:=nC-1; temp_c:=subc(nD+nC,temp_s); + fi + if temp_c="_": pos_c:=iif(pos_c=(0,0),(0,-.5atom_wd),(0,0)); + elseif temp_c="^": pos_c:=iif(pos_c=(0,0),(0, .5atom_wd),(0,0)); + elseif (temp_c<>"{")and(temp_c<>"}"): + if atomfont="draw": + f_wd:=atom_wd*tbl_char_wd[ASCII(temp_c)]; + if dir_str=-1: pos_a:=pos_a-(f_wd,0); fi + draw_char(temp_c,pos_a+pos_c,atom_wd,bond_pen_wd*ratio_char_bond,NUM); + if scan_bit(sw_frame,Atom): draw_frame(pos_a+pos_c,f_wd,atom_wd,thickness_frame); fi + if dir_str=1: pos_a:=pos_a+(f_wd,0); fi + else: + atom_picture:=temp_c infont atomfont; + f_wd:=(xpart(lrcorner atom_picture)-xpart(llcorner atom_picture))*r_ff; + f_ht:=(ypart(urcorner atom_picture)-ypart(llcorner atom_picture))*r_ff; + if dir_str=-1: pos_a:=pos_a-(f_wd,0); fi + addto currentpicture also atom_picture scaled (r_ff*(1-2ratio_atomgap_atom)) + shifted (pos_a+pos_c+(f_wd*ratio_atomgap_atom,f_ht*ratio_atomgap_atom)) + Cp(colorA[NUM]); + if scan_bit(sw_frame,Atom): draw_frame(pos_a+pos_c,f_wd,f_ht,thickness_frame); fi + if dir_str=1: pos_a:=pos_a+(f_wd,0); fi + fi + wdA[NUM]:=wdA[NUM]+f_wd; + fi + endfor + fi + endgroup +enddef; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +def draw_bond(expr NUM)= + begingroup + save ww,aw,ap,am,ang,col,len,Ls,Le,pA,zA,zL; + pair pA,Ls,Le; + path zA,zL; + %----------------------------------------------------------------------------------------------- + nL:=lineB[NUM]; ang:=angB[NUM]; nS:=sB[NUM]; nE:=eB[NUM]; + col:=colorB[NUM]; zL:=posA[nS]--posA[nE]; ww:=wedge_wd; ap:=ang+90; am:=ang-90; aw:=atom_wd; + %----------------------------------------------------------------------------------------------- + if (numS[nS]=0)and(numS[nE]=0)or(sw_numbering>=1): + Ls:=posA[nS]; Le:=posA[nE]; pA:=(.1,.9); + ef numS[nS]=0: Le:=zL intersectionpoint frame_str(nE); Ls:=posA[nS]; pA:=(.15,1); + ef numS[nE]=0: Ls:=zL intersectionpoint frame_str(nS); Le:=posA[nE]; pA:=(0,.85); + else: Ls:=zL intersectionpoint frame_str(nS); Le:=zL intersectionpoint frame_str(nE); pA:=(0,1); + fi + zA:=Ls--Le; len:=length(Le-Ls); + %----------------------------------------------------------------------------------------------- + pickup pencircle scaled bond_pen_wd; + if (nL=si)or(scan_bit(sw_abbreviate,Bond)): draw zA Cp(col); + ef nL=dl: draw zA Cp(col); draw sfrt(subpath pA of zA,bondgap,ap) Cp(col); + ef nL=dr: draw zA Cp(col); draw sfrt(subpath pA of zA,bondgap,am) Cp(col); + ef nL=dm: draw sfrt(zA,bondgap/1.75,ap) Cp(col); draw sfrt(zA,bondgap/1.75,am) Cp(col); + ef nL=db: nA:=iif(((ang-angX[nS]) mod 360)<=180,ap,am); + draw zA Cp(col); draw sfrt(subpath pA of zA,bondgap,nA) Cp(col); + ef nL=tm: draw zA Cp(col);draw sfrt(zA,bondgap,ap) Cp(col); draw sfrt(zA,bondgap,am) Cp(col); + ef nL=wf: fill Ls--sfrt(Le,ww,am)--sfrt(Le,ww,ap)--cycle Cp(col); + ef nL=wb: fill sfrt(Ls,ww,am)--Le--sfrt(Ls,ww,ap)--cycle Cp(col); + ef nL=bd: draw zA withpen penrazor rotated ap scaled bondgap Cp(col); + ef nL=bz: bz_put(sfrt(Ls,ww,ap),sfrt(Le,ww,ap),sfrt(Ls,ww,am),sfrt(Le,ww,am)); + ef nL=zf: wz_put(Ls,sfrt(Le,ww,ap),sfrt(Le,ww,am)); + ef nL=zb: wz_put(Le,sfrt(Ls,ww,am),sfrt(Ls,ww,ap)); + ef nL=dt: for i=0 step .75hash_gap/len until 1: drawdot i[Ls,Le] Cp(col); endfor + ef nL=wv: nA:=3bond_pen_wd; nB:=len/nA; + draw Le for i=1 upto nB: + ..controls(((i-.5)/nB)[sfrt(Le,nA,iif(odd(i),ap,am)),sfrt(Ls,nA,iif(odd(i),ap,am))]) + ..(i/nB)[Le,Ls] endfor ..Ls Cp(col); + ef nL=wf_r: filldraw Ls--sfrt(Le,.35ww,am)--sfrt(Le,.35ww,ap)--cycle wpcs .05ww Cp(col); + ef nL=wb_r: filldraw sfrt(Ls,.35ww,am)--Le--sfrt(Ls,.35ww,ap)--cycle wpcs .05ww Cp(col); + ef nL=bd_r: draw zA wpcs .65bondgap Cp(col); + ef nL=vf: draw zA Cp(col);draw sfrt(Le,bondgap,ang-150)--Le--sfrt(Le,bondgap,ang+150) Cp(col); + ef nL=vb: draw zA Cp(col);draw sfrt(Ls,bondgap,ang-30)--Ls--sfrt(Ls,bondgap,ang+30) Cp(col); + ef nL=si_: erase draw subpath (.15,.85) of zA wpcs 0.8bondgap; draw zA Cp(col); + ef nL=dl_: erase draw subpath (.15,.85) of sfrt(subpath pA of zA,.5bondgap,ap) wpcs 1.8bondgap; + draw zA Cp(col); draw sfrt(subpath pA of zA,bondgap,ap) Cp(col); + ef nL=dr_: erase draw subpath (.15,.85) of sfrt(subpath pA of zA,.5bondgap,am) wpcs 1.8bondgap; + draw zA Cp(col); draw sfrt(subpath pA of zA,bondgap,am) Cp(col); + ef nL=dm_: erase draw subpath(0.15,0.85) of zA wpcs 1.8 bondgap; + draw sfrt(zA,bondgap/1.75,ap) Cp(col); draw sfrt(zA,bondgap/1.75,am) Cp(col); + ef nL=wf_: erase draw subpath (0.15,0.85) of (Ls--sfrt(Le,ww,am)) wpcs 0.8bondgap; + erase draw subpath (0.15,0.85) of (Ls--sfrt(Le,ww,ap)) wpcs 0.8bondgap; + fill Ls--sfrt(Le,ww,am)--sfrt(Le,ww,ap)--cycle Cp(col); + ef nL=wb_: erase draw subpath (0.15,0.85) of (sfrt(Ls,ww,am)--Le) wpcs 0.8bondgap; + erase draw subpath (0.15,0.85) of (sfrt(Ls,ww,ap)--Le) wpcs 0.8bondgap; + fill sfrt(Ls,ww,am)--Le--sfrt(Ls,ww,ap)--cycle Cp(col); + ef nL=zf_: erase draw subpath (0.15,0.85) of (Ls--sfrt(Le,ww,am)) wpcs 0.8bondgap; + erase draw subpath (0.15,0.85) of zA wpcs 0.8bondgap; + erase draw subpath (0.15,0.85) of (Ls--sfrt(Le,ww,ap)) wpcs 0.8bondgap; + wz_put(Ls,sfrt(Le,ww,ap),sfrt(Le,ww,am)); + ef nL=zb_: erase draw subpath (0.15,0.85) of (sfrt(Ls,ww,am)--Le) wpcs 0.8bondgap; + erase draw subpath (0.15,0.85) of zA wpcs 0.8bondgap; + erase draw subpath (0.15,0.85) of (sfrt(Ls,ww,ap)--Le) wpcs 0.8bondgap; + wz_put(Le,sfrt(Ls,ww,am),sfrt(Ls,ww,ap)); + ef nL=bd_: erase draw subpath(0.15,0.85) of zA wpcs 1.6bondgap; + draw zA withpen penrazor rotated ap scaled bondgap Cp(col); + ef nL=nb: + %-- bond type for glycan ---------------------------------------------------------------------- + ef nL=arc_lb: draw Ls--Ls-(0,aw)..posA[nE]+(-1.2aw,0)..posA[nE]-(.6aw,0) Cp(col); + ef nL=arc_br: draw posA[nS]+(.6aw,0)..posA[nS]+(1.2aw,0)..Le-(0,aw)--Le Cp(col); + ef nL=arc_lbr: draw posA[nS]+(0,iif(numS[nS]=0,0,-.6aw))--posA[nS]+(0,-.8aw) + ..0.5[posA[nS],posA[nE]]+(0,-1.7aw)..posA[nE]+(0,-.8aw) + --posA[nE]+(0,iif(numS[nE]=0,0,-.6aw)) Cp(col); + ef nL=arc_ltr: draw posA[nS]+(0,iif(numS[nS]=0,0,0.6aw))--posA[nS]+(0,.8aw) + ..0.5[posA[nS],posA[nE]]+(0,1.7aw)..posA[nE]+(0,.8aw) + --posA[nE]+(0,iif(numS[nE]=0,0,.6aw)) Cp(col); + %---------------------------------------------------------------------------------------------- + fi + endgroup +enddef; +%------------------------------------------------------------------------------------------------ +def wz_put(expr PA,PB,PD)= + for i=0 upto len/hash_gap: + nA:=hash_gap*i/len; nD:=(hash_gap*i+ratio_hash_black*hash_gap)/len; + if nD>((len-hash_gap)/len): nD:=1; fi + fill nA[PB,PA]--nA[PD,PA]--nD[PD,PA]--nD[PB,PA]--cycle Cp(col); + endfor +enddef; +%------------------------------------------------------------------------------------------------ +def bz_put(expr PA,PB,PC,PD)= + for i=0 upto len/hash_gap: + nA:=hash_gap*i/len; nD:=(hash_gap*i+ratio_hash_black*hash_gap)/len; + fill nA[PB,PA]--nA[PD,PC]--nD[PD,PC]--nD[PB,PA]--cycle Cp(col); + endfor +enddef; +%------------------------------------------------------------------------------------------------ +vardef frame_str(expr NUM)= + nA:=1.12atom_wd; nB:=wdA[NUM]+.12atom_wd; + ((0,0)--(nB,0)--(nB,nA)--(0,nA)--cycle) shifted + (posA[NUM]-(.5nA+iif((dxA[NUM]=-1)and(wdA[NUM]>atom_wd),nB-nA,0),.5nA)) +enddef; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +def char_size_set(expr WD)(expr HT)(expr STR)= + for j=1 upto length(STR): + nA:=ASCII(subc(j,STR)); tbl_char_wd[nA]:=WD; tbl_char_ht[nA]:=HT; + endfor +enddef; +%------------------------------------------------------------------------------------------------- +char_size_set( 1)( 1)("CGHMNOQW"); +char_size_set( .9)( 1)("ABDFIJKPRSTUVXY/><#\%@"); +char_size_set( .8)( 1)("ELZ&"); +char_size_set( .7)( 1)(" ()[]{}0123456789nh=tfg?~^"); +char_size_set( .7)( .9)("$"); +char_size_set( .7)( .7)("-+*_"); +char_size_set(.45)(.95)("l"); +char_size_set(.75)( .8)("opq"); +char_size_set( .8)( .8)("e"); +char_size_set( .9)( .8)("wm"); +char_size_set( .7)( .8)("abdcksuvrxyz"); +char_size_set(.35)( .9)("i"); +char_size_set( .5)( .9)("j"); +char_size_set(.35)( 1)("!|"); +char_size_set( .4)( 1)(".,:;'`"); +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +def draw_char(expr CHR,POS,WD,PEN,NUM)= +begingroup +save Z,aW,aH,fW,fH,hW,hW,hH,fP,hP,zO,zOh,pos,dw,dwh,dwv,cdw,sC; +path zO,zOh,zOa; +string sC; +pair Z[],pos; +%------------------------------------------------------------------------------------------------- +def dw expr p = draw (p) shifted pos Cp(colorA[NUM]) enddef; +def dwv expr p = draw (p) withpen penrazor scaled fP shifted pos Cp(colorA[NUM]) enddef; +def dwvs (expr n)expr p= + draw (p) withpen penrazor scaled fP scaled n shifted pos Cp(colorA[NUM]) enddef; +def dwh expr p=draw (p) withpen penrazor rotated 90 scaled fP shifted pos Cp(colorA[NUM]) enddef; +def cdw expr p=cutdraw (p) shifted pos Cp(colorA[NUM]) enddef; +%------------------------------------------------------------------------------------------------- +sC:=CHR; fP:=PEN; hP:=0.5fP; +aW:=WD*tbl_char_wd[ASCII(sC)]*(1-2ratio_atomgap_atom); +aH:=WD*tbl_char_ht[ASCII(sC)]*(1-2ratio_atomgap_atom); +pos:=POS+(WD*ratio_atomgap_atom,WD*ratio_atomgap_atom); +%------------------------------------------------------------------------------------------------- +fW:=aW-hP; hW:=.5aW; fH:=aH-hP; hH:=.5aH; +Z01:=( 0,hP); Z02:=(hP, 0); Z03:=(hP,hP); Z04:=(aW,hP); Z05:=(fW, 0); Z06:=(hW,aH); Z07:=(hW, 0); +Z08:=( 0,hH); Z09:=(hP,hH); Z10:=(fW,hH); Z11:=(hW,aW); Z12:=( 0,fH); Z13:=(hP,fH); Z14:=(hW,fH); +Z15:=(fW,aH); Z16:=(aW,fH); Z17:=(aW,hH); Z18:=(hP,aH); Z19:=(hW,hP); Z20:=(hW,hH); Z21:=(fW,hP); +Z22:=(fW,fH); Z23:=(hW,fW); +%------------------------------------------------------------------------------------------------- +zO:=Z10..(.8aW,fH-.5hP)..tension 1.5..(.2aW,fH-.5hP)..Z09.. + (.2aW,1.5hP)..tension 1.5..(.8aW,1.5hP)..cycle; +zOh:=(hP,.25aH)..Z19..(fW,.25aH)..Z20..cycle; +zOa:=(hP,.35aH)..(hW,hP)..(fW,.35aH)..(hW,.7aH)..cycle; +%------------------------------------------------------------------------------------------------- +ppcs fP; +if sC="A": dwvs(1.14) Z02--Z06--Z05; dw .33[Z02,Z06]--.33[Z05,Z06]; +ef sC="B": dw Z13--Z14{right}..(.9fH,.75aH)..{left}Z20--Z09--Z20{right}..(.9fH,.25aH).. + {left}Z19--Z03; dwv Z02--Z18; +ef sC="C": cdw sbp(.05,.95)zO; +ef sC="D": dw Z13--Z14..Z10..Z19--Z03; dwv Z02--Z18; +ef sC="E": pickup pensquare scaled fP; dw Z21--Z03--Z13--Z22; dw Z09--Z10; +ef sC="F": dwh Z12--Z16; dwh (0,.45aH)--(fW,.45aH); dw Z02--Z13; +ef sC="G": cdw sbp(.06,.97)zO; dwh bot Z20-- bot Z17; +ef sC="H": dwv Z02--Z18; dw Z09--Z10; dwv Z05--Z15; +ef sC="I": dwv Z19--Z14; dwh (hW-fP,hP)--(hW+fP,hP); dwh (hW-fP,fH)--(hW+fP,fH); +ef sC="J": cdw Z09..(hP,.4aH){down}..{right}Z19{right}..{up}(fW,.4aH)..Z15; +ef sC="K": cdw Z02--Z18; cdw .35[.45[Z02,Z18],Z16]--Z05; cdw .35[Z02,Z18]--Z16; +ef sC="L": dwh Z04--Z01; dwv Z02--Z18; +ef sC="M": dwv Z02--Z18; dwvs(1.14) Z18--Z19--Z15; dwv Z15--Z05; +ef sC="N": dwv Z02--Z18; dwv Z05--Z15; dwvs(1.4) (1.4hP,aH)--(aW-1.4hP,0); +ef sC="O": dw zO; +ef sC="P": dwv Z02--Z18; dw Z13--(.65aW,fH){right}..(fW,.7aH)..{left}(.65aW,.44aH)..(hP,.44aH); +ef sC="Q": dw zO; dw (.6aW,.4aH)--Z05; +ef sC="R": dwv Z02--Z18; dw Z13--(.65aW,fH){right}..(fW,.7aH)..{left}(.65aW,.44aH)..(hP,.44aH); + cdw Z05{up}..{left}(hW,.44aH); +ef sC="S": cdw sbp(.05,.45)zO; cdw sbp(.55,.95)zO; dw (fW,.3aH){up}..{up}(hP,.7aH); +ef sC="T": dwh Z12--Z16; dwv .5[Z12,Z16]--Z07; +ef sC="U": cdw Z18..Z09{down}..{right}Z19{right}..{up}Z10..Z15; +ef sC="U": cdw Z18..(hP,.4fH){down}..{right}Z19{right}..{up}(fW,.4fH)..Z15; +ef sC="V": dwvs(1.2) Z18--Z07--Z15; +ef sC="W": dwvs(1.08) Z18--(.25aW,0)--Z06--(.75aW,0)--Z15; +ef sC="X": dwvs(1.4) Z18..Z05; dwvs(1.4) Z02..Z15; +ef sC="Y": dwvs(1.2) Z18--Z20--Z15; dwv Z20--Z07; +ef sC="Z": dwh Z12--Z16; dwvs(1.4) (1.4hP,fP)--(aW-1.4hP,aH-fP); dwh Z01--Z04; +ef sC="a": dw Z19..Z10..Z14..Z09..cycle; dwv Z05--Z15; +ef sC="b": dw Z19..Z10..Z11..Z09..cycle; dwv Z02--(hP,1.3aH) +ef sC="c": cdw sbp(.06,.94)Z10..Z14..Z09..Z19..cycle; +ef sC="d": dw Z19..Z10..Z11..Z09..cycle; dwv Z05--(fW,1.3aH); +ef sC="e": cdw sbp(0,.92)Z10..Z14..Z09..Z19..cycle; dw Z10--Z09; +ef sC="f": cdw (.4fW,0)--(.4fW,.75aH){up}..(.75aW,fH)..{down}(fW,.8aH); dwh Z08--Z17; +ef sC="g": dw zOa; dw sbp(0,.5)zOh shifted (0,-.5fH); cdw (aW-hP,.7aH)--(aW-hP,-.25aH); +ef sC="h": cdw Z02..(hP,.3aH){up}..(hW,.7fH)..{down}(fW,.3aH)..Z05; dwv (hP,.3aH)--Z18; +ef sC="i": dwv Z07--(hW,.7aH); ppcs 1.4fP; dw Z14; +ef sC="j": cdw (fW,.7aH)--Z21..(.25aW,-.66fP)..Z03; ppcs 1.4fP; dw Z22; +ef sC="k": dwv Z02--(hP,1.3fH); cdw .5[Z02,Z18]--Z05; cdw .5[Z02,Z18]--Z16; +ef sC="l": dwv Z07--Z06; dwh Z14--Z13; dwh Z19--Z21; +ef sC="m": cdw Z02..(hP,.3aH){up}..(.28aW,fH)..{down}(hW,.3aH)..Z07; + cdw (hW,.6aH){up}..(.7aW,aH-hP)..{down}(fW,.6aH)..Z05; dwv (hP,.3aH)--(hP,aH); +ef sC="n": cdw Z02{up}..(hW,.8fH)..{down}(fW,.5aH)..Z05; dwv (hP,0)--(hP,.8aH); +ef sC="o": dw Z19..Z10..Z14..Z09..cycle; +ef sC="p": dw Z19..Z10..Z14..Z09..cycle; dwv (hP,aH)--(hP,-.3aH); +ef sC="q": dw Z19..Z10..Z14..Z09..cycle; dwv (fW,aH)--(fW,-.3aH); +ef sC="r": cdw (sbp(.33,.72)Z19..Z10..Z14..Z09..cycle) shifted(0,-hP); dwv Z02--Z18; +ef sC="s": cdw sbp(.05,.45)zO; cdw sbp(.55,.95)zO; dw (fW,.3aH){up}..{up}(hP,.7aH); +ef sC="t": dwv Z07--Z06; dwh (0,.66aH)--(aW,.66aH); +ef sC="u": cdw Z18..(hP,.55aH){down}..Z19..(fW,.55aH){up}..Z15; dwv Z15--Z05; +ef sC="v": dwv Z18--Z07--Z15; +ef sC="w": dwv Z18--(.25aW,0)--Z06--(.75aW,0)--Z15; +ef sC="x": dwvs(1.4) Z18--Z05; dwvs(1.4) Z15--Z02; +ef sC="y": dwvs(1.4) (Z18--Z20) shifted (0,-.3aH); dwvs(1.4) (Z15--Z02) shifted (0,-.3aH); +ef sC="z": dwh Z12--Z16; dwvs(1.4) (1.4hP,fP)--(aW-1.4hP,aH-fP); dwh Z01--Z04; +ef sC="0": dw Z09...Z14...Z10...Z19...cycle; +ef sC="1": dwv Z07--(hW,aH-.3hP)--(hW-fP,aH-fP)--(hW-fP,aH-1.5fP); +ef sC="2": cdw (hP,1.3hP)..(.4fW,.35fH)..(fW,.65aH)..Z14..(hP,.65aH); dwh Z04--Z01; +ef sC="3": cdw sbp(0,.75)zOh; cdw sbp(.25,.98)zOh shifted (0,hH-hP); dwh (.3aW,hH)--Z20; +ef sC="4": dwh (0,.25aH)--(aW,.25aH); dwv (.75aW,0)--(.75aW,aH)--(1.2hP,.25aH+hP); + dwv (.75aW+.5hP,aH)--(1.7hP,.25aH+hP); +ef sC="5": dwh Z12--Z16; dwv Z13--(hP,.55fH); + cdw (.5hP,.18aH)..(.65aW,1.3hP)..(fW,.4aH)..(hW,.63aH)..(.7hP,.56aH); +ef sC="6": dw Z19..(fW,.5fW)..Z23..(hP,.5fW)..cycle; cdw (.8fP,hH)--Z06; +ef sC="7": dwh (0,.fH)--Z16; dwvs(1.2) (aW-1.2hP,aH-fP)--(.4aW,0); +ef sC="8": dw zOh; dw (hP,.75aH)...Z14...(fW,.75aH)...Z20...cycle; +ef sC="9": dw (Z19..(fW,.5fW)..Z23..(hP,.5fW)..cycle) shifted (0,.32aH); cdw (fW-.45fP,hH)--Z07; +ef sC=" ": +ef sC=".": ppcs 1.4fP; dw Z19; +ef sC=",": dw (hW+.5fP,hP)..(hW+.3fP,-fP)..(hW-.5fP,hP-2fP); ppcs 1.4fP; dw Z19; +ef sC="'": dw (hW+.5fP,fH)..(hW+.3fP,fH-fP)..(hW-.5fP,fH-2fP); ppcs 1.4fP; dw Z14; +ef sC="`": dw (hW-.5fP,fH-2fP)..(hW-.3fP,fH-fP)..(hW+.5fP,fH); ppcs 1.4fP; dw (hW,fH-2fP); +ef sC=":": ppcs 1.4fP; dw (hW,.2aH); dw (hW,.8aH); +ef sC=";": dw (hW+hP,.2aH)..(hW-hP,.2aH-2fP); ppcs 1.4fP; dw (hW,.2aH); dw (hW,.8aH); +ef sC="(": dw Z19...Z09...Z14; +ef sC=")": dw Z19...Z10...Z14; +ef sC="[": dwv Z07--Z06; dwh Z14--Z22; dwh Z19--Z21; +ef sC="]": dwv Z07--Z06; dwh Z14--Z13; dwh Z03--Z19; +ef sC="{": dw Z19..(.3aW,.2aH)..(.3aW,.45aH)..(.2aW,.5aH)..(.3aW,.55aH)..(.3aW,.8aH)..Z14; +ef sC="}": dw Z19..(.7aW,.2aH)..(.7aW,.45aH)..(.8aW,.5aH)..(.7aW,.55aH)..(.7aW,.8aH)..Z14; +ef sC="<": cdw Z16--Z08--Z04; +ef sC=">": cdw Z01--Z17--Z12; +ef sC="-": dwh Z09--Z10; +ef sC="=": dwh (hP,.3aH)--(fW,.3aH); dwh (hP,.6aH)--(fW,.6aH); +ef sC="/": dw Z22..Z01; +ef sC="+": dwv Z19--Z14; dwh Z09--Z10; +ef sC="*": dw Z19--Z14; dw Z09--Z10; dw (.2aW,.2aH)--(.8aW,.8aH); dw (.2aW,.8aH)--(.8aW,.2aH); +ef sC="$": cdw sbp(.05,.45)zO; cdw sbp(.55,.95)zO; dw (fW,.3aH){up}..{up}(hP,.7aH); + dwv (hW,-fP)--(hW,fH+1.5fP); +ef sC="#": dwv (.3aW,0)--(.3aW,aH); dwv (.7aW,0)--(.7aW,aH); + dwh (0,.3aH)--(aW,.3aH); dwh (0,.7aH)--(aW,.7aH); +ef sC="!": dwv Z06--(hW,.25aH); ppcs 1.4fP; dw Z07; +ef sC="?": cdw (hP,.75fH)..(hW,aH)..(fW,.75fH)..(hW,.4fH)--(hW,.2fH); ppcs 1.4fP; dw Z07; +ef sC="|": dwv Z07--Z06; +ef sC="\": dw Z13--Z21; +ef sC="%": dw Z22..Z01; dw fullcircle scaled 2.7fP shifted (.2fH,.9fH); + dw fullcircle scaled 2.7fP shifted (.73fH,.20fH); +ef sC="~": dw (hP,.8aH)..(.3aW,.9aH)..(.6aW,.7aH)..(fW,.8aH); +ef sC="&": cdw Z21..(hW,.35aH)..(.25aW,.75aH)..(hW,.fH)..(.75aW,.75fH)..(hP,.3aH)..(hW,.hP)..Z10; +ef sC="@": cdw sbp(0,.7)zO; dwv (fW,hH)--(fW,0); + dw (fW,.45aH)..(.7aW,.75aH)..(.3aW,.45aH)..(.7aW,.15aH)..cycle; +ef sC="_": dwh Z01--Z04; +ef sC="^": dw (hP,.6aH)--(.5aW,fH)--(fW,.6aH); +else: +fi +endgroup +enddef; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +def warning_bond(expr a)= + if addA[a]=0: + warning("A"&decimal(a)&" ( "&fsl(8)(strD[numS[a]])&") has"&fdr(2)(bond_cnt)&" bonds"); + fi +enddef; +%------------------------------------------------------------------------------------------------- +vardef erase_brace(expr ATOM)= + save temp_c,temp_s; + string temp_c,temp_s; + temp_s:=""; + if (length(ATOM)>=4)and(ATOM<>"COOH"): + for i=1 upto length(ATOM): + temp_c:=subc(i,ATOM); + if (temp_c<>"{")and(temp_c<>"}")and(temp_c<>"_")and(temp_c<>"^") + and(temp_c<>"+")and(temp_c<>"-"): + temp_s:=temp_s&temp_c; fi + endfor + temp_s + else: ATOM + fi +enddef; +%------------------------------------------------------------------------------------------------- +vardef erase_space(expr TXT)= + save temp_c,temp_s; + string temp_c,temp_s; + temp_s:=""; + for i=1 upto length(TXT): + temp_c:=subc(i,TXT); + if temp_c=" ": temp_s:=temp_s&"_"; else: temp_s:=temp_s&temp_c; fi + endfor + temp_s +enddef; +%================================================================================================= +def proc_calc(expr n)= + begingroup + save knownA,tmp_wtp; + num_MW:=num_MI:=tbl_atom_max:=warning_cnt:=hideH_cnt:=0; + nE:=parts_emb_start; + for i=1 upto tbl_atom_end: sumA[i]:=0; endfor + for i=1 upto cntA: + knownA:=bond_cnt:=0; + nS:=numS[i]; + for j=1 upto cntB: + if (lineB[j]>=dl)and(lineB[j]<=dm_): bondC[j]:=2; + ef lineB[j]=tm: bondC[j]:=3; + ef (lineB[j]=vf)or(lineB[j]=vb): bondC[j]:=0; + ef lineB[j]=0: bondC[j]:=0; + else: bondC[j]:=1; + fi + if (sB[j]=i)or(eB[j]=i): bond_cnt:=bond_cnt+bondC[j]; fi + endfor + Bcnt[i]:=bond_cnt; + if ((nS=0)or(nS=(C-nE)))and(bond_cnt<4): + hideH[i]:=4-bond_cnt; hideH_cnt:=hideH_cnt+hideH[i]; else: hideH[i]:=0; + fi + if nS=0: if bond_cnt>4: warning_bond(i) fi + ef nS=(O-nE): if bond_cnt<>2: warning_bond(i) fi + ef nS=(N-nE): if (bond_cnt<>3)and(bond_cnt<>5): warning_bond(i) fi + ef nS=(S-nE): if (bond_cnt<>2)and(bond_cnt<>4)and(bond_cnt<>6): warning_bond(i) fi + ef nS=(H-nE): if bond_cnt<>1: warning_bond(i) fi + ef nS=(OH-nE): if bond_cnt<>1: warning_bond(i) fi + ef nS=(COOH-nE): if bond_cnt<>1: warning_bond(i) fi + ef nS=(NH2-nE): if bond_cnt<>1: warning_bond(i) fi + ef nS=(CN-nE): if bond_cnt<>1: warning_bond(i) fi + ef nS=(P-nE): if bond_cnt<>5: warning_bond(i) fi + ef nS=(C-nE): if bond_cnt>4: warning_bond(i) fi + ef nS=(F-nE): if bond_cnt<>1: warning_bond(i) fi + ef nS=(Cl-nE): if bond_cnt<>1: warning_bond(i) fi + ef nS=(Br-nE): if bond_cnt<>1: warning_bond(i) fi + fi + for j=1 upto tbl_group_end: + if strD[nS]=tbl_atom_str[j]: + if tbl_atom[j]=0: sumA[j]:=sumA[j]+1; if j>tbl_atom_max: tbl_atom_max:=j; fi + else: + for k=1 upto tbl_atom[j]: + sumA[tbl_group[j][k]]:=sumA[tbl_group[j][k]]+1; + if tbl_group[j][k]>tbl_atom_max: tbl_atom_max:=tbl_group[j][k]; fi + endfor + fi + knownA:=1; + fi + exitif knownA=1; + endfor + if knownA=0: warning(" Unknown Str("&strD[numS[i]]&") is used "&decimal(i)); fi + endfor + %------------------------------------------------------------------------------------- + sumA[2]:=sumA[2]+hideH_cnt; + if (tbl_atom_max=1)and(sumA[2]>0): tbl_atom_max:=2; fi + for i=1 upto tbl_atom_max: + if sumA[i]>=1: + num_MW:= num_MW+tbl_atom_wt[i]*sumA[i]; num_MI:= num_MI+tbl_atom_mi[i]*sumA[i]; + cal_FM:=cal_FM&erase_brace(tbl_atom_str[i]) if sumA[i]>=2: &decimal(sumA[i]) fi; + fi + endfor + cal_MW:=substring (0,8) of decimal(num_MW); cal_MI:=substring (0,10) of decimal(num_MI); + %--------------------------------------------------------------------------------------- + endgroup +enddef; +%================================================================================================= +def proc_info_out(expr f)= + message "["&decimal(char_num)&"]:"&inf_EN; + if (f=1)or(f=2): file_name_output:=jobname&"-info.aux"; + ef f=3: file_name_output:=jobname&"-data.aux"; + fi + %-------------------------------------------------------------------------------------- + if (char_num=1)and(f=2): + printf tag[1] for i=2 upto aux_max: exitif tag[i]=""; &aux_delimiter&tag[i] endfor ; + fi + %-------------------------------------------------------------------------------------- + for i=1 upto aux_max: exitif tag[i]=""; + if i=1: printf "" else: &aux_delimiter fi + if (f=1)or(f=3): &tag[i]&":" fi + %------------------------------------------- + if tag[i]="J": & jobname + ef tag[i]="C": & decimal(char_num) + ef tag[i]="mw": & cal_MW + ef tag[i]="fm": & cal_FM + ef tag[i]="mi": & cal_MI + ef tag[i]="w": & decimal(xpart(fsize)) + ef tag[i]="h": & decimal(ypart(fsize)) + ef tag[i]="w1": & decimal(mol_wd) + ef tag[i]="h1": & decimal(mol_ht) + ef tag[i]="An": & decimal(cntA) + ef tag[i]="Bn": & decimal(cntB) + ef tag[i]="mc": & mc + %------------------------------------------- + ef tag[i]="NO": & inf_NO + ef tag[i]="EN": & inf_EN + ef tag[i]="JN": & inf_JN + ef tag[i]="MW": & inf_MW + ef tag[i]="MI": & inf_MI + ef tag[i]="FM": & inf_FM + ef tag[i]="CAS": & inf_CAS + ef tag[i]="USE": & inf_USE + ef tag[i]="EXA": & inf_EXA + ef tag[i]="EXB": & inf_EXB + fi + endfor ; + if f=3: printf "+"; + for i=1 upto mc_row: printf (substring(0,mc_indent[i]) of blank_str)&mc[i]; endfor + printf "+-----------------------------------------------------------------------------"; + fi +enddef; +%================================================================================================= +def proc_report_out(expr f)= + message "["&decimal(char_num)&"]:"&inf_EN; + if f=1: file_name_output:="temp-report.aux"; + else: file_name_output:=jobname&"-report.txt"; + fi + printf "==========================================================================="; + printf " No."&fdr(4)(char_num)&" / Name = "& inf_EN&" / file = "& file_name_input; + if mc_row>=1: + printf "---------------------------------------------------------------------------"; + for i=1 upto mc_row: printf (substring(0,mc_indent[i]) of blank_str)&mc[i]; endfor + printf "---------------------------------------------------------------------------"; + printf " row="&fdr(3)(mc_row)&" / length="&fdr(4)(length(mc))& + " / commands="&fdr(3)(cnt_cmm); + printf " {}=X ="&fdr(3)(cnt_chg_bonds)&" / {}:X ="&fdr(3)(cnt_chg_atoms)& + " / '() ="&fdr(3)(cnt_inline_def)&" / @ ="&fdr(3)(cnt_at)& + " / & ="&fdr(3)(cnt_and)&" / < ="&fdr(3)(cnt_gtn); + fi + printf "---------------------------------------------------------------------------"; + printf " Warnings = "&fdr(3)(warning_cnt)&" / Code= "&decimal(cntD[0]); + printf " Width * Height = " & fdr(10)(mol_wd)&" * "&fdr(10)(mol_ht); + printf " Shift width * height = "& fdr(10)(minX)&" * "&fdr(10)(minY); + printf " Bond length = "&fdr(3)(blen)&" Atom size = "&fdr(3)(atom_wd); + printf " Atom count="&fdr(3)(cntA)&" Bond count="&fdr(3)(cntB)& + " Ring count="&fdr(3)(cntB-cntA+1)&" Hide H count="&fdr(3)(hideH_cnt); + printf "---------------------------------------------------------------------------"; + printf "< NO. >( x axis , y axis )"; + for i=1 upto cntA: + printf " A"&fdl(6)(i)&fsl(8)(erase_brace(strD[numS[i]]))& + " ("&fdr(10)(round_auto(xpart(posA[i])/blen))&" , "& + fdr(10)(round_auto(ypart(posA[i])/blen))&" ) "&fdr(4)(Bcnt[i])& + iif(hideH[i]>0,fdr(6)(hideH[i])," ") + if chargeA[i]<>0: &fdr(4)(chargeA[i]) fi; + endfor + printf "---------------------------------------------------------------------------"; + printf "< NO. >< bond (sdt)>"; + for i=1 upto cntB: + nC:=lenB[i]; if nC=_size_atom: nC:=ratio_atom_bond; elseif nC<0: nC:=-nC; fi + nB:=angB[i]; if nB>180: nB:=nB-360; fi + printf " B"&fdl(4)(i)&fdr(3)(sB[i])&" -> "&fdr(3)(eB[i])& + " ("&fdr(3)(bondC[i])&")"&fdr(8)(round_auto(angB[i]))& + " ("&fdr(6)(round_auto(nB))&")"&fdr(8)(nC)&" ("&fdr(8)(round_auto(nC*blen))&")"; + endfor + printf "---------------------------------------------------------------------------"; + printf "( atom wt )[ mi wt ] < cnt > < sum wt >[ sum mi wt ]"; + for i=1 upto tbl_atom_max: + if sumA[i]>=1: + nA:=tbl_atom_wt[i]/100*sumA[i]; nB:=tbl_atom_mi[i]/100*sumA[i]; + printf " "& + fsl(5)(erase_brace(tbl_atom_str[i]))& + "("&fdr(9)(tbl_atom_wt[i])&")"&"["&fdr(9)(tbl_atom_mi[i])&"]"&" * "&fdr(4)(sumA[i]) + if nA<40: &fdr(15)(tbl_atom_wt[i]*sumA[i])&"["&fdr(12)(tbl_atom_mi[i]*sumA[i])&"]"; + else: &fdr(11)(nA)&"*100"&"["&fdr(9)(nB)&"*100"&"]"; + fi + fi + endfor + printf " Molecular Weight [Mono Isotopic] = "&fsr(12)(cal_MW)&"["&fsr(12)(cal_MI)&"]"; + printf "---------------------------------------------------------------------------"; + printf " Weight Calc: " &cal_MW &" / Input: " + if inf_MW<>"-": &inf_MW &" / weight gap= " &decimal(num_MW-scantokens(inf_MW)) fi; + printf " Fomula Calc: "&cal_FM&" / Input: " + if inf_FM<>"-": &inf_FM&" / "& iif(inf_FM=cal_FM,"MACTCH","NOT MACTCH") fi; + printf "==========================================================================="; + if f=1: printf EOF; fi +enddef; +%------------------------------------------------------------------------------------------------- +vardef round_auto(expr n)= + if (n<4) and(n>-4): round(n*1000)/1000 elseif (n<40) and(n>-40): round(n*100)/100 + elseif (n<400)and(n>-400): round(n*10)/10 else: round(n) fi +enddef; +%================================================================================================= +def proc_mol_out(expr n)= + message "["&decimal(char_num)&"]:"&inf_EN; + file_name_output:=jobname&"-"&fit_zero(char_num)&"-"&erase_space(inf_EN)&".mol"; + %-V2000--------------------------------------------------------------------------------------- + if n=1: + printf ""; printf " -MCFtoMOL- "&fsl(20)(info[1]); printf ""; + printf fdr(3)(cntA)&fdr(3)(cntB)&" 0 0 0 0 0 0 0 0999 V2000"; + for i=1 upto cntA: + printf fdr(10)(xpart(posA[i])/blen)& fdr(10)(ypart(posA[i])/blen)&fdr(10)(0)&" "& + fsl(2)(erase_brace(strD[numS[i]]))&" 0"&fdr(3)(bond_charge(chargeA[i]))&" 0 0"; + endfor + for i=1 upto cntB: + if lineB[i]<>0: + printf fdr(3)(sB[i])&fdr(3)(eB[i])&fdr(3)(bond_type(lineB[i]))& + fdr(3)(bond_stereo(lineB[i]))&" 0 0"; + fi + endfor + printf "M END"; + %-V3000--------------------------------------------------------------------------------------- + elseif n=2: + printf ""; printf " -MCFtoMOL- "&fsl(20)(info[1]); printf ""; + printf " 0 0 0 0 0 999 V3000"; + printf "M V30 BEGIN CTAB"; + printf "M V30 COUNTS "&decimal(cntA)&" "&decimal(cntB)&" 0 0 0"; + printf "M V30 BEGIN ATOM"; + for i=1 upto cntA: + printf "M V30 "&decimal(i)&" "&erase_brace(strD[numS[i]])&" "& + decimal(xpart(posA[i])/blen)&" "&decimal(ypart(posA[i])/blen)&" 0 0" + if chargeA[i]<>0: &" CHG="&decimal(chargeA[i]) fi; + endfor + printf "M V30 END ATOM"; printf "M V30 BEGIN BOND"; + for i=1 upto cntB: + if lineB[i]<>0: + printf "M V30 "&decimal(i)&" "&decimal(bond_type(lineB[i]))& + " "&decimal(sB[i])&" "&decimal(eB[i]) + if bond_stereo(lineB[i])<>0: &" CFG="&decimal(bond_config(lineB[i])) fi; + fi + endfor + printf "M V30 END BOND"; printf "M V30 END CTAB"; printf "M END"; + fi +enddef; +%================================================================================================= +def proc_mc_out(expr f)= + message "["&decimal(char_num)&"]:"&inf_EN; + file_name_output:="temp-mc.aux"; + for i=1 upto mc_row: printf (substring(0,mc_indent[i]) of blank_str)&mc[i]; endfor + printf EOF; +enddef; +%================================================================================================= +vardef fit_zero(expr n)=if n<=9: "00" elseif n<=99: "0" else: "" fi &decimal(n) enddef; +%------------------------------------------------------------------------------------------------- +vardef bond_type(expr n)= + if (n=dl)or(n=dr)or(n=dm)or(n=db)or(n=dl_)or(n=dr_)or(n=dm_): 2 ef n=tm: 3 else: 1 fi enddef; +%------------------------------------------------------------------------------------------------- +vardef bond_charge(expr n)= if n=2: 1 ef n=1: 3 ef n=-1: 5 ef n=-2: 6 else: 0 fi enddef; +%------------------------------------------------------------------------------------------------- +vardef bond_stereo(expr n)= + if (n=wf)or(n=zb)or(n=bd): 1 ef (n=zf)or(n=wb)or(n=dt): 6 ef n=wv: 4 else: 0 fi enddef; +%------------------------------------------------------------------------------------------------- +vardef bond_config(expr n)= + if (n=wf)or(n=zb)or(n=bd): 1 ef (n=zf)or(n=wb)or(n=dt): 3 ef n=wv: 2 else: 0 fi enddef; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +vardef STa(expr ATOM,WT,MI)= + str_cnt:=str_cnt+1; tbl_cnt:=tbl_cnt+1; parts_cnt:=parts_cnt+1; + comD[parts_cnt][1]:=_set_atom; parD[parts_cnt][1]:=str_cnt; cntD[parts_cnt]:=1; + strD[str_cnt]:=tbl_atom_str[tbl_cnt]:=ATOM; + tbl_atom[tbl_cnt]:=0; + tbl_atom_wt[tbl_cnt]:=WT; tbl_atom_mi[tbl_cnt]:=MI; + parts_cnt +enddef; +%------------------------------------------------------------------------------------------------- +vardef STb(expr ATOM)(text TXT)= + str_cnt:=str_cnt+1; tbl_cnt:=tbl_cnt+1; parts_cnt:=parts_cnt+1; + comD[parts_cnt][1]:=_set_atom; parD[parts_cnt][1]:=str_cnt; cntD[parts_cnt]:=1; + strD[str_cnt]:=tbl_atom_str[tbl_cnt]:=ATOM; + tbl_atom[tbl_cnt]:=0; + for list=TXT: + tbl_atom[tbl_cnt]:=tbl_atom[tbl_cnt]+1; + tbl_group[tbl_cnt][tbl_atom[tbl_cnt]]:=list-parts_emb_start; + endfor + parts_cnt +enddef; +%================================================================================================= +parts_int:=parts_emi_start; +parts_cnt:=parts_emb_start; +%------------------------------------------------------------------------------------------------- +C:= STa("C" ,12.0107, 12.0000000); H:= STa("H" , 1.00794, 1.00782503223); +D:= STa("D" ,2.012, 2.01410177812); Ag:=STa("{Ag}",107.868, 106.905095); +Al:=STa("{Al}",26.9815, 26.98153853); As:=STa("{As}",74.9216, 74.92159457); +B:= STa("B" ,10.811, 11.00930536); Ba:=STa("{Ba}",137.33, 136.905816); +Bi:=STa("{Bi}",208.9804, 208.980338); Br:=STa("{Br}",79.904, 78.9183376); +Ca:=STa("{Ca}",40.078, 39.962590863); Cd:=STa("{Cd}",112.41, 110.904182); +Cl:=STa("{Cl}",35.453, 34.968852); Co:=STa("{Co}",58.933194, 58.93319429); +Cr:=STa("{Cr}",51.9961, 51.94050623); Cu:=STa("{Cu}",63.546, 62.92959772); +F:= STa("F" ,18.9984, 18.99840316273); Fe:=STa("{Fe}",55.845, 55.93493633); +Hg:=STa("{Hg}",200.59, 201.97064340); I:= STa("I" ,126.90447,126.9044719); +K:= STa("K" ,39.0983, 38.9637064864); Li:=STa("{Li}",6.941, 7.0160034366); +Mg:=STa("{Mg}",24.305, 23.985041697); Mn:=STa("{Mn}",54.938044, 54.93804391); +N:= STa("N" ,14.0067, 14.00307400443); Na:=STa("{Na}",22.98977, 22.9897692820); +Ni:=STa("{Ni}",58.693, 57.93534241); O:= STa("O" ,15.9994, 15.99491461957); +P:= STa("P" ,30.973762, 30.97376199842); Pb:= STa("Pb" ,207.2, 205.974455); +Pd:=STa("Pd" ,106.4, 107.905075); +S:= STa("S" ,32.065, 31.9720711744); Sb:= STa("Sb" ,121.75, 120.90381); +Se:=STa("{Se}",78.971, 79.9165218); Si:=STa("{Si}",28.0855, 27.97692653465); +Sn:=STa("{Sn}",118.71, 119.90220163); Ti:=STa("{Ti}",47.867, 47.94794198); +U:= STa("U", 238.0289, 238.05079); V:= STa("V", 50.9415, 50.943957); +W:= STa("W", 183.85, 181.948225); Zn:=STa("{Zn}",65.409, 63.92914201); +tbl_atom_end:=tbl_cnt; +%------------------------------------------------------------------------------------------------- +CH3:=STb("C{H_3_}")(C,H,H,H); CH2:=STb("C{H_3_}")(C,H,H); CN:=STb("CN")(C,N); OH:=STb("OH")(O,H); +COOH:=STb("COOH")(C,O,O,H); SH:= STb("SH")(S,H); CHO:=STb("CHO")(C,H,O); +NO:=STb("NO")(N,O); NO2:=STb("N{O_2_}")(N,O,O); NH2:=STb("N{H_2_}")(N,H,H); +SO2H:=STb("S{O_2_}H")(S,O,O,H); SO3H:=STb("S{O_3_}H")(S,O,O,O,H); +ONa:=STb("O{Na}")(O,Na); SO3Na:=STb("S{O_3_}{Na}")(S,O,O,O,Na); +%------------------------------------------------------------------------------------------------- +tbl_group_end:=tbl_cnt; +parts_atom_end:=parts_cnt; +%================================================================================================= +for i=3 upto 20: + ?[i]:='((_com,_len_ss),(_get_len,_ring_len),<((-180 DIV i)-90) + for j==2 upto i:: ,(360 DIV i) endfor,(_cyc_sB,1-i),(_com,_len_ee)); +endfor +Ph:=Ph1:='(?6,-2=dl,-4=dl,-6=dl); Ph2:='(?6,-1=dl,-3=dl,-5=dl); +for i=4,5,6: for j=2 upto i-2: ?[i][j]:='(); endfor endfor +for i=5,6,7,8: for j=11 upto 15: ?[i][j]:='(); endfor endfor +%------------------------------------------------------------------------------------------------- +!:=!1:='((_mk_bond,_arrange_ang)); !!:='(!~db); !!!:='(!~tm); +for i==2 upto 20: + ![i]:='((_com,_len_ss),(_get_len,_tmp_len),! for j==2 upto i::,! endfor ,(_com,_len_ee)); +endfor +Me:='(); Et:='(!); iPr:=?!:='(/_,!); ?!2:='(/_,!2); tBu:=??!:='(/_,/_^60,60); +!?:='(!,/_); !?!:='(!,/_,!); +n_:='((_set_add,a_minus)); p_:='((_set_add,a_plus)); +zero_wf:='(0~wf); zero_zf:='(0~zf); zero_dm:='(0~dm); zero_wv:='(0~wv); +%------------------------------------------------------------------------------------------------- +NH:='(N,/H~nl); N!:='(N,/_); N!2:='(N,/!); SO:='(S,//O); SOO:='(S,//O^-35,//O^35); +O!:='(O,!); O!2:='(O,!,!); O!3:='(O,!,!,!); O!?!:='(O,!,?!); O!??!:='(O,!,??!); OPh:='(O,!,Ph); +S!:='(S,!); S!2:='(S,!,!); S!3:='(S,!,!,!); S!?!:='(S,!,?!); S!??!:='(S,!,??!); +%------------------------------------------------------------------------------------------------- +COO:='(//O,!,O); COO!:='(COO,!); COO!2:='(COO,!,!); COO!??:='(COO,!,?!); COO!3:='(COO,!,!,!); +CO!:='(//O,!); CO!2:='(//O,!,!); CO!3:='(//O,!,!,!); OCO!:='(O,!,//O,!); +N?!:='(N,!,@-2,0); N?!2:='(N!,!,!); NH!:='(NH,!); NH!2:='(NH,!,!); NH!3:='(NH,!,!,!); +NH!?!:='(NH,!,?!); NHCO!:='(NH,!,//O,!); CONH2:='(//O,!,NH2); ??:='(/_^35,/_^-35); +%------------------------------------------------------------------------------------------------- +!OH:='(!,OH); !SH:='(!,SH); !NH2:='(!,NH2); !CO!:='(!,//O,!); !CO!2:='(!,CO!2); !CO!3:='(!,CO!3); +!O!:='(!,O!); !O!2:='(!,O!2); !O!3:='(!,O!3); !S!:='(!,S!); !S!2:='(!,S!2); !S!3:='(!,S!3); +!NH!:='(!,NH!); !NH!2:='(!,NH!2); !NH!3:='(!,NH!3); +!COOH:='(!,COOH); !COO!:='(!,COO!); !COO!2:='(!,COO!2); !CH3:='(!,CH3); !CN:='(!,CN); +!CHO:='(!,CHO); !NO2:='(!,NO2); !Cl:='(!,Cl); !Br:='(!,Br); !F:='(!,F); +!?3:='(!,?3); !?4:='(!,?4); !?5:='(!,?5); !?6:='(!,?6); !?7:='(!,?7); !?8:='(!,?8); !Ph:='(!,Ph); +%------------------------------------------------------------------------------------------------- +CF2:='(/F,60,F); CCl2:='(/Cl,60,Cl); CBr2:='(/Br,60,Br); +CF3:='(/F,/F^60,60,F); CCl3:='(/Cl,/Cl^60,60,Cl); CBr3:='(/Br,/Br^60,60,Br); +%------------------------------------------------------------------------------------------------- +lr:='(0,0,0,60 for i==1 upto 10:: ,-60,60 endfor); +rl:='(0,0,0,-60 for i==1 upto 10:: ,60,-60 endfor); +%------------------------------------------------------------------------------------------------- +R:='("R"); R1:='("{R^1^}"); R2:='("{R^2^}"); R3:='("{R^3^}"); R4:='("R^4^"); R5:='("{R^5^}"); +R6:='("R6"); R7:='("{R^7^}"); R8:='("{R^8^}"); R9:='("{R^9^}"); R10:='("R^10^"); R11:='("{R^11^}"); +%------------------------------------------------------------------------------------------------- +hexose_hp:='(#1.4,-30~wf_r,30~bd_r`1,30~wb_r,120,O,30,&1,##); +Pyranose_hp:='(#1.4,-35~wf_r,35~bd_r`1,30~wb_r,130`1.66,O,&1,##); +%------------------------------------------------------------------------------------------------- +xCH3:='(/H,/H^60,/H^-60); xNH:='(N,/H); xNH2:='(N,/H^60,/H^-60); xNO2:='(N,//O^60,//O^-60); +xOH:='(O,/H); xNO:='(N,//O); xSO2H:='(S,//O^60,/OH^-60); xSO3H:='(S,/OH,//O^60,//O^-60); +xCHO:='(//O^-60,/H^60); xCOOH:='(//O^-60,/xOH^60); xCN:='(/N~tm); xSH:='(S,/H); +!xOH:='(!,xOH); !xCHO:='(!,xCHO); !xCOOH:='(!,xCOOH); !xCH3:='(!,xCH3); !xCN:='(!,xCN); +!xNH2:='(!,xNH2); !xNO2:='(!,xNO2); !xSH:='(!,xSH); +%================================================================================================= +init_par(parameter_list); +%------------------------------------------------------------------------------------------------- +%%%%message "parts_emb =" & decimal(parts_emb_start) &" => " & decimal(parts_cnt); +%%%%message "parts_emi =" & decimal(parts_emi_start) &" => " & decimal(parts_int); +%------------------------------------------------------------------------------------------------- +def expand_set= + CH3:=xCH3; NH:=xNH; NH2:=xNH2; NO:=xNO; NO2:=xNO2; OH:=xOH; CHO:=xCHO; COOH:=xCOOH; CN:=xCN; + SH:=xSH; SO2H:=xSO2H; SO3H:=xSO3H; !SH:=!xSH; + !CH3:=!xCH3; !OH:=!xOH; !NH2:=!xNH2; !CHO:=!xCHO; !COOH:=!xCOOH; !CN:=!xCN; !NO2:=!xNO2; +enddef; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +vardef check(expr s)= + save mc_char,mc_char,temp_c,err_cnt,char_cnt,f_depth, + cnt_prn_s,cnt_prn_e,cnt_brc_s,cnt_brc_e,cnt_brk_s,cnt_brk_e; + string temp_c,err_str[],err_type[]; + numeric mc_char[],err_adr[],err_code[]; + err_cnt:=char_cnt:=code_cnt:=f_depth:=cnt_cmm:=cnt_chg_atoms:=cnt_chg_bonds:=0; + err_type[0]:="no mc-row "; + err_type[1]:=" '(' > ')' "; err_type[2]:=" '(' < ')' "; + err_type[3]:=" '{' > '}' "; err_type[4]:=" '{' < '}' "; + err_type[5]:=" '[' > ']' "; err_type[6]:=" '[' < ']' "; + err_type[7]:="missing arg"; err_type[8]:="extra arg "; + %--------------------------------------------------------------------------------------------- + if mc_row>=1: + %--------------------------------------------------------------------------------------------- + for i=1 upto length(s): + temp_c:=subc(i,s); + if temp_c<>" ": char_cnt:=char_cnt+1; mc_char[char_cnt]:=ASCII(temp_c); fi + endfor + mc_char[0]:=mc_char[char_cnt+1]:=mc_char[char_cnt+2]:=a_cmm; + %-- argument missing chkeck ---------------------------------------------------------------- + cnt_prn_s:=cnt_prn_e:=cnt_brc_s:=cnt_brc_e:=cnt_brk_s:=cnt_brk_e:=cnt_inline_def:=cnt_at:=0; + cnt_cmm:=cnt_and:=cnt_gtn:=cnt_gtn:=nA:=f_depth:=0; + forever: + nA:=nA+1; nB:=mc_char[nA-1]; nC:=mc_char[nA]; nD:=mc_char[nA+1]; + %----------------------------------------------------------------------------------------- + if nC=a_cmm: if f_depth=0: cnt_cmm:=cnt_cmm+1; cmm_adr[cnt_cmm]:=nA; fi + ef nC=a_ast: + if nD=a_sls: + if mc_char[nA+2]=a_ast: if mc_char[nA+3]=a_cmm: proc_err(7,nA) nA:=nA+2; fi % */* x + ef mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi % */ x + ef nD=a_ast: if mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi fi % ** x + ef nC=a_sls: if nD=a_sls: if mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi % // x + ef nD=a_ast: if mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi % /* x + ef nD=a_cmm: proc_err(7,nA) fi % / x + ef nC=a_hsh: if nD=a_hsh: nA:=nA+1; % ## + ef nD=a_cmm: proc_err(7,nA) fi % # x + if nB<>a_cmm: proc_err(8,nA) fi % a # + ef nC=a_dol: if nD=a_cmm: proc_err(7,nA) fi % $ x + ef nC=a_equ: if nD= a_cmm: proc_err(7,nA) fi % = x + if nB= a_cmm: proc_err(7,nA) fi % x = + ef nC=a_cln: if nD= a_cmm: proc_err(7,nA) fi % : x + if nB= a_cmm: proc_err(7,nA) fi % x : + ef nC=a_amk: cnt_at:=cnt_at+1; + if nD= a_cmm: proc_err(7,nA) fi % @ x + if nB<>a_cmm: proc_err(8,nA) fi % a @ + ef nC=a_and: cnt_and:=cnt_and+1; + if nD= a_cmm: proc_err(7,nA) fi % & x + if nB<>a_cmm: proc_err(8,nA) fi % a & + ef nC=a_gtn: cnt_gtn:=cnt_gtn+1; + ef nC=a_ltn: if nD= a_cmm: proc_err(7,nA) fi % > x + if nB= a_cmm: proc_err(7,nA) fi % x > + ef nC=a_tld: if nD= a_cmm: proc_err(7,nA) fi % ~ x + if nB= a_cmm: proc_err(7,nA) fi % x ~ + ef nC=a_hat: if nD= a_cmm: proc_err(7,nA) fi % ^ x + if nB= a_cmm: proc_err(7,nA) fi % x ^ + ef nC=a_bqt: if nD= a_cmm: proc_err(7,nA) fi % ` x + if nB= a_cmm: proc_err(7,nA) fi % x ` + ef nC=a_bar: if nD= a_bar: + if mc_char[nA+2]=a_bar: nA:=nA+1; % || + ef mc_char[nA+2]<>a_cmm: proc_err(8,nA) % | a + fi + if nB<>a_cmm: proc_err(8,nA) fi % a | + fi + %------------------------------------------------------------------------------------------ + ef nC=a_prn_s: if nD= a_cmm: proc_err(7,nA) fi % ( x + cnt_prn_s:=cnt_prn_s+1; f_depth:=1; + if nB=a_qut: cnt_inline_def:=cnt_inline_def+1; fi + ef nC=a_prn_e: cnt_prn_e:=cnt_prn_e+1; f_depth:=0; + ef nC=a_brc_s: if nD= a_cmm: proc_err(7,nA) fi % { x + cnt_brc_s:=cnt_brc_s+1; f_depth:=1; + ef nC=a_brc_e: if nD= a_cmm: proc_err(7,nA) fi % } x + cnt_brc_e:=cnt_brc_e+1; f_depth:=0; + if nD=a_cln: cnt_chg_atoms:=cnt_chg_atoms+1; + ef nD=a_equ: cnt_chg_bonds:=cnt_chg_bonds+1; + fi + ef nC=a_brk_s: if nD= a_cmm: proc_err(7,nA) fi % [ x + cnt_brk_s:=cnt_brk_s+1; f_depth:=1; + ef nC=a_brk_e: if nB= a_cmm: proc_err(7,nA) fi % x ] + cnt_brk_e:=cnt_brk_e+1; f_depth:=0; + %------------------------------------------------------------------------------------------- + fi + exitif nA>=char_cnt+1; + endfor + %-- brackets balance check ------------------------------------------------------------------- + if cnt_prn_s>cnt_prn_e: proc_err(1,0) ef cnt_prn_scnt_brc_e: proc_err(3,0) ef cnt_brc_scnt_brk_e: proc_err(5,0) ef cnt_brk_s0: readstring; + %--------------------------------------------------------------------------------------------- + err_cnt +enddef; +%------------------------------------------------------------------------------------------------- +def proc_err(expr ERR_CODE,ADR)= + err_cnt:=err_cnt+1; err_adr[err_cnt]:=ADR; err_code[err_cnt]:=ERR_CODE; + if ERR_CODE<=6: err_str[err_cnt]:=" "; + else: err_str[err_cnt]:=substring (ADR-3,ADR+2) of mc; + fi +enddef; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +def query(text s)= + begingroup + save file_name,f_mcf,f_line,unit_row,unit_cnt,line_s,unit_row_cnt,mc_row,line_cnt, + semicol_cnt,info_cnt,info_s,filter_n,order,min_s,min_n,par_cnt,key_cnt,var_n,info_s, + sign_at,sign_n,filter_tag,filter_var,filter_sign,filter_cnt,filter_p,temp_s,par_s, + at_colon,at_equal,at_less,at_greater,at_n,info_cnt; + string line_s[][],sort_s[],par_s[],sort_all[],key_s[],filter_s[],filter_tag[],filter_var[], + info_s[],file_name_input,temp_s,min_s; + numeric unit_row_cnt[],order[],order_tbl[],filter_sign[],filter_p[]; + unit_row:=f_mcf:=mc_row:=line_cnt:=info_cnt:=par_cnt:=key_cnt:=filter_cnt:=0; + unit_cnt:=1; + %----------------------------------------------------------------------------------------------- + file_name_input:=default_data_file; + file_name_output:=default_temp_file; + %----------------------------------------------------------------------------------------------- + for list=s: + at_colon:=scan_char(":",list,0,1); + at_equal:=scan_char("=",list,0,1); + at_less:=scan_char("<",list,0,1); + at_greater:=scan_char(">",list,0,1); + %--------------------------------------------------------------------------------------------- + if at_colon>=2: sign_at:=at_colon; sign_n:=0; at_n:=1; + ef at_equal>=2: if (at_equal-1)=at_less: sign_at:=at_equal; sign_n:=5; at_n:=2; + ef (at_equal-1)=at_greater: sign_at:=at_equal; sign_n:=6; at_n:=2; + else: sign_at:=at_equal; sign_n:=1; at_n:=1; fi + ef at_greater>=2: if (at_greater-1)=at_less: sign_at:=at_greater; sign_n:=2; at_n:=2; + else: sign_at:=at_greater; sign_n:=4; at_n:=1; fi + ef at_less>=2: sign_at:=at_less; sign_n:=3; at_n:=1; + fi + tag_s:=substring (0,sign_at-at_n) of list; + var_s:=substring (sign_at,length(list)) of list; + %--------------------------------------------------------------------------------------------- + if sign_n=0: + if tag_s="f": + if scan_char(".",var_s,0,1)=0: file_name_input:=var_s&".mcf"; + else: file_name_input:=var_s; + fi + ef tag_s="o": + if scan_char(".",var_s,0,1)=0: file_name_output:=var_s&".aux"; + else: file_name_output:=var_s; + fi + ef tag_s="s": key_cnt:=key_cnt+1; key_s[key_cnt]:=var_s; + fi + %--------------------------------------------------------------------------------------------- + else: + filter_cnt:=filter_cnt+1; + filter_tag[filter_cnt]:=tag_s; + filter_sign[filter_cnt]:=sign_n; + if (sign_n>=3)and(is_num(var_s)=1): filter_var[filter_cnt]:=fix_num(var_s); + else: filter_var[filter_cnt]:=var_s; + fi + fi + endfor + %----------------------------------------------------------------------------------------------- + forever: + temps:=readfrom file_name_input; exitif temps=EOF; + if subc(1,temps)<>"%": + line_cnt:=line_cnt+1; unit_row:=unit_row+1; + line_s[unit_cnt][unit_row]:=temps; + if (subc(1,temps)="+")and(subc(2,temps)<>"-"): f_mcf:=1; mc_row:=1; + ef (subc(1,temps)="+")and(subc(2,temps)="-"): + unit_row_cnt[unit_cnt]:=unit_row; + f_mcf:=unit_row:=0; + filter_n:=1; + for i=1 upto filter_cnt: filter_p[i]:=0; endfor + for i=1 upto key_cnt: sort_s[i]:=""; endfor + %--------------------------------------------------------------------------------------- + for i=1 upto info_cnt: + at_colon:=scan_char(":",info_s[i],0,1); + tag_s:=substring (0,at_colon-1) of info_s[i]; + var_s:=substring (at_colon,length(info_s[i])) of info_s[i]; + %------------------------------------------------------------------------------------- + for j=1 upto key_cnt: + if key_s[j]=tag_s: + if is_num(var_s)=1: sort_s[j]:=fix_num(var_s); else: sort_s[j]:=var_s; fi + fi + endfor + %------------------------------------------------------------------------------------- + for j=1 upto filter_cnt: + if filter_tag[j]=tag_s: + filter_p[j]:=1; + if (filter_sign[j]>=3)and(is_num(var_s)=1): temp_s:=fix_num(var_s); + else: temp_s:=var_s; + fi + if filter_sign[j]=1: if not(temp_s= filter_var[j]): filter_n:=0; fi + ef filter_sign[j]=2: if not(temp_s<>filter_var[j]): filter_n:=0; fi + ef filter_sign[j]=3: if not(temp_s< filter_var[j]): filter_n:=0; fi + ef filter_sign[j]=4: if not(temp_s> filter_var[j]): filter_n:=0; fi + ef filter_sign[j]=5: if not(temp_s<=filter_var[j]): filter_n:=0; fi + ef filter_sign[j]=6: if not(temp_s>=filter_var[j]): filter_n:=0; fi + fi + fi + endfor + endfor + for i=1 upto filter_cnt: if filter_p[i]=0: filter_n:=0; fi endfor + %------------------------------------------------------------------------------------- + sort_all[unit_cnt]:=""; + for j=1 upto key_cnt: + if j=key_cnt: sort_all[unit_cnt]:=sort_all[unit_cnt]&sort_s[j]; + else: sort_all[unit_cnt]:=fix_str(15,sort_s[1]); + fi + endfor + %------------------------------------------------------------------------------------- + info_cnt:=0; + if filter_n=1: unit_cnt:=unit_cnt+1; fi + %------------------------------------------------------------------------------------- + ef (subc(1,temps)<>"+")and(subc(1,temps)<>"%"): + if f_mcf=1: mc_row:=mc_row+1; + else: + semicol_cnt:=count_semicol(temps); + for i=1 upto semicol_cnt+1: + info_cnt:=info_cnt+1; + if i<=semicol_cnt: + info_s[info_cnt]:=substring (at_semicol[i-1],at_semicol[i]-1) of temps; + else: + info_s[info_cnt]:=substring (at_semicol[semicol_cnt],length(temps)) of temps; + fi + endfor + fi + fi + fi + endfor + %============================================================================================= + unit_cnt:=unit_cnt-1; + %--------------------------------------------------------------------------------------------- + if key_cnt>=1: + for i=1 upto unit_cnt: order[i]:=0; endfor + for i=1 upto unit_cnt: min_s:="~"; + for j=1 upto unit_cnt: + if order[j]=0: if sort_all[j]n: temp_s:=substring(0,n) of s; + fi + temp_s +enddef; +%--------------------------------------------------------------------------------------------- +vardef fix_num(expr s)= + save temp_s,at_dot; + string temp_s; + temp_s:=s; + at_dot:=scan_char(".",temp_s,0,1); + if at_dot=0: temp_s:=fsr(4)(temp_s); ef at_dot=1: temp_s:=" 0"&temp_s; + ef at_dot=2: temp_s:=" "&temp_s; ef at_dot=3: temp_s:=" "&temp_s; + ef at_dot=4: temp_s:=" "&temp_s; + fi + temp_s +enddef; +%--------------------------------------------------------------------------------------------- +vardef is_num(expr s)= + save numeric_n; + numeric_n:=1; + for i=1 upto length(s): + if ((subc(i,s)>="0")and(subc(i,s)<="9"))or(subc(i,s)="."): else: numeric_n:=0; fi + endfor + numeric_n +enddef; +%------------------------------------------------------------------------------------------------- +vardef count_semicol(expr s)= + save nS; + nS:=at_semicol[0]:=0; + for i=1 upto length(s): if subc(i,s)=";": nS:=nS+1; at_semicol[nS]:=i; fi endfor + nS +enddef; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/graphics/mcf2graph/mcf_data_base.mcf b/graphics/mcf2graph/mcf_data_base.mcf index 40dfc81af3..6c7897a6ff 100644 --- a/graphics/mcf2graph/mcf_data_base.mcf +++ b/graphics/mcf2graph/mcf_data_base.mcf @@ -1,5 +1,5 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% molecular data base file mcf_data_base.mcf by Akira Yamaji 2022.01.02 +% molecular data base file mcf_data_base.mcf by Akira Yamaji 2022.01.17 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % tag1:var1;tag2:var2;tag3:var3 ..... % first character of line "%" comment out @@ -422,8 +422,8 @@ Cat:biological;EN:Cromolyn;MW:468.37;EXA:1 +------------------------------------------------------------------------------ Cat:biological;EN:Emetine;MW:480.649;EXA:1 + -<30,Ph,{-4,-4}=?6,8:N,{1,6}:/O!,-2:/*!,{7^-60,12^-60}:/*H, - @-3,\,!~zb,<-60,|,?6,5=dl,2:NH,-6^-60:*/H,|,-2=?6,{2,4}=dl,{-2,-3}:/O! +<30,Ph,{-4,-4}=?6,8:N,{1,6}:/O!,-2:/*!,{7^-60,12^-60}:/*H, + @-3,\,!~zb,<-60,|,?6,5=dl,2:NH,-6^-60:*/H,|,-2=?6,{2,4}=dl,{-2,-3}:/O! +------------------------------------------------------------------------------ Cat:biological;EN:Acronycine;MW:321.376;EXA:1 + @@ -490,7 +490,7 @@ Cat:biological;EN:Pyrethrin I;MW:328.452;EXA:1 +------------------------------------------------------------------------------ Cat:biological;EN:Oseltamivir;MW:312.40;EXA:1 + -<30,?6,3=dl,6:*/NH2,@1,\*,NH,!,//O,!,@2,*\,O,!?,!2,@4,\,//O,!,O,!2 +<30,?6,3=dl,6:*/NH2,@1,\*,NH,!,//O,!,@2,*\,O,!,/!,!2,@4,\,//O,!,O,!2 +------------------------------------------------------------------------------ Cat:biological;EN:Paclitaxel;MW:853.918;EXA:1 + @@ -559,6 +559,58 @@ Cat:biological;EN:Aflatoxin B1;MW:312.27;EXA:1 <30,Ph,6=?6,-2=?5,4=?5,-2=?5,{-2,10}=dl,{7,14,17}:O, 2:/O!,{8,11}://O,{15^-54,16^54}:*/H +------------------------------------------------------------------------------ +Cat:biological;EN:Aflatoxin B2;MW:314.3;EXA:- ++ +<30,Ph,6=?6,-2=?5,4=?5,-2=?5,10=dl,{7,14,17}:O, + 2:/O!,{8,11}://O,{15^-54,16^54}:*/H ++------------------------------------------------------------------------------ +Cat:biological;EN:Aflatoxin G1;MW:328.27;EXA:- ++ +<30,Ph,6=?6,-2=?6,4=?5,-2=?5,{-2,10}=dl,{7,12,15,18}:O, + 2:/O!,{8,11}://O,{16^-54,17^54}:*/H ++------------------------------------------------------------------------------ +Cat:biological;EN:Aflatoxin G2;MW:330.29;EXA:- ++ +<30,Ph,6=?6,-2=?6,4=?5,-2=?5,10=dl,{7,12,15,18}:O, + 2:/O!,{8,11}://O,{16^-54,17^54}:*/H ++------------------------------------------------------------------------------ +Cat:biological;EN:Aflatoxin M1;MW:328.3;EXA:- ++ +<30,Ph,6=?6,-2=?5,4=?5,-2=?5,{-2,10}=dl,{7,14,17}:O, + 2:/O!,{8,11}://O,15^-54:*/H,16^54:*/OH ++------------------------------------------------------------------------------ +Cat:biological;EN:Aflatoxin M2;MW:330.29;EXA:- ++ +<30,Ph,6=?6,-2=?5,4=?5,-2=?5,10=dl,{7,14,17}:O, + 2:/O!,{8,11}://O,15^-54:*/H,16^54:*/OH ++------------------------------------------------------------------------------ +Cat:biological;EN:Ochratoxin A;MW:403.813;EXA:1 ++ +<30,Ph,@4,\,!,/*COOH,!`1.2,NH,!`1.2,//O,!, + Ph,-2:/Cl,-5:/OH,-4=?6,-3:O,-2:*/_,-4://O ++------------------------------------------------------------------------------ +Cat:biological;EN:Deoxynivalenol;MW:296.32;EXA:1 ++ +<30,?6,3=?6,5=dl,1://O,6:/_,-1:O,{4'^60,-2}:*/H,7^30:*/_,@7,72`.9,80`1.3,&9, + @8,?3,-3=wf_,-1=si_,-1:O,{2,12^18}:/*OH,3:/*!OH^-60`1 ++------------------------------------------------------------------------------ +Cat:biological;EN:Patulin;MW:154.12;EXA:1 ++ +<30,?6,3=?5,{2,10}=dl,{6,7}:O,5:/OH,8://O ++------------------------------------------------------------------------------ +Cat:biological;EN:Citrinin;MW:250.247;EXA:1 ++ +<30,?6,3=?6,{2,5,11}=dl,9:O,1://O,2:/_,{7,8'}:*/_,5:/OH,6:/COOH ++------------------------------------------------------------------------------ +Cat:biological;EN:Zearalenone;MW:318.364;EXA:1 ++ +<30,Ph,@3,#1,\,!5,60,60,!4,&4,##,{1,5,8}=dl,17:O,16:*/_,{1,5}:/OH,{12,18}://O ++------------------------------------------------------------------------------ +Cat:biological;EN:Fumonisin B1;MW:721.83;EXA:1 ++ +<30,!19,@6,*\,O,!,//O,!2,/COOH,!2,COOH,@7,\*`1.2,O,!,//O,!2,/COOH,!2,COOH, + {5,9}:/*_,{11,16,18'}:*/OH,19:/*NH2 ++------------------------------------------------------------------------------ %============================================================================== Cat:synthetic;EN:Benzene;MW:78.11;EXA:- + @@ -1959,11 +2011,11 @@ Cat:pesticide;EN:Lufenuron;MW:511.15;EXA:- @3,\,//O,!,NH,!,//O,!,NH,!,Ph,{-1,-4}:/Cl,@-3,\,O,!,/F^35,/F^-35,!,/F,!,CF3 +------------------------------------------------------------------------------ %****************************************************************************** -Cat:antibacterial;EN:Sulfacetamide;MW:214.239;EXA:1 +Cat:antibacterial;EN:Sulfacetamide;MW:214.239;EXA:- + <30,Ph,1:/NH2,@4,\,SOO,!,NH,!,//O,! +------------------------------------------------------------------------------ -Cat:antibacterial;EN:Sulfatiazole;MW:255.31;EXA:1 +Cat:antibacterial;EN:Sulfatiazole;MW:255.31;EXA:- + <30,Ph,1:/NH2,@4,\,SOO,!,NH,!,|,?5,{1,3}=dl,2:N,5:S +------------------------------------------------------------------------------ @@ -1992,7 +2044,7 @@ Cat:antibacterial;EN:Marbofloxacin;MW:362.361;EXA:1 <30,Ph,{3,(2,7)}=?6,9=dl,6:/F,{7,13}:N,11:O,9:/COOH,10://O,13:/_, @1,\,|,?6,{1,4}:N,4:/_ +------------------------------------------------------------------------------ -Cat:antibacterial;EN:Sulfamerazine;MW:264.303;EXA:1 +Cat:antibacterial;EN:Sulfamerazine;MW:264.303;EXA:- + <30,Ph,1:/NH2,@4,\,SOO,!,NH,!,|,Ph,{2,6}:N,3:/_ +------------------------------------------------------------------------------ @@ -2005,7 +2057,7 @@ Cat:antibacterial;EN:Ofloxacin;MW:361.373;EXA:1 <30,Ph,{3,(2,7)}=?6,9=dl,7:N,11:O, 6:/F,9:/COOH,10://O,13:/_,@1,\,|,?6,{1,4}:N,4:/_ +------------------------------------------------------------------------------ -Cat:antibacterial;EN:Ciprofloxacin;MW:331.347;EXA:1 +Cat:antibacterial;EN:Ciprofloxacin;MW:331.347;EXA:- + <30,Ph,-4=?6,9=dl,7:N,6:/F,7:/?3,9:/COOH,10://O,@1,\,|,?6,1:N,4:NH +------------------------------------------------------------------------------ @@ -2022,7 +2074,7 @@ Cat:antibacterial;EN:Ormetoprim;MW:274.324;EXA:1 + <30,Ph,{1,5}:N,{2,6}:/NH2,@3,\,!,|,Ph,2:/_,{4,5}:/O! +------------------------------------------------------------------------------ -Cat:antibacterial;EN:Sulfadimidine;MW:278.33;EXA:1 +Cat:antibacterial;EN:Sulfadimidine;MW:278.33;EXA:- + <30,Ph,1:/NH2,@4,\,SOO,!,NH,!,|,Ph,{2,4}:N,{3,5}:/_ +------------------------------------------------------------------------------ @@ -2035,7 +2087,7 @@ Cat:antibacterial;EN:Sulfamethoxypyridazine;MW:280.302;EXA:- + <30,Ph,1:/NH2,@4,\,SOO,!,NH,!,|,Ph,{5,6}:N,4:/O! +------------------------------------------------------------------------------ -Cat:antibacterial;EN:Sarafloxacin;MW:385.371;EXA:1 +Cat:antibacterial;EN:Sarafloxacin;MW:385.371;EXA:- + <30,Ph,3=?6,9=dl,7:N,6:/F,9:/COOH,10://O,@1,\,?6,-6:N,-3:NH,@7,\,Ph,-3:/F +------------------------------------------------------------------------------ diff --git a/graphics/mcf2graph/mcf_exa_soc.mf b/graphics/mcf2graph/mcf_exa_soc.mf deleted file mode 100644 index 550589d530..0000000000 --- a/graphics/mcf2graph/mcf_exa_soc.mf +++ /dev/null @@ -1,43 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Molecular Coding Format for mcf_example.tex by Akira Yamaji 2022.01.02 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -input mcf2graph.mf; %%% it must be version 4.77 -message "* mcf_exa_soc 2022.01.02"; -message ""; -%------------------------------------------------------------------------------ -fsize:=(35mm,24mm); -max_blength:=4mm; -%%%%sw_frame:=Outside; -%%%%sw_numbering:=Bond; -%%%%sw_numbering:=Atom; -tag1:="J"; tag2:="C"; tag3:="fm"; tag4:="mw"; tag5:="EN"; tag6:="MW"; -%------------------------------------------------------------------------------ -%% outputformat:="png"; hppp:=vppp:=0.1; outputtemplate:="%j-%3c.png"; -%------------------------------------------------------------------------------ -%%%%ext(defaultfont:="uhvr8r"; defaultscale:=.3; label.rt(inf_EN,(0,0));) -%------------------------------------------------------------------------------ -%sw_output:=Font+Info; -%ext(defaultfont:="uhvr8r"; defaultscale:=.3; -%label.rt(inf_EN&" / "&cal_MW&" / "&decimal(num_MW-scantokens(inf_MW)),(0,0));) -%------------------------------------------------------------------------------ -if f_MP=0: input mcf_exa_soc-mf.aux; % (metafont) make aux file before typeset -else: % mpost -s ahlength=7 mcf_exa_soc.mf -%------------------------------------------------------------------------------ -%%%%query("Cat=biological","MW<200","s:MW"); -%%%%query("Cat=biological","MW<150.0","s:EN"); -%%%%query("MW>=150","MW<=250","s:MW"); -%****************************************************************************** -%%%% beginfont("t:EN","v:Caffeine") % select EN=Caffeine -forever: -%%%% beginfont("f:mcf_data_base","v+:*") % 'mcf_data_base.mcf'(default) -%%%% beginfont("f:temp","v+:*") % use query output -%%%% beginfont("v+:*") % select all - beginfont("t:EXA","v+:1") % 'v+:1': select EXA=1 - if f_EOF=0: if check(mc)=0: MC(scantokens(mc)) fi fi - endfont - exitif f_EOF=1; % exit if file end -endfor -%****************************************************************************** -fi -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -bye diff --git a/graphics/mcf2graph/mcf_exa_soc.mp b/graphics/mcf2graph/mcf_exa_soc.mp new file mode 100644 index 0000000000..9465d835bc --- /dev/null +++ b/graphics/mcf2graph/mcf_exa_soc.mp @@ -0,0 +1,39 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Molecular Coding Format by Akira Yamaji 2022.01.17 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +input mcf2graph.mp; %%% it must be version 4.78 +message "* mcf_exa_soc 2022.01.17"; +message ""; +%------------------------------------------------------------------------------ +fsize:=(35mm,24mm); +max_blength:=4mm; +%%%%sw_frame:=Outside; +%%%%sw_numbering:=Bond; +%%%%sw_numbering:=Atom; +tag1:="J"; tag2:="C"; tag3:="fm"; tag4:="mw"; tag5:="EN"; tag6:="MW"; +%------------------------------------------------------------------------------ +%% outputformat:="png"; hppp:=vppp:=0.1; outputtemplate:="%j-%3c.png"; +%------------------------------------------------------------------------------ +%%%%ext(defaultfont:=mpfont; defaultscale:=.3; label.rt(inf_EN,(0,0));) +%------------------------------------------------------------------------------ +%sw_output:=Font+Info; +%ext(defaultfont:=mpfont; defaultscale:=.3; +%label.rt(inf_EN&" / "&cal_MW&" / "&decimal(num_MW-scantokens(inf_MW)),(0,0));) +%------------------------------------------------------------------------------ +%%%%query("Cat=biological","MW<200","s:MW"); +%%%%query("Cat=biological","MW<150.0","s:EN"); +%%%%query("MW>=150","MW<=250","s:MW"); +%****************************************************************************** +%%%% beginfigm("t:EN","v:Caffeine") % select EN=Caffeine +forever: +%%%% beginfigm("f:mcf_data_base","v+:*") % 'mcf_data_base.mcf'(default) +%%%% beginfigm("f:temp","v+:*") % use query output +%%%% beginfigm("v+:*") % select all + beginfigm("t:EXA","v+:1") % 'v+:1': select EXA=1 + if f_EOF=0: if check(mc)=0: MC(scantokens(mc)) fi fi + endfigm + exitif f_EOF=1; % exit if file end +endfor +%****************************************************************************** +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +bye diff --git a/graphics/mcf2graph/mcf_example.pdf b/graphics/mcf2graph/mcf_example.pdf index 32af758ce5..15186cb82e 100644 Binary files a/graphics/mcf2graph/mcf_example.pdf and b/graphics/mcf2graph/mcf_example.pdf differ diff --git a/graphics/mcf2graph/mcf_example.tex b/graphics/mcf2graph/mcf_example.tex index 70da8707d5..c07aa1aa1c 100644 --- a/graphics/mcf2graph/mcf_example.tex +++ b/graphics/mcf2graph/mcf_example.tex @@ -1,77 +1,85 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Example of MCF typeset by LaTeX mcf_examples.tex by A.Yamaji 2021.12.12 +% Example of MCF Typeset with LuaLaTeX(luamplib) by A.Yamaji 2022.01.17 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\documentclass[a4paper]{article} -\usepackage{graphicx} -\makeatletter% -%-------------------------------- -\edef\jobname{mcf_exa_soc}% -\usepackage{mcf_setup} -%-------------------------------- -%%%%\pdfpkresolution=1200 -%-------------------------------- -%%%%\edef\f@ext{pk}% -\edef\f@ext{mps}% -%-------------------------------- +% ** mcf2graph.mf must be version 4.78 +% ** use mcf_data_base.mcf +% ** typeset by LuaLaTeX(luamplib) +\documentclass{article} +\usepackage{luamplib}% +\usepackage[T1]{fontenc}% +\mplibcodeinherit{enable}% +\mplibnumbersystem{double}% +\mpliblegacybehavior{disabled}% +%------------------------------------------------------------------------- +\everymplib{% + if unknown Ph1: input mcf2graph; fi + outputformat:="eps"; + sw_output:=Fig+Calc; + fsize:=(35mm,24mm); + max_blength:=4mm; + defaultfont:="uhvr8r"; + defaultsize:=8bp; + defaultscale:=1; +}% +%------------------------------------------------------------------------- \pagestyle{empty} \topmargin=-24mm \oddsidemargin=-12mm -\textwidth=190mm +\textwidth=192mm \textheight=280mm \parindent=0mm -\setlength\columnsep{8mm} -%-------------------------------- -\newbox \f@box% -\newcount \f@num% -\newcount \tnum% -\tnum=0% -\font\labelM=cmtt8 at 6pt\relax% -%-------------------------------- -\newif\ifCONT@% -\newread\@auxf% -%-------------------------------- -\f@num=1% -\unitlength=0.01mm% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%------------------------------------------------------------------------- \begin{document} \begin{center} {\Huge\sf Molecular Coding Format examples} \vspace{5mm} \\ Author : Akira Yamaji \quad Date : \today \\ - Located at : http://www.ctan.org/pkg/mcf2graph \vspace{3mm} \\ + Located at : http://www.ctan.org/pkg/mcf2graph \end{center} -{\small * use molecular data base file 'mcf\_data\_base.mcf' \\ - ** FM(fm):molecular formula (calculated) - * MW(mw):molecular weight (calculated) - \vspace{3mm} \\ -%------------------------------------------------------------------------ +{\small *typeset with LuaLaTeX \quad + *use molecular data base file 'mcf\_data\_base.mcf' \\ + ** FM(fm):molecular formula (calculated) \quad + * MW(mw):molecular weight (calculated)} \vspace{3mm} \\ +%------------------------------------------------------------------------- \noindent% -\openin\@auxf=\jobname-info.aux% +\makeatletter +\newbox \f@box% +\newcount \f@num% +\newcount \t@num% +\font\labelM=cmtt8 at 6pt\relax% +%------------------------------------------------------------------------- +\f@num=0% +\t@num=0% +\unitlength=0.01mm% +\noindent% +%------------------------------------------------------------------------- +\newif\ifCONT@% \CONT@true% \loop% -\read\@auxf to \info% -\ifeof\@auxf\CONT@false\else% - \infotovar{\info}% - \begin{picture}(3750,3350)% - \put(20,3000){\footnotesize\bf \EN}% - \put(20,2750){\labelM mw:\mw { / }fm:\fm}% - \put(20,2530){\labelM MW:\MW { / }[\the\f@num]}% - \put( 0,0){% - \makebox(3750,2530){% - \ifx\f@ext\@pk{\font\@font=\jobname\@font\char\f@num}% - \else% - \edef\f@file{\jobname-\z@num\f@num.\f@ext}% - \includegraphics{\f@file}% - \fi% - }% - }% - \end{picture}% - %------------------------------------------------------------ - \advance\f@num1\relax% - \advance\tnum1\relax% - \ifnum\tnum=5 \\ \tnum=0 \fi% -\fi% -\ifCONT@ \repeat% -\closein\@auxf% +\sbox{\f@box}{% +\begin{mplibcode} + beginfigm("t:EXA","v+:1") + if check(mc)=0: + MC(scantokens(mc)) + VerbatimTeX("\gdef\EN{"&inf_EN&"}"); + VerbatimTeX("\gdef\MW{"&inf_MW&"}"); + VerbatimTeX("\gdef\mw{"&cal_MW&"}"); + VerbatimTeX("\gdef\fm{"&cal_FM&"}"); + fi + endfigm +\end{mplibcode} +}% +%------------------------------------------------------------------------ +\begin{picture}(3750,3350)% + \put(20,3000){\footnotesize\bf \EN}% + \put(20,2750){\labelM mw:\mw { / }fm:\fm}% + \put(20,2530){\labelM MW:\MW { / }[\the\f@num]}% + \put(0,0){\makebox(3750,2530){\usebox{\f@box}}}% +\end{picture}% %------------------------------------------------------------------------ +\advance\f@num\@ne\relax% +\advance\t@num\@ne\relax% +\ifnum\t@num=5 \\ \t@num=\z@ \fi% +\ifnum\f@num=155 \CONT@false \fi% +\ifCONT@ \repeat% +%------------------------------------------------------------------------------ \end{document} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/graphics/mcf2graph/mcf_man_soc.mf b/graphics/mcf2graph/mcf_man_soc.mf deleted file mode 100644 index 383ff8b859..0000000000 --- a/graphics/mcf2graph/mcf_man_soc.mf +++ /dev/null @@ -1,1339 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Molecular Coding Format file for mcf_manual.tex by Akira.Yamaji 2022.01.02 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -input mcf2graph.mf; %% it must be version 4.77 -% ** use data base file 'mcf_data_base.mcf' -message "mcf_man_soc 2022.01.02"; message ""; -%------------------------------------------------------------------------ -sw_mframe:=0; -sw_expand:=0; -%%ext(defaultscale:=.5; label.bot(decimal(char_num)&":"&inf_EN,(.5w,0));) -%*********************************************************************** -fsize:=(40mm,25mm); -blength:=6mm; -%*********************************************************************** -beginfont("EN:Glycine",":<30,NH2,!2,COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-Alanine",":<30,NH2,!~wb,/_,!,COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-Valine",":<30,NH2,!~wb,/?!,!,COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-Leucine",":<30,NH2,!~wb,/'(!,?!),!,COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-Isoleucine",":<30,NH2,!~wb,/'(/*_,!2),!,COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-Serine",":<30,NH2,!~wb,/!OH,!,COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-Threonine",":<30,NH2,!~wb,/'(/_,!~wf,OH),!,COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-Cysteine",":<30,NH2,!~wb,/!SH,!,COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-Methionine",":<30,NH2,!~wb,/'(!2,S,!),!,COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-Phenylalanine",":<30,NH2,!~wb,/!Ph,!,COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-Tyrosine",":<30,NH2,!~wb,/'(!Ph,-3:/OH),!,COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-Triptophan", - ":<30,NH2,!~wb,!,COOH,@2,\,!,<24,|,?5,-4=Ph,2=dr,5=dl,4:NH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-Prorine",":<18,?5,3:NH,4:*/COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-Glutamine", - ":<30,NH2,!~wb,!,COOH,@2,\`1,!`1,!,//O,!,NH2") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-Asparagine",":<30,NH2,!~wb,/'(!,//O,!,NH2),!,COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-Aspartic acid",":<30,NH2,!~wb,/!COOH,!,COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-Glutamic acid",":<30,NH2,!~wb,/'(!2,COOH),!,COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-Lysine",":<30,NH2,!~wb,/'(!4,NH2),!,COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-Arginine", - ":<30,NH2,!~wb,!,COOH,@2,\`1,!`1,!2,NH,!,//NH,!,NH2") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-Hystidine", - ":<30,NH2,!~wb,!,COOH,@2,\,!,|,?5,{1,3}=dl,3:N,5:NH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-DOPA",":<30,NH2,!~wb,!,COOH,@2,\,!,Ph,{-3,-4}:/OH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:Ornithine",":<30,NH2,!~wb,/'(!3,NH2),!,COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:Citrulline",":<30,NH2,!~wb,/'(!3,NH,!,//O,!,NH2),!,COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:GABA",":<30,NH2,!4,COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:amino Levulinic acid",":<30,NH2,!2,//O,!3,COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:4-amino benzoic acid",":<30,Ph,1:/NH2,4:/COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-Carboxyl glutamic acid", - ":<30,NH2,!~wb,/'(!,/COOH,!,COOH),!,COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:L-Hydroxy Prorine",":<18,?5,1:/OH,3:NH,4:*/COOH") - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -fsize:=(60mm,35mm); -blength:=0mm; -max_blength:=10mm; -ratio_thickness_bond:=0.015; -ratio_atom_bond:=0.36; -sw_frame:=Outside; -fmargin:=(2mm,1mm); -%*********************************************************************** -beginfont("EN:Chain 1") - fsize:=(60mm,17mm); - sw_numbering:=Bond; - numbering_end:=6; - ratio_chain_ring:=1; -%---------------------------------------------------------------------- - MC(<15,-30,45,-45,60,$300,$0, - {1^$15,2^$345,3^$30,4^$345}:/_~dt,{5,6}=vf, - ) - add( - defaultscale:=0.5; - labeloffset:=2bp; - drawarrow B7/*.7{B7right}..{B1right}B1/*.7; label.ulft("-30",B7/*.7); - drawarrow B8/*.7{B8left}..{B2left}B2/*.7; label.llft("45",B8/*.7); - drawarrow B9/*.7{B9right}..{B3right}B3/*.7; label.ulft("-45",B9/*.7); - drawarrow B10/*.7{B10left}..{B4left}B4/*.7; label.llft("60",B10/*.7); - ) -endfont -%*********************************************************************** -beginfont("EN:Chain 2") - fsize:=(60mm,17mm); - sw_numbering:=Bond; - numbering_end:=6; - ratio_chain_ring:=1; -%---------------------------------------------------------------------- - MC(<-30,!6, - {1^-120,2^60,3^-60,4^60,5^-60,6^60}:/_~dt - ) - add( - defaultscale:=0.5; - labeloffset:=2bp; - drawarrow B7/*.7{B7right}..{B1right}B1/*.7; label.ulft("-60",B7/*.7); - drawarrow B8/*.7{B8left}..{B2left}B2/*.7; label.llft("60",B8/*.7); - drawarrow B9/*.7{B7right}..{B3right}B3/*.7; label.ulft("-60",B9/*.7); - drawarrow B10/*.7{B10left}..{B4left}B4/*.7; label.llft("60",B10/*.7); - drawarrow B11/*.7{B11right}..{B5right}B5/*.7; label.ulft("-60",B11/*.7); - drawarrow B12/*.7{B12left}..{B6left}B6/*.7; label.llft("60",B12/*.7); - ) -endfont -%*********************************************************************** -beginfont("EN:Jump and Branch") - fsize:=(60mm,16mm); - fmargin:=(2mm,2mm); - sw_trimming:=1; - sw_numbering:=Atom; - ratio_chain_ring:=1; -%---------------------------------------------------------------------- - MC(<-30,!6,@3,0,!,@5,-30) -endfont -%*********************************************************************** -beginfont("EN:Jump and Branch") - fsize:=(60mm,16mm); - fmargin:=(2mm,2mm); - sw_numbering:=Atom; - sw_trimming:=1; - ratio_chain_ring:=1; -%---------------------------------------------------------------------- - MC(<-30,!6,@3,\,!) -endfont -%*********************************************************************** -beginfont("EN:branch1") - fsize:=(60mm,16mm); - fmargin:=(2mm,2mm); - sw_numbering:=Atom; - sw_trimming:=1; - numbering_end:=10; - ratio_chain_ring:=1; -%---------------------------------------------------------------------- - MC(<30,!10,@2,\,!,@4,*\,!,@6,\*,!,@8,\\,!,@10,*\*,!) -endfont -%*********************************************************************** -beginfont("EN:branch2") - fsize:=(60mm,20mm); - fmargin:=(2mm,2mm); - sw_trimming:=1; - sw_numbering:=Atom; - numbering_end:=7; - ratio_chain_ring:=1; -%---------------------------------------------------------------------- - MC(<30,!6,@2,\~dr,!,@4,\`1.5,-90,@6,15,-60) -endfont -%*********************************************************************** -beginfont("EN:Connect atom") - fsize:=(60mm,20mm); - fmargin:=(2mm,2mm); - sw_trimming:=1; - sw_numbering:=Atom; - ratio_chain_ring:=1; -%---------------------------------------------------------------------- - MC(<-30,!6,@3,\,!3,&6~bd,@9,&4~bz) -endfont -%*********************************************************************** -beginfont("EN:ring") - fsize:=(60mm,20mm); - sw_trimming:=1; - fmargin:=(2mm,3mm); - sw_numbering:=Bond; -%---------------------------------------------------------------------- - MC(?6) -endfont -%*********************************************************************** -beginfont("EN:rotate 1") - fsize:=(60mm,20mm); - fmargin:=(2mm,3mm); - sw_trimming:=1; - sw_numbering:=Bond; - ratio_chain_ring:=1; - numbering_end:=7; - defaultscale:=0.5; - labeloffset:=2bp; - MC(#1,0,0,<90,0,<-90,0,<$315,0,<$90,0,<$0,0,{1:7}=vf, - {3,4^180}:/_~dt) - add( - drawarrow B8/*.7{B8left}..{B3left}B3/*.7; label.urt("90",B8/*.7); - drawarrow B9/*.7{B9right}..{B4right}B4/*.7; label.urt("-90",B9/*.7); - ) -endfont -%*********************************************************************** -beginfont("EN:change bond 1") - fsize:=(70mm,10mm); - fmargin:=(2mm,2mm); - sw_trimming:=0; - ratio_chain_ring:=1; - MC(<-30,!~dm,!,!~dl,!,!~dr,!~db,!~db,!,!~tm) - add(defaultscale:=0.6; labeloffset:=0; - label.rt("(dm)",A1+(0,-0.7l)); - label.rt("(dl)",A3+(0,-0.7l)); - label.rt("(dr)",A5+(0,-0.7l)); - label.rt("(db)",A6+(0,-0.7l)); - label.rt("(db)",A7+(0,-0.7l)); - label.rt("(tm)",A9+(0,-0.7l)); - ) -endfont -%*********************************************************************** -beginfont("EN:change bond 2") - fsize:=(70mm,10mm); - fmargin:=(2mm,2mm); - sw_trimming:=0; - ratio_chain_ring:=1; - MC(<-30,!~wf,!,!~wb,!,!~zf,!,!~zb,!,!~vf,!,!~vb) - add(defaultscale:=0.6; labeloffset:=0; - label.rt("(wf)",A1+(0,-0.7l)); - label.rt("(wb)",A3+(0,-0.7l)); - label.rt("(zf)",A5+(0,-0.7l)); - label.rt("(zb)",A7+(0,-0.7l)); - label.rt("(vf)",A9+(0,-0.7l)); - label.rt("(vb)",A11+(0,-0.7l)); - ) -endfont -%*********************************************************************** -beginfont("EN:change bond 3") - fsize:=(70mm,10mm); - fmargin:=(2mm,2mm); - blength:=9mm; - sw_trimming:=1; - ratio_chain_ring:=1; - MC(<-30,!7,1=dt,3=wv,5=bd,7=bz) - add(defaultscale:=0.6; labeloffset:=0; - label.rt("(dt)",A1+(0,-0.6l)); - label.rt("(wv)",A3+(0,-0.6l)); - label.rt("(bd)",A5+(0,-0.6l)); - label.rt("(bz)",A7+(0,-0.6l)); - ) -endfont -%*********************************************************************** -beginfont("EN:over line") - sw_trimming:=1; - fsize:=(75mm,20mm); - ratio_chain_ring:=1; - MC(<30,!18,$90`1.5,90`15.5, - {2~si_,4~wf_,6~wb_,8~zf_,10~zb_, - 12~bd_,14~dl_,16~dr_,18~dm_}:/_`2) -endfont -%*********************************************************************** -beginfont("EN:Steric ring") - fsize:=(75mm,16mm); - MCat(0.05,0.5)(#1.25,-30~wf_r,30~bd_r`1,30~wb_r,120,O,30,&1,##, - #.5,{1^$-90,2^$90,3^$-90,4^$90}:/OH,6^$90:/!OH) - defaultscale:=0.6; - MCat(0.5,0.7)(0~wf_r) add(label.lft("wf_r:",A1);) - MCat(0.5,0.2)(0~wf) add(label.lft("wf:",A1);) - MCat(0.75,0.7)(0~bd_r) add(label.lft("bd_r:",A1);) - MCat(0.75,0.2)(0~bd) add(label.lft("bd:",A1);) - MCat(1,0.7)(0~wb_r) add(label.lft("wb_r:",A1);) - MCat(1,0.2)(0~wb) add(label.lft("wb:",A1);) -endfont -%*********************************************************************** -beginfont("EN:change multi bond") - fsize:=(60mm,8mm); - fmargin:=(2mm,3mm); - ratio_chain_ring:=1; - MC(<30,!9,{2,4,6,8'}=dl) -endfont -%*********************************************************************** -beginfont("EN:change bond length1") - fsize:=(55mm,8mm); - sw_numbering:=Bond; - MC(<-30,!2,!4`1.2,!2) -endfont -%*********************************************************************** -beginfont("EN:change bond length2") - fsize:=(55mm,8mm); - sw_numbering:=Bond; - MC(<-30,!2,#1.2,!4,##,!2) -endfont -%*********************************************************************** -beginfont("EN:change ring length") - fsize:=(60mm,16mm); - fmargin:=(2mm,2mm); - sw_trimming:=1; - sw_numbering:=Bond; - MC(?6,@4,\,?6`1.2) -endfont -%*********************************************************************** -beginfont("EN:Insert atom") - sw_trimming:=1; - fsize:=(50mm,7mm); - MC(<-30,!2,O,!2,N,!2) -endfont -%*********************************************************************** -beginfont("EN:change atom") - fsize:=(70mm,10mm); - msize:=(0.48,1); - MCat(0,0.5)(<30,!5,2:O,{3:5}:N) - sw_numbering:=Atom; - MCat(1,0.5)(<30,!5,2:O,{3:5}:N) -endfont -%*********************************************************************** -beginfont("EN:change atom brock address 1") - fsize:=(70mm,14mm); - fmargin:=(3mm,1.5mm); - MCat(0,.5)(?6,@4,\,|,?6,2:O) - sw_numbering:=Atom; - msize:=(1,.88); - MCat(1,.5)(?6,@4,\,?6) -endfont -%*********************************************************************** -beginfont("EN:change atom brock address 2") - fsize:=(70mm,14mm); - fmargin:=(3mm,1.5mm); - MCat(0,.5)(?6,@4,\,|,?6,||,2:N) - sw_numbering:=Atom; - msize:=(1,.88); - MCat(1,.5)(?6,@4,\,?6) -endfont -%*********************************************************************** -beginfont("EN:change atom absolute address") - fsize:=(70mm,14mm); - fmargin:=(3mm,1.5mm); - MCat(0,.5)(?6,@4,\,?6,$2:N) - sw_numbering:=Atom; - msize:=(1,.88); - MCat(1,.5)(?6,@4,\,?6) -endfont -%*********************************************************************** -beginfont("EN:change atom relative adress") - fsize:=(70mm,14mm); - fmargin:=(3mm,1.5mm); - MCat(0,.5)(?6,@4,\,?6,-2:N) - sw_numbering:=Atom+Inverse; - msize:=(1,.88); - MCat(1,.5)(?6,@4,\,?6) -endfont -%*********************************************************************** -beginfont("EN:Charged atom") - sw_trimming:=1; - fsize:=(60mm,12mm); - MC(<-30,!2,N,??,p_,!2,S,n_^180,!6,7:N,7:??,9:S,7:p_,9:n_^180) -endfont -%*********************************************************************** -beginfont("EN:fused ring") - fsize:=(60mm,18mm); - fmargin:=(2mm,1.5mm); - sw_trimming:=1; - sw_numbering:=Bond; - MC(<30,?6,3=?6,3=dt,{7:11}=bd_r) -endfont -%----------------------------------------------------------------------- -beginfont("EN:change ring length") - fsize:=(60mm,25mm); - fmargin:=(2mm,2mm); - sw_trimming:=1; - sw_numbering:=Bond; - MC(?6,@4,\,?6`1.2,5=?6,11=?6, - {14:23}=bd_r,{5,11}=dt) -endfont -%----------------------------------------------------------------------- -beginfont("EN:fused large 6 ring") - fsize:=(60mm,18mm); - fmargin:=(2mm,1.5mm); - margin_top_bottom:=1.5mm; - sw_numbering:=Bond; - sw_trimming:=1; - MC(<30,?6,3=?6[13],3=dt,{7:11}=bd_r) -endfont -%----------------------------------------------------------------------- -beginfont("EN:fuse multi ring") - fsize:=(70mm,20mm); - fmargin:=(2mm,2mm); - sw_numbering:=Bond; - sw_trimming:=1; - MC(<30,?6,{-3,-4,-4,-2,-2,-4,-4}=?6,{4,8,13,20,25,28,33}=dt) -endfont -%*********************************************************************** -beginfont("EN:fused ring 2") - fsize:=(75mm,20mm); - fmargin:=(2mm,2mm); - sw_numbering:=Bond; - msize:=(1,.9); - MCat( 0,.5)(<30,?6,{3,(11,4)}=?6,{11,4}=dt,{12:15}=bd_r) - add(defaultscale:=0.4; label("(1)",p0);) - msize:=(1,.9); - MCat(.5,.5)(<30,?6,3=?6,(11,4)=?5,{11,4}=dt,{12:14}=bd_r) - add(defaultscale:=0.4; label("(2)",p0);) - msize:=(1,.9); - MCat( 1,.5)(<30,?6,3=?6,(11,4)=?4,{11,4}=dt,{12,13}=bd_r) - add(defaultscale:=0.4; label("(3)",p0);) -endfont -%*********************************************************************** -beginfont("EN:fused ring 3") - fsize:=(60mm,20mm); - fmargin:=(2mm,2mm); - sw_numbering:=Bond; - MCat(0,1)(?6,{3,10}=?6,(16,4)=?6[3],{16,4}=dt,{17:19}=bd_r) - add(defaultscale:=0.4; label("(1)",p0);) - MCat(1,0)(?6,{3,10}=?6,(16,4)=?5[2],{16,4}=dt,{17,18}=bd_r) - add(defaultscale:=0.4; label("(2)",p0);) -endfont -%*********************************************************************** -beginfont("EN:fused ring 4") - fsize:=(60mm,20mm); - fmargin:=(2mm,2mm); - sw_trimming:=1; - sw_numbering:=Bond; - MC(<-30,?6,{3,10,15}=?6,(21,4)=?6[2],{21,4}=dt,{22,23}=bd_r) -endfont -%*********************************************************************** -beginfont("EN:Spiro ring ") - fsize:=(40mm,15mm); - sw_numbering:=Atom; - numbering_end:=7; - ratio_chain_ring:=1; - MC(<30,!6,@4,?5) -endfont -%*********************************************************************** -beginfont("EN:group 1") - fsize:=(75mm,18mm); - MC(<30,!,/_,!2,/!,!2,/!,!4,/?!,!4,/??!,!2,/'(Ph`0.8)^-60,!) -endfont -%*********************************************************************** -beginfont("EN:group 2") - fsize:=(70mm,14mm); - MC(<30,!`1,//O,!2`1,*/H,!2`1,/*H,!2`1,*/*H,!2`1,**?3,!`1) - add(defaultscale:=0.75; - label("//",A2-(0,0.45l)); - label("*/",A4-(0,0.45l)); - label("/*",A6-(0,0.45l)); - label("*/*",A8-(0,0.45l)); - label("**",A10-(0,0.45l)); - ) -endfont -%*********************************************************************** -beginfont("EN:group 3") - fsize:=(60mm,16mm); - sw_trimming:=1; - MC(<-30,#1,!2,/_`2^30,!2,/!2>lr,!2,/!2>rl,!) -endfont -%*********************************************************************** -beginfont("EN:group 3") - fsize:=(75mm,25mm); - fmargin:=(2mm,2mm); - sw_numbering:=Atom; - numbering_end:=17; - MC(<30,!17,2:/_,3:/!,4:/!2,7:/iPr,8:/tBu,10:/'(Ph`0.6)^-15, - {11,12,13'}:*/_,{15,16,17'}:/*_) -endfont -%*********************************************************************** -beginfont("EN:group 4") - fsize:=(60mm,18mm); - sw_trimming:=1; - fmargin:=(2mm,2mm); - sw_numbering:=Atom; numbering_end:=9; - MC(<30,!8`1,{2~wf,4~zf,6^-30,8^$120}:/_) -endfont -%*********************************************************************** -beginfont("EN:group 5") - fsize:=(60mm,16mm); - sw_trimming:=1; - sw_numbering:=Atom; numbering_end:=8; - MC(<-30,!7`1,3:/_`2^30,5:/!2>lr,7:/!2>rl) -endfont -%*********************************************************************** -beginfont("EN:chain strech direction mode 1") - fsize:=(50mm,25mm); - sw_trimming:=1; - ratio_chain_ring:=1; - MC( - ?4,{3^-90,3^-30,3^90}:/'(!3,"{hz}")>hz, - {1^-60,1,1^60}:/'(!3,"{vt}")>vt - ) -endfont -%*********************************************************************** -beginfont("EN:chain strech direction mode 2") - fsize:=(60mm,20mm); - sw_trimming:=1; - ratio_chain_ring:=1; - MC( - <-30,!6,{3^-30,3,3^30}:/'(!,!,!,"{lr}")>lr, - {5^-30,5,5^30}:/'(!,!,!,"{rl}")>rl - ) -endfont -%*********************************************************************** -beginfont("EN:chain strech direction mode 3") - fsize:=(40mm,20mm); - sw_trimming:=1; - MC(<30,!4,2:/!6>30,4:/!4>-45) -endfont -%*********************************************************************** -beginfont("EN:chain strech direction mode 4") - fsize:=(60mm,20mm); - sw_trimming:=1; - MC(<30,!6,6>'(90,-90,90,-90,90):/!5) -endfont -%*********************************************************************** -beginfont("EN:change atom and group") - fsize:=(60mm,12mm); - sw_trimming:=1; - MC(<-30,!2,NH,!2,N!,!2,N!2,!2,SO,!2,SOO,!) -endfont -%*********************************************************************** -beginfont("EN:methyl*2,isopropyl,tert-butyl") - fsize:=(60mm,12mm); - sw_trimming:=1; - MC(<30,!9`1,?!,!,??,!,2:??,4:/?!,6:/??!,8:/N?!) -endfont -%*********************************************************************** -beginfont("EN:User definition") - fsize:=(60mm,13mm); - sw_trimming:=1; - iBuOH:='(!,/_,!,OH); - MC(<30,?6,{4,6}:/iBuOH) -endfont -%*********************************************************************** -beginfont("EN:Inline definition") - fsize:=(60mm,13mm); - fmargin:=(2mm,1mm); - sw_trimming:=1; - MC(<30,!8,{2,6}:/'(!,/_,!,OH)) -endfont -%*********************************************************************** -beginfont("EN:Move position") - fsize:=(70mm,16mm); - fmargin:=(2mm,1mm); - sw_trimming:=1; - MC(<30,?6,@3,\,!3,//O,!,O,n_^60,@$(6,1),H,p_^15) - add(drawdot A1 withpen pencircle scaled 2bp; - pickup pencircle scaled 0.1bp; - for i=0 upto 6: - draw (A1+(l*i,l-3bp))--(l*i,l+3bp); - endfor - draw A1--(A1+(0,1l))--A1+(6l,1l); - draw (A1+(0,1l))--(A1+(-3bp,1l)); - ) -endfont -%*********************************************************************** -beginfont("EN:Serial number") - fsize:=(75mm,14mm); - max_blength:=8mm; - sw_numbering:=Atom; numbering_end:=15; - MC(<30,!14,{2,6:10,14}:/_~bd_r`0.5) -endfont -%*********************************************************************** -beginfont("EN:Change color") - fsize:=(50mm,20mm); - max_blength:=8mm; - MC( - <30,Ph,{2,5}:N,3:/NH2,4:/COOH, - 2:red,5:blue,3=green - ) -endfont -%*********************************************************************** -beginfont("EN:Change font") - fsize:=(50mm,20mm); - max_blength:=8mm; - atomfont:="cmr8"; - MC(<30,Ph,{2,5}:N,3:/NH2,4:/COOH) -endfont -%*********************************************************************** -beginfont("EN:mangle") - fsize:=(50mm,15mm); - blength:=6mm; - mangle:=0; - MCat(0.2,0.5)(Ph) - add(drawarrow((A1 shifted (aw,0)) rotated A1ang..A1);) - mangle:=30; - MCat(0.8,0.5)(Ph) - add(drawarrow((A1 shifted (aw,0)) rotated A1ang..A1);) -endfont -%*********************************************************************** -beginfont("EN:blength=0") - sw_frame:=Bothside; - fsize:=(40mm,15mm); - MC(<30,Ph) - ext(pickup pencircle scaled 0.2pt; - for i=0 upto w/mm: draw (i*mm,0)--(i*mm,-.5mm); endfor - for i=0 upto h/mm: draw (0,i*mm)--(-.5mm,i*mm); endfor - for i=0 upto w/cm: draw (i*cm,0)--(i*cm,-.8mm); endfor - for i=0 upto h/cm: draw (0,i*cm)--(-.8mm,i*cm); endfor - ) -endfont -%----------------------------------------------------------------------- -beginfont("EN:01") - sw_frame:=Bothside; - fsize:=(40mm,15mm); - blength:=8mm; - MC(<30,Ph) - ext(pickup pencircle scaled 0.2pt; - for i=0 upto w/mm: draw (i*mm,0)--(i*mm,-.5mm); endfor - for i=0 upto h/mm: draw (0,i*mm)--(-.5mm,i*mm); endfor - for i=0 upto w/cm: draw (i*cm,0)--(i*cm,-.8mm); endfor - for i=0 upto h/cm: draw (0,i*cm)--(-.8mm,i*cm); endfor - ) -endfont -%*********************************************************************** -beginfont("EN:msize=(1)") - sw_frame:=Bothside+Mol; - fsize:=(40mm,15mm); - msize:=(1,1); - MC(<30,Ph) - ext(pickup pencircle scaled 0.2pt; - for i=0 upto w/mm: draw (i*mm,0)--(i*mm,-.5mm); endfor - for i=0 upto h/mm: draw (0,i*mm)--(-.5mm,i*mm); endfor - for i=0 upto w/cm: draw (i*cm,0)--(i*cm,-.8mm); endfor - for i=0 upto h/cm: draw (0,i*cm)--(-.8mm,i*cm); endfor - ) -endfont -%------------------------------------------------------ -beginfont("EN:msize=(0.25,1)") - sw_frame:=Bothside+Mol; - fsize:=(40mm,15mm); - msize:=(0.25,1); - MC(<30,Ph) - ext(pickup pencircle scaled 0.2pt; - for i=0 upto w/mm: draw (i*mm,0)--(i*mm,-.5mm); endfor - for i=0 upto h/mm: draw (0,i*mm)--(-.5mm,i*mm); endfor - for i=0 upto w/cm: draw (i*cm,0)--(i*cm,-.8mm); endfor - for i=0 upto h/cm: draw (0,i*cm)--(-.8mm,i*cm); endfor - ) -endfont -%------------------------------------------------------ -beginfont("EN:msize=(11mm,11mm)") - sw_frame:=Bothside+Mol; - fsize:=(40mm,15mm); - msize:=(11mm,11mm); - MC(<30,Ph) - ext(pickup pencircle scaled 0.2pt; - for i=0 upto w/mm: draw (i*mm,0)--(i*mm,-.5mm); endfor - for i=0 upto h/mm: draw (0,i*mm)--(-.5mm,i*mm); endfor - for i=0 upto w/cm: draw (i*cm,0)--(i*cm,-.8mm); endfor - for i=0 upto h/cm: draw (0,i*cm)--(-.8mm,i*cm); endfor - ) -endfont -%*********************************************************************** -beginfont("EN:mposition") - sw_frame:=Bothside+Mol; - fsize:=(40mm,15mm); - msize:=(1,0.8); - mposition:=(0.5,0.5); - MC(<30,Ph) -endfont -%----------------------------------------------------- -beginfont("EN:mposition") - sw_frame:=Bothside+Mol; - fsize:=(40mm,15mm); - msize:=(1,0.8); - mposition:=(1,0); - MC(<30,Ph) -endfont -%----------------------------------------------------- -beginfont("EN:mposition") - sw_frame:=sw_frame+Mol; - fsize:=(40mm,15mm); - msize:=(1,0.8); - mposition:=(10mm,4mm); - MC(<30,Ph) - ext(drawdot p1 withpen pencircle scaled 3pt; - pickup pencircle scaled 0.2pt; - for i=0 upto w/mm: draw (i*mm,0)--(i*mm,-.5mm); endfor - for i=0 upto h/mm: draw (0,i*mm)--(-.5mm,i*mm); endfor - for i=0 upto w/cm: draw (i*cm,0)--(i*cm,-.8mm); endfor - for i=0 upto h/cm: draw (0,i*cm)--(-.8mm,i*cm); endfor - ) -endfont -%*********************************************************************** -beginfont("EN:Font size") - fsize:=(40mm,12mm); - sw_frame:=Outside; - MC(<30,Ph) - ext(pickup pencircle scaled 0.2pt; - for i=0 upto w/mm: draw (i*mm,0)--(i*mm,-.5mm); endfor - for i=0 upto h/mm: draw (0,i*mm)--(-.5mm,i*mm); endfor - for i=0 upto w/cm: draw (i*cm,0)--(i*cm,-.8mm); endfor - for i=0 upto h/cm: draw (0,i*cm)--(-.8mm,i*cm); endfor - ) -endfont -%*********************************************************************** -beginfont("EN:fmargin") - fsize:=(40mm,12mm); - sw_frame:=Bothside+Mol; - fmargin:=(10mm,1mm); - MC(<30,Ph) - ext(pickup pencircle scaled 0.2pt; - for i=0 upto w/mm: draw (i*mm,0)--(i*mm,-.5mm); endfor - for i=0 upto h/mm: draw (0,i*mm)--(-.5mm,i*mm); endfor - for i=0 upto w/cm: draw (i*cm,0)--(i*cm,-.8mm); endfor - for i=0 upto h/cm: draw (0,i*cm)--(-.8mm,i*cm); endfor - drawdot p0 withpen pencircle scaled 3pt; - ) -endfont -%*********************************************************************** -beginfont("EN:offset_thickness") - fsize:=(60mm,12mm); - offset_thickness:=0.0pt; MCat(0.1,0.5)(<30,Ph) - offset_thickness:=0.2pt; MCat(0.55,0.5)(<30,Ph) - offset_thickness:=0.5pt; MCat(1,0.5)(<30,Ph) - ext(defaultscale:=0.6; labeloffset:=1bp; - label.urt("0.0pt",(0,1bp)); - label.urt("0.2pt",(0.36w,1bp)); - label.urt("0.5pt",(0.7w,1bp)); - ) -endfont -%*********************************************************************** -beginfont("EN:offset_bond_gap") - fsize:=(60mm,12mm); - offset_bond_gap:=0.0pt; - MCat(0.1, .5)(<30,Ph) - offset_bond_gap:=0.3pt; %<<== default - MCat(.55, .5)(<30,Ph) - offset_bond_gap:=1.0pt; - MCat(1, .5)(<30,Ph) - ext(defaultscale:=0.6; labeloffset:=1bp; - label.urt("0.0pt",(0,1bp)); - label.urt("0.3pt",(0.36w,1bp)); - label.urt("1.0pt",(0.7w,1bp)); - ) -endfont -%*********************************************************************** -beginfont("EN:offset_atom") - fsize:=(60mm,12mm); - offset_atom:=0.0pt; - MCat(0.1, .5)(<30,?6,3:O) - offset_atom:=0.8pt; %<<== default - MCat(.55, .5)(<30,?6,3:O) - offset_atom:=2.0pt; - MCat(1, .5)(<30,?6,3:O) - ext(defaultscale:=0.6; labeloffset:=1bp; - label.urt("0.0pt",(0,1bp)); - label.urt("0.8pt",(0.36w,1bp)); - label.urt("2.0pt",(0.7w,1bp)); - ) -endfont -%*********************************************************************** -beginfont("EN:offset_wedge") - fsize:=(60mm,12mm); - offset_wedge:=0.0pt; - MCat(0.1,0.5)(<30,?6,5:*/_) - offset_wedge:=0.4pt; %<<== default - MCat(0.55,0.5)(<30,?6,5:*/_) - offset_wedge:=1.0pt; - MCat(1, 0.5)(<30,?6,5:*/_) - ext(defaultscale:=0.6; labeloffset:=1bp; - label.urt("0.0pt",(0,1bp)); - label.urt("0.4pt",(0.36w,1bp)); - label.urt("1.0pt",(0.7w,1bp)); - ) -endfont -%*********************************************************************** -beginfont("EN:max_blength") - fsize:=(60mm,20mm); - sw_frame:=sw_frame+Mol; - max_blength:=5mm; - MCat(0, .5)(<30,Ph) - max_blength:=8mm; - MCat(.4,.5)(<30,Ph) - max_blength:=10mm; - MCat(1, .5)(<30,Ph) %<<== default - ext(defaultscale:=0.6; labeloffset:=1bp; - label("5mm", (0.1w,0.5h)); - label("8mm", (0.42w,0.5h)); - label("10mm",(0.82w,0.5h)); - ) -endfont -%*********************************************************************** -beginfont("EN:ratio_thickness_bond") - fsize:=(60mm,12mm); - ratio_thickness_bond:=0.005; - MCat(0.1,0.5)(<30,Ph) - ratio_thickness_bond:=0.015; %<<== default - MCat(.55,0.5)(<30,Ph) - ratio_thickness_bond:=0.03; - MCat(1, 0.5)(<30,Ph) - ext(defaultscale:=0.6; labeloffset:=1bp; - label.urt("0.005",(0,1bp)); - label.urt("0.015",(0.36w,1bp)); - label.urt("0.030",(0.7w,1bp)); - ) -endfont -%*********************************************************************** -beginfont("EN:ratio_char_bond") - fsize:=(60mm,12mm); - ratio_char_bond:=1.0; - MCat(0, .5)(<30,?6,6:O,3:NH) - ratio_char_bond:=1.5; %<<== default - MCat(.5, .5)(<30,?6,6:O,3:NH) - ratio_char_bond:=2.0; - MCat( 1, .5)(<30,?6,6:O,3:NH) - ext(defaultscale:=0.6; labeloffset:=1bp; - label.urt("1.0",(0,1bp)); - label.urt("1.5",(0.36w,1bp)); - label.urt("2.0",(0.7w,1bp)); - ) -endfont -%*********************************************************************** -beginfont("EN:ratio_bondgap_bond") - fsize:=(60mm,12mm); - ratio_bondgap_bond:=0.10; - MCat(0.1, .5)(<30,Ph) - ratio_bondgap_bond:=0.15; %<<== default - MCat(.55, .5)(<30,Ph) - ratio_bondgap_bond:=0.20; - MCat(1 , .5)(<30,Ph) - ext(defaultscale:=0.6; labeloffset:=1bp; - label.urt("0.10",(0,1bp)); - label.urt("0.15",(0.36w,1bp)); - label.urt("0.20",(0.7w,1bp)); - ) -endfont -%*********************************************************************** -beginfont("EN:ratio_atom_bond") - fsize:=(60mm,12mm); - ratio_atom_bond:=0.25; - MCat(0.1, .5)(<30,?6,3:O) - ratio_atom_bond:=0.33; %<<== default - MCat(.55, .5)(<30,?6,3:O) - ratio_atom_bond:=0.45; - MCat(1, .5)(<30,?6,3:O) - ext(defaultscale:=0.6; labeloffset:=1bp; - label.urt("0.25",(0,1bp)); - label.urt("0.33",(0.36w,1bp)); - label.urt("0.45",(0.7w,1bp)); - ) -endfont -%*********************************************************************** -beginfont("EN:ratio_wedge_bond") - fsize:=(70mm,12mm); - ratio_wedge_bond:=0.1; - MCat(0.05, .5)(?6,4:*/_) - ratio_wedge_bond:=0.12; %<<== default - MCat(.55, .5)(?6,4:*/_) - ratio_wedge_bond:=0.2;; - MCat(1 , .5)(?6,4:*/_) - ext(defaultscale:=0.6; labeloffset:=1bp; - label.urt("0.10",(0,1bp)); - label.urt("0.12",(0.36w,1bp)); - label.urt("0.20",(0.7w,1bp)); - ) -endfont -%*********************************************************************** -beginfont("EN:ratio_atomgap_atom") - fsize:=(70mm,12mm); - sw_frame:=sw_frame+Atom; - ratio_atomgap_atom:=0.00; - MCat(0, .5)(<30,!2`0.5,2:O) - ratio_atomgap_atom:=0.050; %<<== default - MCat(.5,.5)(<30,!2`0.5,2:O) - ratio_atomgap_atom:=0.12; - MCat(1, .5)(<30,!2`0.5,2:O) - ext(defaultscale:=0.75; labeloffset:=1bp; - label.urt("0.00",(0.05w,1bp)); - label.urt("0.05",(0.45w,1bp)); - label.urt("0.12",(0.85w,1bp)); - ) -endfont -%*********************************************************************** -beginfont("EN:ratio_chain_ring") - fsize:=(70mm,12mm); - ratio_chain_ring:= 0.4; - MCat(0.05, .5)(<30,?6,4:/!) - ratio_chain_ring:= 0.66; %<<== default - MCat(.45, .5)(<30,?6,4:/!) - ratio_chain_ring:= 1; - MCat(1, .5)(<30,?6,4:/!) - ext(defaultscale:=0.6; labeloffset:=1bp; - label.urt("0.40",(0,1bp)); - label.urt("0.66",(0.3w,1bp)); - label.urt("1.0" ,(0.62w,1bp)); - ) -endfont -%*********************************************************************** -beginfont("EN:ratio_hashgap_bond") - fsize:=(70mm,15mm); - ratio_hashgap_bond:=0.06; - MCat(0.08, .5)(<30,!2,2:/*_`1.5) - ratio_hashgap_bond:=0.12; %<<== default - MCat( .55, .5)(<30,!2,2:/*_`1.5) - ratio_hashgap_bond:=0.20; - MCat(1, .5)(<30,!2,2:/*_`1.5) - ext(defaultscale:=0.6; labeloffset:=1bp; - label.urt("0.06",(0,1bp)); - label.urt("0.12",(0.4w,1bp)); - label.urt("0.20",(0.77w,1bp)); - ) -endfont -%*********************************************************************** -beginfont("EN:Switwch numbering atom") - fsize:=(60mm,20mm); - ratio_chain_ring:=1; - numbering_start:=3; numbering_end:=8; - sw_numbering:=Atom; MCat(.5,.9)(<-30,!9) - sw_numbering:=Atom+Brock; MCat(.5,.5)(<-30,!9) - sw_numbering:=Atom+Inverse; MCat(.5,.1)(<-30,!9) -endfont -%*********************************************************************** -beginfont("EN:Switwch numbering bond") - fsize:=(60mm,20mm); - ratio_chain_ring:=1; - numbering_start:=3; numbering_end:=8; - sw_numbering:=Bond; MCat(.5,.9)(<-30,!9) - sw_numbering:=Bond+Brock; MCat(.5,.5)(<-30,!9) - sw_numbering:=Bond+Inverse; MCat(.5,.1)(<-30,!9) -endfont -%*********************************************************************** -beginfont("EN:Switwch trimming") - fsize:=(60mm,20mm); - sw_frame:=Bothside+Mol; - msize:=(1,.7); MCat(.2,.3)(Ph) - MCat(.8,.7)(Ph) -endfont -%----------------------------------------------------------------------- -beginfont("EN:Switwch trimming") - fsize:=(60mm,20mm); - sw_frame:=Bothside+Mol; - sw_trimming:=1; - msize:=(1,.7); - MCat(.2,.3)(Ph) - MCat(.8,.7)(Ph) -endfont -%*********************************************************************** -beginfont("EN:Switwch Expand") - fsize:=(60mm,20mm); - MCat(0, .5)(<30,Ph,4:/COOH,3:/NH2) - sw_expand:=1; - MCat(1, .5)(<30,Ph,4:/COOH,3:/NH2) -endfont -%*********************************************************************** -beginfont("EN:Switwch abbreviate group") - fsize:=(60mm,12mm); - MCat(.15, .5)(<30,Ph,4:/Cl,3:/F) - sw_abbreviate:=Group; - MCat(.85, .5)(<30,Ph,4:/Cl,3:/F) -endfont -%*********************************************************************** -beginfont("EN:Switwch abbreviate bondtype") - fsize:=(60mm,12mm); - MCat(.15, .5)(<30,Ph,4:/Cl,3:/F) - sw_abbreviate:=Bond; - MCat(.85, .5)(<30,Ph,4:/Cl,3:/F) -endfont -%*********************************************************************** -beginfont("EN:Switwch font frame 1") - fsize:=(30mm,10mm); - fmargin:=(5mm,1.5mm); - sw_frame:=Outside; - MC(<30,Ph) -endfont -beginfont("EN:Switwch font frame 2") - fsize:=(30mm,10mm); - fmargin:=(5mm,1.5mm); - sw_frame:=Inside; - MC(<30,Ph) -endfont -beginfont("EN:Switwch font frame 3") - fsize:=(30mm,10mm); - fmargin:=(5mm,1.5mm); - sw_frame:=Bothside; - MC(<30,Ph) -endfont -%*********************************************************************** -beginfont("EN:Switwch molecular frame") - sw_frame:=Outside; - fsize:=(40mm,11mm); - msize:=(1,1); - sw_frame:=sw_frame+Mol; - MC(<30,Ph) -endfont -%*********************************************************************** -beginfont("EN:Switwch atom frame") - fsize:=(60mm,10mm); - sw_frame:=sw_frame+Atom; - MC(<30,COOH,!,COOH) -endfont -%*********************************************************************** -beginfont("EN:Local setting 1") - fsize:=(15mm,12mm); - MC(Ph) -endfont -beginfont("EN:Local setting 2") - fsize:=(15mm,12mm); - ratio_thickness_bond:=0.05; - MC(Ph) -endfont -beginfont("EN:Local setting 3") - fsize:=(15mm,12mm); - MC(Ph) -endfont -%*********************************************************************** -save_ratio:=ratio_thickness_bond; -beginfont("EN:Global setting 1") - fsize:=(15mm,12mm); - MC(Ph) -endfont -ratio_thickness_bond:=0.05; -beginfont("EN:Global setting 2") - fsize:=(15mm,12mm); - MC(Ph) -endfont -beginfont("EN:Global setting 3") - fsize:=(15mm,12mm); - MC(Ph) -endfont -ratio_thickness_bond:=save_ratio; -%*********************************************************************** -beginfont("EN:MC() ") - fmargin:=(0.5mm,0.5mm); - fsize:=(40mm,15mm); - sw_frame:=Outside+Mol; - MC(<30,Ph,4:/Cl,3:/F) -endfont -%----------------------------------------------------------------------- -beginfont("EN:MCat()") - defaultsize:=5bp; - fsize:=(60mm,40mm); - fmargin:=(3mm,3mm); - blength:=0.07; - sw_frame:=Outside; - mangle:=0; - for i=1 step -0.5 until 0: - for j=0 step 0.33 until 1: - MCat(j,i)(Ph,4:N) - add( - drawarrow((A1+A1up**aw)..A1); - label(decimal(mangle),p0+(0.5w,0.5h)); - ) - mangle:=mangle+30; - endfor - endfor -endfont -%*********************************************************************** -beginfont("EN:Pyridine",":<30,Ph,2:N") - sw_trimming:=0; - fsize:=(12mm,12mm); - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%----------------------------------------------------------------------- -beginfont("EN:Pyridine",":<30,Ph,2):N") - sw_trimming:=0; - fsize:=(12mm,12mm); - if check(mc)=0: MC(scantokens(mc)) fi -endfont -%*********************************************************************** -beginfont("EN:add() 1") - fsize:=(70mm,40mm); - sw_frame:=sw_frame+Atom+Mol; - max_blength:=10mm; - msize:=(.91,.9); - MCat(.5,.85)(<30,?6,{2,5}:O) - add( - defaultscale:=.8; - labeloffset:=.3aw; - dotlabel.lft("p0",p0); - dotlabel.rt( "p0+(w,h)",p0+(w,h)); - dotlabel.ulft("A1",A1); - drawarrow A1..A1+__*l<lr,!2,/!2>rl,!) +endfigm +%*********************************************************************** +beginfigm("EN:group 3") + fsize:=(75mm,25mm); + fmargin:=(2mm,2mm); + sw_numbering:=Atom; + numbering_end:=17; + MC(<30,!17,2:/_,3:/!,4:/!2,7:/iPr,8:/tBu,10:/'(Ph`0.6)^-15, + {11,12,13'}:*/_,{15,16,17'}:/*_) +endfigm +%*********************************************************************** +beginfigm("EN:group 4") + fsize:=(60mm,18mm); + sw_trimming:=1; + fmargin:=(2mm,2mm); + sw_numbering:=Atom; numbering_end:=9; + MC(<30,!8`1,{2~wf,4~zf,6^-30,8^$120}:/_) +endfigm +%*********************************************************************** +beginfigm("EN:group 5") + fsize:=(60mm,16mm); + sw_trimming:=1; + sw_numbering:=Atom; numbering_end:=8; + MC(<-30,!7`1,3:/_`2^30,5:/!2>lr,7:/!2>rl) +endfigm +%*********************************************************************** +beginfigm("EN:chain strech direction mode 1") + fsize:=(50mm,25mm); + sw_trimming:=1; + ratio_chain_ring:=1; + MC( + ?4,{3^-90,3^-30,3^90}:/'(!3,"{hz}")>hz, + {1^-60,1,1^60}:/'(!3,"{vt}")>vt + ) +endfigm +%*********************************************************************** +beginfigm("EN:chain strech direction mode 2") + fsize:=(60mm,20mm); + sw_trimming:=1; + ratio_chain_ring:=1; + MC( + <-30,!6,{3^-30,3,3^30}:/'(!,!,!,"{lr}")>lr, + {5^-30,5,5^30}:/'(!,!,!,"{rl}")>rl + ) +endfigm +%*********************************************************************** +beginfigm("EN:chain strech direction mode 3") + fsize:=(40mm,20mm); + sw_trimming:=1; + MC(<30,!4,2:/!6>30,4:/!4>-45) +endfigm +%*********************************************************************** +beginfigm("EN:chain strech direction mode 4") + fsize:=(60mm,20mm); + sw_trimming:=1; + MC(<30,!6,6>'(90,-90,90,-90,90):/!5) +endfigm +%*********************************************************************** +beginfigm("EN:change atom and group") + fsize:=(60mm,12mm); + sw_trimming:=1; + MC(<-30,!2,NH,!2,N!,!2,N!2,!2,SO,!2,SOO,!) +endfigm +%*********************************************************************** +beginfigm("EN:methyl*2,isopropyl,tert-butyl") + fsize:=(60mm,12mm); + sw_trimming:=1; + MC(<30,!9`1,?!,!,??,!,2:??,4:/?!,6:/??!,8:/N?!) +endfigm +%*********************************************************************** +beginfigm("EN:User definition") + fsize:=(60mm,13mm); + sw_trimming:=1; + iBuOH:='(!,/_,!,OH); + MC(<30,?6,{4,6}:/iBuOH) +endfigm +%*********************************************************************** +beginfigm("EN:Inline definition") + fsize:=(60mm,13mm); + fmargin:=(2mm,1mm); + sw_trimming:=1; + MC(<30,!8,{2,6}:/'(!,/_,!,OH)) +endfigm +%*********************************************************************** +beginfigm("EN:Move position") + fsize:=(70mm,16mm); + fmargin:=(2mm,1mm); + sw_trimming:=1; + MC(<30,?6,@3,\,!3,//O,!,O,n_^60,@$(6,1),H,p_^15) + add(drawdot A1 withpen pencircle scaled 2bp; + pickup pencircle scaled 0.1bp; + for i=0 upto 6: + draw (A1+(l*i,l-3bp))--(l*i,l+3bp); + endfor + draw A1--(A1+(0,1l))--A1+(6l,1l); + draw (A1+(0,1l))--(A1+(-3bp,1l)); + ) +endfigm +%*********************************************************************** +beginfigm("EN:Serial number") + fsize:=(75mm,14mm); + max_blength:=8mm; + sw_numbering:=Atom; numbering_end:=15; + MC(<30,!14,{2,6:10,14}:/_~bd_r`0.5) +endfigm +%*********************************************************************** +beginfigm("EN:Change color") + fsize:=(50mm,20mm); + max_blength:=8mm; + MC( + <30,Ph,{2,5}:N,3:/NH2,4:/COOH, + 2:red,5:blue,3=green + ) +endfigm +%*********************************************************************** +beginfigm("EN:Change font") + fsize:=(50mm,20mm); + max_blength:=8mm; + atomfont:="cmr8"; + MC(<30,Ph,{2,5}:N,3:/NH2,4:/COOH) +endfigm +%*********************************************************************** +beginfigm("EN:mangle") + fsize:=(50mm,15mm); + blength:=6mm; + mangle:=0; + MCat(0.2,0.5)(Ph) + add(drawarrow((A1 shifted (aw,0)) rotated A1ang..A1);) + mangle:=30; + MCat(0.8,0.5)(Ph) + add(drawarrow((A1 shifted (aw,0)) rotated A1ang..A1);) +endfigm +%*********************************************************************** +beginfigm("EN:blength=0") + sw_frame:=Bothside; + fsize:=(40mm,15mm); + MC(<30,Ph) + ext(pickup pencircle scaled 0.2pt; + for i=0 upto w/mm: draw (i*mm,0)--(i*mm,-.5mm); endfor + for i=0 upto h/mm: draw (0,i*mm)--(-.5mm,i*mm); endfor + for i=0 upto w/cm: draw (i*cm,0)--(i*cm,-.8mm); endfor + for i=0 upto h/cm: draw (0,i*cm)--(-.8mm,i*cm); endfor + ) +endfigm +%----------------------------------------------------------------------- +beginfigm("EN:01") + sw_frame:=Bothside; + fsize:=(40mm,15mm); + blength:=8mm; + MC(<30,Ph) + ext(pickup pencircle scaled 0.2pt; + for i=0 upto w/mm: draw (i*mm,0)--(i*mm,-.5mm); endfor + for i=0 upto h/mm: draw (0,i*mm)--(-.5mm,i*mm); endfor + for i=0 upto w/cm: draw (i*cm,0)--(i*cm,-.8mm); endfor + for i=0 upto h/cm: draw (0,i*cm)--(-.8mm,i*cm); endfor + ) +endfigm +%*********************************************************************** +beginfigm("EN:msize=(1)") + sw_frame:=Bothside+Mol; + fsize:=(40mm,15mm); + msize:=(1,1); + MC(<30,Ph) + ext(pickup pencircle scaled 0.2pt; + for i=0 upto w/mm: draw (i*mm,0)--(i*mm,-.5mm); endfor + for i=0 upto h/mm: draw (0,i*mm)--(-.5mm,i*mm); endfor + for i=0 upto w/cm: draw (i*cm,0)--(i*cm,-.8mm); endfor + for i=0 upto h/cm: draw (0,i*cm)--(-.8mm,i*cm); endfor + ) +endfigm +%------------------------------------------------------ +beginfigm("EN:msize=(0.25,1)") + sw_frame:=Bothside+Mol; + fsize:=(40mm,15mm); + msize:=(0.25,1); + MC(<30,Ph) + ext(pickup pencircle scaled 0.2pt; + for i=0 upto w/mm: draw (i*mm,0)--(i*mm,-.5mm); endfor + for i=0 upto h/mm: draw (0,i*mm)--(-.5mm,i*mm); endfor + for i=0 upto w/cm: draw (i*cm,0)--(i*cm,-.8mm); endfor + for i=0 upto h/cm: draw (0,i*cm)--(-.8mm,i*cm); endfor + ) +endfigm +%------------------------------------------------------ +beginfigm("EN:msize=(11mm,11mm)") + sw_frame:=Bothside+Mol; + fsize:=(40mm,15mm); + msize:=(11mm,11mm); + MC(<30,Ph) + ext(pickup pencircle scaled 0.2pt; + for i=0 upto w/mm: draw (i*mm,0)--(i*mm,-.5mm); endfor + for i=0 upto h/mm: draw (0,i*mm)--(-.5mm,i*mm); endfor + for i=0 upto w/cm: draw (i*cm,0)--(i*cm,-.8mm); endfor + for i=0 upto h/cm: draw (0,i*cm)--(-.8mm,i*cm); endfor + ) +endfigm +%*********************************************************************** +beginfigm("EN:mposition") + sw_frame:=Bothside+Mol; + fsize:=(40mm,15mm); + msize:=(1,0.8); + mposition:=(0.5,0.5); + MC(<30,Ph) +endfigm +%----------------------------------------------------- +beginfigm("EN:mposition") + sw_frame:=Bothside+Mol; + fsize:=(40mm,15mm); + msize:=(1,0.8); + mposition:=(1,0); + MC(<30,Ph) +endfigm +%----------------------------------------------------- +beginfigm("EN:mposition") + sw_frame:=sw_frame+Mol; + fsize:=(40mm,15mm); + msize:=(1,0.8); + mposition:=(10mm,4mm); + MC(<30,Ph) + ext(drawdot p1 withpen pencircle scaled 3pt; + pickup pencircle scaled 0.2pt; + for i=0 upto w/mm: draw (i*mm,0)--(i*mm,-.5mm); endfor + for i=0 upto h/mm: draw (0,i*mm)--(-.5mm,i*mm); endfor + for i=0 upto w/cm: draw (i*cm,0)--(i*cm,-.8mm); endfor + for i=0 upto h/cm: draw (0,i*cm)--(-.8mm,i*cm); endfor + ) +endfigm +%*********************************************************************** +beginfigm("EN:Figure size") + fsize:=(40mm,12mm); + sw_frame:=Outside; + MC(<30,Ph) + ext(pickup pencircle scaled 0.2pt; + for i=0 upto w/mm: draw (i*mm,0)--(i*mm,-.5mm); endfor + for i=0 upto h/mm: draw (0,i*mm)--(-.5mm,i*mm); endfor + for i=0 upto w/cm: draw (i*cm,0)--(i*cm,-.8mm); endfor + for i=0 upto h/cm: draw (0,i*cm)--(-.8mm,i*cm); endfor + ) +endfigm +%*********************************************************************** +beginfigm("EN:fmargin") + fsize:=(40mm,12mm); + sw_frame:=Bothside+Mol; + fmargin:=(10mm,1mm); + MC(<30,Ph) + ext(pickup pencircle scaled 0.2pt; + for i=0 upto w/mm: draw (i*mm,0)--(i*mm,-.5mm); endfor + for i=0 upto h/mm: draw (0,i*mm)--(-.5mm,i*mm); endfor + for i=0 upto w/cm: draw (i*cm,0)--(i*cm,-.8mm); endfor + for i=0 upto h/cm: draw (0,i*cm)--(-.8mm,i*cm); endfor + drawdot p0 withpen pencircle scaled 3pt; + ) +endfigm +%*********************************************************************** +beginfigm("EN:offset_thickness") + fsize:=(60mm,12mm); + offset_thickness:=0.0pt; MCat(0.1,0.5)(<30,Ph) + offset_thickness:=0.2pt; MCat(0.55,0.5)(<30,Ph) + offset_thickness:=0.5pt; MCat(1,0.5)(<30,Ph) + ext(defaultscale:=0.6; labeloffset:=1bp; + label.urt("0.0pt",(0,1bp)); + label.urt("0.2pt",(0.36w,1bp)); + label.urt("0.5pt",(0.7w,1bp)); + ) +endfigm +%*********************************************************************** +beginfigm("EN:offset_bond_gap") + fsize:=(60mm,12mm); + offset_bond_gap:=0.0pt; + MCat(0.1, .5)(<30,Ph) + offset_bond_gap:=0.3pt; %<<== default + MCat(.55, .5)(<30,Ph) + offset_bond_gap:=1.0pt; + MCat(1, .5)(<30,Ph) + ext(defaultscale:=0.6; labeloffset:=1bp; + label.urt("0.0pt",(0,1bp)); + label.urt("0.3pt",(0.36w,1bp)); + label.urt("1.0pt",(0.7w,1bp)); + ) +endfigm +%*********************************************************************** +beginfigm("EN:offset_atom") + fsize:=(60mm,12mm); + offset_atom:=0.0pt; + MCat(0.1, .5)(<30,?6,3:O) + offset_atom:=0.8pt; %<<== default + MCat(.55, .5)(<30,?6,3:O) + offset_atom:=2.0pt; + MCat(1, .5)(<30,?6,3:O) + ext(defaultscale:=0.6; labeloffset:=1bp; + label.urt("0.0pt",(0,1bp)); + label.urt("0.8pt",(0.36w,1bp)); + label.urt("2.0pt",(0.7w,1bp)); + ) +endfigm +%*********************************************************************** +beginfigm("EN:offset_wedge") + fsize:=(60mm,12mm); + offset_wedge:=0.0pt; + MCat(0.1,0.5)(<30,?6,5:*/_) + offset_wedge:=0.4pt; %<<== default + MCat(0.55,0.5)(<30,?6,5:*/_) + offset_wedge:=1.0pt; + MCat(1, 0.5)(<30,?6,5:*/_) + ext(defaultscale:=0.6; labeloffset:=1bp; + label.urt("0.0pt",(0,1bp)); + label.urt("0.4pt",(0.36w,1bp)); + label.urt("1.0pt",(0.7w,1bp)); + ) +endfigm +%*********************************************************************** +beginfigm("EN:max_blength") + fsize:=(60mm,20mm); + sw_frame:=sw_frame+Mol; + max_blength:=5mm; + MCat(0, .5)(<30,Ph) + max_blength:=8mm; + MCat(.4,.5)(<30,Ph) + max_blength:=10mm; + MCat(1, .5)(<30,Ph) %<<== default + ext(defaultscale:=0.6; labeloffset:=1bp; + label("5mm", (0.1w,0.5h)); + label("8mm", (0.42w,0.5h)); + label("10mm",(0.82w,0.5h)); + ) +endfigm +%*********************************************************************** +beginfigm("EN:ratio_thickness_bond") + fsize:=(60mm,12mm); + ratio_thickness_bond:=0.005; + MCat(0.1,0.5)(<30,Ph) + ratio_thickness_bond:=0.015; %<<== default + MCat(.55,0.5)(<30,Ph) + ratio_thickness_bond:=0.03; + MCat(1, 0.5)(<30,Ph) + ext(defaultscale:=0.6; labeloffset:=1bp; + label.urt("0.005",(0,1bp)); + label.urt("0.015",(0.36w,1bp)); + label.urt("0.030",(0.7w,1bp)); + ) +endfigm +%*********************************************************************** +beginfigm("EN:ratio_char_bond") + fsize:=(60mm,12mm); + ratio_char_bond:=1.0; + MCat(0, .5)(<30,?6,6:O,3:NH) + ratio_char_bond:=1.5; %<<== default + MCat(.5, .5)(<30,?6,6:O,3:NH) + ratio_char_bond:=2.0; + MCat( 1, .5)(<30,?6,6:O,3:NH) + ext(defaultscale:=0.6; labeloffset:=1bp; + label.urt("1.0",(0,1bp)); + label.urt("1.5",(0.36w,1bp)); + label.urt("2.0",(0.7w,1bp)); + ) +endfigm +%*********************************************************************** +beginfigm("EN:ratio_bondgap_bond") + fsize:=(60mm,12mm); + ratio_bondgap_bond:=0.10; + MCat(0.1, .5)(<30,Ph) + ratio_bondgap_bond:=0.15; %<<== default + MCat(.55, .5)(<30,Ph) + ratio_bondgap_bond:=0.20; + MCat(1 , .5)(<30,Ph) + ext(defaultscale:=0.6; labeloffset:=1bp; + label.urt("0.10",(0,1bp)); + label.urt("0.15",(0.36w,1bp)); + label.urt("0.20",(0.7w,1bp)); + ) +endfigm +%*********************************************************************** +beginfigm("EN:ratio_atom_bond") + fsize:=(60mm,12mm); + ratio_atom_bond:=0.25; + MCat(0.1, .5)(<30,?6,3:O) + ratio_atom_bond:=0.33; %<<== default + MCat(.55, .5)(<30,?6,3:O) + ratio_atom_bond:=0.45; + MCat(1, .5)(<30,?6,3:O) + ext(defaultscale:=0.6; labeloffset:=1bp; + label.urt("0.25",(0,1bp)); + label.urt("0.33",(0.36w,1bp)); + label.urt("0.45",(0.7w,1bp)); + ) +endfigm +%*********************************************************************** +beginfigm("EN:ratio_wedge_bond") + fsize:=(70mm,12mm); + ratio_wedge_bond:=0.1; + MCat(0.05, .5)(?6,4:*/_) + ratio_wedge_bond:=0.12; %<<== default + MCat(.55, .5)(?6,4:*/_) + ratio_wedge_bond:=0.2;; + MCat(1 , .5)(?6,4:*/_) + ext(defaultscale:=0.6; labeloffset:=1bp; + label.urt("0.10",(0,1bp)); + label.urt("0.12",(0.36w,1bp)); + label.urt("0.20",(0.7w,1bp)); + ) +endfigm +%*********************************************************************** +beginfigm("EN:ratio_atomgap_atom") + fsize:=(70mm,12mm); + sw_frame:=sw_frame+Atom; + ratio_atomgap_atom:=0.00; + MCat(0, .5)(<30,!2`0.5,2:O) + ratio_atomgap_atom:=0.050; %<<== default + MCat(.5,.5)(<30,!2`0.5,2:O) + ratio_atomgap_atom:=0.12; + MCat(1, .5)(<30,!2`0.5,2:O) + ext(defaultscale:=0.75; labeloffset:=1bp; + label.urt("0.00",(0.05w,1bp)); + label.urt("0.05",(0.45w,1bp)); + label.urt("0.12",(0.85w,1bp)); + ) +endfigm +%*********************************************************************** +beginfigm("EN:ratio_chain_ring") + fsize:=(70mm,12mm); + ratio_chain_ring:= 0.4; + MCat(0.05, .5)(<30,?6,4:/!) + ratio_chain_ring:= 0.66; %<<== default + MCat(.45, .5)(<30,?6,4:/!) + ratio_chain_ring:= 1; + MCat(1, .5)(<30,?6,4:/!) + ext(defaultscale:=0.6; labeloffset:=1bp; + label.urt("0.40",(0,1bp)); + label.urt("0.66",(0.3w,1bp)); + label.urt("1.0" ,(0.62w,1bp)); + ) +endfigm +%*********************************************************************** +beginfigm("EN:ratio_hashgap_bond") + fsize:=(70mm,15mm); + ratio_hashgap_bond:=0.06; + MCat(0.08, .5)(<30,!2,2:/*_`1.5) + ratio_hashgap_bond:=0.12; %<<== default + MCat( .55, .5)(<30,!2,2:/*_`1.5) + ratio_hashgap_bond:=0.20; + MCat(1, .5)(<30,!2,2:/*_`1.5) + ext(defaultscale:=0.6; labeloffset:=1bp; + label.urt("0.06",(0,1bp)); + label.urt("0.12",(0.4w,1bp)); + label.urt("0.20",(0.77w,1bp)); + ) +endfigm +%*********************************************************************** +beginfigm("EN:Switwch numbering atom") + fsize:=(60mm,20mm); + ratio_chain_ring:=1; + numbering_start:=3; numbering_end:=8; + sw_numbering:=Atom; MCat(.5,.9)(<-30,!9) + sw_numbering:=Atom+Brock; MCat(.5,.5)(<-30,!9) + sw_numbering:=Atom+Inverse; MCat(.5,.1)(<-30,!9) +endfigm +%*********************************************************************** +beginfigm("EN:Switwch numbering bond") + fsize:=(60mm,20mm); + ratio_chain_ring:=1; + numbering_start:=3; numbering_end:=8; + sw_numbering:=Bond; MCat(.5,.9)(<-30,!9) + sw_numbering:=Bond+Brock; MCat(.5,.5)(<-30,!9) + sw_numbering:=Bond+Inverse; MCat(.5,.1)(<-30,!9) +endfigm +%*********************************************************************** +beginfigm("EN:Switwch trimming") + fsize:=(60mm,20mm); + sw_frame:=Bothside+Mol; + msize:=(1,.7); MCat(.2,.3)(Ph) + MCat(.8,.7)(Ph) +endfigm +%----------------------------------------------------------------------- +beginfigm("EN:Switwch trimming") + fsize:=(60mm,20mm); + sw_frame:=Bothside+Mol; + sw_trimming:=1; + msize:=(1,.7); + MCat(.2,.3)(Ph) + MCat(.8,.7)(Ph) +endfigm +%*********************************************************************** +beginfigm("EN:Switwch Expand") + fsize:=(60mm,20mm); + MCat(0, .5)(<30,Ph,4:/COOH,3:/NH2) + sw_expand:=1; + MCat(1, .5)(<30,Ph,4:/COOH,3:/NH2) +endfigm +%*********************************************************************** +beginfigm("EN:Switwch abbreviate group") + fsize:=(60mm,12mm); + MCat(.15, .5)(<30,Ph,4:/Cl,3:/F) + sw_abbreviate:=Group; + MCat(.85, .5)(<30,Ph,4:/Cl,3:/F) +endfigm +%*********************************************************************** +beginfigm("EN:Switwch abbreviate bondtype") + fsize:=(60mm,12mm); + MCat(.15, .5)(<30,Ph,4:/Cl,3:/F) + sw_abbreviate:=Bond; + MCat(.85, .5)(<30,Ph,4:/Cl,3:/F) +endfigm +%*********************************************************************** +beginfigm("EN:Switwch font frame 1") + fsize:=(30mm,10mm); + fmargin:=(5mm,1.5mm); + sw_frame:=Outside; + MC(<30,Ph) +endfigm +beginfigm("EN:Switwch font frame 2") + fsize:=(30mm,10mm); + fmargin:=(5mm,1.5mm); + sw_frame:=Inside; + MC(<30,Ph) +endfigm +beginfigm("EN:Switwch font frame 3") + fsize:=(30mm,10mm); + fmargin:=(5mm,1.5mm); + sw_frame:=Bothside; + MC(<30,Ph) +endfigm +%*********************************************************************** +beginfigm("EN:Switwch molecular frame") + sw_frame:=Outside; + fsize:=(40mm,11mm); + msize:=(1,1); + sw_frame:=sw_frame+Mol; + MC(<30,Ph) +endfigm +%*********************************************************************** +beginfigm("EN:Switwch atom frame") + fsize:=(60mm,10mm); + sw_frame:=sw_frame+Atom; + MC(<30,COOH,!,COOH) +endfigm +%*********************************************************************** +beginfigm("EN:Local setting 1") + fsize:=(15mm,12mm); + MC(Ph) +endfigm +beginfigm("EN:Local setting 2") + fsize:=(15mm,12mm); + ratio_thickness_bond:=0.05; + MC(Ph) +endfigm +beginfigm("EN:Local setting 3") + fsize:=(15mm,12mm); + MC(Ph) +endfigm +%*********************************************************************** +save_ratio:=ratio_thickness_bond; +beginfigm("EN:Global setting 1") + fsize:=(15mm,12mm); + MC(Ph) +endfigm +ratio_thickness_bond:=0.05; +beginfigm("EN:Global setting 2") + fsize:=(15mm,12mm); + MC(Ph) +endfigm +beginfigm("EN:Global setting 3") + fsize:=(15mm,12mm); + MC(Ph) +endfigm +ratio_thickness_bond:=save_ratio; +%*********************************************************************** +beginfigm("EN:MC() ") + fmargin:=(0.5mm,0.5mm); + fsize:=(40mm,15mm); + sw_frame:=Outside+Mol; + MC(<30,Ph,4:/Cl,3:/F) +endfigm +%----------------------------------------------------------------------- +beginfigm("EN:MCat()") + defaultsize:=5bp; + fsize:=(60mm,40mm); + fmargin:=(3mm,3mm); + blength:=0.07; + sw_frame:=Outside; + mangle:=0; + for i=1 step -0.5 until 0: + for j=0 step 0.33 until 1: + MCat(j,i)(Ph,4:N) + add( + drawarrow((A1+A1up**aw)..A1); + label(decimal(mangle),p0+(0.5w,0.5h)); + ) + mangle:=mangle+30; + endfor + endfor +endfigm +%*********************************************************************** +beginfigm("EN:Pyridine",":<30,Ph,2:N") + sw_trimming:=0; + fsize:=(12mm,12mm); + if check(mc)=0: MC(scantokens(mc)) fi +endfigm +%----------------------------------------------------------------------- +beginfigm("EN:Pyridine",":<30,Ph,2):N") + sw_trimming:=0; + fsize:=(12mm,12mm); + if check(mc)=0: MC(scantokens(mc)) fi +endfigm +%*********************************************************************** +beginfigm("EN:add() 1") + fsize:=(70mm,40mm); + sw_frame:=sw_frame+Atom+Mol; + max_blength:=10mm; + msize:=(.91,.9); + MCat(.5,.85)(<30,?6,{2,5}:O) + add( + defaultscale:=.8; + labeloffset:=.3aw; + dotlabel.lft("p0",p0); + dotlabel.rt( "p0+(w,h)",p0+(w,h)); + dotlabel.ulft("A1",A1); + drawarrow A1..A1+__*l< bottom arc_br : arc bottom right -beginfont("EN:Maltose","MW:342.3", +beginfigm("EN:Maltose","MW:342.3", %----------------------------------------- ": #1.25,-30~wf_r,30~bd_r`1,30~wb_r, ", ": 120,O,30,&1,##, ", @@ -1460,7 +1457,7 @@ beginfont("EN:Maltose","MW:342.3", %----------------------------------------- fsize:=(50mm,20mm); if check(mc)=0: MC(scantokens(mc)) fi -endfont +endfigm \end{verbatim} \MCFgraph %----------------------------------------------------------------------------- @@ -1472,7 +1469,7 @@ endfont arc_lbr : arc left > bottom > right arc_ltr : arc left > top > right -beginfont("EN:Cellobiose","MW:342.3", +beginfigm("EN:Cellobiose","MW:342.3", %----------------------------------------- ": #1.25,-30~wf_r,30~bd_r`1,30~wb_r, ", ": 120,O,30,&1,##, ", @@ -1486,25 +1483,25 @@ beginfont("EN:Cellobiose","MW:342.3", %----------------------------------------- fsize:=(50mm,20mm); if check(mc)=0: MC(scantokens(mc)) fi -endfont +endfigm \end{verbatim} \MCFgraph %------------------------------------------------------------------------ \onecolumn \section{Example to use mcf2graph} -\subsection{Metafont/Metapost souce file} -\index{mcf2graph.mf}% +\subsection{MetaPost souce file} +\index{mcf2graph.mp}% \index{sw\_output}% \index{tag}% \index{var}% \begin{verbatim} %------------------------------------------------------------------------- -input mcf2graph.mf; > input main macro +input mcf2graph; > input main macro %------------------------------------------------------------------------- sw_output:=Info; % aux(information) file output on > global setting %%%% sw_output:=Report; > report output %%%% sw_output:=MOL2k; > MOL file output -fsize:=(60mm,40mm); % (font width,font height) > +fsize:=(60mm,40mm); % (figure width,figure height) > tag1:="J"; > jobname tag2:="C"; > char No tag3:="mw"; % calculated molecular weight > @@ -1512,13 +1509,13 @@ tag4:="fm"; % calculated molecular formula > outputformat:="png"; hppp:=vppp:=0.1; > PNG output outputtemplate:="%j-%3c.png"; > %------------------------------------------------------------------------- -beginfont("EN:Ampicillin","MW:349.405") > information +beginfigm("EN:Ampicillin","MW:349.405") > information MC(<45,?4,-3=?5,2:N,7:S, > immediately compile 3^45:/*H,1://O^15,5:/*COOH^-18,6:??, > @4,*\^15,NH,!,//O,!,/*NH2,!,Ph) > -endfont > +endfigm > %------------------------------------------------------------------------ -beginfont("EN:Cholesterol","MW:386.65", >information +beginfigm("EN:Cholesterol","MW:386.65", >information %---------------------------------------- > ": <30,?6,{-4,-2}=?6,-4=?5,7=dl, ", > mc1 ": 10:/*H^180,11:/*H^-60,17:/*H^-54, ", > mc2 @@ -1526,29 +1523,29 @@ beginfont("EN:Cholesterol","MW:386.65", >information ": @-1,18,/*_,-60,!3,?! ") > mc4 %---------------------------------------- > if check(mc)=0: MC(scantokens(mc)) fi > mc=mc1 - mc4 -endfont > +endfigm > %------------------------------------------------------------------------------ -beginfont("f:mcf_data_base.mcf","t:EN","v:Adenine") > from mcf_data_base.mcf +beginfigm("f:mcf_data_base.mcf","t:EN","v:Adenine") > from mcf_data_base.mcf if check(mc)=0: MC(scantokens(mc)) fi > select EN="Adenine" -endfont > +endfigm > %------------------------------------------------------------------------------ -beginfont("t:EN","v:Guanine") > select EN="Guanine" +beginfigm("t:EN","v:Guanine") > select EN="Guanine" if check(mc)=0: MC(scantokens(mc)) fi -endfont +endfigm %------------------------------------------------------------------------------ -beginfont("t:EN","v:Cytosine") > select EN="Cytosine" +beginfigm("t:EN","v:Cytosine") > select EN="Cytosine" if check(mc)=0: MC(scantokens(mc)) fi > -endfont > +endfigm > %------------------------------------------------------------------------------ -beginfont("t:n","v+:4") > v+:4 = select No.4 +beginfigm("t:n","v+:4") > v+:4 = select No.4 if check(mc)=0: MC(scantokens(mc)) fi > keep file open -endfont > +endfigm > %------------------------------------------------------------------------------ forever: -%%%%%%%%%% beginfont("f:mcf_data_base","v+:*") > select all - beginfont("f:mcf_data_base","t:EXA","v+:1") > 'v+:1'= select EXA=1 +%%%%%%%%%% beginfigm("f:mcf_data_base","v+:*") > select all + beginfigm("f:mcf_data_base","t:EXA","v+:1") > 'v+:1'= select EXA=1 if f_EOF=0: if check(mc)=0: MC(scantokens(mc)) fi fi > keep file open - endfont > + endfigm > exitif f_EOF=1; > exit if file end endfor %------------------------------------------------------------------------------ @@ -1640,9 +1637,9 @@ query("s:EN", "Cat=biological","MW>=285","MW<=295"); %-------------------------------------------------------------- forever: - beginfont("f:temp","v+:*") % use file temp.mcf / select all + beginfigm("f:temp","v+:*") % use file temp.mcf / select all if f_EOF=0: if check(mc)=0: MC(scantokens(mc)) fi fi - endfont + endfigm exitif f_EOF=1; endfor %--------------------------------------------------------------- @@ -1677,7 +1674,7 @@ Cat:biological;EN:Piperine;MW:285.343;EXA:1 \noindent% \newpage \subsection{Information aux file output} -\paragraph{(Insert option parameter setting)} +\paragraph{(Option parameter setting)} \index{J}% \index{C}% \index{NO}% @@ -1696,12 +1693,8 @@ Cat:biological;EN:Piperine;MW:285.343;EXA:1 \index{Table}% \index{Temp}% \begin{verbatim} - sw_output:=Info; %% tag1:var1;tag2:var2 - sw_output:=Info+Table; %% tag1;tag2 var1;var2 - sw_output:=Info+Temp; %% tag1:var1;tag2:var2 / output 'temp-info.aux' - sw_output:=Info+Mcode; %% output jobname&'.aux' - sw_output:=Info+Mcode+Temp; %% output 'temp-info.aux','temp-mc.aux' - sw_output:=Font+Info+Temp; %% output font,'temp-info.aux','temp-mc.aux' + sw_output:=Info; %% tag1:var1;tag2:var2 + sw_output:=Info+Table; %% tag1;tag2 var1;var2 \end{verbatim} \paragraph{(Command line)} \begin{verbatim} @@ -1710,10 +1703,10 @@ Cat:biological;EN:Piperine;MW:285.343;EXA:1 \end{verbatim} \paragraph{(Sourse)} \begin{verbatim} -beginfont("EN:Ampicillin") .... endfont -beginfont("EN:Cholesterol") .... endfont -beginfont("EN:Limonin") .... endfont -beginfont("EN:beta-Carotene") .... endfont +beginfigm("EN:Ampicillin") .... endfigm +beginfigm("EN:Cholesterol") .... endfigm +beginfigm("EN:Limonin") .... endfigm +beginfigm("EN:beta-Carotene") .... endfigm \end{verbatim} \paragraph{(Setting)} \begin{verbatim} @@ -1755,96 +1748,26 @@ USE : the use mw : molecular weight calculated mi : monoisotopic mass calculated fm : molecular formula calculated -w : font width -h : font height -\end{verbatim} -%------------------------------------------------------------------------ -\noindent% -\newpage -\subsection{Metafont aux file output} -\index{Mfont}% -\paragraph{(Insert option parameter setting)} -\begin{verbatim} - sw_output:=Mfont; -\end{verbatim} -\paragraph{(Command line)} -\begin{verbatim} - >mpost -s ahlength=7 FILENAME (sw_output=Mfont) -\end{verbatim} -\paragraph{(Output)} -\begin{verbatim} -beginfont("Cat:biological","EN:Adenine","MW:135.13", -": <30,?6,3=?5,{1,3,5,9}=dl,{2,6,9}:N,5:/NH2,7:NH") -if check(mc)=0: MC(scantokens(mc)) fi -endfont -beginfont("Cat:biological","EN:Guanine","MW:151.13", -": <30,?6,3=?5,{1,3,9}=dl,{2,9}:N,{6,7}:NH,5://O,1:/NH2") -if check(mc)=0: MC(scantokens(mc)) fi -endfont -beginfont("Cat:biological","EN:Cytosine","MW:111.10", -": <30,?6,{4,6}=dl,4:N,3://O,2:NH,5:/NH2") -if check(mc)=0: MC(scantokens(mc)) fi -endfont -beginfont("Cat:biological","EN:Thymine","MW:126.11", -": <30,?6,3=dl,{2,6}:NH,{1,5}://O,4:/_") -if check(mc)=0: MC(scantokens(mc)) fi -endfont -beginfont("Cat:biological","EN:Adenine","MW:135.13", -": <30,?6,3=?5,{1,3,5,9}=dl,{2,6,9}:N,5:/NH2,7:NH") -if check(mc)=0: MC(scantokens(mc)) fi -endfont -beginfont("Cat:biological","EN:Guanine","MW:151.13", -": <30,?6,3=?5,{1,3,9}=dl,{2,9}:N,{6,7}:NH,5://O,1:/NH2") -if check(mc)=0: MC(scantokens(mc)) fi -endfont -beginfont("Cat:biological","EN:Cytosine","MW:111.10", -": <30,?6,{4,6}=dl,4:N,3://O,2:NH,5:/NH2") -if check(mc)=0: MC(scantokens(mc)) fi -endfont -beginfont("Cat:biological","EN:Thymine","MW:126.11", -": <30,?6,3=dl,{2,6}:NH,{1,5}://O,4:/_") -if check(mc)=0: MC(scantokens(mc)) fi -endfont -beginfont("Cat:biological","EN:Uracil","MW:112.09", -": <30,?6,6=dl,{3,5}://O,{2,4}:NH") -if check(mc)=0: MC(scantokens(mc)) fi -endfont -beginfont("Cat:biological","EN:Geraniol","MW:154.25", -": <30,!8,OH,{2,6}=dr,{2,6}:/_") -if check(mc)=0: MC(scantokens(mc)) fi -endfont -beginfont("Cat:biological","EN:Limonene","MW:136.24", -": <30,?6,2=dl,2:/_,@5,*\,/_,!!") -if check(mc)=0: MC(scantokens(mc)) fi -endfont -beginfont("Cat:biological","EN:l-Menthol","MW:156.27", -": <30,?6,2:/*?!,5:*/_,3:*/OH") -if check(mc)=0: MC(scantokens(mc)) fi -endfont +w : figure width +h : figure height \end{verbatim} %------------------------------------------------------------------------ \noindent% \newpage \subsection{MCF aux file output} -\paragraph{(Insert option parameter setting)} +\paragraph{(Option parameter setting)} \index{Mcode}% \index{Temp}% \begin{verbatim} -sw_output:=Mcode; %% output 'jobname-nnn-EN-mc.aux' -sw_output:=Mcode+Temp; %% output 'temp-mc.aux' -sw_output:=Info+Mcode; %% output 'jobname-data.aux' -sw_output:=Info+Mcode+Temp; %% output 'temp-info.aux','temp-mc.aux' -sw_output:=Font+Mcode+Temp; %% output font,'temp-mc.aux' -sw_output:=Font+Info+Mcode+Temp; %% output font,'temp-info.aux','temp-mc.aux' +sw_output:=Mcode; %% output 'temp-mc.aux' \end{verbatim} \paragraph{(Command line)} \begin{verbatim} - >mpost -s ahlength=8 FILENAME (sw_output=Info+Mcode) + >mpost -s ahlength=3 FILENAME (sw_output=Info+Mcode) \end{verbatim} -\paragraph{(Output temporary file)} +\paragraph{(Output mcf file)} \begin{verbatim} -sw_output=Mcode ** file name = 'jobname-nnn-EN-mc.aux' -sw_output=Mcode+Temp ** file name = 'temp-mc.aux' +sw_output=Mcode %% file name = 'temp-mc.aux' (result) <30,?6,3=?5,{1,3,5,9}=dl,{2,6,9}:N,5:/NH2,7:NH @@ -1852,7 +1775,7 @@ sw_output=Mcode+Temp ** file name = 'temp-mc.aux' \end{verbatim} \paragraph{(Output data-base file)} \begin{verbatim} -sw_output=Mcode+Info ** file name = 'jobname-data.aux' +sw_output=Info+Mcode %% file name = 'jobname-data.aux' (result) Cat:biological;EN:Adenine;MW:135.13;EXA:1 @@ -1862,20 +1785,14 @@ Cat:biological;EN:Adenine;MW:135.13;EXA:1 \end{verbatim} %------------------------------------------------------------------------ -\paragraph{(Lualatex example)} -%----------------------------------------------------------------------- -\begin{verbatim} -beginfont("t:EN","v:Adenine") - sw_output:=Mcode+Temp; -endfont -\end{verbatim} +\paragraph{(LuaLaTeX example)} %----------------------------------------------------------------------- \begin{verbatim} %----------------------------------------------------------------------- \begin{mplibcode} - beginfont("t:EN","v:Vancomycin") - sw_output:=Mcode+Temp; %%%% output temp-mc.aux %%%% - endfont; + beginfigm("t:EN","v:Vancomycin") + sw_output:=Mcode; %%%% output temp-mc.aux %%%% + endfigm; \end{mplibcode} %----------------------------------------------------------------------- \verbatiminput{temp-mc.aux} @@ -1895,16 +1812,15 @@ file name = 'temp-mc.aux' \newpage \noindent% \subsection{Report output} -\paragraph{(Insert option parameter setting)} +\paragraph{(Option parameter setting)} \index{sw\_output}% \index{Report}% \begin{verbatim} - sw_output:=Report; ** file name = 'jobname-report.aux' - sw_output:=Report+Temp; ** file name = 'temp-report.aux' + sw_output:=Report; %% file name = 'jobname-report.aux' \end{verbatim} \paragraph{(Command line)} \begin{verbatim} - >mpost -s ahlength=3 FILENAME + >mpost -s ahlength=7 FILENAME \end{verbatim} \paragraph{(Output)} \begin{verbatim} @@ -1959,7 +1875,7 @@ file name = 'temp-mc.aux' %------------------------------------------------------------------------ \noindent% \subsection{MOL file output} -\paragraph{(Insert option parameter setting)} +\paragraph{(Option parameter setting)} \index{sw\_output}% \index{MOL2k}% \index{MOL3k}% @@ -2013,7 +1929,7 @@ M END %---------------------------------------------------------------------------- \newpage \subsection{LuaTeX file example} -\index{Font}% +\index{Fig}% %############################################################################ \begin{verbatim} \documentclass{article} @@ -2024,8 +1940,8 @@ M END \mplibverbatim{enable}% \mplibnumbersystem{double}% \everymplib{% - if unknown Ph1: input mcf2graph.mf; fi - sw_output:=Font; max_blength:=4.5mm; + if unknown Ph1: input mcf2graph; fi + sw_output:=Fig; max_blength:=4.5mm; defaultfont:="uhvr8r"; defaultsize:=8bp; defaultscale:=1; }% \begin{document} @@ -2033,7 +1949,7 @@ M END %-------------------------------------------------------------------- \begin{mplibcode} fsize:=(50mm,50mm); - beginfont("NO:1","EN:Limonin","MW:470.51", + beginfigm("NO:1","EN:Limonin","MW:470.51", %---------------------------------------- ": <30,?6,{-3,-4}=?6, ", ": -5=?3,-2=wf,-1=wb,6=?5,-4=?6,-5=wf, ", @@ -2043,12 +1959,12 @@ M END ": @14,\*,|,?5,{1,4}=dl,3:O ") %---------------------------------------- if check(mc)=0: MC(scantokens(mc)) fi - endfont + endfigm \end{mplibcode}\\ %-------------------------------------------------------------------- \begin{mplibcode} fsize:=(80mm,50mm); - beginfont("NO:2","EN:beta-carotene","MW:536.87", + beginfigm("NO:2","EN:beta-carotene","MW:536.87", %------------------------------------------ ": <30,?6,3=dl,{3,5^35,5^-35}:/_, ", ": @4,\,|,!18,{1,3,5,7,9,11,13,15,17}=dr, ", @@ -2056,12 +1972,12 @@ M END ": |,?6,6=dl,{6,2^35,2^-35}:/_ ") %------------------------------------------ if check(mc)=0: MC(scantokens(mc)) fi - endfont + endfigm \end{mplibcode}\\ %-------------------------------------------------------------------- \begin{mplibcode} fsize:=(50mm,50mm); - beginfont("NO:3","EN:Gibberellin A3","MW:346.37", + beginfigm("NO:3","EN:Gibberellin A3","MW:346.37", %------------------------------------ ": <18,?5,3=?7,5=?6[12], ", ": @8,160`1.3,&3,13=dl,6=wf,8=wb, ", @@ -2070,49 +1986,13 @@ M END ": 14:*/_,{1^60,4^60}:*/H ") %------------------------------------ if check(mc)=0: MC(scantokens(mc)) fi -endfont; +endfigm; %-------------------------------------------------------------------- \end{mplibcode}\\ \end{document} \end{verbatim}% %############################################################################ %------------------------------------------------------------------------ -\newpage -\subsection{LaTeX file example} -%############################################################################ -\index{mcf\_setup.sty}% -\begin{verbatim} -%-------------------------------------------------------------------- -\documentclass[a4paper]{article} -\usepackage{graphicx} -\makeatletter% -%--------------------- -\usepackage{mcf_setup} -%--------------------- -\pagestyle{empty} -%-------------------------------------------------------------------- -\def\put@char{% - \begin{picture}(84,42)% - \put(0,38){\bf [\MOLnum]\EN{ }\small\tt/FM:\fm/MW:\mw}% - \put(10,0){\font\@strufont=\File\relax% - \hbox{\@strufont\char\Char}}% - \end{picture}% -}% -\def\INFO#1{\@for\@temp:=#1\do{\tag@var\@temp}\put@char}% -\makeatother -%-------------------------------------------------------------------- -\begin{document} -\unitlength=1mm% -\INFO{J:mcf_man_soc,C:141,NO:1,mw:349.40462,fm:C16H19N3O4S,EN:Ampicillin}% -\INFO{J:mcf_man_soc,C:142,NO:2,mw:386.6532,fm:C27H46O,EN:Cholesterol}% -\end{document} -%-------------------------------------------------------------------- -\end{verbatim}% -%############################################################################ -%------------------------------------------------------------------------ -\INFO{J:mcf_man_soc,C:141,NO:1,mw:349.40462,fm:C16H19N3O4S,EN:Ampicillin}% -\INFO{J:mcf_man_soc,C:142,NO:2,mw:386.6532,fm:C27H46O,EN:Cholesterol}% -%------------------------------------------------------------------------ \texttt{\printindex} %------------------------------------------------------------------------ \end{document} diff --git a/graphics/mcf2graph/mcf_mplib_exa.pdf b/graphics/mcf2graph/mcf_mplib_exa.pdf index 6aa46dabdc..9b273954bb 100644 Binary files a/graphics/mcf2graph/mcf_mplib_exa.pdf and b/graphics/mcf2graph/mcf_mplib_exa.pdf differ diff --git a/graphics/mcf2graph/mcf_mplib_exa.tex b/graphics/mcf2graph/mcf_mplib_exa.tex index de9633a4d0..60ec165ac8 100644 --- a/graphics/mcf2graph/mcf_mplib_exa.tex +++ b/graphics/mcf2graph/mcf_mplib_exa.tex @@ -1,23 +1,23 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Example of MCF typest with LuaLaTeX(luamplib) by A.Yamaji 2022.01.02 +% Example of MCF typest with LuaLaTeX(luamplib) by A.Yamaji 2022.01.17 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% ** mcf2graph.mf must be version 4.77 +% ** mcf2graph.mp must be version 4.78 % ** use mcf_data_base.mcf \documentclass{article} %------------------------------------------------------------------------------ \usepackage{luamplib}% \usepackage[T1]{fontenc}% -\usepackage{textcomp,verbatim,mcf_setup}% +\usepackage{textcomp,verbatim}% \mplibcodeinherit{enable}% \mplibverbatim{enable}% \mplibnumbersystem{double}% +\mpliblegacybehavior{disabled}% \everymplib{% - if unknown Ph1: input mcf2graph.mf; fi + if unknown Ph1: input mcf2graph; fi outputformat:="eps"; - sw_output:=Font+Info+Temp; + sw_output:=Fig+Calc; tag1:="J"; tag2:="C"; tag3:="fm"; tag4:="mw"; tag5:="EN"; tag6:="MW"; max_blength:=4.5mm; - defaultfont:="uhvr8r"; defaultsize:=8bp; defaultscale:=1; }% @@ -43,98 +43,50 @@ {{\tt FM(fm) :} molecular formula (calculated) \\ {{\tt MW(mw) :} molecular weight (calculated) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\subsection{Chlorophyll a} -\noindent% -\begin{verbatim} -beginfont("f:mcf_data_base.mcf","t:EN","v:Chlorophyll a","NO:-", - ":,||,{4,11,17,23}:red,27:green") %%%% change color of atoms %%%% - fsize:=(100mm,45mm); - if check(mc)=0: MC(scantokens(mc)) fi - ext(defaultscale:=0.8; - label.lrt("fm: "&cal_FM,(0,h-5mm)); - label.lrt("mw: "&cal_MW,(0,h-9mm)); - label.lrt("MW: "&inf_MW,(0,h-13mm));) -endfont -\end{verbatim} -%------------------------------------------------------------------------------------ -\begin{mplibcode} -beginfont("f:mcf_data_base.mcf","t:EN","v:Chlorophyll a","NO:-", - ":,||,{4,11,17,23}:red,27:green") %%%% change color of atoms %%%% - fsize:=(100mm,45mm); - if check(mc)=0: MC(scantokens(mc)) fi - ext(defaultscale:=0.8; - label.lrt("fm: "&cal_FM,(0,h-5mm)); - label.lrt("mw: "&cal_MW,(0,h-9mm)); - label.lrt("MW: "&inf_MW,(0,h-13mm));) -endfont -\end{mplibcode} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\subsection{Dinophysistoxin-1} +\subsection{Erythromycin} \noindent% +%---------------------------------------------------------------------------- +( pass mcf to MC() ) \begin{verbatim} -beginfont("t:EN","v:Okadaic acid","EN:Dinophysistoxin-1", - "MW:819",":,38:*/_,65=red") %%%% add methyl group (color red) %%%% - fsize:=(150mm,35mm); - if check(mc)=0: MC(scantokens(mc)) fi +beginfigm("EN:Erythromycin","MW:733.93") + fsize:=(120mm,30mm); + MC( + <30,#1,<-120,60,60,60,-60,60,60,-60,60,60,60,-60,60,60,##,&1, + 14:O,13:/*Et,{1,9}://O,{2',4,6^-35,8,10',12^35}:/*_, + {6^35,11,12^-35}:*/OH, + @$3,\*,O,30~zb,|,?6`.7,6:O,#.5,{5~wf,3^35}:/_,4:/*OH,3^-35:/*O!,##, + @$5,\*^30`1.7,O,!~zb,|,?6`.7,6:O,#.5,5:/*_,2:*/OH,3:/*N?! + ) ext(defaultscale:=0.8; label.lrt("fm: "&cal_FM,(0,h-5mm)); label.lrt("mw: "&cal_MW,(0,h-9mm)); label.lrt("MW: "&inf_MW,(0,h-13mm));) -endfont; +endfigm; \end{verbatim} %---------------------------------------------------------------------------- \begin{mplibcode} -beginfont("t:EN","v:Okadaic acid","EN:Dinophysistoxin-1", - "MW:819",":,38:*/_,65=red") %%%% add methyl group (color red) %%%% - fsize:=(150mm,35mm); - if check(mc)=0: MC(scantokens(mc)) fi - ext(defaultscale:=0.8; - label.lrt("fm: "&cal_FM,(0,h-5mm)); - label.lrt("mw: "&cal_MW,(0,h-9mm)); - label.lrt("MW: "&inf_MW,(0,h-13mm));) -endfont; -\end{mplibcode} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\newpage -\subsection{Erythromycin} -\noindent% -%---------------------------------------------------------------------------- -\begin{verbatim} -beginfont("EN:Erythromycin","MW:733.93", - %------------------------------------------------------------------------ - ": <30,#1,<-120,60,60,60,-60,60,60,-60,60,60,60,-60,60,60,##,&1, ", - ": 14:O,13:/*Et,{1,9}://O,{2',4,6^-35,8,10',12^35}:/*_, ", - ": {6^35,11,12^-35}:*/OH, ", - ": @$3,\*,O,30~zb,|,?6`.7,6:O,#.5,{5~wf,3^35}:/_,4:/*OH,3^-35:/*O!,##, ", - ": @$5,\*^30`1.7,O,!~zb,|,?6`.7,6:O,#.5,5:/*_,2:*/OH,3:/*N?! ") - %------------------------------------------------------------------------ +beginfigm("EN:Erythromycin","MW:733.93") fsize:=(120mm,30mm); - if check(mc)=0: MC(scantokens(mc)) fi -endfont; -\end{verbatim} -%---------------------------------------------------------------------------- -\begin{mplibcode} -beginfont("EN:Erythromycin","MW:733.93", - %------------------------------------------------------------------------ - ": <30,#1,<-120,60,60,60,-60,60,60,-60,60,60,60,-60,60,60,##,&1, ", - ": 14:O,13:/*Et,{1,9}://O,{2',4,6^-35,8,10',12^35}:/*_, ", - ": {6^35,11,12^-35}:*/OH, ", - ": @$3,\*,O,30~zb,|,?6`.7,6:O,#.5,{5~wf,3^35}:/_,4:/*OH,3^-35:/*O!,##, ", - ": @$5,\*^30`1.7,O,!~zb,|,?6`.7,6:O,#.5,5:/*_,2:*/OH,3:/*N?! ") - %------------------------------------------------------------------------ - fsize:=(120mm,30mm); - if check(mc)=0: MC(scantokens(mc)) fi + MC( + <30,#1,<-120,60,60,60,-60,60,60,-60,60,60,60,-60,60,60,##,&1, + 14:O,13:/*Et,{1,9}://O,{2',4,6^-35,8,10',12^35}:/*_, + {6^35,11,12^-35}:*/OH, + @$3,\*,O,30~zb,|,?6`.7,6:O,#.5,{5~wf,3^35}:/_,4:/*OH,3^-35:/*O!,##, + @$5,\*^30`1.7,O,!~zb,|,?6`.7,6:O,#.5,5:/*_,2:*/OH,3:/*N?! + ) ext(defaultscale:=0.8; label.lrt("fm: "&cal_FM,(0,h-5mm)); label.lrt("mw: "&cal_MW,(0,h-9mm)); - label.lrt("MW: "&inf_MW,(0,h-13mm));) -endfont; + label.lrt("MW: "&inf_MW,(0,h-13mm)); + ) +endfigm; \end{mplibcode} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Paclitaxel} \noindent% +( pass mcf to beginfigm() ) \begin{verbatim} -beginfont("EN:Paclitaxel","MW:853.918", +beginfigm("EN:Paclitaxel","MW:853.918", %--------------------------------------------------------------------- ": ?6,5=dl,@3,#1,36,45,45,45,45,##,&5,-4=?6,-4=?4,-1=wb,-3=wf,-1:O, ", ": 4:??,6:/_,{3^-60,15}:*/OH,8:/*H^-60,9:*/_^60,10://O, ", @@ -143,11 +95,11 @@ beginfont("EN:Paclitaxel","MW:853.918", %--------------------------------------------------------------------- fsize:=(120mm,30mm); if check(mc)=0: MC(scantokens(mc)) fi -endfont +endfigm \end{verbatim} %---------------------------------------------------------------------------- \begin{mplibcode} -beginfont("EN:Paclitaxel","MW:853.918", +beginfigm("EN:Paclitaxel","MW:853.918", %--------------------------------------------------------------------- ": ?6,5=dl,@3,#1,36,45,45,45,45,##,&5,-4=?6,-4=?4,-1=wb,-3=wf,-1:O, ", ": 4:??,6:/_,{3^-60,15}:*/OH,8:/*H^-60,9:*/_^60,10://O, ", @@ -160,83 +112,105 @@ beginfont("EN:Paclitaxel","MW:853.918", label.lrt("fm: "&cal_FM,(0,h-5mm)); label.lrt("mw: "&cal_MW,(0,h-9mm)); label.lrt("MW: "&inf_MW,(0,h-13mm));) -endfont +endfigm \end{mplibcode} %---------------------------------------------------------------------------- -\subsection{Kekulene} +\newpage +\subsection{Chlorophyll a} \noindent% +( read data-base file ) \begin{verbatim} -beginfont("EN:Kekulene","MW:600.7", - %------------------------------------------------------------------------------ - ": <30,?6,{3,-3,-2,-3,-2,-3,-2,-3,-2,-3,(-2',5'),(5',-4')}=?6, ", - ": {1,5',7,9,11,13,17,19,21,23,27,29,31,33,37,39,41,43,47,49,51,53,57,60}=dl ") - %------------------------------------------------------------------------------ - fsize:=(120mm,25mm); +beginfigm("f:mcf_data_base.mcf","t:EN","v:Chlorophyll a","NO:-") + sw_output:=Fig+Calc+Mcode; %%%% output temp-mc.aux %%%% + fsize:=(100mm,30mm); if check(mc)=0: MC(scantokens(mc)) fi -endfont +endfigm +\end{mplibcode} +\verbatiminput{temp-mc.aux} %%%% input temp-mc.aux %%%% \end{verbatim} -%---------------------------------------------------------------------------- +%------------------------------------------------------------------------------------ \begin{mplibcode} -beginfont("EN:Kekulene","MW:600.7", - ": <30,?6,{3,-3,-2,-3,-2,-3,-2,-3,-2,-3,(-2',5'),(5',-4')}=?6, ", - ": {1,5',7,9,11,13,17,19,21,23,27,29,31,33,37,39,41,43,47,49,51,53,57,60}=dl ") - fsize:=(120mm,25mm); +beginfigm("f:mcf_data_base.mcf","t:EN","v:Chlorophyll a","NO:-") + sw_output:=Fig+Calc+Mcode; fsize:=(100mm,30mm); if check(mc)=0: MC(scantokens(mc)) fi - ext(defaultscale:=0.8; - label.lrt("fm: "&cal_FM,(0,h-5mm)); - label.lrt("mw: "&cal_MW,(0,h-9mm)); - label.lrt("MW: "&inf_MW,(0,h-13mm));) -endfont +endfigm \end{mplibcode} +\verbatiminput{temp-mc.aux} %%%% input temp-mc.aux %%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Dinophysistoxin-1} +\noindent% +( read data-base file + pass mcf to beginfigm() ) +\begin{verbatim} +beginfigm("t:EN","v:Okadaic acid","EN:Dinophysistoxin-1", + "MW:819",":,38:*/_,65=red") %%%% add methyl group (color red) %%%% + sw_output:=Fig+Calc+Mcode; %%%% output temp-mc.aux %%%% + fsize:=(120mm,20mm); + if check(mc)=0: MC(scantokens(mc)) + VerbatimTeX("\gdef\EN{"&inf_EN&"}"); + VerbatimTeX("\gdef\MW{"&inf_MW&"}"); + VerbatimTeX("\gdef\mw{"&cal_MW&"}"); + VerbatimTeX("\gdef\fm{"&cal_FM&"}"); + fi +endfigm; +\end{mplibcode} +\verbatiminput{temp-mc.aux} %%%% input temp-mc.aux %%%% +{\tt ** EN:\EN \quad mw:\MW \quad MW:\mw \quad fm:\fm}% +\end{verbatim} +%---------------------------------------------------------------------------- +\begin{mplibcode} +beginfigm("t:EN","v:Okadaic acid","EN:Dinophysistoxin-1", + "MW:819",":,38:*/_,65=red") %%%% add methyl group (color red) %%%% + sw_output:=Fig+Calc+Mcode; %%%% output temp-mc.aux %%%% + fsize:=(120mm,20mm); + if check(mc)=0: MC(scantokens(mc)) + VerbatimTeX("\gdef\EN{"&inf_EN&"}"); + VerbatimTeX("\gdef\MW{"&inf_MW&"}"); + VerbatimTeX("\gdef\mw{"&cal_MW&"}"); + VerbatimTeX("\gdef\fm{"&cal_FM&"}"); + fi +endfigm; +\end{mplibcode} +\verbatiminput{temp-mc.aux} %%%% input temp-mc.aux %%%% +{\tt ** EN:\EN \quad mw:\MW \quad MW:\mw \quad fm:\fm}% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newpage %---------------------------------------------------------------------------- \subsection{Maitotoxin} \noindent% +( read data-base file ) %-------------------------------------------------------------------------------- \begin{verbatim} %-------------------------------------------------------------------------------- \begin{mplibcode} - beginfont("t:EN","v:Maitotoxin") - sw_output:=Info+Mcode+Temp; %%%% output temp-info,temp-mc.aux %%%% - endfont; -\end{mplibcode} -\verbatiminput{temp-mc.aux} %%%% input temp-mc.aux %%%% -\begin{mplibcode} - beginfont("t:EN","v:Maitotoxin") + beginfigm("t:EN","v:Maitotoxin") + sw_output:=Fig+Calc+Mcode; %%%% output temp-mc.aux %%%% fsize:=(120mm,60mm); fmargin:=(0,3mm); sw_frame:=Outside; - if check(mc)=0: MC(scantokens(mc)) fi %%%% output font %%%% - endfont + if check(mc)=0: MC(scantokens(mc)) + VerbatimTeX("\gdef\EN{"&inf_EN&"}"); + VerbatimTeX("\gdef\MW{"&inf_MW&"}"); + VerbatimTeX("\gdef\mw{"&cal_MW&"}"); + VerbatimTeX("\gdef\fm{"&cal_FM&"}"); + fi + endfigm \end{mplibcode} -%-------------------------------------------------------------------------------- -\newread\auxfile% -\openin\auxfile=temp-info.aux %%%% input temp-info.aux %%%% -\read\auxfile to \info% -\infotovar{\info} %%%% info to variables %%%% -\closein\auxfile% +\verbatiminput{temp-mc.aux} %%%% input temp-mc.aux %%%% {\tt ** EN:\EN \quad mw:\MW \quad MW:\mw \quad fm:\fm}% %-------------------------------------------------------------------------------- \end{verbatim} %-------------------------------------------------------------------------------- \begin{mplibcode} - beginfont("t:EN","v:Maitotoxin") - sw_output:=Info+Mcode+Temp; %%%% output temp-info.aux %%%% - if check(mc)=0: MC(scantokens(mc)) fi - endfont -\end{mplibcode} -\begin{mplibcode} - beginfont("t:EN","v:Maitotoxin") + beginfigm("t:EN","v:Maitotoxin") + sw_output:=Fig+Calc+Mcode; fsize:=(120mm,60mm); fmargin:=(0,3mm); sw_frame:=Outside; - if check(mc)=0: MC(scantokens(mc)) fi %%%% output font %%%% - endfont + if check(mc)=0: MC(scantokens(mc)) + VerbatimTeX("\gdef\EN{"&inf_EN&"}"); + VerbatimTeX("\gdef\MW{"&inf_MW&"}"); + VerbatimTeX("\gdef\mw{"&cal_MW&"}"); + VerbatimTeX("\gdef\fm{"&cal_FM&"}"); + fi + endfigm \end{mplibcode} -%-------------------------------------------------------------------------------- -\newread\auxfile% -\openin\auxfile=temp-info.aux %%%% input temp-info.aux %%%% -\read\auxfile to \info% -\infotovar{\info} %%%% info to variables %%%% -\closein\auxfile% -\verbatiminput{temp-mc.aux} %%%% input temp-mc.aux %%%% +\verbatiminput{temp-mc.aux} {\tt ** EN:\EN \quad mw:\MW \quad MW:\mw \quad fm:\fm}% %-------------------------------------------------------------------------------- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -244,7 +218,7 @@ endfont \subsection{TCA cycle} \noindent% \begin{mplibcode} -beginfont("EN:TCA cycle") +beginfigm("EN:TCA cycle") fsize:=(160mm,75mm); max_blength:=5mm; %-------------------------------------------------------------------------------- @@ -306,11 +280,11 @@ r_arrow(10mm)( 0)(p10+( 1.1w10,0.3h10))("NAD+",1)("NADH2+",1.5); defaultscale:=1.5; label("TCA-cycle",(0.5w,0.5h)); ) -endfont +endfigm \end{mplibcode} %------------------------------------------------------------------------ \begin{verbatim} -beginfont("EN:TCA cycle") +beginfigmy"EN:TCA cycle") fsize:=(160mm,75mm); max_blength:=5mm; COOH:='(//O,!,OH); @@ -350,7 +324,7 @@ r_arrow(10mm)( 0)(p10+( 1.1w10,0.3h10))("NAD+",1)("NADH2+",1.5); defaultscale:=1.5; label("TCA-cycle",(0.5w,0.5h)); ) -endfont +endfigm \end{verbatim} %---------------------------------------------------------------------------- \end{document} diff --git a/graphics/mcf2graph/mcf_setup.sty b/graphics/mcf2graph/mcf_setup.sty deleted file mode 100644 index 2b05d87138..0000000000 --- a/graphics/mcf2graph/mcf_setup.sty +++ /dev/null @@ -1,90 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% mcf_setup.sty for input aux file by Akira Yamaji 2021.09.20 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%------------------------------------ -\edef\@J{J} \edef\Job{}% 1 -\edef\@C{C} \edef\Char{}% 2 -%------------------------------------ -\edef\@NO{NO} \edef\NO{}% 3 -\edef\@EN{EN} \edef\EN{}% 4 -\edef\@JN{JN} \edef\JN{}% 5 -\edef\@CAS{CAS} \edef\CAS{}% 6 -%------------------------------------ -\edef\@MW{MW} \edef\MW{}% 7 -\edef\@mw{mw} \edef\mw{}% 8 -\edef\@MI{MI} \edef\MI{}% 9 -\edef\@mi{mi} \edef\mi{}% 10 -\edef\@FM{FM} \edef\FM{}% 11 -\edef\@fm{fm} \edef\fm{}% 12 -%------------------------------------ -\edef\@Wd{w} \edef\Wd{}% 13 -\edef\@Ht{h} \edef\Ht{}% 14 -\edef\@Wone{w1} \edef\Wone{}% 15 -\edef\@Hone{h1} \edef\Hone{}% 16 -%------------------------------------ -\edef\@Use{Use} \edef\Use{}% 17 -\edef\@LogP{LogP} \edef\LogP{}% 18 -%------------------------------------ -\edef\@EXA{EXA} \edef\EXA{}% 19 -\edef\@EXB{EXB} \edef\EXB{}% 20 -%------------------------------------ -\edef\@Cat{Cat} \edef\Cat{}% 21 -%--------------------------------------------------------------------------- -\edef\@pk{pk}% -\edef\@mps{mps}% -\edef\@eps{eps}% -\edef\@png{png}% -\edef\@png{svg}% -%--------------------------------------------------------------------------- -\def\@tag@param#1:#2;{#1}% -\def\@var@param#1:#2;{#2}% -%---------------------------------------- -\def\tag@var#1{% -\if#1\empty\relax\else% - \edef\@tag{\expandafter\@tag@param#1;}% - \edef\@var{\expandafter\@var@param#1;}% - %---------------------------------------- - \ifx\@tag\@J\edef\Job{\@var}\fi% 1 - %---------------------------------------- - \ifx\@tag\@C\edef\Char{\@var}\fi% 2 - %---------------------------------------- - \ifx\@tag\@NO\edef\NO{\@var}\fi% 3 - \ifx\@tag\@EN\edef\EN{\@var}\fi% 4 - \ifx\@tag\@JN\edef\JN{\@var}\fi% 5 - \ifx\@tag\@CAS\edef\CAS{\@var}\fi% 6 - %---------------------------------------- - \ifx\@tag\@MW\edef\MW{\@var}\fi% 7 - \ifx\@tag\@mw\edef\mw{\@var}\fi% 8 - \ifx\@tag\@MI\edef\MI{\@var}\fi% 9 - \ifx\@tag\@mi\edef\mi{\@var}\fi% 10 - \ifx\@tag\@FM\edef\FM{\@var}\fi% 11 - \ifx\@tag\@fm\edef\fm{\@var}\fi% 12 - %---------------------------------------- - \ifx\@tag\@Wd\edef\Wd{\@var}\fi% 13 - \ifx\@tag\@Ht\edef\Ht{\@var}\fi% 14 - \ifx\@tag\@Wone\edef\Wone{\@var}\fi% 15 - \ifx\@tag\@Hone\edef\Hone{\@var}\fi% 16 - %---------------------------------------- - \ifx\@tag\@Use\edef\Use{\@var}\fi% 17 - \ifx\@tag\@LogP\edef\LogP{\@var}\fi% 18 - %---------------------------------------- - \ifx\@tag\@EXA\edef\EXA{\@var}\fi% 19 - \ifx\@tag\@EXB\edef\EXB{\@var}\fi% 20 - %---------------------------------------- - \ifx\@tag\@Cat\edef\Cat{\@var}\fi% 21 -\fi% -}% -%----------------------------------------------------------------------------- -\def\z@num#1{\ifnum#1<10 00\the#1\else\ifnum#1<100 0\the#1\else \the#1\fi\fi}% -%----------------------------------------------------------------------------- -\def\infotovar#1{\@sfor#1{\tag@var\@list}}% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% sfor : modified latex2e kernel program control -% @for => @sfor delimiter ',' => ';' -%----------------------------------------------------------------------------- -\def\@sfor#1#2{\expandafter\def\expandafter\@tmp\expandafter{#1}% - \ifx\@tmp\@empty\else\expandafter\@rep#1;\@nil;\@@\@list{#2}\fi}% -%------------------------------------------------------------------ -\def\@rep#1;#2\@@#3#4{\def#3{#1}\ifx#3\@nnil% - \expandafter\@fornoop\else#4\relax\expandafter\@rep\fi#2\@@#3{#4}}% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/macros/latex/contrib/apa7/README.txt b/macros/latex/contrib/apa7/README.txt index ed40d4d6dd..6a5bee83b0 100644 --- a/macros/latex/contrib/apa7/README.txt +++ b/macros/latex/contrib/apa7/README.txt @@ -3,7 +3,7 @@ apa7 - A LaTeX class for formatting documents in compliance with the American Psychological Association's Publication Manual, 7th edition -Copyright (C) 2021 by Daniel A. Weiss +Copyright (C) 2022 by Daniel A. Weiss This work may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either diff --git a/macros/latex/contrib/apa7/apa7.dtx b/macros/latex/contrib/apa7/apa7.dtx index 3e572a7393..045adf9b03 100644 --- a/macros/latex/contrib/apa7/apa7.dtx +++ b/macros/latex/contrib/apa7/apa7.dtx @@ -4,11 +4,11 @@ % % % CHANGE THESE VALUES WITH EACH NEW RELEASE: % % % -%\ProvidesClass{apa7}[2021/11/21 v2.14 APA formatting (7th edition)] +%\ProvidesClass{apa7}[2022/01/03 v2.15 APA formatting (7th edition)] % % %<*internal> % -\def\apaSevenVersionDate{2021/11/21} -\def\apaSevenVersionNumber{2.14} +\def\apaSevenVersionDate{2022/01/03} +\def\apaSevenVersionNumber{2.15} % % % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -20,7 +20,7 @@ apa7 - A LaTeX class for formatting documents in compliance with the American Psychological Association's Publication Manual, 7th edition -Copyright (C) 2021 by Daniel A. Weiss +Copyright (C) 2022 by Daniel A. Weiss This work may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either @@ -68,7 +68,7 @@ Installation Notes: apa7 - A LaTeX class for formatting documents in compliance with the American Psychological Association's Publication Manual, 7th edition -Copyright (C) 2021 by Daniel A. Weiss +Copyright (C) 2022 by Daniel A. Weiss This work may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either @@ -88,7 +88,7 @@ by, the American Psychological Association. \endpreamble \postamble -Copyright (C) 2021 by Daniel A. Weiss +Copyright (C) 2022 by Daniel A. Weiss This work may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either @@ -286,6 +286,8 @@ and the derived files apa7.ins, % % \changes{v2.14}{2021/08/08}{Added Spanish localization. Fixed compatibility with Version 4.0 of flushend.sty. Clarify installation in readme. } % +% \changes{v2.15}{2022/01/03}{Spacing updated to more closely match APA 7th Edition Manual.} +% % \begin{abstract} % The \textit{Publication Manual} of the American Psychological % Association is widely used in the social sciences. The most @@ -369,10 +371,8 @@ and the derived files apa7.ins, % main one. % \item \DescribeMacro{donotrepeattitle}|donotrepeattitle|: Suppress the title above the % introduction (in case a different title is desired). -% \item \DescribeMacro{noextraspace}|noextraspace|: In |man| and |stu| mode, -% removes some of the vertical space between certain elements (e.g., -% headers and text) in an attempt to more closely resemble true -% double-spacing (use at your own risk). +% \item \DescribeMacro{noextraspace}|noextraspace|: Removed option in version 2.15 +% in an attempt to more closely match APA 7th edition guidelines (will throw error if used). % \item \DescribeMacro{floatsintext}|floatsintext|: In |man| and |stu| mode, % integrates floats (tables and figures) within the body of the text % instead of postponing them until after the reference list. @@ -1142,7 +1142,7 @@ and the derived files apa7.ins, % remove extra space around headings, etc., in man mode \DeclareOption{noextraspace}{% - \def\def@noextraspace{\@noextraspacemode} + \ClassError{apa7}{Option removed: no longer uses as of version 2.15}{Spacing updated to more closely match APA 7th Edition Manual} } % suppress the title at the introduction (in case a different title is desired) @@ -1755,14 +1755,12 @@ and the derived files apa7.ins, \newskip\e@level@two@skip \e@level@two@skip=1.5ex plus .6ex minus .1ex \newskip\b@level@three@skip \b@level@three@skip=2.0ex plus .8ex minus .2ex \newskip\e@level@three@skip \e@level@three@skip=1.5ex plus .6ex minus .1ex -\newskip\b@level@four@skip \b@level@four@skip=1.8ex plus .8ex minus .2ex -\newskip\e@level@four@skip \e@level@four@skip=1.5ex plus .6ex minus .1ex -\newskip\b@level@five@skip \b@level@five@skip=1.8ex plus .8ex minus .2ex -\newskip\e@level@five@skip \e@level@five@skip=0ex +\newskip\b@level@four@skip \b@level@four@skip=0\baselineskip \@plus 0.2ex \@minus 0.2ex +\newskip\e@level@four@skip \e@level@four@skip=-0.5em +\newskip\b@level@five@skip \b@level@five@skip=0\baselineskip \@plus 0.2ex \@minus 0.2ex +\newskip\e@level@five@skip \e@level@five@skip=-0.5em \ifapamodeman{% - \@ifundefined{def@noextraspace}{}{% - % redefine the vertical section spacing \b@level@one@skip=0.2\baselineskip \@plus 0.2ex \@minus 0.2ex \e@level@one@skip=0.2\baselineskip \@plus .2ex \b@level@two@skip=0.2\baselineskip \@plus 0.2ex \@minus 0.2ex @@ -1770,14 +1768,11 @@ and the derived files apa7.ins, \b@level@three@skip=0.2\baselineskip \@plus 0.2ex \@minus 0.2ex \e@level@three@skip=0.2\baselineskip \@plus 0.2ex \b@level@four@skip=0\baselineskip \@plus 0.2ex \@minus 0.2ex - \e@level@four@skip=-\z@ + \e@level@four@skip=-0.5em \b@level@five@skip=0\baselineskip \@plus 0.2ex \@minus 0.2ex - \e@level@five@skip=0ex - } + \e@level@five@skip=-0.5em }{} - - %========== APA Section heading & seriation, adapted from class apa6e % % Below is the license statement from the apa6e class, from which a @@ -1833,13 +1828,13 @@ and the derived files apa7.ins, {\normalfont\normalsize\bfseries\itshape}} \renewcommand{\paragraph}{\@startsection{paragraph}{4}{\parindent}% - {0\baselineskip \@plus 0.2ex \@minus 0.2ex}% - {-1em}% + {\b@level@four@skip}% + {\e@level@four@skip}% {\normalfont\normalsize\bfseries\typesectitle}} \renewcommand{\subparagraph}[1]{\@startsection{subparagraph}{5}{1em}% - {0\baselineskip \@plus 0.2ex \@minus 0.2ex}% - {-\z@\relax}% + {\b@level@five@skip}% + {\e@level@five@skip}% {\normalfont\normalsize\bfseries\itshape\hspace{\parindent}{#1}\textit{\addperi}}{\relax}} % make the References section non-boldface @@ -2601,9 +2596,7 @@ and the derived files apa7.ins, \vspace*{4\baselineskip} \textbf\@title% \ifapamodeman{% - \@ifundefined{def@noextraspace}{% - \vspace{\baselineskip}\\ - }{\\} + \vspace{\baselineskip}\\ }{% \vspace{\baselineskip}\\ } diff --git a/macros/latex/contrib/apa7/apa7.ins b/macros/latex/contrib/apa7/apa7.ins index 3235d95787..ff008168cb 100644 --- a/macros/latex/contrib/apa7/apa7.ins +++ b/macros/latex/contrib/apa7/apa7.ins @@ -10,7 +10,7 @@ %% apa7 - A LaTeX class for formatting documents in compliance with the %% American Psychological Association's Publication Manual, 7th edition %% -%% Copyright (C) 2021 by Daniel A. Weiss +%% Copyright (C) 2022 by Daniel A. Weiss %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License (LPPL), either @@ -36,7 +36,7 @@ apa7 - A LaTeX class for formatting documents in compliance with the American Psychological Association's Publication Manual, 7th edition -Copyright (C) 2021 by Daniel A. Weiss +Copyright (C) 2022 by Daniel A. Weiss This work may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either @@ -56,7 +56,7 @@ by, the American Psychological Association. \endpreamble \postamble -Copyright (C) 2021 by Daniel A. Weiss +Copyright (C) 2022 by Daniel A. Weiss This work may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either @@ -124,7 +124,7 @@ and the derived files apa7.ins, } \endbatchfile %% -%% Copyright (C) 2021 by Daniel A. Weiss +%% Copyright (C) 2022 by Daniel A. Weiss %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License (LPPL), either diff --git a/macros/latex/contrib/apa7/apa7.pdf b/macros/latex/contrib/apa7/apa7.pdf index d3e53c5c89..0afc73cd3c 100644 Binary files a/macros/latex/contrib/apa7/apa7.pdf and b/macros/latex/contrib/apa7/apa7.pdf differ diff --git a/macros/latex/contrib/apa7/samples/longsample.pdf b/macros/latex/contrib/apa7/samples/longsample.pdf index 3d474216f2..a259e67721 100644 Binary files a/macros/latex/contrib/apa7/samples/longsample.pdf and b/macros/latex/contrib/apa7/samples/longsample.pdf differ diff --git a/macros/latex/contrib/apa7/samples/shortsample.pdf b/macros/latex/contrib/apa7/samples/shortsample.pdf index 370ffb18af..77b7232966 100644 Binary files a/macros/latex/contrib/apa7/samples/shortsample.pdf and b/macros/latex/contrib/apa7/samples/shortsample.pdf differ diff --git a/macros/latex/contrib/bewerbung/README b/macros/latex/contrib/bewerbung/README index f30014d41b..ac69f80e69 100644 --- a/macros/latex/contrib/bewerbung/README +++ b/macros/latex/contrib/bewerbung/README @@ -7,11 +7,11 @@ printing a table with the latest applications that can be shown to the german authorities. The data of the applications can be edited in a simple csv file. + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+ - Version: 1.2 - Last Change: 2020-11-24 + Version: 1.3 + Last Change: 2022-01-17 Current Maintainer: André Hilbig mail@andrehilbig.de - https://www.andrehilbig.de/index.cgi/Publications/Bewerbung + https://git.andrehilbig.de/ahilbig/vorlagebewerbung + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+ This work may be distributed and/or modified under the diff --git a/macros/latex/contrib/bewerbung/README_DE b/macros/latex/contrib/bewerbung/README_DE index d28d486fad..17b7b3d69b 100644 --- a/macros/latex/contrib/bewerbung/README_DE +++ b/macros/latex/contrib/bewerbung/README_DE @@ -8,11 +8,11 @@ vorgelegt werden kann. Die Daten der Bewerbungsversuche werden in einer simplen csv-Datei verwaltet. + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+ - Version: 1.2 - Last Change 2020-11-24 + Version: 1.3 + Last Change 2022-01-17 Current Maintainer: André Hilbig mail@andrehilbig.de - https://www.andrehilbig.de/index.cgi/Publications/Bewerbung + https://git.andrehilbig.de/ahilbig/vorlagebewerbung + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+ This work may be distributed and/or modified under the diff --git a/macros/latex/contrib/bewerbung/argetabelle-example.pdf b/macros/latex/contrib/bewerbung/argetabelle-example.pdf index 7d795ce9e7..9bcbc0c7c5 100644 Binary files a/macros/latex/contrib/bewerbung/argetabelle-example.pdf and b/macros/latex/contrib/bewerbung/argetabelle-example.pdf differ diff --git a/macros/latex/contrib/bewerbung/bewerbung-example.pdf b/macros/latex/contrib/bewerbung/bewerbung-example.pdf index 5a563556ea..70b68fd5c1 100644 Binary files a/macros/latex/contrib/bewerbung/bewerbung-example.pdf and b/macros/latex/contrib/bewerbung/bewerbung-example.pdf differ diff --git a/macros/latex/contrib/bewerbung/bewerbung.dtx b/macros/latex/contrib/bewerbung/bewerbung.dtx index 3081b10a14..4ccf2e27cd 100644 --- a/macros/latex/contrib/bewerbung/bewerbung.dtx +++ b/macros/latex/contrib/bewerbung/bewerbung.dtx @@ -1,20 +1,20 @@ %\iffalse % bewerbung.dtx generated using makedtx version 0.94b (c) Nicola Talbot % Command line args: +% -date "2022-01-17:16:26:37 -- Version 1.3" +% -comment "neueBewerbung.sh" +% -comment "config.inc=>config.inc" +% -author "André Hilbig, mail@andrehilbig.de" +% -codetitle "Implementation" +% -macrocode "neueBewerbung.sh" % -src "(.*)\.sty=>\1.sty" % -src "(.*)\.cls=>\1.cls" % -src "neueBewerbung.sh=>neueBewerbung.sh" % -src "(.*)\.inc=>\1.inc" -% -codetitle "Implementation" -% -author "André Hilbig, mail@andrehilbig.de" % -doc "../dokumentation.tex" % -setambles "neueBewerbung.sh=>\nopreamble\nopostamble" -% -date "2020-11-24:11:30:14 -- Version 1.2" -% -macrocode "neueBewerbung.sh" -% -comment "neueBewerbung.sh" -% -comment "config.inc=>config.inc" % bewerbung -% Created on 2020-11-24:11:30:14 -- Version 1.2/11/24 11:30 +% Created on 2022-01-17:16:26:37 -- Version 1.3/1/17 16:26 %\fi %\iffalse %<*package> @@ -37,7 +37,7 @@ %\fi % \iffalse % Doc-Source file to use with LaTeX2e -% Copyright (C) 2020-11-24:11:30:14 -- Version 1.2 André Hilbig, mail@andrehilbig.de, all rights reserved. +% Copyright (C) 2022-01-17:16:26:37 -- Version 1.3 André Hilbig, mail@andrehilbig.de, all rights reserved. % \fi % \iffalse %<*driver> @@ -220,7 +220,7 @@ \xspaceaddexceptions{\guillemotright,\guillemotleft} -\CheckSum{2181} +\CheckSum{2158} \begin{document} @@ -233,8 +233,8 @@ % \LaTeX-Klassen und -Pakete zum Setzen schöner Bewerbungsmappen und einer % Übersichtstabelle zur Dokumentation der Bewerbungsversuche} % \author{Andr\'e Hilbig \\ \texttt{mail@andrehilbig.de} \\ -% \url{http://www.andrehilbig.de/index.cgi/Publications/Bewerbung}} -% \date{2020-11-24} +% \url{https://git.andrehilbig.de/ahilbig/vorlagebewerbung}} +% \date{2022-01-17} % \maketitle % \begin{abstract} % \foreignlanguage{english}{ @@ -325,11 +325,6 @@ % \item Satz in der Dokumentation überarbeitet % \item Kontaktdaten in den READMEs korrigiert % \end{itemize} -% \item[v1.2] -% \begin{itemize} -% \item Anpassungen an neuere \LaTeX Versionen durchgeführt -% \item Kleinere Anpassungen an die Titelseite -% \end{itemize} % \end{description} % % \section{Installation} @@ -442,6 +437,11 @@ % Der Befehl |\Sta|\marg{Staatsangehörigkeit} legt die Staatsangehörigkeit fest und % |\GebDatum|\marg{Geburtsdatum} definiert das Geburtsdatum. % +% \DescribeMacro{\LebenslaufTitel} +% Der Befehl |\LebenslaufTitel|\marg{Titel} ändert den Titel des Lebenslauf. Standardmäßig +% wird \textit{Curriculum Vitae} verwendet. So kann bspw. auch \textit{Lebenslauf} als Titel +% gesetzt werden. +% % \DescribeMacro{\ID} % Durch das Makro |\ID|\marg{Identifikation} wird die Nummer der aktuellen Bewerbung % angegeben. Damit werden die Daten der aktuellen Bewerbung aus einer Datei ausgelesen. @@ -453,8 +453,7 @@ % Der Klasse |bewerbung| kann die Option |idPlain| übergeben werden. Dann wird nach % der exakten Übereinstimmung der hier notierten Identifikation mit dem Feld ID gesucht. % Dies muss keine Zahl sein. Wird keine Option übergeben wird die notierte Zahl als -% Zeilennummer startend bei 0 interpretiert. Außerdem kann man die Option |nophone| -% übergeben, um das Telefonfeld auszublenden. +% Zeilennummer startend bei 0 interpretiert. % % \DescribeMacro{\Anhang}\label{Anhang} % An zwei Stellen in einer Bewerbung werden angehangene Dokumente ausgewiesen: Titelseite @@ -671,7 +670,7 @@ % wird |classic| verwendet. Dieser Stil wurde leicht an den aus |komacv| angepasst. Außerdem % wurden die Stile |casual| und |old-style| aus |komacv| ohne Bearbeitung importiert % \autocite[vgl.][]{komacv}. -% \item{|idPlain|} In der Datei |anschrift| müssen bereits die aktuellen Informationen zu +% \item{|idPlain|} In der Datei |anschrift| müssen bereits die aktuellen Daten zu % dieser Bewerbung vorliegen. Über den Befehl |\ID|\marg{Identifikation} kann die zu % verwendende Bewerbung angegeben werden (vgl. \prettyref{sec:konfiguration}). Durch die % Angabe der Option |idPlain| kann erzwungen werden, dass nach dem exakten Eintrag in @@ -1275,10 +1274,10 @@ % name and title % \begin{macrocode} \begin{minipage}[b]{\@titlenamewidth}% - \firstnamestyle{\firstname}\\[0.75em] % % \end{macrocode} %% ahilbig begin % \begin{macrocode} + \firstnamestyle{\firstname}\\ % \familynamestyle{\familyname}% \ifdefempty{\acadtitle}{}{% \\[1.25em]\acadtitlestyle{\acadtitle}}% @@ -3022,7 +3021,7 @@ % % \begin{macro}{\tel} % \begin{macrocode} -\providecommand{\tel}{empty} +\providecommand{\tel}{} % \end{macrocode} % \end{macro} % @@ -3050,10 +3049,10 @@ % \begin{macrocode} \ProvideDocumentCommand{\anhang}{o}{% \IfNoValueTF{#1}{% - \lebenslaufTitel.\anhangTmpFlat + Curriculum Vitae.\anhangTmpFlat }{% \item Anschreiben - \item \lebenslaufTitel + \item Curriculum Vitae \anhangTmpList } % } @@ -3427,9 +3426,7 @@ \providecommand{\runKomaVar}{% \setkomavar{fromname}{\fullname} % \setkomavar{fromaddress}{\street\\\plz\xspace\stadt} % - \ifthenelse{\equal{\tel}{empty}}{}{% - \setkomavar{fromphone}[\Telefon\enskip]{\tel} % - }% + \setkomavar{fromphone}[\Telefon\enskip]{\tel} % \setkomavar{fromfax}[\Mobilefone\enskip]{\mobile} % \setkomavar{fromemail}[\Letter\enskip]{\email} % \setkomavar{signature}{\vorname\xspace\name} % @@ -3450,9 +3447,7 @@ \renewcommand*{\addressstreet}{\street} % \renewcommand*{\addresscity}{\plz\xspace\stadt} % \renewcommand*{\address}{\street\\\plz\xspace\stadt} % - \ifthenelse{\equal{\tel}{empty}}{}{% - \renewcommand*{\phonenr}{\tel} % - }% + \renewcommand*{\phonenr}{\tel} % % \end{macrocode} %\iffalse %% \renewcommand*{\extrainfo}{Some extra info} @@ -3509,10 +3504,7 @@ \ProvideDocumentEnvironment{lebenslauf}{oo}{% \clearpage \newgeometry{top=2.5cm,left=3cm,right=2.5cm,bottom=3cm} - %\pagestyle{empty} - \pagenumbering{arabic} - \hypersetup{hidelinks} - \ofoot{Seite \thepage\ von \pageref{LastPage}} + \pagestyle{empty} \ifthenelse{\equal{#1}{none}}{\renewcommand{\@listitemsymbol}{}}{} % %\iffalse %%\clearscrheadfoot @@ -3526,7 +3518,6 @@ \fullname\\ \todayOrt, \todayTime \end{tabular} - \label{LastPage} \end{raggedright} \IfNoValueF{#2}{% \newpage % @@ -3683,27 +3674,16 @@ setkeys=\kvsetkeys% \DeclareStringOption[classic]{lebenslaufStyle}[classic] \DeclareStringOption[anschrift.csv]{anschrift}[anschrift.csv] \DeclareBoolOption{idPlain} -\DeclareBoolOption{nophone} \ProcessKeyvalOptions{ahbewerbung} % evaluate keyval options \DeclareOption*{\PassOptionsToClass{\CurrentOption}{scrlttr2}} \ProcessOptions\relax -\ifahbewerbung@nophone % - \LoadClass[ - DIN, pagenumber=botright, backaddress=true, parskip=half,% - fromalign=left, fromemail=true, fromfax=true, % - fromphone=false, fromurl=false, fromalign=right, % - fromlogo=false, fromrule=true, foldmarks=true, % - paper=a4, fontsize=10pt,enlargefirstpage=true, firstfoot=false - ]{scrlttr2} -\else % - \LoadClass[ - DIN, pagenumber=botright, backaddress=true, parskip=half,% - fromalign=left, fromemail=true, fromfax=true, % - fromphone=true, fromurl=false, fromalign=right, % - fromlogo=false, fromrule=true, foldmarks=true, % - paper=a4, fontsize=10pt,enlargefirstpage=true, firstfoot=false - ]{scrlttr2} -\fi % +\LoadClass[ + DIN, pagenumber=botright, backaddress=true, parskip=half,% + fromalign=left, fromemail=true, fromfax=true, % + fromphone=true, fromurl=false, fromalign=right, % + fromlogo=false, fromrule=true, foldmarks=true, % + paper=a4, fontsize=10pt,enlargefirstpage=true, firstfoot=false +]{scrlttr2} % \end{macrocode} %\iffalse %% import from komacv.cls for easier maintaining @@ -3715,8 +3695,8 @@ setkeys=\kvsetkeys% ifluatex,% ifxetex,% marvosym, % - scrlayer-scrpage,% - array,% + scrlayer-scrpage, % + array,% graphicx,% microtype,% enumitem, % @@ -3867,9 +3847,9 @@ cd .. \textbf{\meinBeruf} \\ \ \\ \street\\ \plz\ \stadt\\ + \Letter\enskip \email\\ \Telefon\enskip \tel\\ \Mobilefone\enskip \mobile - \letter\enskip \email\\ \vfill \textbf{Inhalt} @@ -3886,10 +3866,8 @@ cd .. \leftskip=0.3cm \hspace*{0.1cm}\textit{bei}\\ % hier gehört bei rein \textbf{\bewerbungFirma}\\ - \ifthenelse{\equal{\bewerbungFirmaName}{n}}{}{% - \bewerbungFirmaAnrede\ - \bewerbungFirmaName\\ - } + \bewerbungFirmaAnrede\ + \bewerbungFirmaName\\ \bewerbungFirmaStr\\ \bewerbungFirmaPlz\ \bewerbungFirmaOrt % \end{macrocode} diff --git a/macros/latex/contrib/bewerbung/bewerbung.ins b/macros/latex/contrib/bewerbung/bewerbung.ins index 049fe18f90..a9754f3116 100644 --- a/macros/latex/contrib/bewerbung/bewerbung.ins +++ b/macros/latex/contrib/bewerbung/bewerbung.ins @@ -1,10 +1,10 @@ -% bewerbung.ins generated using makedtx version 0.94b 2020-11-24:11:30:14 -- Version 1.2/11/24 11:30 +% bewerbung.ins generated using makedtx version 0.94b 2022-01-17:16:26:37 -- Version 1.3/1/17 16:26 \input docstrip \preamble bewerbung.dtx - Copyright 2020-11-24:11:30:14 -- Version 1.2 André Hilbig, mail@andrehilbig.de + Copyright 2022-01-17:16:26:37 -- Version 1.3 André Hilbig, mail@andrehilbig.de This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3 diff --git a/macros/latex/contrib/bewerbung/bewerbung.pdf b/macros/latex/contrib/bewerbung/bewerbung.pdf index 6d8510b439..0580e5f15b 100644 Binary files a/macros/latex/contrib/bewerbung/bewerbung.pdf and b/macros/latex/contrib/bewerbung/bewerbung.pdf differ diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-lncs/lncs.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-lncs/lncs.bbx index f6f01c2118..14007cc66f 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-lncs/lncs.bbx +++ b/macros/latex/contrib/biblatex-contrib/biblatex-lncs/lncs.bbx @@ -1,4 +1,4 @@ -\ProvidesFile{lncs.bbx}[2021/08/17 v0.3] +\ProvidesFile{lncs.bbx}[2022/01/17 v0.4] \RequireBibliographyStyle{numeric} @@ -135,7 +135,7 @@ {\namepartsuffix} \ifthenelse{\value{listcount}<\value{liststop}} {\addcomma\space}% - {}% + {\ifmorenames{\addcomma\nbspace\bibstring[\emph]{andothers}:}}% } \DeclareNameFormat{editor}{% @@ -147,7 +147,7 @@ {\namepartsuffix} \ifthenelse{\value{listcount}<\value{liststop}} {\addcomma\space}% - {\space\ifthenelse{\value{listcount}>1} + {\ifmorenames{\addcomma\nbspace\bibstring[\emph]{andothers}}\space\ifthenelse{\value{listcount}>1} {(\bibstring{editors})} {(\bibstring{editor})}}% } diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-lncs/lncs.cbx b/macros/latex/contrib/biblatex-contrib/biblatex-lncs/lncs.cbx index 40bb60d403..4b6c71ce61 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-lncs/lncs.cbx +++ b/macros/latex/contrib/biblatex-contrib/biblatex-lncs/lncs.cbx @@ -1,4 +1,4 @@ -\ProvidesFile{lncs.cbx}[2021/08/17 v0.3] +\ProvidesFile{lncs.cbx}[2022/01/17 v0.4] \RequireCitationStyle{numeric} diff --git a/macros/latex/contrib/dbshow/dbshow.dtx b/macros/latex/contrib/dbshow/dbshow.dtx index a2af27d922..9731797f76 100644 --- a/macros/latex/contrib/dbshow/dbshow.dtx +++ b/macros/latex/contrib/dbshow/dbshow.dtx @@ -143,10 +143,10 @@ Copyright and License \fi % %\NeedsTeXFormat{LaTeX2e} -%<+package|config>\GetIdInfo$Id: dbshow.dtx 461d9bb 2022-01-14 02:50:24 +0800 Changkai Li $ +%<+package|config>\GetIdInfo$Id: dbshow.dtx 1a507c4 2022-01-17 22:53:24 +0800 Changkai Li $ % {Database to store and display data} %\ProvidesExplPackage{\ExplFileName} -% {\ExplFileDate}{1.4}{\ExplFileDescription} +% {\ExplFileDate}{1.5}{\ExplFileDescription} %<*driver> \documentclass[full]{l3doc} \usepackage[scheme=plain, fontset=ubuntu]{ctex} @@ -161,6 +161,9 @@ Copyright and License \usepackage{xcolor} \usepackage{tabularray} \usepackage{zhnumber} +\usepackage{tcolorbox} +\tcbuselibrary{skins, minted, breakable, xparse} +\usepackage{accsupp} \geometry{ left=4.5cm, @@ -197,8 +200,6 @@ Copyright and License \addcontentsline{toc}{part}{Change~History} } -\let\subsubitem\subitem - \DoNotIndex{\begin, \end} \setlength{\parskip}{\medskipamount} @@ -217,6 +218,56 @@ Copyright and License \par\textbf{\textsf{NOTE:~}}#1\par } {} +\definecolor {exambg} {RGB} {248, 241, 224} % 示例背景 +\definecolor {examno} {RGB} {176, 101, 90} % 示例行号 +\definecolor {examnobg} {RGB} {241, 225, 208} % 示例行号背景 +\definecolor {examframe} {RGB} {156, 129, 110} % 示例边框(标题背景) +\definecolor {option} {HTML} {009933} % 选项 +\definecolor {cs} {HTML} {FF6600} % 命令 +\definecolor {env} {HTML} {C81531} % 环境 +\definecolor {link} {HTML} {33539E} % 链接 + +% \definecolor {exambg} {RGB} {241, 225, 208} % 示例背景 +% \definecolor {examno} {HTML} {F3AA20} % 示例行号 +% \definecolor {examnobg} {HTML} {8B4C70} % 示例行号背景 +% \definecolor {examframe} {HTML} {58094F} % 示例边框(标题背景) +% \definecolor {option} {HTML} {8B4C70} % 选项 +% \definecolor {cs} {HTML} {F3AA20} % 命令 +% \definecolor {cs} {HTML} {F9A911} % 命令 +% \definecolor {env} {HTML} {669933} % 环境 +\hypersetup{linkcolor=link} +\tcbset{ + exam-base/.style={ + listing engine=minted, listing and text, + minted style=emacs, breakable, + minted options={fontsize=\small,breaklines,linenos,numbersep=3mm}, + colback=exambg, colframe=examframe, + left=5mm, enhanced, + fonttitle=\small\sffamily\bfseries, fontlower=\small, + overlay={ + \begin{tcbclipinterior} + \fill[examnobg] + (frame.south west) rectangle ([xshift=5mm]frame.north west); + \end{tcbclipinterior} + } + } +} +\DeclareTCBListing[auto counter]{example}{ O{} D(){} m }{% + exam-base, title={示例 \thetcbcounter:#3}, label={cn-#2}, #1 +} +\DeclareTCBListing[auto counter]{example*}{ O{} D(){} m }{% + exam-base, title={Example \thetcbcounter: #3}, label={en-#2}, #1 +} +\renewcommand{\theFancyVerbLine}{% + \ttfamily\textcolor{examno}{% + \scriptsize\oldstylenums{% + \protect\BeginAccSupp{ActualText={}}% + \arabic{FancyVerbLine}% + \protect\EndAccSupp{}% + }% + }% +} + \ExplSyntaxOn \makeatletter @@ -274,7 +325,7 @@ Copyright and License \int_compare:nNnT { \str_count:n {#1} } = { 3 } { \phantom{0} } \c_space_tl } -\cs_set_eq:NN \dbshowdocver \dbshowdoc_print_version:n +\cs_gset_eq:NN \dbshowdocver \dbshowdoc_print_version:n % #1 ver #2 date #3 type #4 desc \cs_new_protected:Nn \dbshowdoc_changes_what:nnnn { @@ -336,13 +387,26 @@ Copyright and License \end{itemize} } {} -\cs_new_protected:Nn \dbshowdoc_function_begin:N { +\cs_gset_protected:Npn \__codedoc_typeset_function_block:nN #1#2 { + \__codedoc_function_index:x + { #1 \bool_if:NT #2 { \tl_to_str:n {TF} } } + \__codedoc_function_label:xN {#1} #2 + \color{cs}\bfseries #1 + \bool_if:NT #2 { \__codedoc_typeset_TF: } + \__codedoc_typeset_expandability: + \seq_if_empty:NF \g__codedoc_variants_seq + { \__codedoc_typeset_variant_list:nN {#1} #2 } + \\ +} +\cs_new_protected:Nn \dbshowdoc_function_begin:Nn { \cs_set_eq:NN \__codedoc_tmp_cs:nN \__codedoc_typeset_function_block:nN \cs_set_protected:Npn \__codedoc_typeset_function_block:nN ##1##2 { \__codedoc_function_label:xN {##1} ##2 \hbox_set:Nn \l_tmpa_box {##1} - \int_compare:nTF { \str_count:n {##1} <= 22 } + \group_begin: \color{#2}\bfseries + \int_compare:nTF { \str_count:n {##1} <= 20 } {##1} { \adjustbox{width=.7\marginparwidth, height=\box_ht:N \l_tmpa_box}{##1} } + \group_end: #1{##1} \__codedoc_typeset_expandability: \\ } @@ -352,7 +416,7 @@ Copyright and License } \DeclareDocumentEnvironment { option } { O{} +v } { - \dbshowdoc_function_begin:N \SpecialOptionIndex + \dbshowdoc_function_begin:Nn \SpecialOptionIndex { option } \__codedoc_function:nnw {#1} {#2} } { @@ -361,7 +425,7 @@ Copyright and License } \DeclareDocumentEnvironment { environment } { O{} +v } { - \dbshowdoc_function_begin:N \SpecialEnvIndex + \dbshowdoc_function_begin:Nn \SpecialEnvIndex { env } \__codedoc_function:nnw {#1} {#2} } { @@ -369,8 +433,81 @@ Copyright and License \dbshowdoc_function_end: } +\makeatletter +\cs_gset_protected:Npn \__codedoc_cmd:nn #1#2 + { + \bool_set_false:N \l__codedoc_cmd_noindex_bool + \bool_set_true:N \l__codedoc_cmd_replace_bool + \tl_set:Nn \l__codedoc_cmd_index_tl { \q_no_value } + \tl_set:Nn \l__codedoc_cmd_module_tl { \q_no_value } + \keys_set:nn { l3doc/cmd } {#1} + \tl_set:Nn \l__codedoc_cmd_tl {#2} + \bool_if:NT \l__codedoc_cmd_replace_bool + { + \tl_set_rescan:Nnn \l__codedoc_tmpb_tl { } { _ } + \tl_replace_all:Non \l__codedoc_cmd_tl \l__codedoc_tmpb_tl { _ } + \__codedoc_replace_at_at:N \l__codedoc_cmd_tl + \tl_replace_all:Nno \l__codedoc_cmd_tl { _ } \l__codedoc_tmpb_tl + } + \mode_if_math:T { \mbox } + { + \bool_if:NT \l__codedoc_allow_indexing_bool { \__codedoc_target: } + \verbatim@font + \__codedoc_if_almost_str:VT \l__codedoc_cmd_tl + { + \__kernel_tl_set:Nx \l__codedoc_cmd_tl { \tl_to_str:N \l__codedoc_cmd_tl } + \bool_if:NT \g__codedoc_cs_break_bool + { + \regex_replace_all:nnN + { ([^\\\_]\_*) \_ ([^\_]) } + { \1 \c{BreakableUnderscore} \2 } + \l__codedoc_cmd_tl + } + } + \tl_replace_all:Nnn \l__codedoc_cmd_tl { ~ } { \@xobeysp } + \textbf{\l__codedoc_cmd_tl} + \@ + } + \bool_if:NT \l__codedoc_allow_indexing_bool + { + \bool_if:NF \l__codedoc_cmd_noindex_bool + { + \quark_if_no_value:NF \l__codedoc_cmd_index_tl + { + \__kernel_tl_set:Nx \l__codedoc_cmd_tl + { \c_backslash_str \exp_not:o { \l__codedoc_cmd_index_tl } } + } + \exp_args:No \__codedoc_key_get:n { \l__codedoc_cmd_tl } + \quark_if_no_value:NF \l__codedoc_cmd_module_tl + { + \__kernel_tl_set:Nx \l__codedoc_index_module_tl + { \tl_to_str:N \l__codedoc_cmd_module_tl } + } + \__codedoc_special_index_module:ooonN + { \l__codedoc_index_key_tl } + { \l__codedoc_index_macro_tl } + { \l__codedoc_index_module_tl } + { usage } + \l__codedoc_index_internal_bool + } + } + } +\cs_generate_variant:Nn \__codedoc_cmd:nn { no } +\makeatother + +% #1 color #2 opt #3 content +\cs_new_protected:Nn \dbshowdoc_cmd:nnn { + \__codedoc_get_hyper_target:xN {#3} \l_tmpa_tl + \hyperref[\l_tmpa_tl]{\textcolor{#1}{\__codedoc_cmd:no {#2} {#3}}} +} \DeclareDocumentCommand \opt { O{} m } - { \__codedoc_cmd:no {#1} {#2} } + { \dbshowdoc_cmd:nnn { option } {#1} {#2} } +\DeclareDocumentCommand \nopt { O{} m } + { \textcolor{option}{\textbf{#2}} } +\DeclareDocumentCommand \env { O{} m } + { \dbshowdoc_cmd:nnn { env } {#1} {#2} } +\DeclareDocumentCommand \cs { O{} m } + { \dbshowdoc_cmd:nnn { cs } {#1} { \c_backslash_str #2 } } \NewDocumentCommand \linktarget { m m m } {% \hyperlink{#1}{#3}% @@ -385,6 +522,19 @@ Copyright and License { \GetIdInfo $Id$ } { \fileinfo } } + +\DeclareDocumentCommand \inidef { s d() s o } { + \group_begin: + \hfill\normalfont( + initially~ + \IfBooleanTF {#1} {empty} + { \IfValueTF {#2} { \texttt{#2} } { unset } } + ,~ + \IfBooleanTF {#3} {default empty} + { \IfValueTF {#4} { default~\texttt{#4} } { no~default } } + ) + \group_end: +} \ExplSyntaxOff \begin{document} @@ -402,7 +552,7 @@ Copyright and License % % \fi % -% \CheckSum{882} +% \CheckSum{0} % \GetFileId{dbshow.sty} % % \ExplSyntaxOn @@ -428,15 +578,11 @@ Copyright and License % \begin{documentation} % % \section{引言} +% % 编写本宏包的动机来源于当前没有一个很好的错题本宏包,可以方便的根据各种条件对错 % 题进行筛选、排序,然后以自定义的样式展示出来。\pkg{dbshow} 宏包实现了四个核心 % 功能:数据存储和使用、数据筛选、数据排序、数据展示。 % -% 数据只需要存储一次,就可以通过预定义的筛选、排序条件和样式展示部分或全部的数据。 -% 如上所述,本宏包其实实现了一个非常简单的数据库,复习错题的功能只是其中一个应用, -% 和其他数据库宏包比如 \pkg{datatool} 相比,\pkg{dbshow} 更专注于非图表类型的数 -% 据展示。 -% % \changes{1.4}{2022-01-10}{Add check}{version of \pkg{l3kernel}} % \pkg{dbshow} 依赖版本日期至少为 |2022-11-07| 的 \pkg{l3kernel}。 % @@ -473,19 +619,8 @@ Copyright and License % 除了日期类型,所有类型都是 \pkg{expl3} 的内置类型。\pkg{dbshow} 构建了一个简单 % 的 |date| 类型,支持转换成整数以及带样式的打印。 % -% \subsection{与 \pkg{datatool} 的区别} -% % \changes{1.2}{2022-01-07}{Add doc}{add comparison to \pkg{datatool}} -% -% 从核心功能上看,\pkg{dbshow} 和 \pkg{datatool} 实现了相同的功能。区别在于 -% \pkg{dbshow} 基于 \pkg{expl3} 实现,支持字符串的正则匹配,还支持多级排序。使用 -% 方式上更倾向于样式与内容分离,所有的样式都可以通过选项提前定义好并且可以复用。 -% \pkg{dbshow} 并没有实现从外部文件读取数据以及将数据持久化的功能,我认为这些应 -% 该是更专业的外部程序的工作而不应该在 \LaTeX 中设计这些功能。因此,\pkg{dbshow} -% 只提供了一个运行时的临时数据库,足够轻便且满足大部分正常需求。如果你想删除或修 -% 改数据库中某一条记录,请去对应的位置删除或修改掉对应的 \env{dbitem} 环境,而不 -% 是让宏包提供一个输出某一行记录的命令。某种意义上记录数据库的 \TeX 源文件本身就 -% 是数据的一种持久化。 +% \changes{1.3}{2022-01-07}{Remove doc}{remove comparison to \pkg{datatool}} % % \section{接口文档} % @@ -531,18 +666,6 @@ Copyright and License % 每个数据库都有一个默认的属性 |id| 用来存储数据的索引。 % \end{note} % -% 下面是定义一个错题数据库的示例,|question| 和 |answer| 属性用来存储问题和答 -% 案,|date| 属性存储日期,|info| 属性存储额外信息,|labels| 存储题目标签。 -% \begin{verbatim} -% \dbNewDatabase{ques}{ -% question = tl, -% answer = tl, -% date = date, -% info = tl, -% labels = clist -% } -% \end{verbatim} -% % \begin{function}[added=2022-01-05]{\dbshow} % \begin{syntax} % \cs{dbshow} \marg{style} \marg{database} @@ -561,7 +684,7 @@ Copyright and License % % \subsection{\cs{dbNewStyle} 和样式选项} % -% \begin{function}[added=2022-01-05]{\dbNewStyle} +% \begin{function}[added=2022-01-05, updated=2022-01-15]{\dbNewStyle} % \begin{syntax} % \cs{dbNewStyle} \oarg{base styles} \marg{style} \marg{database} \marg{opts} % \end{syntax} @@ -574,222 +697,343 @@ Copyright and License % % \begin{option}[added=2022-01-05]{filter} % \begin{syntax} -% filter = +% \opt{filter} = \inidef(-none-) % \end{syntax} % -% 为当前样式设置由 \cs{dbCombineFilters} 所定义的过滤器 +% 为当前样式设置由 \cs{dbCombineFilters} 所定义的过滤器。示例 \ref{cn-filter} +% 演示了如何定义条件,将条件组合成过滤器以及使用过滤器。 % \end{option} % +% \iffalse +%<*verb> +% \fi +\DeleteShortVerb{\|} +\begin{example}(filter){使用过滤器筛选数据} + \dbNewDatabase{filter-db}{name=str, count=int} + \begin{dbFilters}{filter-db} + \dbNewCond {cond1}{count}{\dbval > 3} + \dbNewCond*{cond2}{name} {\d+} + \dbCombCond{filter-and}{cond1 && cond2} + \dbCombCond{filter-or} {cond1 || cond2} + \end{dbFilters} + \dbitemkv{filter-db}{name=123, count=4} + \dbitemkv{filter-db}{name=ab3, count=2} + \dbitemkv{filter-db}{name=bag, count=5} + \dbNewStyle{filter-and-style}{filter-db}{ + filter = filter-and, + before-code = \par Filter And\par, + item-code = {\dbuse{name}: \dbuse{count}\quad}, + } + \dbNewStyle{filter-or-style}{filter-db}{ + filter = filter-or, + before-code = \par Filter Or\par, + item-code = {\dbuse{name}: \dbuse{count}\quad}, + } + \dbshow{filter-and-style}{filter-db} + \dbshow{filter-or-style} {filter-db} +\end{example} +\MakeShortVerb{\|} +% \iffalse +% +% \fi +% +% \changes{1.1}{2022-01-06}{Add option}{\opt{raw-filter}} % \begin{option}[added=2022-01-06]{raw-filter} % \begin{syntax} -% raw-filter = +% \opt{raw-filter} = \inidef % \end{syntax} % % 使用条件表达式设置匿名过滤器,这里的条件指通过 \cs{dbNewConditional} 定义的 -% 条件。下面代码中两个示例的过滤器具有相同的功能。 +% 条件。示例 \ref{cn-raw-filter} 使用 \opt{raw-filter} 选项,直接组合筛选条 +% 件,达到与示例 \ref{cn-filter} 相同的效果。 % \end{option} % -% \changes{1.1}{2022-01-06}{Add option}{\opt{raw-filter}} -% -% \begin{verbatim} -% % method 1 -% \begin{dbFilters}{db} -% \dbNewConditional{cond1}{int-attr}{\rval > 1} -% \dbNewConditional*{cond2}{str-attr}{\d+} -% \end{dbFilters} -% \dbNewStyle{style}{db}{raw-filter={cond1 && cond2}} -% % method 2 -% \begin{dbFilters}{db} -% \dbNewConditional{cond1}{int-attr}{\rval > 1} -% \dbNewConditional*{cond2}{str-attr}{\d+} -% \dbCombineFilters{filter}{cond1 && cond2} -% \end{dbFilters} -% \dbNewStyle{style}{db}{filter=filter} -% \end{verbatim} +% \DeleteShortVerb{\|} +% \iffalse +%<*verb> +% \fi +\begin{example}(raw-filter){使用匿名过滤器筛选数据} + \dbNewDatabase{filter-db}{name=str, count=int} + \begin{dbFilters}{filter-db} + \dbNewCond {cond1}{count}{\dbval > 3} + \dbNewCond*{cond2}{name} {\d+} + \end{dbFilters} + \dbitemkv{filter-db}{name=123, count=4} + \dbitemkv{filter-db}{name=ab3, count=2} + \dbitemkv{filter-db}{name=bag, count=5} + \dbNewStyle{filter-and-style}{filter-db}{ + raw-filter = {cond1 && cond2}, + before-code = \par Filter And\par, + item-code = {\dbuse{name}: \dbuse{count}\quad}, + } + \dbNewStyle{filter-or-style}{filter-db}{ + raw-filter = {cond1 || cond2}, + before-code = \par Filter Or\par, + item-code = {\dbuse{name}: \dbuse{count}\quad}, + } + \dbshow{filter-and-style}{filter-db} + \dbshow{filter-or-style} {filter-db} +\end{example} +% \iffalse +% +% \fi +% \MakeShortVerb{\|} % % \changes{1.2}{2022-01-08}{Fix bug}{string sorting bug} % \begin{option}[added=2022-01-05]{sort} % \begin{syntax} -% sort = \{ , , \ldots{} \} +% \opt{sort} = \{ , , \ldots{} \} \inidef % \end{syntax} % -% 为当前样式设置排序规则。支持根据 |str|,|date|,|int|,|fp| 类型的数据进行排 -% 序,支持多级排序。\meta{attr} 表示增序,\meta{attr}* 表示降序。下面例子中, -% 使用 |sort-style| 展示数据时的顺序为先按 |level| 降序,|level| 相同的再按出 -% 生日期 |birth| 增序,以此类推。 +% 为当前样式设置排序规则。支持对 |str|,|date|,|int|,|fp| 类型的数据进行排 +% 序,支持多级排序。\meta{attr} 表示增序,\meta{attr}\texttt{*} 表示降序。示 +% 例 \ref{cn-sort} 的排序规则为先按 |count| 降序排序,|count| 相同的再按 +% |name| 增序排序。 % \end{option} % -% \begin{verbatim} -% \dbNewDatabase{sort-example}{ -% name = str, -% birth = date, -% level = int, -% weight = fp, -% } -% \dbNewStyle{sort-style}{sort-example}{ -% sort = { level*, birth, name, weight } -% } -% \end{verbatim} +% \iffalse +%<*verb> +% \fi +\begin{example}(sort){多级排序} + \dbNewDatabase{sort-db}{name=str, count=int} + \dbNewStyle{sort-style}{sort-db}{ + sort = {count*, name}, + item-code = {\dbuse{name}: \dbuse{count}\quad} + } + \dbitemkv{sort-db}{name=bag, count=1} + \dbitemkv{sort-db}{name=box, count=1} + \dbitemkv{sort-db}{name=tag, count=2} + \dbitemkv{sort-db}{name=pen, count=3} + \dbshow{sort-style}{sort-db} +\end{example} +% \iffalse +% +% \fi % -% \begin{option}[added=2022-01-05, rEXP]{item-code} +% \begin{option}[added=2022-01-05, rEXP]{before-code} % \begin{syntax} -% item-code = +% \opt{before-code} = \inidef* % \end{syntax} % -% 该选项用来设置展示数据库中每条记录的代码。你可以使用 \cs{dbuse} 来展示属性的 -% 值。 +% 该选项用来设置在展示整个数据库之\zhbefore 需要执行的代码(见示例 +% \ref{cn-db-wrap})。 % \end{option} % -% \changes{1.3}{2022-01-09}{Update option}{\opt{/sep}} -% \begin{option}[added=2022-01-05, updated=2022-01-08, rEXP]{/sep} +% \begin{option}[added=2022-01-05, rEXP]{after-code} % \begin{syntax} -% /sep = \\ -% /sep = \{ \\ -% ~~\meta{separator between two}, \\ -% ~~\meta{separator between more than two}, \\ -% ~~\meta{separator between final two} \\ -% \} \\ -% /sep = \{ \\ -% ~~\meta{separator before year}, \\ -% ~~\meta{separator between year and month}, \\ -% ~~\meta{separator between month and day}, \\ -% ~~\meta{separator after day} \\ -% \} \\ +% \opt{after-code} = \inidef* % \end{syntax} % -% 该选项只适用于类型为 |clist| 或 |date| 的属性,用来设置列表间元素的间隔。参 -% 数为一个 \meta{separator} 时,所有元素间的分隔符被设置为 \meta{separator}。 -% \meta{separator before year} 和 \meta{separator after day} 被设置为空。 +% 该选项用来设置在展示整个数据库之\zhafter 需要执行的代码(见示例 +% \ref{cn-db-wrap})。 % \end{option} % -% 参数为3个元素的逗号分隔的列表时,此选项用来设置列表元素的分隔符,分别用来设 -% 置只有两个元素时的分隔符 \meta{separator between two},超过两个元素时的分隔 -% 符 \meta{separator between more than two},和最后两个元素之间的分隔符 -% \meta{separator between final two}。对于类型为 |clist| 的属性,设置此选项时 -% 如果参数列表数量不是1或者3会触发报错。 -% -% \begin{verbatim} -% % clist-attr is an attribute of database db -% % suppose the val of clist-attr is { 1, 2, 3 } -% \dbNewStyle{clist-sep}{db}{ -% clist-attr/sep = { ,~ }, % print 1, 2, 3 -% clist-attr/sep = { {,~}, {,~}, {and~} } % print 1, 2 and 3 -% } -% \end{verbatim} -% -% 参数为4个元素的逗号分隔的列表时,此选项用来设置日期的分隔符,分别用来设 -% 置 \meta{year} 之前的分隔符 \meta{separator before year} ,\meta{year} 和 -% \meta{month} 之间的分隔符 \meta{separator between year and month} , -% \meta{month} 和 \meta{day} 之间的分隔符,以及 \meta{day} 之后的分隔符。对于 -% 类型为 |date| 的属性,设置此选项时如果参数列表数量不是1或者4会触发报错。 -% -% \begin{verbatim} -% % date-attr is an attribute of database db -% % suppose the val of date-attr is 2022/01/01 -% \dbNewStyle{date-sep}{db}{ -% date-attr/sep = -, % print 2022-01-01 -% date-attr/sep = { |, -, -, | } % print |2022-01-01| -% } -% \end{verbatim} +% \iffalse +%<*verb> +% \fi +\begin{example}(db-wrap){设置展示数据库前后的代码} + \dbNewDatabase{wrap-db}{text=tl} + \dbNewStyle{wrap-style}{wrap-db}{ + before-code = \textit{before code}\quad, + after-code = \textit{after code}, + item-code = \dbarabic.~\dbuse{text}\quad + } + \dbitemkv{wrap-db}{text=text1} + \dbitemkv{wrap-db}{text=text2} + \dbitemkv{wrap-db}{text=text3} + \dbshow{wrap-style}{wrap-db} +\end{example} +% \iffalse +% +% \fi % -% \changes{1.3}{2022-01-08}{Add option}{\opt{/zfill}} -% \begin{option}[added=2022-01-08, EXP]{/zfill} +% \begin{option}[added=2022-01-05, rEXP]{item-code} % \begin{syntax} -% /zfill = <\TTF> +% \opt{item-code} = \inidef % \end{syntax} % -% 该选项只适用于类型为 |date| 的属性。控制输出月份和天时是否补零。 +% 该选项用来设置展示数据库中每条记录的代码。你可以使用 \cs{dbuse}\marg{attr} +% 来指代属性 \meta{attr} 的值。示例 \ref{cn-item-code} 演示了如何展示一个首 +% 字母缩写词表。 % \end{option} % -% \changes{1.4}{2022-01-13}{Add macro}{\cs{dbdatesep}} -% \begin{function}[added=2022-01-13, EXP]{\dbdatesep} +% \iffalse +%<*verb> +% \fi +\begin{example}(item-code){展示数据库条目} + \dbNewDatabase{item-db}{acronym=str, desc=tl} + \dbNewStyle{item-style}{item-db}{ + before-code = {\dbIfEmptyF{\begin{description}}}, + after-code = {\dbIfEmptyF{\end{description}}}, + item-code = {\item[\dbuse{acronym}] \dbuse{desc}}, + sort = acronym, + } + \dbitemkv{item-db}{acronym=PM, desc={Prime Minister}} + \dbitemkv{item-db}{acronym=CBD, desc={Central Business District}} + \dbitemkv{item-db}{acronym=DL, desc={Deep Learning}} + \dbshow{item-style}{item-db} +\end{example} +% \iffalse +% +% \fi +% +% \changes{1.5}{2022-01-17}{Add option}{\opt{item-code*}} +% \begin{option}[added=2022-01-17, rEXP]{item-code*} % \begin{syntax} -% \cs{dbdatesep} \marg{separator} +% \opt{item-code*} = \inidef % \end{syntax} % -% 设置内部解析日期时的间隔符,默认为 |/|,即存储数据的格式为 |yyyy/mm/dd|。 -% \end{function} +% 使用该选项设置的代码在被插入到最终执行代码序列之前会先通过 +% \cs{protected@edef} 完全展开。示例 \ref{cn-item-exp} 展示了如何通过该选项 +% 使用表格来展示数据。 +% \end{option} % -% \subsubsection{装饰器} -% -% 下面这些选项在不同层次上装饰原有的展示代码,有些其实不必通过选项的形式来装饰, -% 但这样做的好处是可以进一步使样式与内容分离。下面的例子中,\meta{style1} 和 -% \meta{style2} 是相同的样式,都用 * 将 \meta{attr1} 包裹住了,但是如果你还想定 -% 义一个样式用 = 将 \meta{attr1} 包裹住,如果用 \meta{style1} 的方式,那就可能 -% 需要重复大片代码,用 \meta{style2} 的方式则可以很轻松的继承 \meta{style1} 中的 -% 代码。 -% -% \begin{verbatim} -% \dbNewStyle{style1}{db}{ -% item-code = {% -% *\rvuse{attr1}*\rvuse{attr2} -% % more code -% } -% } -% \dbNewStyle{base-style}{db}{ -% item-code = {% -% \rvuse{attr1}\rvuse{attr2} -% % more code -% } -% } -% \dbNewStyle[base-style]{style2}{db}{ -% attr1/before-code = { * }, -% attr1/after-code = { * }, -% } -% \dbNewStyle[base-style]{style3}{db}{ -% attr1/before-code = { = }, -% attr1/after-code = { = }, -% } -% \end{verbatim} +% \iffalse +%<*verb> +% \fi +\MakePercentComment +\begin{example}(item-exp){用表格展示数据} + \dbNewDatabase{tab-db}{name=str, count=int} + \dbNewStyle{tab-style}{tab-db}{ + before-code = {% + \begin{tabular}{ll} + name & count \\ + }, + after-code = \end{tabular}, + item-code* = {% + \textcolor{red}{\dbuse{name}} & \dbuse{count} \\ + }, + } + \dbitemkv{tab-db}{name=bag, count=100} + \dbitemkv{tab-db}{name=pig, count=20} + \dbshow{tab-style}{tab-db} +\end{example} +\MakePercentIgnore +% \iffalse +% +% \fi % -% \changes{1.3}{2022-01-08}{Add option}{\opt{/wrapper}} -% \begin{option}[added=2022-01-08, rEXP]{/wrapper} +% \changes{1.2}{2022-01-08}{Add options}{\opt{record-before-code}, +% \opt{record-after-code}} +% \changes{1.5}{2022-01-14}{Update options}{Rename \opt{record-before-code} +% and \opt{record-after-code} to \opt{item-before-code} and +% \opt{item-after-code}} +% \begin{option}[added=2022-01-08, updated=2022-01-14, rEXP]{item-before-code} % \begin{syntax} -% /wrapper = +% \opt{item-before-code} = \inidef* % \end{syntax} % -% 该选项只适用于类型为 |date| 的属性。\meta{control sequence} 只接收一个参数即 -% 日期,如果设置了此选项,则最后输出的日期为 -% \meta{control sequence}\marg{date}。 +% 在 \meta{item code} 之\zhbefore 执行的代码(见示例 \ref{cn-item-wrapper})。 % \end{option} % -% \begin{option}[added=2022-01-05, rEXP]{before-code} +% \begin{option}[added=2022-01-08, updated=2022-01-14, rEXP]{item-after-code} % \begin{syntax} -% before-code = +% \opt{item-after-code} = \inidef* % \end{syntax} % -% 该选项用来设置在展示整个数据库之\zhbefore 需要执行的代码。 +% 在 \meta{item code} 之\zhafter 执行的代码(见示例 \ref{cn-item-wrapper})。 % \end{option} % -% \begin{option}[added=2022-01-05, rEXP]{after-code} -% \begin{syntax} -% after-code = -% \end{syntax} +% \iffalse +%<*verb> +% \fi +\begin{example}(item-wrapper){设置展示条目之前和之后的代码} + \dbNewDatabase{item-wrap-db}{text=tl, hint=tl} + \dbNewStyle{item-wrap-style}{item-wrap-db}{ + item-before-code = \begingroup\ttfamily<, + item-after-code = >\endgroup, + item-code = \dbuse{text}~(\dbuse{hint}), + } + \dbitemkv{item-wrap-db}{text=example, hint={this is an example}} + \dbshow{item-wrap-style}{item-wrap-db} +\end{example} +% \iffalse +% +% \fi % -% 该选项用来设置在展示整个数据库之\zhafter 需要执行的代码。 -% \end{option} +% \subsubsection{属性选项} % -% \changes{1.2}{2022-01-08}{Add options}{\opt{record-before-code}, -% \opt{record-after-code}} -% \begin{option}[added=2022-01-05, rEXP]{record-before-code} +% \changes{1.5}{2022-01-14}{Remove option}{\opt{/wrapper}} +% +% \changes{1.5}{2022-01-14}{Add options}{\opt{/code}, +% \opt{/code*}} +% \begin{option}[added=2022-01-14, rEXP]{/code} % \begin{syntax} -% record-before-code = +% \nopt{/code} = \inidef(\#1) % \end{syntax} % -% 该选项用来设置在展示当前记录之\zhbefore 需要执行的代码。 +% 设置 \meta{attr} 的样式代码。在 \meta{code} 中用 |#1| 指代属性的值。示例 +% \ref{cn-attr-code} 将数量超过10个的物品打印为红色,少于10个的则打印为青色。 % \end{option} % -% \begin{option}[added=2022-01-05, rEXP]{record-after-code} +% \iffalse +%<*verb> +% \fi +\begin{example}(attr-code){设置单个属性样式} + \dbNewDatabase{attr-code-db}{name=str, count=int} + \begin{dbFilters}{attr-code-db} + \dbNewCond{large}{count}{\dbval >= 10} + \end{dbFilters} + \dbNewStyle{base-style}{attr-code-db}{ + item-code = \dbuse{name}:~\dbuse{count}\quad, + } + \dbNewStyle[base-style]{large-style}{attr-code-db}{ + raw-filter = large, + name/code = \textcolor{red}{#1}, + } + \dbNewStyle[base-style]{small-style}{attr-code-db}{ + raw-filter = !large, + name/code = \textcolor{teal}{#1}, + } + \dbitemkv{attr-code-db}{name=bag, count=1} + \dbitemkv{attr-code-db}{name=pen, count=12} + \dbitemkv{attr-code-db}{name=pig, count=5} + \dbitemkv{attr-code-db}{name=egg, count=50} + \dbshow{large-style}{attr-code-db} + \dbshow{small-style}{attr-code-db} +\end{example} +% \iffalse +% +% \fi +% +% \begin{option}[added=2022-01-14, rEXP]{/code*} % \begin{syntax} -% record-after-code = +% \nopt{/code*} = \inidef % \end{syntax} % -% 该选项用来设置在展示当前记录之\zhafter 需要执行的代码。 +% 设置 \meta{attr} 的样式代码。在 \meta{code} 中用 |#1| 指代\textbf{展开}的 +% 属性的值。这对某些需要以特定格式解析参数的命令比较有用。 % \end{option} % +% 示例 \ref{cn-exp-code} 中 \pkg{zhnumber} 宏包的 \cs{zhdate} 命令接收 +% |yyyy/mm/dd| 格式的时期并输出中文日期,本宏包默认的日期输出格式是 +% |yyyy/mm/dd|,因此可以通过 \opt{date/code*} 选项,将日期完全展开后然后传递 +% 给 \cs{zhdate} 命令,如果不展开,\cs{zhdate} 接收到的是若干个用来展示日期 +% 的控制序列,而不是 |yyyy/mm/dd| 格式的时期,进而触发报错。 +% +% \iffalse +%<*verb> +% \fi +\MakePercentComment +\begin{example}(exp-code){中文日期} + % \usepackage{zhnumber} + \dbNewDatabase{exp-db}{date=date, event=tl} + \dbNewStyle{exp-style}{exp-db}{ + item-code = \par\makebox[4cm][l]{\dbuse{date}}\dbuse{event}, + date/code* = \zhdate{#1}, + } + \dbitemkv{exp-db}{date=2020/12/31, event=eat} + \dbitemkv{exp-db}{date=2021/01/01, event=sleep} + \dbshow{exp-style}{exp-db} +\end{example} +\MakePercentIgnore +% \iffalse +% +% \fi +% % \begin{option}[added=2022-01-05, rEXP]{/before-code} % \begin{syntax} -% /before-code = +% \nopt{/before-code} = \inidef* % \end{syntax} % % 该选项用来设置展示数据库中属性 \meta{attr} 对应数据之\zhbefore 需要执行的代 @@ -798,16 +1042,60 @@ Copyright and License % % \begin{option}[added=2022-01-05, rEXP]{/after-code} % \begin{syntax} -% /after-code = +% \nopt{/after-code} = \inidef* % \end{syntax} % % 该选项用来设置展示数据库中属性 \meta{attr} 对应数据之\zhafter 需要执行的代码。 % \cs{dbuse} 会在展示属性数据\zhafter 执行此代码。 % \end{option} % +% 属性样式代码的执行顺序为: +% \begin{enumerate}[nolistsep] +% \item \opt{/before-code} +% \item \opt{/code} or \opt{/code*} +% \item \opt{/after-code} +% \end{enumerate} +% +% \changes{1.5}{2022-01-16}{Add options}{\opt{/item-code}, +% \opt{/item-code*}} +% \begin{option}[added=2022-01-16, rEXP]{/item-code} +% \begin{syntax} +% \nopt{/item-code} = \inidef(\#1) +% \end{syntax} +% +% 设置列表元素的样式代码。在 \meta{item code} 中用 |#1| 指代列表元素的值。示例 +% \ref{cn-clist-code} 演示了如何为列表元素设置额外的样式。 +% \end{option} +% +% \iffalse +%<*verb> +% \fi +\begin{example}(clist-code){设置列表元素样式代码} + \dbNewDatabase{clist-db}{name=str, label=clist} + \dbNewStyle{clist-style}{clist-db}{ + item-code = \par\dbuse{name}:~\dbuse{label}, + label/item-code = (\textcolor{red}{\textit{#1}}), + } + \dbitemkv{clist-db}{name=pig, label={animal, meat}} + \dbitemkv{clist-db}{name=Alex, label={person, male}} + \dbshow{clist-style}{clist-db} +\end{example} +% \iffalse +% +% \fi +% +% \begin{option}[added=2022-01-16, rEXP]{/item-code*} +% \begin{syntax} +% \nopt{/item-code*} = \inidef +% \end{syntax} +% +% 设置列表元素的样式代码。在 \meta{item code} 中用 |#1| 指代\textbf{展开}的列 +% 表元素的值。 +% \end{option} +% % \begin{option}[added=2022-01-05, rEXP]{/item-before-code} % \begin{syntax} -% /item-before-code = +% \nopt{/item-before-code} = \inidef* % \end{syntax} % % 该选项只适用于类型为 |clist| 的属性,用来设置展示列表每个元素\zhbefore 需要 @@ -816,65 +1104,291 @@ Copyright and License % % \begin{option}[added=2022-01-05, rEXP]{/item-after-code} % \begin{syntax} -% /item-after-code = +% \nopt{/item-after-code} = \inidef* % \end{syntax} % % 该选项只适用于类型为 |clist| 的属性,用来设置展示列表每个元素\zhafter 需要执 % 行的代码。 % \end{option} % -% \subsection{使用 \cs{dbNewReviewPoints} 定义复习点} +% 列表元素样式代码的执行顺序为: +% \begin{enumerate}[nolistsep] +% \item \opt{/item-before-code} +% \item \opt{/item-code} or \opt{/item-code*} +% \item \opt{/item-after-code} +% \end{enumerate} +% +% \def\sepini{% +% \begingroup\normalfont% +% \hfill% +% (initially \texttt{\{,\char`~\}} for \texttt{clist}% +% and \texttt{/} for \texttt{date}, no default)% +% \endgroup% +% } +% \changes{1.3}{2022-01-09}{Update option}{\opt{/sep}} +% \begin{option}[added=2022-01-05, updated=2022-01-08, rEXP]{/sep} +% \begin{syntax} +% \nopt{/sep} = \sepini\\ +% \nopt{/sep} = \{ \\ +% ~~\meta{separator between two}, \\ +% ~~\meta{separator between more than two}, \\ +% ~~\meta{separator between final two} \\ +% \} \\ +% \nopt{/sep} = \{ \\ +% ~~\meta{separator before year}, \\ +% ~~\meta{separator between year and month}, \\ +% ~~\meta{separator between month and day}, \\ +% ~~\meta{separator after day} \\ +% \} \\ +% \end{syntax} +% +% 该选项只适用于类型为 |clist| 或 |date| 的属性,用来设置列表间元素的间隔。参 +% 数为一个 \meta{separator} 时,所有元素间的分隔符被设置为 \meta{separator}。 +% \meta{separator before year} 和 \meta{separator after day} 被设置为空。 +% \end{option} +% +% 参数为3个元素的逗号分隔的列表时,此选项用来设置列表元素的分隔符,分别用来设 +% 置只有两个元素时的分隔符 \meta{separator between two},超过两个元素时的分隔 +% 符 \meta{separator between more than two},和最后两个元素之间的分隔符 +% \meta{separator between final two}。对于类型为 |clist| 的属性,设置此选项时 +% 如果参数列表数量不是1或者3会触发报错。示例 \ref{cn-clist-sep} 展示了如何设 +% 置列表元素间隔。 +% +% \iffalse +%<*verb> +% \fi +\begin{example}(clist-sep){设置列表元素间隔} + \dbNewDatabase{clist-db}{label=clist} + \dbNewStyle{clist-base}{clist-db}{ + before-code = {\dbIfEmptyF{\begin{enumerate}}}, + after-code = {\dbIfEmptyF{\end{enumerate}}}, + item-code = \item \dbuse{label}, + } + \dbNewStyle[clist-base]{clist-style1}{clist-db}{ + label/sep = {{,~}} + } + \dbNewStyle[clist-base]{clist-style2}{clist-db}{ + label/sep = {{,~}, {,~}, ~and~} + } + \dbitemkv{clist-db}{label={a, b, c}} + \dbitemkv{clist-db}{label={1, 2, 3}} + \dbshow{clist-style1}{clist-db} + \dbshow{clist-style2}{clist-db} +\end{example} +% \iffalse +% +% \fi +% +% 参数为4个元素的逗号分隔的列表时,此选项用来设置日期的分隔符,分别用来设 +% 置 \meta{year} 之前的分隔符 \meta{separator before year} ,\meta{year} 和 +% \meta{month} 之间的分隔符 \meta{separator between year and month} , +% \meta{month} 和 \meta{day} 之间的分隔符,以及 \meta{day} 之后的分隔符。对于 +% 类型为 |date| 的属性,设置此选项时如果参数列表数量不是1或者4会触发报错。示例 +% \ref{cn-date-sep} 展示了如何自定义日期间隔符。 +% +% \iffalse +%<*verb> +% \fi +\begin{example}(date-sep){设置日期间隔符} + \dbNewDatabase{date-db}{date=date} + \dbNewStyle{date-style1}{date-db}{ + item-code = \dbuse{date}\quad, + date/sep = -, + } + \dbNewStyle{date-style2}{date-db}{ + item-code = \dbuse{date}\quad, + date/sep = {\$, +, !, \$}, + } + \dbitemkv{date-db}{date=2020/01/02} + \dbitemkv{date-db}{date=2022/07/12} + \dbshow{date-style1}{date-db} + \dbshow{date-style2}{date-db} +\end{example} +% \iffalse +% +% \fi +% +% \changes{1.5}{2022-01-14}{Add option}{\opt{/format-code}} +% \begin{option}[added=2022-01-14, rEXP]{/format-code} +% \begin{syntax} +% \nopt{/format-code} = \inidef +% \end{syntax} +% +% 该选项用来更精细地控制日期的输出格式。在 \meta{format code}中,|#1| 代表年份, +% |#2| 代表月份,|#3| 代表天。示例 \ref{cn-date-code} 演示了如何使用该选项。 +% \end{option} +% +% \iffalse +%<*verb> +% \fi +\begin{example}(date-code){任意日期格式} + \dbNewDatabase{date-db}{date=date} + \dbNewStyle{date-style}{date-db}{ + item-code = \dbuse{date}, + date/format-code = {日:#3\quad 月:#2\quad 年:#1} + } + \dbitemkv{date-db}{date=2022/01/01} + \dbshow{date-style}{date-db} +\end{example} +% \iffalse +% +% \fi +% +% \changes{1.3}{2022-01-08}{Add option}{\opt{/zfill}} +% \begin{option}[added=2022-01-08, EXP]{/zfill} +% \begin{syntax} +% \nopt{/zfill} = <\TTF> \inidef(true)[true] +% \end{syntax} +% +% 该选项只适用于类型为 |date| 的属性。控制输出月份和天时是否补零。示例 +% \ref{cn-date-zfill} 展示了补零和不补零的日期。 +% \end{option} +% +% \iffalse +%<*verb> +% \fi +\begin{example}(date-zfill){月份和天补零} + \dbNewDatabase{date-db}{date=date} + \dbNewStyle {zfill-style}{date-db}{ + item-code = \dbuse{date}, + } + \dbNewStyle{nofill-style}{date-db}{ + item-code = \dbuse{date}, + date/zfill = false, + } + \dbitemkv{date-db}{date=2022/01/01} + \dbshow {zfill-style}{date-db} + \dbshow{nofill-style}{date-db} +\end{example} +% \iffalse +% +% \fi +% +% \changes{1.4}{2022-01-13}{Add macro}{\cs{dbdatesep}} +% \begin{function}[added=2022-01-13]{\dbdatesep} +% \begin{syntax} +% \cs{dbdatesep} \marg{separator} +% \end{syntax} +% +% 设置内部解析日期时的分隔符,默认为 |/|,即存储数据的格式为 |yyyy/mm/dd|。 +% 示例 \ref{cn-inner-date-sep} 演示了使用两种格式存储数据,但实际上分隔符并 +% 没有被存储,而是被内部用来解析年、月和日然后存储为三个整数。 +% \end{function} +% +% \iffalse +%<*verb> +% \fi +\begin{example}(inner-date-sep){设置日期解析格式} + \dbNewDatabase{inner-date-db}{date=date} + \dbNewStyle{inner-date-style}{inner-date-db}{ + item-code = \dbuse{date}\quad, + } + \dbitemkv{inner-date-db}{date=2020/01/20} + \dbdatesep{-} + \dbitemkv{inner-date-db}{date=2022-01-10} + \dbshow{inner-date-style}{inner-date-db} +\end{example} +\dbdatesep{/} +% \iffalse +% +% \fi +% \subsection{过滤器} +% +% 过滤器是一些条件的组合,只有满足过滤器指定条件的数据才会被展现出来。 % % \begin{function}[added=2022-01-05]{\dbNewReviewPoints} % \begin{syntax} % \cs{dbNewReviewPoints} \marg{name} \marg{points} % \end{syntax} % -% 定义名为 \meta{name} 的复习点。这是专门为错题本或复习所定制的功能, -% \meta{points}是一系列整数,现在假设每道错题你都将写错时的日期记录在了 |date| -% 属性中,并且你希望每隔2,5,15天复习一次。下面的代码给出了一个实现示例。 +% 定义名为 \meta{name} 的复习间隔列表。\meta{points} 是一系列整数或整数表达 +% 式,用于设置日期的过滤器。示例 \ref{cn-review-points} 中,预定义了一个复习 +% 间隔列表 |review| 和一个时间锚点 |2022/02/06|,筛选时,将当前条目的日期与 +% 描点相比较,计算得到时间间隔 $\meta{interval} = \meta{date anchor} - +% \meta{date cmp}$,只有当 \meta{interval} 的值在 \meta{points} 中时,条件才 +% 成立。 % \end{function} % -% \begin{verbatim} -% \dbNewReviewPoints{review-point}{2, 5, 15} % 定义复习点 -% \begin{dbFilters} -% \dbNewConditional{cond1}{date}{review-point|\Today} % 定义复习条件 -% \dbCombineConditionals{filter1}{cond1} % 定义过滤器 -% \end{dbFilters} -% \dbNewStyle{review-style}{ques}{filter=filter1} % 定义展示样式 -% \end{verbatim} -% -% \subsection{在 \env{dbFilters} 环境中定义过滤器} +% \iffalse +%<*verb> +% \fi +\DeleteShortVerb{\|} +\begin{example}(review-points){按时间间隔筛选} + \dbNewDatabase{filter-db}{date=date} + \dbNewReviewPoints{review}{2, 5} + \dbNewRawFilter*{review-filter}{filter-db}{date}{review|2022/02/06} + \dbNewStyle{filter-style}{filter-db}{ + item-code = \dbuse{date}\quad, + filter = review-filter, + } + \dbitemkv{filter-db}{date=2022/01/30} + \dbitemkv{filter-db}{date=2022/02/01} + \dbitemkv{filter-db}{date=2022/02/04} + \dbshow{filter-style}{filter-db} +\end{example} +\MakeShortVerb{\|} +% \iffalse +% +% \fi % -% \begin{environment}[added=2022-01-05]{dbFilters} +% \changes{1.5}{2022-01-16}{Update env}{add starred version of \env{dbFilters}} +% \begin{environment}[added=2022-01-05, updated=2022-01-16]{dbFilters} % \begin{syntax} -% |\begin{dbFilters}|\marg{database} \\ +% |\begin|\{\env{dbFilters}\} \marg{database} \\ +% ~~\meta{code} +% |\end|\{\env{dbFilters}\} \\ +% |\begin|\{\env{dbFilters}\} * \marg{database} \\ % ~~\meta{code} -% |\end{dbFilters}| \\ +% |\end|\{\env{dbFilters}\} \\ % \end{syntax} % % \env{dbFilters}用来定义过滤器,此环境中定义了 \cs{dbNewConditional} 命令用来 -% 定义条件和 \cs{dbCombineConditionals} 命令用来组合条件定义过滤器。过滤器独立 -% 于每个 \meta{database},这意味着你可以在不同数据库中定义名称相同的过滤条件和 -% 过滤器。 +% 定义条件和 \cs{dbCombineConditionals} 命令用来组合条件定义过滤器。星号版本在 +% 定义条件的同时会定义一个与条件同名且只使用这个条件的过滤器。示例 +% \ref{cn-star-filter} 中定义 |greater| 条件的同时也定义了一个同名的过滤器,你 +% 可以直接在 \opt{filter} 中使用这个过滤器。过滤器独立于每个 \meta{database}, +% 这意味着你可以在不同数据库中定义名称相同的过滤条件和过滤器。 % \end{environment} % -% \begin{function}[added=2022-01-05, updated=2022-01-08]{\dbNewConditional, \dbNewConditional*} +% \iffalse +%<*verb> +% \fi +\begin{example}(star-filter){定义与条件同名的过滤器} + \dbNewDatabase{filter-db}{count=int} + \begin{dbFilters}*{filter-db} + \dbNewCond{greater}{count}{\dbval > 3} + \end{dbFilters} + \dbNewStyle{filter-style}{filter-db}{ + filter = greater, + item-code = \dbuse{count}\quad, + } + \dbitemkv{filter-db}{count=2} + \dbitemkv{filter-db}{count=5} + \dbshow{filter-style}{filter-db} +\end{example} +% \iffalse +% +% \fi +% +% \changes{1.5}{2022-01-15}{Add macros}{\cs{dbNewCond}, \cs{dbCombCond}} +% \begin{function}[added=2022-01-05, updated=2022-01-16]{\dbNewConditional, +% \dbNewCond, \dbNewConditional*, \dbNewCond*} % \begin{syntax} -% \cs{dbNewConditional} \marg{name} \marg{attr} \marg{cond spec} \\ -% \cs{dbNewConditional}* \marg{name} \marg{attr} \marg{cond spec} \\[2pt] -% \cs{dbNewConditional} \marg{name} \marg{int/fp attr} \marg{expr} \\ -% \cs{dbNewConditional}* \marg{name} \marg{int/fp attr} \marg{expr} \\ -% \cs{dbNewConditional} \marg{name} \marg{str/tl attr} \marg{regex expr} \\ -% \cs{dbNewConditional}* \marg{name} \marg{str/tl attr} \marg{regex expr} \\ -% \cs{dbNewConditional} \marg{name} \marg{clist attr} \marg{val list} \\ -% \cs{dbNewConditional}* \marg{name} \marg{clist attr} \marg{val list} \\ -% \cs{dbNewConditional} \marg{name} \marg{date attr} \marg{expr} -% \cs{dbNewConditional}* \marg{name} \marg{date attr} \{\meta{review points}\orbar\meta{date}\} \\ +% \cs{dbNewConditional} \marg{name} \marg{attr} \marg{cond spec} \oarg{filter info} +% \cs{dbNewConditional}* \marg{name} \marg{attr} \marg{cond spec} \oarg{filter info} \\[2pt] +% \cs{dbNewConditional} \marg{name} \marg{int/fp attr} \marg{expr} \oarg{filter info} +% \cs{dbNewConditional}* \marg{name} \marg{int/fp attr} \marg{expr} \oarg{filter info} +% \cs{dbNewConditional} \marg{name} \marg{str/tl attr} \marg{regex expr} \oarg{filter info} +% \cs{dbNewConditional}* \marg{name} \marg{str/tl attr} \marg{regex expr} \oarg{filter info} +% \cs{dbNewConditional} \marg{name} \marg{clist attr} \marg{val list} \oarg{filter info} +% \cs{dbNewConditional}* \marg{name} \marg{clist attr} \marg{val list} \oarg{filter info} +% \cs{dbNewConditional} \marg{name} \marg{date attr} \marg{date expr} \oarg{filter info} +% \cs{dbNewConditional}* \marg{name} \marg{date attr} \{\meta{review points}\orbar\meta{date}\} \oarg{filter info} % \end{syntax} % % \cs{dbNewConditional} 用来定义名为 \meta{name} 的条件,\meta{attr} 指定条件 % 所绑定的属性,在 \meta{cond spec} 中可以用 \cs{dbval} 指代属性的值。 +% \cs{dbNewCond} 是 \cs{dbNewConditional} 的别名。 % \end{function} % % \changes{1.3}{2022-01-10}{Update doc}{truncated division} @@ -885,30 +1399,155 @@ Copyright and License % \end{note} % % 对于类型为 |str| 和 |tl| 的属性,\meta{regex} 为正则表达式, -% \cs{dbNewConditional} 表示部分匹配,\cs{dbNewConditional*} 表示整体匹配。 +% \cs{dbNewConditional} 表示部分匹配,\cs{dbNewConditional*} 表示整体匹配。该 +% 选项依赖于 \pkg{l3regex}。示例 \ref{cn-filter-str} 演示了部分匹配和全部匹 +% 配的区别,|part| 过滤器匹配所有含数字的 |name|,而 |all| 过滤器匹配全部为 +% 数字的 |name|。 % -% \begin{verbatim} -% \dbNewConditional {cond1}{str-attr}{abc} % 匹配 abc, abcd, 1abc, =abc= 等 -% \dbNewConditional*{cond2}{str-attr}{abc} % 只匹配 abc -% \end{verbatim} +% \iffalse +%<*verb> +% \fi +\begin{example}(filter-str){匹配字符串} + \dbNewDatabase{filter-db}{name=str} + \begin{dbFilters}*{filter-db} + \dbNewCond{part}{name}{\d+} + \dbNewCond*{all}{name}{\d+} + \end{dbFilters} + \dbNewStyle{part-style}{filter-db}{ + before-code = Match part:~, + item-code = \dbuse{name}\quad, + filter = part, + } + \dbNewStyle{all-style}{filter-db}{ + before-code = Match all:~, + item-code = \dbuse{name}\quad, + filter = all, + } + \dbitemkv{filter-db}{name=123} + \dbitemkv{filter-db}{name=int12} + \dbitemkv{filter-db}{name=variable} + \dbshow{part-style}{filter-db} + \dbshow {all-style}{filter-db} +\end{example} +% \iffalse +% +% \fi % % 对于类型为 |clist| 的属性,使用 \cs{dbNewConditional} 定义的条件只要 % \meta{val list} 中的任意一个元素在属性值(列表)中则条件成立;使用 % \cs{dbNewConditional*} 定义的条件只有 \meta{val list} 中每一个值都在属性值 -% (列表)中条件才成立。 +% (列表)中条件才成立。示例 \ref{cn-filter-clist} 中过滤器 |or| 匹配含有 +% hard \textbf{或者} red 的标签,而过滤器 |and| 匹配含有 hard \textbf{并且} +% 含有 red 的标签。 % -% \begin{verbatim} -% \dbNewConditional {cond1}{clist-attr}{a, b, c} % a, b, d 满足条件 -% \dbNewConditional*{cond2}{clist-attr}{a, b, c} % a, b, d 不满足条件 -% \end{verbatim} +% \iffalse +%<*verb> +% \fi +\begin{example}(filter-clist){筛选列表} + \dbNewDatabase{filter-db}{label=clist} + \begin{dbFilters}*{filter-db} + \dbNewCond {or}{label}{hard, red} + \dbNewCond*{and}{label}{hard, red} + \end{dbFilters} + \def\emph#1{\textit{\textbf{#1}}} + \dbNewStyle{base-style}{filter-db}{ + before-code = { + \begin{minipage}[t]{.3\textwidth} + All items + }, + after-code = {\end{minipage}}, + item-code = \par\dbarabic.~\dbuse{label}, + } + \dbNewStyle[base-style] {or-style}{filter-db}{ + before-code = { + \begin{minipage}[t]{.3\textwidth} + Match \emph{any} of hard \emph{or} red + }, + filter = or, + } + \dbNewStyle[base-style]{and-style}{filter-db}{ + before-code = { + \begin{minipage}[t]{.3\textwidth} + Match \emph{all} of hard \emph{and} red + }, + filter = and, + } + \dbitemkv{filter-db}{label={hard, red}} + \dbitemkv{filter-db}{label={hard, blue}} + \dbitemkv{filter-db}{label={easy, blue}} + \dbitemkv{filter-db}{label={easy, red}} + \dbitemkv{filter-db}{label={hard, red, flat}} + \dbshow {base-style}{filter-db} + \dbshow {or-style}{filter-db} + \dbshow {and-style}{filter-db} +\end{example} +% \iffalse +% +% \fi % % \changes{1.3}{2022-01-08}{Update logic}{swap definition of starred and % unstarred conditionals of date} % 对于类型为 |date| 的属性,\cs{dbNewConditional} 定义的条件后续处理中会将 -% \meta{expr} 中的所有日期转换成相对\textit{1971年1月1日}的一个整数值,然后将 -% 处理后的表达式传递给 \cs{int_compare:nTF} 做进一步处理; -% \cs{dbNewConditional*} 使用复习点来定义过滤条件,\meta{review points} 是 -% \cs{dbNewReviewPoints} 定义的复习点,\meta{date} 是用来比较的日期。 +% \meta{expr} 中的所有日期转换成相对1971年1月1日的一个整数值,然后将处理后的 +% 表达式传递给 \cs{int_compare:nTF} 做进一步处理。示例 \ref{cn-filter-date} +% 展示了如何使用该选项。 +% +% \iffalse +%<*verb> +% \fi +\begin{example}(filter-date){根据日期表达式过滤} + \dbNewDatabase{filter-db}{date=date} + \dbNewRawFilter{date-filter}{filter-db}{date}{\dbval >= 2022/02/01} + \dbNewStyle{filter-style}{filter-db}{ + item-code = \dbuse{date}\quad, + filter = date-filter, + } + \dbitemkv{filter-db}{date=2022/01/30} + \dbitemkv{filter-db}{date=2022/02/01} + \dbitemkv{filter-db}{date=2022/02/04} + \dbshow{filter-style}{filter-db} +\end{example} +% \iffalse +% +% \fi +% +% 对于类型为 |date| 的属性,\cs{dbNewConditional*} 使用复习点来定义过滤条件, +% \meta{review points} 是 \cs{dbNewReviewPoints} 定义的复习点,\meta{date} +% 是用来比较的日期(见示例 \ref{cn-review-points})。 +% +% \changes{1.5}{2022-01-16}{Add macro}{\cs{dbNewRawFilter}} +% \begin{function}[added=2022-01-16]{\dbNewRawFilter} +% \begin{syntax} +% \cs{dbNewRawFilter} \marg{name} \marg{database} \marg{attr} \marg{cond spec} \oarg{filter info} +% \cs{dbNewRawFilter}* \marg{name} \marg{database} \marg{attr} \marg{cond spec} \oarg{filter info} +% 等同于 +% |\begin|\{\env{dbFilters}\}*\phantom{\marg{name}}\marg{database} +% ~~\cs{dbNewCond} \marg{name} \phantom{\marg{database}} \marg{attr} \marg{cond spec} \oarg{filter info} +% ~~\cs{dbNewCond}* \marg{name} \phantom{\marg{database}} \marg{attr} \marg{cond spec} \oarg{filter info} +% |\end|\{\env{dbFilters}\} +% \end{syntax} +% +% 该命令用来快捷地定义单个过滤器。示例 \ref{cn-new-raw-filter} 展示了如何使 +% 用该命令,它和示例 \ref{cn-star-filter} 本质上是相同的。 +% \end{function} +% +% \iffalse +%<*verb> +% \fi +\begin{example}(new-raw-filter){定义与条件同名的过滤器} + \dbNewDatabase{filter-db}{count=int} + \dbNewRawFilter{greater}{filter-db}{count}{\dbval > 3} + \dbNewStyle{filter-style}{filter-db}{ + filter = greater, + item-code = \dbuse{count}\quad, + } + \dbitemkv{filter-db}{count=2} + \dbitemkv{filter-db}{count=5} + \dbshow{filter-style}{filter-db} +\end{example} +% \iffalse +% +% \fi % % \begin{function}[added=2022-01-05]{\dbCombineConditionals} % \begin{syntax} @@ -916,37 +1555,60 @@ Copyright and License % \end{syntax} % % \cs{dbCombineConditionals} 定义名为 \marg{name} 的过滤器,并将 -% \cs{dbNewConditional} 定义的条件组合起来,比如 -% \verb=\dbCombineConditionals{filter}{(cond1 && cond2) || !cond3}=。 -% \meta{cond combination} 中可以使用的关系操作符为 \verb=&&, ||, !=。 -% 可以将 \opt{filter} 选项设置为 \meta{name} 来应用过滤器。\meta{info} 为过滤 -% 器的相关信息,在展示数据库的时候可以用 \cs{dbFilterInfo} 指代。 +% \cs{dbNewConditional} 定义的条件组合起来。\meta{cond combination} 中可以使 +% 用的关系操作符为 \verb=&&, ||, !=。可以将 \opt{filter} 选项设置为 +% \meta{name} 来应用过滤器。\meta{info} 为过滤器的相关信息,在展示数据库的时 +% 候可以用 \cs{dbFilterInfo} 指代。使用示例见示例 \ref{cn-filter}. % \end{function} % -% \subsection{使用 \env{dbitem} 环境存储数据} +% \subsection{存储和使用数据} % % \changes{1.4}{2022-01-13}{Update env}{dbitem} % \begin{environment}[added=2022-01-05, updated=2022-01-13]{dbitem} % \begin{syntax} -% |\begin{dbitem}| \marg{database} \oarg{attr-val list} +% |\begin|\marg{\env{dbitem}} \marg{database} \oarg{attr-val list} % ~~\meta{code} \\ -% |\end{dbitem}| +% |\end|\marg{\env{dbitem}} % \end{syntax} % % \env{dbitem} 环境用来存储数据。有两种存储数据的方法,较短的数据可以在选项列 % 表中通过键值对设置值,较长的数据可以在 \meta{code} 中使用 \cs{dbsave} 存储。 % \meta{attr} = \meta{val} 等同于 \cs{dbsave}\marg{attr}\marg{val}, -% \meta{attr}* = \meta{val} 等同于 \cs{dbsave*}\marg{attr}\marg{val},数据在 -% |e| 或者 |x| 类型的参数中不可展开。\cs{dbsave}会覆盖选项中设置的值。没有设 -% 置的值将会被设置为全局默认值,下面给出一个存储示例。 +% \meta{attr}\texttt{*} = \meta{val} 等同于 \cs{dbsave*}\marg{attr} +% \marg{val},数据在 |e| 或者 |x| 类型的参数中不可展开。\cs{dbsave}会覆盖选 +% 项中设置的值。没有设置的值将会被设置为全局默认值。示例 \ref{cn-dbitem} 展 +% 示了如何存储数据。 % \end{environment} % -% \begin{verbatim} -% \begin{dbitem}[date = 2022-01-01, info = 测试] -% \dbsave{question}{这是一个测试问题} -% \dbsave{answer} {这是一个测试答案} -% \end{dbitem} -% \end{verbatim} +% \iffalse +%<*verb> +% \fi +\MakePercentComment +\begin{example}(dbitem){存储数据} + \dbNewDatabase{ques-db}{date=date, ques=tl, ans=tl} + \dbNewStyle{ques-style}{ques-db}{ + item-code = {% + \par\dbuse{date} + \par\dbarabic.~\dbuse{ques} + \par\textbf{答案:}~\dbuse{ans} + }, + item-after-code = \medskip, + date/code* = \zhdate{#1}, + } + \begin{dbitem}{ques-db}[date=2022/01/01] + \dbsave{ques}{地球到月亮的距离} + \dbsave{ans} {384,401公里} + \end{dbitem} + \begin{dbitem}{ques-db}[date=2022/01/02] + \dbsave{ques}{鲁迅的本名} + \dbsave{ans} {周树人} + \end{dbitem} + \dbshow{ques-style}{ques-db} +\end{example} +\MakePercentIgnore +% \iffalse +% +% \fi % % \changes{1.4}{2022-01-13}{Add macro}{\cs{dbitemkv}} % \begin{function}[added=2022-01-13]{\dbitemkv} @@ -957,8 +1619,6 @@ Copyright and License % 只使用 \meta{attr-val list} 来存储数据。 % \end{function} % -% \subsection{\cs{dbsave} 和 \cs{dbuse}} -% % \changes{1.3}{2022-01-08}{Add macro}{\cs{dbsave*}} % \begin{function}[added=2022-01-05, updated=2022-01-08]{\dbsave, \dbsave*} % \begin{syntax} @@ -976,8 +1636,8 @@ Copyright and License % \cs{dbuse} \marg{attr} % \end{syntax} % -% \cs{dbuse} 用来展示数据,只能在 \opt{item-code} 选项中使用。\cs{dbuse} 是可 -% 展开的。 +% \cs{dbuse} 用来展示数据,只能在 \opt{item-code}, \opt{item-before-code}, +% \opt{item-after-code} 选项中使用。\cs{dbuse} 是可展开的。 % \end{function} % % \subsection{条件判别式} @@ -985,20 +1645,69 @@ Copyright and License % \begin{function}[added=2022-01-05, EXP]{\dbIfEmptyT, \dbIfEmptyF, \dbIfEmptyTF} % \begin{syntax} % \cs{dbIfEmptyTF} \marg{true code} \marg{false code} \\ -% \cs{dbIfEmptyT} \marg{true code} \\ +% \cs{dbIfEmptyT} \marg{true code} \\ % \cs{dbIfEmptyF} \marg{false code} % \end{syntax} % -% 该判别式用来判断当前数据库是否为空。下面的示例展示了如何预防空的列表环境。 +% 该判别式用来判断当前数据库是否为空。示例 \ref{cn-empty-db} 演示了如何使用 +% 该判别式来预防空的列表环境。 % \end{function} % -% \begin{verbatim} -% \dbNewStyle{style-cond1}{database-test}{ -% before-code = {\dbIfEmptyF{\begin{enumerate}}}, -% after-code = {\dbIfEmptyF{\end{enumerate}}}, -% item-code = {\item \dbuse{attr-test}} -% } -% \end{verbatim} +% \iffalse +%<*verb> +% \fi +\begin{example}(empty-db){预防空列表环境} + \dbNewDatabase{test-db}{text=tl} + \dbNewRawFilter{alph}{test-db}{text}{\d} + \dbNewStyle{base-style}{test-db}{ + before-code = \dbIfEmptyTF{Empty db}{\begin{enumerate}}, + after-code = \dbIfEmptyF{\end{enumerate}}\medskip, + item-code = \item \dbuse{text}, + } + \dbNewStyle[base-style]{empty-style}{test-db}{ + raw-filter=!alph + } + \dbitemkv{test-db}{text={$1 + 1 = 2$.}} + \dbitemkv{test-db}{text={I have 2 pens.}} + \dbshow {base-style}{test-db} + \dbshow{empty-style}{test-db} +\end{example} +% \iffalse +% +% \fi +% +% \changes{1.5}{2022-01-17}{Add macros}{\cs{dbIfLastT}, \cs{dbIfLastF}, +% \cs{dbIfLastTF}} +% \begin{function}[added=2022-01-17, EXP]{\dbIfLastT, \dbIfLastF, \dbIfLastTF} +% \begin{syntax} +% \cs{dbIfLastTF} \marg{true code} \marg{false code} +% \cs{dbIfLastT} \marg{true code} +% \cs{dbIfLastF} \marg{false code} +% \end{syntax} +% +% 该判别式用来判断当前是否为数据库要展示的最后一条数据。示例 +% \ref{cn-last} 演示了如何设置条目之间的间隔。 +% \end{function} +% +% \iffalse +%<*verb> +% \fi +\begin{example}(last){设置条目之间的间隔} + \dbNewDatabase{last-db}{text=tl} + \dbNewStyle{last-style}{last-db}{ + item-code = {% + \par\dbuse{text}\par% + \dbIfLastF{\textcolor{red}{\hrulefill separator\hrulefill}}% + }, + } + \dbitemkv{last-db}{text=This is the first paragraph.} + \dbitemkv{last-db}{text=This is the second paragraph.} + \dbitemkv{last-db}{text=This is the last paragraph.} + \dbshow{last-style}{last-db} +\end{example} +% \iffalse +% +% \fi % % \changes{1.2}{2022-01-08}{Remove macros}{\cs{dbItemIfEmpty(TF)}, \cs{dbClistItemIfEmpty(TF)}} % @@ -1010,26 +1719,49 @@ Copyright and License % \dbIntMin, \dbIntMod, \dbFpSign, % } % \begin{syntax} -% \cs{dbIntAbs} \Arg{intexpr} -% \cs{dbIntSign} \Arg{intexpr} -% \cs{dbIntDivRound} \Arg{intexpr_1} \marg{intexpr_2} -% \cs{dbIntDivTruncate} \Arg{intexpr_1} \marg{intexpr_2} -% \cs{dbIntMax} \Arg{intexpr_1} \marg{intexpr_2} -% \cs{dbIntMin} \Arg{intexpr_1} \marg{intexpr_2} -% \cs{dbIntMod} \Arg{intexpr_1} \marg{intexpr_2} -% \cs{dbFpSign} \Arg{fpexpr} -% \end{syntax} -% \cs{dbIntAbs} 等同于 \cs{int_abs:n} \\ -% \cs{dbIntSign} 等同于 \cs{int_sign:n} \\ -% \cs{dbIntDivRound} 等同于 \cs{int_div_round:nn} \\ -% \cs{dbIntDivTruncate} 等同于 \cs{int_div_truncate:nn} \\ -% \cs{dbIntMax} 等同于 \cs{int_max:nn} \\ -% \cs{dbIntMin} 等同于 \cs{int_min:nn} \\ -% \cs{dbIntMod} 等同于 \cs{int_mod:nn} \\ -% \cs{dbFpSign} 等同于 \cs{fp_sign:n} \\ -% 详细的文档见 \pkg{interface3} \\ +% \cs{dbIntAbs} \Arg{intexpr} +% \cs{dbIntSign} \Arg{intexpr} +% \cs{dbIntDivRound} \Arg{intexpr_1} \Arg{intexpr_2} +% \cs{dbIntDivTruncate} \Arg{intexpr_1} \Arg{intexpr_2} +% \cs{dbIntMax} \Arg{intexpr_1} \Arg{intexpr_2} +% \cs{dbIntMin} \Arg{intexpr_1} \Arg{intexpr_2} +% \cs{dbIntMod} \Arg{intexpr_1} \Arg{intexpr_2} +% \cs{dbFpSign} \Arg{fpexpr} +% \end{syntax} +% \begin{tblr}{ll} +% \cs{dbIntAbs} & 等同于 \cs{int_abs:n} \\ +% \cs{dbIntSign} & 等同于 \cs{int_sign:n} \\ +% \cs{dbIntDivRound} & 等同于 \cs{int_div_round:nn} \\ +% \cs{dbIntDivTruncate} & 等同于 \cs{int_div_truncate:nn} \\ +% \cs{dbIntMax} & 等同于 \cs{int_max:nn} \\ +% \cs{dbIntMin} & 等同于 \cs{int_min:nn} \\ +% \cs{dbIntMod} & 等同于 \cs{int_mod:nn} \\ +% \cs{dbFpSign} & 等同于 \cs{fp_sign:n} \\ +% \end{tblr} +% +% 详细的文档见 \pkg{interface3}。示例 \ref{cn-expr-db} 展示了如何筛选3的倍数。 % \end{function} % +% \iffalse +%<*verb> +% \fi +\begin{example}(expr-db){筛选3的倍数} + \dbNewDatabase{expr-db}{n=int} + \dbNewRawFilter{mod}{expr-db}{n}{\dbIntMod{\dbval}{3} = 0} + \dbNewStyle{expr-style}{expr-db}{ + item-code = \dbuse{n}\quad, + filter = mod, + } + \dbitemkv{expr-db}{n=2} + \dbitemkv{expr-db}{n=3} + \dbitemkv{expr-db}{n=6} + \dbitemkv{expr-db}{n=7} + \dbshow{expr-style}{expr-db} +\end{example} +% \iffalse +% +% \fi +% % \subsection{特殊命令} % % \pkg{dbshow} 定义了一些特殊的命令,会根据语境展开为不同的内容。 @@ -1040,27 +1772,64 @@ Copyright and License % } % \changes{1.1}{2022-01-06}{Fix bug}{\cs{dbIndex} not defined} % \begin{function}[added=2022-01-05, EXP]{ -% \dbval, \dbDatabase, \dbFilterName, \dbFilterInfo, +% \dbval, \dbtoday, \dbDatabase, \dbFilterName, \dbFilterInfo, % \dbIndex, \dbarabic, \dbalph, \dbAlph, \dbroman, \dbRoman % } % \begin{tblr}{ll} -% \cs{dbval} & 当前属性的值 \\ -% \cs{dbDatabase} & 数据库名称 \\ +% \cs{dbval} & 当前属性的值 \\ +% \cs{dbtoday} & 当天的日期 \\ +% \cs{dbDatabase} & 数据库名称 \\ % \cs{dbFilterName} & 当前样式过滤器的名称 \\ % \cs{dbFilterInfo} & 当前样式过滤器的相关信息 \\ -% \cs{dbIndex} & 数据索引,等同于 \cs{dbuse}|{id}| \\ -% \cs{dbarabic} & 用数字表示的查询集数据计数 \\ -% \cs{dbalph} & 用小写字母表示的查询集数据计数 \\ -% \cs{dbAlph} & 用大写字母表示的查询集数据计数 \\ -% \cs{dbroman} & 用小写罗马字母表示的查询集数据计数 \\ -% \cs{dbroman} & 用大写罗马字母表示的查询集数据计数 \\ -% \end{tblr} +% \cs{dbIndex} & 数据索引,等同于 \cs{dbuse}\marg{id} \\ +% \cs{dbarabic} & 用数字表示的查询集数据计数 \\ +% \cs{dbalph} & 用小写字母表示的查询集数据计数 \\ +% \cs{dbAlph} & 用大写字母表示的查询集数据计数 \\ +% \cs{dbroman} & 用小写罗马字母表示的查询集数据计数 \\ +% \cs{dbroman} & 用大写罗马字母表示的查询集数据计数 \\ +% \end{tblr} +% +% \cs{dbtoday} 使用 \cs{dbdatesep} 确定的分隔符来展示日期。见示例 +% \ref{cn-spespecial-cs}. % \end{function} % -% \section{错题本示例} -% 见第 \ref{sec:example} 节。 +% \iffalse +%<*verb> +% \fi +\MakePercentComment +\begin{example}(special-cs){特殊命令} + \dbNewDatabase{special-db}{name=str} + \dbNewRawFilter*{number}{special-db}{name}{\d+}[name that is a number] + \dbNewStyle{special-style}{special-db}{ + before-code = { + Date: \dbtoday \\ + Database: \dbDatabase + Filter: \dbFilterName \\ + Filter info: \dbFilterInfo \par + \begin{tabular}{@{}lllllll} + Index & arabic & alph & Alph & roman & Roman & value \\ + }, + after-code = \end{tabular}, + item-code* = {% + \dbIndex & \dbarabic & \dbalph & \dbAlph & + \dbroman & \dbRoman & \dbuse{name} \\ + }, + sort = name, + filter = number, + } + \dbitemkv{special-db}{name=test} + \dbitemkv{special-db}{name=12} + \dbitemkv{special-db}{name=int2} + \dbitemkv{special-db}{name=99} + \dbshow{special-style}{special-db} +\end{example} +\MakePercentIgnore +% \iffalse +% +% \fi % % \changes{1.1}{2022-01-07}{Update doc}{improve example} +% \changes{1.5}{2022-01-17}{Remove doc}{Remove big example} % % \title{ % Package \pkg{dbshow} \fileversion% @@ -1085,7 +1854,7 @@ Copyright and License % certain times or questions having not been reviewed for certain days. So this % package provides a database to do such thing. % -% The package provides four core functions: data storage and display, data +% The package provides four core functions: data storage, data % filtering, data sorting and data display. All data is saved once and then you % can display these data with custom filters, orders and styles. % @@ -1129,23 +1898,8 @@ Copyright and License % by \pkg{dbshow} itself and supports converting to integer and printing with % style. % -% \subsection{Comparison to \pkg{datatool}} -% % \changes{1.2}{2022-01-07}{Add doc}{add comparison to \pkg{datatool}} -% -% \pkg{dbshow} and \pkg{datatool} implement the same core functions. But -% \pkg{dbshow} is based on \pkg{expl3} and it supports string regex and -% multi-level sorting. \pkg{dbshow} tries to divide style from the contents -% (data in database): all styles are predefined and can be reused conveniently -% so that there can be only codes to save data and one-line code to show the -% database inside the \env{document} environment. You can hide the details in -% the preamble and focus on the data you want to display. \pkg{dbshow} provides -% a simple temporary runtime database, which means it can not input and output -% data from/to extern files (they should be responsible by some professional -% programming languages). When you need to delete or revise a record, just go to -% where it is recorded in the source code rather than use a macro to manipulate -% data after they are saved. In a sense, \TeX~file is also a kind of data -% persistence. +% \changes{1.3}{2022-01-07}{Remove doc}{remove comparison to \pkg{datatool}} % % \section{Interfaces} % @@ -1186,17 +1940,6 @@ Copyright and License % Every database has a default attribute |id| to store the index of the item. % \end{note} % -% The example below define a database named |ques|. -% \begin{verbatim} -% \dbNewDatabase{ques}{ -% question = tl, % store question -% answer = tl, % store corresponding answer -% date = date, % store the date when you were wrong -% info = tl, % store extra info -% labels = clist % store question labels -% } -% \end{verbatim} -% % \begin{function}[added=2022-01-05]{\dbshow} % \begin{syntax} % \cs{dbshow} \marg{style} \marg{database} @@ -1216,7 +1959,7 @@ Copyright and License % % \subsection{\cs{dbNewStyle} and Style Options} % -% \begin{function}[added=2022-01-05]{\dbNewStyle} +% \begin{function}[added=2022-01-05, updated=2022-01-15]{\dbNewStyle} % \begin{syntax} % \cs{dbNewStyle} \oarg{base styles} \marg{style} \marg{database} \marg{opts} % \end{syntax} @@ -1230,318 +1973,711 @@ Copyright and License % % \begin{option}[added=2022-01-05]{filter} % \begin{syntax} -% filter = +% \opt{filter} = \inidef(-none-) % \end{syntax} % -% Set the \meta{filter} defined by \cs{dbCombineFilters}. +% Set the \meta{filter} defined by \cs{dbCombineFilters}. Example +% \ref{en-filter} shows how to define conditionals and combine them into +% a filter. % \end{option} % +% \DeleteShortVerb{\|} +% \iffalse +%<*verb> +% \fi +\begin{example*}(filter){Filter Items} + \dbNewDatabase{filter-db}{name=str, count=int} + \begin{dbFilters}{filter-db} + \dbNewCond {cond1}{count}{\dbval > 3} + \dbNewCond*{cond2}{name} {\d+} + \dbCombCond{filter-and}{cond1 && cond2} + \dbCombCond{filter-or} {cond1 || cond2} + \end{dbFilters} + \dbitemkv{filter-db}{name=123, count=4} + \dbitemkv{filter-db}{name=ab3, count=2} + \dbitemkv{filter-db}{name=bag, count=5} + \dbNewStyle{filter-and-style}{filter-db}{ + filter = filter-and, + before-code = \par Filter And\par, + item-code = {\dbuse{name}: \dbuse{count}\quad}, + } + \dbNewStyle{filter-or-style}{filter-db}{ + filter = filter-or, + before-code = \par Filter Or\par, + item-code = {\dbuse{name}: \dbuse{count}\quad}, + } + \dbshow{filter-and-style}{filter-db} + \dbshow{filter-or-style} {filter-db} +\end{example*} +% \iffalse +% +% \fi +% \MakeShortVerb{\|} +% % \changes{1.1}{2022-01-06}{Add option}{\opt{raw-filter}} % \begin{option}[added=2022-01-06]{raw-filter} % \begin{syntax} -% raw-filter = +% \opt{raw-filter} = \inidef % \end{syntax} % -% Set anonymous with conditionals defined by \cs{dbNewConditional}. Two -% filters shows in the code below have the same meaning. +% Set anonymous filter with conditionals defined by \cs{dbNewConditional}. +% Example \ref{en-raw-filter} shows how to simplify the code of example +% \ref{en-filter} with \opt{raw-filter} option. % \end{option} % -% \begin{verbatim} -% % method 1 -% \begin{dbFilters}{db} -% \dbNewConditional{cond1}{int-attr}{\rval > 1} -% \dbNewConditional*{cond2}{str-attr}{\d+} -% \end{dbFilters} -% \dbNewStyle{style}{db}{raw-filter={cond1 && cond2}} -% % method 2 -% \begin{dbFilters}{db} -% \dbNewConditional{cond1}{int-attr}{\rval > 1} -% \dbNewConditional*{cond2}{str-attr}{\d+} -% \dbCombineFilters{filter}{cond1 && cond2} -% \end{dbFilters} -% \dbNewStyle{style}{db}{filter=filter} -% \end{verbatim} +% \DeleteShortVerb{\|} +% \iffalse +%<*verb> +% \fi +\begin{example*}(raw-filter){Using Anonymous Filter} + \dbNewDatabase{filter-db}{name=str, count=int} + \begin{dbFilters}{filter-db} + \dbNewCond {cond1}{count}{\dbval > 3} + \dbNewCond*{cond2}{name} {\d+} + \end{dbFilters} + \dbitemkv{filter-db}{name=123, count=4} + \dbitemkv{filter-db}{name=ab3, count=2} + \dbitemkv{filter-db}{name=bag, count=5} + \dbNewStyle{filter-and-style}{filter-db}{ + raw-filter = {cond1 && cond2}, + before-code = \par Filter And\par, + item-code = {\dbuse{name}: \dbuse{count}\quad}, + } + \dbNewStyle{filter-or-style}{filter-db}{ + raw-filter = {cond1 || cond2}, + before-code = \par Filter Or\par, + item-code = {\dbuse{name}: \dbuse{count}\quad}, + } + \dbshow{filter-and-style}{filter-db} + \dbshow{filter-or-style} {filter-db} +\end{example*} +% \iffalse +% +% \fi +% \MakeShortVerb{\|} % % \changes{1.2}{2022-01-08}{Fix bug}{string sorting bug} % \begin{option}[added=2022-01-05]{sort} % \begin{syntax} -% sort = \{ , , \ldots{} \} +% \opt{sort} = \{ , , \ldots{} \} \inidef % \end{syntax} % % Set sorting rules. Attributes of type |str, date, int, fp| is supported to -% sort. Multi-level sort is allowed. \meta{attr} represents for ascending -% order, and \meta{attr}* represents for descending order. The example below -% use four fields to determine the order of the records. It sorts on |level| -% in descending order first and if two |levels| are same then sorts on |birth| -% in ascending order and so on. +% sort. Multi-level sort is allowed. \meta{attr} represents for ascending +% order, and \meta{attr}\texttt{*} represents for descending order. Example +% \ref{en-sort} shows how to sort items by |count| in descending order and +% for the same |count|, sort by |name| in ascending order. % \end{option} % -% \begin{verbatim} -% \dbNewDatabase{sort-example}{ -% name = str, -% birth = date, -% level = int, -% weight = fp, -% } -% \dbNewStyle{sort-style}{sort-example}{ -% sort = { level*, birth, name, weight } -% } -% \end{verbatim} +% \iffalse +%<*verb> +% \fi +\begin{example*}(sort){Multi-level Sorting} + \dbNewDatabase{sort-db}{name=str, count=int} + \dbNewStyle{sort-style}{sort-db}{ + sort = {count*, name}, + item-code = {\dbuse{name}: \dbuse{count}\quad} + } + \dbitemkv{sort-db}{name=bag, count=1} + \dbitemkv{sort-db}{name=box, count=1} + \dbitemkv{sort-db}{name=tag, count=2} + \dbitemkv{sort-db}{name=pen, count=3} + \dbshow{sort-style}{sort-db} +\end{example*} +% \iffalse +% +% \fi +% +% \begin{option}[added=2022-01-05, rEXP]{before-code} +% \begin{syntax} +% \opt{before-code} = \inidef* +% \end{syntax} +% +% Set the \meta{code} that is executed \enbefore displaying the database. +% See Example \ref{en-db-wrap}. +% \end{option} +% +% \begin{option}[added=2022-01-05, rEXP]{after-code} +% \begin{syntax} +% \opt{after-code} = \inidef* +% \end{syntax} +% +% Set the \meta{code} that is executed \enafter displaying the database. +% See Example \ref{en-db-wrap}. +% \end{option} +% +% \iffalse +%<*verb> +% \fi +\begin{example*}(db-wrap){Set the Before and After Code of the Database} + \dbNewDatabase{wrap-db}{text=tl} + \dbNewStyle{wrap-style}{wrap-db}{ + before-code = \textit{before code}\quad, + after-code = \textit{after code}, + item-code = \dbarabic.~\dbuse{text}\quad + } + \dbitemkv{wrap-db}{text=text1} + \dbitemkv{wrap-db}{text=text2} + \dbitemkv{wrap-db}{text=text3} + \dbshow{wrap-style}{wrap-db} +\end{example*} +% \iffalse +% +% \fi % % \begin{option}[added=2022-01-05, rEXP]{item-code} % \begin{syntax} -% item-code = +% \opt{item-code} = \inidef % \end{syntax} % -% Set the code that show a single record. You can use \cs{dbuse} to display -% certian attribute. +% Set the code that display a record. You can use \cs{dbuse} to denote the +% value of attribute. Example \ref{en-item-code} shows how to display an +% acronym glossary table. % \end{option} % -% \changes{1.3}{2022-01-09}{Update option}{\opt{/sep}} -% \begin{option}[added=2022-01-05, updated=2022-01-08, rEXP]{/sep} +% \iffalse +%<*verb> +% \fi +\begin{example*}(item-code){Display Database Items} + \dbNewDatabase{item-db}{acronym=str, desc=tl} + \dbNewStyle{item-style}{item-db}{ + before-code = {\dbIfEmptyF{\begin{description}}}, + after-code = {\dbIfEmptyF{\end{description}}}, + item-code = {\item[\dbuse{acronym}] \dbuse{desc}}, + sort = acronym, + } + \dbitemkv{item-db}{acronym=PM, desc={Prime Minister}} + \dbitemkv{item-db}{acronym=CBD, desc={Central Business District}} + \dbitemkv{item-db}{acronym=DL, desc={Deep Learning}} + \dbshow{item-style}{item-db} +\end{example*} +% \iffalse +% +% \fi +% +% \changes{1.5}{2022-01-17}{Add option}{\opt{item-code*}} +% \begin{option}[added=2022-01-17, rEXP]{item-code*} % \begin{syntax} -% /sep = \\ -% /sep = \{ \\ -% ~~\meta{separator between two}, \\ -% ~~\meta{separator between more than two}, \\ -% ~~\meta{separator between final two} \\ -% \} \\ -% /sep = \{ \\ -% ~~\meta{separator before year}, \\ -% ~~\meta{separator between year and month}, \\ -% ~~\meta{separator between month and day}, \\ -% ~~\meta{separator after day} \\ -% \} \\ +% \opt{item-code*} = \inidef % \end{syntax} % -% Only for attributes of type |clist| or |date|. Set the separator between -% items. If the argument is an one-item comma list, all separators are set to -% \meta{separator} but \meta{separator before year} and \meta{separator after -% day} is set empty. +% The \meta{item code} will be expanded through \cs{protected@edef} before +% it is used. \ref{en-item-exp} shows how to display data with table using +% the expanded code. % \end{option} % -% If the argument is a comma list of 3 items, it is used to set the separator -% between items of the comma list. Following documentation is quoted from -% \pkg{interface3}: -% \begin{quote} -% If the comma list has more than two items, the \meta{separator between -% more than two} is placed between each pair of items except the last, for -% which the \meta{separator between final two} is used. If the comma list -% has exactly two items, then they are placed in the input stream separated -% by the \meta{separator between two}. If the comma list has a single item, -% it is placed in the input stream, and a comma list with no items produces -% no output. -% \end{quote} -% For attributes of type |clist|, incorrect number (numbers exclude 1 and 3) -% of items of the argument will raise an error. -% -% \begin{verbatim} -% % clist-attr is an attribute of database db -% % suppose the val of clist-attr is { 1, 2, 3 } -% \dbNewStyle{clist-sep}{db}{ -% clist-attr/sep = { ,~ }, % print 1, 2, 3 -% clist-attr/sep = { {,~}, {,~}, {and~} } % print 1, 2 and 3 -% } -% \end{verbatim} +% \iffalse +%<*verb> +% \fi +\MakePercentComment +\begin{example*}(item-exp){Display Data with Table} + \dbNewDatabase{tab-db}{name=str, count=int} + \dbNewStyle{tab-style}{tab-db}{ + before-code = {% + \begin{tabular}{ll} + name & count \\ + }, + after-code = \end{tabular}, + item-code* = {% + \textcolor{red}{\dbuse{name}} & \dbuse{count} \\ + }, + } + \dbitemkv{tab-db}{name=bag, count=100} + \dbitemkv{tab-db}{name=pig, count=20} + \dbshow{tab-style}{tab-db} +\end{example*} +\MakePercentIgnore +% \iffalse +% +% \fi % -% If the argument is a comma list of 4 items, it is used to set the separators -% of the date. For attributes of type |date|, incorrect number (numbers -% exclude 1 and 4) will raise an error. -% -% \begin{verbatim} -% % date-attr is an attribute of database db -% % suppose the val of date-attr is 2022/01/01 -% \dbNewStyle{date-sep}{db}{ -% date-attr/sep = -, % print 2022-01-01 -% date-attr/sep = { |, -, -, | } % print |2022-01-01| -% } -% \end{verbatim} +% \changes{1.2}{2022-01-08}{Add options}{\opt{record-before-code}, +% \opt{record-after-code}} +% \changes{1.5}{2022-01-14}{Update options}{Rename \opt{record-before-code} +% and \opt{record-after-code} to \opt{item-before-code} and +% \opt{item-after-code}} +% \begin{option}[added=2022-01-08, updated=2022-01-14, rEXP]{item-before-code} +% \begin{syntax} +% \opt{item-before-code} = \inidef* +% \end{syntax} % -% \changes{1.3}{2022-01-08}{Add option}{\opt{/zfill}} -% \begin{option}[added=2022-01-08, EXP]{/zfill} +% Set the \meta{code} that is executed \enbefore displaying a item. See +% Example \ref{en-item-wrapper}. +% \end{option} +% +% \begin{option}[added=2022-01-08, updated=2022-01-14, rEXP]{item-after-code} % \begin{syntax} -% /zfill = <\TTF> +% \opt{item-after-code} = \inidef* % \end{syntax} % -% Only for attributes of type |date|. Control whether to fill zero on the left -% of the month or day. +% Set the \meta{code} that is executed \enafter displaying the item. See +% Example \ref{en-item-wrapper}. % \end{option} % -% \changes{1.4}{2022-01-13}{Add macro}{\cs{dbdatesep}} -% \begin{function}[added=2022-01-13, EXP]{\dbdatesep} +% \iffalse +%<*verb> +% \fi +\begin{example*}(item-wrapper){Set the Before and After Code of the Item} + \dbNewDatabase{item-wrap-db}{text=tl} + \dbNewStyle{item-wrap-style}{item-wrap-db}{ + item-before-code = \begingroup\ttfamily<, + item-after-code = >\endgroup, + item-code = \dbuse{text}, + } + \dbitemkv{item-wrap-db}{text=example} + \dbshow{item-wrap-style}{item-wrap-db} +\end{example*} +% \iffalse +% +% \fi +% +% \subsubsection{Attribute Options} +% +% \changes{1.5}{2022-01-14}{Remove option}{\opt{/wrapper}} +% +% \changes{1.5}{2022-01-14}{Add options}{\opt{/code}, +% \opt{/code*}} +% \begin{option}[added=2022-01-14, rEXP]{/code} % \begin{syntax} -% \cs{dbdatesep} \marg{separator} +% \nopt{/code} = \inidef(\#1) % \end{syntax} % -% Set the separator for internal date parsing. The default value is |/|, -% i.e. the date must be store in the format of |yyyy/mm/dd|. -% \end{function} +% Set the style code of \meta{attr}. In \meta{code}, |#1| is replaced with the +% value of \meta{attr}. Example \ref{en-attr-code} prints |name| whose |count| +% is less than 10 in teal color, otherwise in red color. +% \end{option} % -% \subsubsection{Decorators} -% -% The options below serves as decorators. In some cases, decorator can also be -% encoded directly into |item-code| or some other places, which is convenient -% sometimes. The benefit of defining decorators with options is that styles step -% further to be divided with contents. In the examples below, \meta{style1} and -% \meta{style2} is the same style, which wrap \meta{attr1} with *. When you want -% another style which wrap \meta{attr1} with =, if you choose the way of -% \meta{style1}, \meta{item code} are repeated, otherwise if you choose the way -% of \meta{style2}, \meta{item code} is inherited and you only need define the -% decorators. -% -% \begin{verbatim} -% \dbNewStyle{style1}{db}{ -% item-code = {% -% *\rvuse{attr1}*\rvuse{attr2} -% % more code -% } -% } -% \dbNewStyle{base-style}{db}{ -% item-code = {% -% \rvuse{attr1}\rvuse{attr2} -% % more code -% } -% } -% \dbNewStyle[base-style]{style2}{db}{ -% attr1/before-code = { * }, -% attr1/after-code = { * }, -% } -% \dbNewStyle[base-style]{style3}{db}{ -% attr1/before-code = { = }, -% attr1/after-code = { = }, -% } -% \end{verbatim} +% \iffalse +%<*verb> +% \fi +\begin{example*}(attr-code){Set Style Code of Attribute} + \dbNewDatabase{attr-code-db}{name=str, count=int} + \begin{dbFilters}{attr-code-db} + \dbNewCond{large}{count}{\dbval >= 10} + \end{dbFilters} + \dbNewStyle{base-style}{attr-code-db}{ + item-code = \dbuse{name}:~\dbuse{count}\quad, + } + \dbNewStyle[base-style]{large-style}{attr-code-db}{ + raw-filter = large, + name/code = \textcolor{red}{#1}, + } + \dbNewStyle[base-style]{small-style}{attr-code-db}{ + raw-filter = !large, + name/code = \textcolor{teal}{#1}, + } + \dbitemkv{attr-code-db}{name=bag, count=1} + \dbitemkv{attr-code-db}{name=pen, count=12} + \dbitemkv{attr-code-db}{name=pig, count=5} + \dbitemkv{attr-code-db}{name=egg, count=50} + \dbshow{large-style}{attr-code-db} + \dbshow{small-style}{attr-code-db} +\end{example*} +% \iffalse +% +% \fi % -% \changes{1.3}{2022-01-08}{Add option}{\opt{/wrapper}} -% \begin{option}[added=2022-01-08, rEXP]{/wrapper} +% \begin{option}[added=2022-01-14, rEXP]{/code*} % \begin{syntax} -% /wrapper = +% \nopt{/code*} = \inidef % \end{syntax} % -% Only for attributes of type |date|. Output of \cs{dbuse}\marg{date attr} -% will be \meta{control sequence}\marg{date}. +% Set the style code of \meta{attr}. In \meta{code}, |#1| is replaced with the +% \textbf{expanded} value of \meta{attr}. This is useful to commands that +% require special format of the arguments. % \end{option} % -% \begin{option}[added=2022-01-05, rEXP]{before-code} +% Example \ref{en-exp-code} shows how to print Chinese date with \cs{zhdate} +% of package \pkg{zhnumber}. \cs{zhdate} require argument to be the date of +% |yyyy/mm/dd|, which is the default date format of \pkg{dbshow}. But we need +% to expand the date through \opt{date/code*} first because \cs{zhdate} cannot +% parse the token list other than |yyyy/mm/dd|. +% +% \iffalse +%<*verb> +% \fi +\MakePercentComment +\begin{example*}(exp-code){Show Chinese Date} + % \usepackage{zhnumber} + \dbNewDatabase{exp-db}{date=date, event=tl} + \dbNewStyle{exp-style}{exp-db}{ + item-code = \par\makebox[4cm][l]{\dbuse{date}}\dbuse{event}, + date/code* = \zhdate{#1}, + } + \dbitemkv{exp-db}{date=2020/12/31, event=eat} + \dbitemkv{exp-db}{date=2021/01/01, event=sleep} + \dbshow{exp-style}{exp-db} +\end{example*} +\MakePercentIgnore +% \iffalse +% +% \fi +% +% \begin{option}[added=2022-01-05, rEXP]{/before-code} % \begin{syntax} -% before-code = +% \nopt{/before-code} = \inidef* % \end{syntax} % -% Set the \meta{code} that is executed \enbefore displaying the database. +% Set the \meta{code} that is executed by \cs{dbuse} \enbefore displaying +% the value of attribute. % \end{option} % -% \begin{option}[added=2022-01-05, rEXP]{after-code} +% \begin{option}[added=2022-01-05, rEXP]{/after-code} +% \begin{syntax} +% \nopt{/after-code} = \inidef* +% \end{syntax} +% +% Set the \meta{code} that is executed by \cs{dbuse} \enafter displaying +% the value of attribute. +% \end{option} +% +% The style code execution order of attribute is: +% \begin{enumerate}[nolistsep] +% \item \opt{/before-code} +% \item \opt{/code} or \opt{/code*} +% \item \opt{/after-code} +% \end{enumerate} +% +% \changes{1.5}{2022-01-16}{Add options}{\opt{/item-code}, +% \opt{/item-code*}} +% \begin{option}[added=2022-01-16, rEXP]{/item-code} +% \begin{syntax} +% \nopt{/item-code} = \inidef(\#1) +% \end{syntax} +% +% Set the style code of \meta{attr}. In \meta{item code}, |#1| is replaced +% with the item of the comma list. Example \ref{en-clist-code} shows how to +% set the style code of the item of the comma list. +% \end{option} +% +% \iffalse +%<*verb> +% \fi +\begin{example*}(clist-code){Set the Style Code of Clist Item} + \dbNewDatabase{clist-db}{name=str, label=clist} + \dbNewStyle{clist-style}{clist-db}{ + item-code = \par\dbuse{name}:~\dbuse{label}, + label/item-code = (\textcolor{red}{\textit{#1}}), + } + \dbitemkv{clist-db}{name=pig, label={animal, meat}} + \dbitemkv{clist-db}{name=Alex, label={person, male}} + \dbshow{clist-style}{clist-db} +\end{example*} +% \iffalse +% +% \fi +% +% \begin{option}[added=2022-01-16, rEXP]{/item-code*} % \begin{syntax} -% after-code = +% \nopt{/item-code*} = \inidef +% \end{syntax} +% +% Set the style code of \meta{attr}. In \meta{item code}, |#1| is replaced +% with the \textbf{expanded} item of the comma list. +% \end{option} +% +% \begin{option}[added=2022-01-05, rEXP]{/item-before-code} +% \begin{syntax} +% \nopt{/item-before-code} = \inidef* +% \end{syntax} +% +% Only for attributes of type |clist|. Set the \meta{code} that is excuted +% \enbefore displaying the item of the comma list. +% \end{option} +% +% \begin{option}[added=2022-01-05, rEXP]{/item-after-code} +% \begin{syntax} +% \nopt{/item-after-code} = \inidef* +% \end{syntax} +% +% Only for attributes of type |clist|. Set the \meta{code} that is excuted +% \enafter displaying the item of the comma list. +% \end{option} +% +% The style code execution order of comma list item is: +% \begin{enumerate}[nolistsep] +% \item \opt{/item-before-code} +% \item \opt{/item-code} or \opt{/item-code*} +% \item \opt{/item-after-code} +% \end{enumerate} +% +% \changes{1.3}{2022-01-09}{Update option}{\opt{/sep}} +% \begin{option}[added=2022-01-05, updated=2022-01-08, rEXP]{/sep} +% \begin{syntax} +% \nopt{/sep} = \sepini\\ +% \nopt{/sep} = \{ \\ +% ~~\meta{separator between two}, \\ +% ~~\meta{separator between more than two}, \\ +% ~~\meta{separator between final two} \\ +% \} \\ +% \nopt{/sep} = \{ \\ +% ~~\meta{separator before year}, \\ +% ~~\meta{separator between year and month}, \\ +% ~~\meta{separator between month and day}, \\ +% ~~\meta{separator after day} \\ +% \} \\ % \end{syntax} % -% Set the \meta{code} that is executed \enafter displaying the database. +% Only for attributes of type |clist| or |date|. Set the separator between +% items. If the argument is an one-item comma list, all separators are set to +% \meta{separator} but \meta{separator before year} and \meta{separator after +% day} is set empty. % \end{option} % -% \changes{1.2}{2022-01-08}{Add options}{\opt{record-before-code}, -% \opt{record-after-code}} -% \begin{option}[added=2022-01-05, rEXP]{record-before-code} -% \begin{syntax} -% record-before-code = -% \end{syntax} +% If the argument is a comma list of 3 items, it is used to set the separator +% between items of the comma list. Following documentation is quoted from +% \pkg{interface3}: +% \begin{quote} +% If the comma list has more than two items, the \meta{separator between +% more than two} is placed between each pair of items except the last, for +% which the \meta{separator between final two} is used. If the comma list +% has exactly two items, then they are placed in the input stream separated +% by the \meta{separator between two}. If the comma list has a single item, +% it is placed in the input stream, and a comma list with no items produces +% no output. +% \end{quote} +% For attributes of type |clist|, incorrect number (numbers exclude 1 and 3) +% of items of the argument will raise an error. Example \ref{en-clist-sep} +% shows how to use this option to customize the separators between comma +% list items. % -% Set the \meta{code} that is executed \enbefore displaying a record. -% \end{option} +% \iffalse +%<*verb> +% \fi +\begin{example*}(clist-sep){Set Separator Between Items of Comma List} + \dbNewDatabase{clist-db}{label=clist} + \dbNewStyle{clist-base}{clist-db}{ + before-code = {\dbIfEmptyF{\begin{enumerate}}}, + after-code = {\dbIfEmptyF{\end{enumerate}}}, + item-code = \item \dbuse{label}, + } + \dbNewStyle[clist-base]{clist-style1}{clist-db}{ + label/sep = {{,~}} + } + \dbNewStyle[clist-base]{clist-style2}{clist-db}{ + label/sep = {{,~}, {,~}, ~and~} + } + \dbitemkv{clist-db}{label={a, b, c}} + \dbitemkv{clist-db}{label={1, 2, 3}} + \dbshow{clist-style1}{clist-db} + \dbshow{clist-style2}{clist-db} +\end{example*} +% \iffalse +% +% \fi % -% \begin{option}[added=2022-01-05, rEXP]{record-after-code} -% \begin{syntax} -% record-after-code = -% \end{syntax} +% If the argument is a comma list of 4 items, it is used to set the separators +% of the date. For attributes of type |date|, incorrect number (numbers +% exclude 1 and 4) will raise an error. Example \ref{en-date-sep} shows how +% to customize the date separators. % -% Set the \meta{code} that is executed \enafter displaying the record. -% \end{option} +% \iffalse +%<*verb> +% \fi +\begin{example*}(date-sep){Set Date Separators} + \dbNewDatabase{date-db}{date=date} + \dbNewStyle{date-style1}{date-db}{ + item-code = \dbuse{date}\quad, + date/sep = -, + } + \dbNewStyle{date-style2}{date-db}{ + item-code = \dbuse{date}\quad, + date/sep = {\$, +, !, \$}, + } + \dbitemkv{date-db}{date=2020/01/02} + \dbitemkv{date-db}{date=2022/07/12} + \dbshow{date-style1}{date-db} + \dbshow{date-style2}{date-db} +\end{example*} +% \iffalse +% +% \fi % -% \begin{option}[added=2022-01-05, rEXP]{/before-code} +% \changes{1.5}{2022-01-14}{Add option}{\opt{/format-code}} +% \begin{option}[added=2022-01-14, rEXP]{/format-code} % \begin{syntax} -% /before-code = +% \nopt{/format-code} = \inidef % \end{syntax} % -% Set the \meta{code} that is executed by \cs{dbuse} \enbefore displaying -% certain attribute. +% Use this option to get fine-grained control over date formatting. In +% \meta{format code}, |#1| represents for the \meta{year}, |#2| represents for +% the \meta{month} and |#3| represents for the \meta{day}. Example +% \ref{en-date-code} shows how to format the date with this option. % \end{option} % -% \begin{option}[added=2022-01-05, rEXP]{/after-code} +% \iffalse +%<*verb> +% \fi +\begin{example*}(date-code){Date Formatting} + \dbNewDatabase{date-db}{date=date} + \dbNewStyle{date-style}{date-db}{ + item-code = \dbuse{date}, + date/format-code = {日:#3\quad 月:#2\quad 年:#1} + } + \dbitemkv{date-db}{date=2022/01/01} + \dbshow{date-style}{date-db} +\end{example*} +% \iffalse +% +% \fi +% +% \changes{1.3}{2022-01-08}{Add option}{\opt{/zfill}} +% \begin{option}[added=2022-01-08, EXP]{/zfill} % \begin{syntax} -% /after-code = +% \nopt{/zfill} = <\TTF> \inidef(true)[true] % \end{syntax} % -% Set the \meta{code} that is executed by \cs{dbuse} \enafter displaying -% certain attribute. +% Only for attributes of type |date|. Control whether to fill zero on the left +% of the month or day. Example \ref{en-date-zfill} shows the differences. % \end{option} % -% \begin{option}[added=2022-01-05, rEXP]{/item-before-code} +% \iffalse +%<*verb> +% \fi +\begin{example*}(date-zfill){Control the Leading Zero of the Date} + \dbNewDatabase{date-db}{date=date} + \dbNewStyle {zfill-style}{date-db}{ + item-code = \dbuse{date}, + } + \dbNewStyle{nofill-style}{date-db}{ + item-code = \dbuse{date}, + date/zfill = false, + } + \dbitemkv{date-db}{date=2022/01/01} + \dbshow {zfill-style}{date-db} + \dbshow{nofill-style}{date-db} +\end{example*} +% \iffalse +% +% \fi +% +% \changes{1.4}{2022-01-13}{Add macro}{\cs{dbdatesep}} +% \begin{function}[added=2022-01-13]{\dbdatesep} % \begin{syntax} -% /item-before-code = +% \cs{dbdatesep} \marg{separator} % \end{syntax} % -% Only for attributes of type |clist|. Set the \meta{code} that is excuted -% \enbefore displaying the item of the comma list. -% \end{option} +% Set the separator for internal date parsing. The default value is |/|, +% i.e. the date must be store in the format of |yyyy/mm/dd|. Example +% \ref{en-inner-date-sep} shows how to store dates with two formats. +% However, the separators are not really stored but used to parse the year, +% month and day, which will be stored internally as three integers. +% \end{function} % -% \begin{option}[added=2022-01-05, rEXP]{/item-after-code} -% \begin{syntax} -% /item-after-code = -% \end{syntax} +% \iffalse +%<*verb> +% \fi +\begin{example*}(inner-date-sep){Set Date Parsing Format} + \dbNewDatabase{inner-date-db}{date=date} + \dbNewStyle{inner-date-style}{inner-date-db}{ + item-code = \dbuse{date}\quad, + } + \dbitemkv{inner-date-db}{date=2020/01/20} + \dbdatesep{-} + \dbitemkv{inner-date-db}{date=2022-01-10} + \dbshow{inner-date-style}{inner-date-db} +\end{example*} +% \iffalse +% +% \fi % -% Only for attributes of type |clist|. Set the \meta{code} that is excuted -% \enafter displaying the item of the comma list. -% \end{option} +% \subsection{Data Filters} % -% \subsection{Use \cs{dbNewReviewPoints} to Define Review Points} +% Filter is a combination of conditionals that is used to filter the data you +% want to display. % % \begin{function}[added=2022-01-05]{\dbNewReviewPoints} % \begin{syntax} % \cs{dbNewReviewPoints} \marg{name} \marg{points} % \end{syntax} % -% Define the new \meta{points} that is specially designed for reviewing -% something. \meta{points} is a list of integers. Suppose you record the date -% when you did not answer correctly and you plan to review every 2, 5 and 15 -% days. The following code give what you want. +% Define \meta{points} to filter dates by intervals. something. \meta{points} +% is a list of \meta{intexpr}. In example \ref{en-review-points}, a \meta{date +% anchor} and a list of \meta{points} is defined. During the filtering process, +% \meta{interval} is calculated by $\meta{interval} = \meta{date anchor} - +% \meta{date cmp}$, \meta{date cmp} is the \meta{date} of current item. Then +% each \meta{intexpr} in \meta{points} is compared with \meta{interval} to +% test if they are equal. % \end{function} % -% \begin{verbatim} -% \dbNewReviewPoints{review-point}{2, 5, 15} % define points -% \begin{dbFilters} -% \dbNewConditional{cond1}{date}{review-point|\Today} % define conditional -% \dbCombineConditionals{filter1}{cond1} % define filter -% \end{dbFilters} -% \dbNewStyle{review-style}{ques}{filter=filter1} % define style -% \end{verbatim} -% -% \subsection{Define Filters inside \env{dbFilters} Environment} +% \iffalse +%<*verb> +% \fi +\DeleteShortVerb{\|} +\dbdatesep{/} +\begin{example*}(review-points){Filter with Review Points} + \dbNewDatabase{filter-db}{date=date} + \dbNewReviewPoints{review}{2, 5} + \dbNewRawFilter*{review-filter}{filter-db}{date}{review|2022/02/06} + \dbNewStyle{filter-style}{filter-db}{ + item-code = \dbuse{date}\quad, + filter = review-filter, + } + \dbitemkv{filter-db}{date=2022/01/30} + \dbitemkv{filter-db}{date=2022/02/01} + \dbitemkv{filter-db}{date=2022/02/04} + \dbshow{filter-style}{filter-db} +\end{example*} +\MakeShortVerb{\|} +% \iffalse +% +% \fi % -% \begin{environment}[added=2022-01-05]{dbFilters} +% \changes{1.5}{2022-01-16}{Update env}{add starred version of \env{dbFilters}} +% \begin{environment}[added=2022-01-05, updated=2022-01-16]{dbFilters} % \begin{syntax} -% |\begin{dbFilters}|\marg{database} \\ +% |\begin|\{\env{dbFilters}\} \marg{database} \\ % ~~\meta{code} -% |\end{dbFilters}| \\ +% |\end|\{\env{dbFilters}\} \\ +% |\begin|\{\env{dbFilters}\} * \marg{database} \\ +% ~~\meta{code} +% |\end|\{\env{dbFilters}\} \\ % \end{syntax} % % Filters are defined inside \env{dbFilters} environment, inside which, % \cs{dbNewConditional} is defined to declare conditionals and -% \cs{dbCombineConditionals} is defined to combine conditionals. Filters are -% independent in different databases, which means the same name of filters is -% allowed in different databases. +% \cs{dbCombineConditionals} is defined to combine conditionals. Starred +% version will define a filter of the same name of conditional as soon as you +% define it. In example \ref{en-star-filter}, line 3 define the conditional +% and the filter named |greater| so that you can use it in option \opt{option}. +% Filters are independent in different databases, which means the same name of +% filters is allowed in different databases. % \end{environment} % -% \begin{function}[added=2022-01-05, updated=2022-01-08]{\dbNewConditional, \dbNewConditional*} +% \iffalse +%<*verb> +% \fi +\begin{example*}(star-filter){Define Conditional and Filter at Same Time} + \dbNewDatabase{filter-db}{count=int} + \begin{dbFilters}*{filter-db} + \dbNewCond{greater}{count}{\dbval > 3} + \end{dbFilters} + \dbNewStyle{filter-style}{filter-db}{ + filter = greater, + item-code = \dbuse{count}\quad, + } + \dbitemkv{filter-db}{count=2} + \dbitemkv{filter-db}{count=5} + \dbshow{filter-style}{filter-db} +\end{example*} +% \iffalse +% +% \fi +% +% \changes{1.5}{2022-01-15}{Add macros}{\cs{dbNewCond}, \cs{dbCombCond}} +% \begin{function}[added=2022-01-05, updated=2022-01-16]{\dbNewConditional, +% \dbNewCond, \dbNewConditional*, \dbNewCond*} % \begin{syntax} -% \cs{dbNewConditional} \marg{name} \marg{attr} \marg{cond spec} \\ -% \cs{dbNewConditional}* \marg{name} \marg{attr} \marg{cond spec} \\[2pt] -% \cs{dbNewConditional} \marg{name} \marg{int/fp attr} \marg{expr} \\ -% \cs{dbNewConditional}* \marg{name} \marg{int/fp attr} \marg{expr} \\ -% \cs{dbNewConditional} \marg{name} \marg{str/tl attr} \marg{regex expr} \\ -% \cs{dbNewConditional}* \marg{name} \marg{str/tl attr} \marg{regex expr} \\ -% \cs{dbNewConditional} \marg{name} \marg{clist attr} \marg{val list} \\ -% \cs{dbNewConditional}* \marg{name} \marg{clist attr} \marg{val list} \\ -% \cs{dbNewConditional} \marg{name} \marg{date attr} \marg{expr} -% \cs{dbNewConditional}* \marg{name} \marg{date attr} \{\meta{review points}\orbar\meta{date}\} \\ +% \cs{dbNewConditional} \marg{name} \marg{attr} \marg{cond spec} \oarg{filter info} +% \cs{dbNewConditional}* \marg{name} \marg{attr} \marg{cond spec} \oarg{filter info} \\[2pt] +% \cs{dbNewConditional} \marg{name} \marg{int/fp attr} \marg{expr} \oarg{filter info} +% \cs{dbNewConditional}* \marg{name} \marg{int/fp attr} \marg{expr} \oarg{filter info} +% \cs{dbNewConditional} \marg{name} \marg{str/tl attr} \marg{regex expr} \oarg{filter info} +% \cs{dbNewConditional}* \marg{name} \marg{str/tl attr} \marg{regex expr} \oarg{filter info} +% \cs{dbNewConditional} \marg{name} \marg{clist attr} \marg{val list} \oarg{filter info} +% \cs{dbNewConditional}* \marg{name} \marg{clist attr} \marg{val list} \oarg{filter info} +% \cs{dbNewConditional} \marg{name} \marg{date attr} \marg{date expr} \oarg{filter info} +% \cs{dbNewConditional}* \marg{name} \marg{date attr} \{\meta{review points}\orbar\meta{date}\} \oarg{filter info} % \end{syntax} % % Define the conditional named \meta{name} that binds to \meta{attr}. \cs{dbval} @@ -1557,53 +2693,176 @@ Copyright and License % \end{note} % % For attribute of type |str| and |tl|, unstarred form matches any part while -% starred form matches the whole part with the \meta{regex expr}. +% starred form matches the whole part with the \meta{regex expr}, which is +% shown in example \ref{en-filter-str}: filter |part| match |name|s that +% contain numbers and filter |all| match |name|s that is composed of digits. % -% \begin{verbatim} -% \dbNewConditional {cond1}{str-attr}{abc} % match abc, abcd, 1abc, =abc=, etc -% \dbNewConditional*{cond2}{str-attr}{abc} % only match abc -% \end{verbatim} +% \iffalse +%<*verb> +% \fi +\begin{example*}(filter-str){Match Strings} + \dbNewDatabase{filter-db}{name=str} + \begin{dbFilters}*{filter-db} + \dbNewCond{part}{name}{\d+} + \dbNewCond*{all}{name}{\d+} + \end{dbFilters} + \dbNewStyle{part-style}{filter-db}{ + before-code = Match part:~, + item-code = \dbuse{name}\quad, + filter = part, + } + \dbNewStyle{all-style}{filter-db}{ + before-code = Match all:~, + item-code = \dbuse{name}\quad, + filter = all, + } + \dbitemkv{filter-db}{name=123} + \dbitemkv{filter-db}{name=int12} + \dbitemkv{filter-db}{name=variable} + \dbshow{part-style}{filter-db} + \dbshow {all-style}{filter-db} +\end{example*} +% \iffalse +% +% \fi % % For attributes of type |clist|, the conditional defined by unstarred form is % true if any item of \meta{val list} is in the comma list. While the % conditional defined by starred form is true only if every item of \meta{val -% list} is in the comma list. As is showed below, for |cond1|, |a| is in -% |{a, b, d}| so |cond1| is true. While |c| is not in |{a, b, d}| so |cond2| -% is false. +% list} is in the comma list. In example \ref{en-filter-clist}, filter |or| +% match labels that contain hard \textbf{or} red, and filter |and| match +% labels that contain hard \textbf{and} red. % -% \begin{verbatim} -% \dbNewConditional {cond1}{clist-attr}{a, b, c} % {a, b, d} -> true -% \dbNewConditional*{cond2}{clist-attr}{a, b, c} % {a, b, d} -> false -% \end{verbatim} +% \iffalse +%<*verb> +% \fi +\begin{example*}(filter-clist){Filter Lists} + \dbNewDatabase{filter-db}{label=clist} + \begin{dbFilters}*{filter-db} + \dbNewCond {or}{label}{hard, red} + \dbNewCond*{and}{label}{hard, red} + \end{dbFilters} + \def\emph#1{\textit{\textbf{#1}}} + \dbNewStyle{base-style}{filter-db}{ + before-code = { + \begin{minipage}[t]{.3\textwidth} + All items + }, + after-code = {\end{minipage}}, + item-code = \par\dbarabic.~\dbuse{label}, + } + \dbNewStyle[base-style] {or-style}{filter-db}{ + before-code = { + \begin{minipage}[t]{.3\textwidth} + Match \emph{any} of hard \emph{or} red + }, + filter = or, + } + \dbNewStyle[base-style]{and-style}{filter-db}{ + before-code = { + \begin{minipage}[t]{.3\textwidth} + Match \emph{all} of hard \emph{and} red + }, + filter = and, + } + \dbitemkv{filter-db}{label={hard, red}} + \dbitemkv{filter-db}{label={hard, blue}} + \dbitemkv{filter-db}{label={easy, blue}} + \dbitemkv{filter-db}{label={easy, red}} + \dbitemkv{filter-db}{label={hard, red, flat}} + \dbshow {base-style}{filter-db} + \dbshow {or-style}{filter-db} + \dbshow {and-style}{filter-db} +\end{example*} +% \iffalse +% +% \fi % % \changes{1.3}{2022-01-08}{Update logic}{swap definition of starred and % unstarred conditionals of date} % For attributes of type |date|, unstarred form replace each date with a -% integer representing for the days between \meta{date} and -% \textit{1971/01/01}, and the result is passed to \cs{int_compare:nTF}. +% integer representing for the days between \meta{date} and 1971/01/01, and +% the result is passed to \cs{int_compare:nTF}. Example \ref{en-filter-date} +% shows how to use the \meta{date expr} to filter the data. +% +% \iffalse +%<*verb> +% \fi +\begin{example*}(filter-date){Filter with Date Expression} + \dbNewDatabase{filter-db}{date=date} + \dbNewRawFilter{date-filter}{filter-db}{date}{\dbval >= 2022/02/01} + \dbNewStyle{filter-style}{filter-db}{ + item-code = \dbuse{date}\quad, + filter = date-filter, + } + \dbitemkv{filter-db}{date=2022/01/30} + \dbitemkv{filter-db}{date=2022/02/01} + \dbitemkv{filter-db}{date=2022/02/04} + \dbshow{filter-style}{filter-db} +\end{example*} +% \iffalse +% +% \fi +% % Starred form defines the conditional with review points defined by -% \cs{dbNewRdbNewReviewPoints} and \meta{date} is the date to be compared. +% \cs{dbNewReviewPoints} and \meta{date} is the date to be compared (see +% example \ref{en-review-points}). +% +% \changes{1.5}{2022-01-16}{Add macro}{\cs{dbNewRawFilter}} +% \begin{function}[added=2022-01-16]{\dbNewRawFilter} +% \begin{syntax} +% \cs{dbNewRawFilter} \marg{name} \marg{database} \marg{attr} \marg{cond spec} \oarg{filter info} +% \cs{dbNewRawFilter}* \marg{name} \marg{database} \marg{attr} \marg{cond spec} \oarg{filter info} +% \textnormal{\textit{Equal to}} +% |\begin|\{\env{dbFilters}\}*\phantom{\marg{name}}\marg{database} +% ~~\cs{dbNewCond} \marg{name} \phantom{\marg{database}} \marg{attr} \marg{cond spec} \oarg{filter info} +% ~~\cs{dbNewCond}* \marg{name} \phantom{\marg{database}} \marg{attr} \marg{cond spec} \oarg{filter info} +% |\end|\{\env{dbFilters}\} +% \end{syntax} +% +% Use this command to quickly define a \meta{filter} that has the same name +% with the \meta{conditional}. Example \ref{en-new-raw-filter} is actually the +% same with example \ref{en-star-filter}, but it is more concise. +% \end{function} +% +% \iffalse +%<*verb> +% \fi +\begin{example*}(new-raw-filter){Define Conditional and Filter at Same Time} + \dbNewDatabase{filter-db}{count=int} + \dbNewRawFilter{greater}{filter-db}{count}{\dbval > 3} + \dbNewStyle{filter-style}{filter-db}{ + filter = greater, + item-code = \dbuse{count}\quad, + } + \dbitemkv{filter-db}{count=2} + \dbitemkv{filter-db}{count=5} + \dbshow{filter-style}{filter-db} +\end{example*} +% \iffalse +% +% \fi % % \begin{function}[added=2022-01-05]{\dbCombineConditionals} % \begin{syntax} % \cs{dbCombineConditionals} \marg{name} \marg{cond combination} \oarg{info} % \end{syntax} % -% Define the filter \meta{name}, which combine the conditionals and store the -% extra \meta{info} into \cs{dbFilterInfo}. So you can write something as\\ -% \verb=\dbCombineConditionals{filter}{(cond1 && cond2) || !cond3}=.\\ -% Supported operators are \verb=&&, ||, !=. You can set the option \opt{filter} -% to \meta{name} to apply the filter when you display the database. +% Define the filter \meta{name}, which combine the conditionals and store +% the extra \meta{info} into \cs{dbFilterInfo}. Supported operators are +% \verb=&&, ||, !=. You can set the option \opt{filter} to \meta{name} to +% apply the filter when you display the database. See example +% \ref{en-filter}. % \end{function} % -% \subsection{Store Data with \env{dbitem} Environment} +% \subsection{Store and Use Data} % % \changes{1.4}{2022-01-13}{Update env}{dbitem} % \begin{environment}[added=2022-01-05, updated=2022-01-13]{dbitem} % \begin{syntax} -% |\begin{dbitem}| \marg{database} \oarg{attr-val list} +% |\begin|\marg{\env{dbitem}} \marg{database} \oarg{attr-val list} % ~~\meta{code} \\ -% |\end{dbitem}| +% |\end|\marg{\env{dbitem}} % \end{syntax} % % The data are stored with \env{dbitem} environment in two ways. Short data @@ -1612,15 +2871,37 @@ Copyright and License % \meta{attr} = \meta{val} is equal to \cs{dbsave}\marg{attr}\marg{val}, and % \meta{attr} = \meta{val} is equal to \cs{dbsave*}\marg{attr}\marg{val}, % in which case, data will not be expanded in an |e| or |x|-type argument. -% An example code is showned below. +% Example \ref{en-dbitem} shows how to store data with \env{dbitem}. % \end{environment} % -% \begin{verbatim} -% \begin{dbitem}[date=2022-01-01, info=test] -% \dbsave{question}{This is a test question.} -% \dbsave{answer} {This is a test answer.} -% \end{dbitem} -% \end{verbatim} +% \iffalse +%<*verb> +% \fi +\MakePercentComment +\begin{example*}(dbitem){Store Date} + \dbNewDatabase{ques-db}{date=date, ques=tl, ans=tl} + \dbNewStyle{ques-style}{ques-db}{ + item-code = {% + \par\dbuse{date} + \par\dbarabic.~\dbuse{ques} + \par\textbf{Answer:}~\dbuse{ans} + }, + item-after-code = \medskip, + } + \begin{dbitem}{ques-db}[date=2022/01/01] + \dbsave{ques}{Distance from earth to moon?} + \dbsave{ans} {384,401 kilometers.} + \end{dbitem} + \begin{dbitem}{ques-db}[date=2022/01/02] + \dbsave{ques}{The number of English letters?} + \dbsave{ans} {26.} + \end{dbitem} + \dbshow{ques-style}{ques-db} +\end{example*} +\MakePercentIgnore +% \iffalse +% +% \fi % % \changes{1.4}{2022-01-13}{Add macro}{\cs{dbitemkv}} % \begin{function}[added=2022-01-13]{\dbitemkv} @@ -1653,7 +2934,8 @@ Copyright and License % \end{syntax} % % Display the value of \meta{attr} of current record. \cs{dbuse} is -% \textbf{expandable} and can be only used inside the option \opt{item-code}. +% \textbf{expandable} and can be only used inside the option \opt{item-code}, +% \opt{item-before-code}, \opt{item-after-code}. % \end{function} % % \subsection{Conditionals} @@ -1661,21 +2943,71 @@ Copyright and License % \begin{function}[added=2022-01-05, EXP]{\dbIfEmptyT, \dbIfEmptyF, \dbIfEmptyTF} % \begin{syntax} % \cs{dbIfEmptyTF} \marg{true code} \marg{false code} \\ -% \cs{dbIfEmptyT} \marg{true code} \\ +% \cs{dbIfEmptyT} \marg{true code} \\ % \cs{dbIfEmptyF} \marg{false code} % \end{syntax} % -% Test if the database is empty. The example below shows how to avoid an empty -% list environment. +% Test if the database is empty. Example \ref{en-empty-db} shows how to +% avoid an empty list environment. % \end{function} % -% \begin{verbatim} -% \dbNewStyle{style-cond1}{database-test}{ -% before-code = {\dbIfEmptyF{\begin{enumerate}}}, -% after-code = {\dbIfEmptyF{\end{enumerate}}}, -% item-code = {\item \dbuse{attr-test}} -% } -% \end{verbatim} +% \iffalse +%<*verb> +% \fi +\begin{example*}(empty-db){Avoid Empty List Environment} + \dbNewDatabase{test-db}{text=tl} + \dbNewRawFilter{alph}{test-db}{text}{\d} + \dbNewStyle{base-style}{test-db}{ + before-code = \dbIfEmptyTF{Empty db}{\begin{enumerate}}, + after-code = \dbIfEmptyF{\end{enumerate}}\medskip, + item-code = \item \dbuse{text}, + } + \dbNewStyle[base-style]{empty-style}{test-db}{ + raw-filter=!alph + } + \dbitemkv{test-db}{text={$1 + 1 = 2$.}} + \dbitemkv{test-db}{text={I have 2 pens.}} + \dbshow {base-style}{test-db} + \dbshow{empty-style}{test-db} +\end{example*} +% \iffalse +% +% \fi +% +% \changes{1.5}{2022-01-17}{Add macros}{\cs{dbIfLastT}, \cs{dbIfLastF}, +% \cs{dbIfLastTF}} +% \begin{function}[added=2022-01-17, EXP]{\dbIfLastT, \dbIfLastF, \dbIfLastTF} +% \begin{syntax} +% \cs{dbIfLastTF} \marg{true code} \marg{false code} +% \cs{dbIfLastT} \marg{true code} +% \cs{dbIfLastF} \marg{false code} +% \end{syntax} +% +% Test if the current item is the last item to display. Example \ref{en-last} +% shows how to set the separator between items. +% \end{function} +% +% \iffalse +%<*verb> +% \fi +\MakePercentComment +\begin{example*}(last){Separator between Items} + \dbNewDatabase{last-db}{text=tl} + \dbNewStyle{last-style}{last-db}{ + item-code = {% + \par\dbuse{text}\par% + \dbIfLastF{\textcolor{red}{\hrulefill separator\hrulefill}}% + }, + } + \dbitemkv{last-db}{text=This is the first paragraph.} + \dbitemkv{last-db}{text=This is the second paragraph.} + \dbitemkv{last-db}{text=This is the last paragraph.} + \dbshow{last-style}{last-db} +\end{example*} +\MakePercentIgnore +% \iffalse +% +% \fi % % \changes{1.2}{2022-01-08}{Remove macros}{\cs{dbItemIfEmpty(TF)}, \cs{dbClistItemIfEmpty(TF)}} % @@ -1687,26 +3019,50 @@ Copyright and License % \dbIntMin, \dbIntMod, \dbFpSign, % } % \begin{syntax} -% \cs{dbIntAbs} \Arg{intexpr} -% \cs{dbIntSign} \Arg{intexpr} -% \cs{dbIntDivRound} \Arg{intexpr_1} \marg{intexpr_2} -% \cs{dbIntDivTruncate} \Arg{intexpr_1} \marg{intexpr_2} -% \cs{dbIntMax} \Arg{intexpr_1} \marg{intexpr_2} -% \cs{dbIntMin} \Arg{intexpr_1} \marg{intexpr_2} -% \cs{dbIntMod} \Arg{intexpr_1} \marg{intexpr_2} -% \cs{dbFpSign} \Arg{fpexpr} -% \end{syntax} -% \cs{dbIntAbs} is identical to \cs{int_abs:n} \\ -% \cs{dbIntSign} is identical to \cs{int_sign:n} \\ -% \cs{dbIntDivRound} is identical to \cs{int_div_round:nn} \\ -% \cs{dbIntDivTruncate} is identical to \cs{int_div_truncate:nn} \\ -% \cs{dbIntMax} is identical to \cs{int_max:nn} \\ -% \cs{dbIntMin} is identical to \cs{int_min:nn} \\ -% \cs{dbIntMod} is identical to \cs{int_mod:nn} \\ -% \cs{dbFpSign} is identical to \cs{fp_sign:n} \\ -% Detailed documentation see \pkg{interface3} \\ +% \cs{dbIntAbs} \Arg{intexpr} +% \cs{dbIntSign} \Arg{intexpr} +% \cs{dbIntDivRound} \Arg{intexpr_1} \Arg{intexpr_2} +% \cs{dbIntDivTruncate} \Arg{intexpr_1} \Arg{intexpr_2} +% \cs{dbIntMax} \Arg{intexpr_1} \Arg{intexpr_2} +% \cs{dbIntMin} \Arg{intexpr_1} \Arg{intexpr_2} +% \cs{dbIntMod} \Arg{intexpr_1} \Arg{intexpr_2} +% \cs{dbFpSign} \Arg{fpexpr} +% \end{syntax} +% \begin{tblr}{ll} +% \cs{dbIntAbs} & is equal to \cs{int_abs:n} \\ +% \cs{dbIntSign} & is equal to \cs{int_sign:n} \\ +% \cs{dbIntDivRound} & is equal to \cs{int_div_round:nn} \\ +% \cs{dbIntDivTruncate} & is equal to \cs{int_div_truncate:nn} \\ +% \cs{dbIntMax} & is equal to \cs{int_max:nn} \\ +% \cs{dbIntMin} & is equal to \cs{int_min:nn} \\ +% \cs{dbIntMod} & is equal to \cs{int_mod:nn} \\ +% \cs{dbFpSign} & is equal to \cs{fp_sign:n} \\ +% \end{tblr} +% +% See detailed documentation of \pkg{interface3}. Example \ref{en-expr-db} +% shows how to filter multiples of 3. % \end{function} % +% \iffalse +%<*verb> +% \fi +\begin{example*}(expr-db){Filter Multiples of 3} + \dbNewDatabase{expr-db}{n=int} + \dbNewRawFilter{mod}{expr-db}{n}{\dbIntMod{\dbval}{3} = 0} + \dbNewStyle{expr-style}{expr-db}{ + item-code = \dbuse{n}\quad, + filter = mod, + } + \dbitemkv{expr-db}{n=2} + \dbitemkv{expr-db}{n=3} + \dbitemkv{expr-db}{n=6} + \dbitemkv{expr-db}{n=7} + \dbshow{expr-style}{expr-db} +\end{example*} +% \iffalse +% +% \fi +% % \subsection{Special Macros} % % Some special macros are defined to expand to different contents according to context. @@ -1721,208 +3077,60 @@ Copyright and License % \dbIndex, \dbarabic, \dbalph, \dbAlph, \dbroman, \dbRoman % } % \begin{tblr}{ll} -% \cs{dbval} & Attribute value, only according in \cs{dbNewConditional}. \\ -% \cs{dbDatabase} & Database name. \\ +% \cs{dbval} & Attribute value, only accessible in \cs{dbNewConditional}. \\ +% \cs{dbtoday} & Date of today. \\ +% \cs{dbDatabase} & Database name. \\ % \cs{dbFilterName} & Filter name. \\ % \cs{dbFilterInfo} & Filter information. \\ -% \cs{dbIndex} & Record index, identical to \cs{dbuse}|{id}| \\ -% \cs{dbarabic} & Show the counter of query set as digits. \\ -% \cs{dbalph} & Show the counter of query set as lowercase letters. \\ -% \cs{dbAlph} & Show the counter of query set as uppercase letters. \\ -% \cs{dbroman} & Show the counter of query set as lowercase roman numerals. \\ -% \cs{dbroman} & Show the counter of query set as uppercase roman numerals. \\ -% \end{tblr} +% \cs{dbIndex} & Record index, identical to \cs{dbuse}\marg{id} \\ +% \cs{dbarabic} & Show the counter of query set as digits. \\ +% \cs{dbalph} & Show the counter of query set as lowercase letters. \\ +% \cs{dbAlph} & Show the counter of query set as uppercase letters. \\ +% \cs{dbroman} & Show the counter of query set as lowercase roman numerals. \\ +% \cs{dbroman} & Show the counter of query set as uppercase roman numerals. \\ +% \end{tblr} +% +% \cs{dbtoday} show the current date with the separator defined by +% \cs{dbdatesep}. See example~\ref{en-special-cs}. % \end{function} % -% \section{Example of Flaw Sweeper Template} -% \label{sec:example} +% \iffalse +%<*verb> +% \fi +\MakePercentComment +\begin{example*}(special-cs){Special Commands} + \dbNewDatabase{special-db}{name=str} + \dbNewRawFilter*{number}{special-db}{name}{\d+}[name that is a number] + \dbNewStyle{special-style}{special-db}{ + before-code = { + Date: \dbtoday \\ + Database: \dbDatabase + Filter: \dbFilterName \\ + Filter info: \dbFilterInfo \par + \begin{tabular}{@{}lllllll} + Index & arabic & alph & Alph & roman & Roman & value \\ + }, + after-code = \end{tabular}, + item-code* = {% + \dbIndex & \dbarabic & \dbalph & \dbAlph & + \dbroman & \dbRoman & \dbuse{name} \\ + }, + sort = name, + filter = number, + } + \dbitemkv{special-db}{name=test} + \dbitemkv{special-db}{name=12} + \dbitemkv{special-db}{name=int2} + \dbitemkv{special-db}{name=99} + \dbshow{special-style}{special-db} +\end{example*} +\MakePercentIgnore +% \iffalse +% +% \fi % % \changes{1.1}{2022-01-07}{Update doc}{improve example} -% -% \begin{verbatim} -% \documentclass{article} -% \usepackage{amsmath, physics} -% \usepackage{geometry} -% \usepackage{dbshow} -% \usepackage{tikz} -% \usepackage{tcolorbox} -% \tcbuselibrary{skins} -% \usetikzlibrary{shadings} -% \usepackage[hidelinks]{hyperref} -% -% \geometry{ -% margin=2cm -% } -% -% % #1 link node #2 target node #3 text to show -% \NewDocumentCommand \linktarget { m m m } {% -% \hyperlink{#1}{#3}% -% \raisebox{1em}{\hypertarget{#2}{}}% -% } -% -% % question box -% \tcbset{ -% base/.style={ -% empty, -% frame engine=path, -% colframe=yellow!10, -% coltitle=red!70, -% fonttitle=\bfseries\sffamily, -% sharp corners, -% left=4pt, -% right=4pt, -% drop fuzzy shadow, -% drop fuzzy shadow, -% borderline west={3pt}{-3pt}{red!80}, -% } -% } -% -% \newtcolorbox{mybox}[1]{% -% base, title = {#1} -% } -% -% \dbNewReviewPoints{review}{1, 3, 7, 15, 30, 60} -% -% \dbNewDatabase{ques-book}{ -% ques = tl, -% answer = tl, -% count = int|1, -% labels = clist, -% date = date, -% } -% -% \begin{dbFilters}{ques-book} -% \dbNewConditional{hard}{labels}{hard} -% \dbNewConditional{bad}{count}{\dbval > 1} -% \dbNewConditional*{review}{date}{review|2022/01/07} -% \dbNewConditional{after}{date}{\dbval > 2022/01/02} -% \end{dbFilters} -% -% % show all questions with hyperlink to answers -% \dbNewStyle{ques}{ques-book}{ -% before-code = {\section{Questions}}, -% item-code = { -% \begin{mybox}{% -% \linktarget{answer_\dbIndex}{ques_\dbIndex}{% -% Question \dbarabic% -% \hspace{2em}\dbuse{date}% -% \hspace{2em}\dbuse{labels}% -% \hfill\dbuse{count}% -% }% -% } -% \dbuse{ques}% -% \end{mybox} -% }, -% labels/sep = /, -% } -% -% % show all questions and answers with hyperlink to questions -% \dbNewStyle{answer}{ques-book}{ -% before-code = {\section{Questions and Answers}}, -% item-code = { -% \begin{mybox}{% -% \linktarget{ques_\dbIndex}{answer_\dbIndex}{% -% Question \dbarabic% -% \hspace{2em}\dbuse{date}% -% \hspace{2em}\dbuse{labels}% -% \hfill\dbuse{count}% -% }% -% } -% \dbuse{ques}\tcbsubtitle{Answer}\dbuse{answer}% -% \end{mybox} -% }, -% labels/sep = /, -% } -% -% % show all hard questions with hyperlink to answers -% \dbNewStyle{hard}{ques-book}{ -% before-code = {\section{Hard Questions}}, -% item-code = { -% \begin{mybox}{% -% \hyperlink{answer_\dbIndex}{% -% Question \dbarabic% -% \hspace{2em}\dbuse{date}% -% \hspace{2em}\dbuse{labels}% -% \hfill\dbuse{count}% -% }% -% } -% \dbuse{ques}% -% \end{mybox} -% }, -% raw-filter = hard, -% labels/sep = /, -% } -% -% % show all hard questions that have been answered incorrectly for more than -% % one time with hyperlink to answers -% \dbNewStyle[hard]{bad}{ques-book}{ -% before-code = {\section{Bad Questions}}, -% raw-filter = {bad && hard}, -% } -% % show all questions that plan to be reviewed on 2022/01/07 with hyperlink to -% % answers -% \dbNewStyle[hard]{review}{ques-book}{ -% before-code = {\section{Questions to be Reviewed}}, -% raw-filter = {review}, -% } -% % show all questions that is record after 2022/01/02 with hyperlink to answers -% \dbNewStyle[hard]{after}{ques-book}{ -% before-code = {\section{Questions after 2022/01/02}}, -% raw-filter = {after}, -% } -% -% \AtEndDocument{ -% \dbshow{review}{ques-book} -% \dbshow{hard}{ques-book} -% \dbshow{bad}{ques-book} -% \dbshow{after}{ques-book} -% \dbshow{ques}{ques-book} -% \dbshow{answer}{ques-book} -% } -% -% \begin{document} -% -% \begin{dbitem}{ques-book}[ -% date=2022/01/01, -% labels={math, equation, easy}, -% count=2 -% ] -% \dbsave{ques}{% -% Solve the linear equation: $x + 16 = 31$. -% } -% \dbsave{answer}{% -% $x = 31 - 16 = 15$ -% } -% \end{dbitem} -% -% \begin{dbitem}{ques-book}[ -% date=2022/01/01, -% labels={math, equation, hard}, -% count=3 -% ] -% \dbsave{ques}{% -% Solve the linear equation: $2y = 16$. -% } -% \dbsave{answer}{% -% $y = 16 / 2 = 8$ -% } -% \end{dbitem} -% -% \begin{dbitem}{ques-book}[ -% date=2022/01/04, -% labels={math, integral, hard}, -% count=1 -% ] -% \dbsave{ques}{% -% Find the indefinite integral: $\int 2x \dd x$. -% } -% \dbsave{answer}{% -% $\int 2x \dd x = x^2$ -% } -% \end{dbitem} -% -% \end{document} -% \end{verbatim} +% \changes{1.5}{2022-01-17}{Remove doc}{Remove big example} % % \end{documentation} % @@ -1962,6 +3170,7 @@ Copyright and License % \begin{macrocode} \cs_generate_variant:Nn \msg_warning:nnnn { nnnx } \cs_generate_variant:Nn \keys_set:nn { nv } +\cs_generate_variant:Nn \tl_put_right:Nn { Nv } \cs_generate_variant:Nn \clist_use:nn { xx } \cs_generate_variant:Nn \clist_use:nnnn { xxxx } \cs_generate_variant:Nn \clist_map_inline:nn { Vn } @@ -2014,6 +3223,8 @@ Copyright and License } % \end{macrocode} % +% \changes{1.5}{2022-01-15}{Update check code}{transform arguments to string +% before check} % \begin{macro}{\@@_check_database:n} % Check if the database is valid. % \begin{arguments} @@ -2021,7 +3232,7 @@ Copyright and License % \end{arguments} % \begin{macrocode} \cs_new:Nn \@@_check_database:n { - \prop_if_exist:cF { g_@@_attr_type_prop_#1 } + \prop_if_exist:cF { g_@@_attr_type_prop_\tl_to_str:n {#1} } { \msg_fatal:nnn { dbshow } { non-existent-database } {#1} } } % \end{macrocode} @@ -2045,7 +3256,7 @@ Copyright and License % \end{arguments} % \begin{macrocode} \cs_new:Nn \@@_check_attr:nn { - \prop_if_in:cnF { g_@@_attr_type_prop_#1 } {#2} + \prop_if_in:cnF { g_@@_attr_type_prop_\tl_to_str:n {#1} } {#2} { \msg_fatal:nnnn { dbshow } { non-existent-attr } {#1} {#2} } } \cs_generate_variant:Nn \@@_check_attr:nn { nV } @@ -2070,8 +3281,8 @@ Copyright and License % \end{arguments} % \begin{macrocode} \cs_new:Nn \@@_check_style:nn { - \tl_if_exist:cF { g_@@_style_opts_tl_#1_#2 } - { \msg_warning:nnnn { dbshow } { non-existent-style } {#1} {#2} } + \tl_if_exist:cF { g_@@_style_opts_tl_\tl_to_str:n {#1}_\tl_to_str:n {#2} } + { \msg_fatal:nnnn { dbshow } { non-existent-style } {#1} {#2} } } % \end{macrocode} % \end{macro} @@ -2094,7 +3305,7 @@ Copyright and License % \end{arguments} % \begin{macrocode} \cs_new:Nn \@@_check_cond:nnn { - \tl_if_exist:cF { g_@@_filter_attr_#1_#2 } + \tl_if_exist:cF { g_@@_filter_attr_\tl_to_str:n {#1}_\tl_to_str:n {#2} } { \msg_fatal:nnnn { dbshow } { non-existent-cond } {#1} {#2} } } % \end{macrocode} @@ -2118,7 +3329,8 @@ Copyright and License % \end{arguments} % \begin{macrocode} \cs_new:Nn \@@_check_filter:nn { - \seq_if_exist:cF { g_@@_filter_run_seq_#1_#2 } { + \seq_if_exist:cF + { g_@@_filter_run_seq_\tl_to_str:n {#1}_\tl_to_str:n {#2} } { \str_if_eq:eeF {#2} { -none- } { \msg_warning:nnnx { dbshow } { non-existent-filter } {#1} {#2} } @@ -2163,7 +3375,7 @@ Copyright and License } % \end{macrocode} % -% \begin{macro}{\@@_sep_error:nnn, \@@_sep_error:xxx} +% \begin{macro}{\@@_sep_fatal:nnn, \@@_sep_fatal:xxx} % Check the value of \opt{/sep} is valid. % \begin{arguments} % \item \meta{valid count} @@ -2171,10 +3383,10 @@ Copyright and License % \item \meta{value} % \end{arguments} % \begin{macrocode} -\cs_new:Nn \@@_sep_error:nnn { - \msg_error:nnnnn { dbshow } { wrong-seperator } {#1} {#2} {#3} +\cs_new:Nn \@@_sep_fatal:nnn { + \msg_fatal:nnnnn { dbshow } { wrong-seperator } {#1} {#2} {#3} } -\cs_generate_variant:Nn \@@_sep_error:nnn { xxx } +\cs_generate_variant:Nn \@@_sep_fatal:nnn { xxx } % \end{macrocode} % \end{macro} % @@ -2190,9 +3402,11 @@ Copyright and License % % \subsection{Create Database} % +% \changes{1.5}{2022-01-15}{Fix bug}{can not use \cs{dbdatesep} midway} % \begin{macro}{\@@_process_default_value:w} % Create map from \meta{attr} to \meta{type} and map from \meta{attr} to -% \meta{default value}. +% \meta{default value}. Note that only one expansion is needed to get the +% correct default value from \cs{l_@@_tmp_default}. % \begin{arguments} % \item \meta{database} % \item \meta{attr} @@ -2204,7 +3418,7 @@ Copyright and License #1\@@_sep#2\@@_sep#3|#4\@@_stop { \@@_check_type:n {#3} \prop_gput:cxx { g_@@_attr_type_prop_#1 } {#2} {#3} - \prop_gput:cxx { g_@@_default_map_#1 } {#2} {#4} + \prop_gput:cno { g_@@_default_map_#1 } {#2} {#4} } % \end{macrocode} % \end{macro} @@ -2617,7 +3831,7 @@ Copyright and License % \begin{macro}{\@@_filter_tl:NNNnn, \@@_filter_tl:cccnn} % Filter token list with regex expression. It is the same with string. % \begin{macrocode} -\cs_set_eq:NN \@@_filter_tl:NNNnn \@@_filter_str:NNNnn +\cs_gset_eq:NN \@@_filter_tl:NNNnn \@@_filter_str:NNNnn \cs_generate_variant:Nn \@@_filter_tl:NNNnn { cccnn } % \end{macrocode} % \end{macro} @@ -2662,8 +3876,11 @@ Copyright and License \__dbdate_set:xx { tmp_day1 } { \l_@@_filter_tmp_tl } \__dbdate_set:xx { tmp_day2 } {#3} \__dbdate_sub:nnN { tmp_day1 } { tmp_day2 } \l_@@_filter_diff_int - \clist_if_in:NxTF \l_@@_filter_tmp_clist - { \int_use:N \l_@@_filter_diff_int } {#4} {#5} + #5 + \clist_map_inline:Nn \l_@@_filter_tmp_clist { + \int_compare:nNnT { \l_@@_filter_diff_int } = {##1} + { #4 \clist_map_break: } + } } { % \end{macrocode} % For unstarred \meta{conditional} which parses \meta{expr}. We first replace @@ -2711,11 +3928,12 @@ Copyright and License % \item \meta{index} % \end{arguments} % \begin{macrocode} -\cs_set:Nn \@@_filter:nnn { +\cs_new_protected:Nn \@@_filter:nnn { \tl_set_eq:Nc \l_@@_attr_tl { g_@@_filter_attr_tl_#1_#2 } \cs_set_eq:Nc \dbval { g_@@_data_#1_\l_@@_attr_tl _#3 } + \tl_set:Nx \l_@@_type_tl { \@@_get_type:nV {#1} \l_@@_attr_tl } \use:c - { @@_filter_\@@_get_type:nV {#1} \l_@@_attr_tl :cccnn } + { @@_filter_\l_@@_type_tl :cccnn } { g_@@_cond_star_bool_#1_#2 } { g_@@_filter_expr_tl_#1_#2 } { dbval } @@ -2739,6 +3957,8 @@ Copyright and License % \end{arguments} % \begin{macrocode} \cs_new_protected:Nn \@@_new_conditional:nnnnn { + \@@_check_database:n {#1} + \@@_check_attr:nn {#1} {#3} \tl_gset:cn { g_@@_filter_attr_tl_#1_#2 } {#3} \tl_gset:cn { g_@@_filter_expr_tl_#1_#2 } {#4} \bool_if_exist:cF { g_@@_filter_bool_#1_#2 } @@ -2757,7 +3977,10 @@ Copyright and License \cs_gset:cn { g_@@_filter_hook_#1_#2:n } { \@@_filter:nnn {#1} {#2} {##1} } - \seq_gput_right:cn { g_@@_cond_seq_#1 } {#2} + \bool_if_exist:cF { g_@@_cond_exist_bool_#1_#2 } + { \bool_set_false:c { g_@@_cond_exist_bool_#1_#2 } } + \bool_if:cF { g_@@_cond_exist_bool_#1_#2 } + { \seq_gput_right:cn { g_@@_cond_seq_#1 } {#2} } } % \end{macrocode} % \end{macro} @@ -2778,7 +4001,7 @@ Copyright and License \cs_new_protected:Nn \@@_combine_conditional:nnn { \tl_gset_eq:cN { g_@@_filter_bool_tl_#1_#2 } \c_true_bool \seq_gclear_new:c { g_@@_filter_run_seq_#1_#2 } - \regex_extract_all:nnN { \w+ } {#3} \l_@@_cond_seq + \regex_extract_all:nnN { [^!=&<>()\ ]+ } {#3} \l_@@_cond_seq % \end{macrocode} % \begin{arguments}[2] % \item \meta{conditional} @@ -2786,13 +4009,18 @@ Copyright and License % \begin{macrocode} \seq_map_inline:Nn \l_@@_cond_seq { \seq_if_in:cnT { g_@@_cond_seq_#1 } {##1} { - \seq_gput_right:cn { g_@@_filter_run_seq_#1_#2 } + \seq_if_in:cnF { g_@@_filter_run_seq_#1_#2 } { g_@@_filter_hook_#1_##1:n } + { + \seq_gput_right:cn { g_@@_filter_run_seq_#1_#2 } + { g_@@_filter_hook_#1_##1:n } + } } } \tl_set:Nn \l_@@_cond_expr_tl {#3} \regex_replace_all:nnN - { \w+ } { \c{ g_@@_filter_bool_#1_\0 } } + { (\w|-|\d|\_)+ } + { \c{ g_@@_filter_bool_#1_\0 } } \l_@@_cond_expr_tl \tl_gset_eq:cN { g_@@_filter_bool_tl_#1_#2 } \l_@@_cond_expr_tl @@ -2801,25 +4029,30 @@ Copyright and License % \end{macrocode} % \end{macro} % -% \begin{macro}{dbFilters, \dbNewConditional, \dbCombineConditionals} +% \begin{macro}{dbFilters, \dbNewConditional, \dbNewCond, +% \dbCombineConditionals, \dbCombCond} % Environment to define conditionals and filters. % \begin{arguments} % \item \meta{database} % \end{arguments} % \begin{macrocode} -\NewDocumentEnvironment { dbFilters } { m } { - \seq_gclear_new:c { g_@@_cond_seq_#1 } +\NewDocumentEnvironment { dbFilters } { s m } { + \seq_if_exist:cF { g_@@_cond_seq_#2 } + { \seq_new:c { g_@@_cond_seq_#2 } } % \end{macrocode} % \begin{arguments}[2] % \item \meta{star} -% \item \meta{conditional} +% \item \meta{filter/conditional} % \item \meta{attr} % \item \meta{expr} +% \item \meta{filter info} % \end{arguments} % \begin{macrocode} - \DeclareDocumentCommand { \dbNewConditional } { s m m m } { - \@@_new_conditional:nnnnn - {#1} {##2} {##3} {##4} {##1} + \DeclareDocumentCommand { \dbNewConditional } { s m m m O{} } { + \@@_new_conditional:nnnnn {#2} {##2} {##3} {##4} {##1} + \IfValueT {#1} { + \dbCombCond{##2}{##2}[##5] + } } % \end{macrocode} % \begin{arguments}[2] @@ -2829,13 +4062,36 @@ Copyright and License % \end{arguments} % \begin{macrocode} \DeclareDocumentCommand { \dbCombineConditionals } { m m O{} } { - \tl_gset:cn { g_@@_filter_info_tl_#1_##1 } {##3} - \@@_combine_conditional:nnn {#1} {##1} {##2} + \tl_gset:cn { g_@@_filter_info_tl_#2_##1 } {##3} + \@@_combine_conditional:nnn {#2} {##1} {##2} } + \cs_set_eq:NN \dbNewCond \dbNewConditional + \cs_set_eq:NN \dbCombCond \dbCombineConditionals } {} % \end{macrocode} % \end{macro} % +% \begin{macro}{\dbNewRawFilter, \dbNewRawFilter*} +% Define filter with single conditional. +% \begin{arguments} +% \item \meta{star} +% \item \meta{filter and conditional name} +% \item \meta{database} +% \item \meta{attr} +% \item \meta{expr} +% \item \meta{filter info} +% \end{arguments} +% \begin{macrocode} +\DeclareDocumentCommand { \dbNewRawFilter } { s m m m m O{} } { + \seq_if_exist:cF { g_@@_cond_seq_#3 } + { \seq_new:c { g_@@_cond_seq_#3 } } + \@@_new_conditional:nnnnn {#3} {#2} {#4} {#5} {#1} + \tl_gset:cn { g_@@_filter_info_tl_#3_#2 } {#6} + \@@_combine_conditional:nnn {#3} {#2} {#2} +} +% \end{macrocode} +% \end{macro} +% % \begin{macro}{\dbNewReviewPoints} % User interface to define \meta{review points}. % \begin{arguments} @@ -2853,26 +4109,19 @@ Copyright and License % \dbIntMax, \dbIntMin, \dbIntMod, \dbFpSign} % Function aliases to support more operations of integer and floating points. % \begin{macrocode} -\cs_set_eq:NN \dbIntAbs \int_abs:n -\cs_set_eq:NN \dbIntSign \int_sign:n -\cs_set_eq:NN \dbIntDivRound \int_div_round:nn -\cs_set_eq:NN \dbIntDivTruncate \int_div_truncate:nn -\cs_set_eq:NN \dbIntMax \int_max:nn -\cs_set_eq:NN \dbIntMin \int_min:nn -\cs_set_eq:NN \dbIntMod \int_mod:nn -\cs_set_eq:NN \dbFpSign \fp_sign:n +\cs_gset_eq:NN \dbIntAbs \int_abs:n +\cs_gset_eq:NN \dbIntSign \int_sign:n +\cs_gset_eq:NN \dbIntDivRound \int_div_round:nn +\cs_gset_eq:NN \dbIntDivTruncate \int_div_truncate:nn +\cs_gset_eq:NN \dbIntMax \int_max:nn +\cs_gset_eq:NN \dbIntMin \int_min:nn +\cs_gset_eq:NN \dbIntMod \int_mod:nn +\cs_gset_eq:NN \dbFpSign \fp_sign:n % \end{macrocode} % \end{macro} % % \subsection{Style and Options} % -% \begin{macro}{\@@_identity:n} -% Does nothing and keep things unchanged. -% \begin{macrocode} -\cs_new:Nn \@@_identity:n {#1} -% \end{macrocode} -% \end{macro} -% % \begin{macro}{\@@_new_attr_style:nnn} % Define style keys for each attribute. % \begin{arguments} @@ -2892,6 +4141,15 @@ Copyright and License g_@@_style_attr_after_tl_#1_#2_#3 }, after-code .initial:n = , + code .code:n = { + \bool_gset_false:c { g_@@_style_attr_exp_bool_#1_#2_#3 } + \cs_gset:cn { @@_style_attr_code_#1_#2_#3:n } {##1} + }, + code .initial:n = {##1}, + code* .code:n = { + \bool_gset_true:c { g_@@_style_attr_exp_bool_#1_#2_#3 } + \cs_gset:cn { @@_style_attr_code_#1_#2_#3:n } {##1} + }, % \end{macrocode} % For comma list and date. % \begin{macrocode} @@ -2909,18 +4167,28 @@ Copyright and License g_@@_style_attr_item_after_tl_#1_#2_#3 }, item-after-code .initial:n = , + item-code .code:n = { + \bool_gset_false:c { g_@@_style_clist_item_exp_bool_#1_#2_#3 } + \cs_gset:cn { @@_style_clist_item_code_#1_#2_#3:n } {##1} + }, + item-code .initial:n = {##1}, + item-code* .code:n = { + \bool_gset_true:c { g_@@_style_clist_item_exp_bool_#1_#2_#3 } + \cs_gset:cn { @@_style_clist_item_code_#1_#2_#3:n } {##1} + }, % \end{macrocode} % Only for date. % \begin{macrocode} zfill .bool_gset:c = { - g_@@_style_attr_zfill_bool_#1_#2_#3 + g_@@_style_date_zfill_bool_#1_#2_#3 }, zfill .initial:n = true, zfill .default:n = true, - wrapper .tl_gset:c = { - g_@@_style_attr_wrapper_#1_#2_#3 + format-code .code:n = { + \cs_gset:cn { @@_style_date_format_code_#1_#2_#3:nnn } {##1} + \cs_generate_variant:cn + { @@_style_date_format_code_#1_#2_#3:nnn } { xxx } }, - wrapper .initial:n = { \@@_identity:n }, } \str_case_e:nn { \@@_get_type:nn {#2} {#3} } { { clist } @@ -2947,21 +4215,28 @@ Copyright and License \str_set:Nx \l_@@_raw_filter_str { -raw\int_use:N \g_@@_raw_filter_int - } \tl_gset:cV { g_@@_filter_#1_#2 } \l_@@_raw_filter_str - \@@_combine_conditional:nnn {#2} \l_@@_raw_filter_str {##1} + \@@_combine_conditional:nVn {#2} \l_@@_raw_filter_str {##1} + }, + filter .tl_gset:c = { g_@@_filter_#1_#2 }, + filter .initial:n = -none-, + sort .clist_gset:c = { g_@@_sort_clist_#1_#2 }, + before-code .tl_gset:c = { g_@@_style_before_tl_#1_#2 }, + before-code .initial:n = , + after-code .tl_gset:c = { g_@@_style_after_tl_#1_#2 }, + after-code .initial:n = , + item-before-code .tl_gset:c = { g_@@_style_item_before_tl_#1_#2 }, + item-before-code .initial:n = , + item-after-code .tl_gset:c = { g_@@_style_item_after_tl_#1_#2 }, + item-after-code .initial:n = , + item-code .code:n = { + \bool_gset_false:c { g_@@_style_item_exp_bool_#1_#2 } + \tl_gset:cn { g_@@_style_item_tl_#1_#2 } {##1} + }, + item-code .initial:n = , + item-code* .code:n = { + \bool_gset_true:c { g_@@_style_item_exp_bool_#1_#2 } + \tl_gset:cn { g_@@_style_item_tl_#1_#2 } {##1} }, - filter .tl_gset:c = { g_@@_filter_#1_#2 }, - filter .initial:n = -none-, - sort .clist_gset:c = { g_@@_sort_clist_#1_#2 }, - before-code .tl_gset:c = { g_@@_style_before_tl_#1_#2 }, - before-code .initial:n = , - item-code .tl_gset:c = { g_@@_style_database_item_tl_#1_#2 }, - item-code .initial:n = , - after-code .tl_gset:c = { g_@@_style_after_tl_#1_#2 }, - after-code .initial:n = , - record-before-code .tl_gset:c = { g_@@_style_record_before_tl_#1_#2 }, - record-before-code .initial:n = , - record-after-code .tl_gset:c = { g_@@_style_record_after_tl_#1_#2 }, - record-after-code .initial:n = , } \prop_map_inline:cn { g_@@_attr_type_prop_#2 } { \@@_new_attr_style:nnn {#1} {#2} {##1} } @@ -2969,6 +4244,8 @@ Copyright and License % \end{macrocode} % \end{macro} % +% \changes{1.5}{2022-01-15}{Add check}{check if database is valid in +% \cs{dbNewStyle}} % \begin{macro}{\dbNewStyle} % Set style options based on \meta{base style}. % \begin{arguments} @@ -2979,6 +4256,7 @@ Copyright and License % \end{arguments} % \begin{macrocode} \NewDocumentCommand { \dbNewStyle } { o m m +m } { + \@@_check_database:n {#3} \tl_gset:cn { g_@@_style_opts_tl_#2_#3 } { #4, } \IfValueT {#1} { \tl_clear_new:N \l_@@_style_tmp_tl @@ -3070,7 +4348,7 @@ Copyright and License { \@@_get_type:nV {#1} \l_@@_sort_attr_str } \clist_if_in:nVF { str, int, date, fp } { \l_@@_sort_type_tl } { - \msg_error:nnx { dbshow } { unsupported-sort-type } + \msg_fatal:nnx { dbshow } { unsupported-sort-type } { \l_@@_sort_type_tl } } \str_if_eq:eeT { \l_@@_sort_type_tl } { date } @@ -3110,51 +4388,57 @@ Copyright and License % % \subsection{Display Data} % -% \begin{macro}{\@@_clist_wrapper:NNn} +% \begin{macro}{\@@_clist_wrapper:NNNNn} % Wrap the clist item with \meta{before code} and \meta{after code}. % \begin{arguments} % \item \meta{before code tl} % \item \meta{after code tl} +% \item \meta{item code cs} +% \item \meta{exp boolean var} % \item \meta{item} % \end{arguments} % \begin{macrocode} -\cs_new:Nn \@@_clist_wrapper:NNn { - \exp_not:n { { #1#3#2 }, } +\cs_new:Nn \@@_clist_wrapper:NNNNn { + \bool_if:NTF #4 + { \exp_not:n { { #1\exp_args:Nx#3{#5}#2 }, } } + { \exp_not:n { { #1#3{#5}#2 }, } } } % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_clist_use:NNNN, \@@_clist_use:cccc} +% \begin{macro}{\@@_clist_use:NNNNNN, \@@_clist_use:cccccc} % Display a comma list. % \begin{arguments} % \item \meta{data clist} % \item \meta{separator clist} % \item \meta{before code tl} % \item \meta{after code tl} +% \item \meta{item code cs} +% \item \meta{exp boolean var} % \end{arguments} % \begin{macrocode} -\cs_new:Nn \@@_clist_use:NNNN { +\cs_new:Nn \@@_clist_use:NNNNNN { \int_case:nnF { \clist_count:N #2 } { { 1 } { \clist_use:xx - { \clist_map_tokens:Nn #1 { \@@_clist_wrapper:NNn #3 #4 } } + { \clist_map_tokens:Nn #1 { \@@_clist_wrapper:NNNNn #3#4#5#6 } } { \clist_item:Nn #2 { 1 } } } { 3 } { \clist_use:xxxx - { \clist_map_tokens:Nn #1 { \@@_clist_wrapper:NNn #3 #4 } } + { \clist_map_tokens:Nn #1 { \@@_clist_wrapper:NNNNn #3#4#5#6 } } { \clist_item:Nn #2 { 1 } } { \clist_item:Nn #2 { 2 } } { \clist_item:Nn #2 { 3 } } } } { - \@@_sep_error:xxx + \@@_sep_fatal:xxx { 1~or~3 } { \clist_count:N #2 } { \clist_use:Nn #2 { ,~ } } } } -\cs_generate_variant:Nn \@@_clist_use:NNNN { cccc } +\cs_generate_variant:Nn \@@_clist_use:NNNNNN { cccccc } % \end{macrocode} % \end{macro} % @@ -3186,7 +4470,7 @@ Copyright and License { \clist_item:Nn #2 { 4 } } } } { - \@@_sep_error:xxx + \@@_sep_fatal:xxx { 1~or~4 } { \clist_count:N #2 } { \clist_use:Nn #2 { ,~ } } @@ -3196,8 +4480,9 @@ Copyright and License % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_use_data:nnnn} -% Display Data. +% \begin{macro}{\@@_use_data:nnnn, \@@_use_data_raw:nnnn} +% Display Data. \cs{@@_use_data:nnnn} wrap the \meta{attr} data and +% \cs{@@_use_data_raw:nnnn} display the underlying data. % \begin{arguments} % \item \meta{database} % \item \meta{attr} @@ -3205,26 +4490,40 @@ Copyright and License % \item \meta{style} % \end{arguments} % \begin{macrocode} -% #1 database #2 attr #3 index #4 style \cs_new:Nn \@@_use_data:nnnn { + \bool_if:cTF { g_@@_style_attr_exp_bool_#4_#1_#2 } { + \protected@edef\@dbshow@tmp{\@@_use_data_raw:nnnn {#1} {#2} {#3} {#4}} + \exp_args:Nno + \use:c { @@_style_attr_code_#4_#1_#2:n } { \@dbshow@tmp } + } { + \use:c { @@_style_attr_code_#4_#1_#2:n } + { \@@_use_data_raw:nnnn {#1} {#2} {#3} {#4} } + } +} +\cs_new:Nn \@@_use_data_raw:nnnn { \str_case_e:nn { \prop_item:cn { g_@@_attr_type_prop_#1 } {#2} } { { str } { \str_use:c { g_@@_data_#1_#2_#3 } } - { tl } { \tl_use:c { g_@@_data_#1_#2_#3 } } + { tl } { \tl_use:c { g_@@_data_#1_#2_#3 } } { int } { \int_use:c { g_@@_data_#1_#2_#3 } } - { fp } { \fp_use:c { g_@@_data_#1_#2_#3 } } + { fp } { \fp_use:c { g_@@_data_#1_#2_#3 } } { clist } { - \@@_clist_use:cccc { g_@@_data_#1_#2_#3 } + \@@_clist_use:cccccc { g_@@_data_#1_#2_#3 } { g_@@_style_attr_sep_#4_#1_#2 } { g_@@_style_attr_item_before_tl_#4_#1_#2 } - { g_@@_style_attr_item_after_tl_#4_#1_#2 } + { g_@@_style_attr_item_after_ tl_#4_#1_#2 } + { @@_style_clist_item_code_ #4_#1_#2:n } + { g_@@_style_clist_item_exp_bool_#4_#1_#2 } } { date } { - \exp_args:Nnx - \tl_use:c { g_@@_style_attr_wrapper_#4_#1_#2 } { + \cs_if_exist_use:cTF { @@_style_date_format_code_#4_#1_#2:xxx } { + { \__dbdate_get_year:n { g_@@_data_#1_#2_#3 } } + { \__dbdate_get_month:n { g_@@_data_#1_#2_#3 } } + { \__dbdate_get_day:n { g_@@_data_#1_#2_#3 } } + } { \@@_date_use:ncc { g_@@_data_#1_#2_#3 } { g_@@_style_attr_sep_#4_#1_#2 } - { g_@@_style_attr_zfill_bool_#4_#1_#2 } + { g_@@_style_date_zfill_bool_#4_#1_#2 } } } } @@ -3247,7 +4546,7 @@ Copyright and License % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_show_filter:nn} +% \begin{macro}{\@@_show_filter:nnN} % Filter records by executing the hook function in the running sequence and % then testing the result boolean. % \begin{arguments} @@ -3289,11 +4588,31 @@ Copyright and License % \end{arguments} % \begin{macrocode} \cs_new_protected:Nn \@@_show_set_counter:N { - \tl_set:Nx \dbalph { \int_to_alph:n {#1} } - \tl_set:Nx \dbAlph { \int_to_Alph:n {#1} } + \tl_set:Nx \dbalph { \int_to_alph:n {#1} } + \tl_set:Nx \dbAlph { \int_to_Alph:n {#1} } \tl_set:Nx \dbarabic { \int_to_arabic:n {#1} } - \tl_set:Nx \dbRoman { \int_to_Roman:n {#1} } - \tl_set:Nx \dbroman { \int_to_roman:n {#1} } + \tl_set:Nx \dbRoman { \int_to_Roman:n {#1} } + \tl_set:Nx \dbroman { \int_to_roman:n {#1} } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_show_set_if_last:NN, \dbIfLastT, \dbIfLastF, \dbIfLastTF} +% Define conditional to check if the current item is the last item. +% \begin{arguments} +% \item \meta{current index} +% \item \meta{count} +% \end{arguments} +% \begin{macrocode} +\cs_new_protected:Nn \@@_show_set_if_last:NN { + \prg_set_conditional:Nnn \@@_show_if_last: { T, F, TF } { + \int_compare:nNnTF {#1} = {#2} + { \prg_return_true: } + { \prg_return_false: } + } + \cs_set_eq:NN \dbIfLastT \@@_show_if_last:T + \cs_set_eq:NN \dbIfLastF \@@_show_if_last:F + \cs_set_eq:NN \dbIfLastTF \@@_show_if_last:TF } % \end{macrocode} % \end{macro} @@ -3308,6 +4627,9 @@ Copyright and License % \begin{macrocode} \cs_new_protected:Nn \@@_show_item:nnN { \int_zero_new:N \l_@@_show_int + \int_zero_new:N \l_@@_show_count_int + \int_set:Nn \l_@@_show_count_int { \clist_count:N #3 } + \tl_clear_new:N \l_@@_item_tl % \end{macrocode} % \begin{arguments}[2] % \item \meta{index} @@ -3315,7 +4637,8 @@ Copyright and License % \begin{macrocode} \clist_map_inline:Nn #3 { \int_incr:N \l_@@_show_int - \@@_show_set_counter:N \l_@@_show_int + \@@_show_set_if_last:NN \l_@@_show_int \l_@@_show_count_int + \@@_show_set_counter:N \l_@@_show_int \tl_set:Nn \dbIndex {##1} % \end{macrocode} % \begin{arguments}[3] @@ -3326,12 +4649,21 @@ Copyright and License \@@_check_attr:nn {#2} {####1} \tl_use:c { g_@@_style_attr_before_tl_#1_#2_####1 } \@@_use_data:nnnn {#2} {####1} {##1} {#1} - \tl_use:c { g_@@_style_attr_after_tl_#1_#2_####1 } + \tl_use:c { g_@@_style_attr_after_ tl_#1_#2_####1 } + } + \bool_if:cTF { g_@@_style_item_exp_bool_#1_#2 } { + \protected@edef\@dbshow@tmp{\tl_use:c { g_@@_style_item_before_tl_#1_#2 }} + \tl_put_right:No \l_@@_item_tl { \@dbshow@tmp } + \protected@edef\@dbshow@tmp{\tl_use:c { g_@@_style_item_ tl_#1_#2 }} + \tl_put_right:No \l_@@_item_tl { \@dbshow@tmp } + \protected@edef\@dbshow@tmp{\tl_use:c { g_@@_style_item_after_ tl_#1_#2 }} + } { + \tl_use:c { g_@@_style_item_before_tl_#1_#2 } + \tl_use:c { g_@@_style_item_ tl_#1_#2 } + \tl_use:c { g_@@_style_item_after_ tl_#1_#2 } } - \tl_use:c { g_@@_style_record_before_tl_#1_#2 } - \tl_use:c { g_@@_style_database_item_tl_#1_#2 } - \tl_use:c { g_@@_style_record_after_tl_#1_#2 } } + \l_@@_item_tl } % \end{macrocode} % \end{macro} @@ -3355,8 +4687,14 @@ Copyright and License % \end{macrocode} % \end{macro} % +% \changes{1.5}{2022-01-15}{Fix bug}{\cs{dbIfEmptyF} undefined} % \begin{macro}{\@@_show:nnn, \@@_show:nnv} % First filter records and sort them if needed and display at last. +% \begin{arguments} +% \item \meta{style} +% \item \meta{database} +% \item \meta{filter} +% \end{arguments} % \begin{macrocode} \cs_new_protected:Nn \@@_show:nnn { \@@_show_set_macro:nn {#2} {#3} @@ -3364,6 +4702,7 @@ Copyright and License \@@_show_filter:nnN {#2} {#3} \l_@@_show_index_clist \clist_if_empty:cF { g_@@_sort_clist_#1_#2 } { \@@_sort:nNn {#2} \l_@@_show_index_clist {#1} } + \@@_show_set_cond:N \l_@@_show_index_clist \tl_use:c { g_@@_style_before_tl_#1_#2 } \@@_show_item:nnN {#1} {#2} \l_@@_show_index_clist \tl_use:c { g_@@_style_after_tl_#1_#2 } @@ -3381,8 +4720,9 @@ Copyright and License % \begin{macrocode} \NewDocumentCommand { \dbshow } { m m } { \@@_check_database:n {#2} - \@@_check_filter:nv {#2} { g_@@_filter_#1_#2 } - \@@_show:nnv {#1} {#2} { g_@@_filter_#1_#2 } + \@@_check_style:nn {#1} {#2} + \@@_check_filter:nv {#2} { g_@@_filter_#1_#2 } + \@@_show:nnv {#1} {#2} { g_@@_filter_#1_#2 } } % \end{macrocode} % \end{macro} @@ -3393,6 +4733,38 @@ Copyright and License %<@@=dbdate> % \end{macrocode} % +% \begin{arguments} +% \item \meta{date} +% \item \meta{date sep} +% \end{arguments} +% \begin{macrocode} +\msg_new:nnn { dbshow } { wrong-date-sep } { + can~not~parse~the~date~'#1'~with~the~global~date~separator~'#2'~ + \msg_line_context:.~Please~set~the~correct~date~separator~with~ + \dbdatesep. +} +% \end{macrocode} +% +% \begin{macro}{\@@_check_date_sep:nn, \@@_check_date_sep:Vn} +% Check if the global date separator is valid. +% \begin{arguments} +% \item \meta{date} +% \item \meta{date sep} +% \end{arguments} +% \begin{macrocode} +\cs_new:Nn \@@_check_date_sep:nn { + \int_zero_new:N \l_@@_sep_int + \tl_map_inline:nn {#1} { + \tl_if_eq:nnT {#2} {##1} { \int_incr:N \l_@@_sep_int } + \int_compare:nNnT { \l_@@_sep_int } > { 2 } { \tl_map_break: } + } + \int_compare:nNnF { \l_@@_sep_int } = { 2 } + { \msg_fatal:nnnn { dbshow } { wrong-date-sep } {#1} {#2} } +} +\cs_generate_variant:Nn \@@_check_date_sep:nn { nV } +% \end{macrocode} +% \end{macro} +% % \begin{macro}[pTF]{\@@_if_leap:n} % Check if the year is leap. % \begin{arguments} @@ -3563,6 +4935,28 @@ Copyright and License % \end{macrocode} % \end{macro} % +% \begin{macro}{\@@_get_year:n, \@@_get_year:x, \@@_get_month:n, +% \@@_get_month:x, \@@_get_day:n, \@@_get_day:x} +% Extract year, month or day from \meta{date var}. +% \begin{arguments} +% \item \meta{date var} +% \end{arguments} +% \begin{macrocode} +\cs_new:Nn \@@_get_year:n { + \int_use:c { @@_year_#1 } +} +\cs_new:Nn \@@_get_month:n { + \int_use:c { @@_month_#1 } +} +\cs_new:Nn \@@_get_day:n { + \int_use:c { @@_day_#1 } +} +\cs_generate_variant:Nn \@@_get_year:n { x } +\cs_generate_variant:Nn \@@_get_month:n { x } +\cs_generate_variant:Nn \@@_get_day:n { x } +% \end{macrocode} +% \end{macro} +% % \begin{macro}{\@@_set:nnnn, \@@_gset:nnnn} % Set the value of \meta{date var}. % \begin{arguments} @@ -3626,10 +5020,12 @@ Copyright and License % \end{arguments} % \begin{macrocode} \cs_new_protected:Nn \@@_set:nn { + \@@_check_date_sep:nV {#2} \g_@@_sep_tl \@@_set:w #1\@@_sep#2\@@_stop } \cs_generate_variant:Nn \@@_set:nn { xx } \cs_new_protected:Nn \@@_gset:nn { + \@@_check_date_sep:nV {#2} \g_@@_sep_tl \@@_gset:w #1\@@_sep#2\@@_stop } \cs_generate_variant:Nn \@@_gset:nn { xx } diff --git a/macros/latex/contrib/dbshow/dbshow.pdf b/macros/latex/contrib/dbshow/dbshow.pdf index 8d7c4d1bc2..7e3d14fb73 100644 Binary files a/macros/latex/contrib/dbshow/dbshow.pdf and b/macros/latex/contrib/dbshow/dbshow.pdf differ diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx index ec8cfcee74..578d585706 100644 --- a/macros/latex/contrib/easybook/easybook.dtx +++ b/macros/latex/contrib/easybook/easybook.dtx @@ -15,7 +15,7 @@ %<*class> \NeedsTeXFormat{LaTeX2e}[2020/10/01] \RequirePackage{l3keys2e} -\ProvidesExplClass{easybook}{2022/01/15}{1.46C} +\ProvidesExplClass{easybook}{2022/01/16}{1.46E} {Typeset Chinese theses or books} \bool_set_false:N \l__eb_compile_draft_bool @@ -305,7 +305,7 @@ %<*package> \NeedsTeXFormat{LaTeX2e}[2020/10/01] \RequirePackage{l3keys2e,etoolbox} -\ProvidesExplPackage{easybase}{2022/01/15}{1.46C} +\ProvidesExplPackage{easybase}{2022/01/16}{1.46E} {Typeset Chinese theses or books} \cs_generate_variant:Nn \dim_set:Nn { NV } @@ -566,9 +566,9 @@ withpart .bool_set:N = \l__eb_chap_counter_withpart_bool, withpart .default:n = true, withpart .initial:n = false, - uppercase .bool_set:N = \l__eb_mark_uppercase_bool, - uppercase .default:n = true, - uppercase .initial:n = true, + uppercase .tl_set:N = \l__eb_mark_uppercase_value_tl, + uppercase .default:n = all, + uppercase .initial:n = all, brackets .code:n = \eb_assign_tag_brackets:n {#1}, brackets .initial:n = { (,) }, figurepath .tl_set:N = \l_eb_graphics_path_tl @@ -654,14 +654,34 @@ \tl_if_novalue:nF {#5} { \vspace*{#5} } \group_end: } +\cs_new:Npn \eb_mark_uppercase_case_init:n + { + \str_case:Vn \l__eb_mark_uppercase_value_tl + { + { all } { \text_uppercase:n } + { first } { \text_titlecase_first:n } + } + } \ctex_define:nn { hdrset } { chap-mark .cs_set:Np = \eb_fancyhf_chapter_mark:n #1, - chap-mark .initial:n = \CTEXifname{\eb@mark@chapter@label}{}#1, + chap-mark .initial:n = + { + \CTEXifname{\eb@mark@chapter@label}{} + \eb_mark_uppercase_case_init:n {#1} + }, sec-mark .cs_set:Np = \eb_fancyhf_section_mark:n #1, - sec-mark .initial:n = \CTEXifname{\eb@mark@section@label}{}#1, + sec-mark .initial:n = + { + \CTEXifname{\eb@mark@section@label}{} + \eb_mark_uppercase_case_init:n {#1} + }, subsec-mark .cs_set:Np = \eb_fancyhf_subsection_mark:n #1, - subsec-mark .initial:n = \CTEXifname{\eb@mark@subsection@label}{}#1, + subsec-mark .initial:n = + { + \CTEXifname{\eb@mark@subsection@label}{} + \eb_mark_uppercase_case_init:n {#1} + }, chap-label .code:n = \eb_mark_chapter_name_parse:n {#1}, chap-label .initial:n = \hspace{1em}, sec-label .code:n = \eb_mark_section_name_parse:n {#1}, @@ -680,20 +700,11 @@ footnoterule .initial:n = \markrule[0.35\textwidth]{\eb@footnote@rule@wd}[|3pt] } -\cs_set_eq:NN \eb_mark_uppercase:n \text_uppercase:n -\cs_set_eq:NN \eb_mark_nouppercase:n \text_titlecase_first:n -\cs_new:Npn \eb_mark_if_uppercase:nn #1#2 - { - \bool_if:NTF \l__eb_mark_uppercase_bool - { \eb_mark_uppercase:n } - { \eb_mark_nouppercase:n } - { \use:c { eb_fancyhf_#1_mark:n } {#2} } - } \cs_set:Npn \markdouble #1 { \markboth{#1}{\ifbool{@twoside}{#1}{}} } \cs_new:Npn \eb@level@markdouble #1#2 - { \markdouble{\eb_mark_if_uppercase:nn {#1} {#2}} } + { \markdouble{\use:c { eb_fancyhf_#1_mark:n } {#2}} } \cs_new:Npn \eb@level@markright #1#2 - { \markright{\eb_mark_if_uppercase:nn {#1} {#2}} } + { \markright{\use:c { eb_fancyhf_#1_mark:n } {#2}} } \cs_gset:Npn \chaptermark #1 { \eb@level@markdouble{chapter}{#1} } \cs_gset:Npn \sectionmark #1 { @@ -1577,8 +1588,8 @@ \cs_new_protected:Npn \eb_biber_title_level_spec:n #1 { \bool_if:NTF \l__eb_class_mode_book_bool - { \bichapter*{#1}{\l__eb_bib_en_bitoc_title_tl} } - { \bisection*{#1}{\l__eb_bib_en_bitoc_title_tl} } + { \bichapter*{#1}{\eb@bib@bitoc@title} } + { \bisection*{#1}{\eb@bib@bitoc@title} } \sectionmark{#1} } \cs_new_protected:Npn \eb_toc_start_multi_column_ext:n #1 @@ -1845,7 +1856,7 @@ \SetEnumitemValue{font}{sf}{\color{ctex@emph}\normalfont\sffamily} \SetEnumitemValue{ref}{enumii}{\arabic{enumi}.\alph*} \SetEnumitemValue{ref}{enumiii}{\arabic{enumi}.\alph{enumii}.\roman*} -\setlist{nosep,labelsep = 0.5em,listparindent = 2em} +\setlist{nosep,labelsep = 0.5em,listparindent = \parindent} \setlist[1]{leftmargin = *,align = left,mode = unboxed} \setlist[itemize,1]{label = bullet} \setlist[itemize,2]{label = endash} @@ -2119,7 +2130,7 @@ bibstyle .initial:n = numerical, citestyle .tl_set:N = \l__eb_bib_cite_style_tl, datafile .clist_set:N = \l__eb_bib_datafile_clist, - bititle .tl_set:N = \l__eb_bib_en_bitoc_title_tl, + bititle .tl_set:N = \eb@bib@bitoc@title, bititle .initial:n = Bibliography, unknown .code:n = \eb_msg_abandon_option:n { bibset } } @@ -2372,6 +2383,9 @@ \exp_args:NV \hypersetup \l__eb_hyperref_clist } +\cs_set_eq:NN \eb@labelformat@save \labelformat +\cs_set_protected:Npn \labelformat #1#2 + { \AfterPreamble{\eb@labelformat@save{#1}{#2}} } \AtBeginDocument { \@ifpackageloaded{cleveref}{} @@ -2419,7 +2433,7 @@ } % %<*tcolorbox> -\ProvidesExplFile{eb-tcolorbox.cfg}{2022/01/15}{1.46C} +\ProvidesExplFile{eb-tcolorbox.cfg}{2022/01/16}{1.46E} {Customization of tcolorbox for easybook} \cs_set_protected:Npn \addtotcbstyle #1#2 diff --git a/macros/latex/contrib/easybook/easybook.pdf b/macros/latex/contrib/easybook/easybook.pdf index bcb1d7e974..633011029a 100644 Binary files a/macros/latex/contrib/easybook/easybook.pdf and b/macros/latex/contrib/easybook/easybook.pdf differ diff --git a/macros/latex/contrib/easybook/easybook.tex b/macros/latex/contrib/easybook/easybook.tex index 39b0334c40..865f7bf26f 100644 --- a/macros/latex/contrib/easybook/easybook.tex +++ b/macros/latex/contrib/easybook/easybook.tex @@ -21,8 +21,8 @@ name = easybook, color-scheme = blue, title = EASYBOOK 使用手册, - version = v1.46C, - date = 2022/01/15, + version = v1.46E, + date = 2022/01/16, authors = 瞿毅, info = 排版简体中文学位论文和书籍, email = q1jx@foxmail.com, @@ -415,7 +415,7 @@ style = { fntnumwith = page, - uppercase = false + uppercase = first } } \ebstyle{hyphen-figure = {-}} @@ -440,9 +440,9 @@ \keybool{withpart}\Default{false} 使章标题跟随部分计数器编号,当开启新的一部分时章编号从 1 开始。 \keychoice{fntnumwith}{part,chapter,page}\Default{chapter} - 使脚注跟随编号的计数器名。默认跟随章计数器,当开启新的一章时脚注编号从 1 开始。 - \keybool{uppercase}\Default{true} - 使用 \cs*{rightmark} 和 \cs*{leftmark} 等标题标记命令获取标题内容时英文是否大写。 + 使脚注跟随编号的计数器名。默认跟随章计数器,即开启新的一章时脚注编号从 1 开始。 + \keychoice{uppercase}{all,first,none}\Default{all} + 使用 \cs*{rightmark} 和 \cs*{leftmark} 等标题标记命令获取标题内容用于页眉页脚时其中英文的大小写类型。\code{all} 为标题标记中的英文字母全部大写,\code{first} 为标记以英文起始时仅第一个字母大写,\code{none} 则不改变标记中英文字母的大小写形式。 \kvsplit{brackets}{左括号,右括号}\Default{\Carg{(\black{,})}} 设置行间公式编号标签的括号及格式,以英文逗号分隔,分别代表左右括号。\meta{左括号} 可以是带有一个参数的命令,用于接受编号和 \meta{右括号}。将标签括号设置为方括号,并使用无衬线字体: \begin{ctexexam} @@ -708,7 +708,7 @@ \subsection{页眉页脚} \label{subsec:header and footer} -模块 \module*{hdrset} 设置的命令由 \pkg*{fancyhdr} 宏包提供支持。在 \cls*{book} 模式时使用章节标题标记选项 \option{chap-mark} 和 \option{sec-mark},在 \cls*{article} 模式时使用 \option{sec-mark} 和 \option{subsec-mark} 选项,这与标准文档类的行为一致。标题标记由标签和标题组成,选项中参数 \code{\#1} 代表当前章、节或小节的标题。也可以直接重新定义这些选项对应的标题标记命令,但此时标记大写选项 \option{uppercase} 失效。 +模块 \module*{hdrset} 设置的命令由 \pkg*{fancyhdr} 宏包提供支持。标题标记由标签和标题组成,选项中参数 \code{\#1} 代表当前章、节或小节的标题。在 \cls*{book} 模式时使用标题标记选项 \option{chap-mark} 和 \option{sec-mark},在 \cls*{article} 模式时使用 \option{sec-mark} 和 \option{subsec-mark} 选项,这与标准文档类的行为一致。重新设置标题标记选项时标记大小写选项 \option{uppercase} 会失效。 \begin{options} \keyval-{chap-mark}{标题标记}\Module{hdrset} 标题标记命令 \cs*{chaptermark} 的内容,包括了标签选项 \option{chap-label} 的内容。 diff --git a/macros/latex/contrib/kanbun/README.md b/macros/latex/contrib/kanbun/README.md new file mode 100644 index 0000000000..3b6e755d2d --- /dev/null +++ b/macros/latex/contrib/kanbun/README.md @@ -0,0 +1,24 @@ +# The `kanbun` package + +The `kanbun` package, like other *kanbun-kundoku* (漢文訓読) LaTeX packages (such as `gckanbun`), allows users to manually input macros for elements in a *kanbun-kundoku* paragraph. + +More importantly, it accepts plain text input in the “*kanbun* annotation” form when used with LuaLaTeX, which allows typesetting *kanbun-kundoku* paragraphs efficiently. + +## Licence + +Copyright 2022 Yuanhao Chen + +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 + +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 Yuanhao Chen. + +This work consists of the files `kanbun.sty`, `kanbun.lua`, +`kanbun-example.tex` and `kanbun.tex`. diff --git a/macros/latex/contrib/kanbun/kanbun-example.pdf b/macros/latex/contrib/kanbun/kanbun-example.pdf new file mode 100644 index 0000000000..f437066ba9 Binary files /dev/null and b/macros/latex/contrib/kanbun/kanbun-example.pdf differ diff --git a/macros/latex/contrib/kanbun/kanbun-example.tex b/macros/latex/contrib/kanbun/kanbun-example.tex new file mode 100644 index 0000000000..0ae963112f --- /dev/null +++ b/macros/latex/contrib/kanbun/kanbun-example.tex @@ -0,0 +1,44 @@ +%% Copyright 2022 Yuanhao Chen +% +% 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 Yuanhao Chen. +% +% This work consists of the files kanbun.sty, kanbun.lua, +% kanbun-example.tex and kanbun.tex. +% +% example text from https://phesoca.com/kanbun-html/ +\documentclass{ltjtarticle} + +\usepackage[match]{luatexja-fontspec} +\setmainjfont{Kozuka Mincho Pr6N} + +\newlength\myzw +\setlength\myzw{2.25\zw} +\usepackage[kumi=beta, unit=\myzw, yokoaki=3.5]{kanbun} + +\usepackage[margin=0pt]{geometry} + +\usepackage{xcolor} + +\Kanbun +初メテ,帝ノ母劉貴人ハ賜(たま)ハリ[レ]死ヲ,太祖ハ告ゲ[レ]帝ニ曰ハク「昔漢武帝ハ將‹し›«テ»ニ[レ]立タセント[二]其ノ子ヲ[一]而殺シ[二]其ノ母ヲ[一],不[下]令(し)メ[三]婦人ヲ後ロニ與(あづか)ラ[二]國政ニ[一],使(し)メ[中]外家ヲ為(な)サ[上レ]亂ヲ。汝當ニ‹べ›«ク»[二]繼統ス[一],故ニ吾レ遠クシテ同ズルコト[二]漢武ト[一],為(た)リ[二]長久之計[一]。」帝素ヨリ純孝ナリ,哀シク泣キ不[レ]能ハ[二]自ラ勝ツコト[一],太祖怒ル[レ]之レヲ。帝ハ還リ[レ]宮ニ,哀シク不[二]自ラ止マ[一],日夜ニシテ號泣ス。太祖知リテ而又タ召ス[レ]之レヲ。帝欲シ[レ]入ラント,左右曰ハク「孝子事ヘバ[レ]父ニ,小杖則チ受ケ,大杖避ク[レ]之レヲ。今陛下ノ怒ルコト盛ンナリ,入レバ或イハ不測ナリ,陷ラス[二]帝ヲ於不義ニ[一]。不[レ]如カ[二]且(しばら)ク出ヅルニ[一],待チテ[二]怒リノ解クルヲ[一]而進ムコト,不ル[レ]晚カラ也。」帝ハ懼レ,從ヒ[レ]之レニ,乃チ游行シ逃グ[二]於外ニ[一]。 +\EndKanbun + +\begin{document} +\color[HTML]{e0e0e0} +\pagestyle{empty} +\vspace*{\fill} +\begin{minipage}{0.5\pageheight} + \printkanbun +\end{minipage} +\vspace*{\fill} +\end{document} \ No newline at end of file diff --git a/macros/latex/contrib/kanbun/kanbun.lua b/macros/latex/contrib/kanbun/kanbun.lua new file mode 100644 index 0000000000..9f8f01aab3 --- /dev/null +++ b/macros/latex/contrib/kanbun/kanbun.lua @@ -0,0 +1,224 @@ +function directtex(str) + coroutine.yield(str) +end + +function to_TeX_box(str) + directtex("\\ExplSyntaxOn\\newbox\\kanbun_lua_box\\sbox\\kanbun_lua_box{"..str.."}\\ExplSyntaxOff") + return tex.getbox('kanbun_lua_box') +end + +function has_value (tab, val) + for index, value in ipairs(tab) do + if value == val then + return true + end + end + return false +end + +function main_loop() + brackets = {} + -- + brackets["furigana"] = {"(", ")"} + brackets["okurigana"] = {"{","}"} -- allow user to omit + brackets["kaeriten"] = {"[","]"} + brackets["furigana4saidokumoji"] = {"‹","›"} + brackets["okurigana4saidokumoji"] = {"«","»"} + -- + -- other_brackets["punctuation"] = {"⦉","⦊"} + -- other_brackets["kanji"] = {"⌊","⌋"} + -- other_brackets["multikanji"] = {"‘","’"} + -- other_brackets["unit"] = {"“","”"} + -- + left_brackets = {} + right_brackets = {} + for k,v in pairs(brackets) do + table.insert(left_brackets, v[1]) + table.insert(right_brackets, v[2]) + end + + -- punctuation_str = "〻―・、,。…「」『』" + punctuation_str = "㆐〻―—・、,。…「」『』!?:" + left_punctuation_str = "「『" + + lines_chars_table = {} + tex_kana_bool = token.create("g_kana_bool") + tex_true_bool = token.create("c_true_bool") + for i,l in ipairs(verb_table) do + split_line = {} + for c in l:gmatch(utf8.charpattern) do + table.insert(split_line, c) + end + + -- some unknown bug (in \matchkana ?) solved by changing the last entry to an empty string if not ascii + for i,c in ipairs(split_line) do + last_index = i + end + if utf8.codepoint(split_line[last_index] or " ") < 128 then + split_line[last_index+1]="" + else + split_line[last_index]="" + end + + last_bracket_index = 0 + for j,c in ipairs(split_line) do + if has_value(left_brackets, c) then + last_bracket_index = j + end + if last_bracket_index == 0 then + directtex("\\matchkana{"..c.."}") + if tex_kana_bool.mode == tex_true_bool.mode then + split_line[j] = brackets["okurigana"][1]..c..brackets["okurigana"][2] + else + split_line[j] = "“⌊"..c.."⌋”" + end + end + if has_value(right_brackets, c) then + last_bracket_index = 0 + end + end + table.insert(lines_chars_table, split_line) + end + + annotated_lines_table = {} + for i,l in ipairs(lines_chars_table) do + line = table.concat(l, "") + + line = string.gsub(line, brackets["okurigana"][2]..brackets["okurigana"][1], "") + for k,v in pairs(brackets) do + line = string.gsub(line, "”(%"..v[1]..")", "%1") + line = string.gsub(line, "(%"..v[2]..")(“)", "%1”%2") + end + for c in line:gmatch(utf8.charpattern) do + last = c + end + if has_value(right_brackets, last) then + str = str .. '”' + end + line = string.gsub(line, "⌊‘⌋”", "‘") + line = string.gsub(line, "“⌊’⌋", "’") + for p in punctuation_str:gmatch(utf8.charpattern) do + line = string.gsub(line, "”“⌊("..p..")⌋", "⦉%1⦊") + end + line = string.gsub(line, "⦊⦉", "") + + -- reverse the makeshift bug fix to \matchkana + line = string.gsub(line, "“⌊⌋”", "") + + -- process annotated text + tmp_number_of_multikanji_braces = {utf8.char(61442), utf8.char(61443)} + -- process line into units + split_line = {} + for c in line:gmatch(utf8.charpattern) do + table.insert(split_line, c) + end + units = {} + unit_content = {} + last_bracket_index = 0 + for j,c in ipairs(split_line) do + if c == "”" then + last_bracket_index = last_bracket_index - 1 + end + if last_bracket_index < 1 then + table.insert(units, table.concat(unit_content, "")) + unit_content = {} + else + table.insert(unit_content, c) + end + if c == "“" then + last_bracket_index = last_bracket_index + 1 + end + end + -- account for multikanji + for j,u in ipairs(units) do + split_unit = {} + for c in u:gmatch(utf8.charpattern) do + table.insert(split_unit, c) + end + number_of_multikanji = 0 + local last_k + for k,c in ipairs(split_unit) do + if c == "“" then + number_of_multikanji = number_of_multikanji + 1 + last_k = k + end + end + for m,c in ipairs(split_unit) do + if m == last_k then + split_unit[m] = "“"..tmp_number_of_multikanji_braces[1]..number_of_multikanji..tmp_number_of_multikanji_braces[2] + end + end + units[j] = table.concat(split_unit, "") + if number_of_multikanji > 0 then + units[j] = string.gsub(units[j], "“(.-)”’(.*)", "“%1%2”") + units[j] = string.gsub(units[j], "‘", "") + tmp_unit = units[j] + table.remove(units, j) + for new_unit in tmp_unit:gmatch"“(.-)”" do + table.insert(units, j, new_unit) + j = j + 1 + end + end + end + for j,u in ipairs(units) do + if u == "" then + table.remove(units, j) + end + end + next_left_punct_ = "" + for j,u in ipairs(units) do + right_okuri_ = u:match("%{(.-)%}") or "" + kanji_ = u:match("⌊(.-)⌋") or "" + right_furi_ = u:match("%((.-)%)") or "" + left_furi_ = u:match("‹(.-)›") or "" + left_okuri_ = u:match("«(.-)»") or "" + punct_ = u:match("⦉(.-)⦊") or "" + -- + -- punct_ = punct_:gsub("―", "\\tateten") + -- punct_ = punct_:gsub("—", "\\tateten") + -- punct_ = punct_:gsub("〻", "\\ninojiten") + -- + kaeriten_ = u:match("%[(.-)%]") or "" + multikanji_ = u:match(tmp_number_of_multikanji_braces[1].."(.-)"..tmp_number_of_multikanji_braces[2]) or 0 + if punctuation_str:match(kanji_) then + punct_ = kanji_ + kanji_ = "" + end + left_punct_ = next_left_punct_ + next_left_punct_ = "" + for p_ in punct_:gmatch(utf8.charpattern) do + if left_punctuation_str:match(p_) then + next_left_punct_ = next_left_punct_ .. p_ + end + end + for p_ in left_punctuation_str:gmatch(utf8.charpattern) do + punct_ = string.gsub(punct_, p_, "") + end + if u:match(tmp_number_of_multikanji_braces[1]) then + multiruby_raise_by_ = 0 + for trace_back_index = 1, multikanji_-1 do + multiruby_raise_by_ = multiruby_raise_by_ + to_TeX_box(units[j - trace_back_index]).width/(kanbunzwtosp) + end + units[j - multikanji_ + 1] = units[j - multikanji_ + 1]:gsub("\\kanjiunit", "\\hbox{\\kanjiunit") + units[j] = "\\kanjiunit{\\multifuriokuri["..multiruby_raise_by_.."]{"..right_furi_.."}{"..right_okuri_.."}}{"..left_punct_.."}{"..kanji_.."}{"..punct_.."}{"..kaeriten_.."}{\\multifuriokuri["..multiruby_raise_by_.."]{"..left_furi_.."}{"..left_okuri_.."}}}" + else + if kanji_ == "" then + units[j] = "" + else + units[j] = "\\kanjiunit{\\furiokuri{"..right_furi_.."}{"..right_okuri_.."}}{"..left_punct_.."}{"..kanji_.."}{"..punct_.."}{"..kaeriten_.."}{\\furiokuri{"..left_furi_.."}{"..left_okuri_.."}}" + end + end + end + line = table.concat(units, "") + + table.insert(annotated_lines_table, line) + end + + -- ouput + output = "{\\kanbunfont"..table.concat(annotated_lines_table, "\\par").."\\par}" + directtex("\\def\\printkanbun{"..output.."}") + directtex("\\def\\printkanbuncode{\\directlua{print('')print(output)}}") + + -- end loop in TeX + directtex("\\continuefalse") +end diff --git a/macros/latex/contrib/kanbun/kanbun.pdf b/macros/latex/contrib/kanbun/kanbun.pdf new file mode 100644 index 0000000000..a3b0cbdd30 Binary files /dev/null and b/macros/latex/contrib/kanbun/kanbun.pdf differ diff --git a/macros/latex/contrib/kanbun/kanbun.sty b/macros/latex/contrib/kanbun/kanbun.sty new file mode 100644 index 0000000000..70994ab463 --- /dev/null +++ b/macros/latex/contrib/kanbun/kanbun.sty @@ -0,0 +1,317 @@ +%% Copyright 2022 Yuanhao Chen +% +% 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 Yuanhao Chen. +% +% This work consists of the files kanbun.sty, kanbun.lua, +% kanbun-example.tex and kanbun.tex. +% +\NeedsTeXFormat{LaTeX2e}[2021/06/01] +\RequirePackage{expl3,xparse,l3keys2e,ifluatex} +\ProvidesExplClass{kanbun} + {2022/01/15} {1.0} {漢文の訓点文の組版} + +\ExplSyntaxOn +\cs_generate_variant:Nn \str_if_eq:nnTF { V } +\cs_generate_variant:Nn \str_case:nnTF { V } + +% vars used in options +\tl_set:Nn \kanbun_scale { 2 } +\newlength\kanbun_init_zw +\setlength\kanbun_init_zw{1em} +\@ifpackageloaded{luatexja-fontspec}{ + \tl_set:Nn \kanbun_rubyfontcmd_default { \addjfontfeatures{RawFeature={+ruby}} } + \tl_set:Nn \kanbun_fontcmd_default { \addjfontfeatures{RawFeature={+trad}} } +}{ + \tl_set:Nn \kanbun_rubyfontcmd_default {} + \tl_set:Nn \kanbun_fontcmd_default {} +} + +% options +\keys_define:nn { kanbun } + { + , scale .tl_set:N = \kanbun_scale + , scale .initial:n = { 2 } + , fontcmd .tl_set:N = \kanbun_fontcmd + , fontcmd .initial:n = \kanbun_fontcmd_default + , rubyfontcmd .tl_set:N = \kanbun_rubyfontcmd + , rubyfontcmd .initial:n = \kanbun_rubyfontcmd_default + , unit .tl_set:N = \kanbun_zw + , unit .initial:n = { \kanbun_init_zw } + , yokoaki .tl_set:N = \kanbun_yokoaki + , yokoaki .initial:n = { \kanbun_scale } + , tateaki .tl_set:N = \kanbun_tateaki + , tateaki .initial:n = { 2 } + , okuriprotrusion .tl_set:N = \kanbun_okuriprotrusion + , okuriprotrusion .initial:n = { 1 } + , kumi .tl_set:N = \kanbun_kumi + , kumi .initial:n = { aki } + , aki .code:n = \keys_set:nn { kanbun } { kumi = aki } + , beta .code:n = \keys_set:nn { kanbun } { kumi = beta } + } +\ProcessKeysOptions { kanbun } + +% other vars +\tl_set:Nn \kanbun_rubyfontsize_rubyfontcmd { \kanbun_rubyfontcmd\fontsize{\fp_eval:n {1/\kanbun_scale}\kanbun_zw}{0pt}\selectfont } +\newlength{\kanbun_furilen} +\tl_set:Nn \kanbun_tateten_width { 1/30 } +\tl_set:Nn \kanbunzwtosp { \fp_eval:n {\dim_ratio:nn { 1 \kanbun_zw } { 1 sp } } } +\tl_set:Nn \kanbun_unit_glue { + \str_if_eq:VnTF \kanbun_kumi { aki } { + \penalty0 + } + { + \hskip 0\kanbun_zw plus 0.25\kanbun_zw minus 0\kanbun_zw + } +} +\tl_set:Nn \kanbun_punct_glue { + \hskip 0\kanbun_zw plus 0.5\kanbun_zw minus 0\kanbun_zw +} + +% \kanjiunit and other macros to be used in a \kanjiunit +\NewDocumentCommand { \kanbun_ensure_height } { m m } + { + \vbox to #1{\vss{#2}\vss} + } +\newbox\kanbun_current_kanjiunit +\NewDocumentCommand { \kanjiunit } { m m m m m m } + { + \tl_set:Nn \ninojiten_punct {} + \tl_set:Nn \right_punct {} + \tl_set:Nn \central_punct {} + \process_punct{ #4 } + \tl_set:Nn \kanbun_central_punct_box { + \kanbun_ensure_height{1\kanbun_zw} { + \str_if_eq:VnTF \kanbun_kumi { aki } + { + \hbox{\kern 1\kanbun_zw{\hbox to \fp_eval:n { \kanbun_tateaki/\kanbun_scale }\kanbun_zw{\hss{\central_punct}\hss}}} + } + { + \hbox{\kern 1\kanbun_zw{\central_punct}} + } + } + } + \tl_set:Nn \kanbun_left_punct_phantom { + \kanbun_ensure_height{1\kanbun_zw} { + \str_if_eq:VnTF \kanbun_kumi { aki } { } + { + \str_if_eq:nnTF { #2 } { } { } { + \hbox{\phantom{\hbox to 0.5\kanbun_zw{\hss#2\hfil}}} + } + } + } + } + \tl_set:Nn \kanbun_right_punct_box { + \kanbun_ensure_height{1\kanbun_zw} { + \str_if_eq:VnTF \right_punct { } { } { + \hbox{\kern 1\kanbun_zw{\right_punct}} + } + } + } + % + \tl_set:Nn \unit_content { + \kanbun_left_punct_phantom % compensate for width of left punct + \vbox{ + \kanbun_ensure_height{\fp_eval:n { 1/\kanbun_scale }\kanbun_zw}{\hbox{\kanbun_rubyfontsize_rubyfontcmd{#1}}} % right kana + \nointerlineskip % + \kanbun_ensure_height{1\kanbun_zw}{\llap{#2}} % left punct + \nointerlineskip % + \vspace*{-1 \kanbun_zw} + \kanbun_ensure_height{1\kanbun_zw}{ + \hbox to 1\kanbun_zw{\hss{#3}\hss} + } % kanji + \nointerlineskip % + \vspace*{-1 \kanbun_zw} + \kanbun_ensure_height{\fp_eval:n { 1/\kanbun_scale }\kanbun_zw}{\hbox{\kern 1\kanbun_zw{\ninojiten_punct}}} % ninojiten + \nointerlineskip % + \vspace*{\fp_eval:n { -1/\kanbun_scale }\kanbun_zw} + \kanbun_right_punct_box % right punct + \nointerlineskip % + \vspace*{-1\kanbun_zw} + \kanbun_central_punct_box % central punct + \nointerlineskip % + \vspace*{ \fp_eval:n { -1/\kanbun_scale }\kanbun_zw } + \kanbun_ensure_height{\fp_eval:n { 1/\kanbun_scale }\kanbun_zw}{\hbox{\kanbun_rubyfontsize_rubyfontcmd\kern 1\kanbun_zw{\kaeriten{#5}}}} % kaeriten + \nointerlineskip % + \kanbun_ensure_height{\fp_eval:n { 1/\kanbun_scale }\kanbun_zw}{\hbox{\kanbun_rubyfontsize_rubyfontcmd{#6}}} % left kana + } + } + \str_if_eq:VnTF \kanbun_kumi { aki } { + \setbox\kanbun_current_kanjiunit \hbox to \fp_eval:n { 1+\kanbun_tateaki/\kanbun_scale }\kanbun_zw{ \unit_content } + }{ + \setbox\kanbun_current_kanjiunit \hbox{ \unit_content } + } + % + % output + \str_if_eq:VnTF \kanbun_kumi { aki } { } + { + \str_if_eq:nnTF { #2 } { } { } { + \kanbun_punct_glue + } + } + \nobreak + \str_if_eq:VnTF \kanbun_kumi { aki } + { + \usebox\kanbun_current_kanjiunit + } + { + \discretionary{ + \usebox\kanbun_current_kanjiunit\kern\dimexpr1\kanbun_zw-\wd\kanbun_current_kanjiunit\relax + }{ + % + }{ + \usebox\kanbun_current_kanjiunit + } + } + \nobreak + \str_if_eq:VnTF \kanbun_kumi { aki } { } + { + \str_if_eq:VnTF \right_punct { } { } { + \kanbun_punct_glue + } + } + \nobreak + \kanbun_unit_glue + } +\NewDocumentCommand { \furiokuri } { m m } + { + \settowidth{\kanbun_furilen}{#1} + \ifdim\kanbun_furilen < \fp_eval:n {1-\kanbun_okuriprotrusion/\kanbun_scale}\kanbun_zw + \makebox[\fp_eval:n {1-\kanbun_okuriprotrusion/\kanbun_scale}\kanbun_zw][l]{#1} + \else + #1 + \fi + #2 + } +\NewDocumentCommand { \kaeriten } { m } + { + \tl_set:Nn \kaeriten_output { #1 } + \sys_if_engine_xetex:TF {} { + \platex_if_direction_tate:TF { + \str_case:VnTF \kaeriten_output { + { 一レ } { \tl_set:Nn \kaeriten_output { \kern \fp_eval:n {-0.25/\kanbun_scale}\kanbun_zw 一\kern \fp_eval:n {-0.75/\kanbun_scale}\kanbun_zw レ } } + { 甲レ } { \tl_set:Nn \kaeriten_output { 甲\kern \fp_eval:n {-0.25/\kanbun_scale}\kanbun_zw レ } } + { 上レ } { \tl_set:Nn \kaeriten_output { 上\kern \fp_eval:n {-0.25/\kanbun_scale}\kanbun_zw レ } } + { 天レ } { \tl_set:Nn \kaeriten_output { 天\kern \fp_eval:n {-0.25/\kanbun_scale}\kanbun_zw レ } } + } {} {} + } {} + } + \tl_use:N \kaeriten_output + } +\NewDocumentCommand { \process_punct_map } { m } { + \str_case:nnTF { #1 } { + { — } { \tl_put_right:Nn \central_punct { \tateten } } + { ― } { \tl_put_right:Nn \central_punct { \tateten } } + { ㆐ } { \tl_put_right:Nn \central_punct { \tateten } } + % { : } { \tl_put_right:Nn \central_punct { \hbox to 1\kanbun_zw{\hss{:}\hss} } } + % { ・ } { \tl_put_right:Nn \central_punct { \hbox to 1\kanbun_zw{\hss{・}\hss} } } + { : } { \tl_put_right:Nn \right_punct { \hbox to 0.5\kanbun_zw{\hss{:}\hss} } } + { ・ } { \tl_put_right:Nn \right_punct { \hbox to 0.5\kanbun_zw{\hss{・}\hss} } } + { … } { \tl_put_right:Nn \central_punct { \hbox to 1\kanbun_zw{\hss{…}\hss} } } + { ! } { \tl_put_right:Nn \central_punct { \hbox to 1\kanbun_zw{\hss{!}\hss} } } + { ? } { \tl_put_right:Nn \central_punct { \hbox to 1\kanbun_zw{\hss{?}\hss} } } + { 〻 } { + \tl_put_right:Nn \ninojiten_punct { \ninojiten } + \tl_put_right:Nn \right_punct { \phantom{\ninojiten} } + } + } {} { + \tl_put_right:Nn \right_punct { \hbox to 0.5\kanbun_zw{\hfil#1\hss} } + } +} +\NewDocumentCommand { \process_punct } { m } + { + \str_map_function:nN { #1 } \process_punct_map + } +\NewDocumentCommand { \multifuriokuri } { O{2\kanbun_zw} m m } + { + \kanbun_rubyfontcmd + \kern \fp_eval:n { -(#1) }\kanbun_zw + \makebox[\fp_eval:n { (#1) + 1 - \kanbun_okuriprotrusion/\kanbun_scale }\kanbun_zw][s]{#2} + #3 + } + +% these commands are used as punct +\NewDocumentCommand { \tateten } {} + { + \str_if_eq:VnTF \kanbun_kumi { aki } { + \makebox[\fp_eval:n {\kanbun_tateaki/\kanbun_scale}\kanbun_zw][c]{ + \rule[\fp_eval:n {-\kanbun_tateten_width/2}\kanbun_zw]{\fp_eval:n {\kanbun_tateaki/\kanbun_scale}\kanbun_zw}{\fp_eval:n {\kanbun_tateten_width}\kanbun_zw} + } + }{ + \makebox[\fp_eval:n {1/\kanbun_scale}\kanbun_zw][c]{ + \rule[\fp_eval:n {-\kanbun_tateten_width/2}\kanbun_zw]{\fp_eval:n {1/\kanbun_scale}\kanbun_zw}{\fp_eval:n {\kanbun_tateten_width}\kanbun_zw} + } + } + } +\NewDocumentCommand { \ninojiten } {} + { \kanbun_rubyfontsize_rubyfontcmd 〻 } + +% corrects fontsize of ruby base +\NewDocumentCommand { \kanbunfont } {} { \parindent=0pt\kanbun_fontcmd\fontsize{\kanbun_zw}{\fp_eval:n {1+\kanbun_yokoaki/\kanbun_scale}\kanbun_zw}\selectfont} +\NewDocumentEnvironment { kanjipar } { +b } + { + { + \kanbunfont + #1 + \par + } + } {} + +% for LuaLaTeX to parse Kanbun annotation +\NewDocumentCommand{\matchkana}{ m }{ + \regex_set:Nn \c_kana_regex {[\x{3040}-\x{30FA}\x{30FC}-\x{30FF}\x{31F0}-\x{31FF}\x{FF66}-\x{FF9F}\x{1B100}-\x{1B122}\x{1AFF0}-\x{1AFFF}\x{1B000}-\x{1B0FF}\x{1B130}-\x{1B16F}]} + \regex_match:NnTF \c_kana_regex { #1 } { \bool_set_true:N \g_kana_bool } { \bool_set_false:N \g_kana_bool } +} +% +\ExplSyntaxOff +% +\ifluatex +% verbatim reader adapted from https://tex.stackexchange.com/a/361759 +\directlua{ +verb_table = {} +function store_lines (str) + if string.find (str , "\noexpand\\EndKanbun" ) then + luatexbase.remove_from_callback ( + "process_input_buffer" , "store_lines") + return "\\newif\\ifcontinue\\continuetrue\\directlua { co = coroutine.create(main_loop) }\\loop\\directlua{ ok,b=coroutine.resume(co) tex.sprint(b) }\\ifcontinue\\repeat" + else + table.insert(verb_table, str) + end + return "" +end +function register_verbatim () + verb_table = {} + luatexbase.add_to_callback( + "process_input_buffer" , store_lines , "store_lines") +end +% require main loop +kanbunzwtosp = \luaescapestring{\kanbunzwtosp} +require("kanbun.lua") +} +\def\Kanbun{\directlua{register_verbatim()}} +\def\createcatcodes{% + \bgroup% + \catcode`\\=12 \catcode`\{=12 \catcode`\}=12% + \catcode`\$=12 \catcode`\&=12 \catcode`\^^M=13% + \catcode`\#=12 \catcode`\^=12 \catcode`\_=12% + \catcode`\ =13 \catcode`\~=12 \catcode`\%=12% + \savecatcodetable 1% + \egroup% +} +\createcatcodes +\bgroup% + \catcode`\^^M=13\gdef^^M{\quitvmode\par}% + \catcode`\ = 13\gdef {\quitvmode\Space}% +\egroup% +\def\Space{ } +% +\fi diff --git a/macros/latex/contrib/kanbun/kanbun.tex b/macros/latex/contrib/kanbun/kanbun.tex new file mode 100644 index 0000000000..02e4c0e918 --- /dev/null +++ b/macros/latex/contrib/kanbun/kanbun.tex @@ -0,0 +1,301 @@ +%% Copyright 2022 Yuanhao Chen +% +% 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 Yuanhao Chen. +% +% This work consists of the files kanbun.sty, kanbun.lua, +% kanbun-example.tex and kanbun.tex. +% +\documentclass[12pt]{ltxdockit} + +\AfterTOCHead[toc]{\sffamily} +\makeatletter + \def\@seccntformat#1{\protect\makebox[0pt][r]{\csname the#1\endcsname\hspace{\marglistsep}}} +\makeatother + +\usepackage{shortvrb} +\MakeShortVerb{|} + +\lstnewenvironment{example}[1][] + {\lstset{ + basicstyle=\ttfamily, + frame=single, + columns=flexible, + language=[LaTeX]TeX, + breaklines=true, + postbreak=\mbox{\textcolor{spot}{$\hookrightarrow$}\space}, + % morekeywords={drawuntpoint,untpoint,linkuntpoints}, + % escapeinside={<@}{@>}, + }} + {} + +\usepackage{luatexja} + \ltjdefcharrange{10}{"2E3A} + \ltjdefcharrange{11}{"2039-"203A} + \ltjsetparameter{jacharrange={-1, +2, +3, -4, -5, +6, +7, -8, +9, +10, -11}} +\usepackage[match]{luatexja-fontspec} +\defaultfontfeatures{Numbers=OldStyle, Scale=MatchLowercase} +\defaultjfontfeatures{Scale=MatchLowercase} +\setmainjfont{Kozuka Mincho Pr6N} +\setsansjfont{Sarasa Mono J} +\setmonojfont[YokoFeatures={JFM=prop}]{Sarasa Mono J} +\setmainfont{Minion Pro} +\setsansfont{Myriad Pro} +\setmonofont{Sarasa Mono J} +\newfontfamily{\kanbunfamily}{Kozuka Mincho Pr6N} + +\usepackage{luatexja-ruby} + \ltjsetruby{fontcmd=\addjfontfeature{RawFeature={+ruby}}} + +\usepackage{kanbun} +\newcommand{\printkanbunblock}[2]{ + { + \parindent=0pt + \vspace*{1\zw} + \hfill + \vbox{ + \hsize=#1\zw + { + \tate + \addjfontfeature{Scale=1} + #2 + } + } + \hfill + \vspace*{1\zw} + } +} + +\usepackage{bxtexlogo} +\usepackage{realscripts} +\usepackage{microtype} + +\usepackage{wallpaper} + +\Kanbun +以テ[二]羅(ら)蝶(てふ)ヲ[一]作ルガ[二]漢文訓読ヲ[一]用(ため)ノ包(ぱつけーぢ) +\EndKanbun +\title{The \sty{kanbun} package} +\subtitle{\normalsize\normalfont\addjfontfeature{Scale=1}\printkanbun} +\author{Yuanhao Chen (\ruby[rubysmash=true]{陳|元|鎬}{ちん|げん|こう})} +\date{\scshape 15 january 2022, v1.0} + + +\begin{document} + +\ThisCenterWallPaper{1}{kanbun-example.pdf} +\ExplSyntaxOn +\tl_set:Nn \kanbun_kumi { beta } +\ExplSyntaxOff +\maketitle +\tableofcontents + + +\section{Introduction} +The \sty{kanbun} package, like other \emph{kanbun-kundoku} (漢文訓読) \LaTeX{} packages (such as \sty{gckanbun}), allows users to manually input macros for elements in a \emph{kanbun-kundoku} paragraph. + +More importantly, it accepts plain text input in the ``\emph{kanbun} annotation'' form when used with \LuaLaTeX, which allows typesetting \emph{kanbun-kundoku} paragraphs efficiently\footnote{The idea comes from \href{https://phesoca.com/kanbun-html/}{漢文\textsc{html}} by UntPhesoca, which is a JavaScript and \textsc{css} implementation.}. + + +\section{Basic example with \LuaLaTeX} +As seen in the following example, typesetting a \emph{kanbun-kundoku} paragraph with the \sty{kanbun} package requires only light annotations --- it automatically transforms the annotated plain text into \LaTeX{} macros through Lua, rather than having users type in macros themselves. + +\ExplSyntaxOn +\tl_set:Nn \kanbun_tateaki { 1 } +\tl_set:Nn \kanbun_kumi { aki } +\ExplSyntaxOff +\Kanbun +月落チ烏啼キテ霜満ツ[レ]天ニ, +江楓漁火対ス[二]愁眠ニ[一]。 +姑(こ)蘇(そ)城外ノ寒山寺, +夜半ノ鐘声到ル[二]客船ニ[一]。 +\EndKanbun + +\penalty0 +\printkanbunblock{13}{\printkanbun} +\vspace{-2\zw} + +\begin{example} +\documentclass{ltjtarticle} +\usepackage[kumi=aki, tateaki=1]{kanbun} +\begin{document} +\Kanbun +月落チ烏啼キテ霜満ツ[レ]天ニ, +江楓漁火対ス[二]愁眠ニ[一]。 +姑(こ)蘇(そ)城外ノ寒山寺, +夜半ノ鐘声到ル[二]客船ニ[一]。 +\EndKanbun +\printkanbun +\end{document} +\end{example} + +Note that if you want to use this functionality, you have to run this document with \LuaLaTeX. + + +\section{Usage} + +\subsection{Package options} +Load the package with +\begin{ltxsyntax} + \cmditem{usepackage}\oprm{\sty{kanbun} options}|{kanbun}| +\end{ltxsyntax} + +This package provides a variety of customisable features in \emph{kanbun-kundoku}. + +\begin{optionlist} + \optitem[]{scale}{\prm{ratio}} + Sets the ratio of the size of \emph{kanji} to that of ruby texts. Default: \verb|2|. + + \optitem[]{fontcmd}{\prm{font command}} + Sets the font command to use for \emph{kanji}. If \sty{luatexja-fontspec} is loaded, it is set default to \verb|\addjfontfeatures{RawFeature={+trad}}| to obtain traditional \emph{kanji} if applicable. + + \optitem[]{rubyfontcmd}{\prm{font command}} + Sets the font command to use for ruby texts. If \sty{luatexja-fontspec} is loaded, it is set default to \verb|\addjfontfeatures{RawFeature={+ruby}}| to obtain ruby glyphs when applicable. + + \optitem[]{unit}{\prm{length}} + Sets the base size (size of \emph{kanji}). Default: \verb|\kanbun_zw|, which is initialised as \verb|1em|. + + \optitem[]{yokoaki}{\prm{ratio}} + Sets the horizontal space between \emph{kanji} with respect to the size of ruby texts. Default: \verb|2|. + + \optitem[]{tateaki}{\prm{ratio}} + Sets the vertical space between \emph{kanji} with respect to the size of ruby texts. Default: \verb|2|. + + \optitem[]{okuriprotrusion}{\prm{ratio}} + Sets how much \emph{okurigana} should be vertically tucked into the space of \emph{kanji} with respect to the size of ruby texts, if that does not cause an overlap with \emph{furigana}. Default: \verb|1|. + + \optitem[]{kumi}{\opt{aki}, \opt{beta}} + Sets whether to use \emph{aki-gumi} (typeset with uniform inter-character spacing) or \emph{beta-gumi} (typeset with no inter-character space between adjacent character frames). Or simply call \opt{aki} or \opt{beta} without \opt{kumi=}. Default: \opt{aki}. +\end{optionlist} + +After initialising the options, you can still change the option values through \sty{exlp3} syntax, with a prefix \verb|\kanbun_| to option names. For example, to switch to \emph{beta-gumi}, you could use +\begin{example} +\ExplSyntaxOn +\tl_set:Nn \kanbun_kumi { beta } +\ExplSyntaxOff +\end{example} + +\subsection[Basic usage without \LuaLaTeX]{Basic usage without \LuaLaTeX{} (not recommended)} +When not using the advanced \emph{kanbun}-annotation functionality, it is possible to typeset \emph{kanbun} with any engine with \textsc{cjk} support, such as using \XeLaTeX{} with the \sty{xeCJK} package, or using \upLaTeX{} with \sty{utarticle} or other appropriate class. + +\begin{ltxsyntax} + \cmditem{kanjiunit}\verb|{ |\cmd{furiokuri}\mprm{right furigana}\mprm{right okurigana}\verb| }|\vspace{-5pt}\\ + \mprm{left punctuation (e.g.~`「')}\\ + \mprm{kanji}\\ + \mprm{other punctuation}\\ + \mprm{kaeriten}\\ + \verb|{ |\cmd{furiokuri}\mprm{left furigana}\mprm{left okurigana}\verb| }| + + \cmditem{kanbunfont} + + Sets the font size of \emph{kanji}. Use when the \opt{unit} option is set different to the document's default font size. + + Use \cmd{multifuriokuri} instead of \cmd{furiokuri} if you are putting \emph{furigana} to multiple kanji. + + \cmditem{multifuriokuri}\oprm{length by which {furigana} is raised}\mprm{furigana}\mprm{okurigana} +\end{ltxsyntax} + +For example, the code +\begin{example} +% example text from https://phesoca.com/kanbun-html/ +\kanbunfont +\kanjiunit{}{}{子}{}{}{} +\kanjiunit{\furiokuri{}{ク}}{}{曰}{,}{}{} +\kanjiunit{\furiokuri{}{ゾ}}{}{盍}{}{三}{\furiokuri{}{ル}} +\kanjiunit{}{}{各}{〻}{}{} +\kanjiunit{\furiokuri{}{ハ}}{}{言}{}{二}{} +\kanjiunit{\furiokuri{}{ノ}}{}{爾}{}{}{} +\kanjiunit{\furiokuri{}{ヲ}}{}{志}{。}{一}{} +\par +\end{example} +outputs + +\printkanbunblock{6}{ +\kanbunfont +\kanjiunit{}{}{子}{}{}{} +\kanjiunit{\furiokuri{}{ク}}{}{曰}{,}{}{} +\kanjiunit{\furiokuri{}{ゾ}}{}{盍}{}{三}{\furiokuri{}{ル}} +\kanjiunit{}{}{各}{〻}{}{} +\kanjiunit{\furiokuri{}{ハ}}{}{言}{}{二}{} +\kanjiunit{\furiokuri{}{ノ}}{}{爾}{}{}{} +\kanjiunit{\furiokuri{}{ヲ}}{}{志}{。}{一}{} +\par +} + +\noindent +with \opt{tateaki} set to \verb|1|. + +\subsection{Usage with \LuaLaTeX} +\emph{Kanbun} annotation uses the following brackets to mark different elements in \emph{kanbun-kundoku} (as described in \href{https://phesoca.com/kanbun-html/}{漢文\textsc{html}} by UntPhesoca). +\begin{itemize} + \item \verb|( )|: \emph{furigana} (振り仮名) + \item \verb|{ }|: \emph{okurigana} (送り仮名) (these brackets can be omitted) + \item \verb|‹ ›|: \emph{furigana} (振り仮名) of \emph{saidoku-moji} (再読文字) + \item \verb|« »|: \emph{okurigana} (送り仮名) of \emph{saidoku-moji} (再読文字) + \item \verb|[ ]|: \emph{kaeriten} (返り点) + \item \verb|‘ ’|: multiple \emph{kanji}, potentially with \emph{tateten} inserted, as a ruby base; group ruby (グループルビ) + \item no annotation: \emph{kanji} (漢字) and punctuation. +\end{itemize} +\emph{Tateten} (竪点) can be input with either \verb|―| (\verb|U+2015|), \verb|—| (\verb|U+2014|) or \verb|㆐| (\verb|U+3190|). + +\begin{ltxsyntax} + \cmditem{Kanbun}\cmditem{EndKanbun} + + Write the annotated \emph{kanbun} between the commands \cmd{Kanbun} and \cmd{EndKanbun}, and it will be processed and saved, ready to be used later. + + \cmditem{printkanbun} + + Where you would like to use the most recently saved \emph{kanbun-kundoku} paragraph, use \cmd{printkanbun}. + + \cmditem{printkanbuncode} + + If you wish to make modifications on the result or to use the result with a non-\LuaTeX{} engine, it is possible to obtain the macros using \cmd{printkanbuncode} (prints in the terminal), and continue to work from there. +\end{ltxsyntax} + +You can always save \cmd{printkanbun} to a macro and start a new annotated \emph{kanbun} block, as in the following example. +\begin{example} +% example text from https://phesoca.com/kanbun-html/ +\documentclass{ltjtarticle} +\usepackage[kumi=beta]{kanbun} + +\Kanbun +此レ乃チ信(しん)之‘所―[三]以’(ゆゑん)為ル[二]陛下ノ禽(とりこ)ト[一]也。 +\EndKanbun +\let\信\printkanbun + +\Kanbun +孤之有ルハ[二]孔明[一],猶ホ‹ごと›«キ»[二]魚之有ルガ[一レ]水也。 +\EndKanbun +\let\孔明\printkanbun + +\begin{document} +\孔明\par\bfseries\信 +\end{document} +\end{example} + +\Kanbun +此レ乃チ信(しん)之‘所―[三]以’(ゆゑん)為ル[二]陛下ノ禽(とりこ)ト[一]也。 +\EndKanbun +\let\信\printkanbun + +\Kanbun +孤之有ルハ[二]孔明[一],猶ホ‹ごと›«キ»[二]魚之有ルガ[一レ]水也。 +\EndKanbun +\let\孔明\printkanbun + +\ExplSyntaxOn +\tl_set:Nn \kanbun_kumi { beta } +\ExplSyntaxOff +\printkanbunblock{16}{\孔明\par\bfseries\信} + + +\end{document} diff --git a/macros/latex/contrib/llncs/README.md b/macros/latex/contrib/llncs/README.md new file mode 100644 index 0000000000..de41045d18 --- /dev/null +++ b/macros/latex/contrib/llncs/README.md @@ -0,0 +1,40 @@ +# llncs + +_2022/01/12 v2.21_ + +Copyright (c) 1996-2022 Springer + +Email: [lncs@springer.com](mailto:lncs@springer.com) + +Springer's llncs document class and bibliography style for contributions to +Lecture Notes in Computer Science (LNCS) and other proceedings book series. + +--- + +## Contents + +It consists of the following files: + +* readme.txt  (this file) + +* history.txt  (the version history of the package) + +* llncs.cls  (the LaTeX2e document class) + +* llncsdoc.tex  (the documentation of the class, LaTeX souce) + +* llncsdoc.pdf  (the documentation of the class, PDF file) + +* splncs04.bst  (LNCS BibTeX style with alphabetic sorting) + + +## Installation + +Copy `llncs.cls` and `splncs04.bst` in a directory that is searched by LaTeX, +e.g. either your `texmf` tree or the local directory with your main LaTeX +file. + +## License + +This work may be distributed and/or modified under the conditions of the CC +BY license, version 4.0 or later. diff --git a/macros/latex/contrib/llncs/history.txt b/macros/latex/contrib/llncs/history.txt new file mode 100644 index 0000000000..79a199ccd4 --- /dev/null +++ b/macros/latex/contrib/llncs/history.txt @@ -0,0 +1,144 @@ +Version history for the LLNCS LaTeX2e class + + date filename version action/reason/acknowledgements +---------------------------------------------------------------------------- + 29.5.96 letter.txt beta naming problems (subject index file) + thanks to Dr. Martin Held, Salzburg, AT + + subjindx.ind renamed to subjidx.ind as required + by llncs.dem + + history.txt introducing this file + + 30.5.96 llncs.cls incompatibility with new article.cls of + 1995/12/20 v1.3q Standard LaTeX document class, + \if@openbib is no longer defined, + reported by Ralf Heckmann and Graham Gough + solution by David Carlisle + + 10.6.96 llncs.cls problems with fragile commands in \author field + reported by Michael Gschwind, TU Wien + + 25.7.96 llncs.cls revision a corrects: + wrong size of text area, floats not \small, + some LaTeX generated texts + reported by Michael Sperber, Uni Tuebingen + + 16.4.97 all files 2.1 leaving beta state, + raising version counter to 2.1 + + 8.6.97 llncs.cls 2.1a revision a corrects: + unbreakable citation lists, reported by + Sergio Antoy of Portland State University + +11.12.97 llncs.cls 2.2 "general" headings centered; two new elements + for the article header: \email and \homedir; + complete revision of special environments: + \newtheorem replaced with \spnewtheorem, + introduced the theopargself environment; + two column parts made with multicol package; + add ons to work with the hyperref package + +07.01.98 llncs.cls 2.2 changed \email to simply switch to \tt + +25.03.98 llncs.cls 2.3 new class option "oribibl" to suppress + changes to the thebibliograpy environment + and retain pure LaTeX codes - useful + for most BibTeX applications + +16.04.98 llncs.cls 2.3 if option "oribibl" is given, extend the + thebibliograpy hook with "\small", suggested + by Clemens Ballarin, University of Cambridge + +20.11.98 llncs.cls 2.4 pagestyle "titlepage" - useful for + compilation of whole LNCS volumes + +12.01.99 llncs.cls 2.5 counters of orthogonal numbered special + environments are reset each new contribution + +27.04.99 llncs.cls 2.6 new command \thisbottomragged for the + actual page; indention of the footnote + made variable with \fnindent (default 1em); + new command \url that copys its argument + + 2.03.00 llncs.cls 2.7 \figurename and \tablename made compatible + to babel, suggested by Jo Hereth, TU Darmstadt; + definition of \url moved \AtBeginDocument + (allows for url package of Donald Arseneau), + suggested by Manfred Hauswirth, TU of Vienna; + \large for part entries in the TOC + +16.04.00 llncs.cls 2.8 new option "orivec" to preserve the original + vector definition, read "arrow" accent + +17.01.01 llncs.cls 2.9 hardwired texts made polyglot, + available languages: english (default), + french, german - all are "babel-proof" + +20.06.01 splncs.bst public release of a BibTeX style for LNCS, + nobly provided by Jason Noble + +14.08.01 llncs.cls 2.10 TOC: authors flushleft, + entries without hyphenation; suggested + by Wiro Niessen, Imaging Center - Utrecht + +23.01.02 llncs.cls 2.11 fixed footnote number confusion with + \thanks, numbered institutes, and normal + footnote entries; error reported by + Saverio Cittadini, Istituto Tecnico + Industriale "Tito Sarrocchi" - Siena + +28.01.02 llncs.cls 2.12 fixed footnote fix; error reported by + Chris Mesterharm, CS Dept. Rutgers - NJ + +28.01.02 llncs.cls 2.13 fixed the fix (programmer needs vacation) + +17.08.04 llncs.cls 2.14 TOC: authors indented, smart \and handling + for the TOC suggested by Thomas Gabel + University of Osnabrueck + +07.03.06 splncs.bst fix for BibTeX entries without year; patch + provided by Jerry James, Utah State University + +14.06.06 splncs_srt.bst a sorting BibTeX style for LNCS, feature + provided by Tobias Heindel, FMI Uni-Stuttgart + +16.10.06 llncs.dem 2.3 removed affiliations from \tocauthor demo + +11.12.07 llncs.doc note on online visibility of given e-mail address + +15.06.09 splncs03.bst new BibTeX style compliant with the current + requirements, provided by Maurizio "Titto" + Patrignani of Universita' Roma Tre + +30.03.10 llncs.cls 2.15 fixed broken hyperref interoperability; + patch provided by Sven Koehler, + Hamburg University of Technology + +15.04.10 llncs.cls 2.16 fixed hyperref warning for informatory TOC entries; + introduced \keywords command - finally; + blank removed from \keywordname, flaw reported + by Armin B. Wagner, IGW TU Vienna + +15.04.10 llncs.cls 2.17 fixed missing switch "openright" used by \backmatter; + flaw reported by Tobias Pape, University of Potsdam + +27.09.13 llncs.cls 2.18 fixed "ngerman" incompatibility; solution provided + by Bastian Pfleging, University of Stuttgart + +04.09.17 llncs.cls 2.19 introduced \orcidID command + +10.03.18 llncs.cls 2.20 adjusted \doi according to CrossRef requirements; + TOC: removed affiliation numbers + + splncs04.bst added doi field; + bold journal numbers + + samplepaper.tex new sample paper + + llncsdoc.pdf new LaTeX class documentation + +12.01.22 llncs.cls 2.21 fixed German and French \maketitle, bug reported by + Alexander Malkis, Technical University of Munich; + use detokenized argument in the definition of \doi + to allow underscores in DOIs diff --git a/macros/latex/contrib/llncs/llncs.cls b/macros/latex/contrib/llncs/llncs.cls new file mode 100644 index 0000000000..075d73327c --- /dev/null +++ b/macros/latex/contrib/llncs/llncs.cls @@ -0,0 +1,1218 @@ +% LLNCS DOCUMENT CLASS -- version 2.21 (12-Jan-2022) +% Springer Verlag LaTeX2e support for Lecture Notes in Computer Science +% +%% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesClass{llncs}[2022/01/12 v2.21 +^^J LaTeX document class for Lecture Notes in Computer Science] +% Options +\let\if@envcntreset\iffalse +\DeclareOption{envcountreset}{\let\if@envcntreset\iftrue} +\DeclareOption{citeauthoryear}{\let\citeauthoryear=Y} +\DeclareOption{oribibl}{\let\oribibl=Y} +\let\if@custvec\iftrue +\DeclareOption{orivec}{\let\if@custvec\iffalse} +\let\if@envcntsame\iffalse +\DeclareOption{envcountsame}{\let\if@envcntsame\iftrue} +\let\if@envcntsect\iffalse +\DeclareOption{envcountsect}{\let\if@envcntsect\iftrue} +\let\if@runhead\iffalse +\DeclareOption{runningheads}{\let\if@runhead\iftrue} + +\let\if@openright\iftrue +\let\if@openbib\iffalse +\DeclareOption{openbib}{\let\if@openbib\iftrue} + +% languages +\let\switcht@@therlang\relax +\def\ds@deutsch{\def\switcht@@therlang{\switcht@deutsch}} +\def\ds@francais{\def\switcht@@therlang{\switcht@francais}} + +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} + +\ProcessOptions + +\LoadClass[twoside]{article} +\RequirePackage{multicol} % needed for the list of participants, index +\RequirePackage{aliascnt} + +\setlength{\textwidth}{12.2cm} +\setlength{\textheight}{19.3cm} +\renewcommand\@pnumwidth{2em} +\renewcommand\@tocrmarg{3.5em} +% +\def\@dottedtocline#1#2#3#4#5{% + \ifnum #1>\c@tocdepth \else + \vskip \z@ \@plus.2\p@ + {\leftskip #2\relax \rightskip \@tocrmarg \advance\rightskip by 0pt plus 2cm + \parfillskip -\rightskip \pretolerance=10000 + \parindent #2\relax\@afterindenttrue + \interlinepenalty\@M + \leavevmode + \@tempdima #3\relax + \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip + {#4}\nobreak + \leaders\hbox{$\m@th + \mkern \@dotsep mu\hbox{.}\mkern \@dotsep + mu$}\hfill + \nobreak + \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}% + \par}% + \fi} +% +\def\switcht@albion{% +\def\abstractname{Abstract.} +\def\ackname{Acknowledgement.} +\def\andname{and} +\def\lastandname{\unskip, and} +\def\appendixname{Appendix} +\def\chaptername{Chapter} +\def\claimname{Claim} +\def\conjecturename{Conjecture} +\def\contentsname{Table of Contents} +\def\corollaryname{Corollary} +\def\definitionname{Definition} +\def\examplename{Example} +\def\exercisename{Exercise} +\def\figurename{Fig.} +\def\keywordname{{\bf Keywords:}} +\def\indexname{Index} +\def\lemmaname{Lemma} +\def\contriblistname{List of Contributors} +\def\listfigurename{List of Figures} +\def\listtablename{List of Tables} +\def\mailname{{\it Correspondence to\/}:} +\def\noteaddname{Note added in proof} +\def\notename{Note} +\def\partname{Part} +\def\problemname{Problem} +\def\proofname{Proof} +\def\propertyname{Property} +\def\propositionname{Proposition} +\def\questionname{Question} +\def\remarkname{Remark} +\def\seename{see} +\def\solutionname{Solution} +\def\subclassname{{\it Subject Classifications\/}:} +\def\tablename{Table} +\def\theoremname{Theorem}} +\switcht@albion +% Names of theorem like environments are already defined +% but must be translated if another language is chosen +% +% French section +\def\switcht@francais{%\typeout{On parle francais.}% + \def\abstractname{R\'esum\'e.}% + \def\ackname{Remerciements.}% + \def\andname{et}% + \def\lastandname{ et}% + \def\appendixname{Appendice}% + \def\chaptername{Chapitre}% + \def\claimname{Pr\'etention}% + \def\conjecturename{Hypoth\`ese}% + \def\contentsname{Table des mati\`eres}% + \def\corollaryname{Corollaire}% + \def\definitionname{D\'efinition}% + \def\examplename{Exemple}% + \def\exercisename{Exercice}% + \def\figurename{Fig.}% + \def\keywordname{{\bf Mots-cl\'e:}}% + \def\indexname{Index}% + \def\lemmaname{Lemme}% + \def\contriblistname{Liste des contributeurs}% + \def\listfigurename{Liste des figures}% + \def\listtablename{Liste des tables}% + \def\mailname{{\it Correspondence to\/}:}% + \def\noteaddname{Note ajout\'ee \`a l'\'epreuve}% + \def\notename{Remarque}% + \def\partname{Partie}% + \def\problemname{Probl\`eme}% + \def\proofname{Preuve}% + \def\propertyname{Caract\'eristique}% +%\def\propositionname{Proposition}% + \def\questionname{Question}% + \def\remarkname{Remarque}% + \def\seename{voir}% + \def\solutionname{Solution}% + \def\subclassname{{\it Subject Classifications\/}:}% + \def\tablename{Tableau}% + \def\theoremname{Th\'eor\`eme}% +} +% +% German section +\def\switcht@deutsch{%\typeout{Man spricht deutsch.}% + \def\abstractname{Zusammenfassung.}% + \def\ackname{Danksagung.}% + \def\andname{und}% + \def\lastandname{ und}% + \def\appendixname{Anhang}% + \def\chaptername{Kapitel}% + \def\claimname{Behauptung}% + \def\conjecturename{Hypothese}% + \def\contentsname{Inhaltsverzeichnis}% + \def\corollaryname{Korollar}% +%\def\definitionname{Definition}% + \def\examplename{Beispiel}% + \def\exercisename{\"Ubung}% + \def\figurename{Abb.}% + \def\keywordname{{\bf Schl\"usselw\"orter:}}% + \def\indexname{Index}% +%\def\lemmaname{Lemma}% + \def\contriblistname{Mitarbeiter}% + \def\listfigurename{Abbildungsverzeichnis}% + \def\listtablename{Tabellenverzeichnis}% + \def\mailname{{\it Correspondence to\/}:}% + \def\noteaddname{Nachtrag}% + \def\notename{Anmerkung}% + \def\partname{Teil}% +%\def\problemname{Problem}% + \def\proofname{Beweis}% + \def\propertyname{Eigenschaft}% +%\def\propositionname{Proposition}% + \def\questionname{Frage}% + \def\remarkname{Anmerkung}% + \def\seename{siehe}% + \def\solutionname{L\"osung}% + \def\subclassname{{\it Subject Classifications\/}:}% + \def\tablename{Tabelle}% +%\def\theoremname{Theorem}% +} + +% Ragged bottom for the actual page +\def\thisbottomragged{\def\@textbottom{\vskip\z@ plus.0001fil +\global\let\@textbottom\relax}} + +\renewcommand\small{% + \@setfontsize\small\@ixpt{11}% + \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@ + \abovedisplayshortskip \z@ \@plus2\p@ + \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@ + \def\@listi{\leftmargin\leftmargini + \parsep 0\p@ \@plus1\p@ \@minus\p@ + \topsep 8\p@ \@plus2\p@ \@minus4\p@ + \itemsep0\p@}% + \belowdisplayskip \abovedisplayskip +} + +\frenchspacing +\widowpenalty=10000 +\clubpenalty=10000 + +\setlength\oddsidemargin {63\p@} +\setlength\evensidemargin {63\p@} +\setlength\marginparwidth {90\p@} + +\setlength\headsep {16\p@} + +\setlength\footnotesep{7.7\p@} +\setlength\textfloatsep{8mm\@plus 2\p@ \@minus 4\p@} +\setlength\intextsep {8mm\@plus 2\p@ \@minus 2\p@} + +\setcounter{secnumdepth}{2} + +\newcounter {chapter} +\renewcommand\thechapter {\@arabic\c@chapter} + +\newif\if@mainmatter \@mainmattertrue +\newcommand\frontmatter{\cleardoublepage + \@mainmatterfalse\pagenumbering{Roman}} +\newcommand\mainmatter{\cleardoublepage + \@mainmattertrue\pagenumbering{arabic}} +\newcommand\backmatter{\if@openright\cleardoublepage\else\clearpage\fi + \@mainmatterfalse} + +\renewcommand\part{\cleardoublepage + \thispagestyle{empty}% + \if@twocolumn + \onecolumn + \@tempswatrue + \else + \@tempswafalse + \fi + \null\vfil + \secdef\@part\@spart} + +\def\@part[#1]#2{% + \ifnum \c@secnumdepth >-2\relax + \refstepcounter{part}% + \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}% + \else + \addcontentsline{toc}{part}{#1}% + \fi + \markboth{}{}% + {\centering + \interlinepenalty \@M + \normalfont + \ifnum \c@secnumdepth >-2\relax + \huge\bfseries \partname~\thepart + \par + \vskip 20\p@ + \fi + \Huge \bfseries #2\par}% + \@endpart} +\def\@spart#1{% + {\centering + \interlinepenalty \@M + \normalfont + \Huge \bfseries #1\par}% + \@endpart} +\def\@endpart{\vfil\newpage + \if@twoside + \null + \thispagestyle{empty}% + \newpage + \fi + \if@tempswa + \twocolumn + \fi} + +\newcommand\chapter{\clearpage + \thispagestyle{empty}% + \global\@topnum\z@ + \@afterindentfalse + \secdef\@chapter\@schapter} +\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}#1}% + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \chaptermark{#1}% + \addtocontents{lof}{\protect\addvspace{10\p@}}% + \addtocontents{lot}{\protect\addvspace{10\p@}}% + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi} +\def\@makechapterhead#1{% +% \vspace*{50\p@}% + {\centering + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \large\bfseries \@chapapp{} \thechapter + \par\nobreak + \vskip 20\p@ + \fi + \fi + \interlinepenalty\@M + \Large \bfseries #1\par\nobreak + \vskip 40\p@ + }} +\def\@schapter#1{\if@twocolumn + \@topnewpage[\@makeschapterhead{#1}]% + \else + \@makeschapterhead{#1}% + \@afterheading + \fi} +\def\@makeschapterhead#1{% +% \vspace*{50\p@}% + {\centering + \normalfont + \interlinepenalty\@M + \Large \bfseries #1\par\nobreak + \vskip 40\p@ + }} + +\renewcommand\section{\@startsection{section}{1}{\z@}% + {-18\p@ \@plus -4\p@ \@minus -4\p@}% + {12\p@ \@plus 4\p@ \@minus 4\p@}% + {\normalfont\large\bfseries\boldmath + \rightskip=\z@ \@plus 8em\pretolerance=10000 }} +\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% + {-18\p@ \@plus -4\p@ \@minus -4\p@}% + {8\p@ \@plus 4\p@ \@minus 4\p@}% + {\normalfont\normalsize\bfseries\boldmath + \rightskip=\z@ \@plus 8em\pretolerance=10000 }} +\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-18\p@ \@plus -4\p@ \@minus -4\p@}% + {-0.5em \@plus -0.22em \@minus -0.1em}% + {\normalfont\normalsize\bfseries\boldmath}} +\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% + {-12\p@ \@plus -4\p@ \@minus -4\p@}% + {-0.5em \@plus -0.22em \@minus -0.1em}% + {\normalfont\normalsize\itshape}} +\renewcommand\subparagraph[1]{\typeout{LLNCS warning: You should not use + \string\subparagraph\space with this class}\vskip0.5cm +You should not use \verb|\subparagraph| with this class.\vskip0.5cm} + +\DeclareMathSymbol{\Gamma}{\mathalpha}{letters}{"00} +\DeclareMathSymbol{\Delta}{\mathalpha}{letters}{"01} +\DeclareMathSymbol{\Theta}{\mathalpha}{letters}{"02} +\DeclareMathSymbol{\Lambda}{\mathalpha}{letters}{"03} +\DeclareMathSymbol{\Xi}{\mathalpha}{letters}{"04} +\DeclareMathSymbol{\Pi}{\mathalpha}{letters}{"05} +\DeclareMathSymbol{\Sigma}{\mathalpha}{letters}{"06} +\DeclareMathSymbol{\Upsilon}{\mathalpha}{letters}{"07} +\DeclareMathSymbol{\Phi}{\mathalpha}{letters}{"08} +\DeclareMathSymbol{\Psi}{\mathalpha}{letters}{"09} +\DeclareMathSymbol{\Omega}{\mathalpha}{letters}{"0A} + +\let\footnotesize\small + +\if@custvec +\def\vec#1{\mathchoice{\mbox{\boldmath$\displaystyle#1$}} +{\mbox{\boldmath$\textstyle#1$}} +{\mbox{\boldmath$\scriptstyle#1$}} +{\mbox{\boldmath$\scriptscriptstyle#1$}}} +\fi + +\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}} +\def\qed{\ifmmode\squareforqed\else{\unskip\nobreak\hfil +\penalty50\hskip1em\null\nobreak\hfil\squareforqed +\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi} + +\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip +\halign{\hfil +$\displaystyle##$\hfil\cr\gets\cr\to\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\gets +\cr\to\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\gets +\cr\to\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +\gets\cr\to\cr}}}}} +\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil +$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr +\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr +\noalign{\vskip1pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +<\cr +\noalign{\vskip0.9pt}=\cr}}}}} +\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil +$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr +\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr +\noalign{\vskip1pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +>\cr +\noalign{\vskip0.9pt}=\cr}}}}} +\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip +\halign{\hfil +$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1pt}<\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr +>\cr\noalign{\vskip-1pt}<\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr +>\cr\noalign{\vskip-0.8pt}<\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +>\cr\noalign{\vskip-0.3pt}<\cr}}}}} +\def\bbbr{{\rm I\!R}} %reelle Zahlen +\def\bbbm{{\rm I\!M}} +\def\bbbn{{\rm I\!N}} %natuerliche Zahlen +\def\bbbf{{\rm I\!F}} +\def\bbbh{{\rm I\!H}} +\def\bbbk{{\rm I\!K}} +\def\bbbp{{\rm I\!P}} +\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l} +{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}} +\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}} +\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm +Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}} +\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm +T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox +to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox +to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox +to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}} +\def\bbbs{{\mathchoice +{\setbox0=\hbox{$\displaystyle \rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox +to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle \rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox +to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle \rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox +to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox +to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}} +\def\bbbz{{\mathchoice {\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}} +{\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}} +{\hbox{$\mathsf\scriptstyle Z\kern-0.3em Z$}} +{\hbox{$\mathsf\scriptscriptstyle Z\kern-0.2em Z$}}}} + +\let\ts\, + +\setlength\leftmargini {17\p@} +\setlength\leftmargin {\leftmargini} +\setlength\leftmarginii {\leftmargini} +\setlength\leftmarginiii {\leftmargini} +\setlength\leftmarginiv {\leftmargini} +\setlength \labelsep {.5em} +\setlength \labelwidth{\leftmargini} +\addtolength\labelwidth{-\labelsep} + +\def\@listI{\leftmargin\leftmargini + \parsep 0\p@ \@plus1\p@ \@minus\p@ + \topsep 8\p@ \@plus2\p@ \@minus4\p@ + \itemsep0\p@} +\let\@listi\@listI +\@listi +\def\@listii {\leftmargin\leftmarginii + \labelwidth\leftmarginii + \advance\labelwidth-\labelsep + \topsep 0\p@ \@plus2\p@ \@minus\p@} +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\leftmarginiii + \advance\labelwidth-\labelsep + \topsep 0\p@ \@plus\p@\@minus\p@ + \parsep \z@ + \partopsep \p@ \@plus\z@ \@minus\p@} + +\renewcommand\labelitemi{\normalfont\bfseries --} +\renewcommand\labelitemii{$\m@th\bullet$} + +\setlength\arraycolsep{1.4\p@} +\setlength\tabcolsep{1.4\p@} + +\def\tableofcontents{\chapter*{\contentsname\@mkboth{{\contentsname}}% + {{\contentsname}}} + \def\authcount##1{\setcounter{auco}{##1}\setcounter{@auth}{1}} + \def\lastand{\ifnum\value{auco}=2\relax + \unskip{} \andname\ + \else + \unskip \lastandname\ + \fi}% + \def\and{\stepcounter{@auth}\relax + \ifnum\value{@auth}=\value{auco}% + \lastand + \else + \unskip, + \fi}% + \@starttoc{toc}\if@restonecol\twocolumn\fi} + +\def\l@part#1#2{\addpenalty{\@secpenalty}% + \addvspace{2em plus\p@}% % space above part line + \begingroup + \parindent \z@ + \rightskip \z@ plus 5em + \hrule\vskip5pt + \large % same size as for a contribution heading + \bfseries\boldmath % set line in boldface + \leavevmode % TeX command to enter horizontal mode. + #1\par + \vskip5pt + \hrule + \vskip1pt + \nobreak % Never break after part entry + \endgroup} + +\def\@dotsep{2} + +\let\phantomsection=\relax + +\def\hyperhrefextend{\ifx\hyper@anchor\@undefined\else +{}\fi} + +\def\addnumcontentsmark#1#2#3{% +\addtocontents{#1}{\protect\contentsline{#2}{\protect\numberline + {\thechapter}#3}{\thepage}\hyperhrefextend}}% +\def\addcontentsmark#1#2#3{% +\addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}\hyperhrefextend}}% +\def\addcontentsmarkwop#1#2#3{% +\addtocontents{#1}{\protect\contentsline{#2}{#3}{0}\hyperhrefextend}}% + +\def\@adcmk[#1]{\ifcase #1 \or +\def\@gtempa{\addnumcontentsmark}% + \or \def\@gtempa{\addcontentsmark}% + \or \def\@gtempa{\addcontentsmarkwop}% + \fi\@gtempa{toc}{chapter}% +} +\def\addtocmark{% +\phantomsection +\@ifnextchar[{\@adcmk}{\@adcmk[3]}% +} + +\def\l@chapter#1#2{\addpenalty{-\@highpenalty} + \vskip 1.0em plus 1pt \@tempdima 1.5em \begingroup + \parindent \z@ \rightskip \@tocrmarg + \advance\rightskip by 0pt plus 2cm + \parfillskip -\rightskip \pretolerance=10000 + \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip + {\large\bfseries\boldmath#1}\ifx0#2\hfil\null + \else + \nobreak + \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern + \@dotsep mu$}\hfill + \nobreak\hbox to\@pnumwidth{\hss #2}% + \fi\par + \penalty\@highpenalty \endgroup} + +\def\l@title#1#2{\addpenalty{-\@highpenalty} + \addvspace{8pt plus 1pt} + \@tempdima \z@ + \begingroup + \parindent \z@ \rightskip \@tocrmarg + \advance\rightskip by 0pt plus 2cm + \parfillskip -\rightskip \pretolerance=10000 + \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip + #1\nobreak + \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern + \@dotsep mu$}\hfill + \nobreak\hbox to\@pnumwidth{\hss #2}\par + \penalty\@highpenalty \endgroup} + +\def\l@author#1#2{\addpenalty{\@highpenalty} + \@tempdima=15\p@ %\z@ + \begingroup + \parindent \z@ \rightskip \@tocrmarg + \advance\rightskip by 0pt plus 2cm + \pretolerance=10000 + \leavevmode \advance\leftskip\@tempdima %\hskip -\leftskip + \textit{#1}\par + \penalty\@highpenalty \endgroup} + +\setcounter{tocdepth}{0} +\newdimen\tocchpnum +\newdimen\tocsecnum +\newdimen\tocsectotal +\newdimen\tocsubsecnum +\newdimen\tocsubsectotal +\newdimen\tocsubsubsecnum +\newdimen\tocsubsubsectotal +\newdimen\tocparanum +\newdimen\tocparatotal +\newdimen\tocsubparanum +\tocchpnum=\z@ % no chapter numbers +\tocsecnum=15\p@ % section 88. plus 2.222pt +\tocsubsecnum=23\p@ % subsection 88.8 plus 2.222pt +\tocsubsubsecnum=27\p@ % subsubsection 88.8.8 plus 1.444pt +\tocparanum=35\p@ % paragraph 88.8.8.8 plus 1.666pt +\tocsubparanum=43\p@ % subparagraph 88.8.8.8.8 plus 1.888pt +\def\calctocindent{% +\tocsectotal=\tocchpnum +\advance\tocsectotal by\tocsecnum +\tocsubsectotal=\tocsectotal +\advance\tocsubsectotal by\tocsubsecnum +\tocsubsubsectotal=\tocsubsectotal +\advance\tocsubsubsectotal by\tocsubsubsecnum +\tocparatotal=\tocsubsubsectotal +\advance\tocparatotal by\tocparanum} +\calctocindent + +\def\l@section{\@dottedtocline{1}{\tocchpnum}{\tocsecnum}} +\def\l@subsection{\@dottedtocline{2}{\tocsectotal}{\tocsubsecnum}} +\def\l@subsubsection{\@dottedtocline{3}{\tocsubsectotal}{\tocsubsubsecnum}} +\def\l@paragraph{\@dottedtocline{4}{\tocsubsubsectotal}{\tocparanum}} +\def\l@subparagraph{\@dottedtocline{5}{\tocparatotal}{\tocsubparanum}} + +\def\listoffigures{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn + \fi\section*{\listfigurename\@mkboth{{\listfigurename}}{{\listfigurename}}} + \@starttoc{lof}\if@restonecol\twocolumn\fi} +\def\l@figure{\@dottedtocline{1}{0em}{1.5em}} + +\def\listoftables{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn + \fi\section*{\listtablename\@mkboth{{\listtablename}}{{\listtablename}}} + \@starttoc{lot}\if@restonecol\twocolumn\fi} +\let\l@table\l@figure + +\renewcommand\listoffigures{% + \section*{\listfigurename + \@mkboth{\listfigurename}{\listfigurename}}% + \@starttoc{lof}% + } + +\renewcommand\listoftables{% + \section*{\listtablename + \@mkboth{\listtablename}{\listtablename}}% + \@starttoc{lot}% + } + +\ifx\oribibl\undefined +\ifx\citeauthoryear\undefined +\renewenvironment{thebibliography}[1] + {\section*{\refname} + \def\@biblabel##1{##1.} + \small + \list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \if@openbib + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@ + \fi + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \if@openbib + \renewcommand\newblock{\par}% + \else + \renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}% + \fi + \sloppy\clubpenalty4000\widowpenalty4000% + \sfcode`\.=\@m} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \endlist} +\def\@lbibitem[#1]#2{\item[{[#1]}\hfill]\if@filesw + {\let\protect\noexpand\immediate + \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces} +\newcount\@tempcntc +\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi + \@tempcnta\z@\@tempcntb\m@ne\def\@citea{}\@cite{\@for\@citeb:=#2\do + {\@ifundefined + {b@\@citeb}{\@citeo\@tempcntb\m@ne\@citea\def\@citea{,}{\bfseries + ?}\@warning + {Citation `\@citeb' on page \thepage \space undefined}}% + {\setbox\z@\hbox{\global\@tempcntc0\csname b@\@citeb\endcsname\relax}% + \ifnum\@tempcntc=\z@ \@citeo\@tempcntb\m@ne + \@citea\def\@citea{,}\hbox{\csname b@\@citeb\endcsname}% + \else + \advance\@tempcntb\@ne + \ifnum\@tempcntb=\@tempcntc + \else\advance\@tempcntb\m@ne\@citeo + \@tempcnta\@tempcntc\@tempcntb\@tempcntc\fi\fi}}\@citeo}{#1}} +\def\@citeo{\ifnum\@tempcnta>\@tempcntb\else + \@citea\def\@citea{,\,\hskip\z@skip}% + \ifnum\@tempcnta=\@tempcntb\the\@tempcnta\else + {\advance\@tempcnta\@ne\ifnum\@tempcnta=\@tempcntb \else + \def\@citea{--}\fi + \advance\@tempcnta\m@ne\the\@tempcnta\@citea\the\@tempcntb}\fi\fi} +\else +\renewenvironment{thebibliography}[1] + {\section*{\refname} + \small + \list{}% + {\settowidth\labelwidth{}% + \leftmargin\parindent + \itemindent=-\parindent + \labelsep=\z@ + \if@openbib + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@ + \fi + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{}}% + \if@openbib + \renewcommand\newblock{\par}% + \else + \renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}% + \fi + \sloppy\clubpenalty4000\widowpenalty4000% + \sfcode`\.=\@m} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \endlist} + \def\@cite#1{#1}% + \def\@lbibitem[#1]#2{\item[]\if@filesw + {\def\protect##1{\string ##1\space}\immediate + \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces} + \fi +\else +\@cons\@openbib@code{\noexpand\small} +\fi + +\def\idxquad{\hskip 10\p@}% space that divides entry from number + +\def\@idxitem{\par\hangindent 10\p@} + +\def\subitem{\par\setbox0=\hbox{--\enspace}% second order + \noindent\hangindent\wd0\box0}% index entry + +\def\subsubitem{\par\setbox0=\hbox{--\,--\enspace}% third + \noindent\hangindent\wd0\box0}% order index entry + +\def\indexspace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax} + +\renewenvironment{theindex} + {\@mkboth{\indexname}{\indexname}% + \thispagestyle{empty}\parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \let\item\par + \def\,{\relax\ifmmode\mskip\thinmuskip + \else\hskip0.2em\ignorespaces\fi}% + \normalfont\small + \begin{multicols}{2}[\@makeschapterhead{\indexname}]% + } + {\end{multicols}} + +\renewcommand\footnoterule{% + \kern-3\p@ + \hrule\@width 2truecm + \kern2.6\p@} + \newdimen\fnindent + \fnindent1em +\long\def\@makefntext#1{% + \parindent \fnindent% + \leftskip \fnindent% + \noindent + \llap{\hb@xt@1em{\hss\@makefnmark\ }}\ignorespaces#1} + +\long\def\@makecaption#1#2{% + \small + \vskip\abovecaptionskip + \sbox\@tempboxa{{\bfseries #1.} #2}% + \ifdim \wd\@tempboxa >\hsize + {\bfseries #1.} #2\par + \else + \global \@minipagefalse + \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \vskip\belowcaptionskip} + +\def\fps@figure{htbp} +\def\fnum@figure{\figurename\thinspace\thefigure} +\def \@floatboxreset {% + \reset@font + \small + \@setnobreak + \@setminipage +} +\def\fps@table{htbp} +\def\fnum@table{\tablename~\thetable} +\renewenvironment{table} + {\setlength\abovecaptionskip{0\p@}% + \setlength\belowcaptionskip{10\p@}% + \@float{table}} + {\end@float} +\renewenvironment{table*} + {\setlength\abovecaptionskip{0\p@}% + \setlength\belowcaptionskip{10\p@}% + \@dblfloat{table}} + {\end@dblfloat} + +\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname + ext@#1\endcsname}{#1}{\protect\numberline{\csname + the#1\endcsname}{\ignorespaces #2}}\begingroup + \@parboxrestore + \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par + \endgroup} + +% LaTeX does not provide a command to enter the authors institute +% addresses. The \institute command is defined here. + +\newcounter{@inst} +\newcounter{@auth} +\newcounter{auco} +\newdimen\instindent +\newbox\authrun +\newtoks\authorrunning +\newtoks\tocauthor +\newbox\titrun +\newtoks\titlerunning +\newtoks\toctitle + +\def\clearheadinfo{\gdef\@author{No Author Given}% + \gdef\@title{No Title Given}% + \gdef\@subtitle{}% + \gdef\@institute{No Institute Given}% + \gdef\@thanks{}% + \global\titlerunning={}\global\authorrunning={}% + \global\toctitle={}\global\tocauthor={}} + +\def\institute#1{\gdef\@institute{#1}} + +\def\institutename{\par + \begingroup + \parskip=\z@ + \parindent=\z@ + \setcounter{@inst}{1}% + \def\and{\par\stepcounter{@inst}% + \noindent$^{\the@inst}$\enspace\ignorespaces}% + \setbox0=\vbox{\def\thanks##1{}\@institute}% + \ifnum\c@@inst=1\relax + \gdef\fnnstart{0}% + \else + \xdef\fnnstart{\c@@inst}% + \setcounter{@inst}{1}% + \noindent$^{\the@inst}$\enspace + \fi + \ignorespaces + \@institute\par + \endgroup} + +\def\@fnsymbol#1{\ensuremath{\ifcase#1\or\star\or{\star\star}\or + {\star\star\star}\or \dagger\or \ddagger\or + \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger + \or \ddagger\ddagger \else\@ctrerr\fi}} + +\def\inst#1{\unskip$^{#1}$} +\def\orcidID#1{\unskip$^{[#1]}$} % added MR 2018-03-10 +\def\fnmsep{\unskip$^,$} +\def\email#1{{\tt#1}} + +\AtBeginDocument{\@ifundefined{url}{\def\url#1{#1}}{}% +\@ifpackageloaded{babel}{% +\@ifundefined{extrasenglish}{}{\addto\extrasenglish{\switcht@albion}}% +\@ifundefined{extrasfrenchb}{}{\addto\extrasfrenchb{\switcht@francais}}% +\@ifundefined{extrasgerman}{}{\addto\extrasgerman{\switcht@deutsch}}% +\@ifundefined{extrasngerman}{}{\addto\extrasngerman{\switcht@deutsch}}% +}{\switcht@@therlang}% +\providecommand{\keywords}[1]{\def\and{{\textperiodcentered} }% +\par\addvspace\baselineskip +\noindent\keywordname\enspace\ignorespaces#1}% +\@ifpackageloaded{hyperref}{% +\def\doi#1{\href{https://doi.org/\detokenize{#1}}{\url{https://doi.org/\detokenize{#1}}}}}{ +\def\doi#1{https://doi.org/\detokenize{#1}}} +} +\def\homedir{\~{ }} + +\def\subtitle#1{\gdef\@subtitle{#1}} +\clearheadinfo +% +%%% to avoid hyperref warnings +\providecommand*{\toclevel@author}{999} +%%% to make title-entry parent of section-entries +\providecommand*{\toclevel@title}{0} +% +\renewcommand\maketitle{\newpage +\phantomsection + \refstepcounter{chapter}% + \stepcounter{section}% + \setcounter{section}{0}% + \setcounter{subsection}{0}% + \setcounter{figure}{0} + \setcounter{table}{0} + \setcounter{equation}{0} + \setcounter{footnote}{0}% + \begingroup + \parindent=\z@ + \renewcommand\thefootnote{\@fnsymbol\c@footnote}% + \if@twocolumn + \ifnum \col@number=\@ne + \@maketitle + \else + \twocolumn[\@maketitle]% + \fi + \else + \newpage + \global\@topnum\z@ % Prevents figures from going at top of page. + \@maketitle + \fi + \thispagestyle{empty}\@thanks +% + \def\\{\unskip\ \ignorespaces}\def\inst##1{\unskip{}}% + \def\thanks##1{\unskip{}}\def\fnmsep{\unskip}% + \instindent=\hsize + \advance\instindent by-\headlineindent + \if!\the\toctitle!\addcontentsline{toc}{title}{\@title}\else + \addcontentsline{toc}{title}{\the\toctitle}\fi + \if@runhead + \if!\the\titlerunning!\else + \edef\@title{\the\titlerunning}% + \fi + \global\setbox\titrun=\hbox{\small\rm\unboldmath\ignorespaces\@title}% + \ifdim\wd\titrun>\instindent + \typeout{Title too long for running head. Please supply}% + \typeout{a shorter form with \string\titlerunning\space prior to + \string\maketitle}% + \global\setbox\titrun=\hbox{\small\rm + Title Suppressed Due to Excessive Length}% + \fi + \xdef\@title{\copy\titrun}% + \fi +% + \if!\the\tocauthor!\relax + {\def\and{\noexpand\protect\noexpand\and}% + \def\inst##1{}% added MR 2017-09-20 to remove inst numbers from the TOC + \def\orcidID##1{}% added MR 2017-09-20 to remove ORCID ids from the TOC + \protected@xdef\toc@uthor{\@author}}% + \else + \def\\{\noexpand\protect\noexpand\newline}% + \protected@xdef\scratch{\the\tocauthor}% + \protected@xdef\toc@uthor{\scratch}% + \fi + \addtocontents{toc}{\noexpand\protect\noexpand\authcount{\the\c@auco}}% + \addcontentsline{toc}{author}{\toc@uthor}% + \if@runhead + \if!\the\authorrunning! + \value{@inst}=\value{@auth}% + \setcounter{@auth}{1}% + \else + \edef\@author{\the\authorrunning}% + \fi + \global\setbox\authrun=\hbox{\def\inst##1{}% added MR 2017-09-20 to remove inst numbers from the runninghead + \def\orcidID##1{}% added MR 2017-09-20 to remove ORCID ids from the runninghead + \small\unboldmath\@author\unskip}% + \ifdim\wd\authrun>\instindent + \typeout{Names of authors too long for running head. Please supply}% + \typeout{a shorter form with \string\authorrunning\space prior to + \string\maketitle}% + \global\setbox\authrun=\hbox{\small\rm + Authors Suppressed Due to Excessive Length}% + \fi + \xdef\@author{\copy\authrun}% + \markboth{\@author}{\@title}% + \fi + \endgroup + \setcounter{footnote}{\fnnstart}% + \clearheadinfo} +% +\def\@maketitle{\newpage + \markboth{}{}% + \def\lastand{\ifnum\value{@inst}=2\relax + \unskip{} \andname\ + \else + \unskip \lastandname\ + \fi}% + \def\and{\stepcounter{@auth}\relax + \ifnum\value{@auth}=\value{@inst}% + \lastand + \else + \unskip, + \fi}% + \begin{center}% + \let\newline\\ + {\Large \bfseries\boldmath + \pretolerance=10000 + \@title \par}\vskip .8cm +\if!\@subtitle!\else {\large \bfseries\boldmath + \vskip -.65cm + \pretolerance=10000 + \@subtitle \par}\vskip .8cm\fi + \setbox0=\vbox{\setcounter{@auth}{1}\def\and{\stepcounter{@auth}}% + \def\thanks##1{}\@author}% + \global\value{@inst}=\value{@auth}% + \global\value{auco}=\value{@auth}% + \setcounter{@auth}{1}% +{\lineskip .5em +\noindent\ignorespaces +\@author\vskip.35cm} + {\small\institutename} + \end{center}% + } + +% definition of the "\spnewtheorem" command. +% +% Usage: +% +% \spnewtheorem{env_nam}{caption}[within]{cap_font}{body_font} +% or \spnewtheorem{env_nam}[numbered_like]{caption}{cap_font}{body_font} +% or \spnewtheorem*{env_nam}{caption}{cap_font}{body_font} +% +% New is "cap_font" and "body_font". It stands for +% fontdefinition of the caption and the text itself. +% +% "\spnewtheorem*" gives a theorem without number. +% +% A defined spnewthoerem environment is used as described +% by Lamport. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\@thmcountersep{} +\def\@thmcounterend{.} + +\def\spnewtheorem{\@ifstar{\@sthm}{\@Sthm}} + +% definition of \spnewtheorem with number + +\def\@spnthm#1#2{% + \@ifnextchar[{\@spxnthm{#1}{#2}}{\@spynthm{#1}{#2}}} +\def\@Sthm#1{\@ifnextchar[{\@spothm{#1}}{\@spnthm{#1}}} + +\def\@spxnthm#1#2[#3]#4#5{\expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}\@addtoreset{#1}{#3}% + \expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand + \csname the#3\endcsname \noexpand\@thmcountersep \@thmcounter{#1}}% + \expandafter\xdef\csname #1name\endcsname{#2}% + \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}% + \global\@namedef{end#1}{\@endtheorem}}} + +\def\@spynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}% + \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}% + \expandafter\xdef\csname #1name\endcsname{#2}% + \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#3}{#4}}% + \global\@namedef{end#1}{\@endtheorem}}} + +\def\@spothm#1[#2]#3#4#5{% + \@ifundefined{c@#2}{\@latexerr{No theorem environment `#2' defined}\@eha}% + {\expandafter\@ifdefinable\csname #1\endcsname + {\newaliascnt{#1}{#2}% + \expandafter\xdef\csname #1name\endcsname{#3}% + \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}% + \global\@namedef{end#1}{\@endtheorem}}}} + +\def\@spthm#1#2#3#4{\topsep 7\p@ \@plus2\p@ \@minus4\p@ +\refstepcounter{#1}% +\@ifnextchar[{\@spythm{#1}{#2}{#3}{#4}}{\@spxthm{#1}{#2}{#3}{#4}}} + +\def\@spxthm#1#2#3#4{\@spbegintheorem{#2}{\csname the#1\endcsname}{#3}{#4}% + \ignorespaces} + +\def\@spythm#1#2#3#4[#5]{\@spopargbegintheorem{#2}{\csname + the#1\endcsname}{#5}{#3}{#4}\ignorespaces} + +\def\@spbegintheorem#1#2#3#4{\trivlist + \item[\hskip\labelsep{#3#1\ #2\@thmcounterend}]#4} + +\def\@spopargbegintheorem#1#2#3#4#5{\trivlist + \item[\hskip\labelsep{#4#1\ #2}]{#4(#3)\@thmcounterend\ }#5} + +% definition of \spnewtheorem* without number + +\def\@sthm#1#2{\@Ynthm{#1}{#2}} + +\def\@Ynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname + {\global\@namedef{#1}{\@Thm{\csname #1name\endcsname}{#3}{#4}}% + \expandafter\xdef\csname #1name\endcsname{#2}% + \global\@namedef{end#1}{\@endtheorem}}} + +\def\@Thm#1#2#3{\topsep 7\p@ \@plus2\p@ \@minus4\p@ +\@ifnextchar[{\@Ythm{#1}{#2}{#3}}{\@Xthm{#1}{#2}{#3}}} + +\def\@Xthm#1#2#3{\@Begintheorem{#1}{#2}{#3}\ignorespaces} + +\def\@Ythm#1#2#3[#4]{\@Opargbegintheorem{#1} + {#4}{#2}{#3}\ignorespaces} + +\def\@Begintheorem#1#2#3{#3\trivlist + \item[\hskip\labelsep{#2#1\@thmcounterend}]} + +\def\@Opargbegintheorem#1#2#3#4{#4\trivlist + \item[\hskip\labelsep{#3#1}]{#3(#2)\@thmcounterend\ }} + +\if@envcntsect + \def\@thmcountersep{.} + \spnewtheorem{theorem}{Theorem}[section]{\bfseries}{\itshape} +\else + \spnewtheorem{theorem}{Theorem}{\bfseries}{\itshape} + \if@envcntreset + \@addtoreset{theorem}{section} + \else + \@addtoreset{theorem}{chapter} + \fi +\fi + +%definition of divers theorem environments +\spnewtheorem*{claim}{Claim}{\itshape}{\rmfamily} +\spnewtheorem*{proof}{Proof}{\itshape}{\rmfamily} +\if@envcntsame % alle Umgebungen wie Theorem. + \def\spn@wtheorem#1#2#3#4{\@spothm{#1}[theorem]{#2}{#3}{#4}} +\else % alle Umgebungen mit eigenem Zaehler + \if@envcntsect % mit section numeriert + \def\spn@wtheorem#1#2#3#4{\@spxnthm{#1}{#2}[section]{#3}{#4}} + \else % nicht mit section numeriert + \if@envcntreset + \def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4} + \@addtoreset{#1}{section}} + \else + \def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4} + \@addtoreset{#1}{chapter}}% + \fi + \fi +\fi +\spn@wtheorem{case}{Case}{\itshape}{\rmfamily} +\spn@wtheorem{conjecture}{Conjecture}{\itshape}{\rmfamily} +\spn@wtheorem{corollary}{Corollary}{\bfseries}{\itshape} +\spn@wtheorem{definition}{Definition}{\bfseries}{\itshape} +\spn@wtheorem{example}{Example}{\itshape}{\rmfamily} +\spn@wtheorem{exercise}{Exercise}{\itshape}{\rmfamily} +\spn@wtheorem{lemma}{Lemma}{\bfseries}{\itshape} +\spn@wtheorem{note}{Note}{\itshape}{\rmfamily} +\spn@wtheorem{problem}{Problem}{\itshape}{\rmfamily} +\spn@wtheorem{property}{Property}{\itshape}{\rmfamily} +\spn@wtheorem{proposition}{Proposition}{\bfseries}{\itshape} +\spn@wtheorem{question}{Question}{\itshape}{\rmfamily} +\spn@wtheorem{solution}{Solution}{\itshape}{\rmfamily} +\spn@wtheorem{remark}{Remark}{\itshape}{\rmfamily} + +\def\@takefromreset#1#2{% + \def\@tempa{#1}% + \let\@tempd\@elt + \def\@elt##1{% + \def\@tempb{##1}% + \ifx\@tempa\@tempb\else + \@addtoreset{##1}{#2}% + \fi}% + \expandafter\expandafter\let\expandafter\@tempc\csname cl@#2\endcsname + \expandafter\def\csname cl@#2\endcsname{}% + \@tempc + \let\@elt\@tempd} + +\def\theopargself{\def\@spopargbegintheorem##1##2##3##4##5{\trivlist + \item[\hskip\labelsep{##4##1\ ##2}]{##4##3\@thmcounterend\ }##5} + \def\@Opargbegintheorem##1##2##3##4{##4\trivlist + \item[\hskip\labelsep{##3##1}]{##3##2\@thmcounterend\ }} + } + +\renewenvironment{abstract}{% + \list{}{\advance\topsep by0.35cm\relax\small + \leftmargin=1cm + \labelwidth=\z@ + \listparindent=\z@ + \itemindent\listparindent + \rightmargin\leftmargin}\item[\hskip\labelsep + \bfseries\abstractname]} + {\endlist} + +\newdimen\headlineindent % dimension for space between +\headlineindent=1.166cm % number and text of headings. + +\def\ps@headings{\let\@mkboth\@gobbletwo + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}% + \leftmark\hfil} + \def\@oddhead{\normalfont\small\hfil\rightmark\hspace{\headlineindent}% + \llap{\thepage}} + \def\chaptermark##1{}% + \def\sectionmark##1{}% + \def\subsectionmark##1{}} + +\def\ps@titlepage{\let\@mkboth\@gobbletwo + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}% + \hfil} + \def\@oddhead{\normalfont\small\hfil\hspace{\headlineindent}% + \llap{\thepage}} + \def\chaptermark##1{}% + \def\sectionmark##1{}% + \def\subsectionmark##1{}} + +\if@runhead\ps@headings\else +\ps@empty\fi + +\setlength\arraycolsep{1.4\p@} +\setlength\tabcolsep{1.4\p@} + +\endinput +%end of file llncs.cls diff --git a/macros/latex/contrib/llncs/llncsdoc.pdf b/macros/latex/contrib/llncs/llncsdoc.pdf new file mode 100644 index 0000000000..f0983cf795 Binary files /dev/null and b/macros/latex/contrib/llncs/llncsdoc.pdf differ diff --git a/macros/latex/contrib/llncs/llncsdoc.tex b/macros/latex/contrib/llncs/llncsdoc.tex new file mode 100644 index 0000000000..b8c8f38540 --- /dev/null +++ b/macros/latex/contrib/llncs/llncsdoc.tex @@ -0,0 +1,422 @@ +% This is LLNCSDOC.TEX the documentation file of +% the LaTeX2e class from Springer-Verlag +% for Lecture Notes in Computer Science, version 2.21 +\documentclass{llncs} +\usepackage{llncsdoc} +\usepackage{graphicx} +\usepackage{doc} +\usepackage[dvips,bookmarksopen]{hyperref} +% +\makeatletter\@twosidefalse\@mparswitchfalse\makeatother +\begin{document} +\title{Instructions for Using Springer's \texttt{llncs} Class for +Computer Science Proceedings Papers} +% +\subtitle{\texttt{llncs}, Version 2.21, Jan 12, 2022} +% +\author{} +\institute{} + +\maketitle \thispagestyle{empty} +% +\section{Installation} +% +Copy \texttt{llncs.cls} to a directory that is searched by \LaTeX{}, +e.g. either your \texttt{texmf} tree or the local work directory with your main +{\LaTeX} file. + +% +\section{Working with the \texttt{llncs} Document Class} +% +\subsection{General Information} +The \texttt{llncs} class is an extension of the standard \LaTeX{} \texttt{article} +class. Therefore you may use all \texttt{article} commands in your +manuscript. + +If you are already familiar with \LaTeX{}, the \texttt{llncs} class should +not give you any major difficulties. It basically adjusts the layout +to the required standard, defining styles and spacing of headings +and captions and setting the printing area to 122\,mm horizontally +by 193\,mm vertically. To keep the layout consistent, we kindly ask +you to refrain from using any \LaTeX{} or \TeX{} command that +modifies these settings (i.e. \verb|\textheight|, \verb|\vspace|, +\verb|baselinestretch|, etc.). Such manual layout adjustments should +be limited to very exceptional cases. + +In addition to defining the general layout, the \texttt{llncs} document class +provides some special commands for typesetting the contribution +header, i.e. title, authors, affiliations, abstract, and additional +metadata. These special commands are described in Sect.~\ref{Sec2}. + +For a more detailed description of how to prepare your text, +illustrations, and references, see the {\em Springer Guidelines for +Authors of Proceedings}. + + +\subsection{How to Use the \texttt{llncs} Document Class} +The \texttt{llncs} class is invoked by replacing \texttt{article} by \texttt{llncs} in +the first line of your \LaTeX{} document: +\begin{verbatim} +\documentclass{llncs} +% +\begin{document} + +\end{document} +\end{verbatim} +% +If your file is already coded with \LaTeX{}, you can easily adapt it +to the \texttt{llncs} document class by replacing +\begin{verbatim} +\documentclass{article} +\end{verbatim} +with +\begin{verbatim} +\documentclass{llncs} +\end{verbatim} + + +\section{How to Code the Header of Your Paper}\label{Sec2} +\label{contbegin} +\subsection{Title} +% +\DescribeMacro{\title} Please code the title of your contribution as +follows: +\begin{verbatim} +\title{} +\end{verbatim} +All words in titles should be capitalized except for conjunctions, +prepositions (e.g.\ on, of, by, and, or, but, from, with, without, +under), and definite/indefinite articles (the, a, an), unless they +appear at the beginning. Formula letters are typeset as in the text. +Long titles that run over multiple lines can be wrapped explicitly +with \verb|\\|. Titles have no end punctuation. + +Acknowledgements should generally be placed in an unnumbered +subsection at the end of the paper. If you still need to refer to a +support or funding program in a note to the title, you can use +the\DescribeMacro{\thanks} \verb|\thanks| macro inside the title: +\begin{verbatim} +\title{\thanks{}} +\end{verbatim} +Please do not use \verb|\thanks| inside \verb|\author| or +\verb|\institute| as footnotes for these elements are not supported +in the online version and will therefore be dropped. + +\DescribeMacro{\fnmsep} If you need two or more footnotes please +separate them with \verb|\fnmsep| (i.e. {\itshape f}oot\emph note +\emph mark \emph{sep}arator). + +\DescribeMacro{\titlerunning} If a long title does not fit in the +single line of the running head, a warning is generated. You can +specify an abbreviated title for the running head with the command +\begin{verbatim} +\titlerunning{} +\end{verbatim} +\DescribeMacro{\subtitle} An optional subtitle may also be added: +\begin{verbatim} +\subtitle{} +\end{verbatim} + +\subsection{Author(s)} +\DescribeMacro{\author} The name(s) of the author(s) are specified +by: +\begin{verbatim} +\author{} +\end{verbatim} +\DescribeMacro{\and} If there is more than one author, please +separate them by \verb|\and|. This makes sure that correct +punctuation is inserted according to the number of authors. + +\DescribeMacro{\inst} Numbers referring to different addresses or +affiliations should be attached to each author with the +\verb|\inst{}| command. If an author is affiliated with +multiple institutions the numbers should be separated by a comma, +for example \verb|\inst{2,3}|. + +\DescribeMacro{\orcidID} ORCID identifiers can be included with +\begin{verbatim} +\orcidID{} +\end{verbatim} +The ORCID (Open Researcher and Contributor ID) registry provides +authors with unique digital identifiers that distinguish them from +other researchers and help them link their research activities to +these identifiers. Authors who are not yet registered with ORCID are +encouraged to apply for an individual ORCID id at +\url{https://www.orcid.org} and to include it in their papers. In +the final publication, the ORCID id will be replaced by an ORCID +icon, which will link from the eBook to the +actual ID in the ORCID database. The ORCID icon will also replace +the number in the printed book. + +If you have done this correctly, the author line now reads, for +example: +\begin{verbatim} +\author{First Author\inst{1}\orcidID{0000-1111-2222-3333} \and +Second Author\inst{2,3}\orcidID{1111-2222-3333-4444}} +\end{verbatim} +The given name(s) should always be followed by the family name(s). +Authors who have more than one family name should indicate which +part of their name represents the family name(s), for example by +non-breaking spaces \verb|Jos\'{e} Martinez~Perez| or curly braces +\verb|Jos\'{e} {Martinez Perez}|. + +\DescribeMacro{\authorrunning} As given name(s) are to be shortened +to initials in the running heads, specifying an abbreviated author +list with the optional command: +\begin{verbatim} +\authorrunning{} +\end{verbatim} +might add some clarity about the correct representation of author +names, in the running-heads as well as in the author index. + +\subsection{Affiliations} +\DescribeMacro{\institute} Addresses of institutes, companies, etc. +should be given in \verb|\institute|. + +\DescribeMacro{\and} Multiple affiliations are separated by +\verb|\and|, which automatically assures correct numbering: +\begin{verbatim} +\institute{ +\and +\and } +\end{verbatim} +\DescribeMacro{\email}Inside \verb|\institute| you can use +\begin{verbatim} +\email{} +\end{verbatim} +\DescribeMacro{\url}and +\begin{verbatim} +\url{} +\end{verbatim} +to provide author email addresses and Web pages. If you need to +typeset the tilde character -- e.g. for your Web page in your unix +system's home directory -- the \verb|\homedir| command will do this. +If multiple authors have the same affiliation, please check that the +order of email addresses matches the sequence of (affiliated) author +names. + +Please note that, if email addresses are given in your paper, they +will also be included in the metadata of the online version. + +\subsection{Format the Header} +\DescribeMacro{\maketitle} The command \verb|\maketitle| formats the +header of your paper. If you leave it out the work done so far will +produce \emph{no} text. + +\subsection{Abstract and Keywords} +\DescribeEnv{abstract}The abstract is coded as follows: +\begin{verbatim} +\begin{abstract} + +\end{abstract} +\end{verbatim} +\DescribeMacro{\keywords} Keywords should be specified inside the +\verb|abstract| environment. \DescribeMacro{\and}Please capitalize +the first letter of each keyword and again separate them with +\verb|\and|: +\begin{verbatim} +\keywords{First keyword \and Second keyword \and Third keyword} +\end{verbatim} +The keyword separator will then be properly rendered as a middle +dot. + +\section{How to Code the Body of Your Paper} +% +\subsection{General Rules} +From a technical point of view, the \texttt{llncs} document class does not +require any specific {\LaTeX} coding in the body of your paper. You +can simply use the commands provided by the `article' document +class. For more information about what will be done with your +manuscript before publication, please refer to the {\em Springer +Guidelines for Authors of Proceedings}. + +\subsection{Special Math Characters} +The \texttt{llncs} document class supports some additional special +characters:\smallskip +\begin{center} +\begin{tabular}{l@{\hspace{1em}yields\hspace{1em}} +c@{\hspace{3em}}l@{\hspace{1em}yields\hspace{1em}}c} +\verb|\grole| & $\grole$ & \verb|\getsto| & $\getsto$\\ +\verb|\lid| & $\lid$ & \verb|\gid| & $\gid$ +\end{tabular}\smallskip +\end{center} +If you need blackboard bold characters, i.e. for sets of numbers, +please load the related \AmSTeX fonts. If for some reason this is +not possible you can also use the following commands from the \texttt{llncs} +class:\smallskip +\begin{center} +\begin{tabular}{l@{\hspace{1em}yields\hspace{1em}} +c@{\hspace{3em}}l@{\hspace{1em}yields\hspace{1em}}c} +\verb|\bbbc| & $\bbbc$ & \verb|\bbbf| & $\bbbf$\\ +\verb|\bbbh| & $\bbbh$ & \verb|\bbbk| & $\bbbk$\\ +\verb|\bbbm| & $\bbbm$ & \verb|\bbbn| & $\bbbn$\\ +\verb|\bbbp| & $\bbbp$ & \verb|\bbbq| & $\bbbq$\\ +\verb|\bbbr| & $\bbbr$ & \verb|\bbbs| & $\bbbs$\\ +\verb|\bbbt| & $\bbbt$ & \verb|\bbbz| & $\bbbz$\\ +\verb|\bbbone| & $\bbbone$ +\end{tabular}\smallskip +\end{center} +Please note that all these characters are only available in math +mode. + +\section{Theorems, Definitions, and Proofs}\label{builtintheo} +\subsection{Predefined Theorem-Like Environments} +\DescribeEnv{corollary}\DescribeEnv{definition}\DescribeEnv{lemma}\DescribeEnv{proposition}\DescribeEnv{theorem}% +Several theorem-like environments are predefined in the \texttt{llncs} +document class. The following environments have a bold run-in +heading, while the following text is in italics: +\begin{verbatim} +\begin{corollary} \end{corollary} +\begin{definition} \end{definition} +\begin{lemma} \end{lemma} +\begin{proposition} \end{proposition} +\begin{theorem} \end{theorem} +\end{verbatim} +\DescribeEnv{case}\DescribeEnv{conjecture}\DescribeEnv{example}\DescribeEnv{exercise}\DescribeEnv{note}% +\DescribeEnv{problem}\DescribeEnv{property}\DescribeEnv{question}\DescribeEnv{remark}\DescribeEnv{solution}% +Other theorem-like environments render the text in roman, while the +run-in heading is bold as well: +\begin{verbatim} +\begin{case} \end{case} +\begin{conjecture} \end{conjecture} +\begin{example} \end{example} +\begin{exercise} \end{exercise} +\begin{note} \end{note} +\begin{problem} \end{problem} +\begin{property} \end{property} +\begin{question} \end{question} +\begin{remark} \end{remark} +\begin{solution} \end{solution} +\end{verbatim} +\DescribeEnv{claim}\DescribeEnv{proof} Finally, there are also two +unnumbered environments that have the run-in heading in italics and +the text in upright roman. +\begin{verbatim} +\begin{claim} \end{claim} +\begin{proof} \end{proof} +\end{verbatim} +\DescribeMacro{\qed}Proofs may contain an eye catching square, which +can be inserted with \verb|\qed|) before the environment ends. + +\subsection{User-Defined Theorem-Like Environments} +\DescribeMacro{\spnewtheorem}We have enhanced the standard +\verb|\newtheorem| command and slightly changed its syntax to get +two new commands \verb|\spnewtheorem| and \verb|\spnewtheorem*| that +now can be used to define additional environments. They require two +additional arguments, namely the font style of the label and the +font style of the text of the new environment: +\begin{verbatim} +\spnewtheorem{}[]{}{}{} +\end{verbatim} +For example, +\begin{verbatim} +\spnewtheorem{maintheorem}[theorem]{Main Theorem}{\bfseries}{\itshape} +\end{verbatim} +will create a {\em main theorem\/} environment that is numbered +together with the predefined {\em theorem\/}. The sharing of the +default counter (\verb|[theorem]|) is desired. If you omit the +optional second argument of \verb|\spnewtheorem|, a separate counter +for your new environment is used throughout your document. + +In combination with the (obsolete) class option \verb|envcountsect| +(see. Sect.~\ref{SecClassOptions}), the \verb|\spnewtheorem| command +also supports the syntax: +\begin{verbatim} +\spnewtheorem{}{}[]{}{} +\end{verbatim} +With the parameter \verb||, you can control the sectioning +element that resets the theorem counters. If you specify, for +example, \verb|subsection|, the newly defined environment is +numbered subsectionwise. + +\DescribeMacro{\spnewtheorem*}If you wish to add an unnumbered +environment, please use the syntax +\begin{verbatim} +\spnewtheorem*{}{}{}{} +\end{verbatim} + + + +% +\section{References} +\label{refer} +% +There are three options for citing references: +\begin{itemize} +\item arabic numbers, i.e. [1], [3--5], [4--6,9], +\item labels, i.e. [CE1], [AB1,XY2], +\item author/year system, (Smith et al. 2000), (Miller 1999a, 12; Brown +2018). +\end{itemize} +We prefer citations with arabic numbers, i.e. the usage of +\verb|\bibitem| without an optional parameter. +\DescribeMacro{citeauthoryear}If you want to use the author/year +system, you can use the class option \verb|citeauthoryear|, i.e. +\begin{verbatim} +\documentclass[citeauthoryear]{llncs} +\end{verbatim} +Please note that this option does not automatically change your +citations to the author/year style. It basically redefines the +\verb|\bibitem| command to take the publication year as an optional +parameter that is displayed instead of an arabic number. Author +name(s) and, if necessary, parentheses are to be typed manually. If +your reference reads +\begin{verbatim} +\bibitem[2016]{vdaalst:2016} +van der Aalst, W.: Process Mining, 2nd ed. Springer, Heidelberg (2016) +\end{verbatim} +and is cited as follows: +\begin{verbatim} +... is shown by van der Aalst (\cite{vdaalst:2016}) +\end{verbatim} +the resulting text will be:\begin{quote} ``\dots is shown by van der +Aalst (2016).'' +\end{quote} + +\DescribeMacro{splncs04.bst}We encourage you to use {\sc Bib}\TeX{} +for typesetting your references. For formatting the bibliography +according to Springer's standard (for mathematics, physical +sciences, and computer science), please use the bibliography style +file \verb|splncs04.bst| that comes with the \texttt{llncs} document class. +You simply need to add \verb|\bibliographystyle{splncs04}| to your +document. DOIs should be provided in the doi field of your .bib +database. {\sc Bib}\TeX{} will then automatically add them to your +references. Please note that we do not provide an option to +implement + +\DescribeMacro{\doi}If you do not use {\sc Bib}\TeX{}, you can +include a DOI with the \verb|\doi| command: +\begin{verbatim} +\doi{} +\end{verbatim} +The DOI will be expanded to the URL \verb|https://doi.org/| in +accordance with the CrossRef guidelines. + +\section{Obsolete Class Options}\label{SecClassOptions} +The \texttt{llncs} document class contains several class options that have +become obsolete over the years. We only mention them for +completeness: +\begin{itemize} +\item \DescribeMacro{orivec}The \texttt{llncs} document class changes the formatting of +vectors coded with \verb|\vec| to boldface italics. If you +absolutely need the original {\LaTeX} design for vectors, i.e. an +arrow above the related variable, you can restore it with the +\verb|orivec| option. +\item \DescribeMacro{envcountsame}All theorem-like environments +share one counter, i.e. Theorem 1, Lemma 2, Corollary 3, etc. +\item \DescribeMacro{envcountreset}All theorem-like environments +are numbered per section, i.e. the related counters are reset to 1 +in every section. +\item \DescribeMacro{envcountsect}All theorem-like environments +are numbered per section, and the section number added to the +individual counter, i.e. Theorem 1.2, Lemma 2.2, etc. +\item \DescribeMacro{openbib}This option produces the ``open'' bibliography style, in which each block starts +on a new line, and succeeding lines in a block are indented by +\verb|\bibindent|. +\item \DescribeMacro{oribibl}This option restores the original +{\LaTeX} definitions for the bibliography and the \verb|\cite| +mechanism that some {\sc Bib}\TeX{} applications rely on. +\end{itemize} +% +% +\end{document} diff --git a/macros/latex/contrib/llncs/splncs04.bst b/macros/latex/contrib/llncs/splncs04.bst new file mode 100644 index 0000000000..3be8de3ac7 --- /dev/null +++ b/macros/latex/contrib/llncs/splncs04.bst @@ -0,0 +1,1548 @@ +%% BibTeX bibliography style `splncs03' +%% +%% BibTeX bibliography style for use with numbered references in +%% Springer Verlag's "Lecture Notes in Computer Science" series. +%% (See Springer's documentation for llncs.cls for +%% more details of the suggested reference format.) Note that this +%% file will not work for author-year style citations. +%% +%% Use \documentclass{llncs} and \bibliographystyle{splncs03}, and cite +%% a reference with (e.g.) \cite{smith77} to get a "[1]" in the text. +%% +%% This file comes to you courtesy of Maurizio "Titto" Patrignani of +%% Dipartimento di Informatica e Automazione Universita' Roma Tre +%% +%% ================================================================================================ +%% This was file `titto-lncs-02.bst' produced on Wed Apr 1, 2009 +%% Edited by hand by titto based on `titto-lncs-01.bst' (see below) +%% +%% CHANGES (with respect to titto-lncs-01.bst): +%% - Removed the call to \urlprefix (thus no "URL" string is added to the output) +%% ================================================================================================ +%% This was file `titto-lncs-01.bst' produced on Fri Aug 22, 2008 +%% Edited by hand by titto based on `titto.bst' (see below) +%% +%% CHANGES (with respect to titto.bst): +%% - Removed the "capitalize" command for editors string "(eds.)" and "(ed.)" +%% - Introduced the functions titto.bbl.pages and titto.bbl.page for journal pages (without "pp.") +%% - Added a new.sentence command to separate with a dot booktitle and series in the inproceedings +%% - Commented all new.block commands before urls and notes (to separate them with a comma) +%% - Introduced the functions titto.bbl.volume for handling journal volumes (without "vol." label) +%% - Used for editors the same name conventions used for authors (see function format.in.ed.booktitle) +%% - Removed a \newblock to avoid long spaces between title and "In: ..." +%% - Added function titto.space.prefix to add a space instead of "~" after the (removed) "vol." label +%% - Added doi +%% ================================================================================================ +%% This was file `titto.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% merlin.mbs (with options: `vonx,nm-rvvc,yr-par,jttl-rm,volp-com,jwdpg,jwdvol,numser,ser-vol,jnm-x,btit-rm,bt-rm,edparxc,bkedcap,au-col,in-col,fin-bare,pp,ed,abr,mth-bare,xedn,jabr,and-com,and-com-ed,xand,url,url-blk,em-x,nfss,') +%% ---------------------------------------- +%% *** Tentative .bst file for Springer LNCS *** +%% +%% Copyright 1994-2007 Patrick W Daly + % =============================================================== + % IMPORTANT NOTICE: + % This bibliographic style (bst) file has been generated from one or + % more master bibliographic style (mbs) files, listed above. + % + % This generated file can be redistributed and/or modified under the terms + % of the LaTeX Project Public License Distributed from CTAN + % archives in directory macros/latex/base/lppl.txt; either + % version 1 of the License, or any later version. + % =============================================================== + % Name and version information of the main mbs file: + % \ProvidesFile{merlin.mbs}[2007/04/24 4.20 (PWD, AO, DPC)] + % For use with BibTeX version 0.99a or later + %------------------------------------------------------------------- + % This bibliography style file is intended for texts in ENGLISH + % This is a numerical citation style, and as such is standard LaTeX. + % It requires no extra package to interface to the main text. + % The form of the \bibitem entries is + % \bibitem{key}... + % Usage of \cite is as follows: + % \cite{key} ==>> [#] + % \cite[chap. 2]{key} ==>> [#, chap. 2] + % where # is a number determined by the ordering in the reference list. + % The order in the reference list is alphabetical by authors. + %--------------------------------------------------------------------- + +ENTRY + { address + author + booktitle + chapter + doi + edition + editor + eid + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + url + volume + year + } + {} + { label } +INTEGERS { output.state before.all mid.sentence after.sentence after.block } +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} +STRINGS { s t} +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ +% newline$ +% "\newblock " write$ % removed for titto-lncs-01 + " " write$ % to avoid long spaces between title and "In: ..." + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} +FUNCTION {fin.entry} +{ duplicate$ empty$ + 'pop$ + 'write$ + if$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} +FUNCTION {add.blank} +{ " " * before.all 'output.state := +} + + +FUNCTION {add.colon} +{ duplicate$ empty$ + 'skip$ + { ":" * add.blank } + if$ +} + +FUNCTION {date.block} +{ + new.block +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} +STRINGS {z} +FUNCTION {remove.dots} +{ 'z := + "" + { z empty$ not } + { z #1 #1 substring$ + z #2 global.max$ substring$ 'z := + duplicate$ "." = 'pop$ + { * } + if$ + } + while$ +} +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} +FUNCTION {emphasize} +{ skip$ } + +FUNCTION {embolden} +{ duplicate$ empty$ +{ pop$ "" } +{ "\textbf{" swap$ * "}" * } +if$ +} +FUNCTION {tie.or.space.prefix} +{ duplicate$ text.length$ #5 < + { "~" } + { " " } + if$ + swap$ +} +FUNCTION {titto.space.prefix} % always introduce a space +{ duplicate$ text.length$ #3 < + { " " } + { " " } + if$ + swap$ +} + + +FUNCTION {capitalize} +{ "u" change.case$ "t" change.case$ } + +FUNCTION {space.word} +{ " " swap$ * " " * } + % Here are the language-specific definitions for explicit words. + % Each function has a name bbl.xxx where xxx is the English word. + % The language selected here is ENGLISH +FUNCTION {bbl.and} +{ "and"} + +FUNCTION {bbl.etal} +{ "et~al." } + +FUNCTION {bbl.editors} +{ "eds." } + +FUNCTION {bbl.editor} +{ "ed." } + +FUNCTION {bbl.edby} +{ "edited by" } + +FUNCTION {bbl.edition} +{ "edn." } + +FUNCTION {bbl.volume} +{ "vol." } + +FUNCTION {titto.bbl.volume} % for handling journals +{ "" } + +FUNCTION {bbl.of} +{ "of" } + +FUNCTION {bbl.number} +{ "no." } + +FUNCTION {bbl.nr} +{ "no." } + +FUNCTION {bbl.in} +{ "in" } + +FUNCTION {bbl.pages} +{ "pp." } + +FUNCTION {bbl.page} +{ "p." } + +FUNCTION {titto.bbl.pages} % for journals +{ "" } + +FUNCTION {titto.bbl.page} % for journals +{ "" } + +FUNCTION {bbl.chapter} +{ "chap." } + +FUNCTION {bbl.techrep} +{ "Tech. Rep." } + +FUNCTION {bbl.mthesis} +{ "Master's thesis" } + +FUNCTION {bbl.phdthesis} +{ "Ph.D. thesis" } + +MACRO {jan} {"Jan."} + +MACRO {feb} {"Feb."} + +MACRO {mar} {"Mar."} + +MACRO {apr} {"Apr."} + +MACRO {may} {"May"} + +MACRO {jun} {"Jun."} + +MACRO {jul} {"Jul."} + +MACRO {aug} {"Aug."} + +MACRO {sep} {"Sep."} + +MACRO {oct} {"Oct."} + +MACRO {nov} {"Nov."} + +MACRO {dec} {"Dec."} + +MACRO {acmcs} {"ACM Comput. Surv."} + +MACRO {acta} {"Acta Inf."} + +MACRO {cacm} {"Commun. ACM"} + +MACRO {ibmjrd} {"IBM J. Res. Dev."} + +MACRO {ibmsj} {"IBM Syst.~J."} + +MACRO {ieeese} {"IEEE Trans. Software Eng."} + +MACRO {ieeetc} {"IEEE Trans. Comput."} + +MACRO {ieeetcad} + {"IEEE Trans. Comput. Aid. Des."} + +MACRO {ipl} {"Inf. Process. Lett."} + +MACRO {jacm} {"J.~ACM"} + +MACRO {jcss} {"J.~Comput. Syst. Sci."} + +MACRO {scp} {"Sci. Comput. Program."} + +MACRO {sicomp} {"SIAM J. Comput."} + +MACRO {tocs} {"ACM Trans. Comput. Syst."} + +MACRO {tods} {"ACM Trans. Database Syst."} + +MACRO {tog} {"ACM Trans. Graphic."} + +MACRO {toms} {"ACM Trans. Math. Software"} + +MACRO {toois} {"ACM Trans. Office Inf. Syst."} + +MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."} + +MACRO {tcs} {"Theor. Comput. Sci."} + +FUNCTION {bibinfo.check} +{ swap$ + duplicate$ missing$ + { + pop$ pop$ + "" + } + { duplicate$ empty$ + { + swap$ pop$ + } + { swap$ + pop$ + } + if$ + } + if$ +} +FUNCTION {bibinfo.warn} +{ swap$ + duplicate$ missing$ + { + swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ + "" + } + { duplicate$ empty$ + { + swap$ "empty " swap$ * " in " * cite$ * warning$ + } + { swap$ + pop$ + } + if$ + } + if$ +} +FUNCTION {format.url} +{ url empty$ + { "" } +% { "\urlprefix\url{" url * "}" * } + { "\url{" url * "}" * } % changed in titto-lncs-02.bst + if$ +} + +FUNCTION {format.doi} % added in splncs04.bst +{ doi empty$ + { "" } + { after.block 'output.state := + "\doi{" doi * "}" * } + if$ +} + +INTEGERS { nameptr namesleft numnames } + + +STRINGS { bibinfo} + +FUNCTION {format.names} +{ 'bibinfo := + duplicate$ empty$ 'skip$ { + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}{, jj}{, f{.}.}" + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + "," * + t "others" = + { + " " * bbl.etal * + } + { " " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } if$ +} +FUNCTION {format.names.ed} +{ + 'bibinfo := + duplicate$ empty$ 'skip$ { + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{f{.}.~}{vv~}{ll}{ jj}" + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + "," * + t "others" = + { + + " " * bbl.etal * + } + { " " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } if$ +} +FUNCTION {format.authors} +{ author "author" format.names +} +FUNCTION {get.bbl.editor} +{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } + +FUNCTION {format.editors} +{ editor "editor" format.names duplicate$ empty$ 'skip$ + { + " " * + get.bbl.editor +% capitalize + "(" swap$ * ")" * + * + } + if$ +} +FUNCTION {format.note} +{ + note empty$ + { "" } + { note #1 #1 substring$ + duplicate$ "{" = + 'skip$ + { output.state mid.sentence = + { "l" } + { "u" } + if$ + change.case$ + } + if$ + note #2 global.max$ substring$ * "note" bibinfo.check + } + if$ +} + +FUNCTION {format.title} +{ title + duplicate$ empty$ 'skip$ + { "t" change.case$ } + if$ + "title" bibinfo.check +} +FUNCTION {output.bibitem} +{ newline$ + "\bibitem{" write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {n.dashify} +{ + 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {word.in} +{ bbl.in capitalize + ":" * + " " * } + +FUNCTION {format.date} +{ + month "month" bibinfo.check + duplicate$ empty$ + year "year" bibinfo.check duplicate$ empty$ + { swap$ 'skip$ + { "there's a month but no year in " cite$ * warning$ } + if$ + * + } + { swap$ 'skip$ + { + swap$ + " " * swap$ + } + if$ + * + remove.dots + } + if$ + duplicate$ empty$ + 'skip$ + { + before.all 'output.state := + " (" swap$ * ")" * + } + if$ +} +FUNCTION {format.btitle} +{ title "title" bibinfo.check + duplicate$ empty$ 'skip$ + { + } + if$ +} +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { bbl.volume volume tie.or.space.prefix + "volume" bibinfo.check * * + series "series" bibinfo.check + duplicate$ empty$ 'pop$ + { emphasize ", " * swap$ * } + if$ + "volume and number" number either.or.check + } + if$ +} +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { output.state mid.sentence = + { bbl.number } + { bbl.number capitalize } + if$ + number tie.or.space.prefix "number" bibinfo.check * * + series empty$ + { "there's a number but no series in " cite$ * warning$ } + { bbl.in space.word * + series "series" bibinfo.check * + } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition duplicate$ empty$ 'skip$ + { + output.state mid.sentence = + { "l" } + { "t" } + if$ change.case$ + "edition" bibinfo.check + " " * bbl.edition * + } + if$ +} +INTEGERS { multiresult } +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} +FUNCTION {format.pages} +{ pages duplicate$ empty$ 'skip$ + { duplicate$ multi.page.check + { + bbl.pages swap$ + n.dashify + } + { + bbl.page swap$ + } + if$ + tie.or.space.prefix + "pages" bibinfo.check + * * + } + if$ +} +FUNCTION {format.journal.pages} +{ pages duplicate$ empty$ 'pop$ + { swap$ duplicate$ empty$ + { pop$ pop$ format.pages } + { + ", " * + swap$ + n.dashify + pages multi.page.check + 'titto.bbl.pages + 'titto.bbl.page + if$ + swap$ tie.or.space.prefix + "pages" bibinfo.check + * * + * + } + if$ + } + if$ +} +FUNCTION {format.journal.eid} +{ eid "eid" bibinfo.check + duplicate$ empty$ 'pop$ + { swap$ duplicate$ empty$ 'skip$ + { + ", " * + } + if$ + swap$ * + } + if$ +} +FUNCTION {format.vol.num.pages} % this function is used only for journal entries +{ volume field.or.null embolden + duplicate$ empty$ 'skip$ + { +% bbl.volume swap$ tie.or.space.prefix + titto.bbl.volume swap$ titto.space.prefix +% rationale for the change above: for journals you don't want "vol." label +% hence it does not make sense to attach the journal number to the label when +% it is short + "volume" bibinfo.check + * * + } + if$ + number "number" bibinfo.check duplicate$ empty$ 'skip$ + { + swap$ duplicate$ empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + swap$ + "(" swap$ * ")" * + } + if$ * + eid empty$ + { format.journal.pages } + { format.journal.eid } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { bbl.chapter } + { type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter tie.or.space.prefix + "chapter" bibinfo.check + * * + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.booktitle} +{ + booktitle "booktitle" bibinfo.check +} +FUNCTION {format.in.ed.booktitle} +{ format.booktitle duplicate$ empty$ 'skip$ + { +% editor "editor" format.names.ed duplicate$ empty$ 'pop$ % changed by titto + editor "editor" format.names duplicate$ empty$ 'pop$ + { + " " * + get.bbl.editor +% capitalize + "(" swap$ * ") " * + * swap$ + * } + if$ + word.in swap$ * + } + if$ +} +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} +FUNCTION {format.thesis.type} +{ type duplicate$ empty$ + 'pop$ + { swap$ pop$ + "t" change.case$ "type" bibinfo.check + } + if$ +} +FUNCTION {format.tr.number} +{ number "number" bibinfo.check + type duplicate$ empty$ + { pop$ bbl.techrep } + 'skip$ + if$ + "type" bibinfo.check + swap$ duplicate$ empty$ + { pop$ "t" change.case$ } + { tie.or.space.prefix * * } + if$ +} +FUNCTION {format.article.crossref} +{ + key duplicate$ empty$ + { pop$ + journal duplicate$ empty$ + { "need key or journal for " cite$ * " to crossref " * crossref * warning$ } + { "journal" bibinfo.check emphasize word.in swap$ * } + if$ + } + { word.in swap$ * " " *} + if$ + " \cite{" * crossref * "}" * +} +FUNCTION {format.crossref.editor} +{ editor #1 "{vv~}{ll}" format.name$ + "editor" bibinfo.check + editor num.names$ duplicate$ + #2 > + { pop$ + "editor" bibinfo.check + " " * bbl.etal + * + } + { #2 < + 'skip$ + { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + "editor" bibinfo.check + " " * bbl.etal + * + } + { + bbl.and space.word + * editor #2 "{vv~}{ll}" format.name$ + "editor" bibinfo.check + * + } + if$ + } + if$ + } + if$ +} +FUNCTION {format.book.crossref} +{ volume duplicate$ empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + pop$ word.in + } + { bbl.volume + capitalize + swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word * + } + if$ + editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { series empty$ + { "need editor, key, or series for " cite$ * " to crossref " * + crossref * warning$ + "" * + } + { series emphasize * } + if$ + } + { key * } + if$ + } + { format.crossref.editor * } + if$ + " \cite{" * crossref * "}" * +} +FUNCTION {format.incoll.inproc.crossref} +{ + editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { format.booktitle duplicate$ empty$ + { "need editor, key, or booktitle for " cite$ * " to crossref " * + crossref * warning$ + } + { word.in swap$ * } + if$ + } + { word.in key * " " *} + if$ + } + { word.in format.crossref.editor * " " *} + if$ + " \cite{" * crossref * "}" * +} +FUNCTION {format.org.or.pub} +{ 't := + "" + address empty$ t empty$ and + 'skip$ + { + t empty$ + { address "address" bibinfo.check * + } + { t * + address empty$ + 'skip$ + { ", " * address "address" bibinfo.check * } + if$ + } + if$ + } + if$ +} +FUNCTION {format.publisher.address} +{ publisher "publisher" bibinfo.warn format.org.or.pub +} + +FUNCTION {format.organization.address} +{ organization "organization" bibinfo.check format.org.or.pub +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + add.colon + new.block + format.title "title" output.check + new.block + crossref missing$ + { + journal + "journal" bibinfo.check + "journal" output.check + add.blank + format.vol.num.pages output + format.date "year" output.check + } + { format.article.crossref output.nonnull + format.pages output + } + if$ +% new.block + format.doi output + format.url output +% new.block + format.note output + fin.entry +} +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + add.colon + } + { format.authors output.nonnull + add.colon + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + new.block + new.sentence + format.number.series output + format.publisher.address output + } + { + new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check +% new.block + format.doi output + format.url output +% new.block + format.note output + fin.entry +} +FUNCTION {booklet} +{ output.bibitem + format.authors output + add.colon + new.block + format.title "title" output.check + new.block + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + format.date output +% new.block + format.doi output + format.url output +% new.block + format.note output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + add.colon + } + { format.authors output.nonnull + add.colon + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { + format.bvolume output + format.chapter.pages "chapter and pages" output.check + new.block + new.sentence + format.number.series output + format.publisher.address output + } + { + format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check +% new.block + format.doi output + format.url output +% new.block + format.note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + add.colon + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.chapter.pages output + new.sentence + format.number.series output + format.publisher.address output + format.edition output + format.date "year" output.check + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ +% new.block + format.doi output + format.url output +% new.block + format.note output + fin.entry +} +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + add.colon + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + new.sentence % added by titto + format.bvolume output + format.pages output + new.sentence + format.number.series output + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + format.date "year" output.check + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ +% new.block + format.doi output + format.url output +% new.block + format.note output + fin.entry +} +FUNCTION {conference} { inproceedings } +FUNCTION {manual} +{ output.bibitem + author empty$ + { organization "organization" bibinfo.check + duplicate$ empty$ 'pop$ + { output + address "address" bibinfo.check output + } + if$ + } + { format.authors output.nonnull } + if$ + add.colon + new.block + format.btitle "title" output.check + author empty$ + { organization empty$ + { + address new.block.checka + address "address" bibinfo.check output + } + 'skip$ + if$ + } + { + organization address new.block.checkb + organization "organization" bibinfo.check output + address "address" bibinfo.check output + } + if$ + format.edition output + format.date output +% new.block + format.doi output + format.url output +% new.block + format.note output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + add.colon + new.block + format.btitle + "title" output.check + new.block + bbl.mthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.date "year" output.check +% new.block + format.doi output + format.url output +% new.block + format.note output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + add.colon + title howpublished new.block.checkb + format.title output + howpublished new.block.checka + howpublished "howpublished" bibinfo.check output + format.date output +% new.block + format.doi output + format.url output +% new.block + format.note output + fin.entry + empty.misc.check +} +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + add.colon + new.block + format.btitle + "title" output.check + new.block + bbl.phdthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.date "year" output.check +% new.block + format.doi output + format.url output +% new.block + format.note output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + editor empty$ + { organization "organization" bibinfo.check output + } + { format.editors output.nonnull } + if$ + add.colon + new.block + format.btitle "title" output.check + format.bvolume output + editor empty$ + { publisher empty$ + { format.number.series output } + { + new.sentence + format.number.series output + format.publisher.address output + } + if$ + } + { publisher empty$ + { + new.sentence + format.number.series output + format.organization.address output } + { + new.sentence + format.number.series output + organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + } + if$ + format.date "year" output.check +% new.block + format.doi output + format.url output +% new.block + format.note output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + add.colon + new.block + format.title + "title" output.check + new.block + format.tr.number output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + format.date "year" output.check +% new.block + format.doi output + format.url output +% new.block + format.note output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + add.colon + new.block + format.title "title" output.check + format.date output +% new.block + format.url output +% new.block + format.note "note" output.check + fin.entry +} + +FUNCTION {default.type} { misc } +READ +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} +INTEGERS { len } +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{ll{ }}{ ff{ }}{ jj{ }}" + format.name$ 't := + nameptr #1 > + { + " " * + namesleft #1 = t "others" = and + { "zzzzz" * } + { t sortify * } + if$ + } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} +FUNCTION {author.organization.sort} +{ author empty$ + { organization empty$ + { key empty$ + { "to sort, need author, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { author sort.format.names } + if$ +} +FUNCTION {editor.organization.sort} +{ editor empty$ + { organization empty$ + { key empty$ + { "to sort, need editor, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { editor sort.format.names } + if$ +} +FUNCTION {presort} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.organization.sort + { type$ "manual" = + 'author.organization.sort + 'author.sort + if$ + } + if$ + } + if$ + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} +ITERATE {presort} +SORT +STRINGS { longest.label } +INTEGERS { number.label longest.label.width } +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #1 'number.label := + #0 'longest.label.width := +} +FUNCTION {longest.label.pass} +{ number.label int.to.str$ 'label := + number.label #1 + 'number.label := + label width$ longest.label.width > + { label 'longest.label := + label width$ 'longest.label.width := + } + 'skip$ + if$ +} +EXECUTE {initialize.longest.label} +ITERATE {longest.label.pass} +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" longest.label * "}" * + write$ newline$ + "\providecommand{\url}[1]{\texttt{#1}}" + write$ newline$ + "\providecommand{\urlprefix}{URL }" + write$ newline$ + "\providecommand{\doi}[1]{https://doi.org/#1}" + write$ newline$ +} +EXECUTE {begin.bib} +EXECUTE {init.state.consts} +ITERATE {call.type$} +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} +EXECUTE {end.bib} +%% End of customized bst file +%% +%% End of file `titto.bst'. diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl index 1fc431ce4b..214b890977 100644 --- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl +++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl @@ -169,6 +169,7 @@ $mirrors = { 'https://ctan.mirror.globo.tech/' => 1, 'https://ctan.mirror.rafal.ca/' => 1, 'https://mirror.csclub.uwaterloo.ca/CTAN/' => 1, + 'https://mirror.its.dal.ca/ctan/' => 1, 'https://muug.ca/mirror/ctan/' => 1, }, 'Costa Rica' => { diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb index ac51aef7f6..31e49e1ccc 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/61619 +depend revision/61625 name 00texlive.image category TLCore -revision 61613 +revision 61624 shortdesc TeX Live files only in the source repository longdesc The files here are not copied by the installer and containers longdesc are not built for them; they exist only in the source @@ -40,7 +40,7 @@ longdesc IgnorePatterns in the check_files routine in tlmgr.pl augment longdesc this list. Those are not included in the source/ tarball. For longdesc information on the 00texlive prefix see longdesc 00texlive.installation(.tlpsrc) -runfiles size=12500 +runfiles size=12501 .mkisofsrc autorun.inf texmf-dist/README @@ -2410,6 +2410,7 @@ runfiles size=12500 tlpkg/tlpsrc/latex-git-log.tlpsrc tlpkg/tlpsrc/latex-graphics-companion.tlpsrc tlpkg/tlpsrc/latex-graphics-dev.tlpsrc + tlpkg/tlpsrc/latex-lab-dev.tlpsrc tlpkg/tlpsrc/latex-make.tlpsrc tlpkg/tlpsrc/latex-mr.tlpsrc tlpkg/tlpsrc/latex-notes-zh-cn.tlpsrc @@ -4514,7 +4515,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd name 00texlive.installer category TLCore -revision 61609 +revision 61621 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 @@ -67842,7 +67843,7 @@ containerchecksum 0568a3251d71fb3106fbb3961427200419ae1df22d39b5e72c608e2d94fc35 name collection-latexextra category Collection -revision 61607 +revision 61624 shortdesc LaTeX additional packages relocated 1 longdesc A very large collection of add-on packages for LaTeX. @@ -68554,6 +68555,7 @@ depend latex-base-dev depend latex-bin-dev depend latex-firstaid-dev depend latex-graphics-dev +depend latex-lab-dev depend latex-tools-dev depend latex-uni8 depend latexcolors @@ -69263,8 +69265,8 @@ depend zref-check depend zref-clever depend zwgetfdate depend zwpagelayout -containersize 6540 -containerchecksum 89ec4cc117a231bf5b204a16fa4a1dc4657c0ca15dcf3b78a6e6ff3de5aab73466e6bf57387e6ccec0d903eb5856e29009ba421b97eeebab691416fd8cdcbaf0 +containersize 6548 +containerchecksum 17c7d07e270933fc25e6973a509ee8ae4cbaef65dbe65f5e13fa22ac9ea1e8ef43a25fa9a1dc08822a2c68704e0bfabcfea8aa650815f40d4ab9dc6c6943d22a name collection-latexrecommended category Collection @@ -99766,21 +99768,21 @@ catalogue-topics notes editorial name easybook category Package -revision 61616 +revision 61623 shortdesc Typeset Chinese theses or books relocated 1 longdesc Easybook is a minimalist style template based on the ctexbook longdesc book document class. -containersize 17052 -containerchecksum 1e13bb7e710a2123f202ccf3330d305b4936ab7b790dadcc145abdab9b1510153aefcc2e0f2852396c7fb61aed70f952b49b68815cea47d4122b60d0288daa04 -doccontainersize 616464 -doccontainerchecksum df704993f63e78f13a8bd2f681a89af47d5e6c3fd0dc1373e761e361d4edf30ad701ed56a8819e657b0a1508f959b605ac819d5fe876010687cfc086237ab233 +containersize 17076 +containerchecksum 4289d7416e40f98282146e2fa3742d937f613591498b217734c59da4b448b35ab4f3feb6ba4ba6a8e3f4f49995e3d1a8abc43404072718b93aa5fc966d8e5a9e +doccontainersize 617072 +doccontainerchecksum 2274b8deab17dba53f0342c6f764f3c66d9be86ee30d903fba6a4c347cab1945820f72e6dab1684ce1f514e9c509313968fea86d4feedcde2ffa4e6a3344f17c docfiles size=168 RELOC/doc/latex/easybook/README.md details="Readme" RELOC/doc/latex/easybook/easybook.pdf details="Package documentation" language="zh" RELOC/doc/latex/easybook/easybook.tex -srccontainersize 17112 -srccontainerchecksum c3181065ad325606d0164b3c7805fb85fc83e8ac648322d72935b495bb6da99d6e86bf141c2d9f0408b63815cf2647cccd406a839fa9bd732be7c4e10268636e +srccontainersize 17132 +srccontainerchecksum 6d4fe8bc24397e678573c260d78c4ad64625784222a2b76f82473cbd756b0b213999614b73511e0169759f0ef00f7d611446d274006822bae0a18b0c00a80857 srcfiles size=21 RELOC/source/latex/easybook/easybook.dtx RELOC/source/latex/easybook/easybook.ins @@ -99793,7 +99795,7 @@ catalogue-contact-repository https://gitee.com/texl3/easybook catalogue-ctan /macros/latex/contrib/easybook catalogue-license lppl1.3c catalogue-topics book-pub class chinese expl3 -catalogue-version 1.46B +catalogue-version 1.46C name easyfig category Package @@ -167446,6 +167448,43 @@ catalogue-license lppl1.3c catalogue-topics graphics collection latex-devel catalogue-version 2022-06-01 pre-release 1 +name latex-lab-dev +category Package +revision 61624 +shortdesc LaTeX laboratory: Development pre-release +relocated 1 +longdesc This package provides a testing release for upcoming changes to +longdesc the latex-lab bundle, which provides a route for additions to +longdesc the LaTeX kernel to be stablised. It accompanies the +longdesc pre-testing kernel code (latex-base-dev), and is intended for +longdesc testing by knowledgeable users. +containersize 2656 +containerchecksum 377e2763b213f16d22e798fdd149d595163008d798a906da36218243d52ab8a7f04ddb54daea97b7818432a697f24eaa98d5d72e3b1778778e43dcaa0c2b3c99 +doccontainersize 929856 +doccontainerchecksum a8c8e12d55ecb3a39a1181f78ab09596d11421ebd3cf61f62984a890bf576bf4fc1df9f8eb1a5d083dcb76786a527a611fa692552d87a54b593ea405cfcce3d9 +docfiles size=296 + RELOC/doc/latex-dev/latex-lab/README.md details="Readme" + RELOC/doc/latex-dev/latex-lab/changes.txt + RELOC/doc/latex-dev/latex-lab/documentmetadata-support-code.pdf + RELOC/doc/latex-dev/latex-lab/documentmetadata-support-code.tex + RELOC/doc/latex-dev/latex-lab/documentmetadata-support-doc.pdf + RELOC/doc/latex-dev/latex-lab/documentmetadata-support-doc.tex + RELOC/doc/latex-dev/latex-lab/latex-lab-testphase.pdf +srccontainersize 5572 +srccontainerchecksum 03760822a14840bd918a3e3e78533fb356732a8b3b7abe93127942e7d0add27c9b246d60d395be3a368b103cbd961a8089f1001f7ef87857b5b0d35e12df3d7e +srcfiles size=6 + RELOC/source/latex-dev/latex-lab/documentmetadata-support.dtx + RELOC/source/latex-dev/latex-lab/documentmetadata-support.ins + RELOC/source/latex-dev/latex-lab/latex-lab-testphase.dtx +runfiles size=5 + RELOC/tex/latex-dev/latex-lab/documentmetadata-support.ltx + RELOC/tex/latex-dev/latex-lab/phase-I-latex-lab-testphase.ltx + RELOC/tex/latex-dev/latex-lab/phase-II-latex-lab-testphase.ltx + RELOC/tex/latex-dev/latex-lab/tagpdf-latex-lab-testphase.ltx +catalogue-ctan /macros/latex-dev/required/latex-lab +catalogue-license lppl1.3c +catalogue-topics format latex-devel + name latex-make category Package revision 60874 @@ -298422,7 +298461,7 @@ docfiles size=376 name texlive-scripts category TLCore -revision 61609 +revision 61621 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. @@ -298430,11 +298469,11 @@ 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 108224 -containerchecksum 18527be4b36d73e39420a7f130055cbc8c024b665fd21bb63b5c5c87bc7b0af59bd422c60a8fd0c3bad76278fb4cc416b5fc490513e678492cb9dc7cb4e65c85 -doccontainersize 402676 -doccontainerchecksum 4c26223a008ba6e181479fdbaaefecad9fc672aacf2efee51bfb2e963c3bbc05e7771943a2549aeb0432c3f8becc7238ad95840bea9dea9037392a1c4d7da46b -docfiles size=500 +containersize 108264 +containerchecksum 6d2eed8d8241647990f8d1e268f6249ed793f8ad5c0067906e284ea2f29fe1586c4143e5d5926b437be1b292fbb2a6832680d7a38633ac621740e9808e20f059 +doccontainersize 402736 +doccontainerchecksum 7735d00660687c172595adea03ec62f61fbfcc721237ce79eb90c15dec4960a595dae63a34e553cb10080ed4604a93b2763580e9333d656a962bca45a4d61890 +docfiles size=501 doc.html texmf-dist/doc/man/man1/fmtutil-sys.1 texmf-dist/doc/man/man1/fmtutil-sys.man1.pdf diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 index c31b423fb2..ea8991d6df 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 @@ -1 +1 @@ -e3fe1db8c53f742b45d75ae0b3b4886d texlive.tlpdb +00a76cc25b0a512e0ec6be2657f18264 texlive.tlpdb diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 index 8154bcfa9b..ff788d0837 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 @@ -1 +1 @@ -e23e209baa642b8442f0f4c2fc8a8ff37ad449eec2564a4bb056b11df592fe0e9c1764efb07d74c84b329ef036ffaa409f5a38c905f79515bd52245dc1987f54 texlive.tlpdb +2c71073e6a3591c3d8e74002cc0a73d83896820adeecb894de837a7eccb469e3dce7de9f69739109dddea0c0e8b926db48fbc95b30f569449c92badd3f8aef9c texlive.tlpdb diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc index 0bb9ef634b..eec506e67f 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----- -iQEcBAEBCgAGBQJh42xMAAoJEEzhh34ZQ4xwxtgIAIDXH+m2YZT09dnAh+FDsq7X -eFn1O+jisDuEkjvfz3pG6viJXrsOgoToxJuVWdVxsYCJmTp/ay9roglISggQYOvb -lHaRqXiP2+vRpHsl3/UIGqiKfEVeuXvkYNEj5ZExxXiWjoaPmcKIbLl3lCmzCB+i -j679y2qh+qw6cq1IcAqAq2QbbDA5MO+Zv0bcaA/LjPeTY81+aVw14VZHrf3pLyMz -FRH/7kbOTppegNEmpBe/u5CB40eyavrfdFy83pMQTbkJYYi7EWQKADH2WYbBmIUB -EKjRgOpU7VvQptIGopL0NZVbd1gzM1238A6xWNaS26T192+qRiCF66LpiKLrvyQ= -=43+P +iQEcBAEBCgAGBQJh5L3LAAoJEEzhh34ZQ4xwqI0H/RjhBVRMksFsfdVzh+kfi8/y +dr4DdNfAcx7+H7E11YvPe2f7P5J60q8fihhictubBwgsUAZP0vUwFEeu9cjHjDuR ++FmeFrVxIJvfxoeioqtN3qVMwBVTiSMs+VQrOkWsVlDvmDO3ytWxjmiq9APGvWzJ +xrdMTQVzKZg8c4uIQbHOf2+ixk8eGeLSzDZP9jg/0c4FWN/AOk/YAHOSh95UijO+ +8FXBWYssqQDCQNJvcIH5GzfkXm2/hZrCtBqprDbKHwrkZe+xb+47ZOGit6H9UFJj ++AjT3itNfla29SBLDpJw5G/97HRWqT5hOGTyFebgQLzviN0fp/9kbThYtManloo= +=QVKV -----END PGP SIGNATURE----- diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz index 83ba07c935..195f9c98e9 100644 Binary files a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz and b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz differ diff --git a/systems/win32/miktex/tm/packages/next/pr.ini b/systems/win32/miktex/tm/packages/next/pr.ini index df51631fd8..679822a0aa 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=1642367907 +date=1642454389 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=dba1075d0d5bebc3d47e271adedb41f9 +lstdigest=fedbad8b62300a9b7d8be77faf02f327 numpkg=5238 relstate=next -version=8051 +version=8052 ;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows. ;;;;-----BEGIN MIKTEX SIGNATURE----- -;;;; signature/miktex: A4mRDVmpAxrDXnrNXOYpNsHDhMMW2TeEDDrjmdUHN89xsKqNy4yFYLqZl/NdF0/FUf2C7QGOpeTw9qfGm737IJzQvMPnWsFyjmM2lRMKyvQUokjTrgTfHU91k2gN7VhViHALZY/8yuMqf6O/H7YCWO5euB+RnodvBC42LZEDL5X850VXMiEroR8wu0stAW0B1Z4aasOJDtjXMxIQVDCwDTiB3HD3Zj8ZuZOE60HQP1GFUClN/Wg+0ZsXjTF5vNJ1O7w8iiFPP0WxBlNTAuAKsR3PVme1ZtoVo0T5gUNVDSCAa7Kd8uozQEaNMYN090qNJY5t7hXyQGbwH1KzM0edtQ== +;;;; signature/miktex: iiIxwjPk79GrORMycuQTSwp9r/8nkpzd7BPugKH+Ig5OvCvguRMCYGHI9GHJPBmtbcboXNMHZh909AAbgx2g9NQyYgtetfR2uIs7JwfanZ/CY3ccdocWvLQfKpmyESVqVXoGE3Xp5QhxgRJF5aUCHNP3j7/46CV7Jmil9i4/HDi3CANKCbvkeEeNxB1lxaCXwORR78tz4faD6DP8lB/SAid4Xvq7nFjbax+bg+iS8q8OSB0XnIO74X4mbnj6TPC4EVQadV1IiCOBKZjUuSEWh0P8BN6LhVDesDQ11ktMLCByNYg/CpVVUQ14DOauB6kS35cuSMWZy9KK9oZnkjPHpQ== ;;;;-----END MIKTEX SIGNATURE----- diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini index bec95a5ace..ccf966b7de 100644 --- a/systems/win32/miktex/tm/packages/pr.ini +++ b/systems/win32/miktex/tm/packages/pr.ini @@ -1,13 +1,13 @@ [repository] -date=1642367506 +date=1642453898 lastupd=aalok aalok__doc aalok__source acro acro__doc acro__source biblatex-publist biblatex-publist__doc biblatex-publist__source cellspace cellspace__doc cellspace__source chhaya chhaya__doc chhaya__source codebox__doc codebox__source csvsimple csvsimple__doc dbshow -lstdigest=956c1ca9b2211ebec5751584a9b10bbe +lstdigest=68a82fe55d1dccefdb4c7fea723ff901 numpkg=5240 relstate=stable -version=8051 +version=8052 ;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows. ;;;;-----BEGIN MIKTEX SIGNATURE----- -;;;; signature/miktex: K4VYYXlQi60OD4X9yfkTVhgHNaags/2tcu+gz6o6BoJ8+hbVaVPrH2MmXyVDLW3jCZD6x/iPQleScUBvvSZJdLX/s9KZz9Q0Euo4U5ITBVcU1zcCe9OJmS3StJTeG/GegjMIhdFDJlNsnDjkkkAMtE4IkM4SjY4bs3iqWyXphAIAwcwA/A1oqYbqxoerGqrzuhC1Kw11x19962y+kbq/sr5GcaNQ2Ie7mKNXBEErASJAEwh2jOh6RtJLs4HPJUftb8JZQ0cG/TujV43zRtHBjzVmdhhWoYe6jt5i+K1a19XAonFL5kZSsxa8u/rxLILxFuGLGV/3FpdyLzu1VE77cg== +;;;; signature/miktex: lDAcKIV2QZiXz2R3fp46eeAWQ13m2pi2WfhoGIDFpnVapkH3KMp0GGwFf1bzSydHOBPtgngkWnXZKvG3rFJRKHg7B6HgK+s9T4sdDUleHxyMdP4HRDRDDpNXEBSYj+Wcb5hKYa1nqHRPzxu2FuUvy9sGt4HQuBIih7EDBbTE/m/jY090QOvr4GS2/UtPwOh4gr6GyQ8q8DrnMBJicHXCkzi9ZThe23G4IKvqO7joNSqmPgCV3D+xI5bHLEkquocCLCVCZ/Zu2YwdV+GRW+AY8M2THxWHfFH6ouU2K1XiXkfTq5kK3mh+rqjnohivuQwjQCmnqZDnORsnxqhVs7BBjg== ;;;;-----END MIKTEX SIGNATURE----- diff --git a/timestamp b/timestamp index 4351f586ad..b97db93380 100644 --- a/timestamp +++ b/timestamp @@ -2,4 +2,4 @@ # The source CTAN of this site's material: dante.ctan.org # The year-month-day-hour-minute of this site's material: -2022-01-17-02-02 +2022-01-18-02-02 -- cgit v1.2.3