From 140e2f7f1509acd423172e2895d0d7839e5b88c6 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Tue, 9 Jan 2024 03:01:30 +0000 Subject: CTAN sync 202401090301 --- FILES.byname | 394 +- FILES.byname.gz | Bin 2585713 -> 2586014 bytes FILES.last07days | 840 +-- biblio/bibtex/contrib/iran-bibtex/LICENSE.txt | 416 ++ biblio/bibtex/contrib/iran-bibtex/README.md | 137 +- .../contrib/iran-bibtex/iran-bibtex-cp1256fa.csf | 44 +- .../contrib/iran-bibtex/iran-bibtex-structure.pdf | Bin 0 -> 91010 bytes .../contrib/iran-bibtex/iran-bibtex-structure.tex | 681 +++ biblio/bibtex/contrib/iran-bibtex/iran-bibtex.sty | 186 +- .../bibtex/contrib/iran-bibtex/iran-structure.pdf | Bin 92925 -> 0 bytes .../bibtex/contrib/iran-bibtex/iran-structure.tex | 681 --- biblio/bibtex/contrib/iran-bibtex/iran-unsrt.bst | 4896 +++++++++++++++++ biblio/bibtex/contrib/iran-bibtex/iran-year.bst | 5078 ++++++++++++++++++ biblio/bibtex/contrib/iran-bibtex/iran.bst | 5476 +++++++++++--------- .../bibtex/contrib/iran-bibtex/iranlatin-unsrt.bst | 4486 ++++++++++++++++ .../bibtex/contrib/iran-bibtex/iranlatin-year.bst | 4665 +++++++++++++++++ biblio/bibtex/contrib/iran-bibtex/iranlatin.bst | 4637 +++++++++++++++++ biblio/ctan-bibdata/ctan.bib | 38 +- info/biblio/litprog.bib | 42 +- info/biblio/litprog.ltx | 12 +- macros/latex/contrib/dtxdescribe/README.txt | 4 +- macros/latex/contrib/dtxdescribe/dtxdescribe.dtx | 105 +- macros/latex/contrib/dtxdescribe/dtxdescribe.pdf | Bin 467890 -> 470587 bytes macros/latex/contrib/easybook/easybook.dtx | 11 +- macros/latex/contrib/easybook/easybook.pdf | Bin 590690 -> 592288 bytes macros/latex/contrib/easybook/easybook.tex | 72 +- macros/latex/contrib/lni/CHANGELOG.md | 32 +- macros/latex/contrib/lni/README.md | 4 +- macros/latex/contrib/lni/lni.dtx | 70 +- macros/latex/contrib/lni/lni.pdf | Bin 377740 -> 377695 bytes macros/latex/contrib/spbmark/spbmark.pdf | Bin 84938 -> 85360 bytes macros/latex/contrib/spbmark/spbmark.sty | 4 +- macros/latex/contrib/spbmark/spbmark.tex | 15 +- macros/latex/contrib/tuda-ci/README.md | 7 +- .../contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf | Bin 552069 -> 552288 bytes .../latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf | Bin 601729 -> 601729 bytes .../contrib/tuda-ci/doc/DEMO-TUDaBeamer2023.pdf | Bin 556834 -> 556834 bytes .../contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf | Bin 570431 -> 570532 bytes .../latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf | Bin 559914 -> 559914 bytes .../latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf | Bin 567048 -> 567142 bytes macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf | Bin 635542 -> 638055 bytes .../latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf | Bin 536279 -> 536447 bytes macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf | Bin 662473 -> 662437 bytes .../latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf | Bin 527234 -> 527922 bytes .../contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf | Bin 563698 -> 563698 bytes .../latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf | Bin 624503 -> 627330 bytes .../tuda-ci/example/DEMO-TUDaAnnouncement.tex | 3 +- .../contrib/tuda-ci/example/DEMO-TUDaBeamer.tex | 3 +- .../tuda-ci/example/DEMO-TUDaBeamer2023.tex | 3 +- .../tuda-ci/example/DEMO-TUDaBibliography.bib | 3 +- .../contrib/tuda-ci/example/DEMO-TUDaExercise.tex | 3 +- .../tuda-ci/example/DEMO-TUDaFromaddress.lco | 3 +- .../contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex | 3 +- .../contrib/tuda-ci/example/DEMO-TUDaLetter.tex | 3 +- .../latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex | 37 +- .../contrib/tuda-ci/example/DEMO-TUDaPoster.tex | 3 +- .../latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex | 6 +- .../contrib/tuda-ci/example/DEMO-TUDaReport.tex | 3 +- .../contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex | 3 +- .../contrib/tuda-ci/example/DEMO-TUDaThesis.tex | 50 +- .../contrib/tuda-ci/tex/beamercolorthemeTUDa.sty | 7 +- .../tuda-ci/tex/beamercolorthemeTUDa2023.sty | 7 +- .../contrib/tuda-ci/tex/beamerfontthemeTUDa.sty | 7 +- .../tuda-ci/tex/beamerfontthemeTUDa2023.sty | 7 +- .../contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty | 7 +- .../tuda-ci/tex/beamerinnerthemeTUDa2008.sty | 7 +- .../tuda-ci/tex/beamerinnerthemeTUDa2023.sty | 7 +- .../contrib/tuda-ci/tex/beamerouterthemeTUDa.sty | 7 +- .../tuda-ci/tex/beamerouterthemeTUDa2023.sty | 7 +- .../tuda-ci/tex/beamerthemeTUDa-mecheng.sty | 7 +- .../latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty | 7 +- .../contrib/tuda-ci/tex/beamerthemeTUDa2008.sty | 7 +- .../contrib/tuda-ci/tex/beamerthemeTUDa2023.sty | 7 +- macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo | 7 +- macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo | 7 +- macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo | 7 +- macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo | 7 +- macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo | 7 +- macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo | 7 +- macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty | 7 +- macros/latex/contrib/tuda-ci/tex/tudabeamer.cls | 7 +- macros/latex/contrib/tuda-ci/tex/tudacolors.def | 7 +- macros/latex/contrib/tuda-ci/tex/tudacolors.sty | 7 +- macros/latex/contrib/tuda-ci/tex/tudaexercise.cls | 7 +- macros/latex/contrib/tuda-ci/tex/tudafonts.sty | 7 +- macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls | 7 +- macros/latex/contrib/tuda-ci/tex/tudaletter.cls | 7 +- .../contrib/tuda-ci/tex/tudalettersize10pt.clo | 4 +- macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg | 7 +- macros/latex/contrib/tuda-ci/tex/tudaposter.cls | 7 +- macros/latex/contrib/tuda-ci/tex/tudapub.cls | 124 +- macros/latex/contrib/tuda-ci/tex/tudarules.sty | 7 +- macros/latex/contrib/tuda-ci/tex/tudasciposter.cls | 7 +- macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo | 4 +- macros/latex/contrib/tuda-ci/tex/tudathesis.cfg | 23 +- macros/luatex/generic/minim-math/README | 6 +- macros/luatex/generic/minim-math/minim-math.doc | 8 +- macros/luatex/generic/minim-math/minim-math.pdf | Bin 112093 -> 114067 bytes macros/luatex/generic/minim-math/minim-math.tex | 2 + macros/luatex/generic/minim-mp/README | 11 +- macros/luatex/generic/minim-mp/minim-mp.doc | 72 +- macros/luatex/generic/minim-mp/minim-mp.lua | 340 +- macros/luatex/generic/minim-mp/minim-mp.mp | 216 +- macros/luatex/generic/minim-mp/minim-mp.pdf | Bin 109855 -> 120017 bytes macros/luatex/generic/minim-mp/minim-mp.sty | 19 +- macros/luatex/generic/minim-mp/minim.mp | 4 +- macros/luatex/generic/minim-pdf/README | 16 +- macros/luatex/generic/minim-pdf/minim-pdf.doc | 99 +- macros/luatex/generic/minim-pdf/minim-pdf.lua | 135 +- macros/luatex/generic/minim-pdf/minim-pdf.pdf | Bin 116670 -> 126824 bytes macros/luatex/generic/minim-pdf/minim-pdf.tex | 53 +- macros/luatex/generic/minim-xmp/README | 8 +- macros/luatex/generic/minim-xmp/minim-xmp.doc | 7 +- macros/luatex/generic/minim-xmp/minim-xmp.lua | 6 + macros/luatex/generic/minim-xmp/minim-xmp.pdf | Bin 72075 -> 73080 bytes macros/luatex/generic/minim/README | 7 +- macros/luatex/generic/minim/minim-alloc.doc | 42 +- macros/luatex/generic/minim/minim-doc.sty | 36 +- macros/luatex/generic/minim/minim-pdfresources.lua | 6 +- macros/luatex/generic/minim/minim-pdfresources.tex | 1 + macros/luatex/generic/minim/minim.doc | 8 +- macros/luatex/generic/minim/minim.pdf | Bin 338726 -> 365466 bytes systems/texlive/tlnet/install-tl | 10 +- systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm | 16 +- systems/texlive/tlnet/tlpkg/TeXLive/TLUtils.pm | 9 +- .../texlive/tlnet/tlpkg/installer/ctan-mirrors.pl | 4 - systems/texlive/tlnet/tlpkg/texlive.tlpdb | 301 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 | 2 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 | 2 +- .../texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc | 16 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz | Bin 2518516 -> 2518792 bytes timestamp | 2 +- 132 files changed, 30120 insertions(+), 4875 deletions(-) create mode 100644 biblio/bibtex/contrib/iran-bibtex/LICENSE.txt create mode 100644 biblio/bibtex/contrib/iran-bibtex/iran-bibtex-structure.pdf create mode 100644 biblio/bibtex/contrib/iran-bibtex/iran-bibtex-structure.tex delete mode 100644 biblio/bibtex/contrib/iran-bibtex/iran-structure.pdf delete mode 100644 biblio/bibtex/contrib/iran-bibtex/iran-structure.tex create mode 100644 biblio/bibtex/contrib/iran-bibtex/iran-unsrt.bst create mode 100644 biblio/bibtex/contrib/iran-bibtex/iran-year.bst create mode 100644 biblio/bibtex/contrib/iran-bibtex/iranlatin-unsrt.bst create mode 100644 biblio/bibtex/contrib/iran-bibtex/iranlatin-year.bst create mode 100644 biblio/bibtex/contrib/iran-bibtex/iranlatin.bst diff --git a/FILES.byname b/FILES.byname index 837981c2e1..e7b003bae1 100644 --- a/FILES.byname +++ b/FILES.byname @@ -915,13 +915,19 @@ 2009/01/23 | 7199 | biblio/bibtex/contrib/iopart-num/iopart-num.tex 2009/01/23 | 849 | biblio/bibtex/contrib/iopart-num/README 2009/01/27 | 72604 | biblio/bibtex/contrib/iopart-num.zip -2023/12/08 | 1916 | biblio/bibtex/contrib/iran-bibtex/iran-bibtex-cp1256fa.csf -2023/12/18 | 2530 | biblio/bibtex/contrib/iran-bibtex/iran-bibtex.sty -2023/12/18 | 95909 | biblio/bibtex/contrib/iran-bibtex/iran.bst -2023/12/18 | 92925 | biblio/bibtex/contrib/iran-bibtex/iran-structure.pdf -2023/12/18 | 45361 | biblio/bibtex/contrib/iran-bibtex/iran-structure.tex -2023/12/18 | 3893 | biblio/bibtex/contrib/iran-bibtex/README.md -2023/12/18 | 110162 | biblio/bibtex/contrib/iran-bibtex.zip +2024/01/08 | 2058 | biblio/bibtex/contrib/iran-bibtex/iran-bibtex-cp1256fa.csf +2024/01/08 | 91010 | biblio/bibtex/contrib/iran-bibtex/iran-bibtex-structure.pdf +2024/01/08 | 45380 | biblio/bibtex/contrib/iran-bibtex/iran-bibtex-structure.tex +2024/01/08 | 6844 | biblio/bibtex/contrib/iran-bibtex/iran-bibtex.sty +2024/01/08 | 103494 | biblio/bibtex/contrib/iran-bibtex/iran.bst +2024/01/08 | 96889 | biblio/bibtex/contrib/iran-bibtex/iranlatin.bst +2024/01/08 | 92897 | biblio/bibtex/contrib/iran-bibtex/iranlatin-unsrt.bst +2024/01/08 | 97414 | biblio/bibtex/contrib/iran-bibtex/iranlatin-year.bst +2024/01/08 | 99406 | biblio/bibtex/contrib/iran-bibtex/iran-unsrt.bst +2024/01/08 | 104014 | biblio/bibtex/contrib/iran-bibtex/iran-year.bst +2023/12/18 | 19102 | biblio/bibtex/contrib/iran-bibtex/LICENSE.txt +2024/01/08 | 8273 | biblio/bibtex/contrib/iran-bibtex/README.md +2024/01/08 | 174457 | biblio/bibtex/contrib/iran-bibtex.zip 1999/04/08 | 37425 | biblio/bibtex/contrib/is-bst/is-abbrv.bst 1999/04/08 | 41225 | biblio/bibtex/contrib/is-bst/is-alpha.bst 1999/04/08 | 37711 | biblio/bibtex/contrib/is-bst/is-plain.bst @@ -2071,12 +2077,12 @@ 2023/10/05 | 1710 | biblio/citation-style-language/README.md 2023/10/05 | 12878 | biblio/citation-style-language/vancouver.csl 2023/10/05 | 4531754 | biblio/citation-style-language.zip -2024/01/07 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx +2024/01/08 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx 2022/10/08 | 127 | biblio/ctan-bibdata/biblatex-ctan/ctan.cbx -2024/01/07 | 2836777 | biblio/ctan-bibdata/ctan.bib -2024/01/07 | 3708800 | biblio/ctan-bibdata/ctan.pdf +2024/01/08 | 2836775 | biblio/ctan-bibdata/ctan.bib +2024/01/08 | 3708800 | biblio/ctan-bibdata/ctan.pdf 2023/01/16 | 1489 | biblio/ctan-bibdata/README -2024/01/07 | 4114949 | biblio/ctan-bibdata.zip +2024/01/08 | 4114953 | biblio/ctan-bibdata.zip 2023/02/23 | 3126 | biblio/pbibtex/pbibtex-base/cpp.awk 2023/02/23 | 1009 | biblio/pbibtex/pbibtex-base/generate.sh 2023/02/23 | 22362 | biblio/pbibtex/pbibtex-base/jabbrv.bst @@ -5437,7 +5443,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 -2024/01/07 | 434640 | FILES.last07days +2024/01/08 | 461310 | 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 @@ -172267,7 +172273,7 @@ 2014/04/19 | 3223 | info/biblio/ijqc.sty 2019/10/15 | 10835 | info/biblio/komoedie.bib 2019/10/15 | 3050 | info/biblio/komoedie.ltx -2024/01/07 | 390609 | info/biblio/litprog.bib +2024/01/07 | 391611 | info/biblio/litprog.bib 2024/01/07 | 3210 | info/biblio/litprog.ltx 2001/01/05 | 628 | info/biblio/microchip.sty 2023/02/28 | 652221 | info/biblio/printing-history.bib @@ -224465,11 +224471,11 @@ 2010/07/03 | 11058 | macros/latex/contrib/drs/drs.sty 2010/07/03 | 658 | macros/latex/contrib/drs/README 2010/07/03 | 104778 | macros/latex/contrib/drs.zip -2023/01/03 | 122830 | macros/latex/contrib/dtxdescribe/dtxdescribe.dtx -2023/01/03 | 1682 | macros/latex/contrib/dtxdescribe/dtxdescribe.ins -2023/01/03 | 467890 | macros/latex/contrib/dtxdescribe/dtxdescribe.pdf -2023/01/03 | 930 | macros/latex/contrib/dtxdescribe/README.txt -2023/01/03 | 484830 | macros/latex/contrib/dtxdescribe.zip +2024/01/08 | 125104 | macros/latex/contrib/dtxdescribe/dtxdescribe.dtx +2024/01/08 | 1682 | macros/latex/contrib/dtxdescribe/dtxdescribe.ins +2024/01/08 | 470587 | macros/latex/contrib/dtxdescribe/dtxdescribe.pdf +2024/01/08 | 943 | macros/latex/contrib/dtxdescribe/README.txt +2024/01/08 | 487282 | macros/latex/contrib/dtxdescribe.zip 2022/10/08 | 94763 | macros/latex/contrib/ducksay/ducksay.dtx 2022/10/08 | 543677 | macros/latex/contrib/ducksay/ducksay.pdf 2022/09/29 | 939 | macros/latex/contrib/ducksay/README.md @@ -224554,12 +224560,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 -2024/01/07 | 75375 | macros/latex/contrib/easybook/easybook.dtx +2024/01/08 | 75339 | macros/latex/contrib/easybook/easybook.dtx 2024/01/04 | 2081 | macros/latex/contrib/easybook/easybook.ins -2024/01/07 | 590690 | macros/latex/contrib/easybook/easybook.pdf -2024/01/07 | 85411 | macros/latex/contrib/easybook/easybook.tex +2024/01/08 | 592288 | macros/latex/contrib/easybook/easybook.pdf +2024/01/08 | 85262 | macros/latex/contrib/easybook/easybook.tex 2024/01/03 | 801 | macros/latex/contrib/easybook/README.md -2024/01/07 | 632605 | macros/latex/contrib/easybook.zip +2024/01/08 | 634234 | 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 @@ -233872,16 +233878,16 @@ 2012/03/01 | 5290 | macros/latex/contrib/lmake/lmake.sty 2012/03/01 | 568 | macros/latex/contrib/lmake/README 2012/03/02 | 278260 | macros/latex/contrib/lmake.zip -2023/11/27 | 6738 | macros/latex/contrib/lni/CHANGELOG.md -2023/11/27 | 2370 | macros/latex/contrib/lni/CONTRIBUTING.md -2023/11/27 | 1928 | macros/latex/contrib/lni/lni-author-template.tex -2023/11/27 | 94218 | macros/latex/contrib/lni/lni.dtx -2023/11/27 | 4127 | macros/latex/contrib/lni/lni.ins -2023/11/27 | 2150 | macros/latex/contrib/lni/lni-paper-example-de.bib -2023/11/27 | 6398 | macros/latex/contrib/lni/lni-paper-example-de.tex -2023/11/27 | 377740 | macros/latex/contrib/lni/lni.pdf -2023/11/27 | 1995 | macros/latex/contrib/lni/README.md -2023/11/27 | 786192 | macros/latex/contrib/lni.zip +2024/01/08 | 7034 | macros/latex/contrib/lni/CHANGELOG.md +2024/01/08 | 2370 | macros/latex/contrib/lni/CONTRIBUTING.md +2024/01/08 | 1928 | macros/latex/contrib/lni/lni-author-template.tex +2024/01/08 | 94878 | macros/latex/contrib/lni/lni.dtx +2024/01/08 | 4127 | macros/latex/contrib/lni/lni.ins +2024/01/08 | 2150 | macros/latex/contrib/lni/lni-paper-example-de.bib +2024/01/08 | 6398 | macros/latex/contrib/lni/lni-paper-example-de.tex +2024/01/08 | 377695 | macros/latex/contrib/lni/lni.pdf +2024/01/08 | 1997 | macros/latex/contrib/lni/README.md +2024/01/08 | 786367 | macros/latex/contrib/lni.zip 2010/11/12 | 421 | macros/latex/contrib/locality/changes.txt 2010/11/12 | 24614 | macros/latex/contrib/locality/locality.dtx 2010/06/16 | 1780 | macros/latex/contrib/locality/locality.ins @@ -242707,11 +242713,11 @@ 2016/10/05 | 1964 | macros/latex/contrib/spalign/spalign.ins 2016/10/06 | 136549 | macros/latex/contrib/spalign/spalign.pdf 2016/10/06 | 132943 | macros/latex/contrib/spalign.zip -2022/10/15 | 581 | macros/latex/contrib/spbmark/README.md -2022/10/15 | 84938 | macros/latex/contrib/spbmark/spbmark.pdf -2022/10/15 | 14933 | macros/latex/contrib/spbmark/spbmark.sty -2022/10/15 | 15137 | macros/latex/contrib/spbmark/spbmark.tex -2022/10/15 | 91118 | macros/latex/contrib/spbmark.zip +2024/01/03 | 581 | macros/latex/contrib/spbmark/README.md +2024/01/08 | 85360 | macros/latex/contrib/spbmark/spbmark.pdf +2024/01/08 | 14933 | macros/latex/contrib/spbmark/spbmark.sty +2024/01/08 | 15153 | macros/latex/contrib/spbmark/spbmark.tex +2024/01/08 | 91546 | macros/latex/contrib/spbmark.zip 2010/10/31 | 241052 | macros/latex/contrib/sphack/sphack-doc.pdf 2010/10/31 | 4122 | macros/latex/contrib/sphack/sphack-doc.tex 2010/12/23 | 4230 | macros/latex/contrib/sphack/sphack.sty @@ -246011,69 +246017,69 @@ 2010/12/07 | 1604 | macros/latex/contrib/tucv/tucv.ins 2010/12/07 | 180557 | macros/latex/contrib/tucv/tucv.pdf 2010/12/06 | 260987 | macros/latex/contrib/tucv.zip -2023/12/11 | 552069 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf -2023/12/11 | 556834 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer2023.pdf -2023/12/11 | 601729 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf -2023/12/11 | 570431 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf -2023/12/11 | 559914 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf -2023/12/11 | 567048 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf -2023/12/11 | 635542 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf -2023/12/11 | 536279 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf -2023/12/11 | 662473 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf -2023/12/11 | 527234 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf -2023/12/11 | 563698 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf -2023/12/11 | 624503 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf -2023/12/11 | 3175 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex -2023/12/11 | 5559 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer2023.tex -2023/12/11 | 8082 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex -2023/12/11 | 2644 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib -2023/12/11 | 16613 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex -2023/12/11 | 3871 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco -2023/12/11 | 6881 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex -2023/12/11 | 5391 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex -2023/12/11 | 28038 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex -2023/12/11 | 5859 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex -2023/12/11 | 29286 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex -2023/12/11 | 2350 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex -2023/12/11 | 8887 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex -2023/12/11 | 28849 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex -2023/12/11 | 19115 | macros/latex/contrib/tuda-ci/README.md -2023/12/11 | 3408 | macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa2023.sty -2023/12/11 | 3787 | macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty -2023/12/11 | 2633 | macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa2023.sty -2023/12/11 | 2152 | macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty -2023/12/11 | 4192 | macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2008.sty -2023/12/11 | 12469 | macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2023.sty -2023/12/11 | 6588 | macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty -2023/12/11 | 7068 | macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa2023.sty -2023/12/11 | 9348 | macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty -2023/12/11 | 2144 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2008.sty -2023/12/11 | 2227 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2023.sty -2023/12/11 | 10056 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty -2023/12/11 | 1455 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty -2023/12/11 | 1685 | macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo -2023/12/11 | 1684 | macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo -2023/12/11 | 1681 | macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo -2023/12/11 | 1683 | macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo -2023/12/11 | 1685 | macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo -2023/12/11 | 1687 | macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo -2023/12/11 | 7291 | macros/latex/contrib/tuda-ci/tex/tudabeamer.cls -2023/12/11 | 4442 | macros/latex/contrib/tuda-ci/tex/tudacolors.def -2023/12/11 | 6064 | macros/latex/contrib/tuda-ci/tex/tudacolors.sty -2023/12/11 | 33646 | macros/latex/contrib/tuda-ci/tex/tudaexercise.cls -2023/12/11 | 3605 | macros/latex/contrib/tuda-ci/tex/tudafonts.sty -2023/12/11 | 14100 | macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls -2023/12/11 | 16859 | macros/latex/contrib/tuda-ci/tex/tudaletter.cls -2023/12/11 | 5381 | macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo -2023/12/11 | 9752 | macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg -2023/12/11 | 4329 | macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty -2023/12/11 | 19727 | macros/latex/contrib/tuda-ci/tex/tudaposter.cls -2023/12/11 | 43736 | macros/latex/contrib/tuda-ci/tex/tudapub.cls -2023/12/11 | 6415 | macros/latex/contrib/tuda-ci/tex/tudarules.sty -2023/12/11 | 19367 | macros/latex/contrib/tuda-ci/tex/tudasciposter.cls -2023/12/11 | 5433 | macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo -2023/12/11 | 32164 | macros/latex/contrib/tuda-ci/tex/tudathesis.cfg -2023/12/12 | 7014941 | macros/latex/contrib/tuda-ci.zip +2024/01/08 | 552288 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf +2024/01/08 | 556834 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer2023.pdf +2024/01/08 | 601729 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf +2024/01/08 | 570532 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf +2024/01/08 | 559914 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf +2024/01/08 | 567142 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf +2024/01/08 | 638055 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf +2024/01/08 | 536447 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf +2024/01/08 | 662437 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf +2024/01/08 | 527922 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf +2024/01/08 | 563698 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf +2024/01/08 | 627330 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf +2024/01/08 | 3125 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex +2024/01/08 | 5509 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer2023.tex +2024/01/08 | 8032 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex +2024/01/08 | 2594 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib +2024/01/08 | 16563 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex +2024/01/08 | 3821 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco +2024/01/08 | 6831 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex +2024/01/08 | 5341 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex +2024/01/08 | 28690 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex +2024/01/08 | 5809 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex +2024/01/08 | 29247 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex +2024/01/08 | 2300 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex +2024/01/08 | 8837 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex +2024/01/08 | 29525 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex +2024/01/08 | 19232 | macros/latex/contrib/tuda-ci/README.md +2024/01/08 | 3358 | macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa2023.sty +2024/01/08 | 3737 | macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty +2024/01/08 | 2583 | macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa2023.sty +2024/01/08 | 2102 | macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty +2024/01/08 | 4142 | macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2008.sty +2024/01/08 | 12419 | macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2023.sty +2024/01/08 | 6538 | macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty +2024/01/08 | 7018 | macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa2023.sty +2024/01/08 | 9298 | macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty +2024/01/08 | 2094 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2008.sty +2024/01/08 | 2177 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2023.sty +2024/01/08 | 10006 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty +2024/01/08 | 1405 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty +2024/01/08 | 1635 | macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo +2024/01/08 | 1634 | macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo +2024/01/08 | 1631 | macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo +2024/01/08 | 1633 | macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo +2024/01/08 | 1635 | macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo +2024/01/08 | 1637 | macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo +2024/01/08 | 7241 | macros/latex/contrib/tuda-ci/tex/tudabeamer.cls +2024/01/08 | 4392 | macros/latex/contrib/tuda-ci/tex/tudacolors.def +2024/01/08 | 6014 | macros/latex/contrib/tuda-ci/tex/tudacolors.sty +2024/01/08 | 33596 | macros/latex/contrib/tuda-ci/tex/tudaexercise.cls +2024/01/08 | 3555 | macros/latex/contrib/tuda-ci/tex/tudafonts.sty +2024/01/08 | 14050 | macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls +2024/01/08 | 16809 | macros/latex/contrib/tuda-ci/tex/tudaletter.cls +2024/01/08 | 5332 | macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo +2024/01/08 | 9702 | macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg +2024/01/08 | 4279 | macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty +2024/01/08 | 19677 | macros/latex/contrib/tuda-ci/tex/tudaposter.cls +2024/01/08 | 46162 | macros/latex/contrib/tuda-ci/tex/tudapub.cls +2024/01/08 | 6365 | macros/latex/contrib/tuda-ci/tex/tudarules.sty +2024/01/08 | 19317 | macros/latex/contrib/tuda-ci/tex/tudasciposter.cls +2024/01/08 | 5384 | macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo +2024/01/08 | 32525 | macros/latex/contrib/tuda-ci/tex/tudathesis.cfg +2024/01/08 | 7017908 | macros/latex/contrib/tuda-ci.zip 2022/08/09 | 1107 | macros/latex/contrib/tudscr/doc/LICENSE.md 2022/08/09 | 1126953 | macros/latex/contrib/tudscr/doc/tudscr.pdf 2022/08/09 | 1111795 | macros/latex/contrib/tudscr/doc/tudscr_print.pdf @@ -250648,59 +250654,59 @@ 2023/07/23 | 100439 | macros/luatex/generic/lutabulartools.zip 2023/03/01 | 13827 | macros/luatex/generic/minim/EUPL-1.2-EN.txt 2023/03/01 | 13827 | macros/luatex/generic/minim-math/EUPL-1.2-EN.txt -2023/10/20 | 12720 | macros/luatex/generic/minim-math/minim-math.doc +2024/01/04 | 12916 | macros/luatex/generic/minim-math/minim-math.doc 2023/10/20 | 14582 | macros/luatex/generic/minim-math/minim-math.lua -2023/10/20 | 112093 | macros/luatex/generic/minim-math/minim-math.pdf +2024/01/04 | 114067 | macros/luatex/generic/minim-math/minim-math.pdf 2023/10/20 | 340967 | macros/luatex/generic/minim-math/minim-math-table.lua -2023/10/20 | 18331 | macros/luatex/generic/minim-math/minim-math.tex -2023/10/20 | 1041 | macros/luatex/generic/minim-math/README -2023/10/20 | 159709 | macros/luatex/generic/minim-math.zip -2023/06/12 | 11330 | macros/luatex/generic/minim/minim-alloc.doc -2023/06/02 | 10500 | macros/luatex/generic/minim/minim-alloc.lua +2023/10/23 | 18398 | macros/luatex/generic/minim-math/minim-math.tex +2024/01/04 | 1097 | macros/luatex/generic/minim-math/README +2024/01/08 | 160707 | macros/luatex/generic/minim-math.zip +2023/12/25 | 13781 | macros/luatex/generic/minim/minim-alloc.doc +2024/01/04 | 10500 | macros/luatex/generic/minim/minim-alloc.lua 2023/10/20 | 7016 | macros/luatex/generic/minim/minim-alloc.tex 2023/03/01 | 8321 | macros/luatex/generic/minim/minim-callbacks.lua -2023/10/20 | 2379 | macros/luatex/generic/minim/minim.doc -2023/09/14 | 6857 | macros/luatex/generic/minim/minim-doc.sty +2024/01/04 | 2425 | macros/luatex/generic/minim/minim.doc +2023/12/03 | 7699 | macros/luatex/generic/minim/minim-doc.sty 2023/10/20 | 14765 | macros/luatex/generic/minim/minim-etex.tex 2023/03/01 | 327 | macros/luatex/generic/minim/minim-hooks.lua 2023/10/20 | 2048 | macros/luatex/generic/minim/minim-hooks.tex 2023/05/24 | 379 | macros/luatex/generic/minim/minim.ini -2023/10/20 | 1204 | macros/luatex/generic/minim/minim-lmodern.tex -2023/10/20 | 338726 | macros/luatex/generic/minim/minim.pdf -2023/03/01 | 5106 | macros/luatex/generic/minim/minim-pdfresources.lua -2023/10/20 | 2192 | macros/luatex/generic/minim/minim-pdfresources.tex +2023/12/21 | 1204 | macros/luatex/generic/minim/minim-lmodern.tex +2024/01/07 | 365466 | macros/luatex/generic/minim/minim.pdf +2023/11/15 | 5244 | macros/luatex/generic/minim/minim-pdfresources.lua +2023/11/14 | 2250 | macros/luatex/generic/minim/minim-pdfresources.tex 2023/10/20 | 29830 | macros/luatex/generic/minim/minim-plain.tex 2023/10/20 | 90 | macros/luatex/generic/minim/minim.tex 2023/03/01 | 13827 | macros/luatex/generic/minim-mp/EUPL-1.2-EN.txt 2023/06/02 | 699 | macros/luatex/generic/minim-mp/minim-lamp.ini 2023/04/26 | 272 | macros/luatex/generic/minim-mp/minim-lamp.mp -2023/07/17 | 3090 | macros/luatex/generic/minim-mp/minim.mp -2023/10/20 | 20388 | macros/luatex/generic/minim-mp/minim-mp.doc +2024/01/05 | 3086 | macros/luatex/generic/minim-mp/minim.mp +2024/01/04 | 23075 | macros/luatex/generic/minim-mp/minim-mp.doc 2023/05/25 | 438 | macros/luatex/generic/minim-mp/minim-mp.ini -2023/09/14 | 46084 | macros/luatex/generic/minim-mp/minim-mp.lua -2023/06/02 | 7689 | macros/luatex/generic/minim-mp/minim-mp.mp -2023/10/20 | 109855 | macros/luatex/generic/minim-mp/minim-mp.pdf -2023/06/12 | 1817 | macros/luatex/generic/minim-mp/minim-mp.sty -2023/10/20 | 2111 | macros/luatex/generic/minim-mp/minim-mp.tex -2023/10/20 | 2116 | macros/luatex/generic/minim-mp/README -2023/10/20 | 132876 | macros/luatex/generic/minim-mp.zip +2024/01/07 | 52775 | macros/luatex/generic/minim-mp/minim-mp.lua +2023/12/25 | 12950 | macros/luatex/generic/minim-mp/minim-mp.mp +2024/01/07 | 120017 | macros/luatex/generic/minim-mp/minim-mp.pdf +2023/12/26 | 1790 | macros/luatex/generic/minim-mp/minim-mp.sty +2023/12/05 | 2111 | macros/luatex/generic/minim-mp/minim-mp.tex +2024/01/04 | 2305 | macros/luatex/generic/minim-mp/README +2024/01/08 | 146310 | macros/luatex/generic/minim-mp.zip 2023/03/01 | 13827 | macros/luatex/generic/minim-pdf/EUPL-1.2-EN.txt 2023/03/01 | 5052 | macros/luatex/generic/minim-pdf/minim-languagecodes.lua -2023/10/20 | 22841 | macros/luatex/generic/minim-pdf/minim-pdf.doc -2023/10/20 | 40814 | macros/luatex/generic/minim-pdf/minim-pdf.lua -2023/10/20 | 116670 | macros/luatex/generic/minim-pdf/minim-pdf.pdf -2023/10/20 | 17596 | macros/luatex/generic/minim-pdf/minim-pdf.tex -2023/10/20 | 1855 | macros/luatex/generic/minim-pdf/README -2023/10/20 | 136897 | macros/luatex/generic/minim-pdf.zip -2023/10/20 | 2105 | macros/luatex/generic/minim/README +2024/01/04 | 25577 | macros/luatex/generic/minim-pdf/minim-pdf.doc +2023/12/03 | 43987 | macros/luatex/generic/minim-pdf/minim-pdf.lua +2024/01/07 | 126824 | macros/luatex/generic/minim-pdf/minim-pdf.pdf +2023/12/12 | 18315 | macros/luatex/generic/minim-pdf/minim-pdf.tex +2024/01/04 | 2185 | macros/luatex/generic/minim-pdf/README +2024/01/08 | 147695 | macros/luatex/generic/minim-pdf.zip +2024/01/04 | 2214 | macros/luatex/generic/minim/README 2023/03/01 | 13827 | macros/luatex/generic/minim-xmp/EUPL-1.2-EN.txt -2023/03/01 | 10477 | macros/luatex/generic/minim-xmp/minim-xmp.doc -2023/03/01 | 22600 | macros/luatex/generic/minim-xmp/minim-xmp.lua -2023/03/06 | 72075 | macros/luatex/generic/minim-xmp/minim-xmp.pdf -2023/03/01 | 830 | macros/luatex/generic/minim-xmp/minim-xmp.tex -2023/03/01 | 1005 | macros/luatex/generic/minim-xmp/README -2023/03/06 | 75394 | macros/luatex/generic/minim-xmp.zip -2023/10/20 | 354529 | macros/luatex/generic/minim.zip +2024/01/04 | 10493 | macros/luatex/generic/minim-xmp/minim-xmp.doc +2023/11/24 | 22877 | macros/luatex/generic/minim-xmp/minim-xmp.lua +2024/01/04 | 73080 | macros/luatex/generic/minim-xmp/minim-xmp.pdf +2023/10/20 | 830 | macros/luatex/generic/minim-xmp/minim-xmp.tex +2024/01/04 | 1077 | macros/luatex/generic/minim-xmp/README +2024/01/08 | 75645 | macros/luatex/generic/minim-xmp.zip +2024/01/08 | 380985 | macros/luatex/generic/minim.zip 2023/09/10 | 32338 | macros/luatex/generic/nodetree/nodetree-doc.tex 2023/09/10 | 12258 | macros/luatex/generic/nodetree/nodetree.dtx 2023/09/10 | 2250 | macros/luatex/generic/nodetree/nodetree.ins @@ -296195,7 +296201,7 @@ 2021/02/07 | 136588 | systems/texlive/tlnet/archive/babel-danish.doc.r57642.tar.xz 2021/02/07 | 2488 | systems/texlive/tlnet/archive/babel-danish.r57642.tar.xz 2021/02/07 | 5792 | systems/texlive/tlnet/archive/babel-danish.source.r57642.tar.xz -2023/12/11 | 1043868 | systems/texlive/tlnet/archive/babel.doc.r69085.tar.xz +2024/01/08 | 1044336 | systems/texlive/tlnet/archive/babel.doc.r69343.tar.xz 2021/08/30 | 157392 | systems/texlive/tlnet/archive/babel-dutch.doc.r60362.tar.xz 2021/08/30 | 2920 | systems/texlive/tlnet/archive/babel-dutch.r60362.tar.xz 2021/08/30 | 7968 | systems/texlive/tlnet/archive/babel-dutch.source.r60362.tar.xz @@ -296284,7 +296290,7 @@ 2021/07/10 | 146580 | systems/texlive/tlnet/archive/babel-portuges.doc.r59883.tar.xz 2021/07/10 | 2828 | systems/texlive/tlnet/archive/babel-portuges.r59883.tar.xz 2021/07/10 | 6692 | systems/texlive/tlnet/archive/babel-portuges.source.r59883.tar.xz -2023/12/11 | 228304 | systems/texlive/tlnet/archive/babel.r69085.tar.xz +2024/01/08 | 229440 | systems/texlive/tlnet/archive/babel.r69343.tar.xz 2021/04/07 | 113056 | systems/texlive/tlnet/archive/babel-romanian.doc.r58776.tar.xz 2021/04/07 | 2124 | systems/texlive/tlnet/archive/babel-romanian.r58776.tar.xz 2021/04/07 | 4308 | systems/texlive/tlnet/archive/babel-romanian.source.r58776.tar.xz @@ -296315,7 +296321,7 @@ 2021/11/07 | 209804 | systems/texlive/tlnet/archive/babel-sorbian.doc.r60975.tar.xz 2021/11/07 | 3156 | systems/texlive/tlnet/archive/babel-sorbian.r60975.tar.xz 2021/11/07 | 6328 | systems/texlive/tlnet/archive/babel-sorbian.source.r60975.tar.xz -2023/12/11 | 883644 | systems/texlive/tlnet/archive/babel.source.r69085.tar.xz +2024/01/08 | 885928 | systems/texlive/tlnet/archive/babel.source.r69343.tar.xz 2021/05/28 | 183140 | systems/texlive/tlnet/archive/babel-spanish.doc.r59367.tar.xz 2021/05/28 | 8876 | systems/texlive/tlnet/archive/babel-spanish.r59367.tar.xz 2021/05/28 | 29800 | systems/texlive/tlnet/archive/babel-spanish.source.r59367.tar.xz @@ -297742,8 +297748,8 @@ 2023/01/28 | 4844 | systems/texlive/tlnet/archive/codeanatomy.source.r65648.tar.xz 2022/01/29 | 385704 | systems/texlive/tlnet/archive/codebox.doc.r61771.tar.xz 2022/01/29 | 3640 | systems/texlive/tlnet/archive/codebox.r61771.tar.xz -2023/11/23 | 239212 | systems/texlive/tlnet/archive/codedescribe.doc.r68937.tar.xz -2023/11/23 | 10984 | systems/texlive/tlnet/archive/codedescribe.r68937.tar.xz +2024/01/08 | 239500 | systems/texlive/tlnet/archive/codedescribe.doc.r69343.tar.xz +2024/01/08 | 11044 | systems/texlive/tlnet/archive/codedescribe.r69343.tar.xz 2019/02/28 | 377460 | systems/texlive/tlnet/archive/codedoc.doc.r17630.tar.xz 2019/02/28 | 10108 | systems/texlive/tlnet/archive/codedoc.r17630.tar.xz 2023/02/12 | 97984 | systems/texlive/tlnet/archive/codehigh.doc.r65787.tar.xz @@ -297804,7 +297810,7 @@ 2024/01/02 | 1704 | systems/texlive/tlnet/archive/collection-mathscience.r69267.tar.xz 2023/05/12 | 564 | systems/texlive/tlnet/archive/collection-metapost.r67071.tar.xz 2023/02/18 | 496 | systems/texlive/tlnet/archive/collection-music.r65862.tar.xz -2024/01/04 | 1660 | systems/texlive/tlnet/archive/collection-pictures.r69289.tar.xz +2024/01/08 | 1668 | systems/texlive/tlnet/archive/collection-pictures.r69329.tar.xz 2023/10/28 | 1004 | systems/texlive/tlnet/archive/collection-plaingeneric.r68675.tar.xz 2022/12/27 | 816 | systems/texlive/tlnet/archive/collection-pstricks.r65367.tar.xz 2023/12/05 | 1728 | systems/texlive/tlnet/archive/collection-publishers.r69033.tar.xz @@ -298758,8 +298764,8 @@ 2022/11/30 | 336648 | systems/texlive/tlnet/archive/docshots.doc.r65141.tar.xz 2022/11/30 | 2764 | systems/texlive/tlnet/archive/docshots.r65141.tar.xz 2022/11/30 | 7108 | systems/texlive/tlnet/archive/docshots.source.r65141.tar.xz -2021/12/31 | 260928 | systems/texlive/tlnet/archive/docsurvey.doc.r61447.tar.xz -2021/12/31 | 548 | systems/texlive/tlnet/archive/docsurvey.r61447.tar.xz +2024/01/08 | 269352 | systems/texlive/tlnet/archive/docsurvey.doc.r69343.tar.xz +2024/01/08 | 548 | systems/texlive/tlnet/archive/docsurvey.r69343.tar.xz 2019/02/28 | 603152 | systems/texlive/tlnet/archive/doctools.doc.r34474.tar.xz 2019/02/28 | 5852 | systems/texlive/tlnet/archive/doctools.r34474.tar.xz 2019/02/28 | 11196 | systems/texlive/tlnet/archive/doctools.source.r34474.tar.xz @@ -299156,9 +299162,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 -2024/01/07 | 613116 | systems/texlive/tlnet/archive/easybook.doc.r69317.tar.xz -2024/01/07 | 16488 | systems/texlive/tlnet/archive/easybook.r69317.tar.xz -2024/01/07 | 16372 | systems/texlive/tlnet/archive/easybook.source.r69317.tar.xz +2024/01/08 | 613288 | systems/texlive/tlnet/archive/easybook.doc.r69343.tar.xz +2024/01/08 | 16472 | systems/texlive/tlnet/archive/easybook.r69343.tar.xz +2024/01/08 | 16372 | systems/texlive/tlnet/archive/easybook.source.r69343.tar.xz 2019/02/28 | 4540 | systems/texlive/tlnet/archive/easy.doc.r19440.tar.xz 2023/10/12 | 344 | systems/texlive/tlnet/archive/easydtx.aarch64-linux.r68514.tar.xz 2023/10/12 | 344 | systems/texlive/tlnet/archive/easydtx.amd64-freebsd.r68514.tar.xz @@ -299612,9 +299618,9 @@ 2021/11/09 | 358088 | systems/texlive/tlnet/archive/etl.doc.r60998.tar.xz 2021/11/09 | 4424 | systems/texlive/tlnet/archive/etl.r60998.tar.xz 2021/11/09 | 15532 | systems/texlive/tlnet/archive/etl.source.r60998.tar.xz -2023/10/30 | 943100 | systems/texlive/tlnet/archive/etoc.doc.r68691.tar.xz -2023/10/30 | 13500 | systems/texlive/tlnet/archive/etoc.r68691.tar.xz -2023/10/30 | 123044 | systems/texlive/tlnet/archive/etoc.source.r68691.tar.xz +2024/01/08 | 943100 | systems/texlive/tlnet/archive/etoc.doc.r69343.tar.xz +2024/01/08 | 13544 | systems/texlive/tlnet/archive/etoc.r69343.tar.xz +2024/01/08 | 123048 | systems/texlive/tlnet/archive/etoc.source.r69343.tar.xz 2019/02/28 | 234632 | systems/texlive/tlnet/archive/etoolbox-de.doc.r21906.tar.xz 2019/02/28 | 404 | systems/texlive/tlnet/archive/etoolbox-de.r21906.tar.xz 2020/10/06 | 237928 | systems/texlive/tlnet/archive/etoolbox.doc.r56554.tar.xz @@ -299753,9 +299759,9 @@ 2019/02/28 | 6200 | systems/texlive/tlnet/archive/exp-testopt.source.r15878.tar.xz 2023/06/08 | 694560 | systems/texlive/tlnet/archive/exsheets.doc.r67300.tar.xz 2023/06/08 | 24084 | systems/texlive/tlnet/archive/exsheets.r67300.tar.xz -2019/02/28 | 600428 | systems/texlive/tlnet/archive/exsol.doc.r48977.tar.xz -2019/02/28 | 3472 | systems/texlive/tlnet/archive/exsol.r48977.tar.xz -2019/02/28 | 12552 | systems/texlive/tlnet/archive/exsol.source.r48977.tar.xz +2024/01/08 | 498524 | systems/texlive/tlnet/archive/exsol.doc.r69343.tar.xz +2024/01/08 | 3632 | systems/texlive/tlnet/archive/exsol.r69343.tar.xz +2024/01/08 | 13712 | systems/texlive/tlnet/archive/exsol.source.r69343.tar.xz 2020/03/20 | 66404 | systems/texlive/tlnet/archive/extarrows.doc.r54400.tar.xz 2020/03/20 | 896 | systems/texlive/tlnet/archive/extarrows.r54400.tar.xz 2019/02/28 | 108708 | systems/texlive/tlnet/archive/exteps.doc.r19859.tar.xz @@ -301452,9 +301458,9 @@ 2019/02/28 | 520 | systems/texlive/tlnet/archive/isotope.doc.r23711.tar.xz 2019/02/28 | 1168 | systems/texlive/tlnet/archive/isotope.r23711.tar.xz 2019/02/28 | 3076 | systems/texlive/tlnet/archive/isotope.source.r23711.tar.xz -2023/09/19 | 80692 | systems/texlive/tlnet/archive/isphysicalmath.doc.r68312.tar.xz -2023/09/19 | 1472 | systems/texlive/tlnet/archive/isphysicalmath.r68312.tar.xz -2023/09/19 | 5120 | systems/texlive/tlnet/archive/isphysicalmath.source.r68312.tar.xz +2024/01/08 | 90148 | systems/texlive/tlnet/archive/isphysicalmath.doc.r69343.tar.xz +2024/01/08 | 1756 | systems/texlive/tlnet/archive/isphysicalmath.r69343.tar.xz +2024/01/08 | 6240 | systems/texlive/tlnet/archive/isphysicalmath.source.r69343.tar.xz 2019/02/28 | 377392 | systems/texlive/tlnet/archive/issuulinks.doc.r25742.tar.xz 2019/02/28 | 2104 | systems/texlive/tlnet/archive/issuulinks.r25742.tar.xz 2019/02/28 | 4112 | systems/texlive/tlnet/archive/issuulinks.source.r25742.tar.xz @@ -304322,9 +304328,9 @@ 2021/02/24 | 2464 | systems/texlive/tlnet/archive/overlays.r57866.tar.xz 2022/09/26 | 39916 | systems/texlive/tlnet/archive/overlock.doc.r64495.tar.xz 2022/09/26 | 590276 | systems/texlive/tlnet/archive/overlock.r64495.tar.xz -2024/01/06 | 398112 | systems/texlive/tlnet/archive/overpic.doc.r69311.tar.xz -2024/01/06 | 1740 | systems/texlive/tlnet/archive/overpic.r69311.tar.xz -2024/01/06 | 4908 | systems/texlive/tlnet/archive/overpic.source.r69311.tar.xz +2024/01/08 | 399404 | systems/texlive/tlnet/archive/overpic.doc.r69343.tar.xz +2024/01/08 | 1816 | systems/texlive/tlnet/archive/overpic.r69343.tar.xz +2024/01/08 | 4992 | systems/texlive/tlnet/archive/overpic.source.r69343.tar.xz 2019/02/28 | 26000 | systems/texlive/tlnet/archive/pacioli.doc.r24947.tar.xz 2019/02/28 | 14936 | systems/texlive/tlnet/archive/pacioli.r24947.tar.xz 2019/02/28 | 20624 | systems/texlive/tlnet/archive/pacioli.source.r24947.tar.xz @@ -305204,8 +305210,8 @@ 2019/02/28 | 378272 | systems/texlive/tlnet/archive/productbox.doc.r20886.tar.xz 2019/02/28 | 4944 | systems/texlive/tlnet/archive/productbox.r20886.tar.xz 2019/02/28 | 15512 | systems/texlive/tlnet/archive/productbox.source.r20886.tar.xz -2023/11/15 | 14981936 | systems/texlive/tlnet/archive/profcollege.doc.r68841.tar.xz -2023/11/15 | 1333464 | systems/texlive/tlnet/archive/profcollege.r68841.tar.xz +2024/01/08 | 14584416 | systems/texlive/tlnet/archive/profcollege.doc.r69343.tar.xz +2024/01/08 | 1336084 | systems/texlive/tlnet/archive/profcollege.r69343.tar.xz 2022/04/27 | 134096 | systems/texlive/tlnet/archive/proflabo.doc.r63147.tar.xz 2022/04/27 | 2748 | systems/texlive/tlnet/archive/proflabo.r63147.tar.xz 2024/01/07 | 1761600 | systems/texlive/tlnet/archive/proflycee.doc.r69318.tar.xz @@ -305729,8 +305735,8 @@ 2019/02/28 | 348 | systems/texlive/tlnet/archive/pygmentex.x86_64-linuxmusl.r46840.tar.xz 2019/02/28 | 340 | systems/texlive/tlnet/archive/pygmentex.x86_64-linux.r34996.tar.xz 2019/02/28 | 340 | systems/texlive/tlnet/archive/pygmentex.x86_64-solaris.r34996.tar.xz -2023/02/17 | 101536 | systems/texlive/tlnet/archive/pyluatex.doc.r65855.tar.xz -2023/02/17 | 5360 | systems/texlive/tlnet/archive/pyluatex.r65855.tar.xz +2024/01/08 | 100836 | systems/texlive/tlnet/archive/pyluatex.doc.r69343.tar.xz +2024/01/08 | 5088 | systems/texlive/tlnet/archive/pyluatex.r69343.tar.xz 2021/08/05 | 864 | systems/texlive/tlnet/archive/python.doc.r60162.tar.xz 2019/02/28 | 1444 | systems/texlive/tlnet/archive/pythonhighlight.doc.r43191.tar.xz 2019/02/28 | 2180 | systems/texlive/tlnet/archive/pythonhighlight.r43191.tar.xz @@ -306384,8 +306390,8 @@ 2019/02/28 | 1948 | systems/texlive/tlnet/archive/shadow.r20312.tar.xz 2019/02/28 | 145128 | systems/texlive/tlnet/archive/shadowtext.doc.r26522.tar.xz 2019/02/28 | 1484 | systems/texlive/tlnet/archive/shadowtext.r26522.tar.xz -2019/02/28 | 169100 | systems/texlive/tlnet/archive/shapepar.doc.r30708.tar.xz -2019/02/28 | 15972 | systems/texlive/tlnet/archive/shapepar.r30708.tar.xz +2024/01/08 | 169104 | systems/texlive/tlnet/archive/shapepar.doc.r69343.tar.xz +2024/01/08 | 15956 | systems/texlive/tlnet/archive/shapepar.r69343.tar.xz 2019/02/28 | 183000 | systems/texlive/tlnet/archive/shapes.doc.r42428.tar.xz 2019/02/28 | 1888 | systems/texlive/tlnet/archive/shapes.r42428.tar.xz 2019/02/28 | 4620 | systems/texlive/tlnet/archive/shapes.source.r42428.tar.xz @@ -307428,7 +307434,7 @@ 2022/09/13 | 600 | systems/texlive/tlnet/archive/texlive-scripts.amd64-freebsd.r64356.tar.xz 2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.amd64-netbsd.r64356.tar.xz 2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.armhf-linux.r64356.tar.xz -2024/01/07 | 431260 | systems/texlive/tlnet/archive/texlive-scripts.doc.r69314.tar.xz +2024/01/08 | 431260 | systems/texlive/tlnet/archive/texlive-scripts.doc.r69327.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 @@ -307450,7 +307456,7 @@ 2022/09/13 | 592 | systems/texlive/tlnet/archive/texlive-scripts.i386-linux.r64356.tar.xz 2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-netbsd.r64356.tar.xz 2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-solaris.r64356.tar.xz -2024/01/07 | 114268 | systems/texlive/tlnet/archive/texlive-scripts.r69314.tar.xz +2024/01/08 | 114256 | systems/texlive/tlnet/archive/texlive-scripts.r69327.tar.xz 2022/09/13 | 580 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r64356.tar.xz 2023/05/14 | 60312 | systems/texlive/tlnet/archive/texlive-scripts.windows.r67095.tar.xz 2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r64356.tar.xz @@ -307578,9 +307584,9 @@ 2023/02/27 | 892 | systems/texlive/tlnet/archive/tex.r66186.tar.xz 2021/01/08 | 423944 | systems/texlive/tlnet/archive/tex-refs.doc.r57349.tar.xz 2021/01/08 | 488 | systems/texlive/tlnet/archive/tex-refs.r57349.tar.xz -2023/06/07 | 1247400 | systems/texlive/tlnet/archive/texshade.doc.r67295.tar.xz -2023/06/07 | 62008 | systems/texlive/tlnet/archive/texshade.r67295.tar.xz -2023/06/07 | 315428 | systems/texlive/tlnet/archive/texshade.source.r67295.tar.xz +2024/01/08 | 1002972 | systems/texlive/tlnet/archive/texshade.doc.r69343.tar.xz +2024/01/08 | 62840 | systems/texlive/tlnet/archive/texshade.r69343.tar.xz +2024/01/08 | 317464 | systems/texlive/tlnet/archive/texshade.source.r69343.tar.xz 2019/02/28 | 324 | systems/texlive/tlnet/archive/texsis.aarch64-linux.r46208.tar.xz 2019/02/28 | 324 | systems/texlive/tlnet/archive/texsis.amd64-freebsd.r16472.tar.xz 2019/02/28 | 324 | systems/texlive/tlnet/archive/texsis.amd64-netbsd.r30191.tar.xz @@ -307797,6 +307803,8 @@ 2020/03/24 | 15728 | systems/texlive/tlnet/archive/tikz-dependency.r54512.tar.xz 2019/02/28 | 162296 | systems/texlive/tlnet/archive/tikz-dimline.doc.r35805.tar.xz 2019/02/28 | 2000 | systems/texlive/tlnet/archive/tikz-dimline.r35805.tar.xz +2024/01/08 | 216872 | systems/texlive/tlnet/archive/tikzdotncross.doc.r69329.tar.xz +2024/01/08 | 3076 | systems/texlive/tlnet/archive/tikzdotncross.r69329.tar.xz 2023/04/06 | 473020 | systems/texlive/tlnet/archive/tikzducks.doc.r66773.tar.xz 2023/04/06 | 18896 | systems/texlive/tlnet/archive/tikzducks.r66773.tar.xz 2023/04/03 | 632996 | systems/texlive/tlnet/archive/tikz-ext.doc.r66737.tar.xz @@ -308211,8 +308219,8 @@ 2022/11/08 | 7888 | systems/texlive/tlnet/archive/turnstile.source.r64967.tar.xz 2019/02/28 | 78428 | systems/texlive/tlnet/archive/turnthepage.doc.r29803.tar.xz 2019/02/28 | 1664 | systems/texlive/tlnet/archive/turnthepage.r29803.tar.xz -2023/12/10 | 1302720 | systems/texlive/tlnet/archive/tutodoc.doc.r69079.tar.xz -2023/12/10 | 7288 | systems/texlive/tlnet/archive/tutodoc.r69079.tar.xz +2024/01/08 | 1301892 | systems/texlive/tlnet/archive/tutodoc.doc.r69343.tar.xz +2024/01/08 | 7456 | systems/texlive/tlnet/archive/tutodoc.r69343.tar.xz 2022/10/30 | 712 | systems/texlive/tlnet/archive/twemoji-colr.doc.r64854.tar.xz 2022/10/30 | 581228 | systems/texlive/tlnet/archive/twemoji-colr.r64854.tar.xz 2022/04/06 | 4751536 | systems/texlive/tlnet/archive/twemojis.doc.r62930.tar.xz @@ -308330,8 +308338,8 @@ 2019/02/28 | 226612 | systems/texlive/tlnet/archive/uiucthesis.doc.r15878.tar.xz 2019/02/28 | 5140 | systems/texlive/tlnet/archive/uiucthesis.r15878.tar.xz 2019/02/28 | 16144 | systems/texlive/tlnet/archive/uiucthesis.source.r15878.tar.xz -2023/11/16 | 192652 | systems/texlive/tlnet/archive/ukbill.doc.r68862.tar.xz -2023/11/16 | 4864 | systems/texlive/tlnet/archive/ukbill.r68862.tar.xz +2024/01/08 | 196488 | systems/texlive/tlnet/archive/ukbill.doc.r69343.tar.xz +2024/01/08 | 5192 | systems/texlive/tlnet/archive/ukbill.r69343.tar.xz 2019/02/28 | 160948 | systems/texlive/tlnet/archive/ukrhyph.doc.r21081.tar.xz 2019/02/28 | 39116 | systems/texlive/tlnet/archive/ukrhyph.r21081.tar.xz 2020/01/11 | 166256 | systems/texlive/tlnet/archive/ulem.doc.r53365.tar.xz @@ -309343,17 +309351,17 @@ 2020/01/24 | 8760 | systems/texlive/tlnet/archive/zxjatype.r53500.tar.xz 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 -2023/08/07 | 125713 | systems/texlive/tlnet/install-tl -2024/01/07 | 5742652 | systems/texlive/tlnet/install-tl-unx.tar.gz -2024/01/07 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 -2024/01/07 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc +2024/01/07 | 125782 | systems/texlive/tlnet/install-tl +2024/01/08 | 5743624 | systems/texlive/tlnet/install-tl-unx.tar.gz +2024/01/08 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 +2024/01/08 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc 2023/05/13 | 5083 | systems/texlive/tlnet/install-tl-windows.bat -2024/01/07 | 21031345 | systems/texlive/tlnet/install-tl-windows.exe -2024/01/07 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 -2024/01/07 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc -2024/01/07 | 26032527 | systems/texlive/tlnet/install-tl.zip -2024/01/07 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 -2024/01/07 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc +2024/01/08 | 21029205 | systems/texlive/tlnet/install-tl-windows.exe +2024/01/08 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 +2024/01/08 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc +2024/01/08 | 26032743 | systems/texlive/tlnet/install-tl.zip +2024/01/08 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 +2024/01/08 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc 2023/03/19 | 1229 | systems/texlive/tlnet/README.md 2023/03/19 | 0 | systems/texlive/tlnet/TEXLIVE_2023 2024/01/02 | 9011 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg @@ -309363,7 +309371,7 @@ 2024/01/02 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg 2023/09/20 | 50622 | systems/texlive/tlnet/tlpkg/installer/config.guess 2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt -2024/01/06 | 7453 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl +2024/01/07 | 7335 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2023/12/13 | 226639 | 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 @@ -309403,18 +309411,18 @@ 2021/12/08 | 21507 | systems/texlive/tlnet/tlpkg/TeXLive/TLConfFile.pm 2023/02/26 | 12192 | systems/texlive/tlnet/tlpkg/TeXLive/TLConfig.pm 2023/02/21 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm -2021/12/21 | 5429 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm +2024/01/07 | 5844 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm 2023/04/08 | 28167 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm -2024/01/07 | 18789821 | systems/texlive/tlnet/tlpkg/texlive.tlpdb -2024/01/07 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +2024/01/08 | 18792075 | systems/texlive/tlnet/tlpkg/texlive.tlpdb +2024/01/08 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 2023/10/16 | 87924 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm -2024/01/07 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 -2024/01/07 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc -2024/01/07 | 2518516 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +2024/01/08 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +2024/01/08 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +2024/01/08 | 2518792 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz 2023/02/20 | 58928 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm 2023/06/11 | 42749 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm 2023/02/21 | 16138 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm -2023/09/15 | 158075 | systems/texlive/tlnet/tlpkg/TeXLive/TLUtils.pm +2024/01/07 | 158142 | systems/texlive/tlnet/tlpkg/TeXLive/TLUtils.pm 2023/02/21 | 38011 | systems/texlive/tlnet/tlpkg/TeXLive/TLWinGoo.pm 2021/05/20 | 6032 | systems/texlive/tlnet/tlpkg/TeXLive/trans.pl 2023/02/20 | 76288 | systems/texlive/tlnet/tlpkg/tlperl/bin/libgcc_s_seh-1.dll @@ -320483,7 +320491,7 @@ 2014/07/05 | 611 | systems/win32/yandy/README 2014/07/05 | 1004628 | systems/win32/yandy/yandy-src.tar.xz 2014/07/05 | 1012416 | systems/win32/yandy.zip -2024/01/08 | 186 | timestamp +2024/01/09 | 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 e7cc7a0ded..73ece6376d 100644 Binary files a/FILES.byname.gz and b/FILES.byname.gz differ diff --git a/FILES.last07days b/FILES.last07days index d67c42e479..153d80105d 100644 --- a/FILES.last07days +++ b/FILES.last07days @@ -1,3 +1,164 @@ +2024/01/08 | 99406 | biblio/bibtex/contrib/iran-bibtex/iran-unsrt.bst +2024/01/08 | 97414 | biblio/bibtex/contrib/iran-bibtex/iranlatin-year.bst +2024/01/08 | 9702 | macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg +2024/01/08 | 96889 | biblio/bibtex/contrib/iran-bibtex/iranlatin.bst +2024/01/08 | 94878 | macros/latex/contrib/lni/lni.dtx +2024/01/08 | 943 | macros/latex/contrib/dtxdescribe/README.txt +2024/01/08 | 943100 | systems/texlive/tlnet/archive/etoc.doc.r69343.tar.xz +2024/01/08 | 9298 | macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty +2024/01/08 | 92897 | biblio/bibtex/contrib/iran-bibtex/iranlatin-unsrt.bst +2024/01/08 | 91546 | macros/latex/contrib/spbmark.zip +2024/01/08 | 91010 | biblio/bibtex/contrib/iran-bibtex/iran-bibtex-structure.pdf +2024/01/08 | 90148 | systems/texlive/tlnet/archive/isphysicalmath.doc.r69343.tar.xz +2024/01/08 | 885928 | systems/texlive/tlnet/archive/babel.source.r69343.tar.xz +2024/01/08 | 8837 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex +2024/01/08 | 85360 | macros/latex/contrib/spbmark/spbmark.pdf +2024/01/08 | 85262 | macros/latex/contrib/easybook/easybook.tex +2024/01/08 | 8273 | biblio/bibtex/contrib/iran-bibtex/README.md +2024/01/08 | 8032 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex +2024/01/08 | 786367 | macros/latex/contrib/lni.zip +2024/01/08 | 75645 | macros/luatex/generic/minim-xmp.zip +2024/01/08 | 75339 | macros/latex/contrib/easybook/easybook.dtx +2024/01/08 | 7456 | systems/texlive/tlnet/archive/tutodoc.r69343.tar.xz +2024/01/08 | 7241 | macros/latex/contrib/tuda-ci/tex/tudabeamer.cls +2024/01/08 | 7034 | macros/latex/contrib/lni/CHANGELOG.md +2024/01/08 | 7018 | macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa2023.sty +2024/01/08 | 7017908 | macros/latex/contrib/tuda-ci.zip +2024/01/08 | 6844 | biblio/bibtex/contrib/iran-bibtex/iran-bibtex.sty +2024/01/08 | 6831 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex +2024/01/08 | 662437 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf +2024/01/08 | 6538 | macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty +2024/01/08 | 6398 | macros/latex/contrib/lni/lni-paper-example-de.tex +2024/01/08 | 638055 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf +2024/01/08 | 6365 | macros/latex/contrib/tuda-ci/tex/tudarules.sty +2024/01/08 | 634234 | macros/latex/contrib/easybook.zip +2024/01/08 | 62840 | systems/texlive/tlnet/archive/texshade.r69343.tar.xz +2024/01/08 | 627330 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf +2024/01/08 | 6240 | systems/texlive/tlnet/archive/isphysicalmath.source.r69343.tar.xz +2024/01/08 | 613288 | systems/texlive/tlnet/archive/easybook.doc.r69343.tar.xz +2024/01/08 | 601729 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf +2024/01/08 | 6014 | macros/latex/contrib/tuda-ci/tex/tudacolors.sty +2024/01/08 | 592288 | macros/latex/contrib/easybook/easybook.pdf +2024/01/08 | 5809 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex +2024/01/08 | 5743624 | systems/texlive/tlnet/install-tl-unx.tar.gz +2024/01/08 | 570532 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf +2024/01/08 | 567142 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf +2024/01/08 | 563698 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf +2024/01/08 | 559914 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf +2024/01/08 | 556834 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer2023.pdf +2024/01/08 | 552288 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf +2024/01/08 | 5509 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer2023.tex +2024/01/08 | 548 | systems/texlive/tlnet/archive/docsurvey.r69343.tar.xz +2024/01/08 | 5384 | macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo +2024/01/08 | 536447 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf +2024/01/08 | 5341 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex +2024/01/08 | 5332 | macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo +2024/01/08 | 527922 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf +2024/01/08 | 5192 | systems/texlive/tlnet/archive/ukbill.r69343.tar.xz +2024/01/08 | 5088 | systems/texlive/tlnet/archive/pyluatex.r69343.tar.xz +2024/01/08 | 4992 | systems/texlive/tlnet/archive/overpic.source.r69343.tar.xz +2024/01/08 | 498524 | systems/texlive/tlnet/archive/exsol.doc.r69343.tar.xz +2024/01/08 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +2024/01/08 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +2024/01/08 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc +2024/01/08 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc +2024/01/08 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc +2024/01/08 | 487282 | macros/latex/contrib/dtxdescribe.zip +2024/01/08 | 470587 | macros/latex/contrib/dtxdescribe/dtxdescribe.pdf +2024/01/08 | 46162 | macros/latex/contrib/tuda-ci/tex/tudapub.cls +2024/01/08 | 45380 | biblio/bibtex/contrib/iran-bibtex/iran-bibtex-structure.tex +2024/01/08 | 4392 | macros/latex/contrib/tuda-ci/tex/tudacolors.def +2024/01/08 | 431260 | systems/texlive/tlnet/archive/texlive-scripts.doc.r69327.tar.xz +2024/01/08 | 4279 | macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty +2024/01/08 | 4142 | macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2008.sty +2024/01/08 | 4127 | macros/latex/contrib/lni/lni.ins +2024/01/08 | 4114953 | biblio/ctan-bibdata.zip +2024/01/08 | 399404 | systems/texlive/tlnet/archive/overpic.doc.r69343.tar.xz +2024/01/08 | 3821 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco +2024/01/08 | 380985 | macros/luatex/generic/minim.zip +2024/01/08 | 377695 | macros/latex/contrib/lni/lni.pdf +2024/01/08 | 3737 | macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty +2024/01/08 | 3708800 | biblio/ctan-bibdata/ctan.pdf +2024/01/08 | 3632 | systems/texlive/tlnet/archive/exsol.r69343.tar.xz +2024/01/08 | 3555 | macros/latex/contrib/tuda-ci/tex/tudafonts.sty +2024/01/08 | 33596 | macros/latex/contrib/tuda-ci/tex/tudaexercise.cls +2024/01/08 | 3358 | macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa2023.sty +2024/01/08 | 32525 | macros/latex/contrib/tuda-ci/tex/tudathesis.cfg +2024/01/08 | 317464 | systems/texlive/tlnet/archive/texshade.source.r69343.tar.xz +2024/01/08 | 3125 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex +2024/01/08 | 3076 | systems/texlive/tlnet/archive/tikzdotncross.r69329.tar.xz +2024/01/08 | 29525 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex +2024/01/08 | 29247 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex +2024/01/08 | 28690 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex +2024/01/08 | 2836775 | biblio/ctan-bibdata/ctan.bib +2024/01/08 | 269352 | systems/texlive/tlnet/archive/docsurvey.doc.r69343.tar.xz +2024/01/08 | 26032743 | systems/texlive/tlnet/install-tl.zip +2024/01/08 | 2594 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib +2024/01/08 | 2583 | macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa2023.sty +2024/01/08 | 2518792 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +2024/01/08 | 239500 | systems/texlive/tlnet/archive/codedescribe.doc.r69343.tar.xz +2024/01/08 | 2370 | macros/latex/contrib/lni/CONTRIBUTING.md +2024/01/08 | 2300 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex +2024/01/08 | 229440 | systems/texlive/tlnet/archive/babel.r69343.tar.xz +2024/01/08 | 2177 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2023.sty +2024/01/08 | 216872 | systems/texlive/tlnet/archive/tikzdotncross.doc.r69329.tar.xz +2024/01/08 | 2150 | macros/latex/contrib/lni/lni-paper-example-de.bib +2024/01/08 | 2102 | macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty +2024/01/08 | 21029205 | systems/texlive/tlnet/install-tl-windows.exe +2024/01/08 | 2094 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2008.sty +2024/01/08 | 2058 | biblio/bibtex/contrib/iran-bibtex/iran-bibtex-cp1256fa.csf +2024/01/08 | 1997 | macros/latex/contrib/lni/README.md +2024/01/08 | 19677 | macros/latex/contrib/tuda-ci/tex/tudaposter.cls +2024/01/08 | 196488 | systems/texlive/tlnet/archive/ukbill.doc.r69343.tar.xz +2024/01/08 | 19317 | macros/latex/contrib/tuda-ci/tex/tudasciposter.cls +2024/01/08 | 1928 | macros/latex/contrib/lni/lni-author-template.tex +2024/01/08 | 19232 | macros/latex/contrib/tuda-ci/README.md +2024/01/08 | 18792075 | systems/texlive/tlnet/tlpkg/texlive.tlpdb +2024/01/08 | 1816 | systems/texlive/tlnet/archive/overpic.r69343.tar.xz +2024/01/08 | 1756 | systems/texlive/tlnet/archive/isphysicalmath.r69343.tar.xz +2024/01/08 | 174457 | biblio/bibtex/contrib/iran-bibtex.zip +2024/01/08 | 169104 | systems/texlive/tlnet/archive/shapepar.doc.r69343.tar.xz +2024/01/08 | 1682 | macros/latex/contrib/dtxdescribe/dtxdescribe.ins +2024/01/08 | 16809 | macros/latex/contrib/tuda-ci/tex/tudaletter.cls +2024/01/08 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx +2024/01/08 | 1668 | systems/texlive/tlnet/archive/collection-pictures.r69329.tar.xz +2024/01/08 | 16563 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex +2024/01/08 | 16472 | systems/texlive/tlnet/archive/easybook.r69343.tar.xz +2024/01/08 | 1637 | macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo +2024/01/08 | 16372 | systems/texlive/tlnet/archive/easybook.source.r69343.tar.xz +2024/01/08 | 1635 | macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo +2024/01/08 | 1635 | macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo +2024/01/08 | 1634 | macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo +2024/01/08 | 1633 | macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo +2024/01/08 | 1631 | macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo +2024/01/08 | 160707 | macros/luatex/generic/minim-math.zip +2024/01/08 | 15956 | systems/texlive/tlnet/archive/shapepar.r69343.tar.xz +2024/01/08 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 +2024/01/08 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 +2024/01/08 | 15153 | macros/latex/contrib/spbmark/spbmark.tex +2024/01/08 | 14933 | macros/latex/contrib/spbmark/spbmark.sty +2024/01/08 | 147695 | macros/luatex/generic/minim-pdf.zip +2024/01/08 | 146310 | macros/luatex/generic/minim-mp.zip +2024/01/08 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 +2024/01/08 | 14584416 | systems/texlive/tlnet/archive/profcollege.doc.r69343.tar.xz +2024/01/08 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +2024/01/08 | 1405 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty +2024/01/08 | 14050 | macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls +2024/01/08 | 13712 | systems/texlive/tlnet/archive/exsol.source.r69343.tar.xz +2024/01/08 | 13544 | systems/texlive/tlnet/archive/etoc.r69343.tar.xz +2024/01/08 | 1336084 | systems/texlive/tlnet/archive/profcollege.r69343.tar.xz +2024/01/08 | 1301892 | systems/texlive/tlnet/archive/tutodoc.doc.r69343.tar.xz +2024/01/08 | 125104 | macros/latex/contrib/dtxdescribe/dtxdescribe.dtx +2024/01/08 | 12419 | macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2023.sty +2024/01/08 | 123048 | systems/texlive/tlnet/archive/etoc.source.r69343.tar.xz +2024/01/08 | 114256 | systems/texlive/tlnet/archive/texlive-scripts.r69327.tar.xz +2024/01/08 | 11044 | systems/texlive/tlnet/archive/codedescribe.r69343.tar.xz +2024/01/08 | 1044336 | systems/texlive/tlnet/archive/babel.doc.r69343.tar.xz +2024/01/08 | 104014 | biblio/bibtex/contrib/iran-bibtex/iran-year.bst +2024/01/08 | 103494 | biblio/bibtex/contrib/iran-bibtex/iran.bst +2024/01/08 | 100836 | systems/texlive/tlnet/archive/pyluatex.doc.r69343.tar.xz +2024/01/08 | 1002972 | systems/texlive/tlnet/archive/texshade.doc.r69343.tar.xz +2024/01/08 | 10006 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty 2024/01/07 | 93149 | info/docsurvey/docsurvey.tex 2024/01/07 | 920966 | systems/win32/miktex/tm/packages/scripture__doc.tar.lzma 2024/01/07 | 9186 | systems/win32/miktex/tm/packages/piton.tar.lzma @@ -14,7 +175,6 @@ 2024/01/07 | 865758 | systems/win32/miktex/tm/packages/unravel__doc.tar.lzma 2024/01/07 | 8595 | systems/win32/miktex/tm/packages/advice__doc.tar.lzma 2024/01/07 | 85740 | systems/win32/miktex/tm/packages/chemfig__source.tar.lzma -2024/01/07 | 85411 | macros/latex/contrib/easybook/easybook.tex 2024/01/07 | 85182 | systems/win32/miktex/tm/packages/decimalcomma__doc.tar.lzma 2024/01/07 | 8388 | systems/win32/miktex/tm/packages/collargs__doc.tar.lzma 2024/01/07 | 83317 | macros/luatex/latex/pyluatex/pyluatex.pdf @@ -34,7 +194,6 @@ 2024/01/07 | 7737 | systems/win32/miktex/tm/packages/eolang.tar.lzma 2024/01/07 | 77291 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma 2024/01/07 | 76176 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma -2024/01/07 | 75375 | macros/latex/contrib/easybook/easybook.dtx 2024/01/07 | 75145 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma 2024/01/07 | 74520 | systems/win32/miktex/tm/packages/latexindent.tar.lzma 2024/01/07 | 7414 | systems/win32/miktex/tm/packages/codedescribe__source.tar.lzma @@ -42,6 +201,7 @@ 2024/01/07 | 7345 | systems/win32/miktex/tm/packages/changebar.tar.lzma 2024/01/07 | 73421 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma 2024/01/07 | 73406 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma +2024/01/07 | 7335 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2024/01/07 | 73286 | systems/win32/miktex/tm/packages/xgreek__doc.tar.lzma 2024/01/07 | 717 | macros/luatex/latex/pyluatex/example/readme-example.tex 2024/01/07 | 707756 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma @@ -60,14 +220,12 @@ 2024/01/07 | 64577 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma 2024/01/07 | 642704 | macros/latex/required/babel/base/babel-code.pdf 2024/01/07 | 6328 | systems/win32/miktex/tm/packages/iexec__source.tar.lzma -2024/01/07 | 632605 | macros/latex/contrib/easybook.zip 2024/01/07 | 628 | macros/luatex/latex/pyluatex/example/readme-custom-env.tex 2024/01/07 | 628721 | systems/win32/miktex/tm/packages/changebar__doc.tar.lzma 2024/01/07 | 627419 | macros/latex/contrib/exsol.zip 2024/01/07 | 6271 | systems/win32/miktex/tm/packages/exesheet.tar.lzma 2024/01/07 | 62506094 | systems/win32/miktex/tm/packages/comprehensive.tar.lzma 2024/01/07 | 61820 | macros/latex/contrib/exsol/example.pdf -2024/01/07 | 613116 | systems/texlive/tlnet/archive/easybook.doc.r69317.tar.xz 2024/01/07 | 612846 | systems/win32/miktex/tm/packages/l3kernel__source.tar.lzma 2024/01/07 | 60998 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma 2024/01/07 | 606436 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma @@ -78,15 +236,14 @@ 2024/01/07 | 5936 | systems/win32/miktex/tm/packages/pst-ode.tar.lzma 2024/01/07 | 59356 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma 2024/01/07 | 593240 | systems/win32/miktex/tm/packages/easybook__doc.tar.lzma -2024/01/07 | 590690 | macros/latex/contrib/easybook/easybook.pdf 2024/01/07 | 5895 | systems/win32/miktex/tm/packages/unbtex__source.tar.lzma 2024/01/07 | 58921 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma 2024/01/07 | 5877 | systems/win32/miktex/tm/packages/fontsetup__source.tar.lzma 2024/01/07 | 58600 | macros/latex/contrib/exsol/example-external.pdf +2024/01/07 | 5844 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm 2024/01/07 | 5830319 | systems/win32/miktex/tm/packages/profcollege__source.tar.lzma 2024/01/07 | 582592 | systems/win32/miktex/tm/packages/gtl__doc.tar.lzma 2024/01/07 | 57765 | systems/win32/miktex/tm/packages/fontools.tar.lzma -2024/01/07 | 5742652 | systems/texlive/tlnet/install-tl-unx.tar.gz 2024/01/07 | 56960 | macros/latex/contrib/exsol/example-inline.pdf 2024/01/07 | 5604 | systems/win32/miktex/tm/packages/calxxxx-yyyy.tar.lzma 2024/01/07 | 55984 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma @@ -99,6 +256,7 @@ 2024/01/07 | 5385 | systems/win32/miktex/tm/packages/overpic__source.tar.lzma 2024/01/07 | 530176 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma 2024/01/07 | 5286 | systems/win32/miktex/tm/packages/advice.tar.lzma +2024/01/07 | 52775 | macros/luatex/generic/minim-mp/minim-mp.lua 2024/01/07 | 52709 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma 2024/01/07 | 5265 | systems/win32/miktex/tm/packages/amnestyreport.tar.lzma 2024/01/07 | 51681 | systems/win32/miktex/tm/packages/proflycee.tar.lzma @@ -111,12 +269,7 @@ 2024/01/07 | 49728 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma 2024/01/07 | 4969 | systems/win32/miktex/tm/packages/decimalcomma__source.tar.lzma 2024/01/07 | 4907872 | systems/win32/miktex/tm/packages/acmart__doc.tar.lzma -2024/01/07 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 2024/01/07 | 4896 | systems/texlive/tlnet/archive/todonotes.r69319.tar.xz -2024/01/07 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc -2024/01/07 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc -2024/01/07 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc -2024/01/07 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc 2024/01/07 | 48449 | macros/latex/contrib/exsol/example-exercisebook.pdf 2024/01/07 | 48396 | systems/texlive/tlnet/archive/piton.source.r69320.tar.xz 2024/01/07 | 48296 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma @@ -135,7 +288,6 @@ 2024/01/07 | 44104 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma 2024/01/07 | 44100 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma 2024/01/07 | 4328 | macros/luatex/latex/pyluatex/example/data-visualization.tex -2024/01/07 | 431260 | systems/texlive/tlnet/archive/texlive-scripts.doc.r69314.tar.xz 2024/01/07 | 43107 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma 2024/01/07 | 43069 | systems/win32/miktex/tm/packages/acmart.tar.lzma 2024/01/07 | 42519 | systems/win32/miktex/tm/packages/nicematrix.tar.lzma @@ -144,24 +296,23 @@ 2024/01/07 | 4182 | systems/win32/miktex/tm/packages/gtl.tar.lzma 2024/01/07 | 4178 | systems/win32/miktex/tm/packages/tikzdotncross__source.tar.lzma 2024/01/07 | 4124 | systems/win32/miktex/tm/packages/babel-italian.tar.lzma -2024/01/07 | 4114949 | biblio/ctan-bibdata.zip 2024/01/07 | 40380 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma 2024/01/07 | 401386 | systems/win32/miktex/tm/packages/overpic__doc.tar.lzma 2024/01/07 | 39860 | systems/win32/miktex/tm/packages/easybook__source.tar.lzma 2024/01/07 | 395732 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma 2024/01/07 | 39358 | systems/win32/miktex/tm/packages/memoize__source.tar.lzma 2024/01/07 | 39167 | macros/luatex/latex/pyluatex/example/population.csv +2024/01/07 | 391611 | info/biblio/litprog.bib 2024/01/07 | 3914 | systems/win32/miktex/tm/packages/orcidlink__source.tar.lzma -2024/01/07 | 390609 | info/biblio/litprog.bib 2024/01/07 | 388845 | systems/win32/miktex/tm/packages/autotype__doc.tar.lzma 2024/01/07 | 382319 | systems/win32/miktex/tm/packages/calxxxx-yyyy__doc.tar.lzma 2024/01/07 | 37635 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma 2024/01/07 | 3710508 | install/macros/latex/required/babel-base.tds.zip -2024/01/07 | 3708800 | biblio/ctan-bibdata/ctan.pdf 2024/01/07 | 37046 | systems/win32/miktex/tm/packages/mcf2graph__source.tar.lzma 2024/01/07 | 37005 | systems/win32/miktex/tm/packages/l3build.tar.lzma 2024/01/07 | 36782 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma 2024/01/07 | 36746 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma +2024/01/07 | 365466 | macros/luatex/generic/minim/minim.pdf 2024/01/07 | 35360 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma 2024/01/07 | 3527 | macros/latex/required/babel/base/bbidxglo.dtx 2024/01/07 | 352054 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma @@ -199,7 +350,6 @@ 2024/01/07 | 288208 | systems/win32/miktex/tm/packages/schulmathematik__doc.tar.lzma 2024/01/07 | 287549 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma 2024/01/07 | 2844344 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma -2024/01/07 | 2836777 | biblio/ctan-bibdata/ctan.bib 2024/01/07 | 28095 | systems/win32/miktex/tm/packages/memoize.tar.lzma 2024/01/07 | 27639 | systems/win32/miktex/tm/packages/latexmk__source.tar.lzma 2024/01/07 | 2746 | systems/win32/miktex/tm/packages/iexec.tar.lzma @@ -210,7 +360,6 @@ 2024/01/07 | 27188 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma 2024/01/07 | 270542 | info/docsurvey.zip 2024/01/07 | 26791 | systems/win32/miktex/tm/packages/chemfig.tar.lzma -2024/01/07 | 26032527 | systems/texlive/tlnet/install-tl.zip 2024/01/07 | 25980 | macros/latex/contrib/isphysicalmath/isphysicalmath.dtx 2024/01/07 | 25702 | systems/win32/miktex/tm/packages/collargs__source.tar.lzma 2024/01/07 | 25615 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma @@ -220,7 +369,6 @@ 2024/01/07 | 2548424 | systems/texlive/tlnet/archive/beamer.doc.r69316.tar.xz 2024/01/07 | 25476 | systems/win32/miktex/tm/packages/babel-italian__source.tar.lzma 2024/01/07 | 252557 | systems/win32/miktex/tm/packages/exesheet__doc.tar.lzma -2024/01/07 | 2518516 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz 2024/01/07 | 250809 | info/docsurvey/docsurvey.pdf 2024/01/07 | 249281 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma 2024/01/07 | 2490 | macros/latex/contrib/isphysicalmath/isphysicalmath.ins @@ -254,7 +402,6 @@ 2024/01/07 | 21113 | systems/win32/miktex/tm/packages/morewrites__source.tar.lzma 2024/01/07 | 21071 | systems/win32/miktex/tm/packages/simpleicons__source.tar.lzma 2024/01/07 | 2105 | macros/luatex/latex/pyluatex/example/typesetting-minted.tex -2024/01/07 | 21031345 | systems/texlive/tlnet/install-tl-windows.exe 2024/01/07 | 2099957 | systems/win32/miktex/tm/packages/nicematrix__doc.tar.lzma 2024/01/07 | 20897 | systems/win32/miktex/tm/packages/profmaquette.tar.lzma 2024/01/07 | 208090 | systems/win32/miktex/tm/packages/baskervaldx__doc.tar.lzma @@ -273,7 +420,6 @@ 2024/01/07 | 1943 | systems/win32/miktex/tm/packages/orcidlink.tar.lzma 2024/01/07 | 194181 | systems/win32/miktex/tm/packages/luatexja.tar.lzma 2024/01/07 | 19330 | systems/win32/miktex/tm/packages/unbtex.tar.lzma -2024/01/07 | 18789821 | systems/texlive/tlnet/tlpkg/texlive.tlpdb 2024/01/07 | 1849 | macros/luatex/latex/pyluatex/example/matplotlib-pgf.tex 2024/01/07 | 182812 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma 2024/01/07 | 18264 | systems/win32/miktex/tm/packages/mathastext.tar.lzma @@ -289,27 +435,21 @@ 2024/01/07 | 1725279 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma 2024/01/07 | 169544 | systems/win32/miktex/tm/packages/beamer.tar.lzma 2024/01/07 | 1686297 | systems/win32/miktex/tm/packages/amnestyreport__doc.tar.lzma -2024/01/07 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx 2024/01/07 | 167656 | systems/texlive/tlnet/archive/beamer.r69316.tar.xz 2024/01/07 | 16704 | systems/texlive/tlnet/archive/piton.r69320.tar.xz -2024/01/07 | 16488 | systems/texlive/tlnet/archive/easybook.r69317.tar.xz 2024/01/07 | 16477 | systems/win32/miktex/tm/packages/l3backend.tar.lzma -2024/01/07 | 16372 | systems/texlive/tlnet/archive/easybook.source.r69317.tar.xz 2024/01/07 | 16088 | systems/win32/miktex/tm/packages/easybook.tar.lzma 2024/01/07 | 159845 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma +2024/01/07 | 158142 | systems/texlive/tlnet/tlpkg/TeXLive/TLUtils.pm 2024/01/07 | 1551 | macros/luatex/latex/pyluatex/README.md -2024/01/07 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 2024/01/07 | 1531008 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma -2024/01/07 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 2024/01/07 | 1527 | macros/luatex/latex/pyluatex/example/matplotlib-external.tex 2024/01/07 | 1518478 | systems/win32/miktex/tm/packages/proflycee__doc.tar.lzma 2024/01/07 | 15069 | systems/win32/miktex/tm/packages/versonotes__source.tar.lzma 2024/01/07 | 148094 | systems/win32/miktex/tm/packages/pgfkeysearch__doc.tar.lzma 2024/01/07 | 147613 | systems/win32/miktex/tm/packages/kaytannollista-latexia__source.tar.lzma 2024/01/07 | 1475 | systems/win32/miktex/tm/packages/decimalcomma.tar.lzma -2024/01/07 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 2024/01/07 | 14583 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma -2024/01/07 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 2024/01/07 | 1444467 | systems/win32/miktex/tm/packages/eolang__doc.tar.lzma 2024/01/07 | 1438080 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma 2024/01/07 | 1435236 | macros/latex/contrib/tutodoc.zip @@ -329,12 +469,15 @@ 2024/01/07 | 128722 | systems/win32/miktex/tm/packages/fontools__doc.tar.lzma 2024/01/07 | 127965 | systems/win32/miktex/tm/packages/latexindent__source.tar.lzma 2024/01/07 | 127088 | systems/win32/miktex/tm/packages/xkeymask__doc.tar.lzma +2024/01/07 | 126824 | macros/luatex/generic/minim-pdf/minim-pdf.pdf +2024/01/07 | 125782 | systems/texlive/tlnet/install-tl 2024/01/07 | 1256852 | systems/win32/miktex/tm/packages/morewrites__doc.tar.lzma 2024/01/07 | 1230601 | systems/win32/miktex/tm/packages/latexindent__doc.tar.lzma 2024/01/07 | 12302 | systems/win32/miktex/tm/packages/profmaquette__source.tar.lzma 2024/01/07 | 122599 | systems/win32/miktex/tm/packages/pst-ode__doc.tar.lzma 2024/01/07 | 12241913 | systems/win32/miktex/tm/packages/l3kernel__doc.tar.lzma 2024/01/07 | 122194 | macros/latex/contrib/isphysicalmath/isphysicalmath-doc.pdf +2024/01/07 | 120017 | macros/luatex/generic/minim-mp/minim-mp.pdf 2024/01/07 | 1179704 | macros/latex/contrib/texshade.zip 2024/01/07 | 117840 | systems/win32/miktex/tm/packages/versonotes__doc.tar.lzma 2024/01/07 | 117649 | systems/win32/miktex/tm/packages/mathastext__source.tar.lzma @@ -345,7 +488,6 @@ 2024/01/07 | 11628 | systems/win32/miktex/tm/packages/amnestyreport__source.tar.lzma 2024/01/07 | 1150 | systems/win32/miktex/tm/packages/next/pr.ini 2024/01/07 | 11501 | systems/win32/miktex/tm/packages/schooldocs__source.tar.lzma -2024/01/07 | 114268 | systems/texlive/tlnet/archive/texlive-scripts.r69314.tar.xz 2024/01/07 | 11258 | systems/win32/miktex/tm/packages/codedescribe.tar.lzma 2024/01/07 | 112426 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma 2024/01/07 | 11169 | systems/win32/miktex/tm/packages/xgreek__source.tar.lzma @@ -421,7 +563,6 @@ 2024/01/06 | 7558 | macros/latex/contrib/beamer/doc/solutions/conference-talks/conference-ornate-20min.de.tex 2024/01/06 | 7538 | macros/latex/contrib/profcollege/latex/PfCCible.tex 2024/01/06 | 746351 | macros/latex/contrib/tutodoc/doc/tutodoc-fr.pdf -2024/01/06 | 7453 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2024/01/06 | 7442 | macros/latex/contrib/beamer/base/beamerbaseboxes.sty 2024/01/06 | 7422 | macros/latex/contrib/profcollege/latex/PfCNumerationsAnciennes.tex 2024/01/06 | 7305 | macros/latex/contrib/profcollege/latex/PfCNombreAstral.tex @@ -486,7 +627,6 @@ 2024/01/06 | 496039 | macros/latex/contrib/todonotes.zip 2024/01/06 | 494 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeBerlin.sty 2024/01/06 | 491 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeIlmenau.sty -2024/01/06 | 4908 | systems/texlive/tlnet/archive/overpic.source.r69311.tar.xz 2024/01/06 | 49011 | macros/latex/contrib/beamer/doc/examples/a-lecture/beamerexample-lecture-pic5.jpg 2024/01/06 | 480 | macros/latex/contrib/beamer/doc/beamerfontthemeexample.tex 2024/01/06 | 476 | macros/latex/contrib/beamer/doc/beamerthemeexample.tex @@ -531,7 +671,6 @@ 2024/01/06 | 40099 | macros/latex/contrib/beamer/doc/beamerug-globalstructure.tex 2024/01/06 | 40020 | macros/latex/contrib/beamer/doc/examples/a-lecture/beamerexample-lecture-pic3.jpg 2024/01/06 | 399160 | macros/luatex/latex/piton/piton-french.pdf -2024/01/06 | 398112 | systems/texlive/tlnet/archive/overpic.doc.r69311.tar.xz 2024/01/06 | 397 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeJuanLesPins.sty 2024/01/06 | 397 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeDarmstadt.sty 2024/01/06 | 393 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeWarsaw.sty @@ -680,7 +819,6 @@ 2024/01/06 | 1767 | macros/latex/contrib/profcollege/latex/PfCScratch.tex 2024/01/06 | 1760 | macros/latex/contrib/beamer/base/themes/color/beamercolorthemeseagull.sty 2024/01/06 | 1743 | macros/latex/contrib/beamer/base/beamerbaseoptions.sty -2024/01/06 | 1740 | systems/texlive/tlnet/archive/overpic.r69311.tar.xz 2024/01/06 | 1731 | macros/latex/contrib/beamer/base/emulation/beamerfoils.sty 2024/01/06 | 17080 | macros/latex/contrib/beamer/base/art/beamericonarticle.20.eps 2024/01/06 | 1691 | macros/latex/contrib/tutodoc/MANIFEST.md @@ -816,6 +954,7 @@ 2024/01/05 | 33877 | macros/latex/contrib/lwarp/lwarp.ins 2024/01/05 | 326859 | macros/latex/contrib/unravel/unravel.dtx 2024/01/05 | 31672 | systems/texlive/tlnet/archive/l3build.source.r69300.tar.xz +2024/01/05 | 3086 | macros/luatex/generic/minim-mp/minim.mp 2024/01/05 | 29836 | macros/latex/contrib/lwarp/lwarpmk.lua 2024/01/05 | 2947 | macros/latex/contrib/lwarp/lwarp_tutorial.txt 2024/01/05 | 29320 | macros/luatex/latex/autotype/autotype-cls_pdnm_trie_simple.lua @@ -914,6 +1053,7 @@ 2024/01/04 | 750 | support/texlab/crates/diagnostics/src/util.rs 2024/01/04 | 747742 | macros/latex/contrib/l3build/l3build.pdf 2024/01/04 | 73845 | macros/latex/contrib/l3kernel/l3fp-trig.dtx +2024/01/04 | 73080 | macros/luatex/generic/minim-xmp/minim-xmp.pdf 2024/01/04 | 725 | support/texlab/crates/hover/src/package.rs 2024/01/04 | 7201 | macros/latex/contrib/l3build/l3build-manifest.lua 2024/01/04 | 712 | macros/latex/contrib/unbtex/unbtex-example/codigos/blockdiagram.tex @@ -1123,6 +1263,7 @@ 2024/01/04 | 2600 | support/texlab/crates/definition/src/tests.rs 2024/01/04 | 25916 | macros/latex/contrib/l3experimental/l3graphics.dtx 2024/01/04 | 2586 | support/texlab/texlab.tex +2024/01/04 | 25577 | macros/luatex/generic/minim-pdf/minim-pdf.doc 2024/01/04 | 2543 | support/texlab/crates/distro/src/lib.rs 2024/01/04 | 25264 | systems/texlive/tlnet/archive/collargs.source.r69284.tar.xz 2024/01/04 | 251 | support/texlab/crates/links/src/lib.rs @@ -1135,6 +1276,7 @@ 2024/01/04 | 2469 | macros/latex/contrib/l3build/l3build-help.lua 2024/01/04 | 2467 | support/texlab/crates/distro/src/miktex.rs 2024/01/04 | 243162 | macros/latex/contrib/l3kernel/l3syntax-changes.pdf +2024/01/04 | 2425 | macros/luatex/generic/minim/minim.doc 2024/01/04 | 2411 | support/texlab/crates/texlab/src/server/dispatch.rs 2024/01/04 | 2384 | macros/latex/contrib/l3kernel/l3docstrip.dtx 2024/01/04 | 23828 | macros/latex/contrib/l3kernel/l3luatex.dtx @@ -1145,6 +1287,8 @@ 2024/01/04 | 2322 | support/texlab/crates/diagnostics/src/lib.rs 2024/01/04 | 2320 | support/texlab/crates/completion/src/util/patterns.rs 2024/01/04 | 23206 | macros/latex/contrib/l3kernel/l3fp-logic.dtx +2024/01/04 | 23075 | macros/luatex/generic/minim-mp/minim-mp.doc +2024/01/04 | 2305 | macros/luatex/generic/minim-mp/README 2024/01/04 | 22988 | macros/latex/contrib/l3build/CHANGELOG.md 2024/01/04 | 2286 | macros/latex/contrib/l3build/l3build-tagging.lua 2024/01/04 | 2282 | macros/latex/contrib/l3kernel/source3.tex @@ -1154,6 +1298,8 @@ 2024/01/04 | 22411 | macros/latex/contrib/unbtex/unbtex.cls 2024/01/04 | 22376 | graphics/pstricks/contrib/pst-ode/pst-ode-doc.tex 2024/01/04 | 22204 | support/texlab/crates/citeproc/src/driver.rs +2024/01/04 | 2214 | macros/luatex/generic/minim/README +2024/01/04 | 2185 | macros/luatex/generic/minim-pdf/README 2024/01/04 | 218315 | macros/latex/contrib/l3kernel/l3term-glossary.pdf 2024/01/04 | 215 | macros/latex/contrib/unbtex/unbtex-example/capitulo5.tex 2024/01/04 | 2145 | macros/latex/contrib/l3build/l3build-clean.lua @@ -1205,7 +1351,6 @@ 2024/01/04 | 1698 | support/texlab/crates/folding/src/tests.rs 2024/01/04 | 1671 | macros/latex/contrib/unbtex/unbtex-example/codigos/controleSmithPredictor.py 2024/01/04 | 16624 | macros/latex/contrib/l3kernel/l3text-map.dtx -2024/01/04 | 1660 | systems/texlive/tlnet/archive/collection-pictures.r69289.tar.xz 2024/01/04 | 16498 | macros/latex/contrib/l3experimental/l3benchmark.dtx 2024/01/04 | 163484 | macros/latex/contrib/l3kernel/l3news08.pdf 2024/01/04 | 1626 | support/texlab/crates/bibtex-utils/src/field/number.rs @@ -1264,6 +1409,7 @@ 2024/01/04 | 13186 | macros/latex/contrib/l3build/l3build-upload.lua 2024/01/04 | 129737 | macros/latex/contrib/l3kernel/l3keys.dtx 2024/01/04 | 12948 | macros/latex/contrib/l3kernel/l3bootstrap.dtx +2024/01/04 | 12916 | macros/luatex/generic/minim-math/minim-math.doc 2024/01/04 | 128 | support/texlab/crates/syntax/src/latexmkrc.rs 2024/01/04 | 1287 | support/texlab/crates/distro/src/language.rs 2024/01/04 | 128344 | macros/latex/contrib/l3kernel/l3news07.pdf @@ -1284,6 +1430,7 @@ 2024/01/04 | 116348 | macros/latex/contrib/l3kernel/l3token.dtx 2024/01/04 | 114754 | macros/latex/contrib/l3kernel/l3news04.pdf 2024/01/04 | 1145 | support/texlab/crates/links/src/tests.rs +2024/01/04 | 114067 | macros/luatex/generic/minim-math/minim-math.pdf 2024/01/04 | 1137 | support/texlab/crates/texlab/src/features/formatting.rs 2024/01/04 | 113483 | macros/latex/contrib/l3build/l3build.dtx 2024/01/04 | 113354 | macros/latex/contrib/l3kernel/l3str-convert.dtx @@ -1297,17 +1444,21 @@ 2024/01/04 | 11078 | support/texlab/crates/base-db/src/semantics/tex.rs 2024/01/04 | 11077 | macros/latex/contrib/l3build/l3build-install.lua 2024/01/04 | 1104 | support/texlab/crates/definition/src/lib.rs +2024/01/04 | 1097 | macros/luatex/generic/minim-math/README 2024/01/04 | 10959 | graphics/pstricks/contrib/pst-ode/pst-ode.tex 2024/01/04 | 108 | support/texlab/crates/texlab/src/lib.rs 2024/01/04 | 1078 | support/texlab/crates/definition/src/include.rs 2024/01/04 | 10782 | macros/latex/contrib/l3build/l3build-manifest-setup.lua 2024/01/04 | 1077 | support/texlab/crates/definition/src/string_ref.rs +2024/01/04 | 1077 | macros/luatex/generic/minim-xmp/README 2024/01/04 | 10754 | macros/latex/contrib/l3experimental/l3draw-transforms.dtx 2024/01/04 | 107383 | macros/latex/contrib/l3kernel/l3news09.tex 2024/01/04 | 1064 | support/texlab/crates/hover/src/string_ref.rs 2024/01/04 | 1058912 | systems/texlive/tlnet/archive/mcf2graph.doc.r69281.tar.xz 2024/01/04 | 105022 | macros/latex/contrib/l3kernel/l3fp-parse.dtx +2024/01/04 | 10500 | macros/luatex/generic/minim/minim-alloc.lua 2024/01/04 | 1049 | macros/latex/contrib/unbtex/unbtex-example/codigos/ModalReduction.jl +2024/01/04 | 10493 | macros/luatex/generic/minim-xmp/minim-xmp.doc 2024/01/04 | 1046 | support/texlab/crates/rename/src/lib.rs 2024/01/04 | 1044 | support/texlab/crates/hover/src/lib.rs 2024/01/04 | 10375 | macros/latex/contrib/l3backend/CHANGELOG.md @@ -1343,6 +1494,7 @@ 2024/01/03 | 63750412 | info/symbols/comprehensive.zip 2024/01/03 | 62500 | info/symbols/comprehensive/source/prune-idx 2024/01/03 | 5925 | info/symbols/comprehensive/source/prune-idx-rhombuses.toml +2024/01/03 | 581 | macros/latex/contrib/spbmark/README.md 2024/01/03 | 57155 | info/symbols/comprehensive/source/prune-idx-merge.toml 2024/01/03 | 56106 | macros/latex/contrib/profmaquette/doc/ProfMaquette-doc.tex 2024/01/03 | 5555 | info/symbols/comprehensive/source/patch-idx @@ -5274,625 +5426,3 @@ 2024/01/02 | 100296 | fonts/junicode/tfm/Junicode-ExpMediumItalic-lf-sc-t1.tfm 2024/01/02 | 100204 | fonts/junicode/tfm/Junicode-SmCondMedium-tlf-sc-t1.tfm 2024/01/02 | 100104 | fonts/junicode/tfm/Junicode-SmExpItalic-lf-sc-t1.tfm -2024/01/01 | 9939470 | support/latexindent/bin/windows/latexindent.exe -2024/01/01 | 991 | graphics/circuit_macros/examples/Byte.m4 -2024/01/01 | 98966 | graphics/circuit_macros/libgen.m4 -2024/01/01 | 988 | graphics/circuit_macros/examples/dpv/VariableDPV.m4 -2024/01/01 | 9869 | graphics/circuit_macros/examples/tubedefs.m4 -2024/01/01 | 9859 | support/latexindent/LatexIndent/Lines.pm -2024/01/01 | 983 | fonts/junicodevf/doc/encoded-glyphs.tex -2024/01/01 | 983 | fonts/junicode/doc/source/encoded-glyphs.tex -2024/01/01 | 983 | fonts/junicode/doc/encoded-glyphs.tex -2024/01/01 | 981 | graphics/circuit_macros/doc/EmarrowsMan.m4 -2024/01/01 | 980 | graphics/circuit_macros/examples/extras/Cylinder.m4 -2024/01/01 | 977 | graphics/circuit_macros/examples/Emarrows.m4 -2024/01/01 | 970 | graphics/circuit_macros/examples/extras/Bridge.m4 -2024/01/01 | 966 | graphics/circuit_macros/examples/dpv/ex15DPV.m4 -2024/01/01 | 953 | graphics/circuit_macros/examples/extras/squiggle.m4 -2024/01/01 | 95369 | graphics/circuit_macros/examples/mf/cct.mf -2024/01/01 | 947 | graphics/circuit_macros/examples/dpv/QuantumDPV.m4 -2024/01/01 | 944 | graphics/circuit_macros/doc/VariableMan.m4 -2024/01/01 | 937 | graphics/circuit_macros/examples/dpv/ByteDPV.m4 -2024/01/01 | 932 | graphics/circuit_macros/examples/Variable.m4 -2024/01/01 | 9252 | systems/texlive/tlnet/archive/versonotes.source.r69249.tar.xz -2024/01/01 | 918 | graphics/circuit_macros/examples/Quantum.m4 -2024/01/01 | 917 | graphics/circuit_macros/examples/extras/birds.m4 -2024/01/01 | 913 | graphics/circuit_macros/doc/heaterMan.m4 -2024/01/01 | 911212 | info/kaytannollista-latexia/kaytannollista-latexia.pdf -2024/01/01 | 901 | graphics/circuit_macros/examples/dpv/quickDPV.m4 -2024/01/01 | 8893 | support/latexindent/LatexIndent/IfElseFi.pm -2024/01/01 | 88544 | info/kaytannollista-latexia/luku-merkintakieli.tex -2024/01/01 | 881 | macros/latex/contrib/changebar/README -2024/01/01 | 8819 | support/latexindent/LatexIndent/FileExtension.pm -2024/01/01 | 8819 | graphics/circuit_macros/examples/Smithchart.m4 -2024/01/01 | 8810 | graphics/circuit_macros/examples/dpv/SmithchartDPV.m4 -2024/01/01 | 8796 | systems/texlive/tlnet/archive/beamer-rl.r69254.tar.xz -2024/01/01 | 865 | graphics/circuit_macros/examples/ex18.m4 -2024/01/01 | 855 | graphics/circuit_macros/examples/dpv/ex03DPV.m4 -2024/01/01 | 8517 | graphics/circuit_macros/examples/dpv/expDPV.m4 -2024/01/01 | 848561 | info/install-latex-guide-zh-cn.zip -2024/01/01 | 84848 | systems/texlive/tlnet/archive/decimalcomma.doc.r69251.tar.xz -2024/01/01 | 84212 | macros/unicodetex/latex/xgreek.zip -2024/01/01 | 838 | support/latexindent/LatexIndent/Version.pm -2024/01/01 | 8372 | graphics/circuit_macros/examples/exp.m4 -2024/01/01 | 835 | graphics/circuit_macros/doc/Opto.m4 -2024/01/01 | 8346 | support/latexindent/LatexIndent/Environment.pm -2024/01/01 | 831 | graphics/circuit_macros/doc/GroundsMan.m4 -2024/01/01 | 828 | graphics/circuit_macros/examples/Grounds.m4 -2024/01/01 | 810 | graphics/circuit_macros/examples/dpv/GroundsDPV.m4 -2024/01/01 | 801 | graphics/circuit_macros/doc/Potentiometers.m4 -2024/01/01 | 8006 | graphics/circuit_macros/examples/dpv/controlDPV.m4 -2024/01/01 | 793 | graphics/circuit_macros/examples/dpv/CountingDPV.m4 -2024/01/01 | 784 | graphics/circuit_macros/doc/MoreTableMan.m4 -2024/01/01 | 783 | graphics/circuit_macros/doc/Oblique.m4 -2024/01/01 | 7823 | graphics/circuit_macros/examples/extras/Clocks.m4 -2024/01/01 | 7778 | graphics/circuit_macros/examples/dpv/cscDPV.m4 -2024/01/01 | 774 | graphics/circuit_macros/examples/quick.m4 -2024/01/01 | 774 | graphics/circuit_macros/doc/quick.m4 -2024/01/01 | 7734 | graphics/circuit_macros/examples/csc.m4 -2024/01/01 | 772 | graphics/circuit_macros/examples/Incleps.m4 -2024/01/01 | 771 | graphics/circuit_macros/examples/extras/Attention.m4 -2024/01/01 | 7708 | graphics/circuit_macros/examples/shapes.m4 -2024/01/01 | 76685 | fonts/junicodevf/doc/Feature_Reference.tex -2024/01/01 | 76685 | fonts/junicode/doc/source/Feature_Reference.tex -2024/01/01 | 76685 | fonts/junicode/doc/Feature_Reference.tex -2024/01/01 | 765 | graphics/circuit_macros/examples/extras/FieldLines.m4 -2024/01/01 | 764 | graphics/circuit_macros/examples/mf/cct.tfm -2024/01/01 | 758 | graphics/circuit_macros/examples/dpv/Np.m4 -2024/01/01 | 7583 | graphics/circuit_macros/examples/extras/Chuck.m4 -2024/01/01 | 7546 | graphics/circuit_macros/examples/dpv/RectifiersDPV.m4 -2024/01/01 | 751 | support/texshop/README.txt -2024/01/01 | 749 | graphics/circuit_macros/examples/mpost/README-mpost -2024/01/01 | 7494 | graphics/circuit_macros/examples/dpv/shapesDPV.m4 -2024/01/01 | 747 | graphics/circuit_macros/examples/extras/SampleFlow.m4 -2024/01/01 | 745 | graphics/circuit_macros/examples/dpv/DecoderDPV.m4 -2024/01/01 | 7418 | graphics/circuit_macros/examples/dpv/CsourceDPV.m4 -2024/01/01 | 7379 | support/latexindent/LatexIndent/MandatoryArgument.pm -2024/01/01 | 7363 | graphics/circuit_macros/doc/SLDsMan.m4 -2024/01/01 | 7335 | fonts/junicodevf/doc/EnlargeAxis.tex -2024/01/01 | 7335 | fonts/junicode/doc/source/EnlargeAxis.tex -2024/01/01 | 7335 | fonts/junicode/doc/EnlargeAxis.tex -2024/01/01 | 72958 | macros/unicodetex/latex/xgreek/xgreek.pdf -2024/01/01 | 724 | graphics/circuit_macros/examples/extras/README_extras -2024/01/01 | 724 | graphics/circuit_macros/examples/Connectors.m4 -2024/01/01 | 7203 | graphics/circuit_macros/examples/dpv/lcctDPV.m4 -2024/01/01 | 7161 | support/latexindent/documentation/figure-schematic.png -2024/01/01 | 715 | graphics/circuit_macros/examples/psfrag/examplespsfrag.tex -2024/01/01 | 715 | graphics/circuit_macros/examples/dpv/ConnectorsDPV.m4 -2024/01/01 | 71295974 | support/texshop/texshop524.zip -2024/01/01 | 7127 | graphics/circuit_macros/examples/lcct.m4 -2024/01/01 | 710 | graphics/circuit_macros/examples/mpost/mptest -2024/01/01 | 709 | graphics/circuit_macros/examples/Inclpdf.m4 -2024/01/01 | 706 | graphics/circuit_macros/psfrag.m4 -2024/01/01 | 7032 | graphics/circuit_macros/examples/control.m4 -2024/01/01 | 7006 | graphics/circuit_macros/examples/Rectifiers.m4 -2024/01/01 | 6953 | support/latexindent/LatexIndent/TrailingComments.pm -2024/01/01 | 6922 | graphics/circuit_macros/examples/Dini.m4 -2024/01/01 | 6890 | support/latexindent/LatexIndent/Item.pm -2024/01/01 | 6854 | graphics/circuit_macros/examples/dpv/DiniDPV.m4 -2024/01/01 | 682 | graphics/circuit_macros/examples/dpv/ujtDPV.m4 -2024/01/01 | 68177 | support/latexindent/LatexIndent/AlignmentAtAmpersand.pm -2024/01/01 | 673 | graphics/circuit_macros/examples/ex03.m4 -2024/01/01 | 666 | graphics/circuit_macros/examples/extras/Pipe.m4 -2024/01/01 | 6664 | support/latexindent/documentation/contributors.bib -2024/01/01 | 6620 | support/latexindent/LatexIndent/OptionalArgument.pm -2024/01/01 | 660 | graphics/circuit_macros/examples/ujt.m4 -2024/01/01 | 660 | graphics/circuit_macros/doc/ujtMan.m4 -2024/01/01 | 657 | graphics/circuit_macros/examples/extras/PerpTo.m4 -2024/01/01 | 656 | graphics/circuit_macros/examples/extras/Zcos.m4 -2024/01/01 | 6567 | graphics/circuit_macros/examples/extras/Makefile -2024/01/01 | 655 | graphics/circuit_macros/examples/Decoder.m4 -2024/01/01 | 654 | graphics/circuit_macros/examples/diamond.m4 -2024/01/01 | 6467 | graphics/circuit_macros/examples/dpv/CanLogicDPV.m4 -2024/01/01 | 645 | graphics/circuit_macros/examples/extras/Floor.m4 -2024/01/01 | 6425 | graphics/circuit_macros/examples/CanLogic.m4 -2024/01/01 | 6402792 | support/latexindent/bin/macos/latexindent -2024/01/01 | 63 | graphics/circuit_macros/examples/dpv/local_init.m4 -2024/01/01 | 6391 | support/latexindent/LatexIndent/Else.pm -2024/01/01 | 6285 | graphics/circuit_macros/examples/dpv/EscherDPV.m4 -2024/01/01 | 6282 | graphics/circuit_macros/examples/Escher.m4 -2024/01/01 | 6277 | support/latexindent/LatexIndent/BackUpFileProcedure.pm -2024/01/01 | 6270 | graphics/circuit_macros/examples/ASME_Y14-5.m4def -2024/01/01 | 6252 | graphics/circuit_macros/examples/Plate.m4 -2024/01/01 | 6216 | graphics/circuit_macros/examples/dpv/LgateDPV.m4 -2024/01/01 | 6173556 | support/latexindent/bin/linux/latexindent -2024/01/01 | 6156 | graphics/circuit_macros/examples/dpv/PlateDPV.m4 -2024/01/01 | 614 | graphics/circuit_macros/doc/BigResistor.m4 -2024/01/01 | 6130 | graphics/circuit_macros/examples/dpv/Makefile -2024/01/01 | 61245 | support/latexindent/documentation/latexindent-yaml-schema.json -2024/01/01 | 609 | graphics/circuit_macros/examples/dpv/README_svg -2024/01/01 | 609 | graphics/circuit_macros/examples/dpv/diamondDPV.m4 -2024/01/01 | 6052 | systems/texlive/tlnet/archive/exesheet.r69252.tar.xz -2024/01/01 | 6003 | graphics/circuit_macros/examples/extras/CSlight.m4 -2024/01/01 | 59937 | fonts/junicodevf/doc/tag_key_ins.tex -2024/01/01 | 59937 | fonts/junicode/doc/tag_key_ins.tex -2024/01/01 | 59937 | fonts/junicode/doc/source/tag_key_ins.tex -2024/01/01 | 5969 | graphics/circuit_macros/examples/xfig/xfiglib.m4 -2024/01/01 | 591 | graphics/circuit_macros/examples/test.m4 -2024/01/01 | 588 | graphics/circuit_macros/doc/QTrans.m4 -2024/01/01 | 5889 | graphics/circuit_macros/examples/Csource.m4 -2024/01/01 | 5857 | support/latexindent/LatexIndent/UnNamedGroupingBracesBrackets.pm -2024/01/01 | 5851 | info/kaytannollista-latexia/README.md -2024/01/01 | 5730 | graphics/circuit_macros/examples/extras/Planes.m4 -2024/01/01 | 56 | graphics/circuit_macros/doc/opampex.m4 -2024/01/01 | 558 | graphics/circuit_macros/examples/extras/hsv.m4 -2024/01/01 | 555 | graphics/circuit_macros/examples/dpv/FontsDPV.m4 -2024/01/01 | 551 | graphics/circuit_macros/examples/extras/Counting.m4 -2024/01/01 | 5486 | graphics/circuit_macros/examples/graysurf.m4 -2024/01/01 | 5485 | graphics/circuit_macros/examples/rose.m4 -2024/01/01 | 5485 | graphics/circuit_macros/examples/dpv/roseDPV.m4 -2024/01/01 | 5478 | support/latexindent/LatexIndent/KeyEqualsValuesBraces.pm -2024/01/01 | 5469 | graphics/circuit_macros/examples/dpv/graysurfDPV.m4 -2024/01/01 | 54602 | support/latexindent/LatexIndent/GetYamlSettings.pm -2024/01/01 | 5432 | support/latexindent/LatexIndent/Check.pm -2024/01/01 | 542 | graphics/circuit_macros/doc/AmpTableMan.m4 -2024/01/01 | 5418 | graphics/circuit_macros/doc/fetMan.m4 -2024/01/01 | 5414 | graphics/circuit_macros/examples/fet.m4 -2024/01/01 | 539 | graphics/circuit_macros/examples/AmpTable.m4 -2024/01/01 | 538 | graphics/circuit_macros/examples/dpv/AmpTableDPV.m4 -2024/01/01 | 5365 | graphics/circuit_macros/examples/dpv/fetDPV.m4 -2024/01/01 | 535 | graphics/circuit_macros/doc/Tline.m4 -2024/01/01 | 532 | graphics/circuit_macros/examples/dpv/NLGDPV.m4 -2024/01/01 | 5228 | graphics/circuit_macros/examples/dpv/GeometryDPV.m4 -2024/01/01 | 520 | graphics/circuit_macros/examples/extras/Koch.m4 -2024/01/01 | 5201 | graphics/circuit_macros/examples/dpv/FlowDPV.m4 -2024/01/01 | 5174 | graphics/circuit_macros/examples/dpv/sfgDPV.m4 -2024/01/01 | 5102 | graphics/circuit_macros/examples/dpv/SwitchesDPV.m4 -2024/01/01 | 51001 | macros/latex/contrib/freealign/freealign.pdf -2024/01/01 | 50 | graphics/circuit_macros/doc/bitr.m4 -2024/01/01 | 5095 | graphics/circuit_macros/doc/Makefile -2024/01/01 | 5093 | graphics/circuit_macros/examples/Geometry.m4 -2024/01/01 | 50631 | graphics/circuit_macros/liblog.m4 -2024/01/01 | 499 | graphics/circuit_macros/examples/NLG.m4 -2024/01/01 | 499 | graphics/circuit_macros/doc/NLGMan.m4 -2024/01/01 | 497 | graphics/circuit_macros/examples/mpost/examplesmpost.tex -2024/01/01 | 4892 | graphics/circuit_macros/doc/Circuit_macros.bib -2024/01/01 | 4885 | graphics/circuit_macros/examples/EEP.m4 -2024/01/01 | 4860 | support/latexindent/LatexIndent/BlankLines.pm -2024/01/01 | 484332 | macros/latex/contrib/changebar/changebar.pdf -2024/01/01 | 483 | graphics/circuit_macros/doc/eboxdims.m4 -2024/01/01 | 48341 | macros/latex/contrib/freealign.zip -2024/01/01 | 4819 | graphics/circuit_macros/examples/Flow.m4 -2024/01/01 | 4784 | graphics/circuit_macros/examples/psfrag/Makefile -2024/01/01 | 4772 | graphics/circuit_macros/doc/SwitchesMan.m4 -2024/01/01 | 4767 | graphics/circuit_macros/examples/Switches.m4 -2024/01/01 | 475 | graphics/circuit_macros/examples/extras/Wheel.m4 -2024/01/01 | 4757 | graphics/circuit_macros/examples/dpv/EEPDPV.m4 -2024/01/01 | 4661 | graphics/circuit_macros/examples/extras/Shadow.m4 -2024/01/01 | 464 | graphics/circuit_macros/examples/tsttikz.tex -2024/01/01 | 4638 | graphics/circuit_macros/examples/Ball.m4 -2024/01/01 | 462 | graphics/circuit_macros/Copying -2024/01/01 | 4615 | graphics/circuit_macros/examples/mf/font.m4 -2024/01/01 | 460 | graphics/circuit_macros/examples/debug1.tex -2024/01/01 | 4568 | systems/texlive/tlnet/archive/decimalcomma.source.r69251.tar.xz -2024/01/01 | 455 | graphics/circuit_macros/doc/sampleIC.m4 -2024/01/01 | 45323 | graphics/circuit_macros/examples/Incl.eps.gz -2024/01/01 | 4502 | graphics/circuit_macros/examples/mpost/Makefile -2024/01/01 | 4501 | graphics/circuit_macros/examples/extras/Lyap.m4 -2024/01/01 | 449 | graphics/circuit_macros/examples/extras/Wheat.m4 -2024/01/01 | 449 | graphics/circuit_macros/doc/woodchips.m4 -2024/01/01 | 444 | graphics/circuit_macros/examples/dpv/RotboxDPV.m4 -2024/01/01 | 4446 | graphics/circuit_macros/examples/dpv/AlogixDPV.m4 -2024/01/01 | 443043 | support/latexindent/documentation/latexindent.tex -2024/01/01 | 44096 | support/latexindent/documentation/logo.png -2024/01/01 | 4404 | support/latexindent/LatexIndent/RoundBrackets.pm -2024/01/01 | 4402 | support/latexindent/documentation/latex-indent.bib -2024/01/01 | 4388 | support/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm -2024/01/01 | 4376 | graphics/circuit_macros/examples/dpv/slddiagsDPV.m4 -2024/01/01 | 435 | graphics/circuit_macros/examples/Rotbox.m4 -2024/01/01 | 4313 | graphics/circuit_macros/examples/ex09.m4 -2024/01/01 | 4292 | graphics/circuit_macros/examples/dpv/InclepsDPV.m4 -2024/01/01 | 4292 | graphics/circuit_macros/examples/dpv/BtreeDPV.m4 -2024/01/01 | 4241 | graphics/circuit_macros/examples/Alogix.m4 -2024/01/01 | 421 | graphics/circuit_macros/doc/Sinus.m4 -2024/01/01 | 419 | graphics/circuit_macros/examples/Sixpole.m4 -2024/01/01 | 419 | graphics/circuit_macros/examples/dpv/SixpoleDPV.m4 -2024/01/01 | 418 | graphics/circuit_macros/examples/mpost/tstmpost.tex -2024/01/01 | 417 | graphics/circuit_macros/examples/dpv/SQUIDDPV.m4 -2024/01/01 | 416 | graphics/circuit_macros/examples/testpdf.tex -2024/01/01 | 4165 | graphics/circuit_macros/examples/sfg.m4 -2024/01/01 | 41403 | graphics/circuit_macros/examples/Lettering.m4def -2024/01/01 | 4119 | graphics/circuit_macros/examples/dpv/ex09DPV.m4 -2024/01/01 | 4114 | graphics/circuit_macros/examples/extras/brace.m4 -2024/01/01 | 410 | graphics/circuit_macros/examples/extras/RandomNodes.m4 -2024/01/01 | 409 | graphics/circuit_macros/examples/tst.tex -2024/01/01 | 404 | graphics/circuit_macros/doc/Series.m4 -2024/01/01 | 4002 | graphics/circuit_macros/examples/extras/Euro.m4 -2024/01/01 | 3954 | macros/unicodetex/latex/xgreek/README -2024/01/01 | 3954 | graphics/circuit_macros/examples/PushPull.m4 -2024/01/01 | 387 | graphics/circuit_macros/doc/lrarrows.m4 -2024/01/01 | 3869 | graphics/circuit_macros/examples/ex05.m4 -2024/01/01 | 3848 | graphics/circuit_macros/examples/Mixer.m4 -2024/01/01 | 3825 | graphics/circuit_macros/examples/recycle.m4 -2024/01/01 | 3825 | graphics/circuit_macros/examples/dpv/recycleDPV.m4 -2024/01/01 | 380 | graphics/circuit_macros/examples/SQUID.m4 -2024/01/01 | 3794 | graphics/circuit_macros/INSTALL -2024/01/01 | 3778 | graphics/circuit_macros/examples/dpv/PushPullDPV.m4 -2024/01/01 | 3756 | graphics/circuit_macros/examples/dpv/randomDPV.m4 -2024/01/01 | 3749 | graphics/circuit_macros/examples/extras/Shaky.m4 -2024/01/01 | 3728793 | graphics/circuit_macros.zip -2024/01/01 | 3727 | graphics/circuit_macros/examples/random.m4 -2024/01/01 | 371 | graphics/circuit_macros/examples/psfrag/tstpsfrag.tex -2024/01/01 | 36811 | macros/unicodetex/latex/xgreek/xgreek.dtx -2024/01/01 | 365 | graphics/circuit_macros/examples/extras/rotellipse.m4 -2024/01/01 | 3646 | graphics/circuit_macros/examples/dpv/ContactDPV.m4 -2024/01/01 | 3631 | graphics/circuit_macros/examples/dpv/wormDPV.m4 -2024/01/01 | 3584 | systems/texlive/tlnet/archive/orcidlink.source.r69253.tar.xz -2024/01/01 | 3567 | graphics/circuit_macros/examples/dpv/ButtonsDPV.m4 -2024/01/01 | 3561 | graphics/circuit_macros/examples/dpv/ex05DPV.m4 -2024/01/01 | 353 | graphics/circuit_macros/examples/windows.m4 -2024/01/01 | 353 | graphics/circuit_macros/examples/dpv/windows.m4 -2024/01/01 | 3522 | graphics/circuit_macros/examples/dpv/ex12DPV.m4 -2024/01/01 | 35225 | support/latexindent/LatexIndent/Wrap.pm -2024/01/01 | 3517 | support/latexindent/LatexIndent/HorizontalWhiteSpace.pm -2024/01/01 | 3509 | support/latexindent/LatexIndent/Replacement.pm -2024/01/01 | 3509 | graphics/circuit_macros/examples/Buttons.m4 -2024/01/01 | 3489 | graphics/circuit_macros/examples/dpv/MixerDPV.m4 -2024/01/01 | 3473 | graphics/circuit_macros/examples/dpv/MCDPV.m4 -2024/01/01 | 3464 | graphics/circuit_macros/examples/Contact.m4 -2024/01/01 | 3415 | support/latexindent/latexindent.pl -2024/01/01 | 339 | macros/latex/contrib/changebar/CATALOG -2024/01/01 | 3391 | fonts/baskervaldx/README -2024/01/01 | 3388 | graphics/circuit_macros/examples/README-examples -2024/01/01 | 337 | graphics/circuit_macros/examples/xfig/Makefile -2024/01/01 | 3353 | support/latexindent/LatexIndent/Tokens.pm -2024/01/01 | 3346 | graphics/circuit_macros/examples/Windings.m4 -2024/01/01 | 3346 | graphics/circuit_macros/doc/WindingsMan.m4 -2024/01/01 | 3339 | graphics/circuit_macros/examples/ex12.m4 -2024/01/01 | 3326 | graphics/circuit_macros/doc/ContactMan.m4 -2024/01/01 | 3321 | graphics/circuit_macros/examples/thyristor.m4 -2024/01/01 | 3321 | graphics/circuit_macros/doc/thyristorMan.m4 -2024/01/01 | 3310 | graphics/circuit_macros/examples/dpv/thyristorDPV.m4 -2024/01/01 | 32 | graphics/circuit_macros/examples/Incl.eps.bb -2024/01/01 | 329 | graphics/circuit_macros/doc/FF.m4 -2024/01/01 | 32773 | graphics/circuit_macros/libSLD.m4 -2024/01/01 | 321049 | info/kaytannollista-latexia/luku-rakenne.tex -2024/01/01 | 3198 | graphics/circuit_macros/examples/Btree.m4 -2024/01/01 | 317 | graphics/circuit_macros/examples/psfrag/README-psfrag.txt -2024/01/01 | 3170 | fonts/junicodevf/doc/About.tex -2024/01/01 | 3170 | fonts/junicode/doc/source/About.tex -2024/01/01 | 3170 | fonts/junicode/doc/About.tex -2024/01/01 | 3091 | graphics/circuit_macros/examples/dpv/TtreeDPV.m4 -2024/01/01 | 3072 | graphics/circuit_macros/examples/extras/OneLine.m4 -2024/01/01 | 30451 | graphics/circuit_macros/examples/dpv/LoglogDPV.m4 -2024/01/01 | 3039 | info/kaytannollista-latexia/kirjallisuutta.bib -2024/01/01 | 3019 | graphics/circuit_macros/doc/Circuit_macros.tex -2024/01/01 | 3014 | graphics/circuit_macros/postscript.m4 -2024/01/01 | 2994 | graphics/circuit_macros/examples/dpv/WindingsDPV.m4 -2024/01/01 | 2989 | graphics/circuit_macros/examples/dpv/AutoencoderDPV.m4 -2024/01/01 | 2986 | graphics/circuit_macros/examples/MC.m4 -2024/01/01 | 29772 | graphics/circuit_macros/examples/Incl.pdf -2024/01/01 | 295 | graphics/circuit_macros/examples/extras/ShadeSector.m4 -2024/01/01 | 2920 | graphics/circuit_macros/doc/SourcesMan.m4 -2024/01/01 | 2914 | graphics/circuit_macros/examples/Sources.m4 -2024/01/01 | 2912 | graphics/circuit_macros/doc/Workflow.m4 -2024/01/01 | 2870 | support/texshop/texshop524.html -2024/01/01 | 2846 | graphics/circuit_macros/examples/extras/Metamodel.m4 -2024/01/01 | 2832 | systems/texlive/tlnet/archive/versonotes.r69249.tar.xz -2024/01/01 | 2801 | graphics/circuit_macros/examples/worm.m4 -2024/01/01 | 27 | info/kaytannollista-latexia/versio.tex -2024/01/01 | 2777 | graphics/circuit_macros/examples/extras/OpAmpFilter.m4 -2024/01/01 | 27422 | support/latexindent/LatexIndent/Verbatim.pm -2024/01/01 | 2733 | support/latexindent/LatexIndent/Preamble.pm -2024/01/01 | 2720 | graphics/circuit_macros/examples/dpv/AudioDPV.m4 -2024/01/01 | 2712 | support/latexindent/LatexIndent/Switches.pm -2024/01/01 | 27105 | graphics/circuit_macros/examples/Consumption.m4 -2024/01/01 | 26 | graphics/circuit_macros/doc/DCsymbol.m4 -2024/01/01 | 26 | graphics/circuit_macros/doc/ACsymbol.m4 -2024/01/01 | 269 | graphics/circuit_macros/doc/Loop.m4 -2024/01/01 | 2685 | graphics/circuit_macros/examples/dpv/ex11DPV.m4 -2024/01/01 | 26852 | systems/texlive/tlnet/archive/exesheet.source.r69252.tar.xz -2024/01/01 | 2661 | graphics/circuit_macros/doc/AudioMan.m4 -2024/01/01 | 2634 | graphics/circuit_macros/examples/Audio.m4 -2024/01/01 | 2633 | info/kaytannollista-latexia/luku-esipuhe.tex -2024/01/01 | 2629 | graphics/circuit_macros/examples/dpv/ex01DPV.m4 -2024/01/01 | 2562 | graphics/circuit_macros/examples/Crow.m4 -2024/01/01 | 2559 | graphics/circuit_macros/examples/dpv/ex08DPV.m4 -2024/01/01 | 2556 | graphics/circuit_macros/examples/ex08.m4 -2024/01/01 | 2551 | graphics/circuit_macros/examples/dpv/OptoisoDPV.m4 -2024/01/01 | 25334 | support/latexindent/LatexIndent/Document.pm -2024/01/01 | 2528 | graphics/circuit_macros/examples/dpv/AdderDPV.m4 -2024/01/01 | 2525 | graphics/circuit_macros/examples/dpv/CrowDPV.m4 -2024/01/01 | 252228 | systems/texlive/tlnet/archive/exesheet.doc.r69252.tar.xz -2024/01/01 | 2518 | graphics/circuit_macros/pdf.m4 -2024/01/01 | 2517 | graphics/circuit_macros/examples/extras/Autoencoder.m4 -2024/01/01 | 25126 | graphics/circuit_macros/examples/dpv/examplesDPVs.htmx -2024/01/01 | 25122 | graphics/circuit_macros/examples/dpv/examplesDPV.htmx -2024/01/01 | 2496 | graphics/circuit_macros/examples/extras/ClassDAmp.m4 -2024/01/01 | 2469 | graphics/circuit_macros/examples/dpv/SourcesDPV.m4 -2024/01/01 | 245 | graphics/circuit_macros/examples/extras/Ccurve.m4 -2024/01/01 | 24449 | support/latexindent/LatexIndent/Arguments.pm -2024/01/01 | 2443 | graphics/circuit_macros/examples/dpv/ex00DPV.m4 -2024/01/01 | 2442 | graphics/circuit_macros/examples/Optoiso.m4 -2024/01/01 | 2427 | graphics/circuit_macros/doc/AlogixMan.m4 -2024/01/01 | 2412 | graphics/circuit_macros/examples/ex00.m4 -2024/01/01 | 2402 | graphics/circuit_macros/examples/Adder.m4 -2024/01/01 | 2389 | graphics/circuit_macros/doc/Dac.m4 -2024/01/01 | 2385 | graphics/circuit_macros/examples/extras/Highgain.m4 -2024/01/01 | 23704 | graphics/circuit_macros/examples/dpv/UNODPV.m4 -2024/01/01 | 23673 | graphics/circuit_macros/dpictools.pic -2024/01/01 | 2362 | graphics/circuit_macros/examples/Jack.m4 -2024/01/01 | 2362 | graphics/circuit_macros/doc/JackMan.m4 -2024/01/01 | 2361 | graphics/circuit_macros/examples/ex11.m4 -2024/01/01 | 2353 | graphics/circuit_macros/doc/ConnMan.m4 -2024/01/01 | 2351 | graphics/circuit_macros/examples/Conn.m4 -2024/01/01 | 233384 | systems/texlive/tlnet/archive/beamer-rl.doc.r69254.tar.xz -2024/01/01 | 23219 | graphics/circuit_macros/examples/UNO.m4 -2024/01/01 | 2320 | support/latexindent/LatexIndent/Logger.pm -2024/01/01 | 2304 | graphics/circuit_macros/examples/Loglog.m4 -2024/01/01 | 2294 | graphics/circuit_macros/examples/ex01.m4 -2024/01/01 | 2292 | graphics/circuit_macros/examples/dpv/ConnDPV.m4 -2024/01/01 | 22321 | support/latexindent/LatexIndent/Sentence.pm -2024/01/01 | 2222183 | fonts/baskervaldx.zip -2024/01/01 | 22214 | support/latexindent/defaultSettings.yaml -2024/01/01 | 221 | graphics/circuit_macros/examples/rotate.tex -2024/01/01 | 219 | graphics/circuit_macros/examples/tst1.tex -2024/01/01 | 21932 | fonts/baskervaldx/map/Baskervaldx.map -2024/01/01 | 217 | graphics/circuit_macros/doc/stringdims.m4 -2024/01/01 | 2171 | graphics/circuit_macros/examples/dpv/I2LDPV.m4 -2024/01/01 | 2167 | graphics/circuit_macros/examples/extras/Obliq.m4 -2024/01/01 | 2159 | graphics/circuit_macros/doc/relaycoilMan.m4 -2024/01/01 | 21471 | graphics/circuit_macros/examples/xfig/xfiglib.fig -2024/01/01 | 21384 | graphics/circuit_macros/examples/dpv/Incl.jpg -2024/01/01 | 21322 | info/kaytannollista-latexia/luku-erikoiset.tex -2024/01/01 | 2119 | graphics/circuit_macros/examples/Logic.m4 -2024/01/01 | 2119 | graphics/circuit_macros/doc/LogicMan.m4 -2024/01/01 | 2099 | graphics/circuit_macros/pstricks.m4 -2024/01/01 | 20870 | support/latexindent/LatexIndent/Indent.pm -2024/01/01 | 2086 | graphics/circuit_macros/examples/relaycoil.m4 -2024/01/01 | 2086 | graphics/circuit_macros/examples/extras/Eye.m4 -2024/01/01 | 2085 | graphics/circuit_macros/pgf.m4 -2024/01/01 | 20785 | info/kaytannollista-latexia/luku-valmistautuminen.tex -2024/01/01 | 2069 | graphics/circuit_macros/examples/dpv/relaycoilDPV.m4 -2024/01/01 | 2068 | graphics/circuit_macros/examples/I2L.m4 -2024/01/01 | 2051 | graphics/circuit_macros/examples/dpv/JackDPV.m4 -2024/01/01 | 2027 | graphics/circuit_macros/examples/dpv/pwrsupplyDPV.m4 -2024/01/01 | 2018 | graphics/circuit_macros/examples/dpv/ex06DPV.m4 -2024/01/01 | 2014 | graphics/circuit_macros/examples/pwrsupply.m4 -2024/01/01 | 2013 | graphics/circuit_macros/doc/HybridPi.m4 -2024/01/01 | 2008 | support/latexindent/README -2024/01/01 | 20011 | graphics/circuit_macros/darrow.m4 -2024/01/01 | 2000 | graphics/circuit_macros/examples/ex21.m4 -2024/01/01 | 19986 | graphics/circuit_macros/examples/files.tex -2024/01/01 | 1997 | graphics/circuit_macros/examples/Pconn.m4 -2024/01/01 | 1996 | graphics/circuit_macros/examples/dpv/FourbarDPV.m4 -2024/01/01 | 1995 | graphics/circuit_macros/doc/Corners.m4 -2024/01/01 | 1990 | graphics/circuit_macros/examples/extras/Hexagon.m4 -2024/01/01 | 1986 | graphics/circuit_macros/doc/PconnMan.m4 -2024/01/01 | 1985 | graphics/circuit_macros/examples/dpv/XORDPV.m4 -2024/01/01 | 1980 | graphics/circuit_macros/examples/MoreTable.m4 -2024/01/01 | 1975 | graphics/circuit_macros/doc/FlipFlop.m4 -2024/01/01 | 1967 | graphics/circuit_macros/examples/extras/Flow2.m4 -2024/01/01 | 1967 | graphics/circuit_macros/doc/Buffer.m4 -2024/01/01 | 1966 | graphics/circuit_macros/examples/Drive.m4 -2024/01/01 | 1966 | graphics/circuit_macros/examples/dpv/DriveDPV.m4 -2024/01/01 | 1959 | graphics/circuit_macros/examples/debug2.m4 -2024/01/01 | 1955 | graphics/circuit_macros/examples/dpv/ABlogixDPV.m4 -2024/01/01 | 1953 | graphics/circuit_macros/examples/dpv/MotorControlDPV.m4 -2024/01/01 | 1940 | macros/latex/contrib/freealign/freealign.sty -2024/01/01 | 1931 | graphics/circuit_macros/examples/dpv/LogicDPV.m4 -2024/01/01 | 1922 | graphics/circuit_macros/examples/MotorControl.m4 -2024/01/01 | 19176 | graphics/circuit_macros/Licence.txt -2024/01/01 | 1917517 | graphics/circuit_macros/examples/examples.pdf -2024/01/01 | 1916 | graphics/circuit_macros/examples/extras/venus.m4 -2024/01/01 | 1906 | graphics/circuit_macros/examples/extras/SPM.m4 -2024/01/01 | 1900 | graphics/circuit_macros/mpost.m4 -2024/01/01 | 1894 | macros/latex/contrib/freealign/freealign.tex -2024/01/01 | 1894 | graphics/circuit_macros/examples/dpv/ArrowFnDPV.m4 -2024/01/01 | 1893 | graphics/circuit_macros/examples/dpv/ex16DPV.m4 -2024/01/01 | 189278 | graphics/circuit_macros/libcct.m4 -2024/01/01 | 1891 | graphics/circuit_macros/examples/dpv/ex04DPV.m4 -2024/01/01 | 1882 | graphics/circuit_macros/examples/dpv/ex21DPV.m4 -2024/01/01 | 1880 | graphics/circuit_macros/examples/extras/Fefets.m4 -2024/01/01 | 1879 | graphics/circuit_macros/examples/extras/Cruller.m4 -2024/01/01 | 1875 | graphics/circuit_macros/examples/dpv/GrayCodeDPV.m4 -2024/01/01 | 1874 | graphics/circuit_macros/examples/dpv/CrullerDPV.m4 -2024/01/01 | 18709 | fonts/junicodevf/doc/Record_Interpreter_notes.tex -2024/01/01 | 18709 | fonts/junicode/doc/source/Record_Interpreter_notes.tex -2024/01/01 | 18709 | fonts/junicode/doc/Record_Interpreter_notes.tex -2024/01/01 | 1865 | graphics/circuit_macros/examples/ex16.m4 -2024/01/01 | 1860 | graphics/circuit_macros/doc/bi_trans.m4 -2024/01/01 | 18591 | support/latexindent/LatexIndent/ModifyLineBreaks.pm -2024/01/01 | 1857 | graphics/circuit_macros/doc/Composite.m4 -2024/01/01 | 1852 | graphics/circuit_macros/examples/extras/Orbits.m4 -2024/01/01 | 1837 | graphics/circuit_macros/examples/dpv/SchottkyDPV.m4 -2024/01/01 | 1823 | graphics/circuit_macros/examples/XOR.m4 -2024/01/01 | 1818 | graphics/circuit_macros/examples/GrayCode.m4 -2024/01/01 | 1812 | graphics/circuit_macros/examples/dpv/BipDPV.m4 -2024/01/01 | 1803 | graphics/circuit_macros/examples/dpv/ArrestersDPV.m4 -2024/01/01 | 1795 | graphics/circuit_macros/examples/extras/Stator.m4 -2024/01/01 | 1790 | graphics/circuit_macros/doc/DiodesMan.m4 -2024/01/01 | 1787 | graphics/circuit_macros/examples/Diodes.m4 -2024/01/01 | 1786 | graphics/circuit_macros/examples/extras/ArrowFn.m4 -2024/01/01 | 178512 | systems/texlive/tlnet/archive/orcidlink.doc.r69253.tar.xz -2024/01/01 | 1781 | graphics/circuit_macros/examples/dpv/PconnDPV.m4 -2024/01/01 | 1778 | graphics/circuit_macros/examples/Schottky.m4 -2024/01/01 | 1756 | systems/texlive/tlnet/archive/orcidlink.r69253.tar.xz -2024/01/01 | 173 | graphics/circuit_macros/doc/AutologixMan.m4 -2024/01/01 | 1737 | graphics/circuit_macros/examples/dpv/ContactsDPV.m4 -2024/01/01 | 1730 | graphics/circuit_macros/examples/ABlogix.m4 -2024/01/01 | 1727 | graphics/circuit_macros/doc/ArrestersMan.m4 -2024/01/01 | 1724 | graphics/circuit_macros/examples/Arresters.m4 -2024/01/01 | 1716 | graphics/circuit_macros/examples/dpv/MoreTableDPV.m4 -2024/01/01 | 1700 | graphics/circuit_macros/examples/ex06.m4 -2024/01/01 | 1700 | graphics/circuit_macros/examples/dpv/EyeDPV.m4 -2024/01/01 | 1699 | graphics/circuit_macros/examples/dpv/ex10DPV.m4 -2024/01/01 | 1691312 | macros/latex/contrib/amnestyreport.zip -2024/01/01 | 1668 | graphics/circuit_macros/examples/extras/IC10107.m4 -2024/01/01 | 1668 | graphics/circuit_macros/examples/dpv/Banking.m4 -2024/01/01 | 165 | graphics/circuit_macros/doc/tranbody.m4 -2024/01/01 | 1654 | graphics/circuit_macros/examples/ex04.m4 -2024/01/01 | 1647 | graphics/circuit_macros/examples/dpv/DiodesDPV.m4 -2024/01/01 | 1639 | graphics/circuit_macros/Makefile -2024/01/01 | 1630 | graphics/circuit_macros/examples/dpv/TTLnandDPV.m4 -2024/01/01 | 1624 | graphics/circuit_macros/doc/ParSeries.m4 -2024/01/01 | 1619 | graphics/circuit_macros/examples/Bip.m4 -2024/01/01 | 1619 | graphics/circuit_macros/doc/BipMan.m4 -2024/01/01 | 1613 | graphics/circuit_macros/examples/examples.tex -2024/01/01 | 1612 | graphics/circuit_macros/examples/extras/ASMEbox.m4 -2024/01/01 | 1612 | graphics/circuit_macros/examples/dpv/TimerDPV.m4 -2024/01/01 | 1607 | macros/unicodetex/latex/xgreek/xgreek.ins -2024/01/01 | 160379 | graphics/circuit_macros/doc/body.tex -2024/01/01 | 1585 | graphics/circuit_macros/examples/Contacts.m4 -2024/01/01 | 1585 | graphics/circuit_macros/doc/ContactsMan.m4 -2024/01/01 | 15764 | graphics/circuit_macros/README -2024/01/01 | 1575 | graphics/circuit_macros/doc/mplex.m4 -2024/01/01 | 1575474 | fonts/junicodevf/doc/JunicodeManual.pdf -2024/01/01 | 1575474 | fonts/junicode/doc/JunicodeManual.pdf -2024/01/01 | 1559 | graphics/circuit_macros/examples/dpv/XformDPV.m4 -2024/01/01 | 1558 | support/latexindent/latexindent-module-installer.pl -2024/01/01 | 1558 | graphics/circuit_macros/examples/TTLnand.m4 -2024/01/01 | 1546 | graphics/circuit_macros/examples/dpv/Xtest.m4 -2024/01/01 | 1536 | graphics/circuit_macros/doc/XformMan.m4 -2024/01/01 | 1526 | graphics/circuit_macros/examples/Xform.m4 -2024/01/01 | 1525 | graphics/circuit_macros/examples/rotatetext.m4 -2024/01/01 | 1525 | graphics/circuit_macros/examples/Opamp.m4 -2024/01/01 | 1524 | graphics/circuit_macros/doc/OpampMan.m4 -2024/01/01 | 15141 | graphics/circuit_macros/examples/EVplugs.m4 -2024/01/01 | 15141 | graphics/circuit_macros/examples/dpv/EVplugsDPV.m4 -2024/01/01 | 150 | graphics/circuit_macros/doc/Thermal.m4 -2024/01/01 | 1500 | support/latexindent/LatexIndent/DoubleBackSlash.pm -2024/01/01 | 1492 | graphics/circuit_macros/examples/ex10.m4 -2024/01/01 | 1485 | graphics/circuit_macros/examples/Demultiplexer.m4 -2024/01/01 | 1485 | graphics/circuit_macros/doc/DemultiplexerMan.m4 -2024/01/01 | 1471 | graphics/circuit_macros/examples/extras/TR_fill.m4 -2024/01/01 | 1463 | graphics/circuit_macros/doc/Taps.m4 -2024/01/01 | 1461 | graphics/circuit_macros/examples/mf/Makefile -2024/01/01 | 1458 | graphics/circuit_macros/examples/header.tex -2024/01/01 | 14589 | graphics/circuit_macros/CHANGES -2024/01/01 | 1443 | graphics/circuit_macros/examples/Inductors.m4 -2024/01/01 | 1443 | graphics/circuit_macros/examples/extras/Resolver.m4 -2024/01/01 | 14398 | fonts/junicodevf/doc/JunicodeManual.sty -2024/01/01 | 14398 | fonts/junicode/doc/source/JunicodeManual.sty -2024/01/01 | 14398 | fonts/junicode/doc/JunicodeManual.sty -2024/01/01 | 14365 | info/kaytannollista-latexia/kaytannollista-latexia.tex -2024/01/01 | 1431 | graphics/circuit_macros/examples/dpv/RelayDPV.m4 -2024/01/01 | 1419 | graphics/circuit_macros/examples/shadowed.m4 -2024/01/01 | 1406 | graphics/circuit_macros/examples/ShiftR.m4 -2024/01/01 | 1406 | graphics/circuit_macros/doc/ShiftRMan.m4 -2024/01/01 | 14065 | graphics/circuit_macros/examples/dpv/tstDPV.htmx -2024/01/01 | 1405 | graphics/circuit_macros/examples/dpv/OpampDPV.m4 -2024/01/01 | 1403 | graphics/circuit_macros/examples/dpv/MultiplexerDPV.m4 -2024/01/01 | 1400 | graphics/circuit_macros/examples/Multiplexer.m4 -2024/01/01 | 1400 | graphics/circuit_macros/doc/MultiplexerMan.m4 -2024/01/01 | 13 | graphics/circuit_macros/doc/Version.tex -2024/01/01 | 13935 | support/latexindent/LatexIndent/Special.pm -2024/01/01 | 137 | graphics/circuit_macros/doc/opampexbody.m4 -2024/01/01 | 1377 | graphics/circuit_macros/doc/FusesMan.m4 -2024/01/01 | 1375 | graphics/circuit_macros/examples/extras/ControlLoop.m4 -2024/01/01 | 1373 | graphics/circuit_macros/examples/Fuses.m4 -2024/01/01 | 1373 | graphics/circuit_macros/examples/extras/person.m4 -2024/01/01 | 1373 | graphics/circuit_macros/examples/dpv/DemultiplexerDPV.m4 -2024/01/01 | 13470 | support/latexindent/LatexIndent/HiddenChildren.pm -2024/01/01 | 1343 | graphics/circuit_macros/examples/dpv/InductorsDPV.m4 -2024/01/01 | 13435 | support/latexindent/LatexIndent/LogFile.pm -2024/01/01 | 1342 | graphics/circuit_macros/doc/InductorsMan.m4 -2024/01/01 | 13420 | graphics/circuit_macros/examples/Heathkit.m4 -2024/01/01 | 1334 | graphics/circuit_macros/examples/dpv/ThreeDPV.m4 -2024/01/01 | 133277 | macros/latex/contrib/changebar/changebar.dtx -2024/01/01 | 1331 | graphics/circuit_macros/examples/Sierpinski.m4 -2024/01/01 | 1331 | graphics/circuit_macros/examples/dpv/SierpinskiDPV.m4 -2024/01/01 | 1329 | graphics/circuit_macros/doc/currents.m4 -2024/01/01 | 13294 | graphics/circuit_macros/examples/Tubediags.m4 -2024/01/01 | 131 | graphics/circuit_macros/doc/Axes.m4 -2024/01/01 | 1319 | graphics/circuit_macros/doc/SRffMan.m4 -2024/01/01 | 1313 | graphics/circuit_macros/examples/dpv/ShiftRDPV.m4 -2024/01/01 | 131374 | graphics/circuit_macros/doc/defines.tex -2024/01/01 | 130 | graphics/circuit_macros/doc/bitrbody.m4 -2024/01/01 | 130477 | info/kaytannollista-latexia/luku-asetukset.tex -2024/01/01 | 1292 | graphics/circuit_macros/doc/ConfigC.m4 -2024/01/01 | 1286 | graphics/circuit_macros/examples/dpv/FusesDPV.m4 -2024/01/01 | 1284 | fonts/junicodevf/doc/JunicodeManual.tex -2024/01/01 | 1284 | fonts/junicode/doc/source/JunicodeManual.tex -2024/01/01 | 1284 | fonts/junicode/doc/JunicodeManual.tex -2024/01/01 | 1280662 | support/latexindent/documentation/latexindent.pdf -2024/01/01 | 1279 | graphics/circuit_macros/examples/extras/Star.m4 -2024/01/01 | 12765 | graphics/circuit_macros/lib3D.m4 -2024/01/01 | 12711 | graphics/circuit_macros/examples/dpv/HeathkitDPV.m4 -2024/01/01 | 1265 | graphics/circuit_macros/examples/dpv/HeadersDPV.m4 -2024/01/01 | 12653 | support/latexindent/LatexIndent/Braces.pm -2024/01/01 | 12648 | info/kaytannollista-latexia/tavutusvihjeet.tex -2024/01/01 | 1259 | graphics/circuit_macros/examples/Relay.m4 -2024/01/01 | 1259 | graphics/circuit_macros/doc/RelayMan.m4 -2024/01/01 | 1258 | graphics/circuit_macros/doc/ConfigB.m4 -2024/01/01 | 12478 | graphics/circuit_macros/examples/dpv/TubediagsDPV.m4 -2024/01/01 | 12425816 | support/latexindent.zip -2024/01/01 | 1238 | graphics/circuit_macros/examples/dpv/NportDPV.m4 -2024/01/01 | 1236 | systems/texlive/tlnet/archive/decimalcomma.r69251.tar.xz -2024/01/01 | 12366 | info/kaytannollista-latexia/luku-muuta.tex -2024/01/01 | 123332 | systems/texlive/tlnet/archive/versonotes.doc.r69249.tar.xz -2024/01/01 | 1230 | graphics/circuit_macros/examples/Antennas.m4 -2024/01/01 | 1230 | graphics/circuit_macros/doc/AntennasMan.m4 -2024/01/01 | 1229 | graphics/circuit_macros/doc/fbfilter.m4 -2024/01/01 | 1222 | graphics/circuit_macros/examples/Chips.m4 -2024/01/01 | 1217 | graphics/circuit_macros/examples/extras/Egg.m4 -2024/01/01 | 1214 | graphics/circuit_macros/examples/dpv/ChipsDPV.m4 -2024/01/01 | 12124 | graphics/circuit_macros/svg.m4 -2024/01/01 | 12093 | fonts/junicodevf/doc/dns.png -2024/01/01 | 12093 | fonts/junicode/doc/source/dns.png -2024/01/01 | 12093 | fonts/junicode/doc/dns.png -2024/01/01 | 1204 | graphics/circuit_macros/examples/dpv/ex17DPV.m4 -2024/01/01 | 1203 | graphics/circuit_macros/examples/Three.m4 -2024/01/01 | 1201 | graphics/circuit_macros/examples/Capacitors.m4 -2024/01/01 | 1190 | graphics/circuit_macros/examples/dpv/ResistorsDPV.m4 -2024/01/01 | 1185 | graphics/circuit_macros/boxdims.sty -2024/01/01 | 11836 | fonts/junicodevf/doc/GettingStarted.tex -2024/01/01 | 11836 | fonts/junicode/doc/source/GettingStarted.tex -2024/01/01 | 11836 | fonts/junicode/doc/GettingStarted.tex -2024/01/01 | 11830 | fonts/junicodevf/doc/Specimens.tex -2024/01/01 | 11830 | fonts/junicode/doc/Specimens.tex -2024/01/01 | 11830 | fonts/junicode/doc/source/Specimens.tex -2024/01/01 | 11801 | macros/latex/contrib/changebar/changebar.bug -2024/01/01 | 1174 | graphics/circuit_macros/examples/extras/PPA.m4 -2024/01/01 | 1160 | graphics/circuit_macros/examples/dpv/CapacitorsDPV.m4 -2024/01/01 | 11601 | graphics/circuit_macros/examples/dpv/icsDPV.m4 -2024/01/01 | 1157 | graphics/circuit_macros/examples/dpv/NPDTDPV.m4 -2024/01/01 | 1151 | graphics/circuit_macros/doc/Darlington.m4 -2024/01/01 | 11509 | support/latexindent/LatexIndent/FileContents.pm -2024/01/01 | 1149 | graphics/circuit_macros/doc/ResistorsMan.m4 -2024/01/01 | 1147 | graphics/circuit_macros/examples/Resistors.m4 -2024/01/01 | 11440 | graphics/circuit_macros/examples/ics.m4 -2024/01/01 | 1132 | graphics/circuit_macros/examples/Headers.m4 -2024/01/01 | 1132 | graphics/circuit_macros/doc/HeadersMan.m4 -2024/01/01 | 1128 | graphics/circuit_macros/examples/NPDT.m4 -2024/01/01 | 1128 | graphics/circuit_macros/doc/NPDTMan.m4 -2024/01/01 | 1126 | graphics/circuit_macros/examples/ex17.m4 -2024/01/01 | 1121 | graphics/circuit_macros/doc/ConfigA.m4 -2024/01/01 | 11206 | support/latexindent/LatexIndent/Heading.pm -2024/01/01 | 11193 | graphics/circuit_macros/examples/FlowchartDefs.m4def -2024/01/01 | 1114 | graphics/circuit_macros/mfpic.m4 -2024/01/01 | 1102 | graphics/circuit_macros/doc/Flowdiag.m4 -2024/01/01 | 1100 | graphics/circuit_macros/examples/ex02.m4 -2024/01/01 | 1097 | graphics/circuit_macros/examples/extras/Region.m4 -2024/01/01 | 1093 | graphics/circuit_macros/examples/dpv/ex02DPV.m4 -2024/01/01 | 1091 | graphics/circuit_macros/examples/extras/Ant.m4 -2024/01/01 | 1090 | graphics/circuit_macros/examples/dpv/AntennasDPV.m4 -2024/01/01 | 1089 | graphics/circuit_macros/examples/extras/Optics.m4 -2024/01/01 | 1086791 | graphics/circuit_macros/doc/Circuit_macros.pdf -2024/01/01 | 1085 | graphics/circuit_macros/examples/mf/mftest -2024/01/01 | 1075 | graphics/circuit_macros/examples/extras/bistable.m4 -2024/01/01 | 1074 | graphics/circuit_macros/doc/bistableMan.m4 -2024/01/01 | 10721 | fonts/junicodevf/doc/OnTheWeb.tex -2024/01/01 | 10721 | fonts/junicode/doc/source/OnTheWeb.tex -2024/01/01 | 10721 | fonts/junicode/doc/OnTheWeb.tex -2024/01/01 | 1071 | graphics/circuit_macros/examples/dpv/EmarrowsDPV.m4 -2024/01/01 | 10699 | graphics/circuit_macros/examples/keyboard.m4 -2024/01/01 | 10699 | graphics/circuit_macros/examples/dpv/keyboardDPV.m4 -2024/01/01 | 1065 | graphics/circuit_macros/examples/dpv/ex18DPV.m4 -2024/01/01 | 10648 | support/latexindent/LatexIndent/Command.pm -2024/01/01 | 1064123 | info/kaytannollista-latexia.zip -2024/01/01 | 1063 | graphics/circuit_macros/doc/CapacitorsMan.m4 -2024/01/01 | 1055 | graphics/circuit_macros/examples/dpv/TgateDPV.m4 -2024/01/01 | 1050 | graphics/circuit_macros/examples/dpv/DPVconfig.m4 -2024/01/01 | 1040 | graphics/circuit_macros/examples/Nport.m4 -2024/01/01 | 1040 | graphics/circuit_macros/doc/NportMan.m4 -2024/01/01 | 1039 | graphics/circuit_macros/examples/extras/chaos.m4 -2024/01/01 | 1029 | graphics/circuit_macros/xfig.m4 -2024/01/01 | 10265 | graphics/circuit_macros/examples/extras/Views.m4 -2024/01/01 | 10238 | graphics/circuit_macros/examples/dpv/paletteDPV.m4 -2024/01/01 | 1022 | graphics/circuit_macros/examples/Tgate.m4 -2024/01/01 | 1022 | graphics/circuit_macros/doc/TgateMan.m4 -2024/01/01 | 10207 | graphics/circuit_macros/examples/Makefile -2024/01/01 | 1019 | graphics/circuit_macros/gpic.m4 -2024/01/01 | 1017 | graphics/circuit_macros/doc/arrowex.m4 -2024/01/01 | 1003 | graphics/circuit_macros/examples/ex15.m4 diff --git a/biblio/bibtex/contrib/iran-bibtex/LICENSE.txt b/biblio/bibtex/contrib/iran-bibtex/LICENSE.txt new file mode 100644 index 0000000000..1b57559a83 --- /dev/null +++ b/biblio/bibtex/contrib/iran-bibtex/LICENSE.txt @@ -0,0 +1,416 @@ +The LaTeX Project Public License +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + +LPPL Version 1.3c 2008-05-04 + +Copyright 1999 2002-2008 LaTeX3 Project + Everyone is allowed to distribute verbatim copies of this + license document, but modification of it is not allowed. + + +PREAMBLE +======== + +The LaTeX Project Public License (LPPL) is the primary license under +which the LaTeX kernel and the base LaTeX packages are distributed. + +You may use this license for any work of which you hold the copyright +and which you wish to distribute. This license may be particularly +suitable if your work is TeX-related (such as a LaTeX package), but +it is written in such a way that you can use it even if your work is +unrelated to TeX. + +The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE', +below, gives instructions, examples, and recommendations for authors +who are considering distributing their works under this license. + +This license gives conditions under which a work may be distributed +and modified, as well as conditions under which modified versions of +that work may be distributed. + +We, the LaTeX3 Project, believe that the conditions below give you +the freedom to make and distribute modified versions of your work +that conform with whatever technical specifications you wish while +maintaining the availability, integrity, and reliability of +that work. If you do not see how to achieve your goal while +meeting these conditions, then read the document `cfgguide.tex' +and `modguide.tex' in the base LaTeX distribution for suggestions. + + +DEFINITIONS +=========== + +In this license document the following terms are used: + + `Work' + Any work being distributed under this License. + + `Derived Work' + Any work that under any applicable law is derived from the Work. + + `Modification' + Any procedure that produces a Derived Work under any applicable + law -- for example, the production of a file containing an + original file associated with the Work or a significant portion of + such a file, either verbatim or with modifications and/or + translated into another language. + + `Modify' + To apply any procedure that produces a Derived Work under any + applicable law. + + `Distribution' + Making copies of the Work available from one person to another, in + whole or in part. Distribution includes (but is not limited to) + making any electronic components of the Work accessible by + file transfer protocols such as FTP or HTTP or by shared file + systems such as Sun's Network File System (NFS). + + `Compiled Work' + A version of the Work that has been processed into a form where it + is directly usable on a computer system. This processing may + include using installation facilities provided by the Work, + transformations of the Work, copying of components of the Work, or + other activities. Note that modification of any installation + facilities provided by the Work constitutes modification of the Work. + + `Current Maintainer' + A person or persons nominated as such within the Work. If there is + no such explicit nomination then it is the `Copyright Holder' under + any applicable law. + + `Base Interpreter' + A program or process that is normally needed for running or + interpreting a part or the whole of the Work. + + A Base Interpreter may depend on external components but these + are not considered part of the Base Interpreter provided that each + external component clearly identifies itself whenever it is used + interactively. Unless explicitly specified when applying the + license to the Work, the only applicable Base Interpreter is a + `LaTeX-Format' or in the case of files belonging to the + `LaTeX-format' a program implementing the `TeX language'. + + + +CONDITIONS ON DISTRIBUTION AND MODIFICATION +=========================================== + +1. Activities other than distribution and/or modification of the Work +are not covered by this license; they are outside its scope. In +particular, the act of running the Work is not restricted and no +requirements are made concerning any offers of support for the Work. + +2. You may distribute a complete, unmodified copy of the Work as you +received it. Distribution of only part of the Work is considered +modification of the Work, and no right to distribute such a Derived +Work may be assumed under the terms of this clause. + +3. You may distribute a Compiled Work that has been generated from a +complete, unmodified copy of the Work as distributed under Clause 2 +above, as long as that Compiled Work is distributed in such a way that +the recipients may install the Compiled Work on their system exactly +as it would have been installed if they generated a Compiled Work +directly from the Work. + +4. If you are the Current Maintainer of the Work, you may, without +restriction, modify the Work, thus creating a Derived Work. You may +also distribute the Derived Work without restriction, including +Compiled Works generated from the Derived Work. Derived Works +distributed in this manner by the Current Maintainer are considered to +be updated versions of the Work. + +5. If you are not the Current Maintainer of the Work, you may modify +your copy of the Work, thus creating a Derived Work based on the Work, +and compile this Derived Work, thus creating a Compiled Work based on +the Derived Work. + +6. If you are not the Current Maintainer of the Work, you may +distribute a Derived Work provided the following conditions are met +for every component of the Work unless that component clearly states +in the copyright notice that it is exempt from that condition. Only +the Current Maintainer is allowed to add such statements of exemption +to a component of the Work. + + a. If a component of this Derived Work can be a direct replacement + for a component of the Work when that component is used with the + Base Interpreter, then, wherever this component of the Work + identifies itself to the user when used interactively with that + Base Interpreter, the replacement component of this Derived Work + clearly and unambiguously identifies itself as a modified version + of this component to the user when used interactively with that + Base Interpreter. + + b. Every component of the Derived Work contains prominent notices + detailing the nature of the changes to that component, or a + prominent reference to another file that is distributed as part + of the Derived Work and that contains a complete and accurate log + of the changes. + + c. No information in the Derived Work implies that any persons, + including (but not limited to) the authors of the original version + of the Work, provide any support, including (but not limited to) + the reporting and handling of errors, to recipients of the + Derived Work unless those persons have stated explicitly that + they do provide such support for the Derived Work. + + d. You distribute at least one of the following with the Derived Work: + + 1. A complete, unmodified copy of the Work; + if your distribution of a modified component is made by + offering access to copy the modified component from a + designated place, then offering equivalent access to copy + the Work from the same or some similar place meets this + condition, even though third parties are not compelled to + copy the Work along with the modified component; + + 2. Information that is sufficient to obtain a complete, + unmodified copy of the Work. + +7. If you are not the Current Maintainer of the Work, you may +distribute a Compiled Work generated from a Derived Work, as long as +the Derived Work is distributed to all recipients of the Compiled +Work, and as long as the conditions of Clause 6, above, are met with +regard to the Derived Work. + +8. The conditions above are not intended to prohibit, and hence do not +apply to, the modification, by any method, of any component so that it +becomes identical to an updated version of that component of the Work as +it is distributed by the Current Maintainer under Clause 4, above. + +9. Distribution of the Work or any Derived Work in an alternative +format, where the Work or that Derived Work (in whole or in part) is +then produced by applying some process to that format, does not relax or +nullify any sections of this license as they pertain to the results of +applying that process. + +10. a. A Derived Work may be distributed under a different license + provided that license itself honors the conditions listed in + Clause 6 above, in regard to the Work, though it does not have + to honor the rest of the conditions in this license. + + b. If a Derived Work is distributed under a different license, that + Derived Work must provide sufficient documentation as part of + itself to allow each recipient of that Derived Work to honor the + restrictions in Clause 6 above, concerning changes from the Work. + +11. This license places no restrictions on works that are unrelated to +the Work, nor does this license place any restrictions on aggregating +such works with the Work by any means. + +12. Nothing in this license is intended to, or may be used to, prevent +complete compliance by all parties with all applicable laws. + + +NO WARRANTY +=========== + +There is no warranty for the Work. Except when otherwise stated in +writing, the Copyright Holder provides the Work `as is', without +warranty of any kind, either expressed or implied, including, but not +limited to, the implied warranties of merchantability and fitness for a +particular purpose. The entire risk as to the quality and performance +of the Work is with you. Should the Work prove defective, you assume +the cost of all necessary servicing, repair, or correction. + +In no event unless required by applicable law or agreed to in writing +will The Copyright Holder, or any author named in the components of the +Work, or any other party who may distribute and/or modify the Work as +permitted above, be liable to you for damages, including any general, +special, incidental or consequential damages arising out of any use of +the Work or out of inability to use the Work (including, but not limited +to, loss of data, data being rendered inaccurate, or losses sustained by +anyone as a result of any failure of the Work to operate with any other +programs), even if the Copyright Holder or said author or said other +party has been advised of the possibility of such damages. + + +MAINTENANCE OF THE WORK +======================= + +The Work has the status `author-maintained' if the Copyright Holder +explicitly and prominently states near the primary copyright notice in +the Work that the Work can only be maintained by the Copyright Holder +or simply that it is `author-maintained'. + +The Work has the status `maintained' if there is a Current Maintainer +who has indicated in the Work that they are willing to receive error +reports for the Work (for example, by supplying a valid e-mail +address). It is not required for the Current Maintainer to acknowledge +or act upon these error reports. + +The Work changes from status `maintained' to `unmaintained' if there +is no Current Maintainer, or the person stated to be Current +Maintainer of the work cannot be reached through the indicated means +of communication for a period of six months, and there are no other +significant signs of active maintenance. + +You can become the Current Maintainer of the Work by agreement with +any existing Current Maintainer to take over this role. + +If the Work is unmaintained, you can become the Current Maintainer of +the Work through the following steps: + + 1. Make a reasonable attempt to trace the Current Maintainer (and + the Copyright Holder, if the two differ) through the means of + an Internet or similar search. + + 2. If this search is successful, then enquire whether the Work + is still maintained. + + a. If it is being maintained, then ask the Current Maintainer + to update their communication data within one month. + + b. If the search is unsuccessful or no action to resume active + maintenance is taken by the Current Maintainer, then announce + within the pertinent community your intention to take over + maintenance. (If the Work is a LaTeX work, this could be + done, for example, by posting to comp.text.tex.) + + 3a. If the Current Maintainer is reachable and agrees to pass + maintenance of the Work to you, then this takes effect + immediately upon announcement. + + b. If the Current Maintainer is not reachable and the Copyright + Holder agrees that maintenance of the Work be passed to you, + then this takes effect immediately upon announcement. + + 4. If you make an `intention announcement' as described in 2b. above + and after three months your intention is challenged neither by + the Current Maintainer nor by the Copyright Holder nor by other + people, then you may arrange for the Work to be changed so as + to name you as the (new) Current Maintainer. + + 5. If the previously unreachable Current Maintainer becomes + reachable once more within three months of a change completed + under the terms of 3b) or 4), then that Current Maintainer must + become or remain the Current Maintainer upon request provided + they then update their communication data within one month. + +A change in the Current Maintainer does not, of itself, alter the fact +that the Work is distributed under the LPPL license. + +If you become the Current Maintainer of the Work, you should +immediately provide, within the Work, a prominent and unambiguous +statement of your status as Current Maintainer. You should also +announce your new status to the same pertinent community as +in 2b) above. + + +WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE +====================================================== + +This section contains important instructions, examples, and +recommendations for authors who are considering distributing their +works under this license. These authors are addressed as `you' in +this section. + +Choosing This License or Another License +---------------------------------------- + +If for any part of your work you want or need to use *distribution* +conditions that differ significantly from those in this license, then +do not refer to this license anywhere in your work but, instead, +distribute your work under a different license. You may use the text +of this license as a model for your own license, but your license +should not refer to the LPPL or otherwise give the impression that +your work is distributed under the LPPL. + +The document `modguide.tex' in the base LaTeX distribution explains +the motivation behind the conditions of this license. It explains, +for example, why distributing LaTeX under the GNU General Public +License (GPL) was considered inappropriate. Even if your work is +unrelated to LaTeX, the discussion in `modguide.tex' may still be +relevant, and authors intending to distribute their works under any +license are encouraged to read it. + +A Recommendation on Modification Without Distribution +----------------------------------------------------- + +It is wise never to modify a component of the Work, even for your own +personal use, without also meeting the above conditions for +distributing the modified component. While you might intend that such +modifications will never be distributed, often this will happen by +accident -- you may forget that you have modified that component; or +it may not occur to you when allowing others to access the modified +version that you are thus distributing it and violating the conditions +of this license in ways that could have legal implications and, worse, +cause problems for the community. It is therefore usually in your +best interest to keep your copy of the Work identical with the public +one. Many works provide ways to control the behavior of that work +without altering any of its licensed components. + +How to Use This License +----------------------- + +To use this license, place in each of the components of your work both +an explicit copyright notice including your name and the year the work +was authored and/or last substantially modified. Include also a +statement that the distribution and/or modification of that +component is constrained by the conditions in this license. + +Here is an example of such a notice and statement: + + %% pig.dtx + %% Copyright 2008 M. Y. Name + % + % This work may be distributed and/or modified under the + % conditions of the LaTeX Project Public License, either version 1.3 + % of this license or (at your option) any later version. + % The latest version of this license is in + % https://www.latex-project.org/lppl.txt + % and version 1.3c or later is part of all distributions of LaTeX + % version 2008 or later. + % + % This work has the LPPL maintenance status `maintained'. + % + % The Current Maintainer of this work is M. Y. Name. + % + % This work consists of the files pig.dtx and pig.ins + % and the derived file pig.sty. + +Given such a notice and statement in a file, the conditions +given in this license document would apply, with the `Work' referring +to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being +generated from `pig.dtx' using `pig.ins'), the `Base Interpreter' +referring to any `LaTeX-Format', and both `Copyright Holder' and +`Current Maintainer' referring to the person `M. Y. Name'. + +If you do not want the Maintenance section of LPPL to apply to your +Work, change `maintained' above into `author-maintained'. +However, we recommend that you use `maintained', as the Maintenance +section was added in order to ensure that your Work remains useful to +the community even when you can no longer maintain and support it +yourself. + +Derived Works That Are Not Replacements +--------------------------------------- + +Several clauses of the LPPL specify means to provide reliability and +stability for the user community. They therefore concern themselves +with the case that a Derived Work is intended to be used as a +(compatible or incompatible) replacement of the original Work. If +this is not the case (e.g., if a few lines of code are reused for a +completely different task), then clauses 6b and 6d shall not apply. + + +Important Recommendations +------------------------- + + Defining What Constitutes the Work + + The LPPL requires that distributions of the Work contain all the + files of the Work. It is therefore important that you provide a + way for the licensee to determine which files constitute the Work. + This could, for example, be achieved by explicitly listing all the + files of the Work near the copyright notice of each file or by + using a line such as: + + % This work consists of all files listed in manifest.txt. + + in that place. In the absence of an unequivocal list it might be + impossible for the licensee to determine what is considered by you + to comprise the Work and, in such a case, the licensee would be + entitled to make reasonable conjectures as to which files comprise + the Work. + diff --git a/biblio/bibtex/contrib/iran-bibtex/README.md b/biblio/bibtex/contrib/iran-bibtex/README.md index 4bbe1c2355..5c730faac6 100644 --- a/biblio/bibtex/contrib/iran-bibtex/README.md +++ b/biblio/bibtex/contrib/iran-bibtex/README.md @@ -1,63 +1,134 @@ # iran-bibtex — Iran Manual of Style Citation Guide for BibTeX -The iran-bibtex package is a LaTeX package that provides a BibTeX style based on the [Iran Manual of Style](https://imos.irandoc.ac.ir) (1st edn., 2016) guide to Persian, and English information sources. +The iran-bibtex package, designed for LaTeX, provides BibTeX styles in accordance with the guidelines outlined in the [Iran Manual of Style](https://imos.irandoc.ac.ir) (1st edn., 2016)—citation guide to Persian, and English information sources. -Numerous examples of the use of this package have been prepared and are available in [the package's GitHub repository](https://github.com/farshadrasuli/iran-bibtex). +A collection of illustrative examples showcasing the usage of this package has been meticulously prepared and is accessible in [the package's GitHub repository](https://github.com/farshadrasuli/iran-bibtex) under the `examples` sub-directory. -A file named `iran-bibtex-cp1256fa.csf` is prepared (based on the [ascii.csf](https://ctan.org/tex-archive/biblio/bibtex/bibtex-x/csf/ascii.csf) file) for this package to sort references alphabetically (to place Persian/Farsi items first, followed by English/Latin items). +To facilitate alphabetical sorting of references, prioritizing Persian/Farsi items ahead of English/Latin ones, a dedicated file named `iran-bibtex-cp1256fa.csf` is provided for use with this package. This file, derived from the [ascii.csf](https://ctan.org/tex-archive/biblio/bibtex/bibtex-x/csf/ascii.csf) file, serves the purpose of arranging references in the desired order. -This package relies on [natbib](https://ctan.org/pkg/natbib) and [xepersian](https://ctan.org/pkg/xepersian) packages. +It's important to note that this package relies on [natbib](https://ctan.org/pkg/natbib) package, and it is automatically loaded. ## Copyright -Copyright (c) 2023 Farshad Rasuli (). +Copyright (c) 2023-2024 Farshad Rasuli (). This package distributed under the LaTeX Project Public License. It may be distributed and/or modified under the LaTeX Project Public License, version 1.3c or higher. The latest version of this license is at: . -This work is “author-maintained” (as per LPPL maintenance status) -by Farshad Rasuli. +This work is “author-maintained” (as per LPPL maintenance status) by Farshad Rasuli. -The package's catalogue page on CTAN is located at: . +Catalog on CTAN: -The package's archive on CTAN is located at : . +Archive on CTAN: -The repository for the package is located at: +Repository on GitHub: ## How to use this package -The current version of this package (v0.3.0) supports ten types of entries: `@book`, `@incollection`, `@article`, `@proceedings`, `@inproceedings`, `@conference`, `@mastersthesis`, `@phdthesis`, `@unpublished`, and `@misc`. These types of entries meet the Iran Manual of Style requirements. Other types of entries have the default definition of the LaTeX standards and do not meet the requirements of the Iran Manual of Style. +The current version of this package (v0.3.0, and higher) supports ten types of entries: `@book`, `@incollection`, `@article`, `@proceedings`, `@inproceedings`, `@conference`, `@mastersthesis`, `@phdthesis`, `@unpublished`, and `@misc`. These types of entries meet the Iran Manual of Style requirements. Other types of entries have the default definition of the LaTeX standards and do not meet the requirements of the Iran Manual of Style. -Recall the package with the `\usepackage[]{iran-bibtex}` in the preamble of the LaTeX file. The current available `bibstyle` option is `iran`, which uses `iran.bst` BibTeX bibligraphy style file. By recalling the `iran-bibtex` package, there is no need to determine the bibliography style with the `\bibligraphystayle{}` command anymore. We suggest recalling this package before the `hyperref` package. At the end, recall the `xepersian` package. +### Load package -To sort Bibliography/References alphabetically, by using `bibtex` for compilation, English/Latin items will be placed first, followed by Persian items. If you want Persian items to be placed first, followed by English/Latin items, you must create a bibliography database (`bib` file) with `utf8` encryption and run `bibtex8 -W -c iran-bibtex-cp1256fa` for compilation. +Load the `iran-bibtex` package in your LaTeX file by using the `\usepackage[]{iran-bibtex}` command in the preamble. With this package, there's no need to explicitly set the bibliography style using the `\bibliographystyle{}` command anymore. It is recommended to load the `iran-bibtex` package before the `hyperref` package for optimal performance. -## Reporting issues +### Package's options as `` -If you want to report any bugs or issues, please use [the issue tracker](https://github.com/farshadrasuli/iran-bibtex/issues). In doing so, please always explain your issue well enough and always include a minimal working example showing the issue. +The bibliography styles included in this package are organized into two distinct groups. One set, denoted by names commencing with `iran`, is specifically designed for Persian/Farsi documents and requires the [xepersian](https://ctan.org/pkg/xepersian) package for compilation. The other set, identified by names beginning with `iranlatin`, is customized for English/Latin documents. This set serves as the implementation of the [Iran Manual of Style](https://imos.irandoc.ac.ir) for English/Latin documents. -## Change log +There are five different type of `` options as follows: + +| No. | Options | Description | +| :-: | :---------------------------------- | :---------- | +|1 |`iran`
`iranlatin` | Author-date citation format, with reference items are arranged in alphabetical order. | +|2 |`iran-plain`
`iranlatin-plain` | Numerical labeled citation format, with reference items are both alphabetically sorted and numerically labeled. These styles are closely resembling the standard `plain` style. | +|3 |`iran-year`
`iranlatin-year` | Author-date citation format, with reference items are arranged in chronological order by year. | +|4 |`iran-plainyr`
`iranlatin-plainyr`| Numerical labeled citation format, with reference items are both chronologically by year sorted and numerically labeled. | +|5 |`iran-unsrt`
`iranlatin-unsrt` | Numerical labeled citation format, with reference items are sorted by citation order and numerically labeled. These styles are closely resembling the standard `unsrt` style. | + +### Compilation + +During the compilation of a bibliography database file (`bib` file) using the `bibtex` engine, English/Latin items are initially sorted, followed by Persian/Farsi items. To ensure Persian/Farsi items are displayed first, users are advised to choose the `bibtex8` engine, create a bibliography database file (`bib` file) encrypted in `utf8`, and execute the `bibtex8 -W -c iran-bibtex-cp1256fa` command for compilation. + +### Citation commands + +According to the [natbib](https://ctan.org/pkg/natbib) package user manual, the following commands are provided for citation. The illustrations below apply to the `iranlatin` bibstyle option. + +> (Sechzer et al. 1996) +> +> **Bibliography** +> +> Sechzer, Jeri A, S M Pfaffilin, F L Denmark, A Griffin, and S J Blumenthal. 1996. *Women and Mental Health*. Baltimore: John Hopkins Univ Press. -First version (v0.1.0) release date: 2023/12/12. Current version (v0.3.0) release date: 2023/12/18. +#### Group 1: `\cite` command (parentetical citation) -* **v0.3.0 (2023/12/18)** +- `\cite{sechzer1996}`: (Sechzer et al. 1996) +- `\cite[Chap.~2]{sechzer1996}`: (Sechzer et al. 1996, Chap. 2) +- `\cite[see][p.~10]{sechzer1996}`: (see Sechzer et al. 1996, p. 10) +- `\cite*{sechzer1996}`: (Sechzer, Pfaffilin, Denmark, Griffin, and Blumenthal 1996) +- `\cite*[Chap.~2]{sechzer1996}`: (Sechzer, Pfaffilin, Denmark, Griffin, and Blumenthal 1996, Chap. 2) +- `\cite*[see][p.~10]{sechzer1996}`: (see Sechzer, Pfaffilin, Denmark, Griffin, and Blumenthal 1996, p. 10) - 1. Made some improvements - 2. Fix minor bugs - 3. Support `@mastersthesis` entry was also added - 4. Support `@phdthesis` entry was also added - 5. Support `@unpublished` entry was also added - 6. Support `@misc` entry was also added +#### Group 2: `\citep` command (parentetical citation) -* **v0.2.0 (2023/12/15)** +- `\citep{sechzer1996}`: (Sechzer et al. 1996) +- `\citep[Chap.~2]{sechzer1996}`: (Sechzer et al. 1996, Chap. 2) +- `\citep[see][p.~10]{sechzer1996}`: (see Sechzer et al. 1996, p. 10) +- `\citep*{sechzer1996}`: (Sechzer, Pfaffilin, Denmark, Griffin, and Blumenthal 1996) +- `\citep*[Chap.~2]{sechzer1996}`: (Sechzer, Pfaffilin, Denmark, Griffin, and Blumenthal 1996, Chap. 2) +- `\citep*[see][p.~10]{sechzer1996}`: (see Sechzer, Pfaffilin, Denmark, Griffin, and Blumenthal 1996, p. 10) - 1. Made some improvements - 2. Support `@article` entry was also added - 3. Support `@incollection` entry was also added - 4. Support `@proceedings` entry was also added - 5. Support `@inproceedings` entry was also added - 6. Support `@conference` entry was also added +#### Group 3: `\citet` command (textual citation) + +- `\citet{sechzer1996}`: Sechzer et al. (1996) +- `\citet[Chap.~2]{sechzer1996}`: Sechzer et al. (1996, Chap. 2) +- `\citet*{sechzer1996}`: Sechzer, Pfaffilin, Denmark, Griffin, and Blumenthal (1996) +- `\citet*[Chap.~2]{sechzer1996}`: Sechzer, Pfaffilin, Denmark, Griffin, and Blumenthal (1996, Chap. 2) + +#### Group 4: Other citation commands + +All of the other commads provided by [natbib](https://ctan.org/pkg/natbib) package also work. + +## Reporting issues + +If you want to report any bugs or issues, please use [the issue tracker](https://github.com/farshadrasuli/iran-bibtex/issues). In doing so, please always explain your issue well enough and always include a minimal working example showing the issue. + +## Change log -* **v0.1.0 (2023/12/12)** +### Version 0.4.0 (2024/01/8) + + 1. Implemented several improvements. + 2. Enhanced code quality. + 3. Persian/Farsi items now display the year's extra label with Persian characters. + 4. Made some modifications to the `iran-bibtex-cp1256fa.csf` file. + 5. Introducing a new option: `iran-plain`. + 6. Introducing a new option: `iran-year`. + 7. Introducing a new option: `iran-plainyr`. + 8. Introducing a new option: `iran-unsrt`. + 9. Introducing a new option: `iranlatin`. + 10. Introducing a new option: `iranlatin-plain`. + 11. Introducing a new option: `iranlatin-year`. + 12. Introducing a new option: `iranlatin-plainyr`. + 13. Introducing a new option: `iranlatin-unsrt`. + +### Version 0.3.0 (2023/12/18) + + 1. Implemented several improvements. + 2. Minor bugs have been fixed. + 3. Added support for `@mastersthesis` entry. + 4. Added support for `@phdthesis` entry. + 5. Added support for `@unpublished` entry. + 6. Added support for `@misc` entry. + +### Version 0.2.0 (2023/12/15) + + 1. Implemented several improvements + 2. Added support for `@article` entry. + 3. Added support for `@incollection` entry. + 4. Added support for `@proceedings` entry. + 5. Added support for `@inproceedings` entry. + 6. Added support for `@conference` entry. + +### Version 0.1.0 (2023/12/12) 1. First release on CTAN, and GitHub. - 2. Support `@book` entry only + 2. Available option: `iran`. + 3. Support for `@book` entry only. diff --git a/biblio/bibtex/contrib/iran-bibtex/iran-bibtex-cp1256fa.csf b/biblio/bibtex/contrib/iran-bibtex/iran-bibtex-cp1256fa.csf index 33455ae16b..29b5500a3b 100644 --- a/biblio/bibtex/contrib/iran-bibtex/iran-bibtex-cp1256fa.csf +++ b/biblio/bibtex/contrib/iran-bibtex/iran-bibtex-cp1256fa.csf @@ -1,9 +1,9 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% -%% FILE: $RCSfile: cp1256fa.csf,v $ -%% $Revision: 1.0 $ -%% $Date: 2023/12/8 $ +%% FILE: $RCSfile: iran-bibtex-cp1256fa.csf,v $ +%% $Revision: 1.0.1 $ +%% $Date: 2024/01/8 $ %% %% AUTHOR: Farshad Rasuli %% @@ -25,7 +25,11 @@ %% %% CHANGE LOG %% -%% $Log: cp1256fa.csf,v $ +%% $Log: iran-bibtex-cp1256fa.csf,v $ +%% +%% Revision 1.0.1 2024/01/8 rasuli +%% Add Arabic-indic digits +%% Shift English/Latin digits to top %% %% Revision 1.0 2023/12/8 rasuli %% Initial release @@ -37,20 +41,20 @@ %% SORTING ORDER %% %% The sorting order defined is the Persian language sorting order then the -%% natural English language sorting order (i.e. 0..9AaBb..YyZz). Any other +%% natural English language sorting order (i.e. 0...9AaBb...YyZz). Any other %% characters will be sorted after the characters in the \order section. %% \order{ - ۰ - ۱ - ۲ - ۳ - ۴ - ۵ - ۶ - ۷ - ۸ - ۹ + ۰ ٠ 0 + ۱ ١ 1 + ۲ ٢ 2 + ۳ ٣ 3 + ۴ ٤ 4 + ۵ ٥ 5 + ۶ ٦ 6 + ۷ ٧ 7 + ۸ ٨ 8 + ۹ ٩ 9 ء أ إ ئ ؤ آ ا @@ -85,16 +89,6 @@ و ه ی ي - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 A a B b C c diff --git a/biblio/bibtex/contrib/iran-bibtex/iran-bibtex-structure.pdf b/biblio/bibtex/contrib/iran-bibtex/iran-bibtex-structure.pdf new file mode 100644 index 0000000000..4c6f7cfd76 Binary files /dev/null and b/biblio/bibtex/contrib/iran-bibtex/iran-bibtex-structure.pdf differ diff --git a/biblio/bibtex/contrib/iran-bibtex/iran-bibtex-structure.tex b/biblio/bibtex/contrib/iran-bibtex/iran-bibtex-structure.tex new file mode 100644 index 0000000000..acfb59dce8 --- /dev/null +++ b/biblio/bibtex/contrib/iran-bibtex/iran-bibtex-structure.tex @@ -0,0 +1,681 @@ +\documentclass[a4paper,11pt]{article} + +\usepackage{enumitem} +\usepackage{hyperref} + +\usepackage[localise,perpagefootnote=on,computeautoilg=on]{xepersian} +\settextfont{Parsi Nevis} +\setpersianmonofont{Vazir Code} +\setlatintextfont{Parsi Nevis} + +\SepMark{-} + +\setcounter{tocdepth}{1} + + + + +\begin{document} +\title{خلاصه‌ای از ساختار چیدمان پیاده‌شده‌ی مشخصه‌ها در شیوه‌ی استاددهی ایران} +\author{فرشاد رسولی\thanks{رایانامه: \url{farshad.rasuli@gmail.com}}} +\date{نسخه‌ی ۰٫۴٫۰ --- ۱۸ دی ۱۴۰۲} +\maketitle + + +\begin{description} +\item[مدخل (\lr{entry}):] +به هر اثری که اطلاعات شناسنامه‌ای آن برای استناددهی در نوشتار وارد میگردد گفته میشود. مدخل میتواند از نوع \verb|@book|، \verb|@incollection|، \verb|@article|، \verb|@inproceeding|، \verb|@masterthesis|، \verb|@phdthesis|، \verb|@misc|، و غیره باشد. +\item[مشخصه (\lr{field}):] +به هر یک از مشخصه‌های شناسنامه‌ای مدخل مانند \lr{\tt author}، \lr{\tt title}، \lr{\tt year}، و غیره گفته میشود. +\end{description} + + + +\renewcommand{\contentsname}{فهرست} +\tableofcontents + + + + + + + + + + +\section{کتاب} +برای استناد به کل یک کتاب از مدخل \verb|@book| استفاده کنید. الگوی چیدمان مشخصه‌های مدخل کتاب در ادامه ارائه شده است. + + + + + +\subsection{کتابهایی که زیر نام نویسنده مرتب میشوند} +اگر برای مدخل کتاب، مشخصه‌ی \verb|author| وارد گردد، زیر نام نویسنده مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt author}. {\tt year}. {\tt title}. {\tt edition} edn. {\tt impression} imp. {\tt comment}. by {\tt by}. Translated by {\tt translator}. {\tt translateyear}. {\tt volume volumes series number}. In collaboration with {\tt collaboration}. Commented by \\{\tt commentator}. Compiled by {\tt compiler}. Edited by {\tt editor}. Introduction by {\tt introduction}. Preface by {\tt preface}. Afterwords by {\tt afterword}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily نویسنده}. {\persianttfamily تاریخ}. {\persianttfamily عنوان}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily جلد، جلدها، فروست، شماره}. با همکاری {\persianttfamily …}. با یادداشت {\persianttfamily …}. گردآوری {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. با مقدمه‌ی {\persianttfamily …}. با پیش‌گفتار {\persianttfamily …}. با پس‌گفتار {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{کتابهایی که زیر نام گردآورده مرتب میشوند} +اگر برای مدخل کتاب، مشخصه‌ی \verb|author| وارد نشود، در صورت وجود مشخصه‌ی \verb|compiler|، زیر نام گردآونده مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt compiler}, comp(s). {\tt year}. {\tt title}. {\tt edition} edn. {\tt impression} imp. {\tt comment}. by {\tt by}. Translated by {\tt translator}. {\tt translateyear}. {\tt volume volumes series number}. In collaboration with {\tt collaboration}. Commented by {\tt commentator}. Edited by {\tt editor}. Introduction by {\tt introduction}. Preface by {\tt preface}. Afterwords by {\tt afterword}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily گردآورنده}، گردآورنده‌‌‌‌(گان). {\persianttfamily تاریخ}. {\persianttfamily عنوان}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily جلد، جلدها، فروست، شماره}. با همکاری {\persianttfamily …}. با یادداشت {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. با مقدمه‌ی {\persianttfamily …}. با پیش‌گفتار {\persianttfamily …}. با پس‌گفتار {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{کتابهایی که زیر نام ویراستار مرتب میشوند} +اگر برای مدخل کتاب، مشخصه‌های \verb|author|، و \verb|compiler| وارد نشوند، در صورت وجود مشخصه‌ی \verb|editor|، زیر نام ویراستار مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt editor}, ed(s). {\tt year}. {\tt title}. {\tt edition} edn. {\tt impression} imp. {\tt comment}. by {\tt by}. Translated by {\tt translator}. {\tt translateyear}. {\tt volume volumes series number}. In collaboration with {\tt collaboration}. Commented by \\{\tt commentator}. Introduction by {\tt introduction}. Preface by {\tt preface}. Afterwords by {\tt afterword}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily ویراستار}، ویراستار(ان). {\persianttfamily تاریخ}. {\persianttfamily عنوان}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily جلد، جلدها، فروست، شماره}. با همکاری {\persianttfamily …}. با یادداشت {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. با مقدمه‌ی {\persianttfamily …}. با پیش‌گفتار {\persianttfamily …}. با پس‌گفتار {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{کتابهایی که زیر نام مترجم مرتب میشوند} +اگر برای مدخل کتاب، مشخصه‌های \verb|author|، \verb|compiler|، و \verb|editor| وارد نشوند، در صورت وجود مشخصه‌ی \verb|translator|، زیر نام مترجم مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt translator}, tran(s). {\tt translateyear}. {\tt title}. {\tt edition} edn. {\tt impression} imp. {\tt comment}. by {\tt by}. {\tt year}. {\tt volume volumes series number}. In collaboration with {\tt collaboration}. Commented by {\tt commentator}. Introduction by {\tt introduction}. Preface by {\tt preface}. Afterwords by {\tt afterword}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily مترجم}، مترجم(‍ان). {\persianttfamily تاریخ ترجمه}. {\persianttfamily عنوان}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily تاریخ}. {\persianttfamily جلد، جلدها، فروست، شماره}. با همکاری {\persianttfamily …}. با یادداشت {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. با مقدمه‌ی {\persianttfamily …}. با پیش‌گفتار {\persianttfamily …}. با پس‌گفتار {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{کتابهایی که زیر عنوان مرتب میشوند} +اگر برای مدخل کتاب، مشخصه‌های \verb|author|، \verb|compiler|، \verb|editor|، و \verb|translator| وارد نشوند، باید مشخصه‌ی \verb|key| آن مدخل برابر با مشخصه‌ی \verb|title| وارد شود که زیر عنوان مرتب گردد. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt title}. {\tt year}. {\tt edition} edn. {\tt impression} imp. {\tt comment}. by {\tt by}. {\tt volume volumes series number}. In collaboration with {\tt collaboration}. Commented by {\tt commentator}. Introduction by {\tt introduction}. Preface by {\tt preface}. Afterwords by {\tt afterword}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily عنوان}. {\persianttfamily تاریخ}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily جلد، جلدها، فروست، شماره}. با همکاری {\persianttfamily …}. با یادداشت {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. با مقدمه‌ی {\persianttfamily …}. با پیش‌گفتار {\persianttfamily …}. با پس‌گفتار {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + + + + + + +\section{پاره‌ای از یک کتاب} +برای استناد به فصلی از کتاب، یا بخشی از یک کتاب که عنوان مشخصی دارد از مدخل \verb|@incollection| استفاده کنید. الگوی چیدمان مشخصه‌های مدخل \verb|@incollection| در ادامه ارائه شده است. + + + + + +\subsection{پاره‌ای از کتاب که زیر نام نویسنده مرتب میشود} +اگر برای مدخل \verb|@incollection|، مشخصه‌ی \verb|author| وارد گردد، زیر نام نویسنده مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt author}. {\tt year}. {\tt title}. {\tt comment}. by {\tt by}. {\tt chapter, booktitle, pages, volume, volumes}. {\tt edition} edn. {\tt impression} imp. Translated by {\tt translator}. {\tt translateyear}. {\tt series number}. Compiled by {\tt compiler}. Edited by {\tt editor}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily نویسنده}. {\persianttfamily تاریخ}. {\persianttfamily عنوان}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily فصل، عنوان‌کتاب، صفحه‌ها، جلد، جلدها}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily فروست، شماره}. گردآوری {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{پاره‌ای از کتاب که زیر نام گردآورنده مرتب میشود} +اگر برای مدخل \verb|@incollection|، مشخصه‌ی \verb|author| وارد نشود، در صورت وجود مشخصه‌ی \verb|compiler| زیر نام گردآورنده مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt compiler}, comp(s). {\tt year}. {\tt title}. {\tt comment}. by {\tt by}. {\tt chapter, booktitle, pages, volume, volumes}. {\tt edition} edn. {\tt impression} imp. Translated by {\tt translator}. {\tt translateyear}. {\tt series number}. Edited by {\tt editor}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily گردآورنده}، گردآورنده(گان). {\persianttfamily تاریخ}. {\persianttfamily عنوان}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily فصل، عنوان‌کتاب، صفحه‌ها، جلد، جلدها}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily فروست، شماره}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{پاره‌ای از کتاب که زیر نام ویراستار مرتب میشود} +اگر برای مدخل \verb|@incollection|، مشخصه‌های \verb|author|، و \verb|compiler| وارد نشود، در صورت وجود مشخصه‌ی \verb|editor| زیر نام گردآورنده مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt editor}, ed(s). {\tt year}. {\tt title}. {\tt comment}. by {\tt by}. {\tt chapter, booktitle, pages, volume, volumes}. {\tt edition} edn. {\tt impression} imp. Translated by {\tt translator}. {\tt translateyear}. {\tt series number}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily ویراستار}، ویراستار(ان). {\persianttfamily تاریخ}. {\persianttfamily عنوان}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily فصل، عنوان‌کتاب، صفحه‌ها، جلد، جلدها}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily فروست، شماره}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{پاره‌ای از کتاب که زیر نام مترجم مرتب میشود} +اگر برای مدخل \verb|@incollection|، مشخصه‌های \verb|author|، \verb|compiler|، و \verb|editor| وارد نشود، در صورت وجود مشخصه‌ی \verb|translator|، زیر نام مترجم مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt translator}, trans. {\tt translateyear}. {\tt title}. {\tt comment}. by {\tt by}. {\tt year}. {\tt chapter, booktitle, pages, volume, volumes}. {\tt edition} edn. \\{\tt impression} imp. {\tt series number}. Compiled by {\tt compiler}. Edited by {\tt editor}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily مترجم}، مترجم(‍ان). {\persianttfamily تاریخ ترجمه}. {\persianttfamily عنوان}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily تاریخ}. {\persianttfamily فصل، عنوان‌کتاب، صفحه‌ها، جلد، جلدها}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily فروست، شماره}. گردآوری {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{پاره‌ای از کتاب که زیر عنوان مرتب میشود} +اگر برای مدخل \verb|@incollection|، مشخصه‌های \verb|author|، و \verb|translator| وارد نشوند، باید مشخصه‌ی \verb|key| آن مدخل برابر با مشخصه‌ی \verb|title| وارد شود که زیر عنوان مرتب گردد. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt title}. {\tt year}. {\tt comment}. by {\tt by}. {\tt chapter, booktitle, pages, volume, volumes}. {\tt edition} edn. {\tt impression} imp. {\tt series number}. Compiled by {\tt compiler}. Edited by {\tt editor}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily عنوان}. {\persianttfamily تاریخ}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily فصل، عنوان‌کتاب، صفحه‌ها، جلد، جلدها}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily فروست، شماره}. گردآوری {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + + + + + + +\section{مقاله در مجله‌ی تخصصی} +برای استناد به یک مقاله‌ی چاپ شده در مجله‌ی تخصصی از مدخل \verb|@article| استفاده کنید. الگوی چیدمان مشخصه‌های مدخل مقاله در ادامه ارائه شده است. + + + + + +\subsection{مقاله‌هایی که زیر نام نویسنده مرتب میشوند} +اگر برای مدخل مقاله، مشخصه‌ی \verb|author| وارد گردد، زیر نام نویسنده مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt author}. {\tt year}. {\tt title}. {\tt comment}. by {\tt by}. Translated by {\tt translator}. {\tt translateyear}. Edited by {\tt editor}. {\tt journal, issue, volume, number, pages}. {\tt note}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily نویسنده}. {\persianttfamily تاریخ}. {\persianttfamily عنوان}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily مجله، ویژه‌نامه، دوره، شماره، صفحه‌ها}. {\persianttfamily یادداشت}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{مقاله‌هایی که زیر نام ویراستار مرتب میشوند} +اگر برای مدخل مقاله، مشخصه‌های \verb|author| وارد نشود، در صورت وجود مشخصه‌ی \verb|editor|، زیر نام ویراستار مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt editor}, ed(s). {\tt year}. {\tt title}. {\tt comment}. by {\tt by}. {\tt journal, issue, volume, number, pages}. {\tt note}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily ویراستار}، ویراستار(ان). {\persianttfamily تاریخ}. {\persianttfamily عنوان}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily مجله، ویژه‌نامه، دوره، شماره، صفحه‌ها}. {\persianttfamily یادداشت}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{مقاله‌هایی که زیر نام مترجم مرتب میشوند} +اگر برای مدخل مقاله، مشخصه‌های \verb|author|، و \verb|editor| وارد نشوند، در صورت وجود مشخصه‌ی \verb|translator|، زیر نام مترجم مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt translator}, trans. {\tt translateyear}. {\tt comment}. {\tt title}. by {\tt by}. {\tt year}. {\tt journal, issue, volume, number, pages}. {\tt note}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily مترجم}، مترجم(‍ان). {\persianttfamily تاریخ ترجمه}. {\persianttfamily عنوان}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily تاریخ}. {\persianttfamily مجله، ویژه‌نامه، دوره، شماره، صفحه‌ها}. {\persianttfamily یادداشت}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{مقاله‌هایی که زیر نام مجله مرتب میشوند} +اگر برای مدخل مقاله، مشخصه‌های \verb|author|، \verb|editor|، و \verb|translator| وارد نشوند، باید مشخصه‌ی \verb|key| آن مدخل برابر با مشخصه‌ی \verb|journal| وارد شود که زیر نام مجله مرتب گردد. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt journal}. {\tt year}. {\tt title}. {\tt comment}. by {\tt by}. Edited by {\tt editor}. {\tt issue, volume, number, pages}. {\tt note}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily مجله}. {\persianttfamily تاریخ}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily ویژه‌نامه، دوره، شماره، صفحه‌ها}. {\persianttfamily یادداشت}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + + + + + + +\section{مجموعه‌ی مقاله‌های یک همایش} +برای استناد به کتابی که دربردارنده‌ی مقاله‌های یک همایش است، از مدخل \verb|@proceedings| استفاده کنید. الگوی چیدمان مشخصه‌های مدخل \verb|@proceedings| در ادامه ارائه شده است. + + + + + +\subsection{مجموعه مقاله‌ای که زیر نام ویراستار مرتب میشود} +اگر برای مدخل \verb|@proceedings|، مشخصه‌ی \verb|editor| وارد گردد، زیر نام ویراستار مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt editor}, ed(s). {\tt year}. {\tt title}. {\tt edition} edn. {\tt impression} imp. Translated by {\tt translator}. {\tt translateyear}. {\tt volume volumes series number}. Compiled by {\tt compiler}. {\tt organization}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily ویراستار}، ویراستار(ان). {\persianttfamily تاریخ}. {\persianttfamily عنوان}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily جلد، جلدها، فروست، شماره}. گردآوری {\persianttfamily …}. {\persianttfamily سازمان}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{مجموعه مقاله‌ای که زیر نام گردآورنده مرتب میشود} +اگر برای مدخل \verb|@proceedings|، مشخصه‌ی \verb|editor| وارد نشود، در صورت وجود مشخصه‌ی \verb|compiler| زیر نام گردآورنده مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt compiler}, comp(s). {\tt year}. {\tt title}. {\tt edition} edn. {\tt impression} imp. Translated by {\tt translator}. {\tt translateyear}. {\tt volume volumes series number}. {\tt organization}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily گردآورنده}، گردآورنده(گان). {\persianttfamily تاریخ}. {\persianttfamily عنوان}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily جلد، جلدها، فروست، شماره}. {\persianttfamily سازمان}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{مجموعه مقاله‌ای که زیر نام مترجم مرتب میشوند} +اگر برای مدخل \verb|@proceedings|، مشخصه‌های \verb|editor|، و \verb|compiler| وارد نشوند، در صورت وجود مشخصه‌ی \verb|translator|، زیر نام مترجم مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt translator}, tran(s). {\tt translateyear}. {\tt title}. {\tt edition} edn. {\tt impression} imp. {\tt volume volumes series number}. {\tt organization}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily مترجم}، مترجم(‍ان). {\persianttfamily تاریخ ترجمه}. {\persianttfamily عنوان}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily جلد، جلدها، فروست، شماره}. {\persianttfamily سازمان}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{مجموعه مقاله‌ای که زیر عنوان مرتب میشوند} +اگر برای مدخل \verb|@proceedings|، مشخصه‌های \verb|editor|، \verb|compiler|، و \verb|translator| وارد نشوند، باید مشخصه‌ی \verb|key| آن مدخل برابر با مشخصه‌ی \verb|title| وارد شود که زیر عنوان مرتب گردد. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt title}. {\tt year}. {\tt edition} edn. {\tt impression} imp. {\tt volume volumes series number}. {\tt organization}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily عنوان}. {\persianttfamily تاریخ}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily جلد، جلدها، فروست، شماره}. {\persianttfamily سازمان}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + + + + + + +\section{مقاله‌ی چاپ شده در مجموعه مقاله‌های یک همایش} +برای استناد به مقاله‌ای که در یک همایش ارائه شده سپس در مجموعه مقاله‌های آن همایش چاپ شده است از مدخل \verb|@inproceedings| استفاده کنید. الگوی چیدمان مشخصه‌های مدخل \verb|@inproceedings| در ادامه ارائه شده است. + + + + + +\subsection{مقاله‌ای که زیر نام نویسنده مرتب میشود} +اگر برای مدخل \verb|@inproceedings|، مشخصه‌ی \verb|author| وارد گردد، زیر نام نویسنده مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt author}. {\tt year}. {\tt title}. by {\tt by}. {\tt booktitle, pages, volume, volumes}. {\tt edition} edn. {\tt impression} imp. Translated by {\tt translator}. {\tt translateyear}. {\tt series number}. Compiled by {\tt compiler}. Edited by {\tt editor}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily نویسنده}. {\persianttfamily تاریخ}. {\persianttfamily عنوان}. نوشته‌ی {\persianttfamily …}. {\persianttfamily عنوان‌کتاب، صفحه‌ها، جلد، جلدها}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily فروست شماره}. گردآوری {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{مقاله‌ای که زیر نام مترجم مرتب میشود} +اگر برای مدخل \verb|@inproceedings|، مشخصه‌ی \verb|author| وارد نشود، در صورت وجود مشخصه‌ی \verb|translator|، زیر نام مترجم مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt translator}, trans. {\tt translateyear}. {\tt title}. by {\tt by}. {\tt year}. {\tt booktitle, pages, volume, volumes}. {\tt edition} edn. {\tt impression} imp. {\tt series number}. Compiled by {\tt compiler}. Edited by {\tt editor}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily مترجم}، مترجم(‍ان). {\persianttfamily تاریخ ترجمه}. {\persianttfamily عنوان}. نوشته‌ی {\persianttfamily …}. {\persianttfamily تاریخ}. {\persianttfamily عنوان‌کتاب، صفحه‌ها، جلد، جلدها}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily فروست شماره}. گردآوری {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{مقاله‌ای که زیر عنوان مرتب میشود} +اگر برای مدخل \verb|@inproceedings|، مشخصه‌های \verb|author|، و \verb|translator| وارد نشوند، باید مشخصه‌ی \verb|key| آن مدخل برابر با مشخصه‌ی \verb|title| وارد شود که زیر عنوان مرتب گردد. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt title}. {\tt year}. by {\tt by}. {\tt booktitle, pages, volume, volumes}. {\tt edition} edn. {\tt impression} imp. {\tt series number}. Compiled by {\tt compiler}. Edited by {\tt editor}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily عنوان}. {\persianttfamily تاریخ}. نوشته‌ی {\persianttfamily …}. {\persianttfamily عنوان‌کتاب، صفحه‌ها، جلد، جلدها}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily فروست شماره}. گردآوری {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + + + + + + +\section{مقاله‌ی ارائه شده در یک همایش} +برای استناد به مقاله‌ای که در یک همایش ارائه شده است از مدخل \verb|@conference| استفاده کنید. الگوی چیدمان مشخصه‌های مدخل \verb|@conference| در ادامه ارائه شده است. + + + + + +\subsection{مقاله‌هایی که زیر نام نویسنده مرتب میشود} +اگر برای مدخل \verb|@conference|، مشخصه‌ی \verb|author| وارد گردد، زیر نام نویسنده مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt author}. {\tt year}. {\tt title}. by {\tt by}. Translated by {\tt translator}. {\tt translateyear}. {\tt series, number, pages}. Edited by {\tt editor}. {\tt organization, address, publisher}. {\tt note}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily نویسنده}. {\persianttfamily تاریخ}. {\persianttfamily عنوان}. نوشته‌ی {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily فروست، شماره، صفحه‌ها}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily سازمان، محل نشر، ناشر}. {\persianttfamily یادداشت}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{مقاله‌هایی که زیر نام مترجم مرتب میشود} +اگر برای مدخل \verb|@conference|، مشخصه‌ی \verb|author| وارد نشود، در صورت وجود مشخصه‌ی \verb|translator|، زیر نام مترجم مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt translator}, trans. {\tt translateyear}. {\tt title}. by {\tt by}. {\tt year}. {\tt series, number, pages}. Edited by {\tt editor}. {\tt organization, address, publisher}. {\tt note}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily مترجم}، مترجم(‍ان). {\persianttfamily تاریخ ترجمه}. {\persianttfamily عنوان}. نوشته‌ی {\persianttfamily …}. {\persianttfamily تاریخ}. {\persianttfamily فروست، شماره، صفحه‌ها}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily سازمان، محل نشر، ناشر}. {\persianttfamily یادداشت}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{مقاله‌هایی که زیر عنوان مرتب میشود} +اگر برای مدخل \verb|@conference|، مشخصه‌های \verb|author|، و \verb|translator| وارد نشوند، باید مشخصه‌ی \verb|key| آن مدخل برابر با مشخصه‌ی \verb|title| وارد شود که زیر عنوان مرتب گردد. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt title}. {\tt year}. by {\tt by}. {\tt series, number, pages}. Edited by {\tt editor}. {\tt organization, address, publisher}. {\tt note}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily عنوان}. {\persianttfamily تاریخ}. نوشته‌ی {\persianttfamily …}. {\persianttfamily فروست، شماره، صفحه‌ها}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily سازمان، محل نشر، ناشر}. {\persianttfamily یادداشت}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + + + + + + +\section{پارسا (پایان‌نامه‌ی کارشناسی‌ارشد، و رساله‌ی دکتری)} +برای استناد به پایان‌نامه‌ی کارشناسی‌ارشد از مدخل \verb|@mastersthesis| و برای استناد به رساله‌ی دکتری از مدخل \verb|@phdthesis| استفاده کنید. الگوی چیدمان مشخصه‌های مدخل مقاله در ادامه ارائه شده است. + + + + + +\subsection{پارساهایی که زیر نام نویسنده مرتب میشوند} +اگر برای مدخل پارسا، مشخصه‌ی \verb|author| وارد گردد، زیر نام نویسنده مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt author}. {\tt year}. {\tt title}. {\tt comment}. {\tt school, type, address}. {\tt note}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily نویسنده}. {\persianttfamily تاریخ}. {\persianttfamily عنوان}. {\persianttfamily توضیح}. {\persianttfamily دانشگاه، نوع‌سند، محل نشر}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{پارساهایی که زیر عنوان مرتب میشوند} +اگر برای مدخل پارسا، مشخصه‌ی \verb|author| وارد نشود، باید مشخصه‌ی \verb|key| آن مدخل برابر با مشخصه‌ی \verb|title| وارد شود که زیر عنوان مرتب گردد. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt title}. {\tt year}. {\tt comment}. {\tt school, type, address}. {\tt note}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily عنوان}. {\persianttfamily تاریخ}. {\persianttfamily توضیح}. {\persianttfamily دانشگاه، نوع‌سند، محل نشر}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + + + + + + +\section{اثرهای منتشر نشده} +برای استناد به اثرهایی که به صورت رسمی منتشر نشده‌اند از مدخل \verb|@unpublished| استفاده کنید. الگوی چیدمان مشخصه‌های مدخل \verb|@unpublished| در ادامه ارائه شده است. + + + + + +\subsection{اثرهای منتشر نشده که زیر نام نویسنده مرتب میشود} +اگر برای مدخل \verb|@unpublished|، مشخصه‌ی \verb|author| وارد گردد، زیر نام نویسنده مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt author}. {\tt year}. {\tt title}. {\tt comment}. by {\tt by}. Translated by {\tt translator}. {\tt translateyear}. {\tt howpublished}. {\tt note}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily نویسنده}. {\persianttfamily تاریخ}. {\persianttfamily عنوان}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily چگونگی‌انتشار}. {\persianttfamily یادداشت}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{اثرهای منتشر نشده که زیر نام مترجم مرتب میشود} +اگر برای مدخل \verb|@unpublished|، مشخصه‌ی \verb|author| وارد نشود، در صورت وجود مشخصه‌ی \verb|translator|، زیر نام مترجم مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt translator}, trans. {\tt translateyear}. {\tt title}. {\tt comment}. by {\tt by}. {\tt year}. {\tt howpublished}. {\tt note}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily مترجم}, مترجم(‍ان). {\persianttfamily تاریخ ترجمه}. {\persianttfamily عنوان}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily تاریخ}. {\persianttfamily چگونگی‌انتشار}. {\persianttfamily یادداشت}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{اثرهای منتشر نشده که زیر عنوان مرتب میشود} +اگر برای مدخل \verb|@unpublished|، مشخصه‌های \verb|author|، و \verb|translator| وارد نشوند، باید مشخصه‌ی \verb|key| آن مدخل برابر با مشخصه‌ی \verb|title| وارد شود که زیر عنوان مرتب گردد. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt title} {\tt year}. {\tt comment}. by {\tt by}. {\tt howpublished}. {\tt note}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily عنوان}. {\persianttfamily تاریخ}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily چگونگی‌انتشار}. {\tt address: publisher}. {\persianttfamily یادداشت}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + + + + + + +\section{دیگر اثرها} +برای استناد به اثرهایی که در دسته‌های ارائه شده‌ی پیشین قرار نمیگیرند، از مدخل متفرقه (\verb|@misc|) استفاده کنید. الگوی چیدمان مشخصه‌های مدخل \verb|@misc| در ادامه ارائه شده است. + + + + + +\subsection{اثرهای متفرقه که زیر نام نویسنده مرتب میشود} +اگر برای مدخل \verb|@misc|، مشخصه‌ی \verb|author| وارد گردد، زیر نام نویسنده مرتب میشود. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt author}. {\tt year}. {\tt title}. by {\tt by}. {\tt howpublished}. {\tt note}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily نویسنده}. {\persianttfamily تاریخ}. {\persianttfamily عنوان}. نوشته‌ی {\persianttfamily …}. {\persianttfamily چگونگی‌انتشار}. {\persianttfamily یادداشت}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + +\subsection{اثرهای منتشر نشده که زیر عنوان مرتب میشود} +اگر برای مدخل \verb|@misc|، مشخصه‌ی \verb|author| وارد نشود، باید مشخصه‌ی \verb|key| آن مدخل برابر با مشخصه‌ی \verb|title| وارد شود که زیر عنوان مرتب گردد. + +\begin{itemize}[nosep] +\begin{latin} +\item[] [] +{\tt title} {\tt year}. {\tt comment}. by {\tt by}. {\tt howpublished}. {\tt note}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. +\end{latin} + +\item[] [] +{\persianttfamily عنوان}. {\persianttfamily تاریخ}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily چگونگی‌انتشار}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. +\end{itemize} + + + + + + + + + + +\end{document} \ No newline at end of file diff --git a/biblio/bibtex/contrib/iran-bibtex/iran-bibtex.sty b/biblio/bibtex/contrib/iran-bibtex/iran-bibtex.sty index 462ba68f12..e84bb0f935 100644 --- a/biblio/bibtex/contrib/iran-bibtex/iran-bibtex.sty +++ b/biblio/bibtex/contrib/iran-bibtex/iran-bibtex.sty @@ -1,8 +1,8 @@ %% -%% This is file “iran-bibtex.sty”, v0.3.0 (2023/12/18) +%% This is file “iran-bibtex.sty”, v0.4.0 (2024/01/8) %% %% __________________________________________________ -%% Copyright (c) 2023 Farshad Rasuli +%% Copyright (c) 2023-2024 Farshad Rasuli %% %% It may be distributed and/or modified under the LaTeX Project %% Public License version 1.3c or higher. The latest version of the @@ -26,8 +26,8 @@ % === Package structure: Identification \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{iran-bibtex} -\def\iranbibtex@version{0.3.0} -\def\iranbibtexdate{2023/12/18} % December 18th, 2023 +\def\iranbibtex@version{0.4.0} +\def\iranbibtexdate{2024/01/8} % January 8th, 2024 \def\iranbibtexfirstrelease{2023/12/12} % December 12th, 2023 \edef\@iranbibtex@info{% ****************************************************^^J% @@ -39,7 +39,7 @@ * citation guide to Persian and English information^^J% * sources in BibTeX.^^J% * ^^J% -* Copyright (c) 2023 Farshad Rasuli^^J% +* Copyright (c) 2023-2024 Farshad Rasuli^^J% * ^^J% ****************************************************^^J% } @@ -53,10 +53,10 @@ % === Package structures: Options -%% iran bibliography style: author-year style, ordered by authors' name +%% iran bibliography style: author-year style, sorted by authors' name \DeclareOption{iran} {% - \setcitestyle{authoryear,% citation mode + \setcitestyle{authoryear,% citation mode round,% braces aysep={},% between author and year }% @@ -65,6 +65,114 @@ +%% iran bibliography style: numbered style, sorted by authors' name +\DeclareOption{iran-plain} +{% + \setcitestyle{numbers,% citation mode + square,% braces + sort&compress, % multiple numerical citations are compressed + }% + \bibliographystyle{iran}% +} + + + +%% iran bibliography style: author-year style, sorted by year +\DeclareOption{iran-year} +{% + \setcitestyle{authoryear,% citation mode + round,% braces + aysep={},% between author and year + }% + \bibliographystyle{iran-year}% +} + + + +%% iran bibliography style: numbered style, sorted by year +\DeclareOption{iran-plainyr} +{% + \setcitestyle{numbers,% citation mode + square,% braces + sort&compress, % multiple numerical citations are compressed + }% + \bibliographystyle{iran-year}% +} + + + +%% iran bibliography style: numbered style, sorted by citation order +\DeclareOption{iran-unsrt} +{% + \setcitestyle{numbers,% citation mode + square,% braces + sort&compress, % multiple numerical citations are compressed + }% + \bibliographystyle{iran-unsrt}% +} + + + +%% iran bibliography style for English/Latin document: author-year style, sorted by authors' name +\DeclareOption{iranlatin} +{% + \setcitestyle{authoryear,% citation mode + round,% braces + aysep={},% between author and year + }% + \bibliographystyle{iranlatin}% +} + + + +%% iran bibliography style for English/Latin document: numbered style, sorted by authors' name +\DeclareOption{iranlatin-plain} +{% + \setcitestyle{numbers,% citation mode + square,% braces + sort&compress, % multiple numerical citations are compressed + }% + \bibliographystyle{iranlatin}% +} + + + +%% iran bibliography style for English/Latin document: author-year style, sorted by year +\DeclareOption{iranlatin-year} +{% + \setcitestyle{authoryear,% citation mode + round,% braces + aysep={},% between author and year + }% + \bibliographystyle{iranlatin-year}% +} + + + +%% iran bibliography style for English/Latin document: numbered style, sorted by year +\DeclareOption{iranlatin-plainyr} +{% + \setcitestyle{numbers,% citation mode + square,% braces + sort&compress, % multiple numerical citations are compressed + }% + \bibliographystyle{iranlatin-year}% +} + + + +%% iran bibliography style for English/Latin document: numbered style, sorted by citation order +\DeclareOption{iranlatin-unsrt} +{% + \setcitestyle{numbers,% citation mode + square,% braces + sort&compress, % multiple numerical citations are compressed + }% + \bibliographystyle{iranlatin-unsrt}% +} + + + \ProcessOptions\relax @@ -83,20 +191,72 @@ -%% renew \cite command to behave like \citep in the netbib package -\renewcommand{\cite}% - {\begingroup\NAT@swatrue\def\NAT@ctype{0}\NAT@partrue - \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}} +% renew \cite command to behave like \citep in the natbib package +\renewcommand{\cite}{% +\begingroup\NAT@swatrue\def\NAT@ctype{0}\NAT@partrue +\@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}% + } -% === Package structure: Extra label appended to year for one author in same year +% === Package structure: Modifying the extra label that is appended to the year for one author in the same year +% Modify extra label of Latin items ---------------------------------- \providecommand{\extrayearlabelen}[1]{#1} -\providecommand{\extrayearlabelfa}[1]{#1} + + +% Set the equivalent Persian character for the English character ----- + +% Implemeted by Bahman Mirzakhani (github.com/bahman-mirzakhani). +% Inspired from tex.stackexchange.com/questions/64131/implementing-switch-cases + +\newcommand\addcase[3]{\expandafter\def\csname\string#1@case@#2\endcsname{#3}} +\newcommand\makeswitch[2][]{% + \newcommand#2[1]{% + \ifcsname\string#2@case@##1\endcsname\csname\string#2@case@##1\endcsname\else#1\fi% + }% +} +\makeswitch[#1]\changealph +\addcase\changealph{a}{الف} +\addcase\changealph{b}{ب} +\addcase\changealph{c}{پ} +\addcase\changealph{d}{ت} +\addcase\changealph{e}{ث} +\addcase\changealph{f}{ج} +\addcase\changealph{g}{چ} +\addcase\changealph{h}{ح} +\addcase\changealph{i}{خ} +\addcase\changealph{j}{د} +\addcase\changealph{k}{ذ} +\addcase\changealph{l}{ر} +\addcase\changealph{m}{ز} +\addcase\changealph{n}{ژ} +\addcase\changealph{o}{س} +\addcase\changealph{p}{ش} +\addcase\changealph{q}{ص} +\addcase\changealph{r}{ض} +\addcase\changealph{s}{ط} +\addcase\changealph{t}{ظ} +\addcase\changealph{u}{ع} +\addcase\changealph{v}{غ} +\addcase\changealph{w}{ف} +\addcase\changealph{x}{ق} +\addcase\changealph{y}{ک} +\addcase\changealph{z}{گ} +\addcase\changealph{aa}{ل} +\addcase\changealph{ab}{م} +\addcase\changealph{ac}{ن} +\addcase\changealph{ad}{و} +\addcase\changealph{ae}{ه‍} +\addcase\changealph{af}{ی} + + + +% Modify extra label of Persian items -------------------------------- +\providecommand{\extrayearlabelfa}[1]{\changealph{#1}} diff --git a/biblio/bibtex/contrib/iran-bibtex/iran-structure.pdf b/biblio/bibtex/contrib/iran-bibtex/iran-structure.pdf deleted file mode 100644 index 5da9017752..0000000000 Binary files a/biblio/bibtex/contrib/iran-bibtex/iran-structure.pdf and /dev/null differ diff --git a/biblio/bibtex/contrib/iran-bibtex/iran-structure.tex b/biblio/bibtex/contrib/iran-bibtex/iran-structure.tex deleted file mode 100644 index c22db4c58d..0000000000 --- a/biblio/bibtex/contrib/iran-bibtex/iran-structure.tex +++ /dev/null @@ -1,681 +0,0 @@ -\documentclass[a4paper,11pt]{article} - -\usepackage{enumitem} -\usepackage{hyperref} - -\usepackage[localise,perpagefootnote=on,computeautoilg=on]{xepersian} -\settextfont{Parsi Nevis} -\setpersianmonofont{Vazir Code} -\setlatintextfont{Parsi Nevis} - -\SepMark{-} - -\setcounter{tocdepth}{1} - - - - -\begin{document} -\title{خلاصه‌ای از ساختار چیدمان مشخصه‌ها در شیوه‌ی استاددهی {\tt iran.bst}} -\author{فرشاد رسولی\thanks{رایانامه: \url{farshad.rasuli@gmail.com}}} -\date{نسخه‌ی ۰٫۳٫۰ --- ۲۷ آذر ۱۴۰۲} -\maketitle - - -\begin{description} -\item[مدخل (\lr{entry}):] -به هر اثری که اطلاعات شناسنامه‌ای آن برای استناددهی در نوشتار وارد میگردد گفته میشود. مدخل میتواند از نوع \verb|@book|، \verb|@incollection|، \verb|@article|، \verb|@inproceeding|، \verb|@masterthesis|، \verb|@phdthesis|، \verb|@misc|، و غیره باشد. -\item[مشخصه (\lr{field}):] -به هر یک از مشخصه‌های شناسنامه‌ای مدخل مانند \lr{\tt author}، \lr{\tt title}، \lr{\tt year}، و غیره گفته میشود. -\end{description} - - - -\renewcommand{\contentsname}{فهرست} -\tableofcontents - - - - - - - - - - -\section{کتاب} -برای استناد به کل یک کتاب از مدخل \verb|@book| استفاده کنید. الگوی چیدمان مشخصه‌های مدخل کتاب در ادامه ارائه شده است. - - - - - -\subsection{کتابهایی که زیر نام نویسنده مرتب میشوند} -اگر برای مدخل کتاب، مشخصه‌ی \verb|author| وارد گردد، زیر نام نویسنده مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt author}. {\tt year}. {\tt title}. {\tt edition} edn. {\tt impression} imp. {\tt comment}. by {\tt by}. Translated by {\tt translator}. {\tt translateyear}. {\tt volume volumes series number}. In collaboration with {\tt collaboration}. Commented by \\{\tt commentator}. Compiled by {\tt compiler}. Edited by {\tt editor}. Introduction by {\tt introduction}. Preface by {\tt preface}. Afterwords by {\tt afterword}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily نویسنده}. {\persianttfamily تاریخ}. {\persianttfamily عنوان}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily جلد، جلدها، فروست، شماره}. با همکاری {\persianttfamily …}. با یادداشت {\persianttfamily …}. گردآوری {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. با مقدمه‌ی {\persianttfamily …}. با پیش‌گفتار {\persianttfamily …}. با پس‌گفتار {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{کتابهایی که زیر نام گردآورده مرتب میشوند} -اگر برای مدخل کتاب، مشخصه‌ی \verb|author| وارد نشود، در صورت وجود مشخصه‌ی \verb|compiler|، زیر نام گردآونده مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt compiler}, comp(s). {\tt year}. {\tt title}. {\tt edition} edn. {\tt impression} imp. {\tt comment}. by {\tt by}. Translated by {\tt translator}. {\tt translateyear}. {\tt volume volumes series number}. In collaboration with {\tt collaboration}. Commented by {\tt commentator}. Edited by {\tt editor}. Introduction by {\tt introduction}. Preface by {\tt preface}. Afterwords by {\tt afterword}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily گردآورنده}، گردآورنده‌‌‌‌(گان). {\persianttfamily تاریخ}. {\persianttfamily عنوان}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily جلد، جلدها، فروست، شماره}. با همکاری {\persianttfamily …}. با یادداشت {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. با مقدمه‌ی {\persianttfamily …}. با پیش‌گفتار {\persianttfamily …}. با پس‌گفتار {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{کتابهایی که زیر نام ویراستار مرتب میشوند} -اگر برای مدخل کتاب، مشخصه‌های \verb|author|، و \verb|compiler| وارد نشوند، در صورت وجود مشخصه‌ی \verb|editor|، زیر نام ویراستار مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt editor}, ed(s). {\tt year}. {\tt title}. {\tt edition} edn. {\tt impression} imp. {\tt comment}. by {\tt by}. Translated by {\tt translator}. {\tt translateyear}. {\tt volume volumes series number}. In collaboration with {\tt collaboration}. Commented by \\{\tt commentator}. Introduction by {\tt introduction}. Preface by {\tt preface}. Afterwords by {\tt afterword}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily ویراستار}، ویراستار(ان). {\persianttfamily تاریخ}. {\persianttfamily عنوان}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily جلد، جلدها، فروست، شماره}. با همکاری {\persianttfamily …}. با یادداشت {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. با مقدمه‌ی {\persianttfamily …}. با پیش‌گفتار {\persianttfamily …}. با پس‌گفتار {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{کتابهایی که زیر نام مترجم مرتب میشوند} -اگر برای مدخل کتاب، مشخصه‌های \verb|author|، \verb|compiler|، و \verb|editor| وارد نشوند، در صورت وجود مشخصه‌ی \verb|translator|، زیر نام مترجم مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt translator}, tran(s). {\tt translateyear}. {\tt title}. {\tt edition} edn. {\tt impression} imp. {\tt comment}. by {\tt by}. {\tt year}. {\tt volume volumes series number}. In collaboration with {\tt collaboration}. Commented by {\tt commentator}. Introduction by {\tt introduction}. Preface by {\tt preface}. Afterwords by {\tt afterword}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily مترجم}، مترجم(‍ان). {\persianttfamily تاریخ ترجمه}. {\persianttfamily عنوان}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily تاریخ}. {\persianttfamily جلد، جلدها، فروست، شماره}. با همکاری {\persianttfamily …}. با یادداشت {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. با مقدمه‌ی {\persianttfamily …}. با پیش‌گفتار {\persianttfamily …}. با پس‌گفتار {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{کتابهایی که زیر عنوان مرتب میشوند} -اگر برای مدخل کتاب، مشخصه‌های \verb|author|، \verb|compiler|، \verb|editor|، و \verb|translator| وارد نشوند، باید مشخصه‌ی \verb|key| آن مدخل برابر با مشخصه‌ی \verb|title| وارد شود که زیر عنوان مرتب گردد. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt title}. {\tt year}. {\tt edition} edn. {\tt impression} imp. {\tt comment}. by {\tt by}. {\tt volume volumes series number}. In collaboration with {\tt collaboration}. Commented by {\tt commentator}. Introduction by {\tt introduction}. Preface by {\tt preface}. Afterwords by {\tt afterword}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily عنوان}. {\persianttfamily تاریخ}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily جلد، جلدها، فروست، شماره}. با همکاری {\persianttfamily …}. با یادداشت {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. با مقدمه‌ی {\persianttfamily …}. با پیش‌گفتار {\persianttfamily …}. با پس‌گفتار {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - - - - - - -\section{پاره‌ای از یک کتاب} -برای استناد به فصلی از کتاب، یا بخشی از یک کتاب که عنوان مشخصی دارد از مدخل \verb|@incollection| استفاده کنید. الگوی چیدمان مشخصه‌های مدخل \verb|@incollection| در ادامه ارائه شده است. - - - - - -\subsection{پاره‌ای از کتاب که زیر نام نویسنده مرتب میشود} -اگر برای مدخل \verb|@incollection|، مشخصه‌ی \verb|author| وارد گردد، زیر نام نویسنده مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt author}. {\tt year}. {\tt title}. {\tt comment}. by {\tt by}. {\tt chapter, booktitle, pages, volume, volumes}. {\tt edition} edn. {\tt impression} imp. Translated by {\tt translator}. {\tt translateyear}. {\tt series number}. Compiled by {\tt compiler}. Edited by {\tt editor}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily نویسنده}. {\persianttfamily تاریخ}. {\persianttfamily عنوان}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily فصل، عنوان‌کتاب، صفحه‌ها، جلد، جلدها}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily فروست، شماره}. گردآوری {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{پاره‌ای از کتاب که زیر نام گردآورنده مرتب میشود} -اگر برای مدخل \verb|@incollection|، مشخصه‌ی \verb|author| وارد نشود، در صورت وجود مشخصه‌ی \verb|compiler| زیر نام گردآورنده مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt compiler}, comp(s). {\tt year}. {\tt title}. {\tt comment}. by {\tt by}. {\tt chapter, booktitle, pages, volume, volumes}. {\tt edition} edn. {\tt impression} imp. Translated by {\tt translator}. {\tt translateyear}. {\tt series number}. Edited by {\tt editor}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily گردآورنده}، گردآورنده(گان). {\persianttfamily تاریخ}. {\persianttfamily عنوان}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily فصل، عنوان‌کتاب، صفحه‌ها، جلد، جلدها}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily فروست، شماره}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{پاره‌ای از کتاب که زیر نام ویراستار مرتب میشود} -اگر برای مدخل \verb|@incollection|، مشخصه‌های \verb|author|، و \verb|compiler| وارد نشود، در صورت وجود مشخصه‌ی \verb|editor| زیر نام گردآورنده مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt editor}, ed(s). {\tt year}. {\tt title}. {\tt comment}. by {\tt by}. {\tt chapter, booktitle, pages, volume, volumes}. {\tt edition} edn. {\tt impression} imp. Translated by {\tt translator}. {\tt translateyear}. {\tt series number}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily ویراستار}، ویراستار(ان). {\persianttfamily تاریخ}. {\persianttfamily عنوان}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily فصل، عنوان‌کتاب، صفحه‌ها، جلد، جلدها}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily فروست، شماره}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{پاره‌ای از کتاب که زیر نام مترجم مرتب میشود} -اگر برای مدخل \verb|@incollection|، مشخصه‌های \verb|author|، \verb|compiler|، و \verb|editor| وارد نشود، در صورت وجود مشخصه‌ی \verb|translator|، زیر نام مترجم مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt translator}, trans. {\tt translateyear}. {\tt title}. {\tt comment}. by {\tt by}. {\tt year}. {\tt chapter, booktitle, pages, volume, volumes}. {\tt edition} edn. \\{\tt impression} imp. {\tt series number}. Compiled by {\tt compiler}. Edited by {\tt editor}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily مترجم}، مترجم(‍ان). {\persianttfamily تاریخ ترجمه}. {\persianttfamily عنوان}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily تاریخ}. {\persianttfamily فصل، عنوان‌کتاب، صفحه‌ها، جلد، جلدها}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily فروست، شماره}. گردآوری {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{پاره‌ای از کتاب که زیر عنوان مرتب میشود} -اگر برای مدخل \verb|@incollection|، مشخصه‌های \verb|author|، و \verb|translator| وارد نشوند، باید مشخصه‌ی \verb|key| آن مدخل برابر با مشخصه‌ی \verb|title| وارد شود که زیر عنوان مرتب گردد. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt title}. {\tt year}. {\tt comment}. by {\tt by}. {\tt chapter, booktitle, pages, volume, volumes}. {\tt edition} edn. {\tt impression} imp. {\tt series number}. Compiled by {\tt compiler}. Edited by {\tt editor}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily عنوان}. {\persianttfamily تاریخ}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily فصل، عنوان‌کتاب، صفحه‌ها، جلد، جلدها}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily فروست، شماره}. گردآوری {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - - - - - - -\section{مقاله در مجله‌ی تخصصی} -برای استناد به یک مقاله‌ی چاپ شده در مجله‌ی تخصصی از مدخل \verb|@article| استفاده کنید. الگوی چیدمان مشخصه‌های مدخل مقاله در ادامه ارائه شده است. - - - - - -\subsection{مقاله‌هایی که زیر نام نویسنده مرتب میشوند} -اگر برای مدخل مقاله، مشخصه‌ی \verb|author| وارد گردد، زیر نام نویسنده مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt author}. {\tt year}. {\tt title}. {\tt comment}. by {\tt by}. Translated by {\tt translator}. {\tt translateyear}. Edited by {\tt editor}. {\tt journal, issue, volume, number, pages}. {\tt note}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily نویسنده}. {\persianttfamily تاریخ}. {\persianttfamily عنوان}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily مجله، ویژه‌نامه، دوره، شماره، صفحه‌ها}. {\persianttfamily یادداشت}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{مقاله‌هایی که زیر نام ویراستار مرتب میشوند} -اگر برای مدخل مقاله، مشخصه‌های \verb|author| وارد نشود، در صورت وجود مشخصه‌ی \verb|editor|، زیر نام ویراستار مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt editor}, ed(s). {\tt year}. {\tt title}. {\tt comment}. by {\tt by}. {\tt journal, issue, volume, number, pages}. {\tt note}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily ویراستار}، ویراستار(ان). {\persianttfamily تاریخ}. {\persianttfamily عنوان}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily مجله، ویژه‌نامه، دوره، شماره، صفحه‌ها}. {\persianttfamily یادداشت}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{مقاله‌هایی که زیر نام مترجم مرتب میشوند} -اگر برای مدخل مقاله، مشخصه‌های \verb|author|، و \verb|editor| وارد نشوند، در صورت وجود مشخصه‌ی \verb|translator|، زیر نام مترجم مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt translator}, trans. {\tt translateyear}. {\tt comment}. {\tt title}. by {\tt by}. {\tt year}. {\tt journal, issue, volume, number, pages}. {\tt note}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily مترجم}، مترجم(‍ان). {\persianttfamily تاریخ ترجمه}. {\persianttfamily عنوان}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily تاریخ}. {\persianttfamily مجله، ویژه‌نامه، دوره، شماره، صفحه‌ها}. {\persianttfamily یادداشت}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{مقاله‌هایی که زیر نام مجله مرتب میشوند} -اگر برای مدخل مقاله، مشخصه‌های \verb|author|، \verb|editor|، و \verb|translator| وارد نشوند، باید مشخصه‌ی \verb|key| آن مدخل برابر با مشخصه‌ی \verb|journal| وارد شود که زیر نام مجله مرتب گردد. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt journal}. {\tt year}. {\tt title}. {\tt comment}. by {\tt by}. Edited by {\tt editor}. {\tt issue, volume, number, pages}. {\tt note}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily مجله}. {\persianttfamily تاریخ}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily ویژه‌نامه، دوره، شماره، صفحه‌ها}. {\persianttfamily یادداشت}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - - - - - - -\section{مجموعه‌ی مقاله‌های یک همایش} -برای استناد به کتابی که دربردارنده‌ی مقاله‌های یک همایش است، از مدخل \verb|@proceedings| استفاده کنید. الگوی چیدمان مشخصه‌های مدخل \verb|@proceedings| در ادامه ارائه شده است. - - - - - -\subsection{مجموعه مقاله‌ای که زیر نام ویراستار مرتب میشود} -اگر برای مدخل \verb|@proceedings|، مشخصه‌ی \verb|editor| وارد گردد، زیر نام ویراستار مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt editor}, ed(s). {\tt year}. {\tt title}. {\tt edition} edn. {\tt impression} imp. Translated by {\tt translator}. {\tt translateyear}. {\tt volume volumes series number}. Compiled by {\tt compiler}. {\tt organization}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily ویراستار}، ویراستار(ان). {\persianttfamily تاریخ}. {\persianttfamily عنوان}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily جلد، جلدها، فروست، شماره}. گردآوری {\persianttfamily …}. {\persianttfamily سازمان}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{مجموعه مقاله‌ای که زیر نام گردآورنده مرتب میشود} -اگر برای مدخل \verb|@proceedings|، مشخصه‌ی \verb|editor| وارد نشود، در صورت وجود مشخصه‌ی \verb|compiler| زیر نام گردآورنده مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt compiler}, comp(s). {\tt year}. {\tt title}. {\tt edition} edn. {\tt impression} imp. Translated by {\tt translator}. {\tt translateyear}. {\tt volume volumes series number}. {\tt organization}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily گردآورنده}، گردآورنده(گان). {\persianttfamily تاریخ}. {\persianttfamily عنوان}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily جلد، جلدها، فروست، شماره}. {\persianttfamily سازمان}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{مجموعه مقاله‌ای که زیر نام مترجم مرتب میشوند} -اگر برای مدخل \verb|@proceedings|، مشخصه‌های \verb|editor|، و \verb|compiler| وارد نشوند، در صورت وجود مشخصه‌ی \verb|translator|، زیر نام مترجم مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt translator}, tran(s). {\tt translateyear}. {\tt title}. {\tt edition} edn. {\tt impression} imp. {\tt volume volumes series number}. {\tt organization}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily مترجم}، مترجم(‍ان). {\persianttfamily تاریخ ترجمه}. {\persianttfamily عنوان}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily جلد، جلدها، فروست، شماره}. {\persianttfamily سازمان}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{مجموعه مقاله‌ای که زیر عنوان مرتب میشوند} -اگر برای مدخل \verb|@proceedings|، مشخصه‌های \verb|editor|، \verb|compiler|، و \verb|translator| وارد نشوند، باید مشخصه‌ی \verb|key| آن مدخل برابر با مشخصه‌ی \verb|title| وارد شود که زیر عنوان مرتب گردد. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt title}. {\tt year}. {\tt edition} edn. {\tt impression} imp. {\tt volume volumes series number}. {\tt organization}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily عنوان}. {\persianttfamily تاریخ}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily جلد، جلدها، فروست، شماره}. {\persianttfamily سازمان}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - - - - - - -\section{مقاله‌ی چاپ شده در مجموعه مقاله‌های یک همایش} -برای استناد به مقاله‌ای که در یک همایش ارائه شده سپس در مجموعه مقاله‌های آن همایش چاپ شده است از مدخل \verb|@inproceedings| استفاده کنید. الگوی چیدمان مشخصه‌های مدخل \verb|@inproceedings| در ادامه ارائه شده است. - - - - - -\subsection{مقاله‌ای که زیر نام نویسنده مرتب میشود} -اگر برای مدخل \verb|@inproceedings|، مشخصه‌ی \verb|author| وارد گردد، زیر نام نویسنده مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt author}. {\tt year}. {\tt title}. by {\tt by}. {\tt booktitle, pages, volume, volumes}. {\tt edition} edn. {\tt impression} imp. Translated by {\tt translator}. {\tt translateyear}. {\tt series number}. Compiled by {\tt compiler}. Edited by {\tt editor}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily نویسنده}. {\persianttfamily تاریخ}. {\persianttfamily عنوان}. نوشته‌ی {\persianttfamily …}. {\persianttfamily عنوان‌کتاب، صفحه‌ها، جلد، جلدها}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily فروست شماره}. گردآوری {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{مقاله‌ای که زیر نام مترجم مرتب میشود} -اگر برای مدخل \verb|@inproceedings|، مشخصه‌ی \verb|author| وارد نشود، در صورت وجود مشخصه‌ی \verb|translator|، زیر نام مترجم مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt translator}, trans. {\tt translateyear}. {\tt title}. by {\tt by}. {\tt year}. {\tt booktitle, pages, volume, volumes}. {\tt edition} edn. {\tt impression} imp. {\tt series number}. Compiled by {\tt compiler}. Edited by {\tt editor}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily مترجم}، مترجم(‍ان). {\persianttfamily تاریخ ترجمه}. {\persianttfamily عنوان}. نوشته‌ی {\persianttfamily …}. {\persianttfamily تاریخ}. {\persianttfamily عنوان‌کتاب، صفحه‌ها، جلد، جلدها}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily فروست شماره}. گردآوری {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{مقاله‌ای که زیر عنوان مرتب میشود} -اگر برای مدخل \verb|@inproceedings|، مشخصه‌های \verb|author|، و \verb|translator| وارد نشوند، باید مشخصه‌ی \verb|key| آن مدخل برابر با مشخصه‌ی \verb|title| وارد شود که زیر عنوان مرتب گردد. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt title}. {\tt year}. by {\tt by}. {\tt booktitle, pages, volume, volumes}. {\tt edition} edn. {\tt impression} imp. {\tt series number}. Compiled by {\tt compiler}. Edited by {\tt editor}. {\tt address: publisher}. {\tt note}. ISBN: {\tt isbn}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily عنوان}. {\persianttfamily تاریخ}. نوشته‌ی {\persianttfamily …}. {\persianttfamily عنوان‌کتاب، صفحه‌ها، جلد، جلدها}. ویرایش {\persianttfamily …}. چاپ {\persianttfamily …}. {\persianttfamily فروست شماره}. گردآوری {\persianttfamily …}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شابک: {\persianttfamily …}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - - - - - - -\section{مقاله‌ی ارائه شده در یک همایش} -برای استناد به مقاله‌ای که در یک همایش ارائه شده است از مدخل \verb|@conference| استفاده کنید. الگوی چیدمان مشخصه‌های مدخل \verb|@conference| در ادامه ارائه شده است. - - - - - -\subsection{مقاله‌هایی که زیر نام نویسنده مرتب میشود} -اگر برای مدخل \verb|@conference|، مشخصه‌ی \verb|author| وارد گردد، زیر نام نویسنده مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt author}. {\tt year}. {\tt title}. by {\tt by}. Translated by {\tt translator}. {\tt translateyear}. {\tt series, number, pages}. Edited by {\tt editor}. {\tt organization, address, publisher}. {\tt note}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily نویسنده}. {\persianttfamily تاریخ}. {\persianttfamily عنوان}. نوشته‌ی {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily فروست، شماره، صفحه‌ها}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily سازمان، محل نشر، ناشر}. {\persianttfamily یادداشت}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{مقاله‌هایی که زیر نام مترجم مرتب میشود} -اگر برای مدخل \verb|@conference|، مشخصه‌ی \verb|author| وارد نشود، در صورت وجود مشخصه‌ی \verb|translator|، زیر نام مترجم مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt translator}, trans. {\tt translateyear}. {\tt title}. by {\tt by}. {\tt year}. {\tt series, number, pages}. Edited by {\tt editor}. {\tt organization, address, publisher}. {\tt note}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily مترجم}، مترجم(‍ان). {\persianttfamily تاریخ ترجمه}. {\persianttfamily عنوان}. نوشته‌ی {\persianttfamily …}. {\persianttfamily تاریخ}. {\persianttfamily فروست، شماره، صفحه‌ها}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily سازمان، محل نشر، ناشر}. {\persianttfamily یادداشت}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{مقاله‌هایی که زیر عنوان مرتب میشود} -اگر برای مدخل \verb|@conference|، مشخصه‌های \verb|author|، و \verb|translator| وارد نشوند، باید مشخصه‌ی \verb|key| آن مدخل برابر با مشخصه‌ی \verb|title| وارد شود که زیر عنوان مرتب گردد. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt title}. {\tt year}. by {\tt by}. {\tt series, number, pages}. Edited by {\tt editor}. {\tt organization, address, publisher}. {\tt note}. ISSN: {\tt issn}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily عنوان}. {\persianttfamily تاریخ}. نوشته‌ی {\persianttfamily …}. {\persianttfamily فروست، شماره، صفحه‌ها}. ویراسته‌ی {\persianttfamily …}. {\persianttfamily سازمان، محل نشر، ناشر}. {\persianttfamily یادداشت}. شاپا: {\persianttfamily …}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - - - - - - -\section{پارسا (پایان‌نامه‌ی کارشناسی‌ارشد، و رساله‌ی دکتری)} -برای استناد به پایان‌نامه‌ی کارشناسی‌ارشد از مدخل \verb|@mastersthesis| و برای استناد به رساله‌ی دکتری از مدخل \verb|@phdthesis| استفاده کنید. الگوی چیدمان مشخصه‌های مدخل مقاله در ادامه ارائه شده است. - - - - - -\subsection{پارساهایی که زیر نام نویسنده مرتب میشوند} -اگر برای مدخل پارسا، مشخصه‌ی \verb|author| وارد گردد، زیر نام نویسنده مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt author}. {\tt year}. {\tt title}. {\tt comment}. {\tt school, type, address}. {\tt note}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily نویسنده}. {\persianttfamily تاریخ}. {\persianttfamily عنوان}. {\persianttfamily توضیح}. {\persianttfamily دانشگاه، نوع‌سند، محل نشر}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{پارساهایی که زیر عنوان مرتب میشوند} -اگر برای مدخل پارسا، مشخصه‌ی \verb|author| وارد نشود، باید مشخصه‌ی \verb|key| آن مدخل برابر با مشخصه‌ی \verb|title| وارد شود که زیر عنوان مرتب گردد. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt title}. {\tt year}. {\tt comment}. {\tt school, type, address}. {\tt note}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily عنوان}. {\persianttfamily تاریخ}. {\persianttfamily توضیح}. {\persianttfamily دانشگاه، نوع‌سند، محل نشر}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - - - - - - -\section{اثرهای منتشر نشده} -برای استناد به اثرهایی که به صورت رسمی منتشر نشده‌اند از مدخل \verb|@unpublished| استفاده کنید. الگوی چیدمان مشخصه‌های مدخل \verb|@unpublished| در ادامه ارائه شده است. - - - - - -\subsection{اثرهای منتشر نشده که زیر نام نویسنده مرتب میشود} -اگر برای مدخل \verb|@unpublished|، مشخصه‌ی \verb|author| وارد گردد، زیر نام نویسنده مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt author}. {\tt year}. {\tt title}. {\tt comment}. by {\tt by}. Translated by {\tt translator}. {\tt translateyear}. {\tt howpublished}. {\tt note}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily نویسنده}. {\persianttfamily تاریخ}. {\persianttfamily عنوان}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. ترجمه‌ی {\persianttfamily …}. {\persianttfamily تاریخ ترجمه}. {\persianttfamily چگونگی‌انتشار}. {\persianttfamily یادداشت}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{اثرهای منتشر نشده که زیر نام مترجم مرتب میشود} -اگر برای مدخل \verb|@unpublished|، مشخصه‌ی \verb|author| وارد نشود، در صورت وجود مشخصه‌ی \verb|translator|، زیر نام مترجم مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt translator}, trans. {\tt translateyear}. {\tt title}. {\tt comment}. by {\tt by}. {\tt year}. {\tt howpublished}. {\tt note}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily مترجم}, مترجم(‍ان). {\persianttfamily تاریخ ترجمه}. {\persianttfamily عنوان}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily تاریخ}. {\persianttfamily چگونگی‌انتشار}. {\persianttfamily یادداشت}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{اثرهای منتشر نشده که زیر عنوان مرتب میشود} -اگر برای مدخل \verb|@unpublished|، مشخصه‌های \verb|author|، و \verb|translator| وارد نشوند، باید مشخصه‌ی \verb|key| آن مدخل برابر با مشخصه‌ی \verb|title| وارد شود که زیر عنوان مرتب گردد. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt title} {\tt year}. {\tt comment}. by {\tt by}. {\tt howpublished}. {\tt note}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily عنوان}. {\persianttfamily تاریخ}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily چگونگی‌انتشار}. {\tt address: publisher}. {\persianttfamily یادداشت}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - - - - - - -\section{دیگر اثرها} -برای استناد به اثرهایی که در دسته‌های ارائه شده‌ی پیشین قرار نمیگیرند، از مدخل متفرقه (\verb|@misc|) استفاده کنید. الگوی چیدمان مشخصه‌های مدخل \verb|@misc| در ادامه ارائه شده است. - - - - - -\subsection{اثرهای متفرقه که زیر نام نویسنده مرتب میشود} -اگر برای مدخل \verb|@misc|، مشخصه‌ی \verb|author| وارد گردد، زیر نام نویسنده مرتب میشود. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt author}. {\tt year}. {\tt title}. by {\tt by}. {\tt howpublished}. {\tt note}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily نویسنده}. {\persianttfamily تاریخ}. {\persianttfamily عنوان}. نوشته‌ی {\persianttfamily …}. {\persianttfamily چگونگی‌انتشار}. {\persianttfamily یادداشت}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - -\subsection{اثرهای منتشر نشده که زیر عنوان مرتب میشود} -اگر برای مدخل \verb|@misc|، مشخصه‌ی \verb|author| وارد نشود، باید مشخصه‌ی \verb|key| آن مدخل برابر با مشخصه‌ی \verb|title| وارد شود که زیر عنوان مرتب گردد. - -\begin{itemize}[nosep] -\begin{latin} -\item[] [] -{\tt title} {\tt year}. {\tt comment}. by {\tt by}. {\tt howpublished}. {\tt note}. DOI: {\tt doi}. Retrieved {\tt urldate}. URL: {\tt url}. -\end{latin} - -\item[] [] -{\persianttfamily عنوان}. {\persianttfamily تاریخ}. {\persianttfamily توضیح}. نوشته‌ی {\persianttfamily …}. {\persianttfamily چگونگی‌انتشار}. {\persianttfamily محل نشر: ناشر}. {\persianttfamily یادداشت}. شناسه‌ی دیجیتال: {\persianttfamily …}. دسترسی در {\persianttfamily …}. تارنما: {\persianttfamily …}. -\end{itemize} - - - - - - - - - - -\end{document} \ No newline at end of file diff --git a/biblio/bibtex/contrib/iran-bibtex/iran-unsrt.bst b/biblio/bibtex/contrib/iran-bibtex/iran-unsrt.bst new file mode 100644 index 0000000000..0ad33155dc --- /dev/null +++ b/biblio/bibtex/contrib/iran-bibtex/iran-unsrt.bst @@ -0,0 +1,4896 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% +%% This file is “iran-unsrt.bst”, v0.1.0 (2024/01/8) +%% generated with the DOCSTRIP utility, then modified to support +%% bilingual (English/Latin, and Persian/Farsi) in accordance with the +%% “Iran Manual of Style Citation Guide” (1st edn., 2016). +%% +%% +%% +%% Copyright (c) 2023-2024 Farshad Rasuli +%% +%% This file can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License version 1.3c, or any later version. +%% The latest version of the License is at: latex-project.org/lppl.txt +%% +%% This BibTeX bibliography style (bst) file is part of +%% the “iran-bibtex” package. +%% +%% CTAN catalog: https://ctan.org/pkg/iran-bibtex +%% CTAN archive: https://ctan.org/tex-archive/biblio/bibtex/contrib/iran-bibtex +%% Repository: https://github.com/farshadrasuli/iran-bibtex +%% Bug tracker: https://github.com/farshadrasuli/iran-bibtex/issues +%% +%% +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +%%----------------------------------------------------------------------------- +%% This bibliography style file is intended for texts in Persian. +%% This is a numbered citation style bibliography. This style file is +%% based on natbib.sty package by Patrick W. Daly. +%% The form of the \bibitem entries is +%% \bibitem[Jones et al.(1990)]{key}... +%% \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... +%% The essential feature is that the label (the part in brackets) consists +%% of the author names, as they can appear in the citation, with the year +%% in parentheses following. There must be no space before the opening +%% parenthesis! +%% +%% The \cite command functions as follows (\cite is equal to \citep command): +%% \citep{key} => [1] +%% \citep*{key} => [1] +%% \citep[chap. 2]{key} => [1, chap. 2] +%% \citep[e.g.][]{key} => [e.g. 1] +%% \citep[e.g.][p. 32]{key} => [e.g. 1, p. 32] +%% \citet{key} => Jones et al. [1] +%% \citet*{key} => Jones, Baker, and Smith [1] +%% \citeauthor{key} => Jones et al. +%% \citeauthor*{key} => Jones, Baker, and Smith +%% \citeyear{key} => 1990 +%%----------------------------------------------------------------------------- + + + +ENTRY +{ + address + afterword % the added field + archive + author + authorfa % the added field + booktitle + by % the added field + chapter + collaboration + comment % the added field + commentator % the added field + compiler % the added field + doi + edition + editor + eid + eprint + foreword % the added field + howpublished + impression % the added field + institution + introduction % the added field + isbn + issn + issue % the added field + journal + key + language + month + note + number + numpages + organization + pages + preface % the added field + publisher + school + series + title + translator % the added field + translateyear % the added field + type + url + urldate % the added field + volume + volumes % the added field + year +} +{} +{ + label + sort.label + short.list +} + + + + + +% Logical operators + +FUNCTION {not} +{ + { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ + 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ + { pop$ #1 } + 'skip$ + if$ +} + + + + + + +% Check for language entry + +FUNCTION {is.language.persian} +{ + language missing$ + { #0 } + { language "l" change.case$ "persian" = } + if$ +} + + + + + +% Here are the language-specific definitions for explicit words. +% Each function has a name bbl.xxx where xxx is the English word. + +FUNCTION {bbl.afterwordby} +{ + is.language.persian + {"با پس‌گفتار"} + {"afterword by"} + if$ +} + +FUNCTION {bbl.and} +{ + is.language.persian + {"و"} + {"and"} + if$ +} + +FUNCTION {bbl.andothers} +{ + is.language.persian + {"و~دیگران"} + {"and~others"} + if$ +} + +FUNCTION {bbl.by} +{ + is.language.persian + {"نوشته‌ی"} + {"by"} + if$ +} + +FUNCTION {bbl.chapter} +{ + is.language.persian + {"فصل"} + {"chapter"} + if$ +} + +FUNCTION {bbl.comma} +{ + is.language.persian + {"،"} + {","} + if$ +} + +FUNCTION {bbl.commentator} +{ + is.language.persian + {"یادداشت‌نویس"} + {"comm."} + if$ +} + +FUNCTION {bbl.commentatedby} +{ + is.language.persian + {"با یادداشت"} + {"commentated by"} + if$ +} + +FUNCTION {bbl.compiler} +{ + is.language.persian + {"گردآورنده"} + {"comp."} + if$ +} + +FUNCTION {bbl.compilers} +{ + is.language.persian + {"گردآورندگان"} + {"comps."} + if$ +} + +FUNCTION {bbl.compiledby} +{ + is.language.persian + {"گردآوری"} + {"compiled by"} + if$ +} + +FUNCTION {bbl.doi} +{ + is.language.persian + {"شناسه‌ی دیجیتال"} + {"doi"} + if$ +} + +FUNCTION {bbl.dquote} +{ + is.language.persian + {"\faquote{" swap$ * add.period$ "}" *} + {"\enquote{" swap$ * add.period$ "}" *} + if$ +} + +FUNCTION {bbl.editor} +{ + is.language.persian + {"ویراستار"} + {"ed."} + if$ +} + +FUNCTION {bbl.editors} +{ + is.language.persian + {"ویراستاران"} + {"eds."} + if$ +} + +FUNCTION {bbl.editedby} +{ + is.language.persian + {"ویراسته‌ی"} + {"edited by"} + if$ +} + +FUNCTION {bbl.edition} +{ + is.language.persian + {"ویرایش"} + {"edn."} + if$ +} + +FUNCTION {bbl.eidpp} +{ + is.language.persian + {"صص"} + {"pages"} + if$ +} + +FUNCTION {bbl.etal} +{ + is.language.persian + {"و~همکاران"} + {"et~al."} + if$ +} + +FUNCTION {bbl.forewordby} +{ + is.language.persian + {"با پیش‌گفتار"} + {"forword by"} + if$ +} + +FUNCTION {bbl.impression} +{ + is.language.persian + {"چاپ"} + {"imp."} + if$ +} + +FUNCTION {bbl.in} +{ + is.language.persian + {"در"} + {"in"} + if$ +} + +FUNCTION {bbl.incollaborationwith} +{ + is.language.persian + {"با همکاری"} + {"in collaboration with"} + if$ +} + +FUNCTION {bbl.introby} +{ + is.language.persian + {"با مقدمه‌ی"} + {"introduction by"} + if$ +} + +FUNCTION {bbl.isbn} +{ + is.language.persian + {"شابک"} + {"isbn"} + if$ +} + +FUNCTION {bbl.issn} +{ + is.language.persian + {"شاپا"} + {"issn"} + if$ +} + +FUNCTION {bbl.mthesis} +{ + is.language.persian + {"پایان‌نامه‌ی کارشناسی‌ارشد"} + {"Master's thesis"} + if$ +} + +FUNCTION {bbl.nr} +{ + is.language.persian + {"ش."} + {"no."} + if$ +} + +FUNCTION {bbl.number} +{ + is.language.persian + {"ش."} + {"no."} + if$ +} + +FUNCTION {bbl.of} +{ + is.language.persian + {"از"} + {"of"} + if$ +} + +FUNCTION {bbl.page} +{ + is.language.persian + {"ص"} + {"p."} + if$ +} + +FUNCTION {bbl.pages} +{ + is.language.persian + {"صص"} + {"pp."} + if$ +} + +FUNCTION {bbl.prefaceby} +{ + is.language.persian + {"با پیش‌گفتار"} + {"preface by"} + if$ +} + +FUNCTION {bbl.phdthesis} +{ + is.language.persian + {"رساله‌ی دکتری"} + {"PhD dissertation"} + if$ +} + +FUNCTION {bbl.retrieved} +{ + is.language.persian + {"دسترسی در"} + {"retrieved"} + if$ +} + +FUNCTION {bbl.semicolon} +{ + is.language.persian + {"؛"} + {";"} + if$ +} + +FUNCTION {bbl.techrep} +{ + is.language.persian + {"گزارش"} + {"tech. rep."} + if$ +} + +FUNCTION {bbl.thesis} +{ + is.language.persian + {"پایان‌نامه"} + {"Thesis"} + if$ +} + +FUNCTION {bbl.translator} +{ + is.language.persian + {"مترجم"} + {"trans."} + if$ +} + +FUNCTION {bbl.translators} +{ + is.language.persian + {"مترجمان"} + {"trans."} + if$ +} + +FUNCTION {bbl.translatedby} +{ + is.language.persian + {"ترجمه‌ی"} + {"translated by"} + if$ +} + +FUNCTION {bbl.url} +{ + is.language.persian + {"تارنما"} + {"url"} + if$ +} + +FUNCTION {bbl.volume} +{ + is.language.persian + {"ج."} + {"vol."} + if$ +} + +FUNCTION {bbl.volumes} +{ + is.language.persian + {"ج."} + {"vols."} + if$ +} + + + + + +% Macro for abbreviation of month + +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"} + + + + + +% Functions to declare position + +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 := +} + + + +% Functions to print output + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ + 's := + output.state mid.sentence = + { bbl.comma * " " * write$ } + { + output.state after.block = + { + add.period$ write$ + newline$ + "\newblock " write$ + } + { + output.state before.all = + 'write$ + { add.period$ write$ " " 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$ +} + + + + + +% Functions to check and warn bibinfo + +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 {either.or.check} +{ + empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + + + + + +% Functions to control the print format of entries + +FUNCTION {new.block} +{ + output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + + + +FUNCTION {new.block.checkb} +{ + empty$ + swap$ empty$ + and + 'skip$ + 'new.block + 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 {capitalize} +{ "u" change.case$ "t" change.case$ } + + + +FUNCTION {date.block} +{ + new.block +} + + + +FUNCTION {emphasize} +{ + duplicate$ empty$ + { pop$ "" } + { "{\it " swap$ * "}" * } + if$ +} + + + +FUNCTION {field.or.null} +{ + duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + + + +FUNCTION {no.blank.or.punct} +{ + "\hspace{0pt}" * before.all 'output.state := +} + + + +FUNCTION {non.stop} +{ + duplicate$ + "}" * add.period$ + #-1 #1 substring$ "." = +} + + + +STRINGS {z} + +FUNCTION {remove.dots} +{ + 'z := + "" + { + z empty$ not + } + { + z #1 #2 substring$ + duplicate$ "\." = + { + z #3 global.max$ substring$ 'z := * + } + { + pop$ + z #1 #1 substring$ + z #2 global.max$ substring$ 'z := + duplicate$ "." = + 'pop$ + { * } + if$ + } + if$ + } + while$ +} + + + +FUNCTION {separate.by.space} +{ " " swap$ * " " * } + + + +FUNCTION {space.word} +{ " " swap$ * " " * } + + + +FUNCTION {tie.or.space.prefix} +{ + duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ +} + + + +FUNCTION {word.in} +{ + output.state mid.sentence = + { bbl.in " " * } + { bbl.in capitalize " " * } + if$ +} + + + + + +% Functions to format names + +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 + duplicate$ #1 > + { "{ff~}{vv~}{ll}{, jj}" } + { "{vv~}{ll}{, ff}{, jj}" } + if$ + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + namesleft #1 > + { + bbl.comma * " " * t * + } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + bbl.comma * + t "others" = + { + " " * bbl.etal * + } + { + bbl.and + separate.by.space * 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 + "{ff~}{vv~}{ll}{, jj}" + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + namesleft #1 > + { + bbl.comma * " " * t * + } + { + s nameptr "{ll}" format.name$ + duplicate$ "others" = + { 't := } + { pop$ } + if$ + bbl.comma * + t "others" = + { + + " " * bbl.etal * + } + { + bbl.and + separate.by.space * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } + if$ +} + + + +FUNCTION {format.key} +{ + empty$ + { key field.or.null } + { "" } + if$ +} + + + +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$ +} + + + +STRINGS {oldname} + +FUNCTION {name.or.dash} +{ + 's := + oldname empty$ + { s 'oldname := s } + { + s oldname = + { "---{}---{}---" } + { s 'oldname := s } + if$ + } + if$ +} + + + + + +% Functions to create the short name label for the entry + +FUNCTION {label.and} +{ + is.language.persian + { "و" } + { + authorfa missing$ + { "and" } + { "و" } + if$ + } + if$ +} + + + +FUNCTION {label.andothers} +{ + is.language.persian + { "و~دیگران" } + { + authorfa missing$ + { "and~others" } + { "و~دیگران" } + if$ + } + if$ +} + + + +FUNCTION {label.comma} +{ + is.language.persian + { "،" } + { + authorfa missing$ + { "," } + { "،" } + if$ + } + if$ +} + + + +FUNCTION {label.etal} +{ + is.language.persian + { "و~همکاران" } + { + authorfa missing$ + { "et~al." } + { "و~همکاران" } + if$ + } + if$ +} + + + +INTEGERS { is.authorfa.exist } + +FUNCTION {format.short.label.names} +{ + 's := + "" 't := + s #1 "{vv~}{ll}" format.name$ + s num.names$ #3 > + { + " " * label.etal * + } + { + s num.names$ #2 < + 'skip$ + { + s num.names$ #3 < + { + s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + " " * label.etal * + } + { + label.comma * label.and separate.by.space * s #2 "{vv~}{ll}" format.name$ * + } + if$ + } + { + s #3 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + " " * label.etal * + } + { + label.comma * " " * s #2 "{vv~}{ll}" format.name$ * + label.comma * label.and separate.by.space * s #3 "{vv~}{ll}" format.name$ * + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {author.key.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {author.editor.key.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {editor.key.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {book.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + compiler empty$ not + { compiler format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + compiler empty$ not + { compiler format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {article.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {proc.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + compiler empty$ not + { compiler format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {conf.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {make.short.label.names} +{ + type$ "book" = + 'book.short.label.names + { + type$ "incollection" = + 'incoll.short.label.names + { + type$ "article" = + 'article.short.label.names + { + type$ "proceedings" = + 'proc.short.label.names + { + type$ "inproceedings" = + 'inproc.short.label.names + { + type$ "conference" = + 'conf.short.label.names + { + type$ "inbook" = + 'author.editor.key.short.label.names + 'author.key.short.label.names + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + 'short.list := +} + + + + + +% Functions to create the full name label for the entry + +FUNCTION {format.full.label.names} +{ + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { + namesleft #0 > + } + { + s nameptr + "{vv~}{ll}" format.name$ + 't := + nameptr #1 > + { + namesleft #1 > + { + label.comma * " " * t * + } + { + s nameptr "{ll}" format.name$ + duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + } + { + numnames #2 > + { label.comma * } + 'skip$ + if$ + label.and + separate.by.space * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + + + +FUNCTION {author.key.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {author.editor.key.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {editor.key.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {book.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + compiler empty$ not + { compiler format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + compiler empty$ not + { compiler format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {article.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {proc.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + compiler empty$ not + { compiler format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {conf.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {make.full.label.names} +{ + type$ "book" = + 'book.full.label.names + { + type$ "incollection" = + 'incoll.full.label.names + { + type$ "article" = + 'article.full.label.names + { + type$ "proceedings" = + 'proc.full.label.names + { + type$ "inproceedings" = + 'inproc.full.label.names + { + type$ "conference" = + 'conf.full.label.names + { + type$ "inbook" = + 'author.editor.key.full.label.names + 'author.key.full.label.names + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + + + +% Functions to create the label of the entry + +FUNCTION {calc.label} +{ + make.short.label.names + short.list "(" * + year duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + * + 'label := +} + + + + + +% Functions to open, and close the bibitem + +FUNCTION {begin.bibitem} +{ + newline$ + is.language.persian + { + "\bibitem[{" write$ + } + { + "\begin{LTRbibitems}\resetlatinfont" write$ + newline$ + "\bibitem[{" write$ + } + if$ + label write$ + ")" + make.full.label.names duplicate$ short.list = + { pop$ } + { * } + if$ + "}]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + + + +FUNCTION {end.bibitem} +{ + add.period$ write$ + newline$ + is.language.persian + 'skip$ + { + "\end{LTRbibitems}" write$ + newline$ + } + if$ +} + + + + + +% Functions to format fields + +FUNCTION {field.afterword} +{ + afterword empty$ not + { + afterword "afterword" format.names.ed + bbl.afterwordby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.author} +{ author "author" format.names } + + + +FUNCTION {field.booktitle} +{ + booktitle "booktitle" bibinfo.check + emphasize +} + + + +FUNCTION {field.by} +{ + by empty$ not + { + by "by" format.names.ed + bbl.by " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.collaboration} +{ + collaboration empty$ not + { + collaboration "collaboration" format.names.ed + bbl.incollaborationwith capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.comment} +{ + comment +} + + + +FUNCTION {field.commentator} +{ + commentator empty$ not + { + commentator "commentator" format.names.ed + bbl.commentatedby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {get.bbl.compiler} +{ + compiler num.names$ #1 > + 'bbl.compilers + 'bbl.compiler + if$ +} + +FUNCTION {field.compiler} +{ + compiler "compiler" format.names + duplicate$ empty$ + 'skip$ + { + bbl.comma * " " * get.bbl.compiler * + } + if$ +} + + + +FUNCTION {field.compiler.compiledby} +{ + compiler empty$ not + { + compiler "compiler" format.names.ed + bbl.compiledby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.doi} +{ + doi empty$ + { "" } + { + bbl.doi "u" change.case$ ":\doi{" * doi * "}" * + } + if$ +} + + + +FUNCTION {field.edition} +{ + edition duplicate$ empty$ + 'skip$ + { + output.state mid.sentence = + { "l" } + { "t" } + if$ + change.case$ + "edition" bibinfo.check + is.language.persian + { bbl.edition " " * swap$ * } + { " " * bbl.edition * } + if$ + } + if$ +} + + + +FUNCTION {get.bbl.editor} +{ + editor num.names$ #1 > + 'bbl.editors + 'bbl.editor + if$ +} + +FUNCTION {field.editor} +{ + editor "editor" format.names + duplicate$ empty$ + 'skip$ + { + bbl.comma * " " * get.bbl.editor * + } + if$ +} + + + +FUNCTION {field.editor.editedby} +{ + editor empty$ not + { + editor "editor" format.names.ed + bbl.editedby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.eprint} +{ + eprint duplicate$ empty$ + 'skip$ + { + "\eprint" + archive empty$ + 'skip$ + { "[" * archive * "]" * } + if$ + "{" * swap$ * "}" * + } + if$ +} + + + +FUNCTION {field.howpublished} +{ + howpublished +} + + + +FUNCTION {field.impression} +{ + impression duplicate$ empty$ not + { + output.state mid.sentence = + { "l" } + { "t" } + if$ + change.case$ + is.language.persian + { bbl.impression " " * swap$ * } + { " " * bbl.impression * } + if$ + } + 'skip$ + if$ +} + + + +FUNCTION {field.introduction} +{ + introduction empty$ not + { + introduction "introduction" format.names.ed + bbl.introby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.isbn} +{ + isbn "isbn" bibinfo.check + duplicate$ empty$ + 'skip$ + { + bbl.isbn "u" change.case$ ": " * swap$ * + } + if$ +} + + + +FUNCTION {field.issn} +{ + issn "issn" bibinfo.check + duplicate$ empty$ + 'skip$ + { + bbl.issn "u" change.case$ ": " * swap$ * + } + if$ +} + + + +FUNCTION {field.note} +{ + note empty$ not + { + 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 {field.organization} +{ + organization "organization" bibinfo.check +} + + + +INTEGERS { multiresult } + +FUNCTION {field.pages.check.multipage} +{ + '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 {field.pages} +{ + pages duplicate$ empty$ + 'skip$ + { + duplicate$ field.pages.check.multipage + { + n.dashify + } + { + } + if$ + "pages" bibinfo.check + } + if$ +} + + + +FUNCTION {field.preface} +{ + preface empty$ not + { + preface "preface" format.names.ed + bbl.prefaceby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.title} +{ + title + duplicate$ empty$ + 'skip$ + { bbl.dquote } + if$ +} + + + +FUNCTION {field.btitle} +{ + title "title" bibinfo.check + duplicate$ empty$ + 'skip$ + { emphasize } + if$ +} + + + +FUNCTION {field.title.dqoute} +{ + title + duplicate$ empty$ + 'skip$ + { bbl.dquote } + if$ +} + + + +FUNCTION {field.title.emph} +{ + title "title" bibinfo.check + duplicate$ empty$ + 'skip$ + { emphasize } + if$ +} + + + +FUNCTION {get.bbl.translator} +{ + translator num.names$ #1 > + 'bbl.translators + 'bbl.translator + if$ +} + +FUNCTION {field.translator} +{ + translator "translator" format.names + duplicate$ empty$ + 'skip$ + { + bbl.comma * " " * get.bbl.translator * + } + if$ +} + + +FUNCTION {field.translateyear} +{ + translateyear empty$ not + { + translateyear + } + { "" } + if$ + before.all 'output.state := + after.sentence 'output.state := +} + + + +FUNCTION {field.translator.translatedby} +{ + translator empty$ not + { + translator "translator" format.names.ed + bbl.translatedby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.url} +{ + url duplicate$ empty$ + { pop$ "" } + { + bbl.url "u" change.case$ ": \url{" * swap$ * "}" * + } + if$ +} + + + +FUNCTION {field.urldate} +{ + urldate duplicate$ empty$ + { pop$ "" } + { bbl.retrieved capitalize " " * swap$ * } + if$ +} + + + +FUNCTION {field.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 {field.year} +{ + year "year" bibinfo.check + duplicate$ empty$ + { + } + 'skip$ + if$ + before.all 'output.state := + after.sentence 'output.state := +} + + + +FUNCTION {in.ed.field.booktitle} % NOT USED +{ + field.booktitle + duplicate$ empty$ + 'skip$ + { + field.bvolume + duplicate$ empty$ + 'pop$ + { bbl.comma " " * swap$ * * } + if$ + editor "editor" format.names.ed + duplicate$ empty$ + 'pop$ + { + bbl.editedby capitalize " " * swap$ * + swap$ + add.period$ " " * swap$ * + } + if$ + word.in swap$ * + } + if$ +} + + + + + +% Functions to format combined fields + +FUNCTION {fields.journal.pages} +{ + pages duplicate$ empty$ 'pop$ + { + swap$ duplicate$ empty$ + { + pop$ pop$ field.pages + } + { + ": " * + swap$ + n.dashify + "pages" bibinfo.check + * + } + if$ + } + if$ +} + + + +FUNCTION {fields.journal.eid} +{ + eid "eid" bibinfo.check + duplicate$ empty$ + 'pop$ + { + swap$ + duplicate$ empty$ + 'skip$ + { + ": " * + } + if$ + swap$ * + numpages empty$ + 'skip$ + { + bbl.eidpp numpages tie.or.space.prefix + "numpages" bibinfo.check * * + " (" swap$ * ")" * * + } + if$ + } + if$ +} + + +FUNCTION {fields.number.series} +{ + volume empty$ + { + number empty$ + { series field.or.null } + { + series empty$ + { number "number" bibinfo.check } + { + output.state mid.sentence = + { bbl.number } + { bbl.number capitalize } + if$ + number tie.or.space.prefix "number" bibinfo.check * * + bbl.in space.word * + series "series" bibinfo.check * + } + if$ + } + if$ + } + { "" } + if$ +} + + + +FUNCTION {fields.org.or.pub} +{ + 't := + "" + address empty$ t empty$ and + 'skip$ + { + address "address" bibinfo.check * + t empty$ + 'skip$ + { + address empty$ + 'skip$ + { ": " * } + if$ + t * + } + if$ + } + if$ +} + + + +FUNCTION {fields.publisher.address} +{ + publisher "publisher" bibinfo.check fields.org.or.pub +} + + + +FUNCTION {fields.organization.address} +{ + organization "organization" bibinfo.check fields.org.or.pub +} + + + +FUNCTION {fields.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 {fields.vol.num.pages} +{ + volume field.or.null + duplicate$ empty$ + 'skip$ + { + "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$ + { fields.journal.pages } + { fields.journal.eid } + if$ +} + + + +FUNCTION {fields.chapter.pages} +{ + chapter empty$ + 'field.pages + { + type empty$ + { bbl.chapter } + { + type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter tie.or.space.prefix + "chapter" bibinfo.check + * * + pages empty$ + 'skip$ + { bbl.comma * " " * field.pages * } + if$ + } + if$ +} + + + + + +% Functions to format combined fields for specific entry + +FUNCTION {book.field.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 separate.by.space * + } + if$ + " \cite{" * crossref * "}" * +} + + + +FUNCTION {book.fields.volume.series.number} +{ + volume empty$ not + { + volumes empty$ not + { + series empty$ not + { + number empty$ not + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + " " * series emphasize * + " " * number * + } + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + " " * series emphasize * + } + if$ + } + { + number empty$ not + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + " " * bbl.number * "~" * number * + } + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * + } + if$ + } + if$ + } + { + series empty$ not + { + number empty$ not + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * series emphasize * + " " * number * + } + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * series emphasize * + } + if$ + } + { + number empty$ not + { + bbl.volume capitalize "~" * volume * add.period$ + " " * bbl.number * "~" * number * + } + { + bbl.volume capitalize "~" * volume * add.period$ + } + if$ + } + if$ + } + if$ + } + { + volumes empty$ not + { + series empty$ not + { + number empty$ not + { + volumes "~" * bbl.volumes * add.period$ + " " * series * + " " * number * + } + { + volumes "~" * bbl.volumes * add.period$ + " " * series * + } + if$ + } + { + number empty$ not + { + volumes "~" * bbl.volumes * add.period$ + " " * bbl.number * "~" * number * + } + { + volumes "~" * bbl.volumes * add.period$ + } + if$ + } + if$ + } + { + series empty$ not + { + number empty$ not + { + series + " " * number * + } + { + series + } + if$ + } + { + number empty$ not + { + bbl.number "~" * number * + } + { + "" + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.fields.chapter.booktitle.volume.pages} +{ + booktitle empty$ not + { + chapter empty$ not + { + bbl.chapter capitalize "~" * chapter * + " " * bbl.in * " " * field.booktitle * + pages empty$ not + { + bbl.comma * " " * pages * add.period$ + } + { + add.period$ + } + if$ + volume empty$ not + { + volumes empty$ not + { + " " * bbl.volume capitalize * "~" * volume * " " * bbl.of * " " * volumes * add.period$ + } + { + " " * bbl.volume capitalize * "~" * volume * add.period$ + } + if$ + } + { + volumes empty$ not + { + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + skip$ + } + if$ + } + if$ + } + { + word.in field.booktitle * + pages empty$ not + { + volume empty$ not + { + volumes empty$ not + { + " " * volume * ": " * pages * add.period$ + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + " " * volume * ": " * pages * add.period$ + } + if$ + } + { + volumes empty$ not + { + bbl.comma * " " * pages * add.period$ + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + bbl.comma * " " * pages * add.period$ + } + if$ + } + if$ + } + { + add.period$ + volume empty$ not + { + volumes empty$ not + { + " " * bbl.volume capitalize * "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + } + { + " " * bbl.volume capitalize * "~" * volume * add.period$ + } + if$ + } + { + volumes empty$ not + { + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + skip$ + } + if$ + } + if$ + } + if$ + } + if$ + } + { + "" + } + if$ +} + + + +INTEGERS { field.series.emph } +FUNCTION {incoll.fields.series.number} +{ + author empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + compiler empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + editor empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + if$ + } + if$ + series empty$ not + { + field.series.emph #0 > + { + number empty$ not + { series emphasize " " * number * } + { series emphasize } + if$ + } + { + number empty$ not + { series " " * number * } + { series } + if$ + } + if$ + } + { + number empty$ not + { bbl.number capitalize "~" * number * } + { "" } + if$ + } + if$ +} + + + +FUNCTION {incoll.field.crossref} +{ + word.in " \cite{" * crossref * "}" * +} + + + +FUNCTION {article.field.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} + + + +FUNCTION {article.field.journal} +{ + journal remove.dots emphasize +} + + + +FUNCTION {article.fields.jour.issn.vol.num.pp} +{ + journal empty$ not + { + issue empty$ not + { issue bbl.comma * " " *} + { "" } + if$ + article.field.journal * + volume empty$ not + { + number empty$ not + { + pages empty$ not + { + " " * volume * "~" * + "(" * number * ")" * ": " * + pages * + } + { + " " * volume * bbl.comma * + " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + " " * volume * ": " * + pages * + } + { + " " * volume * + } + if$ + } + if$ + } + { + number empty$ not + { + pages empty$ not + { + bbl.comma * " " * bbl.number * "~" * number * ": " * + pages * + } + { + bbl.comma * " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + bbl.comma * " " * pages * + } + 'skip$ + if$ + } + if$ + } + if$ + } + { + "journal" output.check + } + if$ +} + + + +FUNCTION {article.fields.issn.vol.num.pp} +{ + journal empty$ not + { + issue empty$ not + { issue bbl.comma * " " *} + { "" } + if$ + volume empty$ not + { + number empty$ not + { + pages empty$ not + { + bbl.comma * " " * bbl.volume * "~" * volume * "~" * + "(" * number * ")" * ": " * + pages * + } + { + bbl.comma * " " * bbl.volume * "~" * volume * bbl.comma * + " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + bbl.comma * " " * bbl.volume * "~" * volume * ":~" * + pages * + } + { + bbl.comma * " " * bbl.volume * "~" * volume * + } + if$ + } + if$ + } + { + number empty$ not + { + pages empty$ not + { + bbl.number * "~" * number * ": " * + pages * + } + { + bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + pages * + } + 'skip$ + if$ + } + if$ + } + if$ + } + { + "journal" output.check + } + if$ +} + + + +FUNCTION {proc.fields.org.publisher.address} +{ + organization empty$ not + { + publisher empty$ not + { + address empty$ not + { + organization add.period$ + address * ": " * publisher * + } + { + organization add.period$ + publisher * + } + if$ + } + { + address empty$ not + { + organization + bbl.comma * " " * address * + } + { + organization + } + if$ + } + if$ + } + { + publisher empty$ not + { + address empty$ not + { address ": " * publisher *} + { publisher } + if$ + } + { + address empty$ not + { address } + { "" } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.fields.booktitle.volume.pages} +{ + booktitle empty$ not + { + volume empty$ not + { + volumes empty$ not + { + pages empty$ not + { + field.booktitle " " * + volume * ": " * pages * add.period$ + " " * volumes * "~" * bbl.volumes * + } + { + field.booktitle add.period$ + " " * bbl.volume * "~" * volume * bbl.of * " " * volumes * + } + if$ + } + { + pages empty$ not + { + field.booktitle " " * + volume * ": " * pages * + } + { + field.booktitle add.period$ + " " * bbl.volume * "~" * volume * + } + if$ + } + if$ + } + { + volumes empty$ not + { + pages empty$ not + { + field.booktitle " " * + bbl.comma * " " * pages * add.period$ + volumes * "~" * bbl.volumes + } + { + field.booktitle " " * add.period$ + " " * volumes * "~" * bbl.volumes * + } + if$ + } + { + pages empty$ not + { + field.booktitle " " * + bbl.comma * " " * pages * + } + { + field.booktitle + } + if$ + } + if$ + } + if$ + } + { + "" + } + if$ +} + + + +FUNCTION {inproc.fields.series.number} +{ + author empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + series empty$ not + { + field.series.emph #0 > + { + number empty$ not + { series emphasize " " * number * } + { series emphasize } + if$ + } + { + number empty$ not + { series " " * number * } + { series } + if$ + } + if$ + } + { + number empty$ not + { bbl.number capitalize "~" * number * } + { "" } + if$ + } + if$ +} + + + +FUNCTION {inproc.field.crossref} { incoll.field.crossref } + + + +FUNCTION {conf.fields.series.number.pages} +{ + series empty$ not + { + number empty$ not + { + pages empty$ not + { + series + bbl.comma * " " * bbl.number * "~" * number * + bbl.comma * " " * pages * + } + { + series + bbl.comma * " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + series + bbl.comma * " " * pages * + } + { series } + if$ + } + if$ + } + { "" } + if$ +} + + + +FUNCTION {conf.fields.org.publisher.address} { proc.fields.org.publisher.address } + + + +FUNCTION {thesis.field.type} +{ + type duplicate$ empty$ + 'pop$ + { + swap$ pop$ + "t" change.case$ "type" bibinfo.check + } + if$ +} + + + +FUNCTION {thesis.fields.school.type.address} +{ + type empty$ + { + type$ "mastersthesis" = + { bbl.mthesis "t" change.case$ } + { + type$ "phdthesis" = + { bbl.phdthesis "t" change.case$ } + { bbl.thesis "t" change.case$ } + if$ + } + if$ + school empty$ not + { + address empty$ not + { bbl.comma * " " * school * bbl.comma * " " * address * } + { bbl.comma * " " * school * } + if$ + } + { + address empty$ not + { bbl.comma * address * } + { add.period$ } + if$ + } + if$ + } + { + type "~" = + { + school empty$ not + { + address empty$ not + { school bbl.comma * " " * address * } + { school } + if$ + } + { + address empty$ not + { address } + { "" } + if$ + } + if$ + } + { + type + school empty$ not + { + address empty$ not + { bbl.comma * " " * school * bbl.comma * " " * address * } + { bbl.comma * " " * school * } + if$ + } + { + address empty$ not + { bbl.comma * address * } + { add.period$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {unpub.field.title} +{ + title empty$ not + { title bbl.dquote } + 'skip$ + if$ +} + + + +FUNCTION {misc.field.title} +{ + title empty$ not + { title } + 'skip$ + if$ +} + + + + + +% Functions to format entries based on type (compatible entries) + +FUNCTION {book} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.emph "title" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { %%% if author field is empty, proceeds with compiler + compiler empty$ not + { + field.compiler output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.emph "title" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.editor.editedby output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { %%% if author, and compiler fields are empty, proceeds with editor + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.emph "title" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { %%% if author, compiler, and editor fields are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear output + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author, compiler, editor, and translator fields are empty, proceeds with key + key empty$ not + { + field.title.emph "title" output.check + name.or.dash + field.year "year" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { + "author, compiler, editor, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {incollection} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + crossref missing$ + { + new.sentence field.by output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence incoll.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { %%% if author field is empty, proceeds with compiler + compiler empty$ not + { + field.compiler output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + crossref missing$ + { + new.sentence field.by output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence incoll.fields.series.number output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { %%% if author, and compiler fields are empty, proceeds with editor + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + crossref missing$ + { + new.sentence field.by output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence incoll.fields.series.number output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { %%% if author, compiler, and editor fields are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear output + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence incoll.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author, compiler, editor, and translator fields are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year "year" output.check + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence incoll.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { + "author, compiler, editor, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {article} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence field.editor.editedby output + new.sentence article.fields.jour.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author is empty, proceeds with editor + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence article.fields.jour.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, and editor are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear output + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + crossref missing$ + { + new.sentence field.editor.editedby output + new.sentence article.fields.jour.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, editor, and translator are empty, proceeds with key + key empty$ not + { + article.field.journal output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence field.editor.editedby output + new.sentence article.fields.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { + "author, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {proceedings} +{ + begin.bibitem + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.compiler.compiledby output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if editor field is empty, proceeds with compiler + compiler empty$ not + { + field.compiler output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if editor, and compiler fields are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear output + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence book.fields.volume.series.number output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + key empty$ not + { + field.title.emph "title" output.check + name.or.dash + field.year "year" output.check + new.block field.edition output + new.sentence field.impression output + new.sentence book.fields.volume.series.number output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + "editor, compiler, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {inproceedings} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence inproc.fields.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence inproc.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author field is empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear output + new.block field.title.dqoute "title" output.check + new.sentence field.by output + new.sentence field.year output + crossref missing$ + { + new.sentence inproc.fields.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence inproc.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, and translator fields are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year "year" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence inproc.fields.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence inproc.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { + "author, translator, and key" output.check + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {conference} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence conf.fields.series.number.pages output + new.sentence field.editor.editedby output + new.sentence conf.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author is empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear output + new.block field.title.dqoute "title" output.check + new.sentence field.by output + new.sentence field.year output + crossref missing$ + { + new.sentence conf.fields.series.number.pages output + new.sentence field.editor.editedby output + new.sentence conf.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, and translator are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year "year" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence conf.fields.series.number.pages output + new.sentence field.editor.editedby output + new.sentence conf.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { + "author, translator, and key" output.check + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {thesis} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence thesis.fields.school.type.address output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author is empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year "year" output.check + new.sentence field.comment output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { "author, and key" output.check } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {mastersthesis} { thesis } + + + +FUNCTION {phdthesis} { thesis } + + + +FUNCTION {unpublished} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year "year" output.check + new.block unpub.field.title output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence field.howpublished output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author is empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear output + new.block unpub.field.title output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence field.howpublished output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author, and translator are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year "year" output.check + new.sentence field.comment output + new.sentence field.by output + new.sentence field.howpublished output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { "author, translator, and key" output.check } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {misc} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year "year" output.check + new.block misc.field.title output + new.sentence field.by output + new.sentence field.howpublished output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author is empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year "year" output.check + new.sentence field.by output + new.sentence field.howpublished output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { "author, and key" output.check } + if$ + } + if$ + end.bibitem +} + + + + + +% Functions to format entries based on type (incompatible entries) + +FUNCTION {booklet} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + field.author output + author format.key output + name.or.dash + field.year "year" output.check + date.block + field.title "title" output.check + new.block + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + field.isbn output + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + +FUNCTION {inbook} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + author empty$ + { field.editor "author and editor" output.check + editor format.key output + name.or.dash + } + { field.author output.nonnull + name.or.dash + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + field.year "year" output.check + date.block + field.btitle "title" output.check + crossref missing$ + { + field.bvolume output + fields.chapter.pages output%"chapter and pages" output.check + new.block + fields.number.series output + field.edition output + new.sentence + fields.publisher.address output + } + { + fields.chapter.pages "chapter and pages" output.check + new.block + book.field.crossref output.nonnull + } + if$ + crossref missing$ + { field.isbn output } + 'skip$ + if$ + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + +FUNCTION {manual} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + field.author output + author format.key output + name.or.dash + field.year "year" output.check + date.block + field.btitle "title" output.check + organization address new.block.checkb + organization "organization" bibinfo.check output + address "address" bibinfo.check output + field.edition output + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + +FUNCTION {techreport} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + field.author "author" output.check + author format.key output + name.or.dash + field.year "year" output.check + date.block + field.btitle + "title" output.check + new.block + fields.tr.number output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + + + +% Function to format entry if the type is not recognized + +FUNCTION {default.type} { misc } + + + + + + + + + + + + + + + + + + + + +% Reading bibliography database (.bib) file + +READ + + +% Function to generate a string that is suitable for sorting purposes + +FUNCTION {sortify} +{ + purify$ + "l" change.case$ +} + + + +% Length of the short name label of the entry + +INTEGERS { len } + +FUNCTION {chop.word} +{ + 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + + + + + +% Functions for sorting purposes + +FUNCTION {sort.format.names} +{ + 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { + namesleft #0 > + } + { + s nameptr + "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ + 't := + nameptr #1 > + { + " " * + namesleft #1 = + t "others" = + and + { "zzzzz" 't := } + 'skip$ + if$ + t sortify * + } + { + t sortify * + } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + + + +FUNCTION {sort.field.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 {editor.sort} +{ + editor empty$ + { + key empty$ + { + "to sort, need editor or key in " cite$ * warning$ + "" + } + { + key sortify + } + if$ + } + { + editor sort.format.names + } + if$ +} + + + +FUNCTION {book.sort} +{ + author empty$ not + { + author sort.format.names + } + { + compiler empty$ not + { + compiler sort.format.names + } + { + editor empty$ not + { + editor sort.format.names + } + { + translator empty$ not + { + translator sort.format.names + } + { + key empty$ not + { + key sortify + } + { + "to sort, need author, compiler, editor, translator, or key in " cite$ * warning$ + "" + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.sort} +{ + author empty$ not + { + author sort.format.names + } + { + compiler empty$ not + { + compiler sort.format.names + } + { + editor empty$ not + { + editor sort.format.names + } + { + translator empty$ not + { + translator sort.format.names + } + { + key empty$ not + { + key sortify + } + { + "to sort, need author, compiler, editor, translator, or key in " cite$ * warning$ + "" + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {article.sort} +{ + author empty$ not + { + author sort.format.names + } + { + editor empty$ not + { + editor sort.format.names + } + { + translator empty$ not + { + translator sort.format.names + } + { + key empty$ not + { + key sortify + } + { + "to sort, need author, editor, translator, or key in " cite$ * warning$ + "" + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {proc.sort} +{ + editor empty$ not + { editor sort.format.names } + { + compiler empty$ not + { compiler sort.format.names } + { + translator empty$ not + { translator sort.format.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.sort} +{ + author empty$ not + { author sort.format.names } + { + translator empty$ not + { translator sort.format.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {conf.sort} +{ + author empty$ not + { author sort.format.names } + { + translator empty$ not + { translator sort.format.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + + +INTEGERS { seq.num } + +FUNCTION {init.seq} +{ #0 'seq.num := } + +EXECUTE {init.seq} + + + +FUNCTION {int.to.fix} +{ + "000000000" swap$ int.to.str$ * + #-1 #10 substring$ +} + + + +FUNCTION {presort} +{ + calc.label + label sortify + " " + * + seq.num #1 + 'seq.num := + seq.num int.to.fix + 'sort.label := + sort.label + * + #1 entry.max$ substring$ + 'sort.key$ := +} + + + + + +% Sort process + +ITERATE {presort} + +SORT + + + +INTEGERS { number.label } + +FUNCTION {initialize.longest.label} +{ + #0 'number.label := +} + +FUNCTION {forward.pass} +{ + number.label #1 + 'number.label := +} + +EXECUTE {initialize.longest.label} + +ITERATE {forward.pass} + + + +FUNCTION {bib.sort.order} +{ + sort.label + 'sort.key$ := +} + + + +ITERATE {bib.sort.order} + +SORT + + + + +% Functions to create bibliography +FUNCTION {begin.bib} +{ + preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" write$ + newline$ + "% Generated by `iran-unsrt.bst`." write$ + newline$ + "% This bibliography style is part of the `iran-bibtex` package." write$ + newline$ + "% Copyright (c) 2023-2024 Farshad Rasuli " write$ + newline$ + "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" write$ + newline$ + newline$ + newline$ + "\begin{thebibliography}{" number.label int.to.str$ * "}" * 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 file `iran-unsrt.bst'. \ No newline at end of file diff --git a/biblio/bibtex/contrib/iran-bibtex/iran-year.bst b/biblio/bibtex/contrib/iran-bibtex/iran-year.bst new file mode 100644 index 0000000000..06bae75f44 --- /dev/null +++ b/biblio/bibtex/contrib/iran-bibtex/iran-year.bst @@ -0,0 +1,5078 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% +%% This file is “iran-year.bst”, v0.1.0 (2024/01/8) +%% generated with the DOCSTRIP utility, then modified to support +%% bilingual (English/Latin, and Persian/Farsi) in accordance with the +%% “Iran Manual of Style Citation Guide” (1st edn., 2016). +%% +%% +%% +%% Copyright (c) 2023-2024 Farshad Rasuli +%% +%% This file can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License version 1.3c, or any later version. +%% The latest version of the License is at: latex-project.org/lppl.txt +%% +%% This BibTeX bibliography style (bst) file is part of +%% the “iran-bibtex” package. +%% +%% CTAN catalog: https://ctan.org/pkg/iran-bibtex +%% CTAN archive: https://ctan.org/tex-archive/biblio/bibtex/contrib/iran-bibtex +%% Repository: https://github.com/farshadrasuli/iran-bibtex +%% Bug tracker: https://github.com/farshadrasuli/iran-bibtex/issues +%% +%% +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +%%----------------------------------------------------------------------------- +%% This bibliography style file is intended for texts in Persian. +%% This is an author-year citation style bibliography. This style file is +%% based on natbib.sty package by Patrick W. Daly. +%% The form of the \bibitem entries is +%% \bibitem[Jones et al.(1990)]{key}... +%% \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... +%% The essential feature is that the label (the part in brackets) consists +%% of the author names, as they should appear in the citation, with the year +%% in parentheses following. There must be no space before the opening +%% parenthesis! +%% +%% The \cite command functions as follows (\cite is equal to \citep command): +%% \citep{key} => (Jones et al., 1990) +%% \citep*{key} => (Jones, Baker, and Smith, 1990) +%% \citep[chap. 2]{key} => (Jones et al., 1990, chap. 2) +%% \citep[e.g.][]{key} => (e.g. Jones et al., 1990) +%% \citep[e.g.][p. 32]{key} => (e.g. Jones et al., 1990, p. 32) +%% \citet{key} => Jones et al. (1990) +%% \citet*{key} => Jones, Baker, and Smith (1990) +%% \citeauthor{key} => Jones et al. +%% \citeauthor*{key} => Jones, Baker, and Smith +%% \citeyear{key} => 1990 +%%----------------------------------------------------------------------------- + + + +ENTRY +{ + address + afterword % the added field + archive + author + authorfa % the added field + booktitle + by % the added field + chapter + collaboration + comment % the added field + commentator % the added field + compiler % the added field + doi + edition + editor + eid + eprint + foreword % the added field + howpublished + impression % the added field + institution + introduction % the added field + isbn + issn + issue % the added field + journal + key + language + month + note + number + numpages + organization + pages + preface % the added field + publisher + school + series + title + translator % the added field + translateyear % the added field + type + url + urldate % the added field + volume + volumes % the added field + year +} +{} +{ + label + extra.label + sort.label + short.list +} + + + + + +% Logical operators + +FUNCTION {not} +{ + { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ + 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ + { pop$ #1 } + 'skip$ + if$ +} + + + + + + +% Check for language entry + +FUNCTION {is.language.persian} +{ + language missing$ + { #0 } + { language "l" change.case$ "persian" = } + if$ +} + + + + + +% Here are the language-specific definitions for explicit words. +% Each function has a name bbl.xxx where xxx is the English word. + +FUNCTION {bbl.afterwordby} +{ + is.language.persian + {"با پس‌گفتار"} + {"afterword by"} + if$ +} + +FUNCTION {bbl.and} +{ + is.language.persian + {"و"} + {"and"} + if$ +} + +FUNCTION {bbl.andothers} +{ + is.language.persian + {"و~دیگران"} + {"and~others"} + if$ +} + +FUNCTION {bbl.by} +{ + is.language.persian + {"نوشته‌ی"} + {"by"} + if$ +} + +FUNCTION {bbl.chapter} +{ + is.language.persian + {"فصل"} + {"chapter"} + if$ +} + +FUNCTION {bbl.comma} +{ + is.language.persian + {"،"} + {","} + if$ +} + +FUNCTION {bbl.commentator} +{ + is.language.persian + {"یادداشت‌نویس"} + {"comm."} + if$ +} + +FUNCTION {bbl.commentatedby} +{ + is.language.persian + {"با یادداشت"} + {"commentated by"} + if$ +} + +FUNCTION {bbl.compiler} +{ + is.language.persian + {"گردآورنده"} + {"comp."} + if$ +} + +FUNCTION {bbl.compilers} +{ + is.language.persian + {"گردآورندگان"} + {"comps."} + if$ +} + +FUNCTION {bbl.compiledby} +{ + is.language.persian + {"گردآوری"} + {"compiled by"} + if$ +} + +FUNCTION {bbl.doi} +{ + is.language.persian + {"شناسه‌ی دیجیتال"} + {"doi"} + if$ +} + +FUNCTION {bbl.dquote} +{ + is.language.persian + {"\faquote{" swap$ * add.period$ "}" *} + {"\enquote{" swap$ * add.period$ "}" *} + if$ +} + +FUNCTION {bbl.editor} +{ + is.language.persian + {"ویراستار"} + {"ed."} + if$ +} + +FUNCTION {bbl.editors} +{ + is.language.persian + {"ویراستاران"} + {"eds."} + if$ +} + +FUNCTION {bbl.editedby} +{ + is.language.persian + {"ویراسته‌ی"} + {"edited by"} + if$ +} + +FUNCTION {bbl.edition} +{ + is.language.persian + {"ویرایش"} + {"edn."} + if$ +} + +FUNCTION {bbl.eidpp} +{ + is.language.persian + {"صص"} + {"pages"} + if$ +} + +FUNCTION {bbl.etal} +{ + is.language.persian + {"و~همکاران"} + {"et~al."} + if$ +} + +FUNCTION {bbl.forewordby} +{ + is.language.persian + {"با پیش‌گفتار"} + {"forword by"} + if$ +} + +FUNCTION {bbl.impression} +{ + is.language.persian + {"چاپ"} + {"imp."} + if$ +} + +FUNCTION {bbl.in} +{ + is.language.persian + {"در"} + {"in"} + if$ +} + +FUNCTION {bbl.incollaborationwith} +{ + is.language.persian + {"با همکاری"} + {"in collaboration with"} + if$ +} + +FUNCTION {bbl.introby} +{ + is.language.persian + {"با مقدمه‌ی"} + {"introduction by"} + if$ +} + +FUNCTION {bbl.isbn} +{ + is.language.persian + {"شابک"} + {"isbn"} + if$ +} + +FUNCTION {bbl.issn} +{ + is.language.persian + {"شاپا"} + {"issn"} + if$ +} + +FUNCTION {bbl.mthesis} +{ + is.language.persian + {"پایان‌نامه‌ی کارشناسی‌ارشد"} + {"Master's thesis"} + if$ +} + +FUNCTION {bbl.nr} +{ + is.language.persian + {"ش."} + {"no."} + if$ +} + +FUNCTION {bbl.number} +{ + is.language.persian + {"ش."} + {"no."} + if$ +} + +FUNCTION {bbl.of} +{ + is.language.persian + {"از"} + {"of"} + if$ +} + +FUNCTION {bbl.page} +{ + is.language.persian + {"ص"} + {"p."} + if$ +} + +FUNCTION {bbl.pages} +{ + is.language.persian + {"صص"} + {"pp."} + if$ +} + +FUNCTION {bbl.prefaceby} +{ + is.language.persian + {"با پیش‌گفتار"} + {"preface by"} + if$ +} + +FUNCTION {bbl.phdthesis} +{ + is.language.persian + {"رساله‌ی دکتری"} + {"PhD dissertation"} + if$ +} + +FUNCTION {bbl.retrieved} +{ + is.language.persian + {"دسترسی در"} + {"retrieved"} + if$ +} + +FUNCTION {bbl.semicolon} +{ + is.language.persian + {"؛"} + {";"} + if$ +} + +FUNCTION {bbl.techrep} +{ + is.language.persian + {"گزارش"} + {"tech. rep."} + if$ +} + +FUNCTION {bbl.thesis} +{ + is.language.persian + {"پایان‌نامه"} + {"Thesis"} + if$ +} + +FUNCTION {bbl.translator} +{ + is.language.persian + {"مترجم"} + {"trans."} + if$ +} + +FUNCTION {bbl.translators} +{ + is.language.persian + {"مترجمان"} + {"trans."} + if$ +} + +FUNCTION {bbl.translatedby} +{ + is.language.persian + {"ترجمه‌ی"} + {"translated by"} + if$ +} + +FUNCTION {bbl.url} +{ + is.language.persian + {"تارنما"} + {"url"} + if$ +} + +FUNCTION {bbl.volume} +{ + is.language.persian + {"ج."} + {"vol."} + if$ +} + +FUNCTION {bbl.volumes} +{ + is.language.persian + {"ج."} + {"vols."} + if$ +} + + + + + +% Macro for abbreviation of month + +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"} + + + + + +% Functions to declare position + +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 := +} + + + +% Functions to print output + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ + 's := + output.state mid.sentence = + { bbl.comma * " " * write$ } + { + output.state after.block = + { + add.period$ write$ + newline$ + "\newblock " write$ + } + { + output.state before.all = + 'write$ + { add.period$ write$ " " 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$ +} + + + + + +% Functions to check and warn bibinfo + +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 {either.or.check} +{ + empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + + + + + +% Functions to control the print format of entries + +FUNCTION {new.block} +{ + output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + + + +FUNCTION {new.block.checkb} +{ + empty$ + swap$ empty$ + and + 'skip$ + 'new.block + 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 {capitalize} +{ "u" change.case$ "t" change.case$ } + + + +FUNCTION {date.block} +{ + new.block +} + + + +FUNCTION {emphasize} +{ + duplicate$ empty$ + { pop$ "" } + { "{\it " swap$ * "}" * } + if$ +} + + + +FUNCTION {field.or.null} +{ + duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + + + +FUNCTION {no.blank.or.punct} +{ + "\hspace{0pt}" * before.all 'output.state := +} + + + +FUNCTION {non.stop} +{ + duplicate$ + "}" * add.period$ + #-1 #1 substring$ "." = +} + + + +STRINGS {z} + +FUNCTION {remove.dots} +{ + 'z := + "" + { + z empty$ not + } + { + z #1 #2 substring$ + duplicate$ "\." = + { + z #3 global.max$ substring$ 'z := * + } + { + pop$ + z #1 #1 substring$ + z #2 global.max$ substring$ 'z := + duplicate$ "." = + 'pop$ + { * } + if$ + } + if$ + } + while$ +} + + + +FUNCTION {separate.by.space} +{ " " swap$ * " " * } + + + +FUNCTION {space.word} +{ " " swap$ * " " * } + + + +FUNCTION {tie.or.space.prefix} +{ + duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ +} + + + +FUNCTION {word.in} +{ + output.state mid.sentence = + { bbl.in " " * } + { bbl.in capitalize " " * } + if$ +} + + + + + +% Functions to format names + +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 + duplicate$ #1 > + { "{ff~}{vv~}{ll}{, jj}" } + { "{vv~}{ll}{, ff}{, jj}" } + if$ + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + namesleft #1 > + { + bbl.comma * " " * t * + } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + bbl.comma * + t "others" = + { + " " * bbl.etal * + } + { + bbl.and + separate.by.space * 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 + "{ff~}{vv~}{ll}{, jj}" + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + namesleft #1 > + { + bbl.comma * " " * t * + } + { + s nameptr "{ll}" format.name$ + duplicate$ "others" = + { 't := } + { pop$ } + if$ + bbl.comma * + t "others" = + { + + " " * bbl.etal * + } + { + bbl.and + separate.by.space * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } + if$ +} + + + +FUNCTION {format.key} +{ + empty$ + { key field.or.null } + { "" } + if$ +} + + + +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$ +} + + + +STRINGS {oldname} + +FUNCTION {name.or.dash} +{ + 's := + oldname empty$ + { s 'oldname := s } + { + s oldname = + { "---{}---{}---" } + { s 'oldname := s } + if$ + } + if$ +} + + + + + +% Functions to create the short name label for the entry + +FUNCTION {label.and} +{ + is.language.persian + { "و" } + { + authorfa missing$ + { "and" } + { "و" } + if$ + } + if$ +} + + + +FUNCTION {label.andothers} +{ + is.language.persian + { "و~دیگران" } + { + authorfa missing$ + { "and~others" } + { "و~دیگران" } + if$ + } + if$ +} + + + +FUNCTION {label.comma} +{ + is.language.persian + { "،" } + { + authorfa missing$ + { "," } + { "،" } + if$ + } + if$ +} + + + +FUNCTION {label.etal} +{ + is.language.persian + { "و~همکاران" } + { + authorfa missing$ + { "et~al." } + { "و~همکاران" } + if$ + } + if$ +} + + + +INTEGERS { is.authorfa.exist } + +FUNCTION {format.short.label.names} +{ + 's := + "" 't := + s #1 "{vv~}{ll}" format.name$ + s num.names$ #3 > + { + " " * label.etal * + } + { + s num.names$ #2 < + 'skip$ + { + s num.names$ #3 < + { + s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + " " * label.etal * + } + { + label.comma * label.and separate.by.space * s #2 "{vv~}{ll}" format.name$ * + } + if$ + } + { + s #3 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + " " * label.etal * + } + { + label.comma * " " * s #2 "{vv~}{ll}" format.name$ * + label.comma * label.and separate.by.space * s #3 "{vv~}{ll}" format.name$ * + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {author.key.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {author.editor.key.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {editor.key.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {book.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + compiler empty$ not + { compiler format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + compiler empty$ not + { compiler format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {article.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {proc.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + compiler empty$ not + { compiler format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {conf.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {make.short.label.names} +{ + type$ "book" = + 'book.short.label.names + { + type$ "incollection" = + 'incoll.short.label.names + { + type$ "article" = + 'article.short.label.names + { + type$ "proceedings" = + 'proc.short.label.names + { + type$ "inproceedings" = + 'inproc.short.label.names + { + type$ "conference" = + 'conf.short.label.names + { + type$ "inbook" = + 'author.editor.key.short.label.names + 'author.key.short.label.names + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + 'short.list := +} + + + + + +% Functions to create the full name label for the entry + +FUNCTION {format.full.label.names} +{ + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { + namesleft #0 > + } + { + s nameptr + "{vv~}{ll}" format.name$ + 't := + nameptr #1 > + { + namesleft #1 > + { + label.comma * " " * t * + } + { + s nameptr "{ll}" format.name$ + duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + } + { + numnames #2 > + { label.comma * } + 'skip$ + if$ + label.and + separate.by.space * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + + + +FUNCTION {author.key.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {author.editor.key.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {editor.key.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {book.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + compiler empty$ not + { compiler format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + compiler empty$ not + { compiler format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {article.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {proc.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + compiler empty$ not + { compiler format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {conf.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {make.full.label.names} +{ + type$ "book" = + 'book.full.label.names + { + type$ "incollection" = + 'incoll.full.label.names + { + type$ "article" = + 'article.full.label.names + { + type$ "proceedings" = + 'proc.full.label.names + { + type$ "inproceedings" = + 'inproc.full.label.names + { + type$ "conference" = + 'conf.full.label.names + { + type$ "inbook" = + 'author.editor.key.full.label.names + 'author.key.full.label.names + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + + + +% Functions to create the label of the entry + +FUNCTION {calc.label} +{ + make.short.label.names + short.list "(" * + translateyear empty$ + { + year duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + } + { + author empty$ not + { + year duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + } + { + compiler empty$ not + { + year duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + } + { + editor empty$ not + { + year duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + } + { + translateyear duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + } + if$ + } + if$ + } + if$ + } + if$ + * + 'label := +} + + + + + +% Functions to open, and close the bibitem + +FUNCTION {begin.bibitem} +{ + newline$ + is.language.persian + { + "\bibitem[{" write$ + } + { + "\begin{LTRbibitems}\resetlatinfont" write$ + newline$ + "\bibitem[{" write$ + } + if$ + label write$ + ")" + make.full.label.names duplicate$ short.list = + { pop$ } + { * } + if$ + "}]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + + + +FUNCTION {end.bibitem} +{ + add.period$ write$ + newline$ + is.language.persian + 'skip$ + { + "\end{LTRbibitems}" write$ + newline$ + } + if$ +} + + + + + +% Functions to format fields + +FUNCTION {field.afterword} +{ + afterword empty$ not + { + afterword "afterword" format.names.ed + bbl.afterwordby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.author} +{ author "author" format.names } + + + +FUNCTION {field.booktitle} +{ + booktitle "booktitle" bibinfo.check + emphasize +} + + + +FUNCTION {field.by} +{ + by empty$ not + { + by "by" format.names.ed + bbl.by " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.collaboration} +{ + collaboration empty$ not + { + collaboration "collaboration" format.names.ed + bbl.incollaborationwith capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.comment} +{ + comment +} + + + +FUNCTION {field.commentator} +{ + commentator empty$ not + { + commentator "commentator" format.names.ed + bbl.commentatedby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {get.bbl.compiler} +{ + compiler num.names$ #1 > + 'bbl.compilers + 'bbl.compiler + if$ +} + +FUNCTION {field.compiler} +{ + compiler "compiler" format.names + duplicate$ empty$ + 'skip$ + { + bbl.comma * " " * get.bbl.compiler * + } + if$ +} + + + +FUNCTION {field.compiler.compiledby} +{ + compiler empty$ not + { + compiler "compiler" format.names.ed + bbl.compiledby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.doi} +{ + doi empty$ + { "" } + { + bbl.doi "u" change.case$ ":\doi{" * doi * "}" * + } + if$ +} + + + +FUNCTION {field.edition} +{ + edition duplicate$ empty$ + 'skip$ + { + output.state mid.sentence = + { "l" } + { "t" } + if$ + change.case$ + "edition" bibinfo.check + is.language.persian + { bbl.edition " " * swap$ * } + { " " * bbl.edition * } + if$ + } + if$ +} + + + +FUNCTION {get.bbl.editor} +{ + editor num.names$ #1 > + 'bbl.editors + 'bbl.editor + if$ +} + +FUNCTION {field.editor} +{ + editor "editor" format.names + duplicate$ empty$ + 'skip$ + { + bbl.comma * " " * get.bbl.editor * + } + if$ +} + + + +FUNCTION {field.editor.editedby} +{ + editor empty$ not + { + editor "editor" format.names.ed + bbl.editedby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.eprint} +{ + eprint duplicate$ empty$ + 'skip$ + { + "\eprint" + archive empty$ + 'skip$ + { "[" * archive * "]" * } + if$ + "{" * swap$ * "}" * + } + if$ +} + + + +FUNCTION {field.howpublished} +{ + howpublished +} + + + +FUNCTION {field.impression} +{ + impression duplicate$ empty$ not + { + output.state mid.sentence = + { "l" } + { "t" } + if$ + change.case$ + is.language.persian + { bbl.impression " " * swap$ * } + { " " * bbl.impression * } + if$ + } + 'skip$ + if$ +} + + + +FUNCTION {field.introduction} +{ + introduction empty$ not + { + introduction "introduction" format.names.ed + bbl.introby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.isbn} +{ + isbn "isbn" bibinfo.check + duplicate$ empty$ + 'skip$ + { + bbl.isbn "u" change.case$ ": " * swap$ * + } + if$ +} + + + +FUNCTION {field.issn} +{ + issn "issn" bibinfo.check + duplicate$ empty$ + 'skip$ + { + bbl.issn "u" change.case$ ": " * swap$ * + } + if$ +} + + + +FUNCTION {field.note} +{ + note empty$ not + { + 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 {field.organization} +{ + organization "organization" bibinfo.check +} + + + +INTEGERS { multiresult } + +FUNCTION {field.pages.check.multipage} +{ + '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 {field.pages} +{ + pages duplicate$ empty$ + 'skip$ + { + duplicate$ field.pages.check.multipage + { + n.dashify + } + { + } + if$ + "pages" bibinfo.check + } + if$ +} + + + +FUNCTION {field.preface} +{ + preface empty$ not + { + preface "preface" format.names.ed + bbl.prefaceby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.title} +{ + title + duplicate$ empty$ + 'skip$ + { bbl.dquote } + if$ +} + + + +FUNCTION {field.btitle} +{ + title "title" bibinfo.check + duplicate$ empty$ + 'skip$ + { emphasize } + if$ +} + + + +FUNCTION {field.title.dqoute} +{ + title + duplicate$ empty$ + 'skip$ + { bbl.dquote } + if$ +} + + + +FUNCTION {field.title.emph} +{ + title "title" bibinfo.check + duplicate$ empty$ + 'skip$ + { emphasize } + if$ +} + + + +FUNCTION {get.bbl.translator} +{ + translator num.names$ #1 > + 'bbl.translators + 'bbl.translator + if$ +} + +FUNCTION {field.translator} +{ + translator "translator" format.names + duplicate$ empty$ + 'skip$ + { + bbl.comma * " " * get.bbl.translator * + } + if$ +} + + +FUNCTION {field.translateyear} +{ + translateyear empty$ not + { + translateyear + } + { "" } + if$ + before.all 'output.state := + after.sentence 'output.state := +} + + + +FUNCTION {field.translator.translatedby} +{ + translator empty$ not + { + translator "translator" format.names.ed + bbl.translatedby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.url} +{ + url duplicate$ empty$ + { pop$ "" } + { + bbl.url "u" change.case$ ": \url{" * swap$ * "}" * + } + if$ +} + + + +FUNCTION {field.urldate} +{ + urldate duplicate$ empty$ + { pop$ "" } + { bbl.retrieved capitalize " " * swap$ * } + if$ +} + + + +FUNCTION {field.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 {field.year} +{ + year "year" bibinfo.check + duplicate$ empty$ + { + } + 'skip$ + if$ + before.all 'output.state := + after.sentence 'output.state := +} + + + +FUNCTION {in.ed.field.booktitle} % NOT USED +{ + field.booktitle + duplicate$ empty$ + 'skip$ + { + field.bvolume + duplicate$ empty$ + 'pop$ + { bbl.comma " " * swap$ * * } + if$ + editor "editor" format.names.ed + duplicate$ empty$ + 'pop$ + { + bbl.editedby capitalize " " * swap$ * + swap$ + add.period$ " " * swap$ * + } + if$ + word.in swap$ * + } + if$ +} + + + + + +% Functions to format combined fields + +FUNCTION {fields.journal.pages} +{ + pages duplicate$ empty$ 'pop$ + { + swap$ duplicate$ empty$ + { + pop$ pop$ field.pages + } + { + ": " * + swap$ + n.dashify + "pages" bibinfo.check + * + } + if$ + } + if$ +} + + + +FUNCTION {fields.journal.eid} +{ + eid "eid" bibinfo.check + duplicate$ empty$ + 'pop$ + { + swap$ + duplicate$ empty$ + 'skip$ + { + ": " * + } + if$ + swap$ * + numpages empty$ + 'skip$ + { + bbl.eidpp numpages tie.or.space.prefix + "numpages" bibinfo.check * * + " (" swap$ * ")" * * + } + if$ + } + if$ +} + + +FUNCTION {fields.number.series} +{ + volume empty$ + { + number empty$ + { series field.or.null } + { + series empty$ + { number "number" bibinfo.check } + { + output.state mid.sentence = + { bbl.number } + { bbl.number capitalize } + if$ + number tie.or.space.prefix "number" bibinfo.check * * + bbl.in space.word * + series "series" bibinfo.check * + } + if$ + } + if$ + } + { "" } + if$ +} + + + +FUNCTION {fields.org.or.pub} +{ + 't := + "" + address empty$ t empty$ and + 'skip$ + { + address "address" bibinfo.check * + t empty$ + 'skip$ + { + address empty$ + 'skip$ + { ": " * } + if$ + t * + } + if$ + } + if$ +} + + + +FUNCTION {fields.publisher.address} +{ + publisher "publisher" bibinfo.check fields.org.or.pub +} + + + +FUNCTION {fields.organization.address} +{ + organization "organization" bibinfo.check fields.org.or.pub +} + + + +FUNCTION {fields.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 {fields.vol.num.pages} +{ + volume field.or.null + duplicate$ empty$ + 'skip$ + { + "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$ + { fields.journal.pages } + { fields.journal.eid } + if$ +} + + + +FUNCTION {fields.chapter.pages} +{ + chapter empty$ + 'field.pages + { + type empty$ + { bbl.chapter } + { + type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter tie.or.space.prefix + "chapter" bibinfo.check + * * + pages empty$ + 'skip$ + { bbl.comma * " " * field.pages * } + if$ + } + if$ +} + + + + + +% Functions to format combined fields for specific entry + +FUNCTION {book.field.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 separate.by.space * + } + if$ + " \cite{" * crossref * "}" * +} + + + +FUNCTION {book.fields.volume.series.number} +{ + volume empty$ not + { + volumes empty$ not + { + series empty$ not + { + number empty$ not + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + " " * series emphasize * + " " * number * + } + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + " " * series emphasize * + } + if$ + } + { + number empty$ not + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + " " * bbl.number * "~" * number * + } + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * + } + if$ + } + if$ + } + { + series empty$ not + { + number empty$ not + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * series emphasize * + " " * number * + } + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * series emphasize * + } + if$ + } + { + number empty$ not + { + bbl.volume capitalize "~" * volume * add.period$ + " " * bbl.number * "~" * number * + } + { + bbl.volume capitalize "~" * volume * add.period$ + } + if$ + } + if$ + } + if$ + } + { + volumes empty$ not + { + series empty$ not + { + number empty$ not + { + volumes "~" * bbl.volumes * add.period$ + " " * series * + " " * number * + } + { + volumes "~" * bbl.volumes * add.period$ + " " * series * + } + if$ + } + { + number empty$ not + { + volumes "~" * bbl.volumes * add.period$ + " " * bbl.number * "~" * number * + } + { + volumes "~" * bbl.volumes * add.period$ + } + if$ + } + if$ + } + { + series empty$ not + { + number empty$ not + { + series + " " * number * + } + { + series + } + if$ + } + { + number empty$ not + { + bbl.number "~" * number * + } + { + "" + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.fields.chapter.booktitle.volume.pages} +{ + booktitle empty$ not + { + chapter empty$ not + { + bbl.chapter capitalize "~" * chapter * + " " * bbl.in * " " * field.booktitle * + pages empty$ not + { + bbl.comma * " " * pages * add.period$ + } + { + add.period$ + } + if$ + volume empty$ not + { + volumes empty$ not + { + " " * bbl.volume capitalize * "~" * volume * " " * bbl.of * " " * volumes * add.period$ + } + { + " " * bbl.volume capitalize * "~" * volume * add.period$ + } + if$ + } + { + volumes empty$ not + { + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + skip$ + } + if$ + } + if$ + } + { + word.in field.booktitle * + pages empty$ not + { + volume empty$ not + { + volumes empty$ not + { + " " * volume * ": " * pages * add.period$ + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + " " * volume * ": " * pages * add.period$ + } + if$ + } + { + volumes empty$ not + { + bbl.comma * " " * pages * add.period$ + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + bbl.comma * " " * pages * add.period$ + } + if$ + } + if$ + } + { + add.period$ + volume empty$ not + { + volumes empty$ not + { + " " * bbl.volume capitalize * "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + } + { + " " * bbl.volume capitalize * "~" * volume * add.period$ + } + if$ + } + { + volumes empty$ not + { + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + skip$ + } + if$ + } + if$ + } + if$ + } + if$ + } + { + "" + } + if$ +} + + + +INTEGERS { field.series.emph } +FUNCTION {incoll.fields.series.number} +{ + author empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + compiler empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + editor empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + if$ + } + if$ + series empty$ not + { + field.series.emph #0 > + { + number empty$ not + { series emphasize " " * number * } + { series emphasize } + if$ + } + { + number empty$ not + { series " " * number * } + { series } + if$ + } + if$ + } + { + number empty$ not + { bbl.number capitalize "~" * number * } + { "" } + if$ + } + if$ +} + + + +FUNCTION {incoll.field.crossref} +{ + word.in " \cite{" * crossref * "}" * +} + + + +FUNCTION {article.field.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} + + + +FUNCTION {article.field.journal} +{ + journal remove.dots emphasize +} + + + +FUNCTION {article.fields.jour.issn.vol.num.pp} +{ + journal empty$ not + { + issue empty$ not + { issue bbl.comma * " " *} + { "" } + if$ + article.field.journal * + volume empty$ not + { + number empty$ not + { + pages empty$ not + { + " " * volume * "~" * + "(" * number * ")" * ": " * + pages * + } + { + " " * volume * bbl.comma * + " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + " " * volume * ": " * + pages * + } + { + " " * volume * + } + if$ + } + if$ + } + { + number empty$ not + { + pages empty$ not + { + bbl.comma * " " * bbl.number * "~" * number * ": " * + pages * + } + { + bbl.comma * " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + bbl.comma * " " * pages * + } + 'skip$ + if$ + } + if$ + } + if$ + } + { + "journal" output.check + } + if$ +} + + + +FUNCTION {article.fields.issn.vol.num.pp} +{ + journal empty$ not + { + issue empty$ not + { issue bbl.comma * " " *} + { "" } + if$ + volume empty$ not + { + number empty$ not + { + pages empty$ not + { + bbl.comma * " " * bbl.volume * "~" * volume * "~" * + "(" * number * ")" * ": " * + pages * + } + { + bbl.comma * " " * bbl.volume * "~" * volume * bbl.comma * + " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + bbl.comma * " " * bbl.volume * "~" * volume * ":~" * + pages * + } + { + bbl.comma * " " * bbl.volume * "~" * volume * + } + if$ + } + if$ + } + { + number empty$ not + { + pages empty$ not + { + bbl.number * "~" * number * ": " * + pages * + } + { + bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + pages * + } + 'skip$ + if$ + } + if$ + } + if$ + } + { + "journal" output.check + } + if$ +} + + + +FUNCTION {proc.fields.org.publisher.address} +{ + organization empty$ not + { + publisher empty$ not + { + address empty$ not + { + organization add.period$ + address * ": " * publisher * + } + { + organization add.period$ + publisher * + } + if$ + } + { + address empty$ not + { + organization + bbl.comma * " " * address * + } + { + organization + } + if$ + } + if$ + } + { + publisher empty$ not + { + address empty$ not + { address ": " * publisher *} + { publisher } + if$ + } + { + address empty$ not + { address } + { "" } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.fields.booktitle.volume.pages} +{ + booktitle empty$ not + { + volume empty$ not + { + volumes empty$ not + { + pages empty$ not + { + field.booktitle " " * + volume * ": " * pages * add.period$ + " " * volumes * "~" * bbl.volumes * + } + { + field.booktitle add.period$ + " " * bbl.volume * "~" * volume * bbl.of * " " * volumes * + } + if$ + } + { + pages empty$ not + { + field.booktitle " " * + volume * ": " * pages * + } + { + field.booktitle add.period$ + " " * bbl.volume * "~" * volume * + } + if$ + } + if$ + } + { + volumes empty$ not + { + pages empty$ not + { + field.booktitle " " * + bbl.comma * " " * pages * add.period$ + volumes * "~" * bbl.volumes + } + { + field.booktitle " " * add.period$ + " " * volumes * "~" * bbl.volumes * + } + if$ + } + { + pages empty$ not + { + field.booktitle " " * + bbl.comma * " " * pages * + } + { + field.booktitle + } + if$ + } + if$ + } + if$ + } + { + "" + } + if$ +} + + + +FUNCTION {inproc.fields.series.number} +{ + author empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + series empty$ not + { + field.series.emph #0 > + { + number empty$ not + { series emphasize " " * number * } + { series emphasize } + if$ + } + { + number empty$ not + { series " " * number * } + { series } + if$ + } + if$ + } + { + number empty$ not + { bbl.number capitalize "~" * number * } + { "" } + if$ + } + if$ +} + + + +FUNCTION {inproc.field.crossref} { incoll.field.crossref } + + + +FUNCTION {conf.fields.series.number.pages} +{ + series empty$ not + { + number empty$ not + { + pages empty$ not + { + series + bbl.comma * " " * bbl.number * "~" * number * + bbl.comma * " " * pages * + } + { + series + bbl.comma * " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + series + bbl.comma * " " * pages * + } + { series } + if$ + } + if$ + } + { "" } + if$ +} + + + +FUNCTION {conf.fields.org.publisher.address} { proc.fields.org.publisher.address } + + + +FUNCTION {thesis.field.type} +{ + type duplicate$ empty$ + 'pop$ + { + swap$ pop$ + "t" change.case$ "type" bibinfo.check + } + if$ +} + + + +FUNCTION {thesis.fields.school.type.address} +{ + type empty$ + { + type$ "mastersthesis" = + { bbl.mthesis "t" change.case$ } + { + type$ "phdthesis" = + { bbl.phdthesis "t" change.case$ } + { bbl.thesis "t" change.case$ } + if$ + } + if$ + school empty$ not + { + address empty$ not + { bbl.comma * " " * school * bbl.comma * " " * address * } + { bbl.comma * " " * school * } + if$ + } + { + address empty$ not + { bbl.comma * address * } + { add.period$ } + if$ + } + if$ + } + { + type "~" = + { + school empty$ not + { + address empty$ not + { school bbl.comma * " " * address * } + { school } + if$ + } + { + address empty$ not + { address } + { "" } + if$ + } + if$ + } + { + type + school empty$ not + { + address empty$ not + { bbl.comma * " " * school * bbl.comma * " " * address * } + { bbl.comma * " " * school * } + if$ + } + { + address empty$ not + { bbl.comma * address * } + { add.period$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {unpub.field.title} +{ + title empty$ not + { title bbl.dquote } + 'skip$ + if$ +} + + + +FUNCTION {misc.field.title} +{ + title empty$ not + { title } + 'skip$ + if$ +} + + + + + +% Functions to format entries based on type (compatible entries) + +FUNCTION {book} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { %%% if author field is empty, proceeds with compiler + compiler empty$ not + { + field.compiler output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.editor.editedby output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { %%% if author, and compiler fields are empty, proceeds with editor + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { %%% if author, compiler, and editor fields are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author, compiler, editor, and translator fields are empty, proceeds with key + key empty$ not + { + field.title.emph "title" output.check + name.or.dash + field.year extra.label * "year" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { + "author, compiler, editor, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {incollection} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + crossref missing$ + { + new.sentence field.by output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence incoll.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { %%% if author field is empty, proceeds with compiler + compiler empty$ not + { + field.compiler output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + crossref missing$ + { + new.sentence field.by output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence incoll.fields.series.number output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { %%% if author, and compiler fields are empty, proceeds with editor + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + crossref missing$ + { + new.sentence field.by output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence incoll.fields.series.number output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { %%% if author, compiler, and editor fields are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence incoll.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author, compiler, editor, and translator fields are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence incoll.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { + "author, compiler, editor, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {article} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence field.editor.editedby output + new.sentence article.fields.jour.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author is empty, proceeds with editor + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence article.fields.jour.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, and editor are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + crossref missing$ + { + new.sentence field.editor.editedby output + new.sentence article.fields.jour.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, editor, and translator are empty, proceeds with key + key empty$ not + { + article.field.journal output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence field.editor.editedby output + new.sentence article.fields.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { + "author, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {proceedings} +{ + begin.bibitem + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.compiler.compiledby output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if editor field is empty, proceeds with compiler + compiler empty$ not + { + field.compiler output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if editor, and compiler fields are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence book.fields.volume.series.number output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + key empty$ not + { + field.title.emph "title" output.check + name.or.dash + field.year extra.label * "year" output.check + new.block field.edition output + new.sentence field.impression output + new.sentence book.fields.volume.series.number output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + "editor, compiler, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {inproceedings} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence inproc.fields.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence inproc.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author field is empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.dqoute "title" output.check + new.sentence field.by output + new.sentence field.year output + crossref missing$ + { + new.sentence inproc.fields.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence inproc.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, and translator fields are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence inproc.fields.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence inproc.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { + "author, translator, and key" output.check + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {conference} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence conf.fields.series.number.pages output + new.sentence field.editor.editedby output + new.sentence conf.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author is empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.dqoute "title" output.check + new.sentence field.by output + new.sentence field.year output + crossref missing$ + { + new.sentence conf.fields.series.number.pages output + new.sentence field.editor.editedby output + new.sentence conf.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, and translator are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence conf.fields.series.number.pages output + new.sentence field.editor.editedby output + new.sentence conf.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { + "author, translator, and key" output.check + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {thesis} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence thesis.fields.school.type.address output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author is empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.comment output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { "author, and key" output.check } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {mastersthesis} { thesis } + + + +FUNCTION {phdthesis} { thesis } + + + +FUNCTION {unpublished} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block unpub.field.title output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence field.howpublished output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author is empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block unpub.field.title output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence field.howpublished output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author, and translator are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.comment output + new.sentence field.by output + new.sentence field.howpublished output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { "author, translator, and key" output.check } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {misc} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block misc.field.title output + new.sentence field.by output + new.sentence field.howpublished output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author is empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.by output + new.sentence field.howpublished output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { "author, and key" output.check } + if$ + } + if$ + end.bibitem +} + + + + + +% Functions to format entries based on type (incompatible entries) + +FUNCTION {booklet} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + field.author output + author format.key output + name.or.dash + field.year extra.label * "year" output.check + date.block + field.title "title" output.check + new.block + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + field.isbn output + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + +FUNCTION {inbook} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + author empty$ + { field.editor "author and editor" output.check + editor format.key output + name.or.dash + } + { field.author output.nonnull + name.or.dash + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + field.year extra.label * "year" output.check + date.block + field.btitle "title" output.check + crossref missing$ + { + field.bvolume output + fields.chapter.pages output%"chapter and pages" output.check + new.block + fields.number.series output + field.edition output + new.sentence + fields.publisher.address output + } + { + fields.chapter.pages "chapter and pages" output.check + new.block + book.field.crossref output.nonnull + } + if$ + crossref missing$ + { field.isbn output } + 'skip$ + if$ + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + +FUNCTION {manual} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + field.author output + author format.key output + name.or.dash + field.year extra.label * "year" output.check + date.block + field.btitle "title" output.check + organization address new.block.checkb + organization "organization" bibinfo.check output + address "address" bibinfo.check output + field.edition output + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + +FUNCTION {techreport} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + field.author "author" output.check + author format.key output + name.or.dash + field.year extra.label * "year" output.check + date.block + field.btitle + "title" output.check + new.block + fields.tr.number output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + + + +% Function to format entry if the type is not recognized + +FUNCTION {default.type} { misc } + + + + + + + + + + + + + + + + + + + + +% Reading bibliography database (.bib) file + +READ + + +% Function to generate a string that is suitable for sorting purposes + +FUNCTION {sortify} +{ + purify$ + "l" change.case$ +} + + + +% Length of the short name label of the entry + +INTEGERS { len } + +FUNCTION {chop.word} +{ + 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + + + + + +% Functions for sorting purposes + +FUNCTION {sort.format.names} +{ + 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { + namesleft #0 > + } + { + s nameptr + "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ + 't := + nameptr #1 > + { + " " * + namesleft #1 = + t "others" = + and + { "zzzzz" 't := } + 'skip$ + if$ + t sortify * + } + { + t sortify * + } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + + + +FUNCTION {sort.field.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 {editor.sort} +{ + editor empty$ + { + key empty$ + { + "to sort, need editor or key in " cite$ * warning$ + "" + } + { + key sortify + } + if$ + } + { + editor sort.format.names + } + if$ +} + + + +FUNCTION {book.sort} +{ + author empty$ not + { + author sort.format.names + } + { + compiler empty$ not + { + compiler sort.format.names + } + { + editor empty$ not + { + editor sort.format.names + } + { + translator empty$ not + { + translator sort.format.names + } + { + key empty$ not + { + key sortify + } + { + "to sort, need author, compiler, editor, translator, or key in " cite$ * warning$ + "" + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.sort} +{ + author empty$ not + { + author sort.format.names + } + { + compiler empty$ not + { + compiler sort.format.names + } + { + editor empty$ not + { + editor sort.format.names + } + { + translator empty$ not + { + translator sort.format.names + } + { + key empty$ not + { + key sortify + } + { + "to sort, need author, compiler, editor, translator, or key in " cite$ * warning$ + "" + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {article.sort} +{ + author empty$ not + { + author sort.format.names + } + { + editor empty$ not + { + editor sort.format.names + } + { + translator empty$ not + { + translator sort.format.names + } + { + key empty$ not + { + key sortify + } + { + "to sort, need author, editor, translator, or key in " cite$ * warning$ + "" + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {proc.sort} +{ + editor empty$ not + { editor sort.format.names } + { + compiler empty$ not + { compiler sort.format.names } + { + translator empty$ not + { translator sort.format.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.sort} +{ + author empty$ not + { author sort.format.names } + { + translator empty$ not + { translator sort.format.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {conf.sort} +{ + author empty$ not + { author sort.format.names } + { + translator empty$ not + { translator sort.format.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {presort} +{ + calc.label + label sortify + " " + * + type$ "book" = + 'book.sort + { + type$ "incollection" = + 'incoll.sort + { + type$ "article" = + 'article.sort + { + type$ "proceedings" = + 'proc.sort + { + type$ "inproceedings" = + 'inproc.sort + { + type$ "conference" = + 'conf.sort + { + type$ "inbook" = + 'author.editor.sort + 'author.sort + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + #1 entry.max$ substring$ + 'sort.label := + sort.label + * + " " + * + translateyear empty$ + { year field.or.null } + { + author empty$ not + { year field.or.null } + { + compiler empty$ not + { year field.or.null } + { + editor empty$ not + { year field.or.null } + { + translator empty$ not + { translateyear field.or.null } + { year field.or.null } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + * + " " + * + cite$ + * + #1 entry.max$ substring$ + 'sort.key$ := +} + + + + + +% Sort process + +ITERATE {presort} + +SORT + + + +STRINGS { last.label next.extra } + +INTEGERS { last.extra.num last.extra.num.extended last.extra.num.blank number.label } + +FUNCTION {initialize.extra.label.stuff} +{ + #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'last.extra.num := + "a" chr.to.int$ #1 - 'last.extra.num.blank := + last.extra.num.blank 'last.extra.num.extended := + #0 'number.label := +} + + + +FUNCTION {forward.pass} +{ + last.label label = + { + last.extra.num #1 + 'last.extra.num := + last.extra.num "z" chr.to.int$ > + { + "a" chr.to.int$ 'last.extra.num := + last.extra.num.extended #1 + 'last.extra.num.extended := + } + 'skip$ + if$ + last.extra.num.extended last.extra.num.blank > + { + last.extra.num.extended int.to.chr$ + last.extra.num int.to.chr$ + * 'extra.label := + } + { + last.extra.num int.to.chr$ 'extra.label := + } + if$ + } + { + "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ + number.label #1 + 'number.label := +} + + + +FUNCTION {reverse.pass} +{ + next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + extra.label 'next.extra := + extra.label duplicate$ empty$ + 'skip$ + { + is.language.persian + { "{\extrayearlabelfa{" swap$ * "}}" * } + { "{\extrayearlabelen{" swap$ * "}}" * } + if$ + } + if$ + 'extra.label := + label extra.label * 'label := +} + + + +EXECUTE {initialize.extra.label.stuff} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + + + +FUNCTION {bib.sort.order} +{ + sort.label + " " + * + translateyear empty$ + { year field.or.null sortify } + { + author empty$ not + { year field.or.null sortify } + { + compiler empty$ not + { year field.or.null sortify } + { + editor empty$ not + { year field.or.null sortify } + { + translator empty$ not + { translateyear field.or.null sortify } + { year field.or.null sortify } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + swap$ + * + " " + * + cite$ + * + #1 entry.max$ substring$ + 'sort.key$ := +} + + + +ITERATE {bib.sort.order} + +SORT + + + + +% Functions to create bibliography +FUNCTION {begin.bib} +{ + preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" write$ + newline$ + "% Generated by `iran-year.bst`." write$ + newline$ + "% This bibliography style is part of the `iran-bibtex` package." write$ + newline$ + "% Copyright (c) 2023-2024 Farshad Rasuli " write$ + newline$ + "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" write$ + newline$ + newline$ + newline$ + "\begin{thebibliography}{" number.label int.to.str$ * "}" * 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 file `iran-year.bst'. \ No newline at end of file diff --git a/biblio/bibtex/contrib/iran-bibtex/iran.bst b/biblio/bibtex/contrib/iran-bibtex/iran.bst index 5d8ee98fa4..e1575ba6be 100644 --- a/biblio/bibtex/contrib/iran-bibtex/iran.bst +++ b/biblio/bibtex/contrib/iran-bibtex/iran.bst @@ -1,13 +1,13 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% -%% This file is “iran.bst”, v0.3.0 (2023/12/18) +%% This file is “iran.bst”, v0.4.0 (2024/01/8) %% generated with the DOCSTRIP utility, then modified to support -%% bilingual (English/Latin, and Persian) and be compatible with the +%% bilingual (English/Latin, and Persian/Farsi) in accordance with the %% “Iran Manual of Style Citation Guide” (1st edn., 2016). %% %% %% -%% Copyright (c) 2023 Farshad Rasuli +%% Copyright (c) 2023-2024 Farshad Rasuli %% %% This file can be redistributed and/or modified under the terms %% of the LaTeX Project Public License version 1.3c, or any later version. @@ -16,40 +16,40 @@ %% This BibTeX bibliography style (bst) file is part of %% the “iran-bibtex” package. %% -%% CTAN: https://ctan.org/pkg/iran-bibtex -%% CTAN archive: https://ctan.org/tex-archive/biblio/bibtex/contrib/iran-bibtex -%% Repository: https://github.com/farshadrasuli/iran-bibtex -%% Bug tracker: https://github.com/farshadrasuli/iran-bibtex/issues +%% CTAN catalog: https://ctan.org/pkg/iran-bibtex +%% CTAN archive: https://ctan.org/tex-archive/biblio/bibtex/contrib/iran-bibtex +%% Repository: https://github.com/farshadrasuli/iran-bibtex +%% Bug tracker: https://github.com/farshadrasuli/iran-bibtex/issues %% %% %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%------------------------------------------------------------------------------ -% This bibliography style file is intended for texts in ENGLISH, and Persian. -% This is an author-year citation style bibliography. This style file is based -% on natbib.sty package by Patrick W. Daly. -% The form of the \bibitem entries is -% \bibitem[Jones et al.(1990)]{key}... -% \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... -% The essential feature is that the label (the part in brackets) consists -% of the author names, as they should appear in the citation, with the year -% in parentheses following. There must be no space before the opening -% parenthesis! -% -% The \cite command functions as follows (\cite is equal to \citep command): -% \citep{key} => (Jones et al., 1990) -% \citep*{key} => (Jones, Baker, and Smith, 1990) -% \citep[chap. 2]{key} => (Jones et al., 1990, chap. 2) -% \citep[e.g.][]{key} => (e.g. Jones et al., 1990) -% \citep[e.g.][p. 32]{key} => (e.g. Jones et al., 1990, p. 32) -% \citet{key} => Jones et al. (1990) -% \citet*{key} => Jones, Baker, and Smith (1990) -% \citeauthor{key} => Jones et al. -% \citeauthor*{key} => Jones, Baker, and Smith -% \citeyear{key} => 1990 -%------------------------------------------------------------------------------ +%%----------------------------------------------------------------------------- +%% This bibliography style file is intended for texts in Persian. +%% This is an author-year citation style bibliography. This style file is +%% based on natbib.sty package by Patrick W. Daly. +%% The form of the \bibitem entries is +%% \bibitem[Jones et al.(1990)]{key}... +%% \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... +%% The essential feature is that the label (the part in brackets) consists +%% of the author names, as they should appear in the citation, with the year +%% in parentheses following. There must be no space before the opening +%% parenthesis! +%% +%% The \cite command functions as follows (\cite is equal to \citep command): +%% \citep{key} => (Jones et al., 1990) +%% \citep*{key} => (Jones, Baker, and Smith, 1990) +%% \citep[chap. 2]{key} => (Jones et al., 1990, chap. 2) +%% \citep[e.g.][]{key} => (e.g. Jones et al., 1990) +%% \citep[e.g.][p. 32]{key} => (e.g. Jones et al., 1990, p. 32) +%% \citet{key} => Jones et al. (1990) +%% \citet*{key} => Jones, Baker, and Smith (1990) +%% \citeauthor{key} => Jones et al. +%% \citeauthor*{key} => Jones, Baker, and Smith +%% \citeyear{key} => 1990 +%%----------------------------------------------------------------------------- @@ -115,7 +115,7 @@ ENTRY -% Basic boolean functions +% Logical operators FUNCTION {not} { @@ -143,12 +143,12 @@ FUNCTION {or} -% check for language of entry +% Check for language entry FUNCTION {is.language.persian} { language missing$ - {#0} + { #0 } { language "l" change.case$ "persian" = } if$ } @@ -176,22 +176,6 @@ FUNCTION {bbl.and} if$ } -FUNCTION {bbl.annotator} -{ - is.language.persian - {"حاشیه‌نویس"} - {"ann."} - if$ -} - -FUNCTION {bbl.annotatedby} -{ - is.language.persian - {"با حاشیه‌ی"} - {"annotated by"} - if$ -} - FUNCTION {bbl.andothers} { is.language.persian @@ -216,14 +200,6 @@ FUNCTION {bbl.chapter} if$ } -FUNCTION {bbl.collaboration} -{ - is.language.persian - {"همکار"} - {"coll."} - if$ -} - FUNCTION {bbl.comma} { is.language.persian @@ -304,7 +280,7 @@ FUNCTION {bbl.editors} if$ } -FUNCTION {bbl.edby} +FUNCTION {bbl.editedby} { is.language.persian {"ویراسته‌ی"} @@ -334,7 +310,6 @@ FUNCTION {bbl.etal} {"و~همکاران"} {"et~al."} if$ - } FUNCTION {bbl.forewordby} @@ -393,14 +368,6 @@ FUNCTION {bbl.issn} if$ } -FUNCTION {bbl.thesis} -{ - is.language.persian - {"پایان‌نامه"} - {"Thesis"} - if$ -} - FUNCTION {bbl.mthesis} { is.language.persian @@ -409,7 +376,7 @@ FUNCTION {bbl.mthesis} if$ } -FUNCTION {bbl.number} +FUNCTION {bbl.nr} { is.language.persian {"ش."} @@ -417,7 +384,7 @@ FUNCTION {bbl.number} if$ } -FUNCTION {bbl.nr} +FUNCTION {bbl.number} { is.language.persian {"ش."} @@ -436,16 +403,16 @@ FUNCTION {bbl.of} FUNCTION {bbl.page} { is.language.persian - {""} - {""} + {"ص"} + {"p."} if$ } FUNCTION {bbl.pages} { is.language.persian - {""} - {""} + {"صص"} + {"pp."} if$ } @@ -489,6 +456,14 @@ FUNCTION {bbl.techrep} if$ } +FUNCTION {bbl.thesis} +{ + is.language.persian + {"پایان‌نامه"} + {"Thesis"} + if$ +} + FUNCTION {bbl.translator} { is.language.persian @@ -541,6 +516,36 @@ FUNCTION {bbl.volumes} +% Macro for abbreviation of month + +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"} + + + + + % Functions to declare position INTEGERS { output.state before.all mid.sentence after.sentence after.block } @@ -574,7 +579,7 @@ FUNCTION {output.nonnull} { output.state before.all = 'write$ - { add.period$ " " * write$ } + { add.period$ write$ " " write$ } if$ } if$ @@ -605,7 +610,68 @@ FUNCTION {output.check} -% Functions to control format of entry +% Functions to check and warn bibinfo + +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 {either.or.check} +{ + empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + + + + + +% Functions to control the print format of entries FUNCTION {new.block} { @@ -615,6 +681,20 @@ FUNCTION {new.block} if$ } + + +FUNCTION {new.block.checkb} +{ + empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + + + FUNCTION {new.sentence} { output.state after.block = @@ -637,10 +717,8 @@ FUNCTION {add.blank} -FUNCTION {no.blank.or.punct} -{ - "\hspace{0pt}" * before.all 'output.state := -} +FUNCTION {capitalize} +{ "u" change.case$ "t" change.case$ } @@ -651,6 +729,33 @@ FUNCTION {date.block} +FUNCTION {emphasize} +{ + duplicate$ empty$ + { pop$ "" } + { "{\it " swap$ * "}" * } + if$ +} + + + +FUNCTION {field.or.null} +{ + duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + + + +FUNCTION {no.blank.or.punct} +{ + "\hspace{0pt}" * before.all 'output.state := +} + + + FUNCTION {non.stop} { duplicate$ @@ -691,35 +796,13 @@ FUNCTION {remove.dots} -FUNCTION {new.block.checkb} -{ - empty$ - swap$ empty$ - and - 'skip$ - 'new.block - if$ -} - - - -FUNCTION {field.or.null} -{ - duplicate$ empty$ - { pop$ "" } - 'skip$ - if$ -} +FUNCTION {separate.by.space} +{ " " swap$ * " " * } -FUNCTION {emphasize} -{ - duplicate$ empty$ - { pop$ "" } - { "{\it " swap$ * "}" * } - if$ -} +FUNCTION {space.word} +{ " " swap$ * " " * } @@ -734,111 +817,25 @@ FUNCTION {tie.or.space.prefix} -FUNCTION {capitalize} -{ "u" change.case$ "t" change.case$ } - - - -FUNCTION {space.word} -{ " " swap$ * " " * } - - - -FUNCTION {separate.by.space} -{ " " swap$ * " " * } - - - - - -% Macro for abbreviation of month - -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"} +FUNCTION {word.in} +{ + output.state mid.sentence = + { bbl.in " " * } + { bbl.in capitalize " " * } + if$ +} -MACRO {nov} {"Nov"} -MACRO {dec} {"Dec"} +% Functions to format names +INTEGERS { nameptr namesleft numnames } -% Functions to check and warn bibinfo +STRINGS { bibinfo} -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$ -} - - - - - -% Functions to format fields - -INTEGERS { nameptr namesleft numnames } - -STRINGS { bibinfo} - -FUNCTION {format.names} +FUNCTION {format.names} { 'bibinfo := duplicate$ empty$ @@ -965,184 +962,465 @@ FUNCTION {format.key} -FUNCTION {format.authors} -{ author "author" format.names } +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 {get.bbl.editor} -{ - editor num.names$ #1 > - 'bbl.editors - 'bbl.editor - if$ -} +STRINGS {oldname} -FUNCTION {format.editors} +FUNCTION {name.or.dash} { - editor "editor" format.names - duplicate$ empty$ - 'skip$ + 's := + oldname empty$ + { s 'oldname := s } { - bbl.comma * " " * get.bbl.editor * + s oldname = + { "---{}---{}---" } + { s 'oldname := s } + if$ } if$ } -FUNCTION {get.bbl.compiler} -{ - compiler num.names$ #1 > - 'bbl.compilers - 'bbl.compiler - if$ -} -FUNCTION {format.compilers} + +% Functions to create the short name label for the entry + +FUNCTION {label.and} { - compiler "compiler" format.names - duplicate$ empty$ - 'skip$ + is.language.persian + { "و" } { - bbl.comma * " " * get.bbl.compiler * + authorfa missing$ + { "and" } + { "و" } + if$ } if$ } -FUNCTION {get.bbl.translator} -{ - translator num.names$ #1 > - 'bbl.translators - 'bbl.translator - if$ -} - -FUNCTION {format.translators} +FUNCTION {label.andothers} { - translator "translator" format.names - duplicate$ empty$ - 'skip$ + is.language.persian + { "و~دیگران" } { - bbl.comma * " " * get.bbl.translator * + authorfa missing$ + { "and~others" } + { "و~دیگران" } + if$ } if$ } -FUNCTION {format.eprint} +FUNCTION {label.comma} { - eprint duplicate$ empty$ - 'skip$ + is.language.persian + { "،" } { - "\eprint" - archive empty$ - 'skip$ - { "[" * archive * "]" * } + authorfa missing$ + { "," } + { "،" } if$ - "{" * swap$ * "}" * } if$ } -FUNCTION {format.url} +FUNCTION {label.etal} { - url duplicate$ empty$ - { pop$ "" } + is.language.persian + { "و~همکاران" } { - bbl.url "u" change.case$ ": \url{" * swap$ * "}" * + authorfa missing$ + { "et~al." } + { "و~همکاران" } + if$ } if$ } -FUNCTION {format.urldate} +INTEGERS { is.authorfa.exist } + +FUNCTION {format.short.label.names} { - urldate duplicate$ empty$ - { pop$ "" } - { bbl.retrieved capitalize " " * swap$ * } + 's := + "" 't := + s #1 "{vv~}{ll}" format.name$ + s num.names$ #3 > + { + " " * label.etal * + } + { + s num.names$ #2 < + 'skip$ + { + s num.names$ #3 < + { + s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + " " * label.etal * + } + { + label.comma * label.and separate.by.space * s #2 "{vv~}{ll}" format.name$ * + } + if$ + } + { + s #3 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + " " * label.etal * + } + { + label.comma * " " * s #2 "{vv~}{ll}" format.name$ * + label.comma * label.and separate.by.space * s #3 "{vv~}{ll}" format.name$ * + } + if$ + } + if$ + } + if$ + } if$ } -FUNCTION {format.isbn} +FUNCTION {author.key.short.label.names} { - isbn "isbn" bibinfo.check - duplicate$ empty$ - 'skip$ + authorfa empty$ not + { authorfa format.short.label.names } { - bbl.isbn "u" change.case$ ": " * swap$ * + author empty$ not + { author format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ } if$ } -FUNCTION {format.issn} -{ - issn "issn" bibinfo.check - duplicate$ empty$ - 'skip$ - { - bbl.issn "u" change.case$ ": " * swap$ * - } - if$ -} - -FUNCTION {format.doi} +FUNCTION {author.editor.key.short.label.names} { - doi empty$ - { "" } + authorfa empty$ not + { authorfa format.short.label.names } { - bbl.doi "u" change.case$ ":\doi{" * doi * "}" * + author empty$ not + { author format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ } if$ } -FUNCTION {format.note} +FUNCTION {editor.key.short.label.names} { - note empty$ not + authorfa empty$ not + { authorfa format.short.label.names } { - note #1 #1 substring$ - duplicate$ "{" = - 'skip$ + editor empty$ not + { editor format.short.label.names } { - output.state mid.sentence = - { "l" } - { "u" } + key empty$ not + 'key + { cite$ #1 #3 substring$ } if$ - change.case$ } if$ - note #2 global.max$ substring$ * "note" bibinfo.check } - { "" } if$ } -FUNCTION {format.title} +FUNCTION {book.short.label.names} { - title - duplicate$ empty$ - 'skip$ - { bbl.dquote } + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + compiler empty$ not + { compiler format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + compiler empty$ not + { compiler format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {article.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {proc.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + compiler empty$ not + { compiler format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {conf.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {make.short.label.names} +{ + type$ "book" = + 'book.short.label.names + { + type$ "incollection" = + 'incoll.short.label.names + { + type$ "article" = + 'article.short.label.names + { + type$ "proceedings" = + 'proc.short.label.names + { + type$ "inproceedings" = + 'inproc.short.label.names + { + type$ "conference" = + 'conf.short.label.names + { + type$ "inbook" = + 'author.editor.key.short.label.names + 'author.key.short.label.names + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } if$ + 'short.list := } -FUNCTION {format.full.names} + + +% Functions to create the full name label for the entry + +FUNCTION {format.full.label.names} { 's := "" 't := @@ -1160,7 +1438,7 @@ FUNCTION {format.full.names} { namesleft #1 > { - bbl.comma * " " * t * + label.comma * " " * t * } { s nameptr "{ll}" format.name$ @@ -1174,10 +1452,10 @@ FUNCTION {format.full.names} } { numnames #2 > - { bbl.comma * } + { label.comma * } 'skip$ if$ - bbl.and + label.and separate.by.space * t * } if$ @@ -1193,74 +1471,100 @@ FUNCTION {format.full.names} } -FUNCTION {author.editor.key.full} + +FUNCTION {author.key.full.label.names} { - author empty$ + authorfa empty$ not + { authorfa format.full.label.names } { - editor empty$ + author empty$ not + { author format.full.label.names } { - key empty$ - { cite$ #1 #3 substring$ } + key empty$ not 'key + { cite$ #1 #3 substring$ } if$ } - { - editor format.full.names - } if$ } - { - author format.full.names - } if$ } -FUNCTION {author.key.full} +FUNCTION {author.editor.key.full.label.names} { - author empty$ + authorfa empty$ not + { authorfa format.full.label.names } { - key empty$ - { cite$ #1 #3 substring$ } - 'key + author empty$ not + { author format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } if$ } - { - author format.full.names - } if$ } -FUNCTION {editor.key.full} +FUNCTION {editor.key.full.label.names} { - editor empty$ + authorfa empty$ not + { authorfa format.full.label.names } { - key empty$ - { cite$ #1 #3 substring$ } - 'key + editor empty$ not + { editor format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } if$ } - { - editor format.full.names - } if$ } -FUNCTION {make.full.names} +FUNCTION {book.full.label.names} { - type$ "book" = - type$ "inbook" = - or - 'author.editor.key.full + authorfa empty$ not + { authorfa format.full.label.names } { - type$ "proceedings" = - 'editor.key.full - 'author.key.full + author empty$ not + { author format.full.label.names } + { + compiler empty$ not + { compiler format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } if$ } if$ @@ -1268,293 +1572,333 @@ FUNCTION {make.full.names} -FUNCTION {n.dashify} +FUNCTION {incoll.full.label.names} { - 't := - "" - { - t empty$ not - } - { - t #1 #1 substring$ - "-" = - { - t #1 #2 substring$ - "--" = not - { - "--" * - t #2 global.max$ substring$ 't := - } - { - { - t #1 #1 substring$ "-" = - } + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + compiler empty$ not + { compiler format.full.label.names } { - "-" * - t #2 global.max$ substring$ 't := + editor empty$ not + { editor format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ } - while$ - } - if$ - } - { - t #1 #1 substring$ * - t #2 global.max$ substring$ 't := - } - if$ - } - while$ -} - - - -FUNCTION {word.in} -{ - bbl.in capitalize " " * + if$ + } + if$ + } + if$ } -FUNCTION {format.date} +FUNCTION {article.full.label.names} { - year "year" bibinfo.check - duplicate$ empty$ + authorfa empty$ not + { authorfa format.full.label.names } { + author empty$ not + { author format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ } - 'skip$ if$ - extra.label * - before.all 'output.state := - after.sentence 'output.state := } -FUNCTION {format.comment} +FUNCTION {proc.full.label.names} { - comment + authorfa empty$ not + { authorfa format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + compiler empty$ not + { compiler format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ } -FUNCTION {format.article.journal} +FUNCTION {inproc.full.label.names} { - journal remove.dots emphasize + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ } -FUNCTION {format.article.jour.iss.vol.num.pp} +FUNCTION {conf.full.label.names} { - journal empty$ not + authorfa empty$ not + { authorfa format.full.label.names } { - issue empty$ not - { issue bbl.comma * " " *} - { "" } - if$ - format.article.journal * - volume empty$ not + author empty$ not + { author format.full.label.names } { - number empty$ not - { - pages empty$ not - { - " " * volume * "~" * - "(" * number * ")" * ": " * - pages * - } - { - " " * volume * bbl.comma * - " " * bbl.number * "~" * number * - } - if$ - } + translator empty$ not + { translator format.full.label.names } { - pages empty$ not - { - " " * volume * ": " * - pages * - } - { - " " * volume * - } + key empty$ not + 'key + { cite$ #1 #3 substring$ } if$ } if$ } + if$ + } + if$ +} + + + +FUNCTION {make.full.label.names} +{ + type$ "book" = + 'book.full.label.names + { + type$ "incollection" = + 'incoll.full.label.names { - number empty$ not - { - pages empty$ not - { - bbl.comma * " " * bbl.number * "~" * number * ": " * - pages * - } - { - bbl.comma * " " * bbl.number * "~" * number * - } - if$ - } + type$ "article" = + 'article.full.label.names { - pages empty$ not + type$ "proceedings" = + 'proc.full.label.names { - bbl.comma * " " * pages * + type$ "inproceedings" = + 'inproc.full.label.names + { + type$ "conference" = + 'conf.full.label.names + { + type$ "inbook" = + 'author.editor.key.full.label.names + 'author.key.full.label.names + if$ + } + if$ + } + if$ } - 'skip$ if$ } if$ } if$ } - { - "journal" output.check - } if$ } -FUNCTION {format.article.iss.vol.num.pp} + + +% Functions to create the label of the entry + +FUNCTION {calc.label} { - journal empty$ not + make.short.label.names + short.list "(" * + translateyear empty$ { - issue empty$ not - { issue bbl.comma * " " *} - { "" } + year duplicate$ empty$ + { pop$ "" } + 'skip$ if$ - volume empty$ not + } + { + author empty$ not { - number empty$ not - { - pages empty$ not - { - bbl.comma * " " * bbl.volume * "~" * volume * "~" * - "(" * number * ")" * ": " * - pages * - } - { - bbl.comma * " " * bbl.volume * "~" * volume * bbl.comma * - " " * bbl.number * "~" * number * - } - if$ - } - { - pages empty$ not - { - bbl.comma * " " * bbl.volume * "~" * volume * ":~" * - pages * - } - { - bbl.comma * " " * bbl.volume * "~" * volume * - } - if$ - } + year duplicate$ empty$ + { pop$ "" } + 'skip$ if$ } { - number empty$ not + compiler empty$ not { - pages empty$ not - { - bbl.number * "~" * number * ": " * - pages * - } - { - bbl.number * "~" * number * - } + year duplicate$ empty$ + { pop$ "" } + 'skip$ if$ } { - pages empty$ not + editor empty$ not { - pages * + year duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + } + { + translateyear duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ } - 'skip$ if$ } if$ } if$ } - { - "journal" output.check - } if$ + * + 'label := } -FUNCTION {format.btitle} + + +% Functions to open, and close the bibitem + +FUNCTION {begin.bibitem} { - title "title" bibinfo.check - duplicate$ empty$ - 'skip$ - { emphasize } + newline$ + is.language.persian + { + "\bibitem[{" write$ + } + { + "\begin{LTRbibitems}\resetlatinfont" write$ + newline$ + "\bibitem[{" write$ + } + if$ + label write$ + ")" + make.full.label.names duplicate$ short.list = + { pop$ } + { * } if$ + "}]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := } -FUNCTION {format.title.in.books} +FUNCTION {end.bibitem} { - title - duplicate$ empty$ + add.period$ write$ + newline$ + is.language.persian 'skip$ - { emphasize } + { + "\end{LTRbibitems}" write$ + newline$ + } if$ } -FUNCTION {either.or.check} -{ - empty$ - 'pop$ - { "can't use both " swap$ * " fields in " * cite$ * warning$ } - if$ -} -FUNCTION {format.bvolume} +% Functions to format fields + +FUNCTION {field.afterword} { - volume empty$ - { "" } + afterword empty$ not { - 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 + afterword "afterword" format.names.ed + bbl.afterwordby capitalize " " * swap$ * } + { "" } if$ } -FUNCTION {format.number.series} + +FUNCTION {field.author} +{ author "author" format.names } + + + +FUNCTION {field.booktitle} { - volume empty$ + booktitle "booktitle" bibinfo.check + emphasize +} + + + +FUNCTION {field.by} +{ + by empty$ not { - number empty$ - { series field.or.null } - { - series empty$ - { number "number" bibinfo.check } - { - output.state mid.sentence = - { bbl.number } - { bbl.number capitalize } - if$ - number tie.or.space.prefix "number" bibinfo.check * * - bbl.in space.word * - series "series" bibinfo.check * - } - if$ - } - if$ + by "by" format.names.ed + bbl.by " " * swap$ * } { "" } if$ @@ -1562,508 +1906,133 @@ FUNCTION {format.number.series} -FUNCTION {format.book.volume.series.number} +FUNCTION {field.collaboration} { - volume empty$ not - { - volumes empty$ not - { - series empty$ not - { - number empty$ not - { - bbl.volume capitalize "~" * volume * - " " * bbl.of * " " * volumes * add.period$ - " " * series emphasize * - " " * number * - } - { - bbl.volume capitalize "~" * volume * - " " * bbl.of * " " * volumes * add.period$ - " " * series emphasize * - } - if$ - } - { - number empty$ not - { - bbl.volume capitalize "~" * volume * - " " * bbl.of * " " * volumes * add.period$ - " " * bbl.number * "~" * number * - } - { - bbl.volume capitalize "~" * volume * - " " * bbl.of * " " * volumes * - } - if$ - } - if$ - } - { - series empty$ not - { - number empty$ not - { - bbl.volume capitalize "~" * volume * - " " * bbl.of * " " * series emphasize * - " " * number * - } - { - bbl.volume capitalize "~" * volume * - " " * bbl.of * " " * series emphasize * - } - if$ - } - { - number empty$ not - { - bbl.volume capitalize "~" * volume * add.period$ - " " * bbl.number * "~" * number * - } - { - bbl.volume capitalize "~" * volume * add.period$ - } - if$ - } - if$ - } - if$ - } + collaboration empty$ not { - volumes empty$ not - { - series empty$ not - { - number empty$ not - { - volumes "~" * bbl.volumes * add.period$ - " " * series * - " " * number * - } - { - volumes "~" * bbl.volumes * add.period$ - " " * series * - } - if$ - } - { - number empty$ not - { - volumes "~" * bbl.volumes * add.period$ - " " * bbl.number * "~" * number * - } - { - volumes "~" * bbl.volumes * add.period$ - } - if$ - } - if$ - } - { - series empty$ not - { - number empty$ not - { - series - " " * number * - } - { - series - } - if$ - } - { - number empty$ not - { - bbl.number "~" * number * - } - { - "" - } - if$ - } - if$ - } - if$ + collaboration "collaboration" format.names.ed + bbl.incollaborationwith capitalize " " * swap$ * } + { "" } if$ } -FUNCTION {format.booktitle} +FUNCTION {field.comment} { - booktitle "booktitle" bibinfo.check - emphasize + comment } -FUNCTION {format.incoll.chapter.booktitle.volume.pages} +FUNCTION {field.commentator} { - booktitle empty$ not - { - chapter empty$ not - { - bbl.chapter capitalize "~" * chapter * - " " * bbl.in * " " * format.booktitle * - pages empty$ not - { - bbl.comma * " " * pages * add.period$ - } - { - add.period$ - } - if$ - volume empty$ not - { - volumes empty$ not - { - " " * bbl.volume capitalize * "~" * volume * " " * bbl.of * " " * volumes * add.period$ - } - { - " " * bbl.volume capitalize * "~" * volume * add.period$ - } - if$ - } - { - volumes empty$ not - { - " " * volumes * "~" * bbl.volumes * add.period$ - } - { - skip$ - } - if$ - } - if$ - } - { - word.in format.booktitle * - pages empty$ not - { - volume empty$ not - { - volumes empty$ not - { - " " * volume * ": " * pages * add.period$ - " " * volumes * "~" * bbl.volumes * add.period$ - } - { - " " * volume * ": " * pages * add.period$ - } - if$ - } - { - volumes empty$ not - { - bbl.comma * " " * pages * add.period$ - " " * volumes * "~" * bbl.volumes * add.period$ - } - { - bbl.comma * " " * pages * add.period$ - } - if$ - } - if$ - } - { - add.period$ - volume empty$ not - { - volumes empty$ not - { - " " * bbl.volume capitalize * "~" * volume * - " " * bbl.of * " " * volumes * add.period$ - } - { - " " * bbl.volume capitalize * "~" * volume * add.period$ - } - if$ - } - { - volumes empty$ not - { - " " * volumes * "~" * bbl.volumes * add.period$ - } - { - skip$ - } - if$ - } - if$ - } - if$ - } - if$ - } + commentator empty$ not { - "" + commentator "commentator" format.names.ed + bbl.commentatedby capitalize " " * swap$ * } + { "" } if$ } -INTEGERS { emph.series } -FUNCTION {format.incoll.series.number} +FUNCTION {get.bbl.compiler} { - author empty$ not - { - translator empty$ not - { #1 'emph.series := } - { - edition empty$ not - { #1 } - { #0 } - if$ - impression empty$ not - { #1 } - { #0 } - if$ - + 'emph.series := - } - if$ - } + compiler num.names$ #1 > + 'bbl.compilers + 'bbl.compiler + if$ +} + +FUNCTION {field.compiler} +{ + compiler "compiler" format.names + duplicate$ empty$ + 'skip$ { - compiler empty$ not - { - translator empty$ not - { #1 'emph.series := } - { - edition empty$ not - { #1 } - { #0 } - if$ - impression empty$ not - { #1 } - { #0 } - if$ - + 'emph.series := - } - if$ - } - { - editor empty$ not - { - translator empty$ not - { #1 'emph.series := } - { - edition empty$ not - { #1 } - { #0 } - if$ - impression empty$ not - { #1 } - { #0 } - if$ - + 'emph.series := - } - if$ - } - { - edition empty$ not - { #1 } - { #0 } - if$ - impression empty$ not - { #1 } - { #0 } - if$ - + 'emph.series := - } - if$ - } - if$ + bbl.comma * " " * get.bbl.compiler * } if$ - series empty$ not +} + + + +FUNCTION {field.compiler.compiledby} +{ + compiler empty$ not { - emph.series #0 > - { - number empty$ not - { series emphasize " " * number * } - { series emphasize } - if$ - } - { - number empty$ not - { series " " * number * } - { series } - if$ - } - if$ + compiler "compiler" format.names.ed + bbl.compiledby capitalize " " * swap$ * } + { "" } + if$ +} + + + +FUNCTION {field.doi} +{ + doi empty$ + { "" } { - number empty$ not - { bbl.number capitalize "~" * number * } - { "" } - if$ + bbl.doi "u" change.case$ ":\doi{" * doi * "}" * } if$ } -FUNCTION {format.inproc.booktitle.volume.pages} +FUNCTION {field.edition} { - booktitle empty$ not + edition duplicate$ empty$ + 'skip$ { - volume empty$ not - { - volumes empty$ not - { - pages empty$ not - { - format.booktitle " " * - volume * ": " * pages * add.period$ - " " * volumes * "~" * bbl.volumes * - } - { - format.booktitle add.period$ - " " * bbl.volume * "~" * volume * bbl.of * " " * volumes * - } - if$ - } - { - pages empty$ not - { - format.booktitle " " * - volume * ": " * pages * - } - { - format.booktitle add.period$ - " " * bbl.volume * "~" * volume * - } - if$ - } - if$ - } - { - volumes empty$ not - { - pages empty$ not - { - format.booktitle " " * - bbl.comma * " " * pages * add.period$ - volumes * "~" * bbl.volumes - } - { - format.booktitle " " * add.period$ - " " * volumes * "~" * bbl.volumes * - } - if$ - } - { - pages empty$ not - { - format.booktitle " " * - bbl.comma * " " * pages * - } - { - format.booktitle - } - if$ - } - if$ - } + output.state mid.sentence = + { "l" } + { "t" } + if$ + change.case$ + "edition" bibinfo.check + is.language.persian + { bbl.edition " " * swap$ * } + { " " * bbl.edition * } if$ } - { - "" - } if$ } -FUNCTION {format.inproc.series.number} +FUNCTION {get.bbl.editor} { - author empty$ not - { - translator empty$ not - { #1 'emph.series := } - { - edition empty$ not - { #1 } - { #0 } - if$ - impression empty$ not - { #1 } - { #0 } - if$ - + 'emph.series := - } - if$ - } - { - edition empty$ not - { #1 } - { #0 } - if$ - impression empty$ not - { #1 } - { #0 } - if$ - + 'emph.series := - } + editor num.names$ #1 > + 'bbl.editors + 'bbl.editor if$ - series empty$ not - { - emph.series #0 > - { - number empty$ not - { series emphasize " " * number * } - { series emphasize } - if$ - } - { - number empty$ not - { series " " * number * } - { series } - if$ - } - if$ - } +} + +FUNCTION {field.editor} +{ + editor "editor" format.names + duplicate$ empty$ + 'skip$ { - number empty$ not - { bbl.number capitalize "~" * number * } - { "" } - if$ + bbl.comma * " " * get.bbl.editor * } if$ } -FUNCTION {format.conf.series.number.pages} +FUNCTION {field.editor.editedby} { - series empty$ not + editor empty$ not { - number empty$ not - { - pages empty$ not - { - series - bbl.comma * " " * bbl.number * "~" * number * - bbl.comma * " " * pages * - } - { - series - bbl.comma * " " * bbl.number * "~" * number * - } - if$ - } - { - pages empty$ not - { - series - bbl.comma * " " * pages * - } - { series } - if$ - } - if$ + editor "editor" format.names.ed + bbl.editedby capitalize " " * swap$ * } { "" } if$ @@ -2071,175 +2040,122 @@ FUNCTION {format.conf.series.number.pages} -FUNCTION {format.conf.org.publisher.address} +FUNCTION {field.eprint} { - organization empty$ not - { - publisher empty$ not - { - address empty$ not - { - organization add.period$ - address * ": " * publisher * - } - { - organization add.period$ - publisher * - } - if$ - } - { - address empty$ not - { - organization - bbl.comma * " " * address * - } - { - organization - } - if$ - } - if$ - } + eprint duplicate$ empty$ + 'skip$ { - publisher empty$ not - { - address empty$ not - { address ": " * publisher *} - { publisher } - if$ - } - { - address empty$ not - { address } - { "" } - if$ - } + "\eprint" + archive empty$ + 'skip$ + { "[" * archive * "]" * } if$ + "{" * swap$ * "}" * } if$ } -FUNCTION {format.proc.org.publisher.address} { format.conf.org.publisher.address } +FUNCTION {field.howpublished} +{ + howpublished +} -FUNCTION {format.thesis.school.type.address} +FUNCTION {field.impression} { - type empty$ + impression duplicate$ empty$ not { - type$ "mastersthesis" = - { bbl.mthesis "t" change.case$ } - { - type$ "phdthesis" = - { bbl.phdthesis "t" change.case$ } - { bbl.thesis "t" change.case$ } - if$ - } + output.state mid.sentence = + { "l" } + { "t" } if$ - school empty$ not - { - address empty$ not - { bbl.comma * " " * school * bbl.comma * " " * address * } - { bbl.comma * " " * school * } - if$ - } - { - address empty$ not - { bbl.comma * address * } - { add.period$ } - if$ - } + change.case$ + is.language.persian + { bbl.impression " " * swap$ * } + { " " * bbl.impression * } if$ } + 'skip$ + if$ +} + + + +FUNCTION {field.introduction} +{ + introduction empty$ not { - type "~" = - { - school empty$ not - { - address empty$ not - { school bbl.comma * " " * address * } - { school } - if$ - } - { - address empty$ not - { address } - { "" } - if$ - } - if$ - } - { - type - school empty$ not - { - address empty$ not - { bbl.comma * " " * school * bbl.comma * " " * address * } - { bbl.comma * " " * school * } - if$ - } - { - address empty$ not - { bbl.comma * address * } - { add.period$ } - if$ - } - if$ - } - if$ + introduction "introduction" format.names.ed + bbl.introby capitalize " " * swap$ * } + { "" } if$ } -FUNCTION {format.edition} +FUNCTION {field.isbn} { - edition duplicate$ empty$ + isbn "isbn" bibinfo.check + duplicate$ empty$ 'skip$ { - output.state mid.sentence = - { "l" } - { "t" } - if$ - change.case$ - "edition" bibinfo.check - is.language.persian - { bbl.edition " " * swap$ * } - { " " * bbl.edition * } + bbl.isbn "u" change.case$ ": " * swap$ * + } + if$ +} + + + +FUNCTION {field.issn} +{ + issn "issn" bibinfo.check + duplicate$ empty$ + 'skip$ + { + bbl.issn "u" change.case$ ": " * swap$ * + } + if$ +} + + + +FUNCTION {field.note} +{ + note empty$ not + { + 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.impression} +FUNCTION {field.organization} { - impression duplicate$ empty$ not - { - output.state mid.sentence = - { "l" } - { "t" } - if$ - change.case$ - is.language.persian - { bbl.impression " " * swap$ * } - { " " * bbl.impression * } - if$ - } - 'skip$ - if$ + organization "organization" bibinfo.check } INTEGERS { multiresult } -FUNCTION {multi.page.check} +FUNCTION {field.pages.check.multipage} { 't := #0 'multiresult := @@ -2264,12 +2180,12 @@ FUNCTION {multi.page.check} -FUNCTION {format.pages} +FUNCTION {field.pages} { pages duplicate$ empty$ 'skip$ { - duplicate$ multi.page.check + duplicate$ field.pages.check.multipage { n.dashify } @@ -2283,119 +2199,172 @@ FUNCTION {format.pages} -FUNCTION {format.journal.pages} +FUNCTION {field.preface} { - pages duplicate$ empty$ 'pop$ + preface empty$ not { - swap$ duplicate$ empty$ - { - pop$ pop$ format.pages - } - { - ": " * - swap$ - n.dashify - "pages" bibinfo.check - * - } - if$ + preface "preface" format.names.ed + bbl.prefaceby capitalize " " * swap$ * } + { "" } if$ } -FUNCTION {format.journal.eid} +FUNCTION {field.title} { - eid "eid" bibinfo.check + title duplicate$ empty$ - 'pop$ - { - swap$ - duplicate$ empty$ - 'skip$ - { - ": " * - } - if$ - swap$ * - numpages empty$ - 'skip$ - { - bbl.eidpp numpages tie.or.space.prefix - "numpages" bibinfo.check * * - " (" swap$ * ")" * * - } - if$ - } + 'skip$ + { bbl.dquote } if$ } -FUNCTION {format.vol.num.pages} +FUNCTION {field.btitle} { - volume field.or.null + title "title" bibinfo.check duplicate$ empty$ 'skip$ - { - "volume" bibinfo.check - } + { emphasize } if$ - number "number" bibinfo.check +} + + + +FUNCTION {field.title.dqoute} +{ + title + duplicate$ empty$ + 'skip$ + { bbl.dquote } + if$ +} + + + +FUNCTION {field.title.emph} +{ + title "title" bibinfo.check + duplicate$ empty$ + 'skip$ + { emphasize } + if$ +} + + + +FUNCTION {get.bbl.translator} +{ + translator num.names$ #1 > + 'bbl.translators + 'bbl.translator + if$ +} + +FUNCTION {field.translator} +{ + translator "translator" format.names duplicate$ empty$ 'skip$ { - swap$ - duplicate$ empty$ - { "there's a number but no volume in " cite$ * warning$ } - 'skip$ - if$ - swap$ - "~(" swap$ * ")" * + bbl.comma * " " * get.bbl.translator * } if$ - * - eid empty$ - { format.journal.pages } - { format.journal.eid } +} + + +FUNCTION {field.translateyear} +{ + translateyear empty$ not + { + translateyear + } + { "" } if$ + before.all 'output.state := + after.sentence 'output.state := } -FUNCTION {format.chapter.pages} +FUNCTION {field.translator.translatedby} { - chapter empty$ - 'format.pages + translator empty$ not { - type empty$ - { bbl.chapter } - { - type "l" change.case$ - "type" bibinfo.check - } - if$ - chapter tie.or.space.prefix - "chapter" bibinfo.check - * * - pages empty$ - 'skip$ - { bbl.comma * " " * format.pages * } + translator "translator" format.names.ed + bbl.translatedby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.url} +{ + url duplicate$ empty$ + { pop$ "" } + { + bbl.url "u" change.case$ ": \url{" * swap$ * "}" * + } + if$ +} + + + +FUNCTION {field.urldate} +{ + urldate duplicate$ empty$ + { pop$ "" } + { bbl.retrieved capitalize " " * swap$ * } + if$ +} + + + +FUNCTION {field.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 {field.year} +{ + year "year" bibinfo.check + duplicate$ empty$ + { } + 'skip$ if$ + before.all 'output.state := + after.sentence 'output.state := } -FUNCTION {format.in.ed.booktitle} +FUNCTION {in.ed.field.booktitle} % NOT USED { - format.booktitle + field.booktitle duplicate$ empty$ 'skip$ { - format.bvolume + field.bvolume duplicate$ empty$ 'pop$ { bbl.comma " " * swap$ * * } @@ -2404,7 +2373,7 @@ FUNCTION {format.in.ed.booktitle} duplicate$ empty$ 'pop$ { - bbl.edby capitalize " " * swap$ * + bbl.editedby capitalize " " * swap$ * swap$ add.period$ " " * swap$ * } @@ -2416,12 +2385,80 @@ FUNCTION {format.in.ed.booktitle} -FUNCTION {format.by} + + +% Functions to format combined fields + +FUNCTION {fields.journal.pages} { - by empty$ not + pages duplicate$ empty$ 'pop$ { - by "by" format.names.ed - bbl.by " " * swap$ * + swap$ duplicate$ empty$ + { + pop$ pop$ field.pages + } + { + ": " * + swap$ + n.dashify + "pages" bibinfo.check + * + } + if$ + } + if$ +} + + + +FUNCTION {fields.journal.eid} +{ + eid "eid" bibinfo.check + duplicate$ empty$ + 'pop$ + { + swap$ + duplicate$ empty$ + 'skip$ + { + ": " * + } + if$ + swap$ * + numpages empty$ + 'skip$ + { + bbl.eidpp numpages tie.or.space.prefix + "numpages" bibinfo.check * * + " (" swap$ * ")" * * + } + if$ + } + if$ +} + + +FUNCTION {fields.number.series} +{ + volume empty$ + { + number empty$ + { series field.or.null } + { + series empty$ + { number "number" bibinfo.check } + { + output.state mid.sentence = + { bbl.number } + { bbl.number capitalize } + if$ + number tie.or.space.prefix "number" bibinfo.check * * + bbl.in space.word * + series "series" bibinfo.check * + } + if$ + } + if$ } { "" } if$ @@ -2429,830 +2466,744 @@ FUNCTION {format.by} -FUNCTION {format.incollaborationwith} +FUNCTION {fields.org.or.pub} { - collaboration empty$ not + 't := + "" + address empty$ t empty$ and + 'skip$ { - collaboration "collaboration" format.names.ed - bbl.incollaborationwith capitalize " " * swap$ * + address "address" bibinfo.check * + t empty$ + 'skip$ + { + address empty$ + 'skip$ + { ": " * } + if$ + t * + } + if$ } - { "" } if$ } -FUNCTION {format.commentatedby} +FUNCTION {fields.publisher.address} { - commentator empty$ not - { - commentator "commentator" format.names.ed - bbl.commentatedby capitalize " " * swap$ * - } - { "" } - if$ + publisher "publisher" bibinfo.check fields.org.or.pub } -FUNCTION {format.compiledby} +FUNCTION {fields.organization.address} { - compiler empty$ not - { - compiler "compiler" format.names.ed - bbl.compiledby capitalize " " * swap$ * - } - { "" } - if$ + organization "organization" bibinfo.check fields.org.or.pub } -FUNCTION {format.edby} +FUNCTION {fields.tr.number} { - editor empty$ not - { - editor "editor" format.names.ed - bbl.edby capitalize " " * swap$ * - } - { "" } + 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.translatedby} +FUNCTION {fields.vol.num.pages} { - translator empty$ not + volume field.or.null + duplicate$ empty$ + 'skip$ { - translator "translator" format.names.ed - bbl.translatedby capitalize " " * swap$ * + "volume" bibinfo.check } - { "" } if$ -} - - -FUNCTION {format.translateyear} -{ - translateyear empty$ not + number "number" bibinfo.check + duplicate$ empty$ + 'skip$ { - translateyear + swap$ + duplicate$ empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + swap$ + "~(" swap$ * ")" * } - { "" } if$ - before.all 'output.state := - after.sentence 'output.state := + * + eid empty$ + { fields.journal.pages } + { fields.journal.eid } + if$ } -FUNCTION {format.introby} +FUNCTION {fields.chapter.pages} { - introduction empty$ not + chapter empty$ + 'field.pages { - introduction "introduction" format.names.ed - bbl.introby capitalize " " * swap$ * + type empty$ + { bbl.chapter } + { + type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter tie.or.space.prefix + "chapter" bibinfo.check + * * + pages empty$ + 'skip$ + { bbl.comma * " " * field.pages * } + if$ } - { "" } if$ } -FUNCTION {format.prefaceby} -{ - preface empty$ not - { - preface "preface" format.names.ed - bbl.prefaceby capitalize " " * swap$ * - } - { "" } - if$ -} +% Functions to format combined fields for specific entry -FUNCTION {format.afterwordby} +FUNCTION {book.field.crossref} { - afterword empty$ not + volume duplicate$ empty$ { - afterword "afterword" format.names.ed - bbl.afterwordby capitalize " " * swap$ * + "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + pop$ word.in } - { "" } - if$ -} - - - -FUNCTION {format.thesis.type} -{ - type duplicate$ empty$ - 'pop$ { - swap$ pop$ - "t" change.case$ "type" bibinfo.check + bbl.volume + capitalize + swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of separate.by.space * } if$ + " \cite{" * crossref * "}" * } -FUNCTION {format.tr.number} +FUNCTION {book.fields.volume.series.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 * * } + volume empty$ not + { + volumes empty$ not + { + series empty$ not + { + number empty$ not + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + " " * series emphasize * + " " * number * + } + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + " " * series emphasize * + } + if$ + } + { + number empty$ not + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + " " * bbl.number * "~" * number * + } + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * + } + if$ + } + if$ + } + { + series empty$ not + { + number empty$ not + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * series emphasize * + " " * number * + } + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * series emphasize * + } + if$ + } + { + number empty$ not + { + bbl.volume capitalize "~" * volume * add.period$ + " " * bbl.number * "~" * number * + } + { + bbl.volume capitalize "~" * volume * add.period$ + } + if$ + } + if$ + } + if$ + } + { + volumes empty$ not + { + series empty$ not + { + number empty$ not + { + volumes "~" * bbl.volumes * add.period$ + " " * series * + " " * number * + } + { + volumes "~" * bbl.volumes * add.period$ + " " * series * + } + if$ + } + { + number empty$ not + { + volumes "~" * bbl.volumes * add.period$ + " " * bbl.number * "~" * number * + } + { + volumes "~" * bbl.volumes * add.period$ + } + if$ + } + if$ + } + { + series empty$ not + { + number empty$ not + { + series + " " * number * + } + { + series + } + if$ + } + { + number empty$ not + { + bbl.number "~" * number * + } + { + "" + } + if$ + } + if$ + } + if$ + } if$ } -FUNCTION {format.article.crossref} -{ - word.in - " \cite{" * crossref * "}" * -} - - - -FUNCTION {format.book.crossref} +FUNCTION {incoll.fields.chapter.booktitle.volume.pages} { - volume duplicate$ empty$ + booktitle empty$ not { - "empty volume in " cite$ * "'s crossref of " * crossref * warning$ - pop$ word.in + chapter empty$ not + { + bbl.chapter capitalize "~" * chapter * + " " * bbl.in * " " * field.booktitle * + pages empty$ not + { + bbl.comma * " " * pages * add.period$ + } + { + add.period$ + } + if$ + volume empty$ not + { + volumes empty$ not + { + " " * bbl.volume capitalize * "~" * volume * " " * bbl.of * " " * volumes * add.period$ + } + { + " " * bbl.volume capitalize * "~" * volume * add.period$ + } + if$ + } + { + volumes empty$ not + { + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + skip$ + } + if$ + } + if$ + } + { + word.in field.booktitle * + pages empty$ not + { + volume empty$ not + { + volumes empty$ not + { + " " * volume * ": " * pages * add.period$ + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + " " * volume * ": " * pages * add.period$ + } + if$ + } + { + volumes empty$ not + { + bbl.comma * " " * pages * add.period$ + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + bbl.comma * " " * pages * add.period$ + } + if$ + } + if$ + } + { + add.period$ + volume empty$ not + { + volumes empty$ not + { + " " * bbl.volume capitalize * "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + } + { + " " * bbl.volume capitalize * "~" * volume * add.period$ + } + if$ + } + { + volumes empty$ not + { + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + skip$ + } + if$ + } + if$ + } + if$ + } + if$ } { - bbl.volume - capitalize - swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of separate.by.space * + "" } if$ - " \cite{" * crossref * "}" * -} - - - -FUNCTION {format.incoll.inproc.crossref} -{ - word.in " \cite{" * crossref * "}" * } -FUNCTION {format.org.or.pub} +INTEGERS { field.series.emph } +FUNCTION {incoll.fields.series.number} { - 't := - "" - address empty$ t empty$ and - 'skip$ + author empty$ not { - address "address" bibinfo.check * - t empty$ - 'skip$ + translator empty$ not + { #1 'field.series.emph := } { - address empty$ - 'skip$ - { ": " * } + edition empty$ not + { #1 } + { #0 } if$ - t * + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := } if$ } - if$ -} - - - -FUNCTION {format.publisher.address} -{ - publisher "publisher" bibinfo.check format.org.or.pub -} - - - -FUNCTION {format.organization.address} -{ - organization "organization" bibinfo.check format.org.or.pub -} - - - -FUNCTION {format.organization} -{ - organization "organization" bibinfo.check -} - - - -STRINGS {oldname} - -FUNCTION {name.or.dash} -{ - 's := - oldname empty$ - { s 'oldname := s } { - s oldname = - { "---{}---{}---" } - { s 'oldname := s } + compiler empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + editor empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } if$ } if$ -} - - - - - -% Functions to open, and close the bibitem - -INTEGERS { is.authorfa.exist } - -FUNCTION {begin.bibitem} -{ - #0 'is.authorfa.exist := - newline$ - is.language.persian + series empty$ not { - "\bibitem[{" write$ - label write$ - ")" make.full.names - duplicate$ short.list = - { pop$ } - { * } + field.series.emph #0 > + { + number empty$ not + { series emphasize " " * number * } + { series emphasize } + if$ + } + { + number empty$ not + { series " " * number * } + { series } + if$ + } if$ - "}]{" * write$ - cite$ write$ - "}" write$ - newline$ } { - "\begin{LTRbibitems}" write$ - "\resetlatinfont" write$ - newline$ - "\bibitem[{" write$ - label write$ - ")" make.full.names - duplicate$ short.list = - { pop$ } - { * } + number empty$ not + { bbl.number capitalize "~" * number * } + { "" } if$ - "}]{" * write$ - cite$ write$ - "}" write$ - newline$ } if$ - "" - before.all 'output.state := } -FUNCTION {end.bibitem} +FUNCTION {incoll.field.crossref} { - add.period$ write$ - newline$ - is.language.persian - 'skip$ - { - "\end{LTRbibitems}" write$ - newline$ - } - if$ + word.in " \cite{" * crossref * "}" * } +FUNCTION {article.field.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} -% Function to format entries -FUNCTION {article} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +FUNCTION {article.field.journal} { - begin.bibitem - author empty$ not + journal remove.dots emphasize +} + + + +FUNCTION {article.fields.jour.issn.vol.num.pp} +{ + journal empty$ not { - format.authors output.nonnull - name.or.dash - format.date "year" output.check - new.block format.title output - new.sentence format.comment output - new.sentence format.by output - crossref missing$ - { - new.sentence format.translatedby output - new.sentence format.translateyear output - new.sentence format.edby output - new.sentence format.article.jour.iss.vol.num.pp output - new.sentence format.note output - new.sentence format.issn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output - } - { - format.article.crossref output.nonnull - format.pages output - } + issue empty$ not + { issue bbl.comma * " " *} + { "" } if$ - } - { %%% if author is empty, proceeds with editor - editor empty$ not + article.field.journal * + volume empty$ not { - format.editors output.nonnull - name.or.dash - format.date "year" output.check - new.block format.title output - new.sentence format.comment output - new.sentence format.by output - crossref missing$ + number empty$ not { - new.sentence format.translatedby output - new.sentence format.translateyear output - new.sentence format.article.jour.iss.vol.num.pp output - new.sentence format.note output - new.sentence format.issn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output + pages empty$ not + { + " " * volume * "~" * + "(" * number * ")" * ": " * + pages * + } + { + " " * volume * bbl.comma * + " " * bbl.number * "~" * number * + } + if$ } { - format.article.crossref output.nonnull - format.pages output + pages empty$ not + { + " " * volume * ": " * + pages * + } + { + " " * volume * + } + if$ } if$ } - { %%% if author, and editor are empty, proceeds with translator - translator empty$ not + { + number empty$ not { - format.translators output.nonnull - name.or.dash - new.sentence format.translateyear output - new.block format.title output - new.sentence format.comment output - new.sentence format.by output - new.sentence format.date output - crossref missing$ + pages empty$ not { - new.sentence format.edby output - new.sentence format.article.jour.iss.vol.num.pp output - new.sentence format.note output - new.sentence format.issn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output + bbl.comma * " " * bbl.number * "~" * number * ": " * + pages * } { - format.article.crossref output.nonnull - format.pages output + bbl.comma * " " * bbl.number * "~" * number * } if$ } - { %%% if author, editor, and translator are empty, proceeds with key - key empty$ not - { - format.article.journal output.nonnull - name.or.dash - format.date "year" output.check - new.block format.title output - new.sentence format.comment output - new.sentence format.by output - crossref missing$ - { - new.sentence format.edby output - new.sentence format.article.iss.vol.num.pp output - new.sentence format.note output - new.sentence format.issn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output - } - { - format.article.crossref output.nonnull - format.pages output - } - if$ - } + { + pages empty$ not { - "author, translator, and key" output.check + bbl.comma * " " * pages * } + 'skip$ if$ } if$ } if$ } + { + "journal" output.check + } if$ - end.bibitem } -FUNCTION {book} -{ - begin.bibitem - author empty$ not +FUNCTION {article.fields.issn.vol.num.pp} +{ + journal empty$ not { - format.authors output.nonnull - name.or.dash - format.date "year" output.check - new.block format.title.in.books "title" output.check - crossref missing$ - { - new.sentence format.edition output - new.sentence format.impression output - new.sentence format.comment output - new.sentence format.by output - new.sentence format.translatedby output - new.sentence format.translateyear output - new.sentence format.book.volume.series.number output - new.sentence format.incollaborationwith output - new.sentence format.commentatedby output - new.sentence format.compiledby output - new.sentence format.edby output - new.sentence format.introby output - new.sentence format.prefaceby output - new.sentence format.afterwordby output - new.sentence format.publisher.address output - new.sentence format.note output - new.sentence format.isbn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output - } - { - new.block format.book.crossref output.nonnull - } + issue empty$ not + { issue bbl.comma * " " *} + { "" } if$ - } - { %%% if author field is empty, proceeds with compiler - compiler empty$ not + volume empty$ not { - format.compilers output.nonnull - name.or.dash - format.date "year" output.check - new.block format.title.in.books "title" output.check - crossref missing$ + number empty$ not { - new.sentence format.edition output - new.sentence format.impression output - new.sentence format.comment output - new.sentence format.by output - new.sentence format.translatedby output - new.sentence format.translateyear output - new.sentence format.book.volume.series.number output - new.sentence format.incollaborationwith output - new.sentence format.commentatedby output - new.sentence format.edby output - new.sentence format.introby output - new.sentence format.prefaceby output - new.sentence format.afterwordby output - new.sentence format.publisher.address output - new.sentence format.note output - new.sentence format.isbn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output + pages empty$ not + { + bbl.comma * " " * bbl.volume * "~" * volume * "~" * + "(" * number * ")" * ": " * + pages * + } + { + bbl.comma * " " * bbl.volume * "~" * volume * bbl.comma * + " " * bbl.number * "~" * number * + } + if$ } { - new.block format.book.crossref output.nonnull + pages empty$ not + { + bbl.comma * " " * bbl.volume * "~" * volume * ":~" * + pages * + } + { + bbl.comma * " " * bbl.volume * "~" * volume * + } + if$ } if$ } - { %%% if author, and compiler fields are empty, proceeds with editor - editor empty$ not + { + number empty$ not { - format.editors output.nonnull - name.or.dash - format.date "year" output.check - new.block format.title.in.books "title" output.check - crossref missing$ + pages empty$ not { - new.sentence format.edition output - new.sentence format.impression output - new.sentence format.comment output - new.sentence format.by output - new.sentence format.translatedby output - new.sentence format.translateyear output - new.sentence format.book.volume.series.number output - new.sentence format.incollaborationwith output - new.sentence format.commentatedby output - new.sentence format.introby output - new.sentence format.prefaceby output - new.sentence format.afterwordby output - new.sentence format.publisher.address output - new.sentence format.note output - new.sentence format.isbn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output + bbl.number * "~" * number * ": " * + pages * } { - new.block format.book.crossref output.nonnull + bbl.number * "~" * number * } if$ } - { %%% if author, compiler, and editor fields are empty, proceeds with translator - translator empty$ not + { + pages empty$ not { - format.translators output.nonnull - name.or.dash - new.sentence format.translateyear output - new.block format.title.in.books "title" output.check - new.sentence format.edition output - new.sentence format.impression output - new.sentence format.comment output - new.sentence format.by output - new.sentence format.date output - new.sentence format.book.volume.series.number output - new.sentence format.incollaborationwith output - new.sentence format.commentatedby output - new.sentence format.introby output - new.sentence format.prefaceby output - new.sentence format.afterwordby output - new.sentence format.publisher.address output - new.sentence format.note output - new.sentence format.isbn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output - } - { %%% if author, compiler, editor, and translator fields are empty, proceeds with key - key empty$ not - { - format.title.in.books "title" output.check - name.or.dash - format.date "year" output.check - crossref missing$ - { - new.sentence format.edition output - new.sentence format.impression output - new.sentence format.comment output - new.sentence format.by output - new.sentence format.book.volume.series.number output - new.sentence format.incollaborationwith output - new.sentence format.commentatedby output - new.sentence format.introby output - new.sentence format.prefaceby output - new.sentence format.afterwordby output - new.sentence format.publisher.address output - new.sentence format.note output - new.sentence format.isbn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output - } - { - new.block format.book.crossref output.nonnull - } - if$ - } - { - "author, compiler, editor, translator, and key" output.check - } - if$ + pages * } + 'skip$ if$ } if$ } if$ } + { + "journal" output.check + } if$ - end.bibitem -} - - - -FUNCTION {booklet} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE -{ - begin.bibitem - format.authors output - author format.key output - name.or.dash - format.date "year" output.check - date.block - format.title "title" output.check - new.block - howpublished "howpublished" bibinfo.check output - address "address" bibinfo.check output - format.isbn output - format.doi output - new.block - format.note output - format.eprint output - format.url output - end.bibitem } -FUNCTION {inbook} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +FUNCTION {proc.fields.org.publisher.address} { - begin.bibitem - author empty$ - { format.editors "author and editor" output.check - editor format.key output - name.or.dash - } - { format.authors output.nonnull - name.or.dash - crossref missing$ - { "author and editor" editor either.or.check } - 'skip$ - if$ - } - if$ - format.date "year" output.check - date.block - format.btitle "title" output.check - crossref missing$ + organization empty$ not { - format.bvolume output - format.chapter.pages output%"chapter and pages" output.check - new.block - format.number.series output - format.edition output - new.sentence - format.publisher.address output + publisher empty$ not + { + address empty$ not + { + organization add.period$ + address * ": " * publisher * + } + { + organization add.period$ + publisher * + } + if$ + } + { + address empty$ not + { + organization + bbl.comma * " " * address * + } + { + organization + } + if$ + } + if$ } { - format.chapter.pages "chapter and pages" output.check - new.block - format.book.crossref output.nonnull + publisher empty$ not + { + address empty$ not + { address ": " * publisher *} + { publisher } + if$ + } + { + address empty$ not + { address } + { "" } + if$ + } + if$ } if$ - crossref missing$ - { format.isbn output } - 'skip$ - if$ - format.doi output - new.block - format.note output - format.eprint output - format.url output - end.bibitem } -FUNCTION {incollection} -{ - begin.bibitem - author empty$ not +FUNCTION {inproc.fields.booktitle.volume.pages} +{ + booktitle empty$ not { - format.authors output.nonnull - name.or.dash - format.date "year" output.check - new.block format.title "title" output.check - new.sentence format.comment output - crossref missing$ - { - new.sentence format.by output - new.sentence format.incoll.chapter.booktitle.volume.pages output - new.sentence format.edition output - new.sentence format.impression output - new.sentence format.translatedby output - new.sentence format.translateyear output - new.sentence format.incoll.series.number output - new.sentence format.compiledby output - new.sentence format.edby output - new.sentence format.publisher.address output - new.sentence format.note output - new.sentence format.isbn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output - } - { - new.block format.incoll.inproc.crossref output.nonnull - } - if$ - } - { %%% if author field is empty, proceeds with compiler - compiler empty$ not + volume empty$ not { - format.compilers output.nonnull - name.or.dash - format.date "year" output.check - new.block format.title "title" output.check - new.sentence format.comment output - crossref missing$ + volumes empty$ not { - new.sentence format.by output - new.sentence format.incoll.chapter.booktitle.volume.pages output - new.sentence format.edition output - new.sentence format.impression output - new.sentence format.translatedby output - new.sentence format.translateyear output - new.sentence format.incoll.series.number output - new.sentence format.edby output - new.sentence format.publisher.address output - new.sentence format.note output - new.sentence format.isbn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output + pages empty$ not + { + field.booktitle " " * + volume * ": " * pages * add.period$ + " " * volumes * "~" * bbl.volumes * + } + { + field.booktitle add.period$ + " " * bbl.volume * "~" * volume * bbl.of * " " * volumes * + } + if$ } { - new.block format.incoll.inproc.crossref output.nonnull + pages empty$ not + { + field.booktitle " " * + volume * ": " * pages * + } + { + field.booktitle add.period$ + " " * bbl.volume * "~" * volume * + } + if$ } if$ } - { %%% if author, and compiler fields are empty, proceeds with editor - editor empty$ not + { + volumes empty$ not { - format.editors output.nonnull - name.or.dash - format.date "year" output.check - new.block format.title "title" output.check - new.sentence format.comment output - crossref missing$ + pages empty$ not { - new.sentence format.by output - new.sentence format.incoll.chapter.booktitle.volume.pages output - new.sentence format.edition output - new.sentence format.impression output - new.sentence format.translatedby output - new.sentence format.translateyear output - new.sentence format.incoll.series.number output - new.sentence format.publisher.address output - new.sentence format.note output - new.sentence format.isbn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output + field.booktitle " " * + bbl.comma * " " * pages * add.period$ + volumes * "~" * bbl.volumes } { - new.block format.incoll.inproc.crossref output.nonnull + field.booktitle " " * add.period$ + " " * volumes * "~" * bbl.volumes * } if$ } - { %%% if author, compiler, and editor fields are empty, proceeds with translator - translator empty$ not + { + pages empty$ not { - format.translators output.nonnull - name.or.dash - new.sentence format.translateyear output - new.block format.title "title" output.check - new.sentence format.comment output - new.sentence format.by output - new.sentence format.date output - new.sentence format.incoll.chapter.booktitle.volume.pages output - new.sentence format.edition output - new.sentence format.impression output - new.sentence format.incoll.series.number output - new.sentence format.compiledby output - new.sentence format.edby output - new.sentence format.publisher.address output - new.sentence format.note output - new.sentence format.isbn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output + field.booktitle " " * + bbl.comma * " " * pages * } - { %%% if author, compiler, editor, and translator fields are empty, proceeds with key - key empty$ not - { - format.title.in.books output - name.or.dash - format.date "year" output.check - new.sentence format.comment output - new.sentence format.by output - crossref missing$ - { - new.sentence format.incoll.chapter.booktitle.volume.pages output - new.sentence format.edition output - new.sentence format.impression output - new.sentence format.incoll.series.number output - new.sentence format.compiledby output - new.sentence format.edby output - new.sentence format.publisher.address output - new.sentence format.note output - new.sentence format.isbn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output - } - { - new.block format.incoll.inproc.crossref output.nonnull - } - if$ - } - { - "author, compiler, editor, translator, and key" output.check - } - if$ + { + field.booktitle } if$ } @@ -3260,417 +3211,386 @@ FUNCTION {incollection} } if$ } + { + "" + } if$ - end.bibitem } -FUNCTION {inproceedings} +FUNCTION {inproc.fields.series.number} { - begin.bibitem author empty$ not { - format.authors output.nonnull - name.or.dash - format.date "year" output.check - new.block format.title "title" output.check - new.sentence format.by output - crossref missing$ - { - new.sentence format.inproc.booktitle.volume.pages output - new.sentence format.edition output - new.sentence format.impression output - new.sentence format.translatedby output - new.sentence format.translateyear output - new.sentence format.inproc.series.number output - new.sentence format.compiledby output - new.sentence format.edby output - new.sentence format.publisher.address output - new.sentence format.note output - new.sentence format.isbn output - new.sentence format.issn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output - } + translator empty$ not + { #1 'field.series.emph := } { - format.incoll.inproc.crossref output.nonnull - format.pages output + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := } if$ } - { %%% if author field is empty, proceeds with translator - translator empty$ not + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + series empty$ not + { + field.series.emph #0 > { - format.translators output.nonnull - name.or.dash - new.sentence format.translateyear output - new.block format.title "title" output.check - new.sentence format.by output - new.sentence format.date output - crossref missing$ - { - new.sentence format.inproc.booktitle.volume.pages output - new.sentence format.edition output - new.sentence format.impression output - new.sentence format.inproc.series.number output - new.sentence format.compiledby output - new.sentence format.edby output - new.sentence format.publisher.address output - new.sentence format.note output - new.sentence format.isbn output - new.sentence format.issn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output - } - { - format.incoll.inproc.crossref output.nonnull - format.pages output - } + number empty$ not + { series emphasize " " * number * } + { series emphasize } if$ } - { %%% if author, and translator fields are empty, proceeds with key - key empty$ not - { - format.title.in.books output - name.or.dash - format.date "year" output.check - new.sentence format.by output - crossref missing$ - { - new.sentence format.inproc.booktitle.volume.pages output - new.sentence format.edition output - new.sentence format.impression output - new.sentence format.inproc.series.number output - new.sentence format.compiledby output - new.sentence format.edby output - new.sentence format.publisher.address output - new.sentence format.note output - new.sentence format.isbn output - new.sentence format.issn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output - } - { - format.incoll.inproc.crossref output.nonnull - format.pages output - } - if$ - } - { - "author, translator, and key" output.check - } + { + number empty$ not + { series " " * number * } + { series } if$ } if$ } + { + number empty$ not + { bbl.number capitalize "~" * number * } + { "" } + if$ + } if$ - end.bibitem } -FUNCTION {conference} +FUNCTION {inproc.field.crossref} { incoll.field.crossref } + + + +FUNCTION {conf.fields.series.number.pages} { - begin.bibitem - author empty$ not + series empty$ not { - format.authors output.nonnull - name.or.dash - format.date "year" output.check - new.block format.title "title" output.check - new.sentence format.by output - crossref missing$ - { - new.sentence format.translatedby output - new.sentence format.translateyear output - new.sentence format.conf.series.number.pages output - new.sentence format.edby output - new.sentence format.conf.org.publisher.address output - new.sentence format.note output - new.sentence format.issn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output - } - { - format.incoll.inproc.crossref output.nonnull - format.pages output - } - if$ - } - { %%% if author is empty, proceeds with translator - translator empty$ not + number empty$ not { - format.translators output.nonnull - name.or.dash - new.sentence format.translateyear output - new.block format.title "title" output.check - new.sentence format.by output - new.sentence format.date output - crossref missing$ + pages empty$ not { - new.sentence format.conf.series.number.pages output - new.sentence format.edby output - new.sentence format.conf.org.publisher.address output - new.sentence format.note output - new.sentence format.issn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output + series + bbl.comma * " " * bbl.number * "~" * number * + bbl.comma * " " * pages * } { - format.incoll.inproc.crossref output.nonnull - format.pages output + series + bbl.comma * " " * bbl.number * "~" * number * } if$ } - { %%% if author, and translator are empty, proceeds with key - key empty$ not - { - format.title.in.books output - name.or.dash - format.date "year" output.check - new.sentence format.by output - crossref missing$ - { - new.sentence format.conf.series.number.pages output - new.sentence format.edby output - new.sentence format.conf.org.publisher.address output - new.sentence format.note output - new.sentence format.issn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output - } - { - format.incoll.inproc.crossref output.nonnull - format.pages output - } - if$ - } + { + pages empty$ not { - "author, translator, and key" output.check + series + bbl.comma * " " * pages * } + { series } if$ } if$ } + { "" } if$ - end.bibitem - } -FUNCTION {manual} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE -{ - begin.bibitem - format.authors output - author format.key output - name.or.dash - format.date "year" output.check - date.block - format.btitle "title" output.check - organization address new.block.checkb - organization "organization" bibinfo.check output - address "address" bibinfo.check output - format.edition output - format.doi output - new.block - format.note output - format.eprint output - format.url output - end.bibitem -} +FUNCTION {conf.fields.org.publisher.address} { proc.fields.org.publisher.address } -FUNCTION {format.misc.title} +FUNCTION {thesis.field.type} { - title empty$ not - { title } - 'skip$ + type duplicate$ empty$ + 'pop$ + { + swap$ pop$ + "t" change.case$ "type" bibinfo.check + } if$ } -FUNCTION {format.howpublished} +FUNCTION {thesis.fields.school.type.address} { - howpublished -} - - - -FUNCTION {misc} -{ - begin.bibitem - author empty$ not + type empty$ { - format.authors output.nonnull - name.or.dash - format.date "year" output.check - new.block format.misc.title output - new.sentence format.by output - new.sentence format.howpublished output - new.sentence format.publisher.address output - new.sentence format.note output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output + type$ "mastersthesis" = + { bbl.mthesis "t" change.case$ } + { + type$ "phdthesis" = + { bbl.phdthesis "t" change.case$ } + { bbl.thesis "t" change.case$ } + if$ + } + if$ + school empty$ not + { + address empty$ not + { bbl.comma * " " * school * bbl.comma * " " * address * } + { bbl.comma * " " * school * } + if$ + } + { + address empty$ not + { bbl.comma * address * } + { add.period$ } + if$ + } + if$ } - { %%% if author is empty, proceeds with key - key empty$ not + { + type "~" = { - format.title.in.books output - name.or.dash - format.date "year" output.check - new.sentence format.by output - new.sentence format.howpublished output - new.sentence format.publisher.address output - new.sentence format.note output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output + school empty$ not + { + address empty$ not + { school bbl.comma * " " * address * } + { school } + if$ + } + { + address empty$ not + { address } + { "" } + if$ + } + if$ + } + { + type + school empty$ not + { + address empty$ not + { bbl.comma * " " * school * bbl.comma * " " * address * } + { bbl.comma * " " * school * } + if$ + } + { + address empty$ not + { bbl.comma * address * } + { add.period$ } + if$ + } + if$ } - { "author, and key" output.check } if$ } if$ - end.bibitem } -FUNCTION {thesis} +FUNCTION {unpub.field.title} { - begin.bibitem - author empty$ not - { - format.authors output.nonnull - name.or.dash - format.date "year" output.check - new.block format.title output - new.sentence format.comment output - new.sentence format.thesis.school.type.address output - new.sentence format.note output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output - } - { %%% if author is empty, proceeds with key - key empty$ not - { - format.title.in.books output - name.or.dash - format.date "year" output.check - new.sentence format.comment output - new.sentence format.note output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output - } - { "author, and key" output.check } - if$ - } + title empty$ not + { title bbl.dquote } + 'skip$ if$ - end.bibitem } -FUNCTION {mastersthesis} { thesis } +FUNCTION {misc.field.title} +{ + title empty$ not + { title } + 'skip$ + if$ +} -FUNCTION {phdthesis} { thesis } +% Functions to format entries based on type (compatible entries) -FUNCTION {proceedings} -{ +FUNCTION {book} +{ begin.bibitem - editor empty$ not + author empty$ not { - format.editors output.nonnull + field.author output.nonnull name.or.dash - format.date "year" output.check - new.block format.title.in.books "title" output.check - new.sentence format.edition output - new.sentence format.impression output - new.sentence format.translatedby output - new.sentence format.translateyear output - new.sentence format.book.volume.series.number output - new.sentence format.compiledby output - new.sentence format.proc.org.publisher.address output - new.sentence format.note output - new.sentence format.isbn output - new.sentence format.issn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ } - { %%% if editor field is empty, proceeds with compiler + { %%% if author field is empty, proceeds with compiler compiler empty$ not { - format.compilers output.nonnull + field.compiler output.nonnull name.or.dash - format.date "year" output.check - new.block format.title.in.books "title" output.check - new.sentence format.edition output - new.sentence format.impression output - new.sentence format.translatedby output - new.sentence format.translateyear output - new.sentence format.book.volume.series.number output - new.sentence format.proc.org.publisher.address output - new.sentence format.note output - new.sentence format.isbn output - new.sentence format.issn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.editor.editedby output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ } - { %%% if editor, and compiler fields are empty, proceeds with translator - translator empty$ not + { %%% if author, and compiler fields are empty, proceeds with editor + editor empty$ not { - format.translators output.nonnull + field.editor output.nonnull name.or.dash - new.sentence format.translateyear output - new.block format.title.in.books "title" output.check - new.sentence format.edition output - new.sentence format.impression output - new.sentence format.book.volume.series.number output - new.sentence format.proc.org.publisher.address output - new.sentence format.note output - new.sentence format.isbn output - new.sentence format.issn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ } - { - key empty$ not + { %%% if author, compiler, and editor fields are empty, proceeds with translator + translator empty$ not { - format.title.in.books "title" output.check + field.translator output.nonnull name.or.dash - format.date "year" output.check - new.block format.edition output - new.sentence format.impression output - new.sentence format.book.volume.series.number output - new.sentence format.proc.org.publisher.address output - new.sentence format.note output - new.sentence format.isbn output - new.sentence format.issn output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output + new.sentence field.translateyear extra.label * output + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output } - { - "editor, compiler, translator, and key" output.check + { %%% if author, compiler, editor, and translator fields are empty, proceeds with key + key empty$ not + { + field.title.emph "title" output.check + name.or.dash + field.year extra.label * "year" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { + "author, compiler, editor, translator, and key" output.check + } + if$ } if$ } @@ -3684,92 +3604,156 @@ FUNCTION {proceedings} -FUNCTION {techreport} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE -{ - begin.bibitem - format.authors "author" output.check - author format.key output - name.or.dash - format.date "year" output.check - date.block - format.btitle - "title" output.check - new.block - format.tr.number output.nonnull - institution "institution" bibinfo.warn output - address "address" bibinfo.check output - format.doi output - new.block - format.note output - format.eprint output - format.url output - end.bibitem -} - - - -FUNCTION {format.unpub.title} -{ - title empty$ not - { title bbl.dquote } - 'skip$ - if$ -} - - - -FUNCTION {unpublished} -{ +FUNCTION {incollection} +{ begin.bibitem author empty$ not { - format.authors output.nonnull + field.author output.nonnull name.or.dash - format.date "year" output.check - new.block format.unpub.title output - new.sentence format.comment output - new.sentence format.by output - new.sentence format.translatedby output - new.sentence format.translateyear output - new.sentence format.howpublished output - new.sentence format.note output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + crossref missing$ + { + new.sentence field.by output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence incoll.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ } - { %%% if author is empty, proceeds with translator - translator empty$ not + { %%% if author field is empty, proceeds with compiler + compiler empty$ not { - format.translators output.nonnull + field.compiler output.nonnull name.or.dash - new.sentence format.translateyear output - new.block format.unpub.title output - new.sentence format.comment output - new.sentence format.by output - new.sentence format.date output - new.sentence format.translatedby output - new.sentence format.translateyear output - new.sentence format.howpublished output - new.sentence format.note output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + crossref missing$ + { + new.sentence field.by output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence incoll.fields.series.number output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ } - { %%% if author, and translator are empty, proceeds with key - key empty$ not + { %%% if author, and compiler fields are empty, proceeds with editor + editor empty$ not { - format.title.in.books output + field.editor output.nonnull name.or.dash - format.date "year" output.check - new.sentence format.comment output - new.sentence format.by output - new.sentence format.howpublished output - new.sentence format.note output - new.sentence format.doi output - new.sentence format.urldate output - new.sentence format.url output + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + crossref missing$ + { + new.sentence field.by output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence incoll.fields.series.number output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { %%% if author, compiler, and editor fields are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence incoll.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author, compiler, editor, and translator fields are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence incoll.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { + "author, compiler, editor, translator, and key" output.check + } + if$ + } + if$ } - { "author, translator, and key" output.check } if$ } if$ @@ -3780,441 +3764,748 @@ FUNCTION {unpublished} -FUNCTION {default.type} { misc } - - - - - - - - - - - - - - - - - - - - -% Reading bibliography database (.bib) file - -READ - - - -FUNCTION {sortify} -{ - purify$ - "l" change.case$ -} - - - -% Length of the label name of the entry - -INTEGERS { len } - -FUNCTION {chop.word} -{ - 's := - 'len := - s #1 len substring$ = - { s len #1 + global.max$ substring$ } - 's - if$ -} - - - -% Function to create the label name of the entry - -FUNCTION {label.and} +FUNCTION {article} { - is.language.persian - { "و" } + begin.bibitem + author empty$ not { - authorfa missing$ - { "and" } - { "و" } + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence field.editor.editedby output + new.sentence article.fields.jour.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author is empty, proceeds with editor + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence article.fields.jour.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, and editor are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + crossref missing$ + { + new.sentence field.editor.editedby output + new.sentence article.fields.jour.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, editor, and translator are empty, proceeds with key + key empty$ not + { + article.field.journal output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence field.editor.editedby output + new.sentence article.fields.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { + "author, translator, and key" output.check + } + if$ + } + if$ + } if$ } if$ + end.bibitem } -FUNCTION {label.etal} + + +FUNCTION {proceedings} { - is.language.persian - { "و~همکاران" } + begin.bibitem + editor empty$ not { - authorfa missing$ - { "et~al." } - { "و~همکاران" } + field.editor output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.compiler.compiledby output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if editor field is empty, proceeds with compiler + compiler empty$ not + { + field.compiler output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if editor, and compiler fields are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence book.fields.volume.series.number output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + key empty$ not + { + field.title.emph "title" output.check + name.or.dash + field.year extra.label * "year" output.check + new.block field.edition output + new.sentence field.impression output + new.sentence book.fields.volume.series.number output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + "editor, compiler, translator, and key" output.check + } + if$ + } + if$ + } if$ } if$ + end.bibitem } -FUNCTION {format.lab.names} +FUNCTION {inproceedings} { - 's := - authorfa empty$ - { - #0 'is.authorfa.exist := - } - { - authorfa 's := - #1 'is.authorfa.exist := - } - if$ - "" 't := - s #1 "{vv~}{ll}" format.name$ - s num.names$ #3 > + begin.bibitem + author empty$ not { - " " * label.etal * + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence inproc.fields.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence inproc.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ } - { - s num.names$ #2 < - 'skip$ + { %%% if author field is empty, proceeds with translator + translator empty$ not { - s num.names$ #3 < + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.dqoute "title" output.check + new.sentence field.by output + new.sentence field.year output + crossref missing$ { - s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = - { - " " * label.etal * - } - { - bbl.comma * " " * label.and separate.by.space * s #2 "{vv~}{ll}" format.name$ * - } - if$ + new.sentence inproc.fields.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence inproc.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output } { - s #3 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, and translator fields are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.by output + crossref missing$ { - " " * label.etal * + new.sentence inproc.fields.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence inproc.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output } { - bbl.comma * " " * s #2 "{vv~}{ll}" format.name$ * - bbl.comma * " " * label.and separate.by.space * s #3 "{vv~}{ll}" format.name$ * + inproc.field.crossref output.nonnull + field.pages output } if$ } + { + "author, translator, and key" output.check + } if$ } if$ } if$ - #0 'is.authorfa.exist := + end.bibitem } -FUNCTION {author.key.label} +FUNCTION {conference} { - author empty$ + begin.bibitem + author empty$ not { - key empty$ - { cite$ #1 #3 substring$ } - 'key + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence conf.fields.series.number.pages output + new.sentence field.editor.editedby output + new.sentence conf.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } if$ } - { author format.lab.names } - if$ -} - -FUNCTION {author.editor.key.label} -{ - author empty$ - { - editor empty$ + { %%% if author is empty, proceeds with translator + translator empty$ not { - key empty$ - { cite$ #1 #3 substring$ } - 'key + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.dqoute "title" output.check + new.sentence field.by output + new.sentence field.year output + crossref missing$ + { + new.sentence conf.fields.series.number.pages output + new.sentence field.editor.editedby output + new.sentence conf.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, and translator are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence conf.fields.series.number.pages output + new.sentence field.editor.editedby output + new.sentence conf.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { + "author, translator, and key" output.check + } if$ } - { editor format.lab.names } if$ } - { author format.lab.names } if$ + end.bibitem } -FUNCTION {editor.key.label} +FUNCTION {thesis} { - editor empty$ + begin.bibitem + author empty$ not { - key empty$ - { cite$ #1 #3 substring$ } - 'key - if$ + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence thesis.fields.school.type.address output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output } - { - editor format.lab.names + { %%% if author is empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.comment output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { "author, and key" output.check } + if$ } if$ + end.bibitem } -FUNCTION {article.creator.label.order} +FUNCTION {mastersthesis} { thesis } + + + +FUNCTION {phdthesis} { thesis } + + + +FUNCTION {unpublished} { + begin.bibitem author empty$ not - { author format.lab.names } { - editor empty$ not - { editor format.lab.names } + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block unpub.field.title output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence field.howpublished output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author is empty, proceeds with translator + translator empty$ not { - translator empty$ not - { translator format.lab.names } + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block unpub.field.title output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence field.howpublished output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author, and translator are empty, proceeds with key + key empty$ not { - key empty$ not - 'key - { cite$ #1 #3 substring$ } - if$ + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.comment output + new.sentence field.by output + new.sentence field.howpublished output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output } + { "author, translator, and key" output.check } if$ } if$ } if$ + end.bibitem } -FUNCTION {book.creator.label.order} +FUNCTION {misc} { + begin.bibitem author empty$ not - { author format.lab.names } { - compiler empty$ not - { compiler format.lab.names } + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block misc.field.title output + new.sentence field.by output + new.sentence field.howpublished output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author is empty, proceeds with key + key empty$ not { - editor empty$ not - { editor format.lab.names } - { - translator empty$ not - { translator format.lab.names } - { - key empty$ not - 'key - { cite$ #1 #3 substring$ } - if$ - } - if$ - } - if$ + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.by output + new.sentence field.howpublished output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output } + { "author, and key" output.check } if$ } if$ + end.bibitem } -FUNCTION {incoll.creator.label.order} + + +% Functions to format entries based on type (incompatible entries) + +FUNCTION {booklet} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE { - author empty$ not - { author format.lab.names } - { - compiler empty$ not - { compiler format.lab.names } - { - editor empty$ not - { editor format.lab.names } - { - translator empty$ not - { translator format.lab.names } - { - key empty$ not - 'key - { cite$ #1 #3 substring$ } - if$ - } - if$ - } - if$ - } + begin.bibitem + field.author output + author format.key output + name.or.dash + field.year extra.label * "year" output.check + date.block + field.title "title" output.check + new.block + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + field.isbn output + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + +FUNCTION {inbook} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + author empty$ + { field.editor "author and editor" output.check + editor format.key output + name.or.dash + } + { field.author output.nonnull + name.or.dash + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ if$ } if$ + field.year extra.label * "year" output.check + date.block + field.btitle "title" output.check + crossref missing$ + { + field.bvolume output + fields.chapter.pages output%"chapter and pages" output.check + new.block + fields.number.series output + field.edition output + new.sentence + fields.publisher.address output + } + { + fields.chapter.pages "chapter and pages" output.check + new.block + book.field.crossref output.nonnull + } + if$ + crossref missing$ + { field.isbn output } + 'skip$ + if$ + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem } -FUNCTION {proc.creator.label.order} +FUNCTION {manual} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE { - editor empty$ not - { editor format.lab.names } - { - compiler empty$ not - { compiler format.lab.names } - { - translator empty$ not - { translator format.lab.names } - { - key empty$ not - 'key - { cite$ #1 #3 substring$ } - if$ - } - if$ - } - if$ - } - if$ + begin.bibitem + field.author output + author format.key output + name.or.dash + field.year extra.label * "year" output.check + date.block + field.btitle "title" output.check + organization address new.block.checkb + organization "organization" bibinfo.check output + address "address" bibinfo.check output + field.edition output + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem } -FUNCTION {conf.creator.label.order} +FUNCTION {techreport} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE { - author empty$ not - { author format.lab.names } - { - translator empty$ not - { translator format.lab.names } - { - key empty$ not - 'key - { cite$ #1 #3 substring$ } - if$ - } - if$ - } - if$ + begin.bibitem + field.author "author" output.check + author format.key output + name.or.dash + field.year extra.label * "year" output.check + date.block + field.btitle + "title" output.check + new.block + fields.tr.number output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem } -FUNCTION {inproc.creator.label.order} -{ - author empty$ not - { author format.lab.names } - { - translator empty$ not - { translator format.lab.names } - { - key empty$ not - 'key - { cite$ #1 #3 substring$ } - if$ - } - if$ - } - if$ -} +% Function to format entry if the type is not recognized + +FUNCTION {default.type} { misc } + + + + + + + + + + + + + + + + + + + + +% Reading bibliography database (.bib) file + +READ + + +% Function to generate a string that is suitable for sorting purposes -FUNCTION {calc.short.authors} +FUNCTION {sortify} { - type$ "article" = - 'article.creator.label.order - { - type$ "book" = - 'book.creator.label.order - { - type$ "incollection" = - 'incoll.creator.label.order - { - type$ "proceedings" = - 'proc.creator.label.order - { - type$ "conference" = - 'conf.creator.label.order - { - type$ "inproceedings" = - 'inproc.creator.label.order - { - type$ "inbook" = - 'author.editor.key.label - 'author.key.label - if$ - } - if$ - } - if$ - } - if$ - } - if$ - } - if$ - } - if$ - 'short.list := + purify$ + "l" change.case$ } -FUNCTION {calc.label} +% Length of the short name label of the entry + +INTEGERS { len } + +FUNCTION {chop.word} { - calc.short.authors - short.list - "(" - * - author empty$ not - { - year duplicate$ empty$ - { pop$ "" } - 'skip$ - if$ - } - { - compiler empty$ not - { - year duplicate$ empty$ - { pop$ "" } - 'skip$ - if$ - } - { - editor empty$ not - { - year duplicate$ empty$ - { pop$ "" } - 'skip$ - if$ - } - { - translator empty$ not - { - translateyear duplicate$ empty$ - { pop$ "" } - 'skip$ - if$ - } - { - year duplicate$ empty$ - { pop$ "" } - 'skip$ - if$ - } - if$ - } - if$ - } - if$ - } + 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's if$ - * - 'label := } -% Functions for sort +% Functions for sorting purposes FUNCTION {sort.format.names} { @@ -4253,7 +4544,7 @@ FUNCTION {sort.format.names} -FUNCTION {sort.format.title} +FUNCTION {sort.field.title} { 't := "A " #2 @@ -4331,30 +4622,37 @@ FUNCTION {editor.sort} -FUNCTION {article.creator.sort.order} +FUNCTION {book.sort} { author empty$ not { author sort.format.names } { - editor empty$ not + compiler empty$ not { - editor sort.format.names + compiler sort.format.names } { - translator empty$ not + editor empty$ not { - translator sort.format.names + editor sort.format.names } { - key empty$ not + translator empty$ not { - key sortify + translator sort.format.names } { - "to sort, need author, editor, translator, or key in " cite$ * warning$ - "" + key empty$ not + { + key sortify + } + { + "to sort, need author, compiler, editor, translator, or key in " cite$ * warning$ + "" + } + if$ } if$ } @@ -4367,7 +4665,7 @@ FUNCTION {article.creator.sort.order} -FUNCTION {book.creator.sort.order} +FUNCTION {incoll.sort} { author empty$ not { @@ -4410,37 +4708,30 @@ FUNCTION {book.creator.sort.order} -FUNCTION {incoll.creator.sort.order} +FUNCTION {article.sort} { author empty$ not { author sort.format.names } { - compiler empty$ not + editor empty$ not { - compiler sort.format.names + editor sort.format.names } { - editor empty$ not + translator empty$ not { - editor sort.format.names + translator sort.format.names } { - translator empty$ not + key empty$ not { - translator sort.format.names + key sortify } { - key empty$ not - { - key sortify - } - { - "to sort, need author, compiler, editor, translator, or key in " cite$ * warning$ - "" - } - if$ + "to sort, need author, editor, translator, or key in " cite$ * warning$ + "" } if$ } @@ -4453,7 +4744,7 @@ FUNCTION {incoll.creator.sort.order} -FUNCTION {proc.creator.sort.order} +FUNCTION {proc.sort} { editor empty$ not { editor sort.format.names } @@ -4478,7 +4769,7 @@ FUNCTION {proc.creator.sort.order} -FUNCTION {conf.creator.sort.order} +FUNCTION {inproc.sort} { author empty$ not { author sort.format.names } @@ -4498,7 +4789,7 @@ FUNCTION {conf.creator.sort.order} -FUNCTION {inproc.creator.sort.order} +FUNCTION {conf.sort} { author empty$ not { author sort.format.names } @@ -4524,23 +4815,23 @@ FUNCTION {presort} label sortify " " * - type$ "article" = - 'article.creator.sort.order + type$ "book" = + 'book.sort { - type$ "book" = - 'book.creator.sort.order + type$ "incollection" = + 'incoll.sort { - type$ "incollection" = - 'incoll.creator.sort.order + type$ "article" = + 'article.sort { type$ "proceedings" = - 'proc.creator.sort.order + 'proc.sort { - type$ "conference" = - 'conf.creator.sort.order + type$ "inproceedings" = + 'inproc.sort { - type$ "inproceedings" = - 'inproc.creator.sort.order + type$ "conference" = + 'conf.sort { type$ "inbook" = 'author.editor.sort @@ -4564,8 +4855,7 @@ FUNCTION {presort} * " " * - title field.or.null - sort.format.title + title field.or.null sort.field.title * #1 entry.max$ substring$ 'sort.key$ := @@ -4573,10 +4863,16 @@ FUNCTION {presort} + + +% Sort process + ITERATE {presort} SORT + + STRINGS { last.label next.extra } INTEGERS { last.extra.num last.extra.num.extended last.extra.num.blank number.label } @@ -4648,49 +4944,78 @@ FUNCTION {reverse.pass} } + EXECUTE {initialize.extra.label.stuff} ITERATE {forward.pass} REVERSE {reverse.pass} + + FUNCTION {bib.sort.order} { sort.label " " * - year field.or.null sortify + translateyear empty$ + { year field.or.null sortify } + { + author empty$ not + { year field.or.null sortify } + { + compiler empty$ not + { year field.or.null sortify } + { + editor empty$ not + { year field.or.null sortify } + { + translator empty$ not + { translateyear field.or.null sortify } + { year field.or.null sortify } + if$ + } + if$ + } + if$ + } + if$ + } + if$ * " " * - title field.or.null - sort.format.title + title field.or.null sort.field.title * #1 entry.max$ substring$ 'sort.key$ := } + ITERATE {bib.sort.order} SORT + + +% Functions to create bibliography FUNCTION {begin.bib} { preamble$ empty$ 'skip$ { preamble$ write$ newline$ } if$ - "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" write$ + "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" write$ newline$ - "% generated by iran.bst," write$ + "% Generated by `iran.bst`." write$ newline$ - "% this bibliography style is part of the `iran-bib` package." write$ + "% This bibliography style is part of the `iran-bibtex` package." write$ newline$ - "% copyright (c) 2023 Farshad Rasuli " write$ + "% Copyright (c) 2023-2024 Farshad Rasuli " write$ newline$ - "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" write$ + "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" write$ newline$ newline$ newline$ @@ -4699,15 +5024,15 @@ FUNCTION {begin.bib} } -EXECUTE {begin.bib} +EXECUTE {begin.bib} EXECUTE {init.state.consts} - ITERATE {call.type$} + FUNCTION {end.bib} { newline$ @@ -4716,6 +5041,7 @@ FUNCTION {end.bib} } + EXECUTE {end.bib} diff --git a/biblio/bibtex/contrib/iran-bibtex/iranlatin-unsrt.bst b/biblio/bibtex/contrib/iran-bibtex/iranlatin-unsrt.bst new file mode 100644 index 0000000000..21624b4755 --- /dev/null +++ b/biblio/bibtex/contrib/iran-bibtex/iranlatin-unsrt.bst @@ -0,0 +1,4486 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% +%% This file is “iranlatin-unsrt.bst”, v0.1.0 (2024/01/8) +%% created by modifying “iranlatin.bst” file in accordance with the +%% “Iran Manual of Style Citation Guide” (1st edn., 2016) to support +%% English/Latin only. +%% +%% +%% +%% Copyright (c) 2023-2024 Farshad Rasuli +%% +%% This file can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License version 1.3c, or any later version. +%% The latest version of the License is at: latex-project.org/lppl.txt +%% +%% This BibTeX bibliography style (bst) file is part of +%% the “iran-bibtex” package. +%% +%% CTAN catalog: https://ctan.org/pkg/iran-bibtex +%% CTAN archive: https://ctan.org/tex-archive/biblio/bibtex/contrib/iran-bibtex +%% Repository: https://github.com/farshadrasuli/iran-bibtex +%% Bug tracker: https://github.com/farshadrasuli/iran-bibtex/issues +%% +%% +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +%%----------------------------------------------------------------------------- +%% This bibliography style file is intended for texts in ENGLISH. +%% This is a numbered citation style bibliography. This style file is +%% based on natbib.sty package by Patrick W. Daly. +%% The form of the \bibitem entries is +%% \bibitem[Jones et al.(1990)]{key}... +%% \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... +%% The essential feature is that the label (the part in brackets) consists +%% of the author names, as they can appear in the citation, with the year +%% in parentheses following. There must be no space before the opening +%% parenthesis! +%% +%% The \cite command functions as follows (\cite is equal to \citep command): +%% \citep{key} => [1] +%% \citep*{key} => [1] +%% \citep[chap. 2]{key} => [1, chap. 2] +%% \citep[e.g.][]{key} => [e.g. 1] +%% \citep[e.g.][p. 32]{key} => [e.g. 1, p. 32] +%% \citet{key} => Jones et al. [1] +%% \citet*{key} => Jones, Baker, and Smith [1] +%% \citeauthor{key} => Jones et al. +%% \citeauthor*{key} => Jones, Baker, and Smith +%% \citeyear{key} => 1990 +%%----------------------------------------------------------------------------- + + + +ENTRY +{ + address + afterword % the added field + archive + author + booktitle + by % the added field + chapter + collaboration + comment % the added field + commentator % the added field + compiler % the added field + doi + edition + editor + eid + eprint + foreword % the added field + howpublished + impression % the added field + institution + introduction % the added field + isbn + issn + issue % the added field + journal + key + language + month + note + number + numpages + organization + pages + preface % the added field + publisher + school + series + title + translator % the added field + translateyear % the added field + type + url + urldate % the added field + volume + volumes % the added field + year +} +{} +{ + label + sort.label + short.list +} + + + + + +% Logical operators + +FUNCTION {not} +{ + { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ + 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ + { pop$ #1 } + 'skip$ + if$ +} + + + + + +% Here are the language-specific definitions for explicit words. +% Each function has a name bbl.xxx where xxx is the English word. + +FUNCTION {bbl.afterwordby} +{ "afterword by" } + +FUNCTION {bbl.and} +{ "and" } + +FUNCTION {bbl.andothers} +{ "and~others" } + +FUNCTION {bbl.by} +{ "by" } + +FUNCTION {bbl.chapter} +{ "chapter" } + +FUNCTION {bbl.comma} +{ "," } + +FUNCTION {bbl.commentator} +{ "comm." } + +FUNCTION {bbl.commentatedby} +{ "commentated by" } + +FUNCTION {bbl.compiler} +{ "comp." } + +FUNCTION {bbl.compilers} +{ "comps." } + +FUNCTION {bbl.compiledby} +{ "compiled by" } + +FUNCTION {bbl.doi} +{ "doi" } + +FUNCTION {bbl.dquote} +{ "\enquote{" swap$ * add.period$ "}" * } + +FUNCTION {bbl.editor} +{ "ed." } + +FUNCTION {bbl.editors} +{ "eds." } + +FUNCTION {bbl.editedby} +{ "edited by" } + +FUNCTION {bbl.edition} +{ "edn." } + +FUNCTION {bbl.eidpp} +{ "pages" } + +FUNCTION {bbl.etal} +{ "et~al." } + +FUNCTION {bbl.forewordby} +{ "forword by" } + +FUNCTION {bbl.impression} +{ "imp." } + +FUNCTION {bbl.in} +{ "in" } + +FUNCTION {bbl.incollaborationwith} +{ "in collaboration with" } + +FUNCTION {bbl.introby} +{ "introduction by" } + +FUNCTION {bbl.isbn} +{ "isbn" } + +FUNCTION {bbl.issn} +{ "issn" } + +FUNCTION {bbl.mthesis} +{ "Master's thesis" } + +FUNCTION {bbl.nr} +{ "no." } + +FUNCTION {bbl.number} +{ "no." } + +FUNCTION {bbl.of} +{ "of" } + +FUNCTION {bbl.page} +{ "p." } + +FUNCTION {bbl.pages} +{ "pp." } + +FUNCTION {bbl.prefaceby} +{ "preface by" } + +FUNCTION {bbl.phdthesis} +{ "PhD dissertation" } + +FUNCTION {bbl.retrieved} +{ "retrieved" } + +FUNCTION {bbl.semicolon} +{ ";" } + +FUNCTION {bbl.techrep} +{ "tech. rep." } + +FUNCTION {bbl.thesis} +{ "Thesis" } + +FUNCTION {bbl.translator} +{ "trans." } + +FUNCTION {bbl.translators} +{ "trans." } + +FUNCTION {bbl.translatedby} +{ "translated by" } + +FUNCTION {bbl.url} +{ "url" } + +FUNCTION {bbl.volume} +{ "vol." } + +FUNCTION {bbl.volumes} +{ "vols." } + + + + + +% Macro for abbreviation of month + +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"} + + + + + +% Functions to declare position + +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 := +} + + + +% Functions to print output + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ + 's := + output.state mid.sentence = + { bbl.comma * " " * write$ } + { + output.state after.block = + { + add.period$ write$ + newline$ + "\newblock " write$ + } + { + output.state before.all = + 'write$ + { add.period$ write$ " " 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$ +} + + + + + +% Functions to check and warn bibinfo + +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 {either.or.check} +{ + empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + + + + + +% Functions to control the print format of entries + +FUNCTION {new.block} +{ + output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + + + +FUNCTION {new.block.checkb} +{ + empty$ + swap$ empty$ + and + 'skip$ + 'new.block + 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 {capitalize} +{ "u" change.case$ "t" change.case$ } + + + +FUNCTION {date.block} +{ + new.block +} + + + +FUNCTION {emphasize} +{ + duplicate$ empty$ + { pop$ "" } + { "{\it " swap$ * "}" * } + if$ +} + + + +FUNCTION {field.or.null} +{ + duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + + + +FUNCTION {no.blank.or.punct} +{ + "\hspace{0pt}" * before.all 'output.state := +} + + + +FUNCTION {non.stop} +{ + duplicate$ + "}" * add.period$ + #-1 #1 substring$ "." = +} + + + +STRINGS {z} + +FUNCTION {remove.dots} +{ + 'z := + "" + { + z empty$ not + } + { + z #1 #2 substring$ + duplicate$ "\." = + { + z #3 global.max$ substring$ 'z := * + } + { + pop$ + z #1 #1 substring$ + z #2 global.max$ substring$ 'z := + duplicate$ "." = + 'pop$ + { * } + if$ + } + if$ + } + while$ +} + + + +FUNCTION {separate.by.space} +{ " " swap$ * " " * } + + + +FUNCTION {space.word} +{ " " swap$ * " " * } + + + +FUNCTION {tie.or.space.prefix} +{ + duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ +} + + + +FUNCTION {word.in} +{ + output.state mid.sentence = + { bbl.in " " * } + { bbl.in capitalize " " * } + if$ +} + + + + + +% Functions to format names + +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 + duplicate$ #1 > + { "{ff~}{vv~}{ll}{, jj}" } + { "{vv~}{ll}{, ff}{, jj}" } + if$ + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + namesleft #1 > + { + bbl.comma * " " * t * + } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + bbl.comma * + t "others" = + { + " " * bbl.etal * + } + { + bbl.and + separate.by.space * 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 + "{ff~}{vv~}{ll}{, jj}" + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + namesleft #1 > + { + bbl.comma * " " * t * + } + { + s nameptr "{ll}" format.name$ + duplicate$ "others" = + { 't := } + { pop$ } + if$ + bbl.comma * + t "others" = + { + + " " * bbl.etal * + } + { + bbl.and + separate.by.space * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } + if$ +} + + + +FUNCTION {format.key} +{ + empty$ + { key field.or.null } + { "" } + if$ +} + + + +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$ +} + + + +STRINGS {oldname} + +FUNCTION {name.or.dash} +{ + 's := + oldname empty$ + { s 'oldname := s } + { + s oldname = + { "---{}---{}---" } + { s 'oldname := s } + if$ + } + if$ +} + + + + + +% Functions to create the short name label for the entry + +FUNCTION {format.short.label.names} +{ + 's := + "" 't := + s #1 "{vv~}{ll}" format.name$ + s num.names$ #3 > + { + " " * bbl.etal * + } + { + s num.names$ #2 < + 'skip$ + { + s num.names$ #3 < + { + s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + " " * bbl.etal * + } + { + bbl.comma * bbl.and separate.by.space * s #2 "{vv~}{ll}" format.name$ * + } + if$ + } + { + s #3 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + " " * bbl.etal * + } + { + bbl.comma * " " * s #2 "{vv~}{ll}" format.name$ * + bbl.comma * bbl.and separate.by.space * s #3 "{vv~}{ll}" format.name$ * + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {author.key.short.label.names} +{ + author empty$ not + { author format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ +} + + + +FUNCTION {author.editor.key.short.label.names} +{ + author empty$ not + { author format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {editor.key.short.label.names} +{ + editor empty$ not + { editor format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ +} + + + +FUNCTION {book.short.label.names} +{ + author empty$ not + { author format.short.label.names } + { + compiler empty$ not + { compiler format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.short.label.names} +{ + author empty$ not + { author format.short.label.names } + { + compiler empty$ not + { compiler format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {article.short.label.names} +{ + author empty$ not + { author format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {proc.short.label.names} +{ + editor empty$ not + { editor format.short.label.names } + { + compiler empty$ not + { compiler format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.short.label.names} +{ + author empty$ not + { author format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {conf.short.label.names} +{ + author empty$ not + { author format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {make.short.label.names} +{ + type$ "book" = + 'book.short.label.names + { + type$ "incollection" = + 'incoll.short.label.names + { + type$ "article" = + 'article.short.label.names + { + type$ "proceedings" = + 'proc.short.label.names + { + type$ "inproceedings" = + 'inproc.short.label.names + { + type$ "conference" = + 'conf.short.label.names + { + type$ "inbook" = + 'author.editor.key.short.label.names + 'author.key.short.label.names + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + 'short.list := +} + + + + + +% Functions to create the full name label for the entry + +FUNCTION {format.full.label.names} +{ + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { + namesleft #0 > + } + { + s nameptr + "{vv~}{ll}" format.name$ + 't := + nameptr #1 > + { + namesleft #1 > + { + bbl.comma * " " * t * + } + { + s nameptr "{ll}" format.name$ + duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + } + { + numnames #2 > + { bbl.comma * } + 'skip$ + if$ + bbl.and + separate.by.space * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + + + +FUNCTION {author.key.full.label.names} +{ + author empty$ not + { author format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ +} + + + +FUNCTION {author.editor.key.full.label.names} +{ + author empty$ not + { author format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {editor.key.full.label.names} +{ + editor empty$ not + { editor format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ +} + + + +FUNCTION {book.full.label.names} +{ + author empty$ not + { author format.full.label.names } + { + compiler empty$ not + { compiler format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.full.label.names} +{ + author empty$ not + { author format.full.label.names } + { + compiler empty$ not + { compiler format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {article.full.label.names} +{ + author empty$ not + { author format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {proc.full.label.names} +{ + editor empty$ not + { editor format.full.label.names } + { + compiler empty$ not + { compiler format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.full.label.names} +{ + author empty$ not + { author format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {conf.full.label.names} +{ + author empty$ not + { author format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {make.full.label.names} +{ + type$ "book" = + 'book.full.label.names + { + type$ "incollection" = + 'incoll.full.label.names + { + type$ "article" = + 'article.full.label.names + { + type$ "proceedings" = + 'proc.full.label.names + { + type$ "inproceedings" = + 'inproc.full.label.names + { + type$ "conference" = + 'conf.full.label.names + { + type$ "inbook" = + 'author.editor.key.full.label.names + 'author.key.full.label.names + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + + + +% Functions to create the label of the entry + +FUNCTION {calc.label} +{ + make.short.label.names + short.list "(" * + year duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + * + 'label := +} + + + + + +% Functions to open, and close the bibitem + +FUNCTION {begin.bibitem} +{ + newline$ + "\bibitem[{" write$ + label write$ + ")" + make.full.label.names duplicate$ short.list = + { pop$ } + { * } + if$ + "}]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + + + +FUNCTION {end.bibitem} +{ + add.period$ write$ + newline$ +} + + + + + +% Functions to format fields + +FUNCTION {field.afterword} +{ + afterword empty$ not + { + afterword "afterword" format.names.ed + bbl.afterwordby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.author} +{ author "author" format.names } + + + +FUNCTION {field.booktitle} +{ + booktitle "booktitle" bibinfo.check + emphasize +} + + + +FUNCTION {field.by} +{ + by empty$ not + { + by "by" format.names.ed + bbl.by " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.collaboration} +{ + collaboration empty$ not + { + collaboration "collaboration" format.names.ed + bbl.incollaborationwith capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.comment} +{ + comment +} + + + +FUNCTION {field.commentator} +{ + commentator empty$ not + { + commentator "commentator" format.names.ed + bbl.commentatedby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {get.bbl.compiler} +{ + compiler num.names$ #1 > + 'bbl.compilers + 'bbl.compiler + if$ +} + +FUNCTION {field.compiler} +{ + compiler "compiler" format.names + duplicate$ empty$ + 'skip$ + { + bbl.comma * " " * get.bbl.compiler * + } + if$ +} + + + +FUNCTION {field.compiler.compiledby} +{ + compiler empty$ not + { + compiler "compiler" format.names.ed + bbl.compiledby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.doi} +{ + doi empty$ + { "" } + { + bbl.doi "u" change.case$ ":\doi{" * doi * "}" * + } + if$ +} + + + +FUNCTION {field.edition} +{ + edition duplicate$ empty$ + 'skip$ + { + output.state mid.sentence = + { "l" } + { "t" } + if$ + change.case$ + "edition" bibinfo.check + " " * bbl.edition * + } + if$ +} + + + +FUNCTION {get.bbl.editor} +{ + editor num.names$ #1 > + 'bbl.editors + 'bbl.editor + if$ +} + +FUNCTION {field.editor} +{ + editor "editor" format.names + duplicate$ empty$ + 'skip$ + { + bbl.comma * " " * get.bbl.editor * + } + if$ +} + + + +FUNCTION {field.editor.editedby} +{ + editor empty$ not + { + editor "editor" format.names.ed + bbl.editedby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.eprint} +{ + eprint duplicate$ empty$ + 'skip$ + { + "\eprint" + archive empty$ + 'skip$ + { "[" * archive * "]" * } + if$ + "{" * swap$ * "}" * + } + if$ +} + + + +FUNCTION {field.howpublished} +{ + howpublished +} + + + +FUNCTION {field.impression} +{ + impression duplicate$ empty$ not + { + output.state mid.sentence = + { "l" } + { "t" } + if$ + change.case$ + " " * bbl.impression * + } + 'skip$ + if$ +} + + + +FUNCTION {field.introduction} +{ + introduction empty$ not + { + introduction "introduction" format.names.ed + bbl.introby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.isbn} +{ + isbn "isbn" bibinfo.check + duplicate$ empty$ + 'skip$ + { + bbl.isbn "u" change.case$ ": " * swap$ * + } + if$ +} + + + +FUNCTION {field.issn} +{ + issn "issn" bibinfo.check + duplicate$ empty$ + 'skip$ + { + bbl.issn "u" change.case$ ": " * swap$ * + } + if$ +} + + + +FUNCTION {field.note} +{ + note empty$ not + { + 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 {field.organization} +{ + organization "organization" bibinfo.check +} + + + +INTEGERS { multiresult } + +FUNCTION {field.pages.check.multipage} +{ + '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 {field.pages} +{ + pages duplicate$ empty$ + 'skip$ + { + duplicate$ field.pages.check.multipage + { + n.dashify + } + { + } + if$ + "pages" bibinfo.check + } + if$ +} + + + +FUNCTION {field.preface} +{ + preface empty$ not + { + preface "preface" format.names.ed + bbl.prefaceby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.title} +{ + title + duplicate$ empty$ + 'skip$ + { bbl.dquote } + if$ +} + + + +FUNCTION {field.btitle} +{ + title "title" bibinfo.check + duplicate$ empty$ + 'skip$ + { emphasize } + if$ +} + + + +FUNCTION {field.title.dqoute} +{ + title + duplicate$ empty$ + 'skip$ + { bbl.dquote } + if$ +} + + + +FUNCTION {field.title.emph} +{ + title "title" bibinfo.check + duplicate$ empty$ + 'skip$ + { emphasize } + if$ +} + + + +FUNCTION {get.bbl.translator} +{ + translator num.names$ #1 > + 'bbl.translators + 'bbl.translator + if$ +} + +FUNCTION {field.translator} +{ + translator "translator" format.names + duplicate$ empty$ + 'skip$ + { + bbl.comma * " " * get.bbl.translator * + } + if$ +} + + +FUNCTION {field.translateyear} +{ + translateyear empty$ not + { + translateyear + } + { "" } + if$ + before.all 'output.state := + after.sentence 'output.state := +} + + + +FUNCTION {field.translator.translatedby} +{ + translator empty$ not + { + translator "translator" format.names.ed + bbl.translatedby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.url} +{ + url duplicate$ empty$ + { pop$ "" } + { + bbl.url "u" change.case$ ": \url{" * swap$ * "}" * + } + if$ +} + + + +FUNCTION {field.urldate} +{ + urldate duplicate$ empty$ + { pop$ "" } + { bbl.retrieved capitalize " " * swap$ * } + if$ +} + + + +FUNCTION {field.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 {field.year} +{ + year "year" bibinfo.check + duplicate$ empty$ + { + } + 'skip$ + if$ + before.all 'output.state := + after.sentence 'output.state := +} + + + +FUNCTION {in.ed.field.booktitle} % NOT USED +{ + field.booktitle + duplicate$ empty$ + 'skip$ + { + field.bvolume + duplicate$ empty$ + 'pop$ + { bbl.comma " " * swap$ * * } + if$ + editor "editor" format.names.ed + duplicate$ empty$ + 'pop$ + { + bbl.editedby capitalize " " * swap$ * + swap$ + add.period$ " " * swap$ * + } + if$ + word.in swap$ * + } + if$ +} + + + + + +% Functions to format combined fields + +FUNCTION {fields.journal.pages} +{ + pages duplicate$ empty$ 'pop$ + { + swap$ duplicate$ empty$ + { + pop$ pop$ field.pages + } + { + ": " * + swap$ + n.dashify + "pages" bibinfo.check + * + } + if$ + } + if$ +} + + + +FUNCTION {fields.journal.eid} +{ + eid "eid" bibinfo.check + duplicate$ empty$ + 'pop$ + { + swap$ + duplicate$ empty$ + 'skip$ + { + ": " * + } + if$ + swap$ * + numpages empty$ + 'skip$ + { + bbl.eidpp numpages tie.or.space.prefix + "numpages" bibinfo.check * * + " (" swap$ * ")" * * + } + if$ + } + if$ +} + + +FUNCTION {fields.number.series} +{ + volume empty$ + { + number empty$ + { series field.or.null } + { + series empty$ + { number "number" bibinfo.check } + { + output.state mid.sentence = + { bbl.number } + { bbl.number capitalize } + if$ + number tie.or.space.prefix "number" bibinfo.check * * + bbl.in space.word * + series "series" bibinfo.check * + } + if$ + } + if$ + } + { "" } + if$ +} + + + +FUNCTION {fields.org.or.pub} +{ + 't := + "" + address empty$ t empty$ and + 'skip$ + { + address "address" bibinfo.check * + t empty$ + 'skip$ + { + address empty$ + 'skip$ + { ": " * } + if$ + t * + } + if$ + } + if$ +} + + + +FUNCTION {fields.publisher.address} +{ + publisher "publisher" bibinfo.check fields.org.or.pub +} + + + +FUNCTION {fields.organization.address} +{ + organization "organization" bibinfo.check fields.org.or.pub +} + + + +FUNCTION {fields.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 {fields.vol.num.pages} +{ + volume field.or.null + duplicate$ empty$ + 'skip$ + { + "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$ + { fields.journal.pages } + { fields.journal.eid } + if$ +} + + + +FUNCTION {fields.chapter.pages} +{ + chapter empty$ + 'field.pages + { + type empty$ + { bbl.chapter } + { + type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter tie.or.space.prefix + "chapter" bibinfo.check + * * + pages empty$ + 'skip$ + { bbl.comma * " " * field.pages * } + if$ + } + if$ +} + + + + + +% Functions to format combined fields for specific entry + +FUNCTION {book.field.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 separate.by.space * + } + if$ + " \cite{" * crossref * "}" * +} + + + +FUNCTION {book.fields.volume.series.number} +{ + volume empty$ not + { + volumes empty$ not + { + series empty$ not + { + number empty$ not + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + " " * series emphasize * + " " * number * + } + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + " " * series emphasize * + } + if$ + } + { + number empty$ not + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + " " * bbl.number * "~" * number * + } + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * + } + if$ + } + if$ + } + { + series empty$ not + { + number empty$ not + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * series emphasize * + " " * number * + } + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * series emphasize * + } + if$ + } + { + number empty$ not + { + bbl.volume capitalize "~" * volume * add.period$ + " " * bbl.number * "~" * number * + } + { + bbl.volume capitalize "~" * volume * add.period$ + } + if$ + } + if$ + } + if$ + } + { + volumes empty$ not + { + series empty$ not + { + number empty$ not + { + volumes "~" * bbl.volumes * add.period$ + " " * series * + " " * number * + } + { + volumes "~" * bbl.volumes * add.period$ + " " * series * + } + if$ + } + { + number empty$ not + { + volumes "~" * bbl.volumes * add.period$ + " " * bbl.number * "~" * number * + } + { + volumes "~" * bbl.volumes * add.period$ + } + if$ + } + if$ + } + { + series empty$ not + { + number empty$ not + { + series + " " * number * + } + { + series + } + if$ + } + { + number empty$ not + { + bbl.number "~" * number * + } + { + "" + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.fields.chapter.booktitle.volume.pages} +{ + booktitle empty$ not + { + chapter empty$ not + { + bbl.chapter capitalize "~" * chapter * + " " * bbl.in * " " * field.booktitle * + pages empty$ not + { + bbl.comma * " " * pages * add.period$ + } + { + add.period$ + } + if$ + volume empty$ not + { + volumes empty$ not + { + " " * bbl.volume capitalize * "~" * volume * " " * bbl.of * " " * volumes * add.period$ + } + { + " " * bbl.volume capitalize * "~" * volume * add.period$ + } + if$ + } + { + volumes empty$ not + { + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + skip$ + } + if$ + } + if$ + } + { + word.in field.booktitle * + pages empty$ not + { + volume empty$ not + { + volumes empty$ not + { + " " * volume * ": " * pages * add.period$ + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + " " * volume * ": " * pages * add.period$ + } + if$ + } + { + volumes empty$ not + { + bbl.comma * " " * pages * add.period$ + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + bbl.comma * " " * pages * add.period$ + } + if$ + } + if$ + } + { + add.period$ + volume empty$ not + { + volumes empty$ not + { + " " * bbl.volume capitalize * "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + } + { + " " * bbl.volume capitalize * "~" * volume * add.period$ + } + if$ + } + { + volumes empty$ not + { + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + skip$ + } + if$ + } + if$ + } + if$ + } + if$ + } + { + "" + } + if$ +} + + + +INTEGERS { field.series.emph } +FUNCTION {incoll.fields.series.number} +{ + author empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + compiler empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + editor empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + if$ + } + if$ + series empty$ not + { + field.series.emph #0 > + { + number empty$ not + { series emphasize " " * number * } + { series emphasize } + if$ + } + { + number empty$ not + { series " " * number * } + { series } + if$ + } + if$ + } + { + number empty$ not + { bbl.number capitalize "~" * number * } + { "" } + if$ + } + if$ +} + + + +FUNCTION {incoll.field.crossref} +{ + word.in " \cite{" * crossref * "}" * +} + + + +FUNCTION {article.field.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} + + + +FUNCTION {article.field.journal} +{ + journal remove.dots emphasize +} + + + +FUNCTION {article.fields.jour.issn.vol.num.pp} +{ + journal empty$ not + { + issue empty$ not + { issue bbl.comma * " " *} + { "" } + if$ + article.field.journal * + volume empty$ not + { + number empty$ not + { + pages empty$ not + { + " " * volume * "~" * + "(" * number * ")" * ": " * + pages * + } + { + " " * volume * bbl.comma * + " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + " " * volume * ": " * + pages * + } + { + " " * volume * + } + if$ + } + if$ + } + { + number empty$ not + { + pages empty$ not + { + bbl.comma * " " * bbl.number * "~" * number * ": " * + pages * + } + { + bbl.comma * " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + bbl.comma * " " * pages * + } + 'skip$ + if$ + } + if$ + } + if$ + } + { + "journal" output.check + } + if$ +} + + + +FUNCTION {article.fields.issn.vol.num.pp} +{ + journal empty$ not + { + issue empty$ not + { issue bbl.comma * " " *} + { "" } + if$ + volume empty$ not + { + number empty$ not + { + pages empty$ not + { + bbl.comma * " " * bbl.volume * "~" * volume * "~" * + "(" * number * ")" * ": " * + pages * + } + { + bbl.comma * " " * bbl.volume * "~" * volume * bbl.comma * + " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + bbl.comma * " " * bbl.volume * "~" * volume * ":~" * + pages * + } + { + bbl.comma * " " * bbl.volume * "~" * volume * + } + if$ + } + if$ + } + { + number empty$ not + { + pages empty$ not + { + bbl.number * "~" * number * ": " * + pages * + } + { + bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + pages * + } + 'skip$ + if$ + } + if$ + } + if$ + } + { + "journal" output.check + } + if$ +} + + + +FUNCTION {proc.fields.org.publisher.address} +{ + organization empty$ not + { + publisher empty$ not + { + address empty$ not + { + organization add.period$ + address * ": " * publisher * + } + { + organization add.period$ + publisher * + } + if$ + } + { + address empty$ not + { + organization + bbl.comma * " " * address * + } + { + organization + } + if$ + } + if$ + } + { + publisher empty$ not + { + address empty$ not + { address ": " * publisher *} + { publisher } + if$ + } + { + address empty$ not + { address } + { "" } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.fields.booktitle.volume.pages} +{ + booktitle empty$ not + { + volume empty$ not + { + volumes empty$ not + { + pages empty$ not + { + field.booktitle " " * + volume * ": " * pages * add.period$ + " " * volumes * "~" * bbl.volumes * + } + { + field.booktitle add.period$ + " " * bbl.volume * "~" * volume * bbl.of * " " * volumes * + } + if$ + } + { + pages empty$ not + { + field.booktitle " " * + volume * ": " * pages * + } + { + field.booktitle add.period$ + " " * bbl.volume * "~" * volume * + } + if$ + } + if$ + } + { + volumes empty$ not + { + pages empty$ not + { + field.booktitle " " * + bbl.comma * " " * pages * add.period$ + volumes * "~" * bbl.volumes + } + { + field.booktitle " " * add.period$ + " " * volumes * "~" * bbl.volumes * + } + if$ + } + { + pages empty$ not + { + field.booktitle " " * + bbl.comma * " " * pages * + } + { + field.booktitle + } + if$ + } + if$ + } + if$ + } + { + "" + } + if$ +} + + + +FUNCTION {inproc.fields.series.number} +{ + author empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + series empty$ not + { + field.series.emph #0 > + { + number empty$ not + { series emphasize " " * number * } + { series emphasize } + if$ + } + { + number empty$ not + { series " " * number * } + { series } + if$ + } + if$ + } + { + number empty$ not + { bbl.number capitalize "~" * number * } + { "" } + if$ + } + if$ +} + + + +FUNCTION {inproc.field.crossref} { incoll.field.crossref } + + + +FUNCTION {conf.fields.series.number.pages} +{ + series empty$ not + { + number empty$ not + { + pages empty$ not + { + series + bbl.comma * " " * bbl.number * "~" * number * + bbl.comma * " " * pages * + } + { + series + bbl.comma * " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + series + bbl.comma * " " * pages * + } + { series } + if$ + } + if$ + } + { "" } + if$ +} + + + +FUNCTION {conf.fields.org.publisher.address} { proc.fields.org.publisher.address } + + + +FUNCTION {thesis.field.type} +{ + type duplicate$ empty$ + 'pop$ + { + swap$ pop$ + "t" change.case$ "type" bibinfo.check + } + if$ +} + + + +FUNCTION {thesis.fields.school.type.address} +{ + type empty$ + { + type$ "mastersthesis" = + { bbl.mthesis "t" change.case$ } + { + type$ "phdthesis" = + { bbl.phdthesis "t" change.case$ } + { bbl.thesis "t" change.case$ } + if$ + } + if$ + school empty$ not + { + address empty$ not + { bbl.comma * " " * school * bbl.comma * " " * address * } + { bbl.comma * " " * school * } + if$ + } + { + address empty$ not + { bbl.comma * address * } + { add.period$ } + if$ + } + if$ + } + { + type "~" = + { + school empty$ not + { + address empty$ not + { school bbl.comma * " " * address * } + { school } + if$ + } + { + address empty$ not + { address } + { "" } + if$ + } + if$ + } + { + type + school empty$ not + { + address empty$ not + { bbl.comma * " " * school * bbl.comma * " " * address * } + { bbl.comma * " " * school * } + if$ + } + { + address empty$ not + { bbl.comma * address * } + { add.period$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {unpub.field.title} +{ + title empty$ not + { title bbl.dquote } + 'skip$ + if$ +} + + + +FUNCTION {misc.field.title} +{ + title empty$ not + { title } + 'skip$ + if$ +} + + + + + +% Functions to format entries based on type (compatible entries) + +FUNCTION {book} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.emph "title" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { %%% if author field is empty, proceeds with compiler + compiler empty$ not + { + field.compiler output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.emph "title" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.editor.editedby output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { %%% if author, and compiler fields are empty, proceeds with editor + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.emph "title" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { %%% if author, compiler, and editor fields are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear output + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author, compiler, editor, and translator fields are empty, proceeds with key + key empty$ not + { + field.title.emph "title" output.check + name.or.dash + field.year "year" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { + "author, compiler, editor, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {incollection} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + crossref missing$ + { + new.sentence field.by output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence incoll.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { %%% if author field is empty, proceeds with compiler + compiler empty$ not + { + field.compiler output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + crossref missing$ + { + new.sentence field.by output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence incoll.fields.series.number output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { %%% if author, and compiler fields are empty, proceeds with editor + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + crossref missing$ + { + new.sentence field.by output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence incoll.fields.series.number output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { %%% if author, compiler, and editor fields are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear output + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence incoll.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author, compiler, editor, and translator fields are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year "year" output.check + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence incoll.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { + "author, compiler, editor, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {article} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence field.editor.editedby output + new.sentence article.fields.jour.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author is empty, proceeds with editor + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence article.fields.jour.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, and editor are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear output + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + crossref missing$ + { + new.sentence field.editor.editedby output + new.sentence article.fields.jour.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, editor, and translator are empty, proceeds with key + key empty$ not + { + article.field.journal output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence field.editor.editedby output + new.sentence article.fields.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { + "author, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {proceedings} +{ + begin.bibitem + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.compiler.compiledby output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if editor field is empty, proceeds with compiler + compiler empty$ not + { + field.compiler output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if editor, and compiler fields are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear output + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence book.fields.volume.series.number output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + key empty$ not + { + field.title.emph "title" output.check + name.or.dash + field.year "year" output.check + new.block field.edition output + new.sentence field.impression output + new.sentence book.fields.volume.series.number output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + "editor, compiler, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {inproceedings} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence inproc.fields.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence inproc.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author field is empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear output + new.block field.title.dqoute "title" output.check + new.sentence field.by output + new.sentence field.year output + crossref missing$ + { + new.sentence inproc.fields.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence inproc.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, and translator fields are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year "year" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence inproc.fields.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence inproc.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { + "author, translator, and key" output.check + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {conference} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence conf.fields.series.number.pages output + new.sentence field.editor.editedby output + new.sentence conf.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author is empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear output + new.block field.title.dqoute "title" output.check + new.sentence field.by output + new.sentence field.year output + crossref missing$ + { + new.sentence conf.fields.series.number.pages output + new.sentence field.editor.editedby output + new.sentence conf.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, and translator are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year "year" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence conf.fields.series.number.pages output + new.sentence field.editor.editedby output + new.sentence conf.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { + "author, translator, and key" output.check + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {thesis} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence thesis.fields.school.type.address output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author is empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year "year" output.check + new.sentence field.comment output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { "author, and key" output.check } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {mastersthesis} { thesis } + + + +FUNCTION {phdthesis} { thesis } + + + +FUNCTION {unpublished} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year "year" output.check + new.block unpub.field.title output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence field.howpublished output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author is empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear output + new.block unpub.field.title output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence field.howpublished output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author, and translator are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year "year" output.check + new.sentence field.comment output + new.sentence field.by output + new.sentence field.howpublished output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { "author, translator, and key" output.check } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {misc} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year "year" output.check + new.block misc.field.title output + new.sentence field.by output + new.sentence field.howpublished output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author is empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year "year" output.check + new.sentence field.by output + new.sentence field.howpublished output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { "author, and key" output.check } + if$ + } + if$ + end.bibitem +} + + + + + +% Functions to format entries based on type (incompatible entries) + +FUNCTION {booklet} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + field.author output + author format.key output + name.or.dash + field.year "year" output.check + date.block + field.title "title" output.check + new.block + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + field.isbn output + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + +FUNCTION {inbook} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + author empty$ + { field.editor "author and editor" output.check + editor format.key output + name.or.dash + } + { field.author output.nonnull + name.or.dash + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + field.year "year" output.check + date.block + field.btitle "title" output.check + crossref missing$ + { + field.bvolume output + fields.chapter.pages output%"chapter and pages" output.check + new.block + fields.number.series output + field.edition output + new.sentence + fields.publisher.address output + } + { + fields.chapter.pages "chapter and pages" output.check + new.block + book.field.crossref output.nonnull + } + if$ + crossref missing$ + { field.isbn output } + 'skip$ + if$ + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + +FUNCTION {manual} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + field.author output + author format.key output + name.or.dash + field.year "year" output.check + date.block + field.btitle "title" output.check + organization address new.block.checkb + organization "organization" bibinfo.check output + address "address" bibinfo.check output + field.edition output + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + +FUNCTION {techreport} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + field.author "author" output.check + author format.key output + name.or.dash + field.year "year" output.check + date.block + field.btitle + "title" output.check + new.block + fields.tr.number output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + + + +% Function to format entry if the type is not recognized + +FUNCTION {default.type} { misc } + + + + + + + + + + + + + + + + + + + + +% Reading bibliography database (.bib) file + +READ + + +% Function to generate a string that is suitable for sorting purposes + +FUNCTION {sortify} +{ + purify$ + "l" change.case$ +} + + + +% Length of the short name label of the entry + +INTEGERS { len } + +FUNCTION {chop.word} +{ + 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + + + + + +% Functions for sorting purposes + +FUNCTION {sort.format.names} +{ + 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { + namesleft #0 > + } + { + s nameptr + "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ + 't := + nameptr #1 > + { + " " * + namesleft #1 = + t "others" = + and + { "zzzzz" 't := } + 'skip$ + if$ + t sortify * + } + { + t sortify * + } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + + + +FUNCTION {sort.field.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 {editor.sort} +{ + editor empty$ + { + key empty$ + { + "to sort, need editor or key in " cite$ * warning$ + "" + } + { + key sortify + } + if$ + } + { + editor sort.format.names + } + if$ +} + + + +FUNCTION {book.sort} +{ + author empty$ not + { + author sort.format.names + } + { + compiler empty$ not + { + compiler sort.format.names + } + { + editor empty$ not + { + editor sort.format.names + } + { + translator empty$ not + { + translator sort.format.names + } + { + key empty$ not + { + key sortify + } + { + "to sort, need author, compiler, editor, translator, or key in " cite$ * warning$ + "" + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.sort} +{ + author empty$ not + { + author sort.format.names + } + { + compiler empty$ not + { + compiler sort.format.names + } + { + editor empty$ not + { + editor sort.format.names + } + { + translator empty$ not + { + translator sort.format.names + } + { + key empty$ not + { + key sortify + } + { + "to sort, need author, compiler, editor, translator, or key in " cite$ * warning$ + "" + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {article.sort} +{ + author empty$ not + { + author sort.format.names + } + { + editor empty$ not + { + editor sort.format.names + } + { + translator empty$ not + { + translator sort.format.names + } + { + key empty$ not + { + key sortify + } + { + "to sort, need author, editor, translator, or key in " cite$ * warning$ + "" + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {proc.sort} +{ + editor empty$ not + { editor sort.format.names } + { + compiler empty$ not + { compiler sort.format.names } + { + translator empty$ not + { translator sort.format.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.sort} +{ + author empty$ not + { author sort.format.names } + { + translator empty$ not + { translator sort.format.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {conf.sort} +{ + author empty$ not + { author sort.format.names } + { + translator empty$ not + { translator sort.format.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + + +INTEGERS { seq.num } + +FUNCTION {init.seq} +{ #0 'seq.num := } + +EXECUTE {init.seq} + + + +FUNCTION {int.to.fix} +{ + "000000000" swap$ int.to.str$ * + #-1 #10 substring$ +} + + + +FUNCTION {presort} +{ + calc.label + label sortify + " " + * + seq.num #1 + 'seq.num := + seq.num int.to.fix + 'sort.label := + sort.label + * + #1 entry.max$ substring$ + 'sort.key$ := +} + + + + + +% Sort process + +ITERATE {presort} + +SORT + + + +INTEGERS { number.label } + +FUNCTION {initialize.longest.label} +{ + #0 'number.label := +} + +FUNCTION {forward.pass} +{ + number.label #1 + 'number.label := +} + +EXECUTE {initialize.longest.label} + +ITERATE {forward.pass} + + + +FUNCTION {bib.sort.order} +{ + sort.label + 'sort.key$ := +} + + + +ITERATE {bib.sort.order} + +SORT + + + + +% Functions to create bibliography +FUNCTION {begin.bib} +{ + preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" write$ + newline$ + "% Generated by `iranlatin-unsrt.bst`." write$ + newline$ + "% This bibliography style is part of the `iran-bibtex` package." write$ + newline$ + "% Copyright (c) 2023-2024 Farshad Rasuli " write$ + newline$ + "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" write$ + newline$ + newline$ + newline$ + "\begin{thebibliography}{" number.label int.to.str$ * "}" * 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 file `iranlatin-unsrt.bst'. \ No newline at end of file diff --git a/biblio/bibtex/contrib/iran-bibtex/iranlatin-year.bst b/biblio/bibtex/contrib/iran-bibtex/iranlatin-year.bst new file mode 100644 index 0000000000..fe31ac7988 --- /dev/null +++ b/biblio/bibtex/contrib/iran-bibtex/iranlatin-year.bst @@ -0,0 +1,4665 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% +%% This file is “iranlatin-year.bst”, v0.1.0 (2024/01/8) +%% created by modifying “iranlatin.bst” file in accordance with the +%% “Iran Manual of Style Citation Guide” (1st edn., 2016) to support +%% English/Latin only. +%% +%% +%% +%% Copyright (c) 2023-2024 Farshad Rasuli +%% +%% This file can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License version 1.3c, or any later version. +%% The latest version of the License is at: latex-project.org/lppl.txt +%% +%% This BibTeX bibliography style (bst) file is part of +%% the “iran-bibtex” package. +%% +%% CTAN catalog: https://ctan.org/pkg/iran-bibtex +%% CTAN archive: https://ctan.org/tex-archive/biblio/bibtex/contrib/iran-bibtex +%% Repository: https://github.com/farshadrasuli/iran-bibtex +%% Bug tracker: https://github.com/farshadrasuli/iran-bibtex/issues +%% +%% +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +%%----------------------------------------------------------------------------- +%% This bibliography style file is intended for texts in ENGLISH. +%% This is an author-year citation style bibliography. This style file is +%% based on natbib.sty package by Patrick W. Daly. +%% The form of the \bibitem entries is +%% \bibitem[Jones et al.(1990)]{key}... +%% \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... +%% The essential feature is that the label (the part in brackets) consists +%% of the author names, as they should appear in the citation, with the year +%% in parentheses following. There must be no space before the opening +%% parenthesis! +%% +%% The \cite command functions as follows (\cite is equal to \citep command): +%% \citep{key} => (Jones et al., 1990) +%% \citep*{key} => (Jones, Baker, and Smith, 1990) +%% \citep[chap. 2]{key} => (Jones et al., 1990, chap. 2) +%% \citep[e.g.][]{key} => (e.g. Jones et al., 1990) +%% \citep[e.g.][p. 32]{key} => (e.g. Jones et al., 1990, p. 32) +%% \citet{key} => Jones et al. (1990) +%% \citet*{key} => Jones, Baker, and Smith (1990) +%% \citeauthor{key} => Jones et al. +%% \citeauthor*{key} => Jones, Baker, and Smith +%% \citeyear{key} => 1990 +%%----------------------------------------------------------------------------- + + + +ENTRY +{ + address + afterword % the added field + archive + author + booktitle + by % the added field + chapter + collaboration + comment % the added field + commentator % the added field + compiler % the added field + doi + edition + editor + eid + eprint + foreword % the added field + howpublished + impression % the added field + institution + introduction % the added field + isbn + issn + issue % the added field + journal + key + language + month + note + number + numpages + organization + pages + preface % the added field + publisher + school + series + title + translator % the added field + translateyear % the added field + type + url + urldate % the added field + volume + volumes % the added field + year +} +{} +{ + label + extra.label + sort.label + short.list +} + + + + + +% Logical operators + +FUNCTION {not} +{ + { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ + 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ + { pop$ #1 } + 'skip$ + if$ +} + + + + + +% Here are the language-specific definitions for explicit words. +% Each function has a name bbl.xxx where xxx is the English word. + +FUNCTION {bbl.afterwordby} +{ "afterword by" } + +FUNCTION {bbl.and} +{ "and" } + +FUNCTION {bbl.andothers} +{ "and~others" } + +FUNCTION {bbl.by} +{ "by" } + +FUNCTION {bbl.chapter} +{ "chapter" } + +FUNCTION {bbl.comma} +{ "," } + +FUNCTION {bbl.commentator} +{ "comm." } + +FUNCTION {bbl.commentatedby} +{ "commentated by" } + +FUNCTION {bbl.compiler} +{ "comp." } + +FUNCTION {bbl.compilers} +{ "comps." } + +FUNCTION {bbl.compiledby} +{ "compiled by" } + +FUNCTION {bbl.doi} +{ "doi" } + +FUNCTION {bbl.dquote} +{ "\enquote{" swap$ * add.period$ "}" * } + +FUNCTION {bbl.editor} +{ "ed." } + +FUNCTION {bbl.editors} +{ "eds." } + +FUNCTION {bbl.editedby} +{ "edited by" } + +FUNCTION {bbl.edition} +{ "edn." } + +FUNCTION {bbl.eidpp} +{ "pages" } + +FUNCTION {bbl.etal} +{ "et~al." } + +FUNCTION {bbl.forewordby} +{ "forword by" } + +FUNCTION {bbl.impression} +{ "imp." } + +FUNCTION {bbl.in} +{ "in" } + +FUNCTION {bbl.incollaborationwith} +{ "in collaboration with" } + +FUNCTION {bbl.introby} +{ "introduction by" } + +FUNCTION {bbl.isbn} +{ "isbn" } + +FUNCTION {bbl.issn} +{ "issn" } + +FUNCTION {bbl.mthesis} +{ "Master's thesis" } + +FUNCTION {bbl.nr} +{ "no." } + +FUNCTION {bbl.number} +{ "no." } + +FUNCTION {bbl.of} +{ "of" } + +FUNCTION {bbl.page} +{ "p." } + +FUNCTION {bbl.pages} +{ "pp." } + +FUNCTION {bbl.prefaceby} +{ "preface by" } + +FUNCTION {bbl.phdthesis} +{ "PhD dissertation" } + +FUNCTION {bbl.retrieved} +{ "retrieved" } + +FUNCTION {bbl.semicolon} +{ ";" } + +FUNCTION {bbl.techrep} +{ "tech. rep." } + +FUNCTION {bbl.thesis} +{ "Thesis" } + +FUNCTION {bbl.translator} +{ "trans." } + +FUNCTION {bbl.translators} +{ "trans." } + +FUNCTION {bbl.translatedby} +{ "translated by" } + +FUNCTION {bbl.url} +{ "url" } + +FUNCTION {bbl.volume} +{ "vol." } + +FUNCTION {bbl.volumes} +{ "vols." } + + + + + +% Macro for abbreviation of month + +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"} + + + + + +% Functions to declare position + +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 := +} + + + +% Functions to print output + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ + 's := + output.state mid.sentence = + { bbl.comma * " " * write$ } + { + output.state after.block = + { + add.period$ write$ + newline$ + "\newblock " write$ + } + { + output.state before.all = + 'write$ + { add.period$ write$ " " 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$ +} + + + + + +% Functions to check and warn bibinfo + +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 {either.or.check} +{ + empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + + + + + +% Functions to control the print format of entries + +FUNCTION {new.block} +{ + output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + + + +FUNCTION {new.block.checkb} +{ + empty$ + swap$ empty$ + and + 'skip$ + 'new.block + 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 {capitalize} +{ "u" change.case$ "t" change.case$ } + + + +FUNCTION {date.block} +{ + new.block +} + + + +FUNCTION {emphasize} +{ + duplicate$ empty$ + { pop$ "" } + { "{\it " swap$ * "}" * } + if$ +} + + + +FUNCTION {field.or.null} +{ + duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + + + +FUNCTION {no.blank.or.punct} +{ + "\hspace{0pt}" * before.all 'output.state := +} + + + +FUNCTION {non.stop} +{ + duplicate$ + "}" * add.period$ + #-1 #1 substring$ "." = +} + + + +STRINGS {z} + +FUNCTION {remove.dots} +{ + 'z := + "" + { + z empty$ not + } + { + z #1 #2 substring$ + duplicate$ "\." = + { + z #3 global.max$ substring$ 'z := * + } + { + pop$ + z #1 #1 substring$ + z #2 global.max$ substring$ 'z := + duplicate$ "." = + 'pop$ + { * } + if$ + } + if$ + } + while$ +} + + + +FUNCTION {separate.by.space} +{ " " swap$ * " " * } + + + +FUNCTION {space.word} +{ " " swap$ * " " * } + + + +FUNCTION {tie.or.space.prefix} +{ + duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ +} + + + +FUNCTION {word.in} +{ + output.state mid.sentence = + { bbl.in " " * } + { bbl.in capitalize " " * } + if$ +} + + + + + +% Functions to format names + +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 + duplicate$ #1 > + { "{ff~}{vv~}{ll}{, jj}" } + { "{vv~}{ll}{, ff}{, jj}" } + if$ + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + namesleft #1 > + { + bbl.comma * " " * t * + } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + bbl.comma * + t "others" = + { + " " * bbl.etal * + } + { + bbl.and + separate.by.space * 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 + "{ff~}{vv~}{ll}{, jj}" + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + namesleft #1 > + { + bbl.comma * " " * t * + } + { + s nameptr "{ll}" format.name$ + duplicate$ "others" = + { 't := } + { pop$ } + if$ + bbl.comma * + t "others" = + { + + " " * bbl.etal * + } + { + bbl.and + separate.by.space * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } + if$ +} + + + +FUNCTION {format.key} +{ + empty$ + { key field.or.null } + { "" } + if$ +} + + + +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$ +} + + + +STRINGS {oldname} + +FUNCTION {name.or.dash} +{ + 's := + oldname empty$ + { s 'oldname := s } + { + s oldname = + { "---{}---{}---" } + { s 'oldname := s } + if$ + } + if$ +} + + + + + +% Functions to create the short name label for the entry + +FUNCTION {format.short.label.names} +{ + 's := + "" 't := + s #1 "{vv~}{ll}" format.name$ + s num.names$ #3 > + { + " " * bbl.etal * + } + { + s num.names$ #2 < + 'skip$ + { + s num.names$ #3 < + { + s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + " " * bbl.etal * + } + { + bbl.comma * bbl.and separate.by.space * s #2 "{vv~}{ll}" format.name$ * + } + if$ + } + { + s #3 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + " " * bbl.etal * + } + { + bbl.comma * " " * s #2 "{vv~}{ll}" format.name$ * + bbl.comma * bbl.and separate.by.space * s #3 "{vv~}{ll}" format.name$ * + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {author.key.short.label.names} +{ + author empty$ not + { author format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ +} + + + +FUNCTION {author.editor.key.short.label.names} +{ + author empty$ not + { author format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {editor.key.short.label.names} +{ + editor empty$ not + { editor format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ +} + + + +FUNCTION {book.short.label.names} +{ + author empty$ not + { author format.short.label.names } + { + compiler empty$ not + { compiler format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.short.label.names} +{ + author empty$ not + { author format.short.label.names } + { + compiler empty$ not + { compiler format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {article.short.label.names} +{ + author empty$ not + { author format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {proc.short.label.names} +{ + editor empty$ not + { editor format.short.label.names } + { + compiler empty$ not + { compiler format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.short.label.names} +{ + author empty$ not + { author format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {conf.short.label.names} +{ + author empty$ not + { author format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {make.short.label.names} +{ + type$ "book" = + 'book.short.label.names + { + type$ "incollection" = + 'incoll.short.label.names + { + type$ "article" = + 'article.short.label.names + { + type$ "proceedings" = + 'proc.short.label.names + { + type$ "inproceedings" = + 'inproc.short.label.names + { + type$ "conference" = + 'conf.short.label.names + { + type$ "inbook" = + 'author.editor.key.short.label.names + 'author.key.short.label.names + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + 'short.list := +} + + + + + +% Functions to create the full name label for the entry + +FUNCTION {format.full.label.names} +{ + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { + namesleft #0 > + } + { + s nameptr + "{vv~}{ll}" format.name$ + 't := + nameptr #1 > + { + namesleft #1 > + { + bbl.comma * " " * t * + } + { + s nameptr "{ll}" format.name$ + duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + } + { + numnames #2 > + { bbl.comma * } + 'skip$ + if$ + bbl.and + separate.by.space * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + + + +FUNCTION {author.key.full.label.names} +{ + author empty$ not + { author format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ +} + + + +FUNCTION {author.editor.key.full.label.names} +{ + author empty$ not + { author format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {editor.key.full.label.names} +{ + editor empty$ not + { editor format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ +} + + + +FUNCTION {book.full.label.names} +{ + author empty$ not + { author format.full.label.names } + { + compiler empty$ not + { compiler format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.full.label.names} +{ + author empty$ not + { author format.full.label.names } + { + compiler empty$ not + { compiler format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {article.full.label.names} +{ + author empty$ not + { author format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {proc.full.label.names} +{ + editor empty$ not + { editor format.full.label.names } + { + compiler empty$ not + { compiler format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.full.label.names} +{ + author empty$ not + { author format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {conf.full.label.names} +{ + author empty$ not + { author format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {make.full.label.names} +{ + type$ "book" = + 'book.full.label.names + { + type$ "incollection" = + 'incoll.full.label.names + { + type$ "article" = + 'article.full.label.names + { + type$ "proceedings" = + 'proc.full.label.names + { + type$ "inproceedings" = + 'inproc.full.label.names + { + type$ "conference" = + 'conf.full.label.names + { + type$ "inbook" = + 'author.editor.key.full.label.names + 'author.key.full.label.names + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + + + +% Functions to create the label of the entry + +FUNCTION {calc.label} +{ + make.short.label.names + short.list "(" * + translateyear empty$ + { + year duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + } + { + author empty$ not + { + year duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + } + { + compiler empty$ not + { + year duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + } + { + editor empty$ not + { + year duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + } + { + translateyear duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + } + if$ + } + if$ + } + if$ + } + if$ + * + 'label := +} + + + + + +% Functions to open, and close the bibitem + +FUNCTION {begin.bibitem} +{ + newline$ + "\bibitem[{" write$ + label write$ + ")" + make.full.label.names duplicate$ short.list = + { pop$ } + { * } + if$ + "}]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + + + +FUNCTION {end.bibitem} +{ + add.period$ write$ + newline$ +} + + + + + +% Functions to format fields + +FUNCTION {field.afterword} +{ + afterword empty$ not + { + afterword "afterword" format.names.ed + bbl.afterwordby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.author} +{ author "author" format.names } + + + +FUNCTION {field.booktitle} +{ + booktitle "booktitle" bibinfo.check + emphasize +} + + + +FUNCTION {field.by} +{ + by empty$ not + { + by "by" format.names.ed + bbl.by " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.collaboration} +{ + collaboration empty$ not + { + collaboration "collaboration" format.names.ed + bbl.incollaborationwith capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.comment} +{ + comment +} + + + +FUNCTION {field.commentator} +{ + commentator empty$ not + { + commentator "commentator" format.names.ed + bbl.commentatedby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {get.bbl.compiler} +{ + compiler num.names$ #1 > + 'bbl.compilers + 'bbl.compiler + if$ +} + +FUNCTION {field.compiler} +{ + compiler "compiler" format.names + duplicate$ empty$ + 'skip$ + { + bbl.comma * " " * get.bbl.compiler * + } + if$ +} + + + +FUNCTION {field.compiler.compiledby} +{ + compiler empty$ not + { + compiler "compiler" format.names.ed + bbl.compiledby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.doi} +{ + doi empty$ + { "" } + { + bbl.doi "u" change.case$ ":\doi{" * doi * "}" * + } + if$ +} + + + +FUNCTION {field.edition} +{ + edition duplicate$ empty$ + 'skip$ + { + output.state mid.sentence = + { "l" } + { "t" } + if$ + change.case$ + "edition" bibinfo.check + " " * bbl.edition * + } + if$ +} + + + +FUNCTION {get.bbl.editor} +{ + editor num.names$ #1 > + 'bbl.editors + 'bbl.editor + if$ +} + +FUNCTION {field.editor} +{ + editor "editor" format.names + duplicate$ empty$ + 'skip$ + { + bbl.comma * " " * get.bbl.editor * + } + if$ +} + + + +FUNCTION {field.editor.editedby} +{ + editor empty$ not + { + editor "editor" format.names.ed + bbl.editedby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.eprint} +{ + eprint duplicate$ empty$ + 'skip$ + { + "\eprint" + archive empty$ + 'skip$ + { "[" * archive * "]" * } + if$ + "{" * swap$ * "}" * + } + if$ +} + + + +FUNCTION {field.howpublished} +{ + howpublished +} + + + +FUNCTION {field.impression} +{ + impression duplicate$ empty$ not + { + output.state mid.sentence = + { "l" } + { "t" } + if$ + change.case$ + " " * bbl.impression * + } + 'skip$ + if$ +} + + + +FUNCTION {field.introduction} +{ + introduction empty$ not + { + introduction "introduction" format.names.ed + bbl.introby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.isbn} +{ + isbn "isbn" bibinfo.check + duplicate$ empty$ + 'skip$ + { + bbl.isbn "u" change.case$ ": " * swap$ * + } + if$ +} + + + +FUNCTION {field.issn} +{ + issn "issn" bibinfo.check + duplicate$ empty$ + 'skip$ + { + bbl.issn "u" change.case$ ": " * swap$ * + } + if$ +} + + + +FUNCTION {field.note} +{ + note empty$ not + { + 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 {field.organization} +{ + organization "organization" bibinfo.check +} + + + +INTEGERS { multiresult } + +FUNCTION {field.pages.check.multipage} +{ + '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 {field.pages} +{ + pages duplicate$ empty$ + 'skip$ + { + duplicate$ field.pages.check.multipage + { + n.dashify + } + { + } + if$ + "pages" bibinfo.check + } + if$ +} + + + +FUNCTION {field.preface} +{ + preface empty$ not + { + preface "preface" format.names.ed + bbl.prefaceby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.title} +{ + title + duplicate$ empty$ + 'skip$ + { bbl.dquote } + if$ +} + + + +FUNCTION {field.btitle} +{ + title "title" bibinfo.check + duplicate$ empty$ + 'skip$ + { emphasize } + if$ +} + + + +FUNCTION {field.title.dqoute} +{ + title + duplicate$ empty$ + 'skip$ + { bbl.dquote } + if$ +} + + + +FUNCTION {field.title.emph} +{ + title "title" bibinfo.check + duplicate$ empty$ + 'skip$ + { emphasize } + if$ +} + + + +FUNCTION {get.bbl.translator} +{ + translator num.names$ #1 > + 'bbl.translators + 'bbl.translator + if$ +} + +FUNCTION {field.translator} +{ + translator "translator" format.names + duplicate$ empty$ + 'skip$ + { + bbl.comma * " " * get.bbl.translator * + } + if$ +} + + +FUNCTION {field.translateyear} +{ + translateyear empty$ not + { + translateyear + } + { "" } + if$ + before.all 'output.state := + after.sentence 'output.state := +} + + + +FUNCTION {field.translator.translatedby} +{ + translator empty$ not + { + translator "translator" format.names.ed + bbl.translatedby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.url} +{ + url duplicate$ empty$ + { pop$ "" } + { + bbl.url "u" change.case$ ": \url{" * swap$ * "}" * + } + if$ +} + + + +FUNCTION {field.urldate} +{ + urldate duplicate$ empty$ + { pop$ "" } + { bbl.retrieved capitalize " " * swap$ * } + if$ +} + + + +FUNCTION {field.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 {field.year} +{ + year "year" bibinfo.check + duplicate$ empty$ + { + } + 'skip$ + if$ + before.all 'output.state := + after.sentence 'output.state := +} + + + +FUNCTION {in.ed.field.booktitle} % NOT USED +{ + field.booktitle + duplicate$ empty$ + 'skip$ + { + field.bvolume + duplicate$ empty$ + 'pop$ + { bbl.comma " " * swap$ * * } + if$ + editor "editor" format.names.ed + duplicate$ empty$ + 'pop$ + { + bbl.editedby capitalize " " * swap$ * + swap$ + add.period$ " " * swap$ * + } + if$ + word.in swap$ * + } + if$ +} + + + + + +% Functions to format combined fields + +FUNCTION {fields.journal.pages} +{ + pages duplicate$ empty$ 'pop$ + { + swap$ duplicate$ empty$ + { + pop$ pop$ field.pages + } + { + ": " * + swap$ + n.dashify + "pages" bibinfo.check + * + } + if$ + } + if$ +} + + + +FUNCTION {fields.journal.eid} +{ + eid "eid" bibinfo.check + duplicate$ empty$ + 'pop$ + { + swap$ + duplicate$ empty$ + 'skip$ + { + ": " * + } + if$ + swap$ * + numpages empty$ + 'skip$ + { + bbl.eidpp numpages tie.or.space.prefix + "numpages" bibinfo.check * * + " (" swap$ * ")" * * + } + if$ + } + if$ +} + + +FUNCTION {fields.number.series} +{ + volume empty$ + { + number empty$ + { series field.or.null } + { + series empty$ + { number "number" bibinfo.check } + { + output.state mid.sentence = + { bbl.number } + { bbl.number capitalize } + if$ + number tie.or.space.prefix "number" bibinfo.check * * + bbl.in space.word * + series "series" bibinfo.check * + } + if$ + } + if$ + } + { "" } + if$ +} + + + +FUNCTION {fields.org.or.pub} +{ + 't := + "" + address empty$ t empty$ and + 'skip$ + { + address "address" bibinfo.check * + t empty$ + 'skip$ + { + address empty$ + 'skip$ + { ": " * } + if$ + t * + } + if$ + } + if$ +} + + + +FUNCTION {fields.publisher.address} +{ + publisher "publisher" bibinfo.check fields.org.or.pub +} + + + +FUNCTION {fields.organization.address} +{ + organization "organization" bibinfo.check fields.org.or.pub +} + + + +FUNCTION {fields.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 {fields.vol.num.pages} +{ + volume field.or.null + duplicate$ empty$ + 'skip$ + { + "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$ + { fields.journal.pages } + { fields.journal.eid } + if$ +} + + + +FUNCTION {fields.chapter.pages} +{ + chapter empty$ + 'field.pages + { + type empty$ + { bbl.chapter } + { + type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter tie.or.space.prefix + "chapter" bibinfo.check + * * + pages empty$ + 'skip$ + { bbl.comma * " " * field.pages * } + if$ + } + if$ +} + + + + + +% Functions to format combined fields for specific entry + +FUNCTION {book.field.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 separate.by.space * + } + if$ + " \cite{" * crossref * "}" * +} + + + +FUNCTION {book.fields.volume.series.number} +{ + volume empty$ not + { + volumes empty$ not + { + series empty$ not + { + number empty$ not + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + " " * series emphasize * + " " * number * + } + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + " " * series emphasize * + } + if$ + } + { + number empty$ not + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + " " * bbl.number * "~" * number * + } + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * + } + if$ + } + if$ + } + { + series empty$ not + { + number empty$ not + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * series emphasize * + " " * number * + } + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * series emphasize * + } + if$ + } + { + number empty$ not + { + bbl.volume capitalize "~" * volume * add.period$ + " " * bbl.number * "~" * number * + } + { + bbl.volume capitalize "~" * volume * add.period$ + } + if$ + } + if$ + } + if$ + } + { + volumes empty$ not + { + series empty$ not + { + number empty$ not + { + volumes "~" * bbl.volumes * add.period$ + " " * series * + " " * number * + } + { + volumes "~" * bbl.volumes * add.period$ + " " * series * + } + if$ + } + { + number empty$ not + { + volumes "~" * bbl.volumes * add.period$ + " " * bbl.number * "~" * number * + } + { + volumes "~" * bbl.volumes * add.period$ + } + if$ + } + if$ + } + { + series empty$ not + { + number empty$ not + { + series + " " * number * + } + { + series + } + if$ + } + { + number empty$ not + { + bbl.number "~" * number * + } + { + "" + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.fields.chapter.booktitle.volume.pages} +{ + booktitle empty$ not + { + chapter empty$ not + { + bbl.chapter capitalize "~" * chapter * + " " * bbl.in * " " * field.booktitle * + pages empty$ not + { + bbl.comma * " " * pages * add.period$ + } + { + add.period$ + } + if$ + volume empty$ not + { + volumes empty$ not + { + " " * bbl.volume capitalize * "~" * volume * " " * bbl.of * " " * volumes * add.period$ + } + { + " " * bbl.volume capitalize * "~" * volume * add.period$ + } + if$ + } + { + volumes empty$ not + { + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + skip$ + } + if$ + } + if$ + } + { + word.in field.booktitle * + pages empty$ not + { + volume empty$ not + { + volumes empty$ not + { + " " * volume * ": " * pages * add.period$ + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + " " * volume * ": " * pages * add.period$ + } + if$ + } + { + volumes empty$ not + { + bbl.comma * " " * pages * add.period$ + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + bbl.comma * " " * pages * add.period$ + } + if$ + } + if$ + } + { + add.period$ + volume empty$ not + { + volumes empty$ not + { + " " * bbl.volume capitalize * "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + } + { + " " * bbl.volume capitalize * "~" * volume * add.period$ + } + if$ + } + { + volumes empty$ not + { + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + skip$ + } + if$ + } + if$ + } + if$ + } + if$ + } + { + "" + } + if$ +} + + + +INTEGERS { field.series.emph } +FUNCTION {incoll.fields.series.number} +{ + author empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + compiler empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + editor empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + if$ + } + if$ + series empty$ not + { + field.series.emph #0 > + { + number empty$ not + { series emphasize " " * number * } + { series emphasize } + if$ + } + { + number empty$ not + { series " " * number * } + { series } + if$ + } + if$ + } + { + number empty$ not + { bbl.number capitalize "~" * number * } + { "" } + if$ + } + if$ +} + + + +FUNCTION {incoll.field.crossref} +{ + word.in " \cite{" * crossref * "}" * +} + + + +FUNCTION {article.field.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} + + + +FUNCTION {article.field.journal} +{ + journal remove.dots emphasize +} + + + +FUNCTION {article.fields.jour.issn.vol.num.pp} +{ + journal empty$ not + { + issue empty$ not + { issue bbl.comma * " " *} + { "" } + if$ + article.field.journal * + volume empty$ not + { + number empty$ not + { + pages empty$ not + { + " " * volume * "~" * + "(" * number * ")" * ": " * + pages * + } + { + " " * volume * bbl.comma * + " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + " " * volume * ": " * + pages * + } + { + " " * volume * + } + if$ + } + if$ + } + { + number empty$ not + { + pages empty$ not + { + bbl.comma * " " * bbl.number * "~" * number * ": " * + pages * + } + { + bbl.comma * " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + bbl.comma * " " * pages * + } + 'skip$ + if$ + } + if$ + } + if$ + } + { + "journal" output.check + } + if$ +} + + + +FUNCTION {article.fields.issn.vol.num.pp} +{ + journal empty$ not + { + issue empty$ not + { issue bbl.comma * " " *} + { "" } + if$ + volume empty$ not + { + number empty$ not + { + pages empty$ not + { + bbl.comma * " " * bbl.volume * "~" * volume * "~" * + "(" * number * ")" * ": " * + pages * + } + { + bbl.comma * " " * bbl.volume * "~" * volume * bbl.comma * + " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + bbl.comma * " " * bbl.volume * "~" * volume * ":~" * + pages * + } + { + bbl.comma * " " * bbl.volume * "~" * volume * + } + if$ + } + if$ + } + { + number empty$ not + { + pages empty$ not + { + bbl.number * "~" * number * ": " * + pages * + } + { + bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + pages * + } + 'skip$ + if$ + } + if$ + } + if$ + } + { + "journal" output.check + } + if$ +} + + + +FUNCTION {proc.fields.org.publisher.address} +{ + organization empty$ not + { + publisher empty$ not + { + address empty$ not + { + organization add.period$ + address * ": " * publisher * + } + { + organization add.period$ + publisher * + } + if$ + } + { + address empty$ not + { + organization + bbl.comma * " " * address * + } + { + organization + } + if$ + } + if$ + } + { + publisher empty$ not + { + address empty$ not + { address ": " * publisher *} + { publisher } + if$ + } + { + address empty$ not + { address } + { "" } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.fields.booktitle.volume.pages} +{ + booktitle empty$ not + { + volume empty$ not + { + volumes empty$ not + { + pages empty$ not + { + field.booktitle " " * + volume * ": " * pages * add.period$ + " " * volumes * "~" * bbl.volumes * + } + { + field.booktitle add.period$ + " " * bbl.volume * "~" * volume * bbl.of * " " * volumes * + } + if$ + } + { + pages empty$ not + { + field.booktitle " " * + volume * ": " * pages * + } + { + field.booktitle add.period$ + " " * bbl.volume * "~" * volume * + } + if$ + } + if$ + } + { + volumes empty$ not + { + pages empty$ not + { + field.booktitle " " * + bbl.comma * " " * pages * add.period$ + volumes * "~" * bbl.volumes + } + { + field.booktitle " " * add.period$ + " " * volumes * "~" * bbl.volumes * + } + if$ + } + { + pages empty$ not + { + field.booktitle " " * + bbl.comma * " " * pages * + } + { + field.booktitle + } + if$ + } + if$ + } + if$ + } + { + "" + } + if$ +} + + + +FUNCTION {inproc.fields.series.number} +{ + author empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + series empty$ not + { + field.series.emph #0 > + { + number empty$ not + { series emphasize " " * number * } + { series emphasize } + if$ + } + { + number empty$ not + { series " " * number * } + { series } + if$ + } + if$ + } + { + number empty$ not + { bbl.number capitalize "~" * number * } + { "" } + if$ + } + if$ +} + + + +FUNCTION {inproc.field.crossref} { incoll.field.crossref } + + + +FUNCTION {conf.fields.series.number.pages} +{ + series empty$ not + { + number empty$ not + { + pages empty$ not + { + series + bbl.comma * " " * bbl.number * "~" * number * + bbl.comma * " " * pages * + } + { + series + bbl.comma * " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + series + bbl.comma * " " * pages * + } + { series } + if$ + } + if$ + } + { "" } + if$ +} + + + +FUNCTION {conf.fields.org.publisher.address} { proc.fields.org.publisher.address } + + + +FUNCTION {thesis.field.type} +{ + type duplicate$ empty$ + 'pop$ + { + swap$ pop$ + "t" change.case$ "type" bibinfo.check + } + if$ +} + + + +FUNCTION {thesis.fields.school.type.address} +{ + type empty$ + { + type$ "mastersthesis" = + { bbl.mthesis "t" change.case$ } + { + type$ "phdthesis" = + { bbl.phdthesis "t" change.case$ } + { bbl.thesis "t" change.case$ } + if$ + } + if$ + school empty$ not + { + address empty$ not + { bbl.comma * " " * school * bbl.comma * " " * address * } + { bbl.comma * " " * school * } + if$ + } + { + address empty$ not + { bbl.comma * address * } + { add.period$ } + if$ + } + if$ + } + { + type "~" = + { + school empty$ not + { + address empty$ not + { school bbl.comma * " " * address * } + { school } + if$ + } + { + address empty$ not + { address } + { "" } + if$ + } + if$ + } + { + type + school empty$ not + { + address empty$ not + { bbl.comma * " " * school * bbl.comma * " " * address * } + { bbl.comma * " " * school * } + if$ + } + { + address empty$ not + { bbl.comma * address * } + { add.period$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {unpub.field.title} +{ + title empty$ not + { title bbl.dquote } + 'skip$ + if$ +} + + + +FUNCTION {misc.field.title} +{ + title empty$ not + { title } + 'skip$ + if$ +} + + + + + +% Functions to format entries based on type (compatible entries) + +FUNCTION {book} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { %%% if author field is empty, proceeds with compiler + compiler empty$ not + { + field.compiler output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.editor.editedby output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { %%% if author, and compiler fields are empty, proceeds with editor + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { %%% if author, compiler, and editor fields are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author, compiler, editor, and translator fields are empty, proceeds with key + key empty$ not + { + field.title.emph "title" output.check + name.or.dash + field.year extra.label * "year" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { + "author, compiler, editor, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {incollection} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + crossref missing$ + { + new.sentence field.by output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence incoll.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { %%% if author field is empty, proceeds with compiler + compiler empty$ not + { + field.compiler output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + crossref missing$ + { + new.sentence field.by output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence incoll.fields.series.number output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { %%% if author, and compiler fields are empty, proceeds with editor + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + crossref missing$ + { + new.sentence field.by output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence incoll.fields.series.number output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { %%% if author, compiler, and editor fields are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence incoll.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author, compiler, editor, and translator fields are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence incoll.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { + "author, compiler, editor, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {article} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence field.editor.editedby output + new.sentence article.fields.jour.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author is empty, proceeds with editor + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence article.fields.jour.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, and editor are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + crossref missing$ + { + new.sentence field.editor.editedby output + new.sentence article.fields.jour.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, editor, and translator are empty, proceeds with key + key empty$ not + { + article.field.journal output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence field.editor.editedby output + new.sentence article.fields.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { + "author, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {proceedings} +{ + begin.bibitem + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.compiler.compiledby output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if editor field is empty, proceeds with compiler + compiler empty$ not + { + field.compiler output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if editor, and compiler fields are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence book.fields.volume.series.number output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + key empty$ not + { + field.title.emph "title" output.check + name.or.dash + field.year extra.label * "year" output.check + new.block field.edition output + new.sentence field.impression output + new.sentence book.fields.volume.series.number output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + "editor, compiler, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {inproceedings} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence inproc.fields.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence inproc.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author field is empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.dqoute "title" output.check + new.sentence field.by output + new.sentence field.year output + crossref missing$ + { + new.sentence inproc.fields.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence inproc.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, and translator fields are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence inproc.fields.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence inproc.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { + "author, translator, and key" output.check + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {conference} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence conf.fields.series.number.pages output + new.sentence field.editor.editedby output + new.sentence conf.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author is empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.dqoute "title" output.check + new.sentence field.by output + new.sentence field.year output + crossref missing$ + { + new.sentence conf.fields.series.number.pages output + new.sentence field.editor.editedby output + new.sentence conf.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, and translator are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence conf.fields.series.number.pages output + new.sentence field.editor.editedby output + new.sentence conf.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { + "author, translator, and key" output.check + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {thesis} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence thesis.fields.school.type.address output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author is empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.comment output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { "author, and key" output.check } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {mastersthesis} { thesis } + + + +FUNCTION {phdthesis} { thesis } + + + +FUNCTION {unpublished} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block unpub.field.title output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence field.howpublished output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author is empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block unpub.field.title output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence field.howpublished output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author, and translator are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.comment output + new.sentence field.by output + new.sentence field.howpublished output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { "author, translator, and key" output.check } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {misc} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block misc.field.title output + new.sentence field.by output + new.sentence field.howpublished output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author is empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.by output + new.sentence field.howpublished output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { "author, and key" output.check } + if$ + } + if$ + end.bibitem +} + + + + + +% Functions to format entries based on type (incompatible entries) + +FUNCTION {booklet} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + field.author output + author format.key output + name.or.dash + field.year extra.label * "year" output.check + date.block + field.title "title" output.check + new.block + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + field.isbn output + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + +FUNCTION {inbook} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + author empty$ + { field.editor "author and editor" output.check + editor format.key output + name.or.dash + } + { field.author output.nonnull + name.or.dash + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + field.year extra.label * "year" output.check + date.block + field.btitle "title" output.check + crossref missing$ + { + field.bvolume output + fields.chapter.pages output%"chapter and pages" output.check + new.block + fields.number.series output + field.edition output + new.sentence + fields.publisher.address output + } + { + fields.chapter.pages "chapter and pages" output.check + new.block + book.field.crossref output.nonnull + } + if$ + crossref missing$ + { field.isbn output } + 'skip$ + if$ + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + +FUNCTION {manual} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + field.author output + author format.key output + name.or.dash + field.year extra.label * "year" output.check + date.block + field.btitle "title" output.check + organization address new.block.checkb + organization "organization" bibinfo.check output + address "address" bibinfo.check output + field.edition output + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + +FUNCTION {techreport} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + field.author "author" output.check + author format.key output + name.or.dash + field.year extra.label * "year" output.check + date.block + field.btitle + "title" output.check + new.block + fields.tr.number output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + + + +% Function to format entry if the type is not recognized + +FUNCTION {default.type} { misc } + + + + + + + + + + + + + + + + + + + + +% Reading bibliography database (.bib) file + +READ + + +% Function to generate a string that is suitable for sorting purposes + +FUNCTION {sortify} +{ + purify$ + "l" change.case$ +} + + + +% Length of the short name label of the entry + +INTEGERS { len } + +FUNCTION {chop.word} +{ + 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + + + + + +% Functions for sorting purposes + +FUNCTION {sort.format.names} +{ + 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { + namesleft #0 > + } + { + s nameptr + "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ + 't := + nameptr #1 > + { + " " * + namesleft #1 = + t "others" = + and + { "zzzzz" 't := } + 'skip$ + if$ + t sortify * + } + { + t sortify * + } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + + + +FUNCTION {sort.field.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 {editor.sort} +{ + editor empty$ + { + key empty$ + { + "to sort, need editor or key in " cite$ * warning$ + "" + } + { + key sortify + } + if$ + } + { + editor sort.format.names + } + if$ +} + + + +FUNCTION {book.sort} +{ + author empty$ not + { + author sort.format.names + } + { + compiler empty$ not + { + compiler sort.format.names + } + { + editor empty$ not + { + editor sort.format.names + } + { + translator empty$ not + { + translator sort.format.names + } + { + key empty$ not + { + key sortify + } + { + "to sort, need author, compiler, editor, translator, or key in " cite$ * warning$ + "" + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.sort} +{ + author empty$ not + { + author sort.format.names + } + { + compiler empty$ not + { + compiler sort.format.names + } + { + editor empty$ not + { + editor sort.format.names + } + { + translator empty$ not + { + translator sort.format.names + } + { + key empty$ not + { + key sortify + } + { + "to sort, need author, compiler, editor, translator, or key in " cite$ * warning$ + "" + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {article.sort} +{ + author empty$ not + { + author sort.format.names + } + { + editor empty$ not + { + editor sort.format.names + } + { + translator empty$ not + { + translator sort.format.names + } + { + key empty$ not + { + key sortify + } + { + "to sort, need author, editor, translator, or key in " cite$ * warning$ + "" + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {proc.sort} +{ + editor empty$ not + { editor sort.format.names } + { + compiler empty$ not + { compiler sort.format.names } + { + translator empty$ not + { translator sort.format.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.sort} +{ + author empty$ not + { author sort.format.names } + { + translator empty$ not + { translator sort.format.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {conf.sort} +{ + author empty$ not + { author sort.format.names } + { + translator empty$ not + { translator sort.format.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {presort} +{ + calc.label + label sortify + " " + * + type$ "book" = + 'book.sort + { + type$ "incollection" = + 'incoll.sort + { + type$ "article" = + 'article.sort + { + type$ "proceedings" = + 'proc.sort + { + type$ "inproceedings" = + 'inproc.sort + { + type$ "conference" = + 'conf.sort + { + type$ "inbook" = + 'author.editor.sort + 'author.sort + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + #1 entry.max$ substring$ + 'sort.label := + sort.label + * + " " + * + translateyear empty$ + { year field.or.null } + { + author empty$ not + { year field.or.null } + { + compiler empty$ not + { year field.or.null } + { + editor empty$ not + { year field.or.null } + { + translator empty$ not + { translateyear field.or.null } + { year field.or.null } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + * + " " + * + cite$ + * + #1 entry.max$ substring$ + 'sort.key$ := +} + + + + + +% Sort process + +ITERATE {presort} + +SORT + + + +STRINGS { last.label next.extra } + +INTEGERS { last.extra.num last.extra.num.extended last.extra.num.blank number.label } + +FUNCTION {initialize.extra.label.stuff} +{ + #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'last.extra.num := + "a" chr.to.int$ #1 - 'last.extra.num.blank := + last.extra.num.blank 'last.extra.num.extended := + #0 'number.label := +} + + + +FUNCTION {forward.pass} +{ + last.label label = + { + last.extra.num #1 + 'last.extra.num := + last.extra.num "z" chr.to.int$ > + { + "a" chr.to.int$ 'last.extra.num := + last.extra.num.extended #1 + 'last.extra.num.extended := + } + 'skip$ + if$ + last.extra.num.extended last.extra.num.blank > + { + last.extra.num.extended int.to.chr$ + last.extra.num int.to.chr$ + * 'extra.label := + } + { + last.extra.num int.to.chr$ 'extra.label := + } + if$ + } + { + "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ + number.label #1 + 'number.label := +} + + + +FUNCTION {reverse.pass} +{ + next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + extra.label 'next.extra := + extra.label duplicate$ empty$ + 'skip$ + { + "{\extrayearlabelen{" swap$ * "}}" * + } + if$ + 'extra.label := + label extra.label * 'label := +} + + + +EXECUTE {initialize.extra.label.stuff} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + + + +FUNCTION {bib.sort.order} +{ + sort.label + " " + * + translateyear empty$ + { year field.or.null sortify } + { + author empty$ not + { year field.or.null sortify } + { + compiler empty$ not + { year field.or.null sortify } + { + editor empty$ not + { year field.or.null sortify } + { + translator empty$ not + { translateyear field.or.null sortify } + { year field.or.null sortify } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + swap$ + * + " " + * + cite$ + * + #1 entry.max$ substring$ + 'sort.key$ := +} + + + +ITERATE {bib.sort.order} + +SORT + + + + +% Functions to create bibliography +FUNCTION {begin.bib} +{ + preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" write$ + newline$ + "% Generated by `iranlatin-year.bst`." write$ + newline$ + "% This bibliography style is part of the `iran-bibtex` package." write$ + newline$ + "% Copyright (c) 2023-2024 Farshad Rasuli " write$ + newline$ + "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" write$ + newline$ + newline$ + newline$ + "\begin{thebibliography}{" number.label int.to.str$ * "}" * 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 file `iranlatin-year.bst'. \ No newline at end of file diff --git a/biblio/bibtex/contrib/iran-bibtex/iranlatin.bst b/biblio/bibtex/contrib/iran-bibtex/iranlatin.bst new file mode 100644 index 0000000000..d56034edad --- /dev/null +++ b/biblio/bibtex/contrib/iran-bibtex/iranlatin.bst @@ -0,0 +1,4637 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% +%% This file is “iranlatin.bst”, v0.1.0 (2024/01/8) +%% created by modifying “iran.bst” file in accordance with the +%% “Iran Manual of Style Citation Guide” (1st edn., 2016) to support +%% English/Latin only. +%% +%% +%% +%% Copyright (c) 2023-2024 Farshad Rasuli +%% +%% This file can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License version 1.3c, or any later version. +%% The latest version of the License is at: latex-project.org/lppl.txt +%% +%% This BibTeX bibliography style (bst) file is part of +%% the “iran-bibtex” package. +%% +%% CTAN catalog: https://ctan.org/pkg/iran-bibtex +%% CTAN archive: https://ctan.org/tex-archive/biblio/bibtex/contrib/iran-bibtex +%% Repository: https://github.com/farshadrasuli/iran-bibtex +%% Bug tracker: https://github.com/farshadrasuli/iran-bibtex/issues +%% +%% +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +%%----------------------------------------------------------------------------- +%% This bibliography style file is intended for texts in ENGLISH. +%% This is an author-year citation style bibliography. This style file is +%% based on natbib.sty package by Patrick W. Daly. +%% The form of the \bibitem entries is +%% \bibitem[Jones et al.(1990)]{key}... +%% \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... +%% The essential feature is that the label (the part in brackets) consists +%% of the author names, as they should appear in the citation, with the year +%% in parentheses following. There must be no space before the opening +%% parenthesis! +%% +%% The \cite command functions as follows (\cite is equal to \citep command): +%% \citep{key} => (Jones et al., 1990) +%% \citep*{key} => (Jones, Baker, and Smith, 1990) +%% \citep[chap. 2]{key} => (Jones et al., 1990, chap. 2) +%% \citep[e.g.][]{key} => (e.g. Jones et al., 1990) +%% \citep[e.g.][p. 32]{key} => (e.g. Jones et al., 1990, p. 32) +%% \citet{key} => Jones et al. (1990) +%% \citet*{key} => Jones, Baker, and Smith (1990) +%% \citeauthor{key} => Jones et al. +%% \citeauthor*{key} => Jones, Baker, and Smith +%% \citeyear{key} => 1990 +%%----------------------------------------------------------------------------- + + + +ENTRY +{ + address + afterword % the added field + archive + author + booktitle + by % the added field + chapter + collaboration + comment % the added field + commentator % the added field + compiler % the added field + doi + edition + editor + eid + eprint + foreword % the added field + howpublished + impression % the added field + institution + introduction % the added field + isbn + issn + issue % the added field + journal + key + language + month + note + number + numpages + organization + pages + preface % the added field + publisher + school + series + title + translator % the added field + translateyear % the added field + type + url + urldate % the added field + volume + volumes % the added field + year +} +{} +{ + label + extra.label + sort.label + short.list +} + + + + + +% Logical operators + +FUNCTION {not} +{ + { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ + 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ + { pop$ #1 } + 'skip$ + if$ +} + + + + + +% Here are the language-specific definitions for explicit words. +% Each function has a name bbl.xxx where xxx is the English word. + +FUNCTION {bbl.afterwordby} +{ "afterword by" } + +FUNCTION {bbl.and} +{ "and" } + +FUNCTION {bbl.andothers} +{ "and~others" } + +FUNCTION {bbl.by} +{ "by" } + +FUNCTION {bbl.chapter} +{ "chapter" } + +FUNCTION {bbl.comma} +{ "," } + +FUNCTION {bbl.commentator} +{ "comm." } + +FUNCTION {bbl.commentatedby} +{ "commentated by" } + +FUNCTION {bbl.compiler} +{ "comp." } + +FUNCTION {bbl.compilers} +{ "comps." } + +FUNCTION {bbl.compiledby} +{ "compiled by" } + +FUNCTION {bbl.doi} +{ "doi" } + +FUNCTION {bbl.dquote} +{ "\enquote{" swap$ * add.period$ "}" * } + +FUNCTION {bbl.editor} +{ "ed." } + +FUNCTION {bbl.editors} +{ "eds." } + +FUNCTION {bbl.editedby} +{ "edited by" } + +FUNCTION {bbl.edition} +{ "edn." } + +FUNCTION {bbl.eidpp} +{ "pages" } + +FUNCTION {bbl.etal} +{ "et~al." } + +FUNCTION {bbl.forewordby} +{ "forword by" } + +FUNCTION {bbl.impression} +{ "imp." } + +FUNCTION {bbl.in} +{ "in" } + +FUNCTION {bbl.incollaborationwith} +{ "in collaboration with" } + +FUNCTION {bbl.introby} +{ "introduction by" } + +FUNCTION {bbl.isbn} +{ "isbn" } + +FUNCTION {bbl.issn} +{ "issn" } + +FUNCTION {bbl.mthesis} +{ "Master's thesis" } + +FUNCTION {bbl.nr} +{ "no." } + +FUNCTION {bbl.number} +{ "no." } + +FUNCTION {bbl.of} +{ "of" } + +FUNCTION {bbl.page} +{ "p." } + +FUNCTION {bbl.pages} +{ "pp." } + +FUNCTION {bbl.prefaceby} +{ "preface by" } + +FUNCTION {bbl.phdthesis} +{ "PhD dissertation" } + +FUNCTION {bbl.retrieved} +{ "retrieved" } + +FUNCTION {bbl.semicolon} +{ ";" } + +FUNCTION {bbl.techrep} +{ "tech. rep." } + +FUNCTION {bbl.thesis} +{ "Thesis" } + +FUNCTION {bbl.translator} +{ "trans." } + +FUNCTION {bbl.translators} +{ "trans." } + +FUNCTION {bbl.translatedby} +{ "translated by" } + +FUNCTION {bbl.url} +{ "url" } + +FUNCTION {bbl.volume} +{ "vol." } + +FUNCTION {bbl.volumes} +{ "vols." } + + + + + +% Macro for abbreviation of month + +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"} + + + + + +% Functions to declare position + +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 := +} + + + +% Functions to print output + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ + 's := + output.state mid.sentence = + { bbl.comma * " " * write$ } + { + output.state after.block = + { + add.period$ write$ + newline$ + "\newblock " write$ + } + { + output.state before.all = + 'write$ + { add.period$ write$ " " 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$ +} + + + + + +% Functions to check and warn bibinfo + +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 {either.or.check} +{ + empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + + + + + +% Functions to control the print format of entries + +FUNCTION {new.block} +{ + output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + + + +FUNCTION {new.block.checkb} +{ + empty$ + swap$ empty$ + and + 'skip$ + 'new.block + 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 {capitalize} +{ "u" change.case$ "t" change.case$ } + + + +FUNCTION {date.block} +{ + new.block +} + + + +FUNCTION {emphasize} +{ + duplicate$ empty$ + { pop$ "" } + { "{\it " swap$ * "}" * } + if$ +} + + + +FUNCTION {field.or.null} +{ + duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + + + +FUNCTION {no.blank.or.punct} +{ + "\hspace{0pt}" * before.all 'output.state := +} + + + +FUNCTION {non.stop} +{ + duplicate$ + "}" * add.period$ + #-1 #1 substring$ "." = +} + + + +STRINGS {z} + +FUNCTION {remove.dots} +{ + 'z := + "" + { + z empty$ not + } + { + z #1 #2 substring$ + duplicate$ "\." = + { + z #3 global.max$ substring$ 'z := * + } + { + pop$ + z #1 #1 substring$ + z #2 global.max$ substring$ 'z := + duplicate$ "." = + 'pop$ + { * } + if$ + } + if$ + } + while$ +} + + + +FUNCTION {separate.by.space} +{ " " swap$ * " " * } + + + +FUNCTION {space.word} +{ " " swap$ * " " * } + + + +FUNCTION {tie.or.space.prefix} +{ + duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ +} + + + +FUNCTION {word.in} +{ + output.state mid.sentence = + { bbl.in " " * } + { bbl.in capitalize " " * } + if$ +} + + + + + +% Functions to format names + +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 + duplicate$ #1 > + { "{ff~}{vv~}{ll}{, jj}" } + { "{vv~}{ll}{, ff}{, jj}" } + if$ + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + namesleft #1 > + { + bbl.comma * " " * t * + } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + bbl.comma * + t "others" = + { + " " * bbl.etal * + } + { + bbl.and + separate.by.space * 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 + "{ff~}{vv~}{ll}{, jj}" + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + namesleft #1 > + { + bbl.comma * " " * t * + } + { + s nameptr "{ll}" format.name$ + duplicate$ "others" = + { 't := } + { pop$ } + if$ + bbl.comma * + t "others" = + { + + " " * bbl.etal * + } + { + bbl.and + separate.by.space * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } + if$ +} + + + +FUNCTION {format.key} +{ + empty$ + { key field.or.null } + { "" } + if$ +} + + + +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$ +} + + + +STRINGS {oldname} + +FUNCTION {name.or.dash} +{ + 's := + oldname empty$ + { s 'oldname := s } + { + s oldname = + { "---{}---{}---" } + { s 'oldname := s } + if$ + } + if$ +} + + + + + +% Functions to create the short name label for the entry + +FUNCTION {format.short.label.names} +{ + 's := + "" 't := + s #1 "{vv~}{ll}" format.name$ + s num.names$ #3 > + { + " " * bbl.etal * + } + { + s num.names$ #2 < + 'skip$ + { + s num.names$ #3 < + { + s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + " " * bbl.etal * + } + { + bbl.comma * bbl.and separate.by.space * s #2 "{vv~}{ll}" format.name$ * + } + if$ + } + { + s #3 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + " " * bbl.etal * + } + { + bbl.comma * " " * s #2 "{vv~}{ll}" format.name$ * + bbl.comma * bbl.and separate.by.space * s #3 "{vv~}{ll}" format.name$ * + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {author.key.short.label.names} +{ + author empty$ not + { author format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ +} + + + +FUNCTION {author.editor.key.short.label.names} +{ + author empty$ not + { author format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {editor.key.short.label.names} +{ + editor empty$ not + { editor format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ +} + + + +FUNCTION {book.short.label.names} +{ + author empty$ not + { author format.short.label.names } + { + compiler empty$ not + { compiler format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.short.label.names} +{ + author empty$ not + { author format.short.label.names } + { + compiler empty$ not + { compiler format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {article.short.label.names} +{ + author empty$ not + { author format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {proc.short.label.names} +{ + editor empty$ not + { editor format.short.label.names } + { + compiler empty$ not + { compiler format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.short.label.names} +{ + author empty$ not + { author format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {conf.short.label.names} +{ + author empty$ not + { author format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {make.short.label.names} +{ + type$ "book" = + 'book.short.label.names + { + type$ "incollection" = + 'incoll.short.label.names + { + type$ "article" = + 'article.short.label.names + { + type$ "proceedings" = + 'proc.short.label.names + { + type$ "inproceedings" = + 'inproc.short.label.names + { + type$ "conference" = + 'conf.short.label.names + { + type$ "inbook" = + 'author.editor.key.short.label.names + 'author.key.short.label.names + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + 'short.list := +} + + + + + +% Functions to create the full name label for the entry + +FUNCTION {format.full.label.names} +{ + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { + namesleft #0 > + } + { + s nameptr + "{vv~}{ll}" format.name$ + 't := + nameptr #1 > + { + namesleft #1 > + { + bbl.comma * " " * t * + } + { + s nameptr "{ll}" format.name$ + duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + } + { + numnames #2 > + { bbl.comma * } + 'skip$ + if$ + bbl.and + separate.by.space * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + + + +FUNCTION {author.key.full.label.names} +{ + author empty$ not + { author format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ +} + + + +FUNCTION {author.editor.key.full.label.names} +{ + author empty$ not + { author format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {editor.key.full.label.names} +{ + editor empty$ not + { editor format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ +} + + + +FUNCTION {book.full.label.names} +{ + author empty$ not + { author format.full.label.names } + { + compiler empty$ not + { compiler format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.full.label.names} +{ + author empty$ not + { author format.full.label.names } + { + compiler empty$ not + { compiler format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {article.full.label.names} +{ + author empty$ not + { author format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {proc.full.label.names} +{ + editor empty$ not + { editor format.full.label.names } + { + compiler empty$ not + { compiler format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.full.label.names} +{ + author empty$ not + { author format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {conf.full.label.names} +{ + author empty$ not + { author format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {make.full.label.names} +{ + type$ "book" = + 'book.full.label.names + { + type$ "incollection" = + 'incoll.full.label.names + { + type$ "article" = + 'article.full.label.names + { + type$ "proceedings" = + 'proc.full.label.names + { + type$ "inproceedings" = + 'inproc.full.label.names + { + type$ "conference" = + 'conf.full.label.names + { + type$ "inbook" = + 'author.editor.key.full.label.names + 'author.key.full.label.names + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + + + +% Functions to create the label of the entry + +FUNCTION {calc.label} +{ + make.short.label.names + short.list "(" * + translateyear empty$ + { + year duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + } + { + author empty$ not + { + year duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + } + { + compiler empty$ not + { + year duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + } + { + editor empty$ not + { + year duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + } + { + translateyear duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + } + if$ + } + if$ + } + if$ + } + if$ + * + 'label := +} + + + + + +% Functions to open, and close the bibitem + +FUNCTION {begin.bibitem} +{ + newline$ + "\bibitem[{" write$ + label write$ + ")" + make.full.label.names duplicate$ short.list = + { pop$ } + { * } + if$ + "}]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + + + +FUNCTION {end.bibitem} +{ + add.period$ write$ + newline$ +} + + + + + +% Functions to format fields + +FUNCTION {field.afterword} +{ + afterword empty$ not + { + afterword "afterword" format.names.ed + bbl.afterwordby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.author} +{ author "author" format.names } + + + +FUNCTION {field.booktitle} +{ + booktitle "booktitle" bibinfo.check + emphasize +} + + + +FUNCTION {field.by} +{ + by empty$ not + { + by "by" format.names.ed + bbl.by " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.collaboration} +{ + collaboration empty$ not + { + collaboration "collaboration" format.names.ed + bbl.incollaborationwith capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.comment} +{ + comment +} + + + +FUNCTION {field.commentator} +{ + commentator empty$ not + { + commentator "commentator" format.names.ed + bbl.commentatedby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {get.bbl.compiler} +{ + compiler num.names$ #1 > + 'bbl.compilers + 'bbl.compiler + if$ +} + +FUNCTION {field.compiler} +{ + compiler "compiler" format.names + duplicate$ empty$ + 'skip$ + { + bbl.comma * " " * get.bbl.compiler * + } + if$ +} + + + +FUNCTION {field.compiler.compiledby} +{ + compiler empty$ not + { + compiler "compiler" format.names.ed + bbl.compiledby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.doi} +{ + doi empty$ + { "" } + { + bbl.doi "u" change.case$ ":\doi{" * doi * "}" * + } + if$ +} + + + +FUNCTION {field.edition} +{ + edition duplicate$ empty$ + 'skip$ + { + output.state mid.sentence = + { "l" } + { "t" } + if$ + change.case$ + "edition" bibinfo.check + " " * bbl.edition * + } + if$ +} + + + +FUNCTION {get.bbl.editor} +{ + editor num.names$ #1 > + 'bbl.editors + 'bbl.editor + if$ +} + +FUNCTION {field.editor} +{ + editor "editor" format.names + duplicate$ empty$ + 'skip$ + { + bbl.comma * " " * get.bbl.editor * + } + if$ +} + + + +FUNCTION {field.editor.editedby} +{ + editor empty$ not + { + editor "editor" format.names.ed + bbl.editedby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.eprint} +{ + eprint duplicate$ empty$ + 'skip$ + { + "\eprint" + archive empty$ + 'skip$ + { "[" * archive * "]" * } + if$ + "{" * swap$ * "}" * + } + if$ +} + + + +FUNCTION {field.howpublished} +{ + howpublished +} + + + +FUNCTION {field.impression} +{ + impression duplicate$ empty$ not + { + output.state mid.sentence = + { "l" } + { "t" } + if$ + change.case$ + " " * bbl.impression * + } + 'skip$ + if$ +} + + + +FUNCTION {field.introduction} +{ + introduction empty$ not + { + introduction "introduction" format.names.ed + bbl.introby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.isbn} +{ + isbn "isbn" bibinfo.check + duplicate$ empty$ + 'skip$ + { + bbl.isbn "u" change.case$ ": " * swap$ * + } + if$ +} + + + +FUNCTION {field.issn} +{ + issn "issn" bibinfo.check + duplicate$ empty$ + 'skip$ + { + bbl.issn "u" change.case$ ": " * swap$ * + } + if$ +} + + + +FUNCTION {field.note} +{ + note empty$ not + { + 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 {field.organization} +{ + organization "organization" bibinfo.check +} + + + +INTEGERS { multiresult } + +FUNCTION {field.pages.check.multipage} +{ + '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 {field.pages} +{ + pages duplicate$ empty$ + 'skip$ + { + duplicate$ field.pages.check.multipage + { + n.dashify + } + { + } + if$ + "pages" bibinfo.check + } + if$ +} + + + +FUNCTION {field.preface} +{ + preface empty$ not + { + preface "preface" format.names.ed + bbl.prefaceby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.title} +{ + title + duplicate$ empty$ + 'skip$ + { bbl.dquote } + if$ +} + + + +FUNCTION {field.btitle} +{ + title "title" bibinfo.check + duplicate$ empty$ + 'skip$ + { emphasize } + if$ +} + + + +FUNCTION {field.title.dqoute} +{ + title + duplicate$ empty$ + 'skip$ + { bbl.dquote } + if$ +} + + + +FUNCTION {field.title.emph} +{ + title "title" bibinfo.check + duplicate$ empty$ + 'skip$ + { emphasize } + if$ +} + + + +FUNCTION {get.bbl.translator} +{ + translator num.names$ #1 > + 'bbl.translators + 'bbl.translator + if$ +} + +FUNCTION {field.translator} +{ + translator "translator" format.names + duplicate$ empty$ + 'skip$ + { + bbl.comma * " " * get.bbl.translator * + } + if$ +} + + +FUNCTION {field.translateyear} +{ + translateyear empty$ not + { + translateyear + } + { "" } + if$ + before.all 'output.state := + after.sentence 'output.state := +} + + + +FUNCTION {field.translator.translatedby} +{ + translator empty$ not + { + translator "translator" format.names.ed + bbl.translatedby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.url} +{ + url duplicate$ empty$ + { pop$ "" } + { + bbl.url "u" change.case$ ": \url{" * swap$ * "}" * + } + if$ +} + + + +FUNCTION {field.urldate} +{ + urldate duplicate$ empty$ + { pop$ "" } + { bbl.retrieved capitalize " " * swap$ * } + if$ +} + + + +FUNCTION {field.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 {field.year} +{ + year "year" bibinfo.check + duplicate$ empty$ + { + } + 'skip$ + if$ + before.all 'output.state := + after.sentence 'output.state := +} + + + +FUNCTION {in.ed.field.booktitle} % NOT USED +{ + field.booktitle + duplicate$ empty$ + 'skip$ + { + field.bvolume + duplicate$ empty$ + 'pop$ + { bbl.comma " " * swap$ * * } + if$ + editor "editor" format.names.ed + duplicate$ empty$ + 'pop$ + { + bbl.editedby capitalize " " * swap$ * + swap$ + add.period$ " " * swap$ * + } + if$ + word.in swap$ * + } + if$ +} + + + + + +% Functions to format combined fields + +FUNCTION {fields.journal.pages} +{ + pages duplicate$ empty$ 'pop$ + { + swap$ duplicate$ empty$ + { + pop$ pop$ field.pages + } + { + ": " * + swap$ + n.dashify + "pages" bibinfo.check + * + } + if$ + } + if$ +} + + + +FUNCTION {fields.journal.eid} +{ + eid "eid" bibinfo.check + duplicate$ empty$ + 'pop$ + { + swap$ + duplicate$ empty$ + 'skip$ + { + ": " * + } + if$ + swap$ * + numpages empty$ + 'skip$ + { + bbl.eidpp numpages tie.or.space.prefix + "numpages" bibinfo.check * * + " (" swap$ * ")" * * + } + if$ + } + if$ +} + + +FUNCTION {fields.number.series} +{ + volume empty$ + { + number empty$ + { series field.or.null } + { + series empty$ + { number "number" bibinfo.check } + { + output.state mid.sentence = + { bbl.number } + { bbl.number capitalize } + if$ + number tie.or.space.prefix "number" bibinfo.check * * + bbl.in space.word * + series "series" bibinfo.check * + } + if$ + } + if$ + } + { "" } + if$ +} + + + +FUNCTION {fields.org.or.pub} +{ + 't := + "" + address empty$ t empty$ and + 'skip$ + { + address "address" bibinfo.check * + t empty$ + 'skip$ + { + address empty$ + 'skip$ + { ": " * } + if$ + t * + } + if$ + } + if$ +} + + + +FUNCTION {fields.publisher.address} +{ + publisher "publisher" bibinfo.check fields.org.or.pub +} + + + +FUNCTION {fields.organization.address} +{ + organization "organization" bibinfo.check fields.org.or.pub +} + + + +FUNCTION {fields.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 {fields.vol.num.pages} +{ + volume field.or.null + duplicate$ empty$ + 'skip$ + { + "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$ + { fields.journal.pages } + { fields.journal.eid } + if$ +} + + + +FUNCTION {fields.chapter.pages} +{ + chapter empty$ + 'field.pages + { + type empty$ + { bbl.chapter } + { + type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter tie.or.space.prefix + "chapter" bibinfo.check + * * + pages empty$ + 'skip$ + { bbl.comma * " " * field.pages * } + if$ + } + if$ +} + + + + + +% Functions to format combined fields for specific entry + +FUNCTION {book.field.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 separate.by.space * + } + if$ + " \cite{" * crossref * "}" * +} + + + +FUNCTION {book.fields.volume.series.number} +{ + volume empty$ not + { + volumes empty$ not + { + series empty$ not + { + number empty$ not + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + " " * series emphasize * + " " * number * + } + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + " " * series emphasize * + } + if$ + } + { + number empty$ not + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + " " * bbl.number * "~" * number * + } + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * + } + if$ + } + if$ + } + { + series empty$ not + { + number empty$ not + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * series emphasize * + " " * number * + } + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * series emphasize * + } + if$ + } + { + number empty$ not + { + bbl.volume capitalize "~" * volume * add.period$ + " " * bbl.number * "~" * number * + } + { + bbl.volume capitalize "~" * volume * add.period$ + } + if$ + } + if$ + } + if$ + } + { + volumes empty$ not + { + series empty$ not + { + number empty$ not + { + volumes "~" * bbl.volumes * add.period$ + " " * series * + " " * number * + } + { + volumes "~" * bbl.volumes * add.period$ + " " * series * + } + if$ + } + { + number empty$ not + { + volumes "~" * bbl.volumes * add.period$ + " " * bbl.number * "~" * number * + } + { + volumes "~" * bbl.volumes * add.period$ + } + if$ + } + if$ + } + { + series empty$ not + { + number empty$ not + { + series + " " * number * + } + { + series + } + if$ + } + { + number empty$ not + { + bbl.number "~" * number * + } + { + "" + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.fields.chapter.booktitle.volume.pages} +{ + booktitle empty$ not + { + chapter empty$ not + { + bbl.chapter capitalize "~" * chapter * + " " * bbl.in * " " * field.booktitle * + pages empty$ not + { + bbl.comma * " " * pages * add.period$ + } + { + add.period$ + } + if$ + volume empty$ not + { + volumes empty$ not + { + " " * bbl.volume capitalize * "~" * volume * " " * bbl.of * " " * volumes * add.period$ + } + { + " " * bbl.volume capitalize * "~" * volume * add.period$ + } + if$ + } + { + volumes empty$ not + { + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + skip$ + } + if$ + } + if$ + } + { + word.in field.booktitle * + pages empty$ not + { + volume empty$ not + { + volumes empty$ not + { + " " * volume * ": " * pages * add.period$ + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + " " * volume * ": " * pages * add.period$ + } + if$ + } + { + volumes empty$ not + { + bbl.comma * " " * pages * add.period$ + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + bbl.comma * " " * pages * add.period$ + } + if$ + } + if$ + } + { + add.period$ + volume empty$ not + { + volumes empty$ not + { + " " * bbl.volume capitalize * "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + } + { + " " * bbl.volume capitalize * "~" * volume * add.period$ + } + if$ + } + { + volumes empty$ not + { + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + skip$ + } + if$ + } + if$ + } + if$ + } + if$ + } + { + "" + } + if$ +} + + + +INTEGERS { field.series.emph } +FUNCTION {incoll.fields.series.number} +{ + author empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + compiler empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + editor empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + if$ + } + if$ + series empty$ not + { + field.series.emph #0 > + { + number empty$ not + { series emphasize " " * number * } + { series emphasize } + if$ + } + { + number empty$ not + { series " " * number * } + { series } + if$ + } + if$ + } + { + number empty$ not + { bbl.number capitalize "~" * number * } + { "" } + if$ + } + if$ +} + + + +FUNCTION {incoll.field.crossref} +{ + word.in " \cite{" * crossref * "}" * +} + + + +FUNCTION {article.field.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} + + + +FUNCTION {article.field.journal} +{ + journal remove.dots emphasize +} + + + +FUNCTION {article.fields.jour.issn.vol.num.pp} +{ + journal empty$ not + { + issue empty$ not + { issue bbl.comma * " " *} + { "" } + if$ + article.field.journal * + volume empty$ not + { + number empty$ not + { + pages empty$ not + { + " " * volume * "~" * + "(" * number * ")" * ": " * + pages * + } + { + " " * volume * bbl.comma * + " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + " " * volume * ": " * + pages * + } + { + " " * volume * + } + if$ + } + if$ + } + { + number empty$ not + { + pages empty$ not + { + bbl.comma * " " * bbl.number * "~" * number * ": " * + pages * + } + { + bbl.comma * " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + bbl.comma * " " * pages * + } + 'skip$ + if$ + } + if$ + } + if$ + } + { + "journal" output.check + } + if$ +} + + + +FUNCTION {article.fields.issn.vol.num.pp} +{ + journal empty$ not + { + issue empty$ not + { issue bbl.comma * " " *} + { "" } + if$ + volume empty$ not + { + number empty$ not + { + pages empty$ not + { + bbl.comma * " " * bbl.volume * "~" * volume * "~" * + "(" * number * ")" * ": " * + pages * + } + { + bbl.comma * " " * bbl.volume * "~" * volume * bbl.comma * + " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + bbl.comma * " " * bbl.volume * "~" * volume * ":~" * + pages * + } + { + bbl.comma * " " * bbl.volume * "~" * volume * + } + if$ + } + if$ + } + { + number empty$ not + { + pages empty$ not + { + bbl.number * "~" * number * ": " * + pages * + } + { + bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + pages * + } + 'skip$ + if$ + } + if$ + } + if$ + } + { + "journal" output.check + } + if$ +} + + + +FUNCTION {proc.fields.org.publisher.address} +{ + organization empty$ not + { + publisher empty$ not + { + address empty$ not + { + organization add.period$ + address * ": " * publisher * + } + { + organization add.period$ + publisher * + } + if$ + } + { + address empty$ not + { + organization + bbl.comma * " " * address * + } + { + organization + } + if$ + } + if$ + } + { + publisher empty$ not + { + address empty$ not + { address ": " * publisher *} + { publisher } + if$ + } + { + address empty$ not + { address } + { "" } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.fields.booktitle.volume.pages} +{ + booktitle empty$ not + { + volume empty$ not + { + volumes empty$ not + { + pages empty$ not + { + field.booktitle " " * + volume * ": " * pages * add.period$ + " " * volumes * "~" * bbl.volumes * + } + { + field.booktitle add.period$ + " " * bbl.volume * "~" * volume * bbl.of * " " * volumes * + } + if$ + } + { + pages empty$ not + { + field.booktitle " " * + volume * ": " * pages * + } + { + field.booktitle add.period$ + " " * bbl.volume * "~" * volume * + } + if$ + } + if$ + } + { + volumes empty$ not + { + pages empty$ not + { + field.booktitle " " * + bbl.comma * " " * pages * add.period$ + volumes * "~" * bbl.volumes + } + { + field.booktitle " " * add.period$ + " " * volumes * "~" * bbl.volumes * + } + if$ + } + { + pages empty$ not + { + field.booktitle " " * + bbl.comma * " " * pages * + } + { + field.booktitle + } + if$ + } + if$ + } + if$ + } + { + "" + } + if$ +} + + + +FUNCTION {inproc.fields.series.number} +{ + author empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + series empty$ not + { + field.series.emph #0 > + { + number empty$ not + { series emphasize " " * number * } + { series emphasize } + if$ + } + { + number empty$ not + { series " " * number * } + { series } + if$ + } + if$ + } + { + number empty$ not + { bbl.number capitalize "~" * number * } + { "" } + if$ + } + if$ +} + + + +FUNCTION {inproc.field.crossref} { incoll.field.crossref } + + + +FUNCTION {conf.fields.series.number.pages} +{ + series empty$ not + { + number empty$ not + { + pages empty$ not + { + series + bbl.comma * " " * bbl.number * "~" * number * + bbl.comma * " " * pages * + } + { + series + bbl.comma * " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + series + bbl.comma * " " * pages * + } + { series } + if$ + } + if$ + } + { "" } + if$ +} + + + +FUNCTION {conf.fields.org.publisher.address} { proc.fields.org.publisher.address } + + + +FUNCTION {thesis.field.type} +{ + type duplicate$ empty$ + 'pop$ + { + swap$ pop$ + "t" change.case$ "type" bibinfo.check + } + if$ +} + + + +FUNCTION {thesis.fields.school.type.address} +{ + type empty$ + { + type$ "mastersthesis" = + { bbl.mthesis "t" change.case$ } + { + type$ "phdthesis" = + { bbl.phdthesis "t" change.case$ } + { bbl.thesis "t" change.case$ } + if$ + } + if$ + school empty$ not + { + address empty$ not + { bbl.comma * " " * school * bbl.comma * " " * address * } + { bbl.comma * " " * school * } + if$ + } + { + address empty$ not + { bbl.comma * address * } + { add.period$ } + if$ + } + if$ + } + { + type "~" = + { + school empty$ not + { + address empty$ not + { school bbl.comma * " " * address * } + { school } + if$ + } + { + address empty$ not + { address } + { "" } + if$ + } + if$ + } + { + type + school empty$ not + { + address empty$ not + { bbl.comma * " " * school * bbl.comma * " " * address * } + { bbl.comma * " " * school * } + if$ + } + { + address empty$ not + { bbl.comma * address * } + { add.period$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {unpub.field.title} +{ + title empty$ not + { title bbl.dquote } + 'skip$ + if$ +} + + + +FUNCTION {misc.field.title} +{ + title empty$ not + { title } + 'skip$ + if$ +} + + + + + +% Functions to format entries based on type (compatible entries) + +FUNCTION {book} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { %%% if author field is empty, proceeds with compiler + compiler empty$ not + { + field.compiler output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.editor.editedby output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { %%% if author, and compiler fields are empty, proceeds with editor + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { %%% if author, compiler, and editor fields are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author, compiler, editor, and translator fields are empty, proceeds with key + key empty$ not + { + field.title.emph "title" output.check + name.or.dash + field.year extra.label * "year" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { + "author, compiler, editor, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {incollection} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + crossref missing$ + { + new.sentence field.by output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence incoll.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { %%% if author field is empty, proceeds with compiler + compiler empty$ not + { + field.compiler output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + crossref missing$ + { + new.sentence field.by output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence incoll.fields.series.number output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { %%% if author, and compiler fields are empty, proceeds with editor + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + crossref missing$ + { + new.sentence field.by output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence incoll.fields.series.number output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { %%% if author, compiler, and editor fields are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence incoll.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author, compiler, editor, and translator fields are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence incoll.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { + "author, compiler, editor, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {article} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence field.editor.editedby output + new.sentence article.fields.jour.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author is empty, proceeds with editor + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence article.fields.jour.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, and editor are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + crossref missing$ + { + new.sentence field.editor.editedby output + new.sentence article.fields.jour.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, editor, and translator are empty, proceeds with key + key empty$ not + { + article.field.journal output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence field.editor.editedby output + new.sentence article.fields.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { + "author, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {proceedings} +{ + begin.bibitem + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.compiler.compiledby output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if editor field is empty, proceeds with compiler + compiler empty$ not + { + field.compiler output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if editor, and compiler fields are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence book.fields.volume.series.number output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + key empty$ not + { + field.title.emph "title" output.check + name.or.dash + field.year extra.label * "year" output.check + new.block field.edition output + new.sentence field.impression output + new.sentence book.fields.volume.series.number output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + "editor, compiler, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {inproceedings} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence inproc.fields.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence inproc.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author field is empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.dqoute "title" output.check + new.sentence field.by output + new.sentence field.year output + crossref missing$ + { + new.sentence inproc.fields.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence inproc.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, and translator fields are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence inproc.fields.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence inproc.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { + "author, translator, and key" output.check + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {conference} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence conf.fields.series.number.pages output + new.sentence field.editor.editedby output + new.sentence conf.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author is empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.dqoute "title" output.check + new.sentence field.by output + new.sentence field.year output + crossref missing$ + { + new.sentence conf.fields.series.number.pages output + new.sentence field.editor.editedby output + new.sentence conf.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, and translator are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence conf.fields.series.number.pages output + new.sentence field.editor.editedby output + new.sentence conf.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { + "author, translator, and key" output.check + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {thesis} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence thesis.fields.school.type.address output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author is empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.comment output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { "author, and key" output.check } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {mastersthesis} { thesis } + + + +FUNCTION {phdthesis} { thesis } + + + +FUNCTION {unpublished} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block unpub.field.title output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence field.howpublished output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author is empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block unpub.field.title output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence field.howpublished output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author, and translator are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.comment output + new.sentence field.by output + new.sentence field.howpublished output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { "author, translator, and key" output.check } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {misc} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block misc.field.title output + new.sentence field.by output + new.sentence field.howpublished output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author is empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.by output + new.sentence field.howpublished output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { "author, and key" output.check } + if$ + } + if$ + end.bibitem +} + + + + + +% Functions to format entries based on type (incompatible entries) + +FUNCTION {booklet} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + field.author output + author format.key output + name.or.dash + field.year extra.label * "year" output.check + date.block + field.title "title" output.check + new.block + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + field.isbn output + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + +FUNCTION {inbook} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + author empty$ + { field.editor "author and editor" output.check + editor format.key output + name.or.dash + } + { field.author output.nonnull + name.or.dash + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + field.year extra.label * "year" output.check + date.block + field.btitle "title" output.check + crossref missing$ + { + field.bvolume output + fields.chapter.pages output%"chapter and pages" output.check + new.block + fields.number.series output + field.edition output + new.sentence + fields.publisher.address output + } + { + fields.chapter.pages "chapter and pages" output.check + new.block + book.field.crossref output.nonnull + } + if$ + crossref missing$ + { field.isbn output } + 'skip$ + if$ + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + +FUNCTION {manual} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + field.author output + author format.key output + name.or.dash + field.year extra.label * "year" output.check + date.block + field.btitle "title" output.check + organization address new.block.checkb + organization "organization" bibinfo.check output + address "address" bibinfo.check output + field.edition output + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + +FUNCTION {techreport} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + field.author "author" output.check + author format.key output + name.or.dash + field.year extra.label * "year" output.check + date.block + field.btitle + "title" output.check + new.block + fields.tr.number output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + + + +% Function to format entry if the type is not recognized + +FUNCTION {default.type} { misc } + + + + + + + + + + + + + + + + + + + + +% Reading bibliography database (.bib) file + +READ + + +% Function to generate a string that is suitable for sorting purposes + +FUNCTION {sortify} +{ + purify$ + "l" change.case$ +} + + + +% Length of the short name label of the entry + +INTEGERS { len } + +FUNCTION {chop.word} +{ + 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + + + + + +% Functions for sorting purposes + +FUNCTION {sort.format.names} +{ + 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { + namesleft #0 > + } + { + s nameptr + "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ + 't := + nameptr #1 > + { + " " * + namesleft #1 = + t "others" = + and + { "zzzzz" 't := } + 'skip$ + if$ + t sortify * + } + { + t sortify * + } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + + + +FUNCTION {sort.field.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 {editor.sort} +{ + editor empty$ + { + key empty$ + { + "to sort, need editor or key in " cite$ * warning$ + "" + } + { + key sortify + } + if$ + } + { + editor sort.format.names + } + if$ +} + + + +FUNCTION {book.sort} +{ + author empty$ not + { + author sort.format.names + } + { + compiler empty$ not + { + compiler sort.format.names + } + { + editor empty$ not + { + editor sort.format.names + } + { + translator empty$ not + { + translator sort.format.names + } + { + key empty$ not + { + key sortify + } + { + "to sort, need author, compiler, editor, translator, or key in " cite$ * warning$ + "" + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.sort} +{ + author empty$ not + { + author sort.format.names + } + { + compiler empty$ not + { + compiler sort.format.names + } + { + editor empty$ not + { + editor sort.format.names + } + { + translator empty$ not + { + translator sort.format.names + } + { + key empty$ not + { + key sortify + } + { + "to sort, need author, compiler, editor, translator, or key in " cite$ * warning$ + "" + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {article.sort} +{ + author empty$ not + { + author sort.format.names + } + { + editor empty$ not + { + editor sort.format.names + } + { + translator empty$ not + { + translator sort.format.names + } + { + key empty$ not + { + key sortify + } + { + "to sort, need author, editor, translator, or key in " cite$ * warning$ + "" + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {proc.sort} +{ + editor empty$ not + { editor sort.format.names } + { + compiler empty$ not + { compiler sort.format.names } + { + translator empty$ not + { translator sort.format.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.sort} +{ + author empty$ not + { author sort.format.names } + { + translator empty$ not + { translator sort.format.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {conf.sort} +{ + author empty$ not + { author sort.format.names } + { + translator empty$ not + { translator sort.format.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {presort} +{ + calc.label + label sortify + " " + * + type$ "book" = + 'book.sort + { + type$ "incollection" = + 'incoll.sort + { + type$ "article" = + 'article.sort + { + type$ "proceedings" = + 'proc.sort + { + type$ "inproceedings" = + 'inproc.sort + { + type$ "conference" = + 'conf.sort + { + type$ "inbook" = + 'author.editor.sort + 'author.sort + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + #1 entry.max$ substring$ + 'sort.label := + sort.label + * + " " + * + title field.or.null sort.field.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + + + + + +% Sort process + +ITERATE {presort} + +SORT + + + +STRINGS { last.label next.extra } + +INTEGERS { last.extra.num last.extra.num.extended last.extra.num.blank number.label } + +FUNCTION {initialize.extra.label.stuff} +{ + #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'last.extra.num := + "a" chr.to.int$ #1 - 'last.extra.num.blank := + last.extra.num.blank 'last.extra.num.extended := + #0 'number.label := +} + + + +FUNCTION {forward.pass} +{ + last.label label = + { + last.extra.num #1 + 'last.extra.num := + last.extra.num "z" chr.to.int$ > + { + "a" chr.to.int$ 'last.extra.num := + last.extra.num.extended #1 + 'last.extra.num.extended := + } + 'skip$ + if$ + last.extra.num.extended last.extra.num.blank > + { + last.extra.num.extended int.to.chr$ + last.extra.num int.to.chr$ + * 'extra.label := + } + { + last.extra.num int.to.chr$ 'extra.label := + } + if$ + } + { + "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ + number.label #1 + 'number.label := +} + + + +FUNCTION {reverse.pass} +{ + next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + extra.label 'next.extra := + extra.label duplicate$ empty$ + 'skip$ + { + "{\extrayearlabelen{" swap$ * "}}" * + } + if$ + 'extra.label := + label extra.label * 'label := +} + + + +EXECUTE {initialize.extra.label.stuff} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + + + +FUNCTION {bib.sort.order} +{ + sort.label + " " + * + translateyear empty$ + { year field.or.null sortify } + { + author empty$ not + { year field.or.null sortify } + { + compiler empty$ not + { year field.or.null sortify } + { + editor empty$ not + { year field.or.null sortify } + { + translator empty$ not + { translateyear field.or.null sortify } + { year field.or.null sortify } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + * + " " + * + title field.or.null sort.field.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + + + +ITERATE {bib.sort.order} + +SORT + + + + +% Functions to create bibliography +FUNCTION {begin.bib} +{ + preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" write$ + newline$ + "% Generated by `iranlatin.bst`." write$ + newline$ + "% This bibliography style is part of the `iran-bibtex` package." write$ + newline$ + "% Copyright (c) 2023-2024 Farshad Rasuli " write$ + newline$ + "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" write$ + newline$ + newline$ + newline$ + "\begin{thebibliography}{" number.label int.to.str$ * "}" * 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 file `iranlatin.bst'. \ No newline at end of file diff --git a/biblio/ctan-bibdata/ctan.bib b/biblio/ctan-bibdata/ctan.bib index 02ac8346f3..253cf8b261 100644 --- a/biblio/ctan-bibdata/ctan.bib +++ b/biblio/ctan-bibdata/ctan.bib @@ -1,7 +1,7 @@ %% bib file of all CTAN packages %% (C) Herbert Voß %% -%% created at 07-01-2024, 02:00:03 +%% created at 08-01-2024, 02:00:03 %% %% This file is provided under the terms of the LPPL v1.3 or @@ -5194,8 +5194,8 @@ title = {The \texttt{babel} package}, subtitle = {Multilingual support for \LaTeX{}, LuaLaTeX, \XeLaTeX{}, and Plain \TeX{}}, author = {Javier Bezos López and Johannes L. Braams}, - date = {2023-12-10}, - version = {3.99}, + date = {2024-01-07}, + version = {24.1}, license = {lppl1.3}, mirror = {https://mirror.ctan.org/macros/latex/required/babel/base}, url = {https://ctan.org/pkg/babel}, @@ -19175,7 +19175,7 @@ title = {The \texttt{docsurvey} package}, subtitle = {A survey of \LaTeX{} documentation}, author = {Brian Dunn}, - date = {2021-12-30}, + date = {2024-01-07}, version = {}, license = {lppl1.3}, mirror = {https://mirror.ctan.org/info/docsurvey}, @@ -20696,8 +20696,8 @@ title = {The \texttt{easybook} package}, subtitle = {Easily typesetting Chinese theses or books}, author = {Qu Yi}, - date = {2024-01-06}, - version = {2024C}, + date = {2024-01-07}, + version = {2024D}, license = {lppl1.3c}, mirror = {https://mirror.ctan.org/macros/latex/contrib/easybook}, url = {https://ctan.org/pkg/easybook}, @@ -24323,8 +24323,8 @@ title = {The \texttt{exsol} package}, subtitle = {Exercises and solutions from the same source, into a book}, author = {Walter Daems}, - date = {2018-10-23}, - version = {1.4}, + date = {2024-01-07}, + version = {1.6}, license = {lppl1.3}, mirror = {https://mirror.ctan.org/macros/latex/contrib/exsol}, url = {https://ctan.org/pkg/exsol}, @@ -35008,9 +35008,9 @@ title = {The \texttt{isphysicalmath} package}, subtitle = {Simple way to write nice formulas}, author = {Mario Fantini}, - date = {2023-09-23}, - version = {1.0.0}, - license = {lppl1.3c}, + date = {2024-01-07}, + version = {1.1.0}, + license = {lppl1.3}, mirror = {https://mirror.ctan.org/macros/latex/contrib/isphysicalmath}, url = {https://ctan.org/pkg/isphysicalmath}, } @@ -58040,8 +58040,8 @@ title = {The \texttt{PyLuaTeX} package}, subtitle = {Execute Python code on the fly in your \LaTeX{} documents}, author = {Tobias Enderle}, - date = {2023-02-15}, - version = {0.6.1}, + date = {2024-01-07}, + version = {0.6.2}, license = {mit,lppl1.3c}, mirror = {https://mirror.ctan.org/macros/luatex/latex/pyluatex}, url = {https://ctan.org/pkg/pyluatex}, @@ -69103,8 +69103,8 @@ title = {The \texttt{texshade} package}, subtitle = {Package for setting nucleotide and peptide alignments}, author = {Eric Beitz}, - date = {2023-06-06}, - version = {1.26c}, + date = {2024-01-07}, + version = {1.27}, license = {gpl2}, mirror = {https://mirror.ctan.org/macros/latex/contrib/texshade}, url = {https://ctan.org/pkg/texshade}, @@ -72920,8 +72920,8 @@ title = {The \texttt{tutodoc} package}, subtitle = {Typeset tutorial-like documentations}, author = {Christophe Bal}, - date = {2023-12-11}, - version = {1.0.1}, + date = {2024-01-07}, + version = {1.1.0}, license = {gpl3}, mirror = {https://mirror.ctan.org/macros/latex/contrib/tutodoc}, url = {https://ctan.org/pkg/tutodoc}, @@ -73674,8 +73674,8 @@ title = {The \texttt{ukbill} package}, subtitle = {A class for typesetting UK legislation}, author = {Elijah Z Granet}, - date = {2023-11-15}, - version = {1.0.3}, + date = {2024-01-07}, + version = {1.2.0}, license = {lppl1.3c}, mirror = {https://mirror.ctan.org/macros/latex/contrib/ukbill}, url = {https://ctan.org/pkg/ukbill}, diff --git a/info/biblio/litprog.bib b/info/biblio/litprog.bib index 1e7629adec..0ec9353c6e 100644 --- a/info/biblio/litprog.bib +++ b/info/biblio/litprog.bib @@ -4,9 +4,9 @@ %%% ==================================================================== %%% BibTeX-file{ %%% author = "Nelson H. F. Beebe", -%%% version = "3.38", -%%% date = "06 January 2024", -%%% time = "18:59:38 MST", +%%% version = "3.39", +%%% date = "07 January 2024", +%%% time = "16:34:51 MST", %%% filename = "litprog.bib", %%% address = "University of Utah %%% Department of Mathematics, 110 LCB @@ -16,7 +16,7 @@ %%% telephone = "+1 801 581 5254", %%% FAX = "+1 801 581 4148", %%% URL = "https://www.math.utah.edu/~beebe", -%%% checksum = "14748 8790 39542 390609", +%%% checksum = "35883 8814 39630 391611", %%% email = "beebe at math.utah.edu, beebe at acm.org, %%% beebe at computer.org (Internet)", %%% codetable = "ISO/ASCII", @@ -28,11 +28,11 @@ %%% fields will be printed if the is-alpha.bst %%% or is-plain.bst style files are used. %%% -%%% At version 3.38, the coverage looked like +%%% At version 3.39, the coverage looked like %%% this: %%% %%% 1982 ( 1) 1996 ( 30) 2010 ( 4) -%%% 1983 ( 2) 1997 ( 14) 2011 ( 1) +%%% 1983 ( 2) 1997 ( 15) 2011 ( 1) %%% 1984 ( 2) 1998 ( 14) 2012 ( 2) %%% 1985 ( 1) 1999 ( 6) 2013 ( 1) %%% 1986 ( 11) 2000 ( 5) 2014 ( 0) @@ -47,7 +47,7 @@ %%% 1995 ( 18) 2009 ( 3) %%% 19xx ( 1) %%% -%%% Article: 140 +%%% Article: 141 %%% Book: 35 %%% InCollection: 1 %%% InProceedings: 49 @@ -58,7 +58,7 @@ %%% TechReport: 29 %%% Unpublished: 1 %%% -%%% Total entries: 308 +%%% Total entries: 309 %%% %%% There is an extensive ``Literate Programming %%% Library'' resource on the World Wide Web at @@ -4082,7 +4082,7 @@ Mini-indexes; Undirected graph; WEB", thesaurus = "Graph theory; Indexing; Programming; System documentation", - timestamp = "Sat Jan 6 18:59:38 2024", + timestamp = "Sun Jan 7 16:34:51 2024", } @Misc{Lee:1994:LPP, @@ -5461,6 +5461,30 @@ journal-URL = "http://portal.acm.org/browse_dl.cfm?idx=J79", } +@Article{Childs:1997:ALP, + author = "Bart Childs and Johannes Sametinger", + title = "Analysis of Literate Programs from the Viewpoint of + Reuse", + journal = j-SOFTW-CONCEPTS-TOOLS, + volume = "18", + number = "1", + pages = "35--??", + year = "1997", + CODEN = "SCOTE5", + ISSN = "0945-8115 (print), 1432-2188 (electronic)", + ISSN-L = "0945-8115", + bibdate = "Sat Jan 6 12:49:28 2024", + bibsource = "dblp computer science bibliography; https://dblp.org; + https://www.math.utah.edu/pub/tex/bib/litprog.bib; + https://www.math.utah.edu/pub/tex/bib/structprogram.bib", + acknowledgement = ack-nhfb, + biburl = "https://dblp.org/rec/journals/stp/ChildsS97.bib", + dblp-id = "DBLP:journals/stp/ChildsS97", + fjournal = "Software---Concepts and Tools", + journal-URL = "https://link.springer.com/journal/378", + timestamp = "Fri, 06 Mar 2020 21:59:05 +0100", +} + @Book{Detig:1997:LPC, author = "Christine Detig and Joachim Schrod", title = "Literate Programming: Concepts, Methods, and Tools", diff --git a/info/biblio/litprog.ltx b/info/biblio/litprog.ltx index 0dbdf90374..c44eeff633 100644 --- a/info/biblio/litprog.ltx +++ b/info/biblio/litprog.ltx @@ -5,9 +5,9 @@ %%% ==================================================================== %%% @LaTeX-file{ %%% author = "Nelson H. F. Beebe", -%%% version = "3.38", -%%% date = "06 January 2024", -%%% time = "18:59:46 MST", +%%% version = "3.39", +%%% date = "07 January 2024", +%%% time = "16:34:56 MST", %%% filename = "litprog.ltx", %%% address = "University of Utah %%% Department of Mathematics, 110 LCB @@ -17,7 +17,7 @@ %%% telephone = "+1 801 581 5254", %%% FAX = "+1 801 581 4148", %%% URL = "https://www.math.utah.edu/~beebe", -%%% checksum = "37878 87 321 3210", +%%% checksum = "45747 87 321 3210", %%% email = "beebe@math.utah.edu, beebe@acm.org, %%% beebe@computer.org (Internet)", %%% codetable = "ISO/ASCII", @@ -61,8 +61,8 @@ WWW URL: \protect\path=https://www.math.utah.edu/~beebe/= } -\date{06 January 2024 \\ -Version 3.38} +\date{07 January 2024 \\ +Version 3.39} \begin{document} \nocite{*} diff --git a/macros/latex/contrib/dtxdescribe/README.txt b/macros/latex/contrib/dtxdescribe/README.txt index 24e6caa67f..7338088697 100644 --- a/macros/latex/contrib/dtxdescribe/README.txt +++ b/macros/latex/contrib/dtxdescribe/README.txt @@ -1,8 +1,8 @@ The LaTeX dtxdescribe package Describe additional object types in dtx source files. -v1.07 — 2023/01/03 -Copyright 2016–2023 Brian Dunn — www.BDTechConcepts.com +v1.08 — 2024/01/08 +Copyright 2016–2024 Brian Dunn — https://github.com/bdtc/dtxdescribe LaTeX Project Public License, version 1.3 diff --git a/macros/latex/contrib/dtxdescribe/dtxdescribe.dtx b/macros/latex/contrib/dtxdescribe/dtxdescribe.dtx index e271465c21..3fb7205f40 100644 --- a/macros/latex/contrib/dtxdescribe/dtxdescribe.dtx +++ b/macros/latex/contrib/dtxdescribe/dtxdescribe.dtx @@ -1,7 +1,7 @@ % \iffalse meta-comment % -% Copyright 2016-2023 Brian Dunn +% Copyright 2016-2024 Brian Dunn % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 @@ -17,7 +17,7 @@ % \iffalse %\NeedsTeXFormat{LaTeX2e} %\ProvidesPackage{dtxdescribe} -% [2023/01/03 v1.07 Describe additional object types in source files.] +% [2024/01/08 v1.08 Describe additional object types in source files.] % %<*driver> \documentclass{ltxdoc} @@ -187,6 +187,8 @@ pageanchor=true, % \changes{v1.05}{2022/09/08}{\ 2022/09/08} % \changes{v1.06}{2022/12/07}{\ 2022/12/07} % \changes{v1.07}{2023/01/03}{\ 2023/01/03} +% \changes{v1.08}{2024/01/08}{\ 2024/01/08} +% \changes{v1.08}{2024/01/08}{\ Updated contact info.} @@ -211,7 +213,8 @@ pageanchor=true, % % \bigskip % -% {\small\textcopyright{} 2016--2023} Brian Dunn\\ \small \texttt{bd@BDTechConcepts.com} +% {\small\textcopyright{} 2016--2024} Brian Dunn\\ +% \small \url{https://github.com/bdtc/dtxdescribe} % % \vspace{.5in} % @@ -227,7 +230,7 @@ pageanchor=true, % The \pkg{doc} package includes tools for describing macros and environments % in \LaTeX\ source \filenm{.dtx} format. % The \pkg{dtxdescribe} package adds additional tools for describing -% booleans, lengths, counters, hooks, keys, packages, classes, options, +% booleans, lengths, counters, hooks, sockets, plugs, keys, packages, classes, options, % files, commands, arguments, and other objects. % \pkg{dtxdescribe} also works with the regular document classes, for those % who do not wish to use the \pkg{ltxdoc} class and \filenm{.dtx} files. @@ -472,7 +475,7 @@ pageanchor=true, % See \cref{ex:arguments} on \cpageref{ex:arguments}. -% \subsection{Booleans, lengths, counters, hooks, keys} +% \subsection{Booleans, lengths, counters, hooks, sockets, plugs, keys} % % See \cref{ex:common} on \cpageref{ex:common}. % @@ -503,6 +506,19 @@ pageanchor=true, % \end{sourceverb} % % +% \DescribeMacro{\DescribeSocket} \oarg{category} \marg{name} +% +% \DescribeMacro{\DescribePlug} \oarg{category} \marg{name} +% +% Describes a socket or plug. Given a `Socket' or 'Plug' tag in the margin and index. +% The |category| may be used to categorize sockets and plugs by package. +% Example: +% \begin{sourceverb} +% \DescribeSocket{socketname} +% \DescribePlug{plugname} +% \end{sourceverb} +% +% % \DescribeMacro{\DescribeKey} \oarg{category} \marg{name} % % Describes a key. Given a `Key' tag in the margin and index. @@ -591,6 +607,10 @@ pageanchor=true, % % \DescribeMacro{\ItemDescribeHook} \oarg{category} \marg{name} A description. % +% \DescribeMacro{\ItemDescribeSocket} \oarg{category} \marg{name} A description. +% +% \DescribeMacro{\ItemDescribePlug} \oarg{category} \marg{name} A description. +% % \DescribeMacro{\ItemDescribeKey} \oarg{category} \marg{name} A description. % % \DescribeMacro{\ItemDescribePackage} \oarg{category} \marg{package\_name} With underscores. @@ -1079,10 +1099,15 @@ pageanchor=true, % the same as the rest of the objects. -% \begin{dtxexample}{Hooks\label{ex:hook}} +% \begin{dtxexample}{Hooks and Sockets\label{ex:hook}} % \DescribeHook{\hookname} A hook with a backslash. % \DescribeHook{para/begin} A hook without a backslash. + +% \DescribeSocket{socketname} A socket. + +% \DescribePlug{plugname} A socket plug. + % \end{dtxexample} % Hooks may or may not have a leading backslash. @@ -3109,6 +3134,52 @@ pageanchor=true, \newcommand*{\DescribeHook}[2][] {\DTXD@margintagindex{#1}{#2}{Hook}{hook}{usage}} +}% not doc +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\DescribeSocket} \oarg{category} \marg{name} +% \changes{v1.08}{2024/01/08}{Added.} +% \begin{macrocode} +\IfPackageLoadedTF{doc}{% doc + +\NewDocElement[ + macrolike=false, + toplevel=true, + idxtype=socket, + idxgroup=Sockets, + printtype=\textit{Socket} +]{Socket}{socket} + +}{% not doc + +\newcommand*{\DescribeSocket}[2][] + {\DTXD@margintagindex{#1}{#2}{Socket}{socket}{usage}} + +}% not doc +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\DescribePlug} \oarg{category} \marg{name} +% \changes{v1.08}{2024/01/08}{Added.} +% \begin{macrocode} +\IfPackageLoadedTF{doc}{% doc + +\NewDocElement[ + macrolike=false, + toplevel=true, + idxtype=plug, + idxgroup=Plugs, + printtype=\textit{Plug} +]{Plug}{plug} + +}{% not doc + +\newcommand*{\DescribePlug}[2][] + {\DTXD@margintagindex{#1}{#2}{Plug}{plug}{usage}} + }% not doc % \end{macrocode} % \end{macro} @@ -3366,6 +3437,28 @@ pageanchor=true, % \end{macrocode} % \end{macro} +% \begin{macro}{\ItemDescribeSocket} \oarg{category} \marg{name} +% \changes{v1.08}{2024/01/08}{Added.} +% \begin{macrocode} +\newcommand{\ItemDescribeSocket}[2][]{% + \item[\texttt{#2}:]% + \setlength{\parskip}{1.5ex}% + \DescribeSocket[#1]{#2}% +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\ItemDescribePlug} \oarg{category} \marg{name} +% \changes{v1.08}{2024/01/08}{Added.} +% \begin{macrocode} +\newcommand{\ItemDescribePlug}[2][]{% + \item[\texttt{#2}:]% + \setlength{\parskip}{1.5ex}% + \DescribePlug[#1]{#2}% +} +% \end{macrocode} +% \end{macro} + % \begin{macro}{\ItemDescribeKey} \oarg{category} \marg{name} % \changes{v1.00}{2019/01/09}{Added.} % \begin{macrocode} diff --git a/macros/latex/contrib/dtxdescribe/dtxdescribe.pdf b/macros/latex/contrib/dtxdescribe/dtxdescribe.pdf index 1267977d0b..1712382523 100644 Binary files a/macros/latex/contrib/dtxdescribe/dtxdescribe.pdf and b/macros/latex/contrib/dtxdescribe/dtxdescribe.pdf differ diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx index 93ca70813e..9d435384a2 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}{2024/01/07}{2024D} +\ProvidesExplClass{easybook}{2024/01/08}{2024E} {Easily typesetting Chinese theses or books} \bool_set_false:N \l__eb_compile_draft_bool @@ -302,7 +302,7 @@ %<*package> \NeedsTeXFormat{LaTeX2e}[2020/10/01] \RequirePackage{l3keys2e,etoolbox} -\ProvidesExplPackage{easybase}{2024/01/07}{2024D} +\ProvidesExplPackage{easybase}{2024/01/08}{2024E} {Easily typesetting Chinese theses or books} \cs_generate_variant:Nn \dim_set:Nn { NV } @@ -1226,7 +1226,7 @@ \use:c { p@#1 } { the#1 } } } -\NewDocumentCommand{\counteruse}{sO{arabic}D(){.}mod()} +\NewDocumentCommand{\counteruse}{sO{arabic}D(){.}mo} { \IfBooleanF{#1}{\stepcounter{#4}} \tl_set:cn { theeb-#4 } @@ -1875,9 +1875,8 @@ { \box_wd:N \l_tmpb_box + \l__eb_eqsymb_width_dim + - \l__eb_eqsymb_space_dim + \box_wd:N \l_tmpa_box + - \l__eb_eqsymb_space_dim + 2\l__eb_eqsymb_space_dim } } \NewDocumentEnvironment{eqcomp}{oD(){}+b} @@ -2327,7 +2326,7 @@ } % %<*tcolorbox> -\ProvidesExplFile{eb-tcolorbox.cfg}{2024/01/07}{2024D} +\ProvidesExplFile{eb-tcolorbox.cfg}{2024/01/08}{2024E} {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 4b1e8049c7..d700f1cfd7 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 e7fc2d4d8a..07b4ad1665 100644 --- a/macros/latex/contrib/easybook/easybook.tex +++ b/macros/latex/contrib/easybook/easybook.tex @@ -23,8 +23,8 @@ name = easybook, color-scheme = blue, title = EASYBOOK使用手册, - version = v2024D, - date = 2024/01/07, + version = v2024E, + date = 2024/01/08, authors = 瞿毅, info = 简便地排版中文学位论文或书籍, email = toquyi@163.com, @@ -255,17 +255,17 @@ 开启草稿模式会加快编译速度,表现有显示页面边框、行溢出的地方显示黑色方块、图片变成占位方框、显示当前日期和关闭超链接渲染。不使用绘图宏包及依赖于 \pkg*{tcolorbox} 宏包的盒子环境也会增快编译速度,详情见\ref{subsec:box}。 \opt{newline}\dtag 部分和章标题的样式为另起一行,符合一般英文书籍的习惯。 - \keychoice{scheme}{chinese,plain}\dtag\Default{chinese} + \keychoice{scheme}{\fbox{chinese},plain}\dtag 文档主题方案选项 \option{scheme} 扩展了 \CTeX 文档类中同名选项原有的作用范围,选项值 \code{plain} 可使各类标题变为英文形式。包括章节标题、图表标题和定理名等。 \opt{enmode}\dtag 同时开启 \option{newline} 和 \keyis{scheme}{plain} 选项以符合英文原生风格。 - \keychoice{paper}{a4paper,b5paper,c5paper,letterpaper,other paper}\Default{a4paper} + \keychoice{paper}{\fbox{a4paper},b5paper,c5paper,letterpaper,other paper} 文档页面尺寸选项将参数交给 \pkg*{geometry} 宏包处理,可使用它支持的所有标准纸张规格。 \keyval{config}{配置文件列表}\dtag 载入用户配置的文件名列表,文件列表以花括号包裹并以英文逗号分隔。文件名应包含如 \code{tex}、\code{def} 或 \code{cfg} 等扩展名。若配置文件不在当前文件夹则文件名需要包含路径。 - \keybool{floatpage}\Default{false} + \keychoice{floatpage}{true,\fbox{false}} 开启这个选项后浮动环境 \env*{table} 和 \env*{figure} 的比例参数会使用默认值。关闭它则尽可能避免出现浮动页,使图表环境与正文段落更加紧凑,减少多余的空白版面。 - \keybool{theorem}\Default{true} + \keychoice{theorem}{\fbox{true},false} 是否提供定理功能支持。选项开启时定理样式模块生效,此时会载入 \pkg*{amsthm} 和 \pkg*{thmtools} 宏包。 \end{options} @@ -284,7 +284,7 @@ \end{options} \begin{options} - \keychoice{font}{noto,times,times*,ebgaramond,libertine,palatino,auto}\dtag\Default{auto} + \keychoice{font}{noto,times,times*,ebgaramond,libertine,palatino,\fbox{auto}}\dtag 预置的英文字体相关配置方案如下表所示。这些字体已经包含在了 \TeX Live 发行版中,所以通常不需要再专门安装。如果您想使用其它英文字体,可以使用 \pkg*{fontspec} 宏包的相关命令进行设置。 \insertalltblr[ remark{\ding{72}} = \code{times*} 方案为 \textsf{windows} 系统的预置字体。 @@ -305,13 +305,13 @@ \end{options} \begin{options} - \keychoice{mathfont}{times,noto,notosans,nc,stix2,charter,ebgaramond,libertine,none}\dtag\Default{times} + \keychoice{mathfont}{\fbox{times},noto,notosans,nc,stix2,charter,ebgaramond,libertine,none}\dtag 选择合适的数学字体,将会加载 \pkg*{newtxmath} 和 \pkg*{bm} 宏包。使用选项 \code{none} 时可以使用 \pkg*{unicode-math} 等其它数学字体宏包定义字体。 \end{options} \subsection{\textsf{article} 模式} \begin{options} - \keychoice{class}{book,article}\Default{book} + \keychoice{class}{\fbox{book},article} 使用 \cls*{easybook} 文档类可以有两种模式,默认为 \cls*{book} 模式。选用 \code{article} 会变为 \code{oneside} 单面排版,同时使文档编号、结构等与标准 \cls*{article} 文档类的特性相似,可用于短篇幅的文章,不需要再使用 \cs*{chapter} 命令。此时\ref{subsec:directory command} 中目录命令的 \option{chapter} 选项会失效,将以 \code{section} 标题级别输出目录。如果使用 \cls*{ctexart} 配合 \pkg*{easybase} 宏包,则选项值 \code{book} 会失效。 \opt{book} 开启 \cls*{book} 书籍模式,与 \keyis*{class}{book} 等效。 @@ -351,13 +351,13 @@ \ebstyle{hyphen-figure = {-}} \end{ctexexam} - 文档类有三种选项:布尔型 \boolkey*{key},选项的值为真 \code{true} 或假 \code{false},如果不指定默认为真。键值型 \key*{key}{value} 需要为选项指定值,后面 \code{=} 号不能省略。选择型 \choicekey*{key}{one,\default{two},three} 根据提供的可选值进行设定。 + 文档类有三种选项:布尔型 \choicekey*{key}{true,false},选项的值为真 \code{true} 或假 \code{false},如果不指定默认为真。键值型 \key*{key}{value} 需要为选项指定值,后面 \code{=} 号不能省略。选择型 \choicekey*{key}{one,\fbox{two},three} 根据提供的可选值进行设定。 \end{commands} \subsection[风格]{风格\smodule{style}} \label{subsec:style} \begin{options} - \keychoice{color}{none,seaside,energy,cyberpunk}\Default{none} + \keychoice{color}{\fbox{none},seaside,energy,cyberpunk} 预置了四种颜色主题,默认主题 \code{none} 为黑白页面,颜色主题不包括超链接。 \begin{commands} \command{DeclareThemeColor}[\splitmarg{风格名称,颜色1,颜色2,颜色3}] @@ -367,11 +367,11 @@ 统一设置主题的各部分颜色。参数是6个十六进制数字组成的 \code{HTML} 颜色代码,任意颜色的代码可以在常见的图片处理工具拾色器中查看。 \keyval{multoc}{整数}\Default{2} 设置目录的排版栏数,与\ref{subsec:directory command} 中目录命令的同名选项有相同效果。 - \keybool{withpart}\Default{false} + \keychoice{withpart}{true,\fbox{false}} 使章标题跟随部分计数器编号,当开启新的一部分时章编号从1开始。 - \keychoice{fntnumwith}{part,chapter,page}\Default{chapter} + \keychoice{fntnumwith}{part,\fbox{chapter},page} 使脚注跟随编号的计数器名。默认跟随章计数器,即开启新的一章时脚注编号从1开始。 - \keychoice{uppercase}{all,first,none,none*}\Default{all} + \keychoice{uppercase}{\fbox{all},first,none,none*} 使用 \cs{rightmark} 和 \cs{leftmark} 等标题标记命令获取标题内容用于页眉页脚时其中英文的大小写类型。\code{all} 为标题标记中的英文字母全部大写。\code{first} 为标记以英文起始时仅第一个字母大写。\code{none} 不改变标记中英文字母的大小写形式,变体 \code{none*} 则强制标记的字母均为小写形式。 \kvsplit{brackets}{左括号,右括号}\Default{\Marg{(,)}} 设置行间公式编号标签的括号及格式,以英文逗号分隔,分别代表左右括号。\meta{左括号} 可以是带有一个参数的命令,用于接受编号和 \meta{右括号}。将标签括号设置为方括号,并使用无衬线字体: @@ -422,7 +422,7 @@ 上下标命令 \cs{supersub} 对应的上下标格式命令。以英文逗号分隔为前后两个部分分别设置上下标格式,也可以只有前部分,表示上标的格式。 \kvsplit{vsep}{上标偏移,下标偏移}\Default{0.6ex} 上下标命令 \cs{supersub} 对应的上下标额外垂直距离。前部分为上标的偏移量,后部分为下标的偏移量。如果只有前部分则上下标各自垂直移动当前值的一半。 - \keychoice{halign}{l,c,r}\Default{l} + \keychoice{halign}{\fbox{l},c,r} 上下标命令 \cs{supersub} 对应的上下标水平对齐方式,有左 \code{l}、居中 \code{c} 和右 \code{r} 三种对齐方式。 \end{options} @@ -430,9 +430,9 @@ \label{subsec:hyperlinks} 模块 \module*{refset} 将超链接选项交给 \pkg*{hyperref} 宏包处理。除了一些超链接颜色的选项失效,其它由宏包全局和接口命令 \cs*{hypersetup} 支持的多数选项可用。 \begin{options} - \keychoice{linktype}{edge,colors,none}\Default{edge} + \keychoice{linktype}{\fbox{edge},colors,none} 超链接类型。\code{edge} 使超链接形式为边框,\code{colors} 使超链接字体为彩色,\code{none} 关闭超链接边框与颜色,此时 \option{linkcolor} 选项无效。 - \keychoice{linkcolor}{fresh,cutepink,navyblue,crimson}\Default{navyblue} + \keychoice{linkcolor}{fresh,cutepink,\fbox{navyblue},crimson} 超链接颜色样式。预置了四种超链接颜色风格。为使相关颜色能够正确显示,选项 \option{linkcolor} 应当在 \option{linktype} 前使用。 \begin{commands} \command{DeclareLinkColor}[\splitmarg{风格名称,颜色1,颜色2,颜色3}] @@ -440,7 +440,7 @@ \end{commands} \keyval{linkcolor-every}{HTML颜色代码} 统一设置超链接的各部分颜色。参数是6个十六进制数字组成的 \code{HTML} 颜色代码,任意颜色的代码可以在常见的图片处理工具拾色器中查看。 - \keychoice{linktoc}{none,section,page,all}\Default{all} + \keychoice{linktoc}{none,section,page,\fbox{all}} 将目录中的超链接取消、置于标题上、置于页码上或置于标题和页码上。 \end{options} @@ -501,9 +501,9 @@ \subsection[参考文献]{参考文献\smodule{bibset}} \label{subsec:reference} \begin{options} - \keychoice{backend}{bibtex,biblatex}\Default{bibtex} + \keychoice{backend}{\fbox{bibtex},biblatex} 参考文献处理后端。默认用传统的 \hologo{BibTeX} 处理参考文献\footnote{使用 \hologo{BibTeX} 引擎时加载 \pkg*{natbib} 宏包,使用 \hologo{biber} 时将加载 \pkg*{biblatex} 宏包。}。 - \keychoice{bibstyle}{numerical,authoryear,other sty}\Default{numerical} + \keychoice{bibstyle}{\fbox{numerical},authoryear,other sty} 参考文献格式使用中国参考文献推荐标准GB/T 7714-2015,对应顺序编码制和著者—出版年制两种风格。若使用其它格式,使用 \hologo{BibTeX} 处理时需确保正确的 \code{bst} 文件,使用 \hologo{biber} 处理可使用 \pkg*{biblatex} 宏包支持的参考文献风格名称。 \keyval{citestyle}{标注风格} 标注参考文献的风格。后端为 \code{bibtex} 时可使用 \option{super}(数字上标标注,默认)或 \option{numbers}(数字标注)等 \pkg*{natbib} 宏包带有的标注风格,后端为 \code{biblatex} 时可使用 \pkg*{biblatex} 宏包支持的标注风格。 @@ -517,7 +517,7 @@ \end{commands} \begin{options} - \keychoice*{heading}{bibliography,subbibliography,bibintoc,subbibintoc}\Default{bibintoc} + \keychoice*{heading}{bibliography,subbibliography,\fbox{bibintoc},subbibintoc} 参考文献通常有一个章标题或者节标题,该选项选择由 \cs*{defbibheading} 定义的标题名。 \keyval*{title}{参考文献标题名} 如果标题定义支持的话,该选项覆盖由 \option*{heading} 选项提供的缺省标题名。 @@ -616,7 +616,7 @@ \kvsplit*{hdivide}{左边距,页面文本宽度,右边距}\default{} \kvsplit*{hmargin}{左边距,右边距}\default{} \keyval*{textheight}{页面文本高度}\default{} - \keybool*{nofoot}\Default*{false} + \keychoice*{nofoot}{true,\fbox{false}} \begin{ctexexam} \ebgeoset { @@ -690,7 +690,7 @@ \subsection[脚注格式]{脚注格式\smodule{hdrset}} 模块 \module*{hdrset} 还可以灵活调整脚注编号和内容的格式。格式主要包括脚注标记的编号类型、字体、附加符号和对齐方式等,以及脚注内容的首行缩进、行距和字体等。基本思想是默认脚注和自定义编号脚注标记的格式分离,两种类型脚注各自正文和内容的标记又共享格式,默认脚注中正文和内容标记的编号类型分离。目前脚注模块基本兼容 \pkg*{footmisc} 宏包。 \begin{options} - \keychoice{footnotetype}{plain,hang,flush,bottom}\Default{hang} + \keychoice{footnotetype}{plain,\fbox{hang},flush,bottom} 脚注的类型。悬挂缩进 \code{hang} 是默认值,\code{plain} 是原始的类型,\code{flush} 使脚注内容标记位于脚注首行边缘外侧并右对齐。当存在浮动环境排版时,脚注可能位于页面中间,\code{bottom} 使脚注始终位于页面底端。其中 \code{bottom} 是复合选项,可以与前三种类型重复或复合使用: \begin{ctexexam} \ebhdrset{footnotetype = plain,footnotetype = bottom} @@ -702,9 +702,9 @@ 每个脚注第二段及之后段落的首行缩进,等于长度 \cs{fnafterindent} 的值。 \keyval{fnparskip}{弹性长度}\Default{0ex plus .1ex} 不同脚注的段落间距,等于长度 \cs{fnparskip} 的值。 - \keychoice{fntext-pos}{normal,super}\Default{super} + \keychoice{fntext-pos}{normal,\fbox{super}} 设置脚注内容标记的位置,正常文本或是上标形式。 - \keychoice{fnmark-num}{plain,pifont,pifont*,pisans,pisans*,short num}\Default{plain} + \keychoice{fnmark-num}{\fbox{plain},pifont,pifont*,pisans,pisans*,short num} 脚注正文标记编号的类型。默认为原生样式 \code{plain},还可以改为 \code{pifont} 的各个版本,从左往右依次为普通版、阴文衬线版、阳文无衬线版和阴文无衬线版,缺点是它们的编号仅包括1-10。 短编号的参数与列表环境类似,有1、A、a、I和i,除此之外还增加了中文数字 \code{c} 和符号 \code{s} 格式。原生样式 \code{plain} 等同于单独使用数字 \code{1} 参数。这个选项可以用在正文中改变其后脚注编号类型。 @@ -726,9 +726,9 @@ \ebhdrset{fnmark-num = s} \end{ctexexam} \end{commands} - \keychoice{fntext-num}{plain,pifont,pifont*,pisans,pisans*,short num}\Default{plain} + \keychoice{fntext-num}{\fbox{plain},pifont,pifont*,pisans,pisans*,short num} 脚注内容标记编号的类型。用法与 \option{fnmark-num} 一样,所以脚注内容与正文标记编号类型\textbf{可以不同}。 - \keychoice{fnmarktext-num}{plain,pifont,pifont*,pisans,pisans*,short num}\Default{plain} + \keychoice{fnmarktext-num}{\fbox{plain},pifont,pifont*,pisans,pisans*,short num} 同时设定脚注正文标记编号 \option{fnmark-num} 与脚注内容标记编号 \option{fntext-num} 的类型。目前脚注编号类型选项对于迷你页环境 \env*{minipage} 无效,其中的脚注保持默认英文字母的编号类型。 \keychoice{fnmark-vmove}{fixed length,match}\Default{0pt} 脚注正文标记的垂直偏移。可以设为刚性长度,或用 \code{match} 匹配 \option*{spvmove} 全局的值。 @@ -853,7 +853,7 @@ \end{commands} \begin{options} - \keybool{hang}\Default{true} + \keychoice{hang}{\fbox{true},false} 悬挂缩进选项 \option{hang} 使目录条目为悬挂缩进形式。缩进距离为条目编号及其与标题间距的长度和。这个选项对所有条目名同时生效。 \keyval{lolskip}{弹性长度}\Default{10pt} 代码目录中每章第一个条目上方增加的垂直距离。与 \CTeX 的表格和图片目录中每章间的条目距离选项 \option*{lotskip} 和 \option*{lofskip} 类似,在 \cls*{article} 模式中此选项失效。 @@ -861,7 +861,7 @@ 目录标题与内容间的钩子(作用于标题下方间距之后),一般插入负的垂直距离代码用于抵消目录首行额外的垂直间距。一级路径此选项对应文档主目录的钩子,二级路径为浮动环境的 \meta{条目名}。 \keyval{bibetween}{代码钩子}\newtag% 与选项 \option{between} 类似,是位于一级路径的英文文档主目录(如果启用)代码钩子。 - \keybool{dotalign}\Default{true} + \keychoice{dotalign}{\fbox{true},false} 引导线选项 \option{dotalign} 可以使目录引导线右端对齐并与页码保持一定间距,否则会与页码相连。 \keyval{pagenumwd}{刚性长度}\Default{1.55em} 目录条目页码的宽度。开启 \option{dotalign} 选项时宽度越大引导线与页码的距离就越大。 @@ -895,7 +895,7 @@ \command{tableofcontents}[\sarg\oarg{键值列表}\darg{代码钩子}] 文档主目录命令,支持中英文双语标题目录输出。带有星号参数不输出目录条目上方的标题。\meta{代码钩子} 是当方案 \keyis{plan}{both} 时中文与英文目录之间执行的代码,可以插入目录样式和换页等命令。 \begin{options} - \keychoice{plan}{cn,bi,both}\Default{cn}\newtag[Exp]% + \keychoice{plan}{\fbox{cn},bi,both}\newtag[Exp]% 文档主目录的输出方案。\code{cn} 只输出中文目录,\code{bi} 只输出英文目录。\code{both} 同时连续输出中文和英文目录,需要与双语目录标题命令 \cs{bichapter} 等或双语标题选项 \option{title} 配合使用。 \keyval{bicontentsname}{英文目录标题}\Default{Contents}\newtag% 英文目录的标题,为通用接口命令 \cs*{ctexset} 的选项。 @@ -919,7 +919,7 @@ 设置目录的排版栏数。\meta{整数} 代表目录栏数,不指定栏数的值则默认为双栏。 \kvsplit{title}{中文目录标题,英文目录标题} 用于更改目录的双语标题。标题之间用一个英文逗号分开,对主目录来说前部分为中文目录标题,后部分为英文目录标题,对图表和代码目录来说后部分则是加入英文目录的条目。也可以只有一部分,表示中文目录的标题。 - \keychoice{bilist}{mix,new}\Default{new} + \keychoice{bilist}{mix,\fbox{new}} 确定文档主目录中双语标题列表的输出排列方式。选项 \code{mix} 使每个英文标题条目在中文目录中跟随对应的中文标题输出,\code{new} 则在新建的英文目录中输出英文标题。 \keyval{format}{目录标题格式} 设置目录标题的格式,在标题级别为 \code{chapter} 或者 \cls*{article} 模式且标题级别为 \code{section} 时有效。 @@ -989,7 +989,7 @@ 段落中当前行上标或下标的基线与前一行的间距。 \keyval{depth}{刚性长度} 段落中当前行上标或下标的基线与下一行的间距。 - \keychoice{mode}{text,math,match}\Default{match} + \keychoice{mode}{text,math,\fbox{match}} 上标或下标的输出格式。可以为文本 \code{text} 或数学 \code{math} 模式。当使用选项 \code{match} 时可以根据当前段落所处的模式自动匹配。 \end{options} \end{commands} @@ -1275,9 +1275,9 @@ 全局的符号对照引导符。\cs{symb} 局部的 \meta{引导符} 和对齐方式是基于这个符号的宽度。 \keyval{space}{符号间隙}\Default{0.25em} 符号间隙为引导符两侧与符号和说明文字间的距离。 - \keychoice{item-align}{l,c,r}\Default{r} + \keychoice{item-align}{l,c,\fbox{r}} 符号的对齐方式,分为左 \code{l}、中 \code{c} 和右 \code{r} 三种对齐方式。 - \keychoice{delim-align}{l,c,r}\Default{c} + \keychoice{delim-align}{l,\fbox{c},r} 引导符的对齐方式,分为左 \code{l}、中 \code{c} 和右 \code{r} 三种对齐方式。 \keyval{enumitem}{键值列表2} 可以使用选项 \option{enumitem} 或命令 \cs{seteqcomplist} 调整对照列表的水平和垂直间距。 @@ -1285,7 +1285,7 @@ 符号对照的说明文字。应当为简短的几个字,只显示在第一行,其后为悬挂缩进的对照列表。 \keyval{font}{符号字体} 符号的字体。数学和文本符号模式应采用不同的字体命令,最后一个命令可以接受一个参数,这个参数为符号。 - \keychoice{mode}{math,text}\Default{math} + \keychoice{mode}{\fbox{math},text} 符号字体模式,可以为数学字体或者文本字体。 \end{options} \end{commands} @@ -1335,7 +1335,7 @@ \shortversion{v = 1.638,date = 2022/03/04,changes = 增加目录条目样式选项注册命令 \cs{RegisterTocName}。} \shortversion{v = 1.644,date = 2022/03/10,changes = 增加浮动环境目录声明命令 \cs{DeclareFloatList} 配合 \pkg*{caption} 宏包。} \shortversion{v = 1.682,date = 2022/05/01,changes = 将迷你页判断命令 \cs*{notminipage} 改为被保护命令兼容 \pkg*{circledtext} 宏包。} - \shortversion{v = 2024D,date = 2024/01/07,changes = 核对依赖宏包的更新改动,优化使用手册的内容细节。} + \shortversion{v = 2024E,date = 2024/01/08,changes = 核对依赖宏包的更新改动,优化使用手册的内容细节。} \end{changelog} \nocite{*} diff --git a/macros/latex/contrib/lni/CHANGELOG.md b/macros/latex/contrib/lni/CHANGELOG.md index 9eb9a35d23..84bff5fcc6 100644 --- a/macros/latex/contrib/lni/CHANGELOG.md +++ b/macros/latex/contrib/lni/CHANGELOG.md @@ -1,8 +1,20 @@ # Changelog + All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/). +## [Unreleased] + +## [1.8.1] - 2024-01-08 + +### Changed +- Option `defaultsups` now active for package `newtxtext` + +### Fixed +- Fixed `There's no line here to end.` error for more than two `\affil` calls +- Fixed `\footnote` + ## [1.8] - 2023-11-26 ### Added @@ -69,7 +81,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/). - `hyperref` is loaded without options to make it more compatible with other packages like `authorarchive` - `hypcap` is only loaded if `hyperref` has been loaded before. - ## [1.5] - 2019-04-04 ### Added @@ -156,13 +167,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/). First release of the revised files -[Unreleased]: https://github.com/gi-ev/LNI/compare/v1.8...HEAD -[1.8]: https://github.com/gi-ev/LNI/releases/tag/v1.8 -[1.7]: https://github.com/gi-ev/LNI/releases/tag/v1.7.0 -[1.6]: https://github.com/gi-ev/LNI/releases/tag/v1.6.0 -[1.5]: https://github.com/gi-ev/LNI/releases/tag/v1.5 -[1.4]: https://github.com/gi-ev/LNI/releases/tag/v1.4 -[1.3]: https://github.com/gi-ev/LNI/releases/tag/v1.3 -[1.2]: https://github.com/gi-ev/LNI/releases/tag/v1.2 -[1.1]: https://github.com/gi-ev/LNI/releases/tag/v1.1 +[Unreleased]: https://github.com/gi-ev/LNI/compare/v1.8.1...HEAD +[1.8.1]: https://github.com/gi-ev/LNI/compare/v1.8...v1.8.1 +[1.8]: https://github.com/gi-ev/LNI/compare/v1.7...v1.8 +[1.7]: https://github.com/gi-ev/LNI/compare/v1.6...v1.7 +[1.6]: https://github.com/gi-ev/LNI/compare/v1.5...v1.6 +[1.5]: https://github.com/gi-ev/LNI/compare/v1.4...v1.5 +[1.4]: https://github.com/gi-ev/LNI/compare/v1.3...v1.4 +[1.3]: https://github.com/gi-ev/LNI/compare/v1.2...v1.3 +[1.2]: https://github.com/gi-ev/LNI/compare/v1.1...v1.2 +[1.1]: https://github.com/gi-ev/LNI/compare/v1.0...v1.1 [1.0]: https://github.com/gi-ev/LNI/releases/tag/v1.0 diff --git a/macros/latex/contrib/lni/README.md b/macros/latex/contrib/lni/README.md index b8ab8bdfc7..31fbf3da10 100644 --- a/macros/latex/contrib/lni/README.md +++ b/macros/latex/contrib/lni/README.md @@ -3,8 +3,8 @@ ```yaml ---------------------------------------------------------------------------- lni -- A class for submissions to the ``Lecture Notes in Informatics'' -(c) 2016-2023 Gesellschaft für Informatik (GI) -Version: 1.8 +(c) 2016-2024 Gesellschaft für Informatik (GI) +Version: 1.8.1 Maintainer: Martin Sievers Email: martin.sievers@schoenerpublizieren.de License: Released under the LaTeX Project Public License v1.3c or later diff --git a/macros/latex/contrib/lni/lni.dtx b/macros/latex/contrib/lni/lni.dtx index 399b886416..20261238d4 100644 --- a/macros/latex/contrib/lni/lni.dtx +++ b/macros/latex/contrib/lni/lni.dtx @@ -60,7 +60,7 @@ License:| Released under the LaTeX Project Public License v1.3c or later \postamble -Copyright (C) 2016-2023 by Gesellschaft für Informatik e.V. (GI) +Copyright (C) 2016-2024 by Gesellschaft für Informatik e.V. (GI) This work may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either @@ -134,7 +134,7 @@ This work consists of the file lni.dtx %\NeedsTeXFormat{LaTeX2e}[1999/12/01] %\ProvidesClass{lni} %<*class> - [2023/11/26 v1.8 Official class for submissions to the ``Lecture Notes + [2024/01/08 v1.8.1 Official class for submissions to the ``Lecture Notes in Informatics''] % %<*driver> @@ -425,8 +425,8 @@ This work consists of the file lni.dtx % \DescribeOption{anonymous (new in v1.8)}To easily anonymize a paper for % blind review, use this option. Then all author information will be replaced % with a placeholder. Additionally, there is a new macro \cs{anon\marg{hide in review}} -% which will be replaced with ``ANONIMIZED'' if the option is set. -% Also, \cs{anon\marg[for review]{for final version}} can be used that outputs ``for review'' +% which will be replaced with ``ANONYMIZED'' if the option is set. +% Also, \cs{anon\oarg{for review}\marg{for final version}} can be used that outputs ``for review'' % if the option is set, and ``for final version'' otherwise. % % \newpage @@ -826,7 +826,7 @@ This work consists of the file lni.dtx \ifPDFTeX \IfFileExists{newtxtext.sty} {% - \RequirePackage{newtxtext} + \RequirePackage[defaultsups]{newtxtext} \RequirePackage{newtxmath} \RequirePackage[zerostyle=b,scaled=.9]{newtxtt} % \end{macrocode} @@ -1043,11 +1043,47 @@ This work consists of the file lni.dtx \RequirePackage{enumitem} \RequirePackage[hang]{footmisc} \setlength{\footnotemargin}{1em} -\def\@makefnmark{\rlap{\normalfont\@thefnmark}}% - -% \end{macrocode} -% \begin{macrocode} -%\def\@makefnmark{\rlap{\normalfont\@thefnmark}}% +\long\def\@makefntext#1{% + \def\@makefnmark{\rlap{\normalfont\@thefnmark}}% + \ifFN@hangfoot + \bgroup + \setbox\@tempboxa\hbox{% + \ifdim\footnotemargin>0pt + \hb@xt@\footnotemargin{\@makefnmark\hss}% + \else + \@makefnmark + \fi + }% + \leftmargin\wd\@tempboxa + \rightmargin\z@ + \linewidth \columnwidth + \advance \linewidth -\leftmargin + \parshape \@ne \leftmargin \linewidth + \@totalleftmargin \leftmargin + \footnotesize + \@setpar{{\@@par}}% + \leavevmode + \llap{\box\@tempboxa}% + \parskip\hangfootparskip\relax + \parindent\hangfootparindent\relax + \else + \parindent1em + \noindent + \ifdim\footnotemargin>\z@ + \hb@xt@ \footnotemargin{\hss\@makefnmark}% + \else + \ifdim\footnotemargin=\z@ + \llap{\@makefnmark}% + \else + \llap{\hb@xt@ -\footnotemargin{\@makefnmark\hss}}% + \fi + \fi + \fi + \footnotelayout#1% + \ifFN@hangfoot + \par\egroup + \fi +} % \end{macrocode} % We fix the basewidth for lstlistings: % The default setting of listings with ``fixed columns'' has a space 0.6em @@ -1113,7 +1149,7 @@ This work consists of the file lni.dtx \renewcommand\Authsep{, } \renewcommand\Authands{\iflanguage{ngerman}{ und }{, and }} \renewcommand\Authand{\iflanguage{ngerman}{ und }{ and }} -\renewcommand{\AB@authnote}[1]{$^{\mbox{\footnotesize #1}}$} +\renewcommand{\AB@authnote}[1]{$^{\text{\mbox{\normalfont\footnotesize #1}}}$} \renewcommand\author[4][]{% \ifnewaffil\addtocounter{affil}{1}% \edef\AB@thenote{\arabic{affil}}% @@ -1162,7 +1198,6 @@ This work consists of the file lni.dtx \newaffilfalse } - \renewcommand\@author{% \ifx\AB@affillist\AB@empty\AB@author\else \ifnum\value{affil}>\value{Maxaffil}\def\rlap##1{##1}% @@ -1171,7 +1206,6 @@ This work consists of the file lni.dtx \fi% \fi% } - \renewcommand\affil[2][]{% \newaffiltrue\let\AB@blk@and\AB@pand \if\relax#1\relax\def\AB@note{\AB@thenote}\else\def\AB@note{#1}% @@ -1186,12 +1220,11 @@ This work consists of the file lni.dtx \gdef\AB@las{}\gdef\AB@au@str{}% {\def\\{, \ignorespaces}\xdef\AB@temp{#2}}% \@temptokena=\expandafter{\AB@affillist}% - \xdef\AB@affillist{\the\@temptokena \AB@affilsep + \xdef\AB@affillist{\the\@temptokena \footnotetext[\AB@note]{% \raggedright\AB@temp\ifcsempty{@emailsandorcids\AB@note}{}{, \csuse{@emailsandorcids\AB@note}}}% } \endgroup - \let\AB@affilsep\AB@affilsepx \setcounter{footnote}{#1} } % \end{macrocode} @@ -1392,13 +1425,6 @@ This work consists of the file lni.dtx \vfill\kern-3\p@ \hrule\@width 5cm \kern2.6\p@} - %\newdimen\fnindent - %\fnindent0.18cm - %\long\def\@makefntext#1{% - %\parindent \fnindent% - %\leftskip \fnindent% Einrückung vor der footnotemark - %\noindent - %\llap{\hb@xt@0.10cm{\hss\@makefnmark\ }}\ignorespaces#1} % \end{macrocode} % \begin{macrocode} \setlength{\parindent}{0pt} diff --git a/macros/latex/contrib/lni/lni.pdf b/macros/latex/contrib/lni/lni.pdf index 4fa2e79a5f..ae032bd25b 100644 Binary files a/macros/latex/contrib/lni/lni.pdf and b/macros/latex/contrib/lni/lni.pdf differ diff --git a/macros/latex/contrib/spbmark/spbmark.pdf b/macros/latex/contrib/spbmark/spbmark.pdf index 799e84a323..678496688b 100644 Binary files a/macros/latex/contrib/spbmark/spbmark.pdf and b/macros/latex/contrib/spbmark/spbmark.pdf differ diff --git a/macros/latex/contrib/spbmark/spbmark.sty b/macros/latex/contrib/spbmark/spbmark.sty index 3529829d7e..9d8c24a018 100644 --- a/macros/latex/contrib/spbmark/spbmark.sty +++ b/macros/latex/contrib/spbmark/spbmark.sty @@ -1,7 +1,7 @@ % % ***************** THE SPBMARK PACKAGE ***************** % -% Copyright (C) 2021-2022 by Qu Yi +% Copyright (C) 2021-2024 by Qu Yi % % This work may be distributed and/or modified under the % conditions of the CC-BY 4.0 License. @@ -9,7 +9,7 @@ % https://creativecommons.org/licenses/by/4.0/legalcode \NeedsTeXFormat{LaTeX2e}[2018/12/31] \RequirePackage{xparse,l3keys2e} -\ProvidesExplPackage{spbmark}{2022/10/15}{1.42} +\ProvidesExplPackage{spbmark}{2024/01/08}{1.43} {Customize superscripts and subscripts} \cs_generate_variant:Nn \box_set_ht:Nn { cv } diff --git a/macros/latex/contrib/spbmark/spbmark.tex b/macros/latex/contrib/spbmark/spbmark.tex index a2f0e7e5a0..28025db66c 100644 --- a/macros/latex/contrib/spbmark/spbmark.tex +++ b/macros/latex/contrib/spbmark/spbmark.tex @@ -6,8 +6,8 @@ { package = spbmark, title = the spbmark package, - version = v1.42, - date = 2022/10/15, + version = v1.43, + date = 2024/01/08, authors = Qu Yi, info = Customize superscript and subscript, email = toquyi@163.com, @@ -50,11 +50,11 @@ \label{sec:macro package options} The following macro package options will redefine the script commands of the \LaTeX{} kernel. If you do not specify the values of boolean options, they default to \code{true}. \begin{options} - \keybool{text}\Default{false} + \keychoice{text}{true,\fbox{false}} \cs{textsuperscript} and \cs{textsubscript} are equivalent to the \cs{super} and \cs{sub} commands. - \keybool{math}\Default{false} + \keychoice{math}{true,\fbox{false}} \cs{sp} and \cs{sb} are equivalent to the \cs{super} and \cs{sub} commands. - \keybool{foot}\Default{false} + \keychoice{foot}{true,\fbox{false}} The format of the footnote mark match the superscript global move and format settings. \opt{both} The values of \option{text} and \option{math} two options are \code{true} at the same time. @@ -144,7 +144,7 @@ The options common to \meta{kv list} of the three commands are as follows. They The distance between the superscript or subscript baseline and the next line. \keyval{style}{style name} Use the \meta{style name} defined by the \cs{defspbstyle} command to make it work global or local. - \keychoice{mode}{text,math,match}\Default{match} + \keychoice{mode}{text,math,\fbox{match}} The mode of superscript or subscript output can be \code{text} or \code{math} mode. The \code{match} option automatically matches output modes according to the current mode. \end{options} @@ -203,7 +203,7 @@ The following list of keys control the format of superscript \emph{and} subscrip The distance between the subscript baseline and the next line. \kvsplit{vsep}{super move}{sub move}\Default{0.6ex}\newtag[Changed]% The extra vertical distance between superscript and subscript. The front part is the movement amount of the superscript, and the latter part is the movement amount of the subscript. If only the front part means that both are vertically shifted by one-half of the current value. - \keychoice{halign}{l,c,r}\Default{l} + \keychoice{halign}{\fbox{l},c,r} The alignment of superscript and subscript, which contains \code{l}, \code{c}, and \code{r} parameters respectively for left, center, and right alignment. \end{options} @@ -243,6 +243,7 @@ If you need to use the original definitions of \cs{textsuperscript}, \cs{textsub \section{Known issues} At present, the vertical and horizontal move are effective for the unit commands in the \pkg*{siunitx} macro package. However, due to the special mechanism that the decimal point is not recognized correctly because it's converted to a space in the \cs*{unit} command, it's recommended to use \code{pt} as the unit of move. +\appendix \nocite{*} \end{document} \ No newline at end of file diff --git a/macros/latex/contrib/tuda-ci/README.md b/macros/latex/contrib/tuda-ci/README.md index fa9bdda5ce..96aefe2a35 100644 --- a/macros/latex/contrib/tuda-ci/README.md +++ b/macros/latex/contrib/tuda-ci/README.md @@ -1,8 +1,8 @@ # TUDa-CI – Corporate Design LaTeX-Templates for TU Darmstadt - Copyright (C) Marei Peischl , 2018–2023 + Copyright (C) Marei Peischl , 2018–2024 - tuda-ci v3.35 (2023-12-11) + tuda-ci v3.36 (2024-01-05) *************************************************************************** @@ -352,3 +352,6 @@ leaflets | DEMO-TUDaLeaflet.tex | tudaleaflet.cls * 3.35 (2023-12-11) - first CTAN release of the new slide layout - fix issues with headwidth calculation if custommargins=true is used + * 3.36 (2024-01--05) + - compatibility to create PDF/A via pdfmangement + - small adjustments for \tuprints \ No newline at end of file diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf index acf9ed93bc..4a11fad655 100644 Binary files a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf and b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf differ diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf index a75b9a9453..4029255838 100644 Binary files a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf and b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf differ diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer2023.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer2023.pdf index 835fab9ca9..316ed08c25 100644 Binary files a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer2023.pdf and b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer2023.pdf differ diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf index 3ebdab07f4..4d76ed4220 100644 Binary files a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf and b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf differ diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf index eb2bf25c98..1463f7cdb2 100644 Binary files a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf and b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf differ diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf index fbdc31600c..d02fc33ead 100644 Binary files a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf and b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf differ diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf index 78ba6761b5..b3159b7d0d 100644 Binary files a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf and b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf differ diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf index ef49b09f73..e12f68841b 100644 Binary files a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf and b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf differ diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf index 80a6de24e1..11f5502ce6 100644 Binary files a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf and b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf differ diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf index 23103a873a..129f77376b 100644 Binary files a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf and b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf differ diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf index 1db7a3d759..7769fbfe05 100644 Binary files a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf and b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf differ diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf index cb7f22e3c1..b044a06332 100644 Binary files a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf and b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf differ diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex index d0430503c1..137a5842a7 100644 --- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex +++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex @@ -1,4 +1,4 @@ -%% This is file `DEMO-TUDaAnnouncement.tex' version 3.35 (2023-12-11), +%% This is file `DEMO-TUDaAnnouncement.tex' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex index 9532c5ed19..f4baeae9ff 100644 --- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex +++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex @@ -1,4 +1,4 @@ -%% This is file `DEMO-TUDaBeamer.tex' version 3.35 (2023-12-11), +%% This is file `DEMO-TUDaBeamer.tex' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer2023.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer2023.tex index f9d90c3229..fcede80707 100644 --- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer2023.tex +++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer2023.tex @@ -1,4 +1,4 @@ -%% This is file `DEMO-TUDaBeamer2023.tex' version 3.35 (2023-12-11), +%% This is file `DEMO-TUDaBeamer2023.tex' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib index 5be7e455aa..3a90331cde 100644 --- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib +++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib @@ -1,4 +1,4 @@ -%% This is file `DEMO-TUDaBibliography.bib' version 3.35 (2023-12-11), +%% This is file `DEMO-TUDaBibliography.bib' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex index 57de73e60f..ca0a904ffb 100644 --- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex +++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex @@ -1,4 +1,4 @@ -%% This is file `DEMO-TUDaExercise.tex' version 3.35 (2023-12-11), +%% This is file `DEMO-TUDaExercise.tex' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco index 600379b3f8..1a33aced46 100644 --- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco +++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco @@ -1,4 +1,4 @@ -%% This is file `DEMO-TUDaFromaddress.lco' version 3.35 (2023-12-11), +%% This is file `DEMO-TUDaFromaddress.lco' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex index 1a87494392..c7662dbcdf 100644 --- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex +++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex @@ -1,4 +1,4 @@ -%% This is file `DEMO-TUDaLeaflet.tex' version 3.35 (2023-12-11), +%% This is file `DEMO-TUDaLeaflet.tex' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex index de19d02b07..85131892ef 100644 --- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex +++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex @@ -1,4 +1,4 @@ -%% This is file `DEMO-TUDaLetter.tex' version 3.35 (2023-12-11), +%% This is file `DEMO-TUDaLetter.tex' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex index 253c0da4bb..78da18f4f5 100644 --- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex +++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex @@ -1,4 +1,4 @@ -%% This is file `DEMO-TUDaPhD.tex' version 3.35 (2023-12-11), +%% This is file `DEMO-TUDaPhD.tex' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -292,24 +291,40 @@ Falls eine Layoutanpassung der Titelseite notwendig ist, gelten die in der TUDaP \item[tuprints] \label{page:tuprints}Übergabe der Daten, sofern das Dokument über TUprints Veröffentlicht werden soll. \begin{verbatim} \tuprints{ - urn=1234, - printid=12345, + urn=12345, + printid=123456, year=2022 } \end{verbatim} Falls das Argument kein Gleichheitszeichen erkennt, wird der Wert als \code{printid} gesetzt und keine URN angegeben. - Ab Version 2.07 ist es zudem möglich einen eigenen Lizenztext über den Schlüssel \verb|license| zu übergeben. Dieser ersetzt dann die voreingestellte Lizenzangabe. + \minisec{Lizenzangabe} + Ab Version 2.07 ist es zudem möglich einen eigenen Lizenztext über den Schlüssel \verb|license=| zu übergeben. Dieser ersetzt dann die voreingestellte Lizenzangabe. + + Es existieren (seit v3.08) vorgefertigte Werte für die Option \verb|license|, um eine einfachere Anpassung zu ermöglichen. Diese lauten: + + \parbox[t]{.5\linewidth}{% + \ttfamily + \href{https://creativecommons.org/licenses/by-nc-nd/2.0/}{cc-by-nc-nd-2.0-de} \textnormal{(noch aktuelle Voreinstellung)}\par + \href{https://creativecommons.org/licenses/by/4.0/}{cc-by-4.0}\par + \href{https://creativecommons.org/licenses/by-sa/4.0/}{cc-by-sa-4.0}\par + \href{https://creativecommons.org/licenses/by-nc-sa/4.0/}{cc-by-nc-sa-4.0}\par + }% + \parbox[t]{.5\linewidth}{ + \ttfamily + \href{https://creativecommons.org/licenses/by-nc-/4.0/}{cc-by-nc-4.0}\par + \href{https://creativecommons.org/licenses/by-nd/4.0/}{cc-by-nd-4.0}\par + \href{https://creativecommons.org/licenses/by-nc-nd/4.0/}{cc-by-nc-nd-4.0}\par + \href{https://rightsstatements.org/page/InC/1.0/}{inc-1.0}\textnormal{ (Ab Version 3.36)} + } - Ab Version 3.08 existieren vorgefertigte Werte für die Option \verb|license|, um eine einfachere Anpassung zu ermöglichen. - Dies ist Bestandteil der Vorbereitung zur Anpassung der Standardlizenz, die durch die Universitätsbibliothek angepasst wurde. + Dies ist Bestandteil der Vorbereitung zur Anpassung der Standardlizenz, welche durch die Universitätsbibliothek angepasst wurde. Die entsprechende Diskussion findet sich unter \url{https://github.com/tudace/tuda_latex_templates/issues/251} und eine Anpassung der Voreinstellung bei TUDa-CI ist für Version 4.0 vorgesehen. - Die vorgefertigten Lizenzschlüssel lauten: \verb+cc-by-nc-nd-2.0-de+ (noch aktuelle Voreinstellung), \verb+cc-by-4.0+, \verb+cc-by-sa-4.0+, \verb+cc-by-nc-sa-4.0+, \verb+cc-by-nc-4.0+, \verb+cc-by-nd-4.0+, \verb+cc-by-nc-nd-4.0+. - Unterstützung bei der Wahl einer passenden Creative Commons Lizenz bietet das Projekt über seinen Lizenzfinder unter \url{http://creativecommons.org/choose/}. - Ab Version 3.10 werden alle (Stand: Januar 2021) dort vorgeschlagenen Lizenzen von tuda-ci unterstützt. + Unterstützung bei der Wahl einer passenden Creative Commons Lizenz bietet die ULB der TUDa unter https://www.ulb.tu-darmstadt.de/dpub oder das CC-Projekt sebst über seinen Lizenzfinder unter \url{http://creativecommons.org/choose/}. + Die TU Darmstadt empfiehlt in Ihrer Publikationsrichtlinie und Open-Access-Policy die Nutzung der offenen CC BY 4.0 Lizenz. - Falls ein davon abweichender Wert gewählt wird, wird dieser direkt an der Stelle des Lizenztextes verwendet. Falls der Text Gleichheitszeichen oder Kommata enthält ist eine Gruppierung notwendig. + Falls ein von den oben gelisteten Schlüsseln abweichender Wert gesetzt wird, wird ebendieser direkt an der Stelle des Lizenztextes verwendet. Sofern der Text Gleichheitszeichen oder Kommata enthält ist eine Gruppierung notwendig. \item[titlegraphic] Hier kann Code übergeben werden, der den farbigen Block im unteren Teil der Titelseite ersetzt. Details sind in der allgemeinen TUDaPub-Dokumentation beschrieben \cite{tudapub} \item[titleintro] Ab Version 2.03 kann zusätzlich über diesen Hook ein beliebiger Text direkt nach dem Untertitel und vor den automatischen Daten ergänzt werden. \item[titleaddendum] Wie \code{\tbs{}titleintro} jedoch als letztes Element des Blocks. diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex index a82bbe0b0f..6159ff33b0 100644 --- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex +++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex @@ -1,4 +1,4 @@ -%% This is file `DEMO-TUDaPoster.tex' version 3.35 (2023-12-11), +%% This is file `DEMO-TUDaPoster.tex' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex index 62845243e4..67fac56d18 100644 --- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex +++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex @@ -1,4 +1,4 @@ -%% This is file `DEMO-TUDaPub.tex' version 3.35 (2023-12-11), +%% This is file `DEMO-TUDaPub.tex' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -50,6 +49,7 @@ \let\code\texttt \let\pck\textsf \let\cls\textsf +\biburlsetup \usepackage{hologo} @@ -61,7 +61,7 @@ title=TUDaPub - LaTeX-Paper im Corporate Design der TU Darmstadt, subject=Basisdokumentation und Template zur Nutzung der tudapub-Dokumentenkasse, date=2019-04-29, - keywords=TU Darmstadt \sep Corporate Design \sep LaTeX + keywords=TU Darmstadt\sep Corporate Design\sep LaTeX } \title{TUDaPub -- \LaTeX-Paper im Corporate Design der TU Darmstadt} diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex index 0b1c211b18..afa868309f 100644 --- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex +++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex @@ -1,4 +1,4 @@ -%% This is file `DEMO-TUDaReport.tex' version 3.35 (2023-12-11), +%% This is file `DEMO-TUDaReport.tex' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex index f1f3d8d27a..782da3c25b 100644 --- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex +++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex @@ -1,4 +1,4 @@ -%% This is file `DEMO-TUDaSciPoster.tex' version 3.35 (2023-12-11), +%% This is file `DEMO-TUDaSciPoster.tex' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex index e23ae4bb0c..9100c5b08d 100644 --- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex +++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex @@ -1,4 +1,4 @@ -%% This is file `DEMO-TUDaThesis.tex' version 3.35 (2023-12-11), +%% This is file `DEMO-TUDaThesis.tex' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -94,6 +93,7 @@ \let\tbs\textbackslash \let\pck\textsf \let\cls\textsf +\biburlsetup \usepackage{pifont}% Zapf-Dingbats Symbole \newcommand*{\FeatureTrue}{\ding{52}} @@ -272,26 +272,43 @@ Falls eine Layoutanpassung der Titelseite notwendig ist, gelten die in der TUDaP \item[examdate] Datum der Disputation \item[date] Beliebiges Datum. Wird über \verb|datename| bezeichnet. \item[publishers] Wird hier für die Ortsangabe verwendet und ist mit \enquote{Darmstadt}, bzw. \enquote{Darmstadt, Technische Universität Darmstadt} (bei Dissertationen) vorbelegt. - \item[tuprints] \label{page:tuprints}Übergabe der Daten, sofern das dokument über tuprints Veröffentlicht werden soll. + \item[tuprints] \label{page:tuprints}Übergabe der Daten, sofern das Dokument über TUprints Veröffentlicht werden soll. \begin{verbatim} \tuprints{ - urn=1234, - printid=12345, + printid=12345, + urn=123456, + year=2022 } \end{verbatim} Falls das Argument kein Gleichheitszeichen erkennt, wird der Wert als \code{printid} gesetzt und keine URN angegeben. - Ab Version 2.07 ist es zudem möglich einen eigenen Lizenztext über den Schlüssel \verb|license| zu übergeben. Dieser ersetzt dann die voreingestellte Lizenzangabe. + \minisec{Lizenzangabe} + Ab Version 2.07 ist es zudem möglich einen eigenen Lizenztext über den Schlüssel \verb|license=| zu übergeben. Dieser ersetzt dann die voreingestellte Lizenzangabe. + + Es existieren (seit v3.08) vorgefertigte Werte für die Option \verb|license|, um eine einfachere Anpassung zu ermöglichen. Diese lauten: + + \parbox[t]{.5\linewidth}{% + \ttfamily + \href{https://creativecommons.org/licenses/by-nc-nd/2.0/}{cc-by-nc-nd-2.0-de} \textnormal{(noch aktuelle Voreinstellung)}\par + \href{https://creativecommons.org/licenses/by/4.0/}{cc-by-4.0}\par + \href{https://creativecommons.org/licenses/by-sa/4.0/}{cc-by-sa-4.0}\par + \href{https://creativecommons.org/licenses/by-nc-sa/4.0/}{cc-by-nc-sa-4.0}\par + }% + \parbox[t]{.5\linewidth}{ + \ttfamily + \href{https://creativecommons.org/licenses/by-nc-/4.0/}{cc-by-nc-4.0}\par + \href{https://creativecommons.org/licenses/by-nd/4.0/}{cc-by-nd-4.0}\par + \href{https://creativecommons.org/licenses/by-nc-nd/4.0/}{cc-by-nc-nd-4.0}\par + \href{https://rightsstatements.org/page/InC/1.0/}{inc-1.0}\textnormal{ (Ab Version 3.36)} + } - Ab Version 3.08 existieren vorgefertigte Werte für die Option \verb|license|, um eine einfachere Anpassung zu ermöglichen. - Dies ist Bestandteil der Vorbereitung zur Anpassung der Standardlizenz, die durch die Universitätsbibliothek angepasst wurde. + Dies ist Bestandteil der Vorbereitung zur Anpassung der Standardlizenz, welche durch die Universitätsbibliothek angepasst wurde. Die entsprechende Diskussion findet sich unter \url{https://github.com/tudace/tuda_latex_templates/issues/251} und eine Anpassung der Voreinstellung bei TUDa-CI ist für Version 4.0 vorgesehen. - Die vorgefertigten Lizenzschlüssel lauten: \verb+cc-by-nc-nd-2.0-de+ (noch aktuelle Voreinstellung), \verb+cc-by-4.0+, \verb+cc-by-sa-4.0+, \verb+cc-by-nc-sa-4.0+, \verb+cc-by-nc-4.0+, \verb+cc-by-nd-4.0+, \verb+cc-by-nc-nd-4.0+. - Unterstützung bei der Wahl einer passenden Creative Commons Lizenz bietet das Projekt über seinen Lizenzfinder unter \url{http://creativecommons.org/choose/}. - Ab Version 3.10 werden alle (Stand: Januar 2021) dort vorgeschlagenen Lizenzen von tuda-ci unterstützt. + Unterstützung bei der Wahl einer passenden Creative Commons Lizenz bietet die ULB der TUDa unter https://www.ulb.tu-darmstadt.de/dpub oder das CC-Projekt sebst über seinen Lizenzfinder unter \url{http://creativecommons.org/choose/}. + Die TU Darmstadt empfiehlt in Ihrer Publikationsrichtlinie und Open-Access-Policy die Nutzung der offenen CC BY 4.0 Lizenz. - Falls ein davon abweichender Wert gewählt wird, wird dieser direkt an der Stelle des Lizenztextes verwendet. Falls der Text Gleichheitszeichen oder Kommata enthält ist eine Gruppierung notwendig. + Falls ein von den oben gelisteten Schlüsseln abweichender Wert gesetzt wird, wird ebendieser direkt an der Stelle des Lizenztextes verwendet. Sofern der Text Gleichheitszeichen oder Kommata enthält ist eine Gruppierung notwendig. \item[titlegraphic] Hier kann Code übergeben werden, der den farbigen Block im unteren Teil der Titelseite ersetzt. Details sind in der allgemeinen TUDaPub-Dokumentation beschrieben \cite{tudapub} \item[titleintro] Ab Version 2.03 kann zusätzlich über diesen Hook ein beliebiger Text direkt nach dem Untertitel und vor den automatischen Daten ergänzt werden. \item[titleaddendum] Wie \code{\tbs{}titleintro} jedoch als letztes Element des Blocks. @@ -301,7 +318,7 @@ Falls eine Layoutanpassung der Titelseite notwendig ist, gelten die in der TUDaP Das Makro \verb+\affidavit+ erzeugt eine Selbstständigkeitserklärung mit Unterschriftenzeile. Hier wird der oben übergebene Name/Signatur eingefügt. In diesem Dokument findet sich das Affidavit direkt nach der Titelei. -Ab Version 3.32 entfällt die seit Version 3.06 unterstütze Unterscheidung zwischen einem Affidavit für digitale oder gedruckte Abgaben. Aus Kompatibilitätsgründen werden die Optionen weiterhin verstanden, allerdings bewirken Sie nun beide das gleiche. Der Text entstammt von \url{https://www.tu-darmstadt.de/studieren/studierende_tu/studienorganisation_und_tucan/hilfe_und_faq/artikel_details_de_en_37824.de.jsp} (Stand 2023-06-19). Es ist wingend erforderlich, dass Studierende vor der Abgabe einer Arbeit überprüfen, ob der Text der geforderten Fassung entspricht. +Ab Version 3.32 entfällt die seit Version 3.06 unterstütze Unterscheidung zwischen einem Affidavit für digitale oder gedruckte Abgaben. Aus Kompatibilitätsgründen werden die Optionen weiterhin verstanden, allerdings bewirken nun beide das gleiche. Der Text entstammt von \url{https://www.tu-darmstadt.de/studieren/studierende_tu/studienorganisation_und_tucan/hilfe_und_faq/artikel_details_de_en_37824.de.jsp} (Stand 2023-06-19). Es ist wingend erforderlich, dass Studierende vor der Abgabe einer Arbeit überprüfen, ob der Text der geforderten Fassung entspricht. Dissertationen verwenden hier einen anderen Text, für die Unterscheidung wird die Affidavit-Option \verb+affidavit=dr+ intern verwendet. @@ -309,7 +326,10 @@ Version 3.20 ermöglicht zusätzlich die Übergabe weiterer Optionen für den Si Inwieweit diese Optionen verwendet werden dürfen ist jeweils vor der Verwendung durch die Nutzer:in abzuklären. TUDa-CI kann hierfür keine gesicherte Aussage treffen. \begin{verbatim} - \affidavit[signature=Signaturname,signature-image={\includegraphics[width=\width]{signaturbild}}] + \affidavit[ + signature=Signaturname, + signature-image={\includegraphics[width=\width]{signaturbild}} + ] \end{verbatim} Eine vertikale Verschiebung des Signaturbildes ist nicht direkt implementiert, ist jedoch mit der Verwendung des \LaTeX-Makros \verb+\raisebox{}{}+ problemlos möglich. @@ -352,7 +372,7 @@ Hierbei ist zu beachten, dass die Einstellungen als Ausgangspunkt den Voreingest } \end{verbatim} -Die gilt insbesondere für die Optionen \code{includehead}, \code{includefoot} und \code{includemp}. +Die gilt insbesondere für die Optionen \code{includehead}, \code{includefoot}, \code{includemp}. \end{description} diff --git a/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty b/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty index cfb344c1a0..f57f5caefe 100644 --- a/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty +++ b/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty @@ -1,4 +1,4 @@ -%% This is file `beamercolorthemeTUDa.sty' version 3.35 (2023-12-11), +%% This is file `beamercolorthemeTUDa.sty' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{beamercolorthemeTUDa} [\filedate\space\fileversion] diff --git a/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa2023.sty b/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa2023.sty index ec64aaaf9a..f1f4835aec 100644 --- a/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa2023.sty +++ b/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa2023.sty @@ -1,4 +1,4 @@ -%% This is file `beamercolorthemeTUDa2023.sty' version 3.35 (2023-12-11), +%% This is file `beamercolorthemeTUDa2023.sty' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{beamercolorthemeTUDa2023} [\filedate\space\fileversion] diff --git a/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty b/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty index dbfb4744a3..e5d474ff9a 100644 --- a/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty +++ b/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty @@ -1,4 +1,4 @@ -%% This is file `beamerfontthemeTUDa.sty' version 3.35 (2023-12-11), +%% This is file `beamerfontthemeTUDa.sty' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{beamerfontthemeTUDa} [\filedate\space\fileversion] diff --git a/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa2023.sty b/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa2023.sty index 0ee8bc3d9c..14663a8528 100644 --- a/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa2023.sty +++ b/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa2023.sty @@ -1,4 +1,4 @@ -%% This is file `beamerfontthemeTUDa2023.sty' version 3.35 (2023-12-11), +%% This is file `beamerfontthemeTUDa2023.sty' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{beamerfontthemeTUDa2023} [\filedate\space\fileversion] diff --git a/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty b/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty index de588da9ca..832504cbf4 100644 --- a/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty +++ b/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty @@ -1,4 +1,4 @@ -%% This is file `beamerinnerthemeTUDa2023.sty' version 3.35 (2023-12-11), +%% This is file `beamerinnerthemeTUDa2023.sty' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e} \ProvidesExplPackage{beamerinnerthemeTUDa2023}{\filedate}{\fileversion}{Inner~beamer~theme~of~tuda-ci} diff --git a/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2008.sty b/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2008.sty index 520176460c..0e87fea683 100644 --- a/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2008.sty +++ b/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2008.sty @@ -1,4 +1,4 @@ -%% This is file `beamerinnerthemeTUDa2008.sty' version 3.35 (2023-12-11), +%% This is file `beamerinnerthemeTUDa2008.sty' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e} \ProvidesExplPackage{beamerinnerthemeTUDa}{\filedate}{\fileversion}{Inner~beamer~theme~of~tuda-ci, compatibility for design of 2008} diff --git a/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2023.sty b/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2023.sty index 364ece88b6..615e2ab5a3 100644 --- a/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2023.sty +++ b/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2023.sty @@ -1,4 +1,4 @@ -%% This is file `beamerinnerthemeTUDa2023.sty' version 3.35 (2023-12-11), +%% This is file `beamerinnerthemeTUDa2023.sty' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e} \ProvidesExplPackage{beamerinnerthemeTUDa2023}{\filedate}{\fileversion}{Inner~beamer~theme~of~tuda-ci,~Design~of~2023} diff --git a/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty b/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty index 38a642df3a..fc1db6be04 100644 --- a/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty +++ b/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty @@ -1,4 +1,4 @@ -%% This is file `beamerouterthemeTUDa.sty' version 3.35 (2023-12-11), +%% This is file `beamerouterthemeTUDa.sty' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e} \ProvidesExplPackage{beamerouterthemeTUDa}{\filedate}{\fileversion}{Outer~beamer~theme~of~tuda-ci} \RequirePackage[paper=slide]{tudarules} diff --git a/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa2023.sty b/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa2023.sty index 9e719e0157..980803001c 100644 --- a/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa2023.sty +++ b/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa2023.sty @@ -1,4 +1,4 @@ -%% This is file `beamerouterthemeTUDa2023.sty' version 3.35 (2023-12-11), +%% This is file `beamerouterthemeTUDa2023.sty' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e}[2022-06-01] \ProvidesExplPackage{beamerouterthemeTUDa2023}{\filedate}{\fileversion}{Outer~beamer~theme~of~tuda-ci~design~of~2023} diff --git a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty index 5cae22d81b..73aa5a5e29 100644 --- a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty +++ b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty @@ -1,4 +1,4 @@ -%% This is file `beamerthemeTUDa-mecheng.sty' version 3.35 (2023-12-11), +%% This is file `beamerthemeTUDa-mecheng.sty' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \ProvidesExplPackage{beamerthemeTUDa-mecheng}{\filedate}{\fileversion}{specific tudabeamer configuration for the department of mechanical engineering} diff --git a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty index ddf8e8ee2c..3ed1238fae 100644 --- a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty +++ b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty @@ -1,4 +1,4 @@ -%% This is file `beamerthemeTUDa.sty' version 3.35 (2023-12-11), +%% This is file `beamerthemeTUDa.sty' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{beamerthemeTUDa} [\filedate\space\fileversion\space beamer theme using the Corporate Design of TU Darmstadt] diff --git a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2008.sty b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2008.sty index 3caba66bd6..1d9b112bc8 100644 --- a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2008.sty +++ b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2008.sty @@ -1,4 +1,4 @@ -%% This is file `beamerthemeTUDa2008.sty' version 3.35 (2023-12-11), +%% This is file `beamerthemeTUDa2008.sty' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{beamerthemeTUDa2008} [\filedate\space\fileversion\space beamer theme using the Corporate Design of TU Darmstadt Design of 2008] diff --git a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2023.sty b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2023.sty index b4d98c0890..91e3125172 100644 --- a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2023.sty +++ b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2023.sty @@ -1,4 +1,4 @@ -%% This is file `beamerthemeTUDa2023.sty' version 3.35 (2023-12-11), +%% This is file `beamerthemeTUDa2023.sty' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{beamerthemeTUDa2023} [\filedate\space\fileversion\space beamer theme using the Corporate Design of TU Darmstadt Design of 2023] diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo index 419fb6c54f..2a019ee5d2 100644 --- a/macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo +++ b/macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo @@ -1,4 +1,4 @@ -%% This is file `tuda-a0paper.clo' version 3.35 (2023-12-11), +%% This is file `tuda-a0paper.clo' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \ProvidesExplFile{tuda-a0paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a0paper} \cs_set:Nn \ptxcd_setup_title_sizes: { \cs_set:Nn \ptxcd_title_fontsize: {{125pt}{165pt}} diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo index 345bfe07a8..ecb299f814 100644 --- a/macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo +++ b/macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo @@ -1,4 +1,4 @@ -%% This is file `tuda-a1paper.clo' version 3.35 (2023-12-11), +%% This is file `tuda-a1paper.clo' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \ProvidesExplFile{tuda-a1paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a1paper} \cs_set:Nn \ptxcd_setup_title_sizes: { \cs_set:Nn \ptxcd_title_fontsize: {{86pt}{120pt}} diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo index fc0b62114c..5af8fb7ae6 100644 --- a/macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo +++ b/macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo @@ -1,4 +1,4 @@ -%% This is file `tuda-a2paper.clo' version 3.35 (2023-12-11), +%% This is file `tuda-a2paper.clo' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \ProvidesExplFile{tuda-a2paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a0paper} \cs_set:Nn \ptxcd_setup_title_sizes: { \cs_set:Nn \ptxcd_title_fontsize: {{65pt}{82pt}} diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo index 63e5c24610..ced810ba44 100644 --- a/macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo +++ b/macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo @@ -1,4 +1,4 @@ -%% This is file `tuda-a3paper.clo' version 3.35 (2023-12-11), +%% This is file `tuda-a3paper.clo' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \ProvidesExplFile{tuda-a3paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a3paper} \cs_set:Nn \ptxcd_setup_title_sizes: { \cs_set:Nn \ptxcd_title_fontsize: {{47pt}{61pt}} diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo index 7d027d7233..9081c79a2f 100644 --- a/macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo +++ b/macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo @@ -1,4 +1,4 @@ -%% This is file `tuda-a4paper.clo' version 3.35 (2023-12-11), +%% This is file `tuda-a4paper.clo' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \ProvidesExplFile{tuda-a4paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a4paper} \cs_set:Nn \ptxcd_setup_title_sizes: { \cs_set:Nn \ptxcd_title_fontsize: {{36pt}{47pt}} diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo index 57d42e91be..75e80d48ce 100644 --- a/macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo +++ b/macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo @@ -1,4 +1,4 @@ -%% This is file `tuda-a5paper.clo' version 3.35 (2023-12-11), +%% This is file `tuda-a5paper.clo' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \ProvidesExplFile{tuda-a5paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a5paper} \cs_set:Nn \ptxcd_setup_title_sizes: { \cs_set:Nn \ptxcd_title_fontsize: {{22pt}{28pt}} diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty b/macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty index ef39aa9992..405025a4ea 100644 --- a/macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty +++ b/macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty @@ -1,4 +1,4 @@ -%% This is file `tuda-pgfplots.sty' version 3.35 (2023-12-11), +%% This is file `tuda-pgfplots.sty' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} % Special thanks to: Sebastian Schöps Institut Theorie Elektromagnetischer Felder (TEMF), TU Darmstadt % The original version of this file has been inspired by the colorscheme in the Metropolis beamer theme by Matthias Vogelgesang https://github.com/matze/mtheme \ProvidesPackage{tuda-pgfplots}[\filedate\space\fileversion\space tuda-ci pgfplots color schemes] diff --git a/macros/latex/contrib/tuda-ci/tex/tudabeamer.cls b/macros/latex/contrib/tuda-ci/tex/tudabeamer.cls index 147c0f66cb..0a2ab1ee48 100644 --- a/macros/latex/contrib/tuda-ci/tex/tudabeamer.cls +++ b/macros/latex/contrib/tuda-ci/tex/tudabeamer.cls @@ -1,4 +1,4 @@ -%% This is file `tudabeamer.cls' version 3.35 (2023-12-11), +%% This is file `tudabeamer.cls' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e} \ProvidesClass{tudabeamer} [\filedate\space\fileversion\space] diff --git a/macros/latex/contrib/tuda-ci/tex/tudacolors.def b/macros/latex/contrib/tuda-ci/tex/tudacolors.def index 001a3fbda8..482049e5e6 100644 --- a/macros/latex/contrib/tuda-ci/tex/tudacolors.def +++ b/macros/latex/contrib/tuda-ci/tex/tudacolors.def @@ -1,4 +1,4 @@ -%% This is file `tudacolors.def' version 3.35 (2023-12-11), +%% This is file `tudacolors.def' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \ProvidesFile{tudacolors.def} [\filedate\space\fileversion\space Color definitions for tuda-ci] diff --git a/macros/latex/contrib/tuda-ci/tex/tudacolors.sty b/macros/latex/contrib/tuda-ci/tex/tudacolors.sty index edfae54d5c..12c351e281 100644 --- a/macros/latex/contrib/tuda-ci/tex/tudacolors.sty +++ b/macros/latex/contrib/tuda-ci/tex/tudacolors.sty @@ -1,4 +1,4 @@ -%% This is file `tudacolors.sty' version 3.35 (2023-12-11), +%% This is file `tudacolors.sty' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e} \ProvidesExplPackage{tudacolors}{\filedate}{\fileversion}{Color definition for TU Darmstadt's tuda-ci bundle} diff --git a/macros/latex/contrib/tuda-ci/tex/tudaexercise.cls b/macros/latex/contrib/tuda-ci/tex/tudaexercise.cls index 938e825893..c9f99798f0 100644 --- a/macros/latex/contrib/tuda-ci/tex/tudaexercise.cls +++ b/macros/latex/contrib/tuda-ci/tex/tudaexercise.cls @@ -1,4 +1,4 @@ -%% This is file `tudaexercise.cls' version 3.35 (2023-12-11), +%% This is file `tudaexercise.cls' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e} \ProvidesExplClass{tudaexercise} diff --git a/macros/latex/contrib/tuda-ci/tex/tudafonts.sty b/macros/latex/contrib/tuda-ci/tex/tudafonts.sty index 7fd595b795..e97c230514 100644 --- a/macros/latex/contrib/tuda-ci/tex/tudafonts.sty +++ b/macros/latex/contrib/tuda-ci/tex/tudafonts.sty @@ -1,4 +1,4 @@ -%% This is file `tudafonts.sty' version 3.35 (2023-12-11), +%% This is file `tudafonts.sty' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{tudafonts} [\filedate\space\fileversion\space diff --git a/macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls b/macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls index d51348d2ae..108a41cc0a 100644 --- a/macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls +++ b/macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls @@ -1,4 +1,4 @@ -%% This is file `tudaleaflet.cls' version 3.35 (2023-12-11), +%% This is file `tudaleaflet.cls' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e} \ProvidesExplPackage{tudaleaflet}{\filedate}{\fileversion}{Leaflets using the Corporate Design of TU Darmstadt} diff --git a/macros/latex/contrib/tuda-ci/tex/tudaletter.cls b/macros/latex/contrib/tuda-ci/tex/tudaletter.cls index 8e3a091042..d322be13dd 100644 --- a/macros/latex/contrib/tuda-ci/tex/tudaletter.cls +++ b/macros/latex/contrib/tuda-ci/tex/tudaletter.cls @@ -1,4 +1,4 @@ -%% This is file `tudaletter.cls' version 3.35 (2023-12-11), +%% This is file `tudaletter.cls' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e} \ProvidesExplClass{tudaletter} diff --git a/macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo b/macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo index 67bffe121f..b5d756dd77 100644 --- a/macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo +++ b/macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo @@ -1,4 +1,4 @@ -%% This is file `tudalettersize10pt.clo' version 3.35 (2023-12-11), +%% This is file `tudalettersize10pt.clo' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -32,7 +32,7 @@ %% %% This work has the LPPL maintenance status `maintained'. %% -%% The Current Maintainers of this work are Marei Peischl and Markus Lazanowski . +%% The Current Maintainers of this work are Marei Peischl . %% %% \ProvidesFile{% diff --git a/macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg b/macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg index 8480fecfe0..6c99184ae7 100644 --- a/macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg +++ b/macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg @@ -1,4 +1,4 @@ -%% This is file `tudamecheng.cfg' version 3.35 (2023-12-11), +%% This is file `tudamecheng.cfg' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \RequirePackage{expl3} \ProvidesExplFile{tudamecheng.cfg} {\filedate}{\fileversion}{Special Features the department of mechanical engineering of Darmstadt's Corporate Design (tuda-ci)} diff --git a/macros/latex/contrib/tuda-ci/tex/tudaposter.cls b/macros/latex/contrib/tuda-ci/tex/tudaposter.cls index deff73c12c..55bae572c7 100644 --- a/macros/latex/contrib/tuda-ci/tex/tudaposter.cls +++ b/macros/latex/contrib/tuda-ci/tex/tudaposter.cls @@ -1,4 +1,4 @@ -%% This is file `tudaposter.cls' version 3.35 (2023-12-11), +%% This is file `tudaposter.cls' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e} \ProvidesExplPackage{tudaposter}{\filedate}{\fileversion}{Poster Layouts for the Corporate Design of TU Darmstadt} diff --git a/macros/latex/contrib/tuda-ci/tex/tudapub.cls b/macros/latex/contrib/tuda-ci/tex/tudapub.cls index 16f659174f..ce48e40441 100644 --- a/macros/latex/contrib/tuda-ci/tex/tudapub.cls +++ b/macros/latex/contrib/tuda-ci/tex/tudapub.cls @@ -1,4 +1,4 @@ -%% This is file `tudapub.cls' version 3.35 (2023-12-11), +%% This is file `tudapub.cls' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e} \ProvidesExplClass{tudapub} @@ -109,7 +108,7 @@ headline .initial:n =false, colorback .bool_gset:N = \g_ptxcd_colorback_bool, colorback .initial:n = true, - colorback / title .code:n = + colorback / title .code:n = \bool_gset_true:N \g_ptxcd_colorbacktitle_bool \bool_gset_true:N \g_ptxcd_colorback_bool \bool_gset_false:N \g_ptxcd_colorbacksubtitle_bool, @@ -117,13 +116,15 @@ \bool_gset_false:N \g_ptxcd_colorbacktitle_bool \bool_gset_false:N \g_ptxcd_colorbacksubtitle_bool \bool_gset_true:N \g_ptxcd_colorback_bool, - colorback / head .code:n = + colorback / head .code:n = \bool_gset_true:N \g_ptxcd_colorbacktitle_bool \bool_gset_true:N \g_ptxcd_colorback_bool \bool_gset_true:N \g_ptxcd_colorbacksubtitle_bool, colortitleback .code:n = \msg_error:nnx {tudapub} {compatibility-only} {\l_keys_key_tl}, pdfa .bool_gset:N = \g_ptxcd_pdfa_bool, pdfa .initial:n = true, + pdfx .bool_gset:N = \g_ptxcd_pdfx_bool, + pdfx .initial:n = true, twocolumn .bool_gset:N = \g_ptxcd_twocolumn_bool, twocolumn .default:n = true, twocolumn .initial:n = false, @@ -195,10 +196,37 @@ \ProcessKeyOptions[ptxcd/pub] +\bool_if:NF \g_ptxcd_pdfa_bool {\bool_gset_false:N \g_ptxcd_pdfx_bool} -%Option adjustments required for valid PDF/A -\bool_if:NT \g_ptxcd_pdfa_bool { - \PassOptionsToPackage{RGB}{xcolor} +\bool_if:NT \g_ptxcd_pdfa_bool { + \msg_new:nnn {tudapub} {colors-to-rgb} { + You~did~not~add~a~color~profile.\\ + I~will~use~the~default~one~and~automatically~try~to~convert~internal~colors~to~RGB.\\ + This~is~required~to~be~able~to~create~PDF/A~compliance. + } + + \cs_if_exist:NT \pdfmeta_standard_get:nN { + \pdfmeta_standard_get:nN {outputintent_A} \l_tmpa_tl + \quark_if_no_value:NF \l_tmpa_tl { + \bool_gset_false:N \g_ptxcd_pdfx_bool + \msg_new:nnn{tudapub} {prefer-lualatex} { + I~detected~usage~of~l3pdfmeta~(\DocumentMetadata)~to~create~PDF/A.\\ + tudapub~will~not~load~pdfx~to~avoid~conflicts.\\ + To~disable this message use pdfx=false. + } + \msg_info:nn {tudapub} {prefer-lualatex} + } + + \prop_if_in:NnF \g__pdfmeta_outputintents_prop {GTS_PDFA1} { + \PassOptionsToPackage{rgb}{xcolor} + \msg_info:nn {tudapub} {colors-to-rgb} + } + } +} + +\bool_if:NT \g_ptxcd_pdfx_bool { + \PassOptionsToPackage{rgb}{xcolor} + \msg_info:nn {tudapub} {colors-to-rgb} } \exp_args:Nx \tl_if_eq:nnT {\prop_item:Nn \g_ptxcd_clsopts_prop {fontsize}} {9pt} @@ -665,7 +693,7 @@ +\c_ptxcd_rulesep_dim ]{title.TUDa.image} - \bool_if:NT \g_ptxcd_colorbacktitle_bool { + \bool_if:NT \g_ptxcd_colorbacktitle_bool { \ModifyLayer[ textarea, addvoffset=\dim_eval:n {\box_ht:N \ptxcd_headrule_box+\box_dp:N \ptxcd_headrule_box-\g_ptxcd_titlerule_dim}, @@ -770,7 +798,7 @@ \tl_if_empty:NTF \g_ptxcd_titleimage_code_tl { \bool_if:NF \g_ptxcd_colorbacktitle_bool - { + { \bool_if:NT \g_ptxcd_colorback_bool {\putLL{\color{identbarcolor}\rule{\layerwidth}{\layerheight}}} } } @@ -844,7 +872,7 @@ %Logos \RequirePackage{graphicx} -\if_bool:N \g_ptxcd_pdfa_bool +\if_bool:N \g_ptxcd_pdfx_bool \msg_new:nnn{tudapub} {prefer-lualatex} { You~use~pdfa-mode~in~#1.\\ @@ -879,9 +907,8 @@ \msg_error:nn{tudapub} {outdated-package-pdfa} {pdfx} } - %%hyperref - \hypersetup{hidelinks, unicode} + \hypersetup{hidelinks, unicode,pdfa} \iow_new:N \ptxcd_xmpdata_stream \tl_new:N \g_ptxcd_xmp_title_tl \tl_new:N \g_ptxcd_xmp_author_tl @@ -948,17 +975,70 @@ } \msg_new:nnnn{tudapub} {unknown-metadata} { - You~ used~ the~ #1~ metadata~ entry.\\ - I~ don't~ know~ how~ to~ handle~ that.\\ - It~ will~ be~ ignored. + You~ used~ the~ #1~ metadata~ entry.\\ + I~ don't~ know~ how~ to~ handle~ that.\\ + It~ will~ be~ ignored. } {See~ TUDa-CI~ or~ pdfx~ documentation~ for~ details.} \else: - \msg_new:nnn{tudapub} {no-pdfa}{The~ tudapub~ class~ won't~ create~ PDF/A-mode.} - \msg_info:nn{tudapub} {no-pdfa} - %%hyperref - \RequirePackage[hidelinks, unicode]{hyperref} + \PassOptionsToPackage{hidelinks, unicode}{hyperref} + \RequirePackage{hyperref} + \hypersetup{pdfcreator=LaTeX~using~TUDa-CI} + + \msg_new:nnnn {tudapub} {metadata-to-hypersetup} { + You~don't~use~pdfx.\\ + Here~the~\string\Metadata\~command~only~exists~for~compatibility~reasons.\\ + I~will~pass~the~data~to~ḩypersetup. + }{ + If~possible~please~use~hyperref's~\strung\hypersetup~command~for~the~metadata~directly.\\ + See~hyperref~documentation~for~details~on~usage. + } - \newcommand{\Metadata}[1]{\ClassError{tudapub}{You~cannot~use~\string\Metadata\ ~with~pdfa=false.}{}} + \newcommand*{\Metadata}[1]{ + \tl_set:Nn \l_tmpa_tl {#1} + \tl_replace_all:Nnn \l_tmpa_tl {\sep} {;~}% pdfx-Syntax compatibility + \clist_map_inline:Nn \l_tmpa_tl { + \exp_args:Nx \hypersetup{pdf\tl_trim_spaces:n {##1}} + } + \msg_warning:nn {tudapub} {metadata-to-hypersetup} + } + + + \cs_new:Nn \ptxcd_pass_TitleData: { + % check if pdfmanagement is active + \prop_if_exist:NTF \g__pdfmanagement_documentproperties_prop { + \prop_set_eq:NN \l_tmpa_prop \g__pdfmanagement_documentproperties_prop + } { + \prop_set_eq:NN \l_tmpa_prop \g__hyp_documentproperties_prop + } + + % title + \prop_if_in:NnF \l_tmpa_prop {hyperref/pdftitle} { + \begingroup + \def\newline{} + \def\\{} + \let\thanks\use_none:n + \tl_gset:Nf \g_tmpa_tl {\@title} + \endgroup + \hypersetup{pdftitle={\tl_to_str:V \g_tmpa_tl}} + } + + % author + \prop_if_in:NnF \l_tmpa_prop {hyperref/pdfauthor} { + \begingroup + \def\newline{} + \def\\{} + \let\thanks\use_none:n + \tl_gset:Nx \g_tmpa_tl {\seq_use:Nn \g_ptxcd_author_seq {\exp_not:N \and}} + \tl_gset:Nx \g_tmpa_tl {\g_tmpa_tl } + \endgroup + \hypersetup{pdfauthor=\g_tmpa_tl} + } + } + + \bool_if:NF \g_ptxcd_pdfa_bool { + \msg_new:nnn{tudapub} {no-pdfa}{The~ tudapub~ class~ won't~ create~ PDF/A-mode.} + \msg_info:nn{tudapub} {no-pdfa} + } \fi: \box_new:N \g_ptxcd_sponsor_box diff --git a/macros/latex/contrib/tuda-ci/tex/tudarules.sty b/macros/latex/contrib/tuda-ci/tex/tudarules.sty index 9ae3e48885..22b74c478b 100644 --- a/macros/latex/contrib/tuda-ci/tex/tudarules.sty +++ b/macros/latex/contrib/tuda-ci/tex/tudarules.sty @@ -1,4 +1,4 @@ -%% This is file `tudarules.sty' version 3.35 (2023-12-11), +%% This is file `tudarules.sty' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e} \ProvidesExplPackage{tudarules}{\filedate}{\fileversion}{Creation of colored bars for tuda-ci bundle} diff --git a/macros/latex/contrib/tuda-ci/tex/tudasciposter.cls b/macros/latex/contrib/tuda-ci/tex/tudasciposter.cls index 8c6da6486e..3ebd638173 100644 --- a/macros/latex/contrib/tuda-ci/tex/tudasciposter.cls +++ b/macros/latex/contrib/tuda-ci/tex/tudasciposter.cls @@ -1,4 +1,4 @@ -%% This is file `tudasciposter.cls' version 3.35 (2023-12-11), +%% This is file `tudasciposter.cls' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \NeedsTeXFormat{LaTeX2e} \ProvidesExplPackage{tudasciposter}{\filedate}{\fileversion}{Scientific Poster Layout for TU Darmstadt} diff --git a/macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo b/macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo index 0b23256ff5..4977d1918e 100644 --- a/macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo +++ b/macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo @@ -1,4 +1,4 @@ -%% This is file `tudasize9pt.clo' version 3.35 (2023-12-11), +%% This is file `tudasize9pt.clo' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -32,7 +32,7 @@ %% %% This work has the LPPL maintenance status `maintained'. %% -%% The Current Maintainers of this work are Marei Peischl and Markus Lazanowski . +%% The Current Maintainers of this work are Marei Peischl . %% %% \ProvidesFile{% diff --git a/macros/latex/contrib/tuda-ci/tex/tudathesis.cfg b/macros/latex/contrib/tuda-ci/tex/tudathesis.cfg index 6f18fa2ac9..ded4b7c23b 100644 --- a/macros/latex/contrib/tuda-ci/tex/tudathesis.cfg +++ b/macros/latex/contrib/tuda-ci/tex/tudathesis.cfg @@ -1,4 +1,4 @@ -%% This is file `tudathesis.cfg' version 3.35 (2023-12-11), +%% This is file `tudathesis.cfg' version 3.36 (2024-01-05), %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt %% ---------------------------------------------------------------------------- @@ -18,7 +18,6 @@ %% %% The Current Maintainers of this work are %% Marei Peischl -%% Markus Lazanowski %% %% The development respository can be found at %% https://github.com/tudace/tuda_latex_templates @@ -26,8 +25,8 @@ %% %% ============================================================================ %% -\def\fileversion{3.35} -\def\filedate{2023-12-11} +\def\fileversion{3.36} +\def\filedate{2024-01-05} \RequirePackage{expl3} \ProvidesExplFile{tudathesis.cfg} {\filedate}{\fileversion}{Special Features for publication type 'thesis' using TU Darmstadt's Corporate Design (tuda-ci)} @@ -302,10 +301,16 @@ \tl_gset:Nx \g_ptxcd_license_info_tl {\exp_not:N \g__ptxcd_cc_license:n {\l_keys_choice_tl} \exp_not:N \iflanguage{\exp_not:N \bbl@main@language}{}{\exp_not:n {\par\smallskip\otherlanguage{\bbl@main@language}}{\exp_not:N \g__ptxcd_cc_license:n {\l_keys_choice_tl}}}} }, license / cc-by-nc-nd-2.0-de .code:n = \tl_gset:Nn \g_ptxcd_license_info_tl {\use:c {g__ptxcd_cc-by-nc-nd-2.0-de:}}, - license / initial .code:n = { - \keys_set:nn {ptxcd/thesis} {license=cc-by-nc-nd-2-de} - \tl_put_right:Nn \g_ptxcd_license_info_tl {\msg_warning:nn {tudapub/thesis} {default-license-will-change}} + license / inc-1.0-de .code:n = \tl_gset:Nn \g_ptxcd_license_info_tl { + Die~Veröffentlichung~ist~urheberrechtlich~geschützt\newline + \url{https://rightsstatements.org/page/InC/1.0/} }, + license / inc-1.0-en .code:n = \tl_gset:Nn \g_ptxcd_license_info_tl { + This~work~is~protected~by~copyright\newline + \url{https://rightsstatements.org/page/InC/1.0/} + }, + license / inc-1.0 .code:n = \tl_if_in:NnTF \languagename {german} {\keys_set:nn {ptxcd/thesis}{license=inc-1.0-de}}{\keys_set:nn {ptxcd/thesis}{license=inc-1.0-en}}, + license / initial .code:n = {\keys_set:nn {ptxcd/thesis} {license=cc-by-4.0}}, license / unknown .code:n = \tl_gset:Nn \g_ptxcd_license_info_tl {#1}, license .initial:n = initial, signature .tl_set:N = \l_ptxcd_signature_tl, @@ -371,13 +376,13 @@ \selectlanguage{ngerman} Bitte~zitieren~Sie~dieses~Dokument~als: \tl_if_empty:NF \g_ptxcd_thesis_urn_tl {\\URN:~urn:nbn:de:tuda-tuprints-\g_ptxcd_thesis_urn_tl}\\ - URL:~\url{http://tuprints.ulb.tu-darmstadt.de/\g_ptxcd_thesis_tuprints_tl}\\ + URL:~\url{https://tuprints.ulb.tu-darmstadt.de/\g_ptxcd_thesis_tuprints_tl}\\ \tl_if_empty:NF \g_ptxcd_thesis_doi_tl {DOI:~\url{https://doi.org/\g_ptxcd_thesis_doi_tl}\\} \tl_if_empty:NF \g_ptxcd_thesis_publication_year_tl {Jahr~der~Veröffentlichung~auf~TUprints:~\g_ptxcd_thesis_publication_year_tl} \par\vspace{\baselineskip} Dieses~Dokument~wird~bereitgestellt~von~tuprints,\\ E-Publishing-Service~der~TU~Darmstadt\\ - \url{http://tuprints.ulb.tu-darmstadt.de}\\ + \url{https://tuprints.ulb.tu-darmstadt.de}\\ \url{tuprints@ulb.tu-darmstadt.de}\\[2\baselineskip] \tl_if_empty:NF \g_ptxcd_license_info_tl {\\[2\baselineskip]\g_ptxcd_license_info_tl} }% diff --git a/macros/luatex/generic/minim-math/README b/macros/luatex/generic/minim-math/README index bb7786d6cb..24fe3397f1 100644 --- a/macros/luatex/generic/minim-math/README +++ b/macros/luatex/generic/minim-math/README @@ -1,4 +1,4 @@ -Version: 2023/1.3 +Version: 2024/1.4 SUMMARY @@ -18,6 +18,10 @@ In order to obtain the typeset manual of this package, simply say: HISTORY +2024/1.4 (5/1/2024) + + * Add \floor and \ceil macros + 2023/1.3 (20/10/2023) No notable changes. diff --git a/macros/luatex/generic/minim-math/minim-math.doc b/macros/luatex/generic/minim-math/minim-math.doc index 2a44dc72f4..3648458b57 100644 --- a/macros/luatex/generic/minim-math/minim-math.doc +++ b/macros/luatex/generic/minim-math/minim-math.doc @@ -8,8 +8,8 @@ \else \startmetadata author {Esger Renkema} title {minim-math} - date {2023-10-20} - version {2023/1.3} + date {2024-01-05} + version {2024/1.4} keywords {LuaTeX; Plain TeX; Unicode mathematics} stopmetadata \maketitle \fi @@ -64,6 +64,7 @@ For nonmathematical text, you should use ⟦*\text⟧ instead of ⟦\mup⟧. The default properties of characters can be set with one of the following three commands: \startlist +\tagattribute List ListNumbering /Unordered \item\ignore. ⟦*\mathmap {character list} {style}⟧ \item\ignore. ⟦*\mathclass {character list} {class}⟧ \item\ignore. ⟦*\mathfam {character list} nr⟧ @@ -72,6 +73,7 @@ There, ⟦style⟧ is one of the above and ⟦class⟧ is the name of a class as Finally, the ⟦character list⟧ should be a comma-separated list with elements of one of the following forms: \startlist +\tagattribute List ListNumbering /Decimal {\def\⟦#1{⟦[\uppercase{#1}#1]\kern-1pt} \item1. a list of characters, like ⟦abc⟧ or ⟦\partial⟧ or $ℝ$; \item2. a character range, like ⟦`A-`Z⟧, ⟦65-90⟧ or ⟦"41-"5A⟧; @@ -188,6 +190,7 @@ Shorthand & Result \cr ⟦\bra x, \ket y⟧ & $\bra x, \ket y$ \cr ⟦\braket x y⟧ & $\braket x y$ \cr ⟦\norm x, \Norm x⟧ & $\norm x, \Norm x$ \cr +⟦\floor x, \ceil x⟧ & $\floor x, \ceil x$ \cr ⟦x \stackrel ?= y⟧ & $x \stackrel ?= y$ \cr ⟦x \stackbin a+ y⟧ & $x \stackbin a+ y$ \cr ⟦f\inv⟧ & $f\inv$ \quad (cf. $f^{-1}$) \cr @@ -233,6 +236,7 @@ contents of this package; I have included them because I find them hard to remember. \startlist +\tagattribute List ListNumbering /Decimal \item1. ⟦*\eqalign⟧ gives a vertically centered box and can occur many times in an equation, while ⟦*\eqalignno⟧ and ⟦*\leqalignno⟧ span whole lines (put the equation numbers in the third column). All assume the relation (or operator) diff --git a/macros/luatex/generic/minim-math/minim-math.pdf b/macros/luatex/generic/minim-math/minim-math.pdf index 30e2129fcf..9544068d92 100644 Binary files a/macros/luatex/generic/minim-math/minim-math.pdf and b/macros/luatex/generic/minim-math/minim-math.pdf differ diff --git a/macros/luatex/generic/minim-math/minim-math.tex b/macros/luatex/generic/minim-math/minim-math.tex index 1a8f1157c1..7029952418 100644 --- a/macros/luatex/generic/minim-math/minim-math.tex +++ b/macros/luatex/generic/minim-math/minim-math.tex @@ -468,6 +468,8 @@ \def\braket#1#2{\left⟨#1\middle\vert#2\right⟩} \def\norm#1{\left\vert#1\right\vert} \let \abs=\norm \def\Norm#1{\left\Vert#1\right\Vert} +\def\ceil#1{\left⌈#1\right⌉} +\def\floor#1{\left⌊#1\right⌋} % a slightly smaller unary minus \def\unaryminus{\mathord{\mathpalette\unaryminus:make{}}} diff --git a/macros/luatex/generic/minim-mp/README b/macros/luatex/generic/minim-mp/README index d712a7f11c..6c10eeabb2 100644 --- a/macros/luatex/generic/minim-mp/README +++ b/macros/luatex/generic/minim-mp/README @@ -1,4 +1,4 @@ -Version: 2023/1.3 +Version: 2024/1.4 SUMMARY @@ -19,6 +19,12 @@ In order to obtain the typeset manual of this package, simply say: HISTORY +2024/1.4 (5/1/2024) + + * Support the extended graphics state (extgstate) + * Allow box resource (xform) creation directly from metapost + * Support transparency and transparency groups + 2023/1.3 (20/10/2023) * Various runscript improvements: @@ -30,13 +36,11 @@ HISTORY * Improve font handling in minim-lamp.ini, and provide \begin{document}. * Add a minim-mp.sty package file for LaTeX users. - 2023/1.2 (3/3/2023) * Add a few more metapost macros. * Various small bug fixes. - 2022/1.1 (3/3/2022) New features: @@ -57,7 +61,6 @@ HISTORY into raw pdf code. * No longer write out superfluous line widths. - 2021/1.0 (1/6/2021) This was the original release. diff --git a/macros/luatex/generic/minim-mp/minim-mp.doc b/macros/luatex/generic/minim-mp/minim-mp.doc index 2f7541ba75..9429544d8e 100644 --- a/macros/luatex/generic/minim-mp/minim-mp.doc +++ b/macros/luatex/generic/minim-mp/minim-mp.doc @@ -8,8 +8,8 @@ \else \startmetadata author {Esger Renkema} title {minim-mp} - date {2023-10-20} - version {2023/1.3} + date {2024-01-05} + version {2024/1.4} keywords {LuaTeX; Plain TeX; MetaPost; mplib} stopmetadata \maketitle \fi @@ -147,7 +147,7 @@ endfig;⟧ \vskip-2\parskip plus 2\parskip \quitvmode\hfil \startelement alt {The text ‘Running TeX from within MetaPost’ set along a half-circle.} {Figure}% -\stoptagging\directmetapost{% +\startsinglecontentitem\directmetapost{% beginfig(1) save t, w, r, a; picture t; t = "Running TeX from within MetaPost" infont "tenrm"; @@ -158,7 +158,7 @@ beginfig(1) draw c rotatedaround((x,0), a) shifted (-r*sind(a)-x, r*cosd(a)); endfor -endfig;}\starttagging \stopelement{Figure} +endfig;}\stopsinglecontentitem \stopelement{Figure} By default, the ⟦maketext⟧ operator is used for typesetting labels. You can, however, order de ⟦label⟧ macro to use ⟦infont⟧ instead by setting @@ -199,9 +199,9 @@ between parentheses and can be followed by the usual drawing options. For example, ⟦multidraw (contours "example" of "tenbf") withpen currentpen scaled 1/10;⟧ will give the word% -\markelement{Span}{\setactualtext{example } +\markelement{Span}{\setactualtext{example }\startsinglecontentitem\space \directmetapost{beginfig(1) multidraw (contours "example" of "tenbf") -withpen currentpen scaled 1/10; baseline 0; endfig;}} +withpen currentpen scaled 1/10; baseline 0; endfig;}\stopsinglecontentitem} in a thin outline. Finally, two handy clipping macros have been added: @@ -233,9 +233,9 @@ If your lua snippet returns nothing, the ⟦runscript⟧ call will be invisible metapost. If on the other hand it does return a value, that value will have to be translated to metapost. Numbers and strings will be returned as they are (so make sure the string is surrounded by quotes if you want to return -a metapost string). You can return a point or colour by returning an array of -two to four elements. For other return values, ⟦tostring()⟧ will be called. - +a metapost string). You can return a point, colour or transform by returning an +array of two to six elements (excluding five). For other return values, +⟦tostring()⟧ will be called. \section Passing values to lua @@ -275,7 +275,7 @@ and have ⟦texvariable jobname⟧ work as expected. For accessing count, dimen, attribute or toks registers, the macros are ⟦*tex.count⟧ ⟦[number]⟧ or ⟦*tex.count⟧⟦.name⟧ [etc. etc.] for getting and -⟦*set tex.count⟧ ⟦[number] = value⟧ or ⟦*tex.count⟧⟦.name = value⟧ etc. for +⟦*set tex.count⟧ ⟦[number] = value⟧ or ⟦*set tex.count⟧⟦.name = value⟧ etc. for setting values. @@ -305,7 +305,7 @@ information on these parameters. You can use text inside patterns, as in this example: \hfill \vbox to 0pt{ \startelement alt{A circle filled with red As in a rectangular pattern.}{Figure} -\directmetapost{ +\startsinglecontentitem \directmetapost{ % define the pattern picture letter; letter = maketext("a"); beginpattern(a) @@ -316,7 +316,8 @@ endpattern(12pt,12pt); beginfig(1) fill fullcircle scaled 3cm withpattern(a) withcolor 3/4red; draw fullcircle scaled 3cm withpen pencircle scaled 1; -endfig;}\stopelement{Figure}\vss}\hskip10pt\strut +endfig;}\stopsinglecontentitem +\stopelement{Figure}\vss}\hskip10pt\strut \par\nobreak ⟦% define the pattern picture letter; letter = maketext("a"); @@ -333,6 +334,41 @@ endfig;⟧ A small pattern library is available in the ⟦*minim-hatching.mp⟧ file; see the accompanying documentation sheet for an overview of patterns. +\section Advanced PDF graphics % 1 + +You can use ⟦*savegstate⟧ and ⟦*restoregstate⟧ for inserting the ⟦q⟧ and ⟦Q⟧ +operators; these must always be paired, or horrible errors will occur. You may +need them if you use ⟦*setgstate()⟧ for modifying the extended +graphical state (ExtGState). The ⟦params⟧ must be a comma-separated +⟦Key=value⟧ list, with all ⟦value⟧s being suffixes. The latter restriction may +require the use of additional variables, but as this is a very low-level +command, it is best to wrap it in a more specialised macro anyway. +The ⟦*withgstate ()⟧ can be added to a drawing statement and includes +saving/restoring the graphical state. + +Note that while you could try and use ⟦setgstate⟧ for modifying variables like +the line cap or dash pattern, the result of doing so will be unpredictable, +since such changes will be invisible to metapost. Its intended use is +restricted to graphics parameters outside the scope of metapost. + +For applying transparency, ⟦*setalpha(a)⟧ updates the ⟦CA⟧ and ⟦ca⟧ parameters +as a stand-alone command and ⟦*withalpha(a)⟧ can be used in a drawing statement +where it will save/restore the graphical state around it. For applying +transparency to an ensemble of drawing statements, ⟦*transparent (a) ⟧ +will create and insert the proper transparency group. The transparency group +attributes can be set with the string internal ⟦transparency_group_attrs⟧, +while for all three macros the blend mode can be set with the string internal +⟦blend_mode⟧ (it will be added whenever set). + +A transparency group is a special kind of XForm, and these can be created from +withing metapost: ⟦ =⟧ ⟦*saveboxresource () ⟧ returns +a number identifying the resource and can be fed attributes in the same way as +⟦setgstate⟧. XForms defined through metapost are available to other metapost +instances, but not to tex, though the macro painting them, ⟦*boxresource ⟧, +also accepts identifiers of tex-defined box resources. There remains a subtle +difference, however: metapost-defined box resources are placed at their +original origin. + \section Other metapost extensions % 1 @@ -342,7 +378,9 @@ x~coordinate of zero will be added). Transformations will be taken into account, hence the specification of two coordinates. The last given baseline will be used. -You can write to tex’s log directly with ⟦*texmessage "hello"⟧. +You can write to tex’s log directly with ⟦*texmessage "hello";⟧. You can feed +it a comma-separated list of strings and numbers, which will be passed through +⟦string.format()⟧ first. You can write direct pdf statements with ⟦*special "pdf: statements"⟧ and you can add comments to the pdf file with ⟦*special "pdfcomment: comments"⟧. @@ -381,7 +419,9 @@ Say ⟦*nr_remaining = M.left(nr)⟧ for the number of remaining images. Each metapost instance is a table containing the following entries: \smallskip\smallskip -\marktableaslist \halign{\qquad#\quad\hfil&#\hfil\cr +\marktableaslist +\tagattribute List ListNumbering /Description +\halign{\qquad#\quad\hfil&#\hfil\cr ⟦jobname⟧&The jobname.\cr ⟦instance⟧&The primitive metapost instance.\cr ⟦results⟧&A linked list of unretrieved images.\cr @@ -424,7 +464,9 @@ processing. Specials can store information in the ⟦user⟧ table of the picture that is being processed; this information is still available inside the ⟦*finish_mpfigure⟧ callback that is executed just before the processed image is surrounded by -properly-dimensioned boxes. +properly-dimensioned boxes. If a ⟦user.save_fn⟧ function is defined, it will +replace the normal saving of the image to the image list and the image node +list will be flushed. The ⟦*M.init_code⟧ table contains the code used for initialing new instances. In it, the string ⟦INIT⟧ will be replaced with the value of the ⟦format⟧ option diff --git a/macros/luatex/generic/minim-mp/minim-mp.lua b/macros/luatex/generic/minim-mp/minim-mp.lua index f1cfd49388..9069ab7147 100644 --- a/macros/luatex/generic/minim-mp/minim-mp.lua +++ b/macros/luatex/generic/minim-mp/minim-mp.lua @@ -4,7 +4,9 @@ local cb = require('minim-callbacks') local pdfres = require('minim-pdfresources') alloc.remember ('minim-mp') -local M = {} +local M = { } -- module contents +local E = { } -- runscript environment +local A = { } -- postprocessing functions -- 1 AUXILIARY FUNCTIONS @@ -29,7 +31,6 @@ end -- We can call append:somefunction(...) to append a node or append:somevariable -- to query the graphics state. These go via its metatable: -local A = { } -- appending functions local append_meta = { -- Either return an appending function or an entry in the graphics state. @@ -48,6 +49,7 @@ local function init_append() node_count = 0, -- node count state = { }, -- graphics state variables user = { }, -- user data for extensions + object_info = { }, -- data for current object }, append_meta) end @@ -78,7 +80,8 @@ end -- The following callback is executed just before the final step of surrounding -- the image in properly-dimensioned boxes. It receives the processed image --- object as argument. That object has the following fields: +-- object as argument. That object may have the following fields (which can be +-- changed): -- head the head of the node list -- name the image name -- user the image user table @@ -97,6 +100,7 @@ function M.enable_debugging() pdf.setcompresslevel(0) pdf.setobjcompresslevel(0) end +E.enable_debugging = M.enable_debugging local function print_prop(append, obj, prop) if obj[prop] then @@ -179,7 +183,8 @@ end local function format_numbers(...) return (string.format(...) :gsub('[.]0+ ', ' ') - :gsub('([.][1-9]+)0+ ', '%1 ')) + :gsub('([.][1-9]+)0+ ', '%1 ') + :gsub(' +$', '')) end -- Only to be used for coordinates: ‘cm’ parameters should not be rounded. @@ -188,6 +193,12 @@ local function pdfnum(operator, ...) return format_numbers(fmt, ...) end +local function make_pdf_dashpattern(dl) + return string.format('[%s] %s', + table.concat(dl.dashes or {},' '), + pdfnum('d', dl.offset)) +end + local function point_fmt(operator, ...) local dd = pdf.getdecimaldigits() local fmt = string.format('%%.%sf %%.%sf %s', dd, dd, operator) @@ -212,6 +223,43 @@ function A.literal(append, fmt, ...) append:node(lit) end +-- 2 parsing helpers + +local function parse_lua_table(name, str) + local f, msg = load('return '..str, name, 't') + if msg then return alloc.err(msg) end + t = f() + if not t or type(t) ~= 'table' then + return alloc.err('%s attributes must be given as lua table', name) + end + -- format all numbers with pdfnum + for k, v in pairs(t) do + if type(v) == 'number' then + t[k] = pdfnum('', v) + end + end + return t +end + +-- 2 boxing helpers + +local function make_surrounding_box(nd_id, head) + local nd = node.new(nd_id) + nd.dir, nd.head = 'TLT', head + return nd +end + +local function wrap_picture(head, x0, y0) + -- Note: this does not set the image dimensions + local horizontal = make_surrounding_box('hlist', head) + local vertical = make_surrounding_box('vlist', horizontal) + local outer = make_surrounding_box('hlist', vertical) + vertical.shift = -y0 + horizontal.shift = x0 + return outer +end +M.wrap_picture = wrap_picture + -- 2 colour conversion local function rgb_to_gray (r,g,b) @@ -219,6 +267,7 @@ local function rgb_to_gray (r,g,b) + tex.count['GtoG'] * g / 10000 + tex.count['BtoG'] * b / 10000 ) end +E.rgb_to_gray = rgb_to_gray local function cmyk_to_rgb (c,m,y,k) return (1-k)*(1-c), (1-k)*(1-m), (1-k)*(1-y) @@ -283,7 +332,7 @@ local colour_fill_operators = { 'g', nil, 'rg', 'k' } local colour_pattern_spaces = { 'PsG', nil, 'PsRG', 'PsK' } local function get_colour_params(cr) - return format_numbers(colour_template[#cr], table.unpack(cr)) + return format_numbers(colour_template[#cr], table.unpack(cr)) .. ' ' end local function get_stroke_colour(cr) @@ -362,7 +411,7 @@ function A.linestate (append, object) end local dl = object.dash if dl then - local d = string.format('[%s] %s', table.concat(dl.dashes or {},' '), pdfnum('d', dl.offset)) + local d = make_pdf_dashpattern(dl) if d ~= append.dashed then append.dashed = d table.insert(res, d) @@ -653,6 +702,105 @@ specials.BASELINE = function(append, _, object) append.baseline = object.path[1].y_coord end +-- 2 box resources (xforms) + +-- The first problem that we run into is that we want to refer to xforms (from +-- the metapost side) whose numerical id* we do know know yet (because the +-- xform will only be made at the end of the run, during the lua-side +-- processing of mplib output). +-- +-- Our solution is using negative ids for metapost-defined xforms, which will +-- be converted to actual boxresource ids by means of a conversion table. +-- +-- The second problem is the need to position metapost-defined xforms by their +-- original (metapost) origin. This necessitates storing extra information +-- lua-side. +-- +-- * Not to be confused with the object number which we, due to pdftex’s +-- special handling of xforms, will never come to know. + +local xform_nr_shim = { } + +local function resolve_xform_id(nr) + nr = tonumber(nr) + if nr < 0 then + return xform_nr_shim[-nr] + else + return nr + end +end + +local function reserve_xform_id() + xform_nr_shim[1+#xform_nr_shim] = false + return -#xform_nr_shim +end + +M.resolve_xform_id = resolve_xform_id +E.resolve_xform_id = resolve_xform_id +E.reserve_xform_id = reserve_xform_id + +-- When using xforms in metapost, the positive numbers refer to tex-defined and +-- the negative to metapost-defined box resources. + +specials.BOXRESOURCE = function(append, id, object) + local realid = resolve_xform_id(id) + local rule = tex.useboxresource(realid) + append:box(object, node.hpack(rule)) +end + +local xform_sizes = { } +local xform_center = { } + +local function set_boxresource_dimensions (id, transf, center) + xform_sizes[id] = transf + xform_center[id] = center +end + +local function get_boxresource_dimensions (id) + if xform_sizes[id] then + return xform_sizes[id] + else + return { 'box_size', tex.getboxresourcedimensions(id) } + end +end + +local function get_boxresource_center (id) + if xform_center[id] then + return xform_center[id] + else + return "(0,0)" + end +end + +E.set_boxresource_dimensions = set_boxresource_dimensions +E.get_boxresource_dimensions = get_boxresource_dimensions +E.get_boxresource_center = get_boxresource_center + +local function save_as_boxresource(pic) + -- attributes + local attrs = { '/Subtype/Form', bbox_fmt(0, -pic.dp, pic.wd, pic.ht) } + for k, v in pairs(pic.user.xform_attrs or { }) do + table.insert(attrs, string.format('%s %s', alloc.pdf_name(k), v)) + end + -- box to-be-saved + local box = wrap_picture(node.copy_list(pic.head), pic.x0, pic.y0) + box.width, box.height, box.depth = pic.wd, pic.ht, pic.dp + -- save the box + local xform = tex.saveboxresource(box, + table.concat(attrs, ' '), nil, false, 4) -- 4: no /Type, /BBox or /Matrix + xform_nr_shim[-pic.user.xform_id] = xform +end + +specials.XFORMINDEX = function(append, id, object) + append.user.xform_id = tonumber(id) + append.user.save_fn = save_as_boxresource +end + +specials.XFORMATTRS = function(append, attrs, object) + local t = parse_lua_table('XForm attributes', attrs) + append.user.xform_attrs = t or { } +end + -- 2 patterns -- Saved patterns have the following fields: @@ -678,27 +826,20 @@ prescripts.fillpattern = function(append, str, object) end end -specials.definepattern = function(append, str, object) - local nr, tiling, paint, xs, ys, xx, xy, yx, yy = table.unpack(str:explode()) - append.user.pattern_info = { nr = nr, xstep = xs, ystep = ys, - tilingtype = tiling, painttype = paint, - matrix = { xx = xx, xy = xy, yx = yx, yy = yy, x = 0, y = 0 } } -end - local function make_pattern_xform(head, bb) -- regrettably, pdf.refobj does not work with xforms, so we must -- write it to the pdf immediately, whether the pattern will be -- used or not. - local xform = tex.saveboxresource(node.hpack(node.copy_list(head)), - '/Subtype/Form '..bb, nil, true, 4) + local xform = tex.saveboxresource((node.hpack(node.copy_list(head))), + '/Subtype/Form '..bb, nil, true, 4) -- 4: no /Type, /BBox or /Matrix return string.format(' /Resources << /XObject << /PTempl %d 0 R >> >>', xform), '/PTempl Do' end -local function definepattern(head, user, bbox) - local bb = bbox_fmt(table.unpack(bbox)) +local function definepattern(pic) + local bb = bbox_fmt(table.unpack(pic.bbox)) local pat, literals, resources = { write = write_pattern_object }, { } -- pattern content - for n in node.traverse(head) do + for n in node.traverse(pic.head) do -- try if we can construct the content stream ourselves; otherwise, -- stuff the pattern template into an xform. if n.id == WHATSIT_NODE then @@ -710,18 +851,18 @@ local function definepattern(head, user, bbox) elseif n.subtype == node.subtype 'restore' then table.insert(literals, 'Q') else - resources, pat.stream = make_pattern_xform(head, bb) + resources, pat.stream = make_pattern_xform(pic.head, bb) goto continue end else - resources, pat.stream = make_pattern_xform(head, bb) + resources, pat.stream = make_pattern_xform(pic.head, bb) goto continue end pat.stream = table.concat(literals, '\n') end ::continue:: -- construct the pattern object - local i = user.pattern_info + local i = pic.user.pattern_info local m = i.matrix pat.painttype = tonumber(i.painttype) pat.attr = table.concat({ @@ -733,12 +874,88 @@ local function definepattern(head, user, bbox) pdfres.add_resource('Pattern', 'MnmP'..i.nr, pat) end -cb.register('finish_mpfigure', function(img) - if img.user.pattern_info then - definepattern(img.head, img.user, img.bbox) - img.discard = true +specials.definepattern = function(append, str, object) + local nr, tiling, paint, xs, ys, xx, xy, yx, yy = table.unpack(str:explode()) + append.user.pattern_info = { nr = nr, xstep = xs, ystep = ys, + tilingtype = tiling, painttype = paint, + matrix = { xx = xx, xy = xy, yx = yx, yy = yy, x = 0, y = 0 } } + append.user.save_fn = definepattern +end + +-- 2 extgstates + +-- Specials for the graphics state: +-- +-- gstate:save q +-- gstate:restore Q +-- +-- extgstate:label /label gs +-- extgstate:{...} /newlabel gs +-- +-- If a lua table is passed to the extgstate, minim will try and find an +-- earlier-defined matching ExtGState object. If it cannot be found, a new one +-- will be created and used. The values of the table will be written to the pdf +-- as-they-are (this means booleans and numbers are alright), but the keys will +-- be converted to pdf name objects. + +prescripts.gstate = function(append, str, object) + if str == 'save' or str == 'store' then + append:save() + elseif str == 'restore' then + append:restore() + else + alloc.err('Unknown gstate operator: »%s«', str) end -end) +end +postscripts.gstate = prescripts.gstate + +local gs_next, gs_index = 1, { } + +function M.get_gstate_name(t) + -- format the pdf dict + local d = { } + for k,v in pairs(t) do + if type(v) == 'table' and t.dashes then + v = '[ '..make_pdf_dashpattern(v)..' ]' + end + table.insert(d, string.format('%s %s', alloc.pdf_name(k), v)) + end + table.sort(d) + d[0] = '<<'; table.insert(d, '>>') + t.value = table.concat(d, ' ', 0) + -- check the index + if not gs_index[t.value] then + local name = string.format('MnmGs%d', gs_next) + gs_index[t.value] = name + gs_next = gs_next + 1 + pdfres.add_resource('ExtGState', name, t) + end + -- return the resource name + return gs_index[t.value] +end + +prescripts.extgstate = function(append, str, object) + -- determine resource name + local name, t = str + if string.find(str, '^[A-Za-z0-9_]+$') then + t = pdfres.get_resource('ExtGState', name) + if not t then return alloc.err('Unknown named ExtGState: %s', name) end + else + t = parse_lua_table('ExtGState', str) + if not t then return end + name = M.get_gstate_name(t) + end +-- -- update state parameters (disabled for now; may be enabled if it has practical use) +-- if t.LW then append.linewidth = t.LW end +-- if t.ML then append.miterlimit = t.LW end +-- if t.LJ then append.linejoin = t.LW end +-- if t.LC then append.linecap = t.LW end +-- if t.D and type(t.D) == 'table' then append.dashed = make_pdf_dashpattern(t.D) end + -- apply the state change + append:literal('%s gs', alloc.pdf_name(name)) + append:node(pdfres.use_resource_node('ExtGState', name)) +end +postscripts.extgstate = prescripts.extgstate -- 2 text @@ -758,26 +975,13 @@ local function get_transform(rect) return sx, rx, ry, sy, tx, ty end -local function make_surrounding_box(nd_id, head) - local nd = node.new(nd_id) - nd.dir, nd.head = 'TLT', head - return nd -end - -local function wrap_picture(head, tx, ty) - local horizontal = make_surrounding_box('hlist', head) - local vertical = make_surrounding_box('vlist', horizontal) - local outer = make_surrounding_box('hlist', vertical) - vertical.shift = tex.sp('-'..ty..'bp') - horizontal.shift = tex.sp(''..tx..'bp') - return outer -end - local function apply_transform(rect, box) local sx, rx, ry, sy, tx, ty = get_transform(rect) local transform = node.new('whatsit', 'pdf_setmatrix') transform.next, box.prev = box, transform transform.data = string.format('%f %f %f %f', sx, rx, ry, sy) + tx = tex.sp(''..tx..'bp') + ty = tex.sp(''..ty..'bp') return wrap_picture(transform, tx, ty) end @@ -803,11 +1007,6 @@ specials.CHAR = function(append, data, object) append:box(object, node.hpack(n)) end -specials.BOXRESOURCE = function(append, resource, object) - local rule = tex.useboxresource(tonumber(resource)) - append:box(object, rule) -end - -- -- 1 METAPOST INSTANCES @@ -935,8 +1134,12 @@ local function process_results(nr, res) pic.y0 = tex.sp(string.format('%s bp', -bas )) end cb.call_callback('finish_mpfigure', pic) + if pic.user.save_fn then + pic.discard = true + pic.user.save_fn(pic) + end if not pic.discard then - pic.head = wrap_picture(append.head, -llx, -bas) + pic.head = wrap_picture(pic.head, pic.x0, pic.y0) end if debugging then alloc.msg('┌ image %s, with %s objects, %s nodes', @@ -967,11 +1170,11 @@ end -- a string that metapost can understand. -- -- Tables of the form { 'box_size', width, height, depth, margin } are --- converted to a transformation. (The margin will be ignored for now, this may +-- converted to a transform. (The margin will be ignored for now, this may -- change in the future.) local function mkluastring(s) - return "'"..(s:gsub('\\', '\\\\'):gsub("'", "\\'")).."'" + return "'"..(s:gsub('\\', '\\\\'):gsub("'", "\\'"):gsub('\n', '\\n')).."'" end local function runscript(code) @@ -991,15 +1194,22 @@ local function runscript(code) return string.format('%.16f', result) elseif t == 'string' then return result - elseif t == 'table' and t[1] == 'box_size' then - -- TODO: take the margin into account if present (t[5])? - return make_transform(t[2], t[3], t[4]) - elseif t == 'table' and #t < 5 then - local fmt = #t == 1 and '%.16f' - or #t == 2 and '(%.16f, %.16f)' - or #t == 3 and '(%.16f, %.16f, %.16f)' - or #t == 4 and '(%.16f, %.16f, %.16f, %.16f)' - return fmt:format(table.unpack(t)) + elseif t == 'table' and result[1] == 'box_size' then + return make_transform(result[2], result[3], result[4]) + elseif t == 'table' and #result < 5 then + local fmt = #result == 1 and '%.16f' + or #result == 2 and '(%.16f, %.16f)' + or #result == 3 and '(%.16f, %.16f, %.16f)' + or #result == 4 and '(%.16f, %.16f, %.16f, %.16f)' + return fmt:format(table.unpack(result)) + elseif t == 'table' and #result == 6 then + return table.concat({ + 'begingroup save t; transform t;', + 'xxpart t = %.16f', 'xypart t = %.16f', + 'yxpart t = %.16f', 'yypart t = %.16f', + 'xpart t = %.16f', 'ypart t = %.16f', + 't endgroup' }, + ';'):format(table.unpack(result)) else return tostring(result) end @@ -1016,8 +1226,8 @@ end -- environment. The runscript environment will then be extended with all -- elements of the M.mp_functions table. -local E = { } M.mp_functions = E +E.texmessage = alloc.msg local function prepare_env(e) -- in M.open() local env = e or copy_table(_G, { }) @@ -1038,9 +1248,6 @@ function E.quote_for_lua(s) return E.quote(mkluastring(s)) end -E.rgb_to_gray = rgb_to_gray -E.enable_debugging = M.enable_debugging - -- 2 typesetting with tex -- The result of the maketext function is fed back into metapost; on that side, @@ -1065,9 +1272,8 @@ local function maketext(text, mode) local assignment = string.format('\\global\\setbox%s=\\hbox{\\the\\everymaketext %s}', nr, text) tex.runtoks(function() tex.print(current_instance.catcodes, assignment:explode('\n')) end) local box = tex.box[nr] - return 'image ( fill unitsquare withprescript "TEXBOX:' ..nr..'";'.. - 'setbounds currentpicture to unitsquare transformed '.. - make_transform(box.width, box.height, box.depth) .. ';)' + return string.format('_set_maketext_result_(%d, %s)', nr, + make_transform(box.width, box.height, box.depth)) elseif mode == 1 then -- verbatimtex tex.runtoks(function() tex.print(current_instance.catcodes, text:explode('\n')) end) end @@ -1311,7 +1517,7 @@ end function M.get_image(nr, name) local image = retrieve(nr, name) if image then - local box = node.hpack(image.head) + local box = image.head box.width = image.wd box.height = image.ht box.depth = image.dp @@ -1329,7 +1535,7 @@ function M.shipout(nr) tex.pageheight = (image.ht + image.dp) tex.pagewidth = image.wd tex.voffset = image.ht - tex.box[255] = node.vpack(node.hpack(image.head)) + tex.box[255] = image.head tex.shipout(255) tex.count[0] = tex.count[0] + 1 end diff --git a/macros/luatex/generic/minim-mp/minim-mp.mp b/macros/luatex/generic/minim-mp/minim-mp.mp index 654449da03..2fd2db1074 100644 --- a/macros/luatex/generic/minim-mp/minim-mp.mp +++ b/macros/luatex/generic/minim-mp/minim-mp.mp @@ -2,7 +2,7 @@ delimiters (); % This file is specific to the minim metapost processor (minim-mp) and cannot -% be used with luaotfload or other metapost implementations. See minim.mp for +% be used with luamplib or other metapost implementations. See minim.mp for % general-purpose extensions. message "Setting up the minim MetaPost extensions"; @@ -10,13 +10,14 @@ message "Setting up the minim MetaPost extensions"; def save_picture text t = save t; picture t; enddef; def save_boolean text t = save t; boolean t; enddef; def save_string text t = save t; string t; enddef; +def save_path text t = save t; path t; enddef; % 1 lua scripts, functions and variables def luafunction = gobble inner_luafunction enddef; vardef inner_luafunction @# (text args) = endgroup % we remove the grouping so that the function may return any fragment of - % lua code, in particular lists to-be-parsed as text parameters + % metapost code, in particular lists to-be-parsed as text parameters runscript ("return " & (str @#) & build_lua_arguments(args)) gobble begingroup enddef; @@ -38,7 +39,7 @@ vardef setluavariable @# expr val= vardef lua_string(expr s) = runscript ("[[quote_for_lua]]"&s) enddef; -vardef hexadecimal expr n = +vardef hexadecimal tertiary n = % TODO: support other number systems save d, a, m; a = ASCII("a"); m := abs n; save_string res; res = @@ -49,7 +50,7 @@ vardef hexadecimal expr n = if i = 3: & "." fi endfor; res enddef; -vardef scaledpoints expr n = +vardef scaledpoints tertiary n = % use the fact that 800bp = 803pt save a, m; m := abs n; a1 = m div (1025/1024); % 1025/1024 = 800epsilon * 82 @@ -64,32 +65,36 @@ vardef scaledpoints expr n = & decimal(a3) & ")"; res enddef; -vardef quote_for_lua expr a = +vardef quote_for_lua tertiary a = save_string res; res = if string a: lua_string(a) elseif numeric a: hexadecimal(a) elseif pair a: - "{"&hexadecimal(xpart a) & - ","&hexadecimal(ypart a) & "}" + "{"& (hexadecimal xpart a) & + ","& (hexadecimal ypart a) & "}" elseif boolean a: if a: "true" else: "false" fi elseif color a: - "{"&hexadecimal(redpart a) & - ","&hexadecimal(greenpart a) & - ","&hexadecimal(bluepart a) & "}" + "{"& (hexadecimal redpart a) & + ","& (hexadecimal greenpart a) & + ","& (hexadecimal bluepart a) & "}" elseif cmykcolor a: - "{"&hexadecimal(cyanpart a) & - ","&hexadecimal(magentapart a) & - ","&hexadecimal(yellowpart a) & - ","&hexadecimal(blackpart a) & "}" + "{"& (hexadecimal cyanpart a) & + ","& (hexadecimal magentapart a) & + ","& (hexadecimal yellowpart a) & + ","& (hexadecimal blackpart a) & "}" elseif pen a: hide(errmessage("I cannot pass a pen value to lua");) "nil" elseif transform a: - hide(errmessage("I cannot pass a transform value to lua");) - "nil" + "{"& (hexadecimal xxpart a) & + ","& (hexadecimal xypart a) & + ","& (hexadecimal yxpart a) & + ","& (hexadecimal yypart a) & + ","& (hexadecimal xpart a) & + ","& (hexadecimal ypart a) & "}" elseif picture a: hide(errmessage("I cannot pass a picture value to lua");) "nil" @@ -97,14 +102,33 @@ vardef quote_for_lua expr a = "nil" fi; res enddef; +% constructing lua tables + +def make_lua_dict (text t) = begingroup + % Note that though the argument may contain = signs and commas, the rest of + % the arguments must consist of suffixes. + save_boolean first; first := true; + "{ " forsuffixes kv = + hide(let = _EQ_ undefined) + t hide(let = _EQ_ _EQ_) : & + if first: hide(first := false;) else: ", "& fi + begingroup make_lua_keyval kv endgroup + endfor & " }" endgroup +enddef; +let _EQ_ = =; + +vardef make_lua_keyval @# expr e = + (str @#) & " = " & quote_for_lua e +enddef; + % tex registers string _SUFFIX_HACK_[]; vardef index_or_suffix (suffix s) = save_string res; res = - if string _SUFFIX_HACK_ s: % this is a number + if string _SUFFIX_HACK_ s: % s is a number "["&decimal(s)&"]" - else: % this is a suffix + else: % s is a suffix "."&(str s) fi ; res enddef; @@ -128,20 +152,33 @@ vardef set tex.toks @# expr val = % 1 typesetting +boolean debug_tex_bboxes; +debug_tex_bboxes := false; + let textext = maketext; let TEX = maketext; +def _set_maketext_result_ (expr nr)(text tr) = image ( + fill unitsquare withprescript "TEXBOX:"&decimal nr; + save_path bb; bb := unitsquare transformed tr; + if debug_tex_bboxes: draw bb dashed evenly; fi + setbounds currentpicture to bb;) enddef; + % baseline pair or numeric -> fill statement vardef baseline expr o = fill if numeric o : (0,o) else: o fi -- cycle withprescript "BASELINE:"; enddef; -% boxresource number -> fill statement + setbounds -vardef boxresource expr nr = image( - fill unitsquare withprescript "BOXRESOURCE:" & decimal nr ; - setbounds currentpicture to unitsquare transformed runscript - ("return { 'box_size', tex.getboxresourcedimensions(" & decimal nr & ") }"); - ) enddef; +vardef find_baseline expr p = + save_pair bl, ibl; + for c within p: + if clipped c or bounded c: + ibl := find_baseline c; + if known ibl: bl := ibl; fi + elseif "BASELINE:" = substring (0,9) of prescriptpart c: + bl := point 0 of pathpart c; + fi + endfor bl enddef; % actual typesetting @@ -168,6 +205,129 @@ vardef thelabel@#(expr s,z) = % Position s near z + (1-labxf@#-labyf@#)*llcorner p ) ) enddef; +% 1 box resources (xforms) + +% boxresource number -> fill statement + setbounds +vardef boxresource primary nr = image( + fill unitsquare withprescript "BOXRESOURCE:" & decimal nr ; + save btf; transform btf; + btf = luafunction get_boxresource_dimensions (nr); + save_path bb; bb = unitsquare transformed btf; + if debug_tex_bboxes: draw bb dashed evenly; fi + setbounds currentpicture to bb; + currentpicture := currentpicture + shifted luafunction get_boxresource_center (nr); + ) enddef; + +% id = saveboxresource (attributes) image ( ... ); +vardef saveboxresource (text attrs) expr p = + save id; id = luafunction reserve_xform_id(); + % save the dimensions + save t, o; transform t; pair o; + (0,0) transformed t = llcorner p; + (1,0) transformed t = lrcorner p; + (0,1) transformed t = ulcorner p; + save bl; bl = -ypart find_baseline p; + o = (-xpart llcorner p, if known bl: bl else: 0 fi); + luafunction set_boxresource_dimensions (id, t shifted o, -o); + % shipout the xform + shipout image(draw p; + special "XFORMATTRS:" & make_lua_dict (attrs); + special "XFORMINDEX:" & decimal id; + ); id enddef; + +% 1 extended graphics state + +vardef modify_scripts text t = + % Note: this is a no-op when the picture is empty + save_picture curr; + save_string pre, post; + % extract script parts + curr := image(drawdot origin t;); + pre = prescriptpart curr; + post = postscriptpart curr; + % add the prescript + if pre <> "": + curr := currentpicture; clearit; + draw curr withprescript pre; + fi + % add the postscript + if post <> "": + % here we find the reason for this routine: metapost *should* apply the + % postscript to the last element of a picture, but chooses the first + % instead. + curr := currentpicture; clearit; + setbounds curr to llcorner curr -- lrcorner curr -- + urcorner curr -- ulcorner curr -- cycle; + % these bounds force an extra nesting level of the next function + draw with_postscript_to_last(curr, post); + fi +enddef; + +vardef with_postscript_to_last (expr p, script) = + image( save i; i := 0; + for c within p: + if incr i < length(p): draw c; + elseif clipped c: + save_picture q; q:= with_postscript_to_last(c, script); + clip q to pathpart c; + addto currentpicture also q; + elseif bounded c: + save_picture q; q:= with_postscript_to_last(c, script); + setbounds q to pathpart c; + addto currentpicture also q; + else: + draw c withpostscript script; + fi + endfor) enddef; + +def append_postscript expr s = + if length(currentpicture) = 0: special s; + else: modify_scripts withpostscript s; + fi enddef; + +def savegstate = + append_postscript "gstate:save"; enddef; +def restoregstate = + append_postscript "gstate:restore"; enddef; +def setgstate = + append_postscript "extgstate:" & make_lua_dict enddef; + +def withgstate (text t) = + withprescript "extgstate:" & make_lua_dict (t) + withprescript "gstate:save" + withpostscript "gstate:restore" enddef; + +% 1 transparency + +newinternal string blend_mode; +newinternal string transparency_group_attrs; + +% setalpha (α) +vardef setalpha expr alpha = + save a; a = alpha; + save_string bm; bm = "/" & blend_mode; + setgstate(CA=a, ca=a if bm <> "/":, BM=bm fi) enddef; + +% withalpha (α) +def withalpha = gobble _withalpha_ enddef; +string _blend_mode_; +vardef _withalpha_ (expr alpha) = + _with_alpha_ := alpha; + _blend_mode_ := "/" & blend_mode; + endgroup + withgstate(CA=_with_alpha_,ca=_with_alpha_ if _blend_mode_ <> "/":, BM=_blend_mode_ fi) + gobble begingroup enddef; + +% transparent (α) image (...) +vardef transparent (expr alpha) expr p = + save_string attrs; attrs = "<< /S/Transparency "&transparency_group_attrs&">>"; + save g; g = saveboxresource (Group=attrs) p; + savegstate; setalpha (alpha); + draw boxresource g; + restoregstate; +enddef; + % 1 even-odd rule and multidraw def nofill expr c = fill c withprescript "OTYPE:nofill" enddef; @@ -205,6 +365,9 @@ def beginpattern(suffix s) = def withcolor = hide(painttype:=1) _withcolor enddef; save matrix; transform matrix; enddef; def endpattern (expr xstep, ystep) = + modify_scripts + withprescript "pdf:/Artifact BMC" + withpostscript "pdf:EMC"; if unknown matrix : matrix:=identity; fi special "definepattern:" for e = charcode, tilingtype, painttype, xstep, ystep, xxpart matrix, xypart matrix, yxpart matrix, yypart matrix: @@ -213,12 +376,11 @@ def endpattern (expr xstep, ystep) = newinternal tilingtype; tilingtype:=1; _patterns_._last_ := 0; - % 1 miscellaneous -vardef debug_pdf = luafunction enable_debugging () enddef; +def debug_pdf = luafunction enable_debugging(); enddef; -def texmessage text msg = luafunction texio.write_nl (msg) enddef; +vardef texmessage text msg = luafunction texmessage (msg) enddef; vardef rgb_to_gray expr c = luafunction rgb_to_gray (redpart c, greenpart c, bluepart c) diff --git a/macros/luatex/generic/minim-mp/minim-mp.pdf b/macros/luatex/generic/minim-mp/minim-mp.pdf index aa64541ffe..9ea6a51612 100644 Binary files a/macros/luatex/generic/minim-mp/minim-mp.pdf and b/macros/luatex/generic/minim-mp/minim-mp.pdf differ diff --git a/macros/luatex/generic/minim-mp/minim-mp.sty b/macros/luatex/generic/minim-mp/minim-mp.sty index ae0312b560..250e86668e 100644 --- a/macros/luatex/generic/minim-mp/minim-mp.sty +++ b/macros/luatex/generic/minim-mp/minim-mp.sty @@ -3,10 +3,6 @@ \input minim-mp -\makeatletter - -\RequirePackage{environ} - % work around latex’s \protect mechanism \let\mnm@protect=\protect \everymaketext{\let\protect=\mnm@protect} @@ -21,12 +17,12 @@ \let\mpcolor = \minimpcolor \csname:metapost:\endcsname[#1]} {\csname end:metapost:\endcsname \endgroup} -\NewEnviron{:metapost:}[1][]{% +\NewDocumentEnvironment{:metapost:}{O{}+b}{% \mnm@setnormalfont \let\protect=\noexpand \directmetapost[#1]{% - defaultfont:="\mnm@normalfont"; \BODY; }% - \let\protect=\mnm@protect} + defaultfont:="\mnm@normalfont"; #2; }% + \let\protect=\mnm@protect}{} % separate metapost instances \newcommand\newmetapostenvironment[2][]{% @@ -37,13 +33,13 @@ \let\mpcolor = \minimpcolor \csname:#2:\endcsname} {\csname end:#2:\endcsname \endgroup}% - \NewEnviron{:#2:}{% + \NewDocumentEnvironment{:#2:}{+b}{% \mnm@setnormalfont \let\protect=\noexpand \runmetapostimage \csname #2@instance\endcsname - {defaultfont:="\mnm@normalfont";\BODY;}% - \let\protect=\mnm@protect}} + {defaultfont:="\mnm@normalfont";##1;}% + \let\protect=\mnm@protect}{}} % \mpcolor support \def\minimpcolor#1#{\dominimpcolor{#1}} @@ -54,6 +50,3 @@ \newtoks\mpcolorspectoks \newtoks\mpcolorruntoks \newtoks\mpcolorvaltoks \mpcolorruntoks{\expandafter\extractcolorspec\the\mpcolorspectoks\mptmpcolor \expandafter\mpcolorvaltoks\expandafter\@gobble\mptmpcolor} - -\makeatother - diff --git a/macros/luatex/generic/minim-mp/minim.mp b/macros/luatex/generic/minim-mp/minim.mp index 2bcea78343..b0df361b94 100644 --- a/macros/luatex/generic/minim-mp/minim.mp +++ b/macros/luatex/generic/minim-mp/minim.mp @@ -70,8 +70,8 @@ def save_string text t = save t; string t; enddef; % missing trigonometric functions vardef tand primary x = sind(x)/cosd(x) enddef; -vardef arcsind primary x = angle((1+-+x, x)) enddef; -vardef arccosd primary x = angle((x, 1+-+x)) enddef; +vardef arcsind primary x = angle(1+-+x, x) enddef; +vardef arccosd primary x = angle(x, 1+-+x) enddef; vardef arctand primary x = angle(1, x) enddef; % segments of the circle (counterclockwise) diff --git a/macros/luatex/generic/minim-pdf/README b/macros/luatex/generic/minim-pdf/README index eb9a1bd114..0626208f2f 100644 --- a/macros/luatex/generic/minim-pdf/README +++ b/macros/luatex/generic/minim-pdf/README @@ -1,4 +1,4 @@ -Version: 2023/1.3 +Version: 2024/1.4 SUMMARY @@ -27,6 +27,20 @@ In order to obtain the typeset manual of this package, simply say: HISTORY +2024/1.4 (5/1/2024) + + Breaking changes: + + * Table cells and headers now connect automatically in \automarktable + + New features: + + * Add support for pdf/ua + * Re-write \hyperlink, adding many options + * Add ref and title options to structure elements + * New helper macros for footnotes + * Add \withpdfresource + 2023/1.3 (20/10/2023) New features: diff --git a/macros/luatex/generic/minim-pdf/minim-pdf.doc b/macros/luatex/generic/minim-pdf/minim-pdf.doc index e04deb31ab..111d8c1423 100644 --- a/macros/luatex/generic/minim-pdf/minim-pdf.doc +++ b/macros/luatex/generic/minim-pdf/minim-pdf.doc @@ -3,7 +3,7 @@ \manual{minim-pdf} -\ifchapter \chapter Hypertext +\ifchapter \chapter Advanced PDF features This chapter and the next document the support of the modern pdf features provided by the minim-pdf package. @@ -14,8 +14,8 @@ all other features of the package are described here. \else \startmetadata author {Esger Renkema} title {minim-pdf} - date {2023-10-20} - version {2023/1.3} + date {2024-01-05} + version {2024/1.4} keywords {LuaTeX; Plain TeX; PDF/A; Tagged PDF; accessibility; a11y; hypertext; bookmarks; document outline; associated files} stopmetadata @@ -33,10 +33,16 @@ all other features will be covered first. \section Hyperlinks % 1 -For most simple cases, you can use -⟦*\hyperlink [name {...} | url {...}] ... \endlink⟧ for linking to a named -destination in your own document or to an external hyperlink respectively. -There is no support for nonsimple cases. +Hyperlinks can be made with +⟦*\hyperlink [alt {...}] [attr {...}] ... \endlink⟧, where the +⟦⟧ must be one of +⟦name {...} | url {...} | name {...} | next | prev | first | last⟧ +With the ⟦name⟧ action, a named destination must be used (see below), while the +⟦user⟧ action will be passed directly to the back-end (as with the pdftex +primitive). +The ⟦*\hyperlinkstyle⟧ token list can be used so set common (pdf) link +attributes; it defaults to ⟦/Border [0 0 0]⟧. The contents of the optional +⟦attr⟧ parameter will be appended to these. A named destination can be created with ⟦*\nameddestination {...}⟧ (also in horizontal mode, unlike the backend primitive) and if you cannot think of @@ -47,9 +53,10 @@ generated name. \section Bookmarks % 1 -Bookmarks can be added with ⟦*\outline [open|closed] [dest {name}] {title}⟧. -Add ⟦open⟧ or ⟦closed⟧ to have the bookmark appear initially open or -closed (default), and +Bookmarks (also known as outlines) can be added with ⟦*\outline [open|closed] +[dest {name}] {title}⟧. +Add ⟦open⟧ or ⟦closed⟧ to have the bookmark appear initially open or closed +(default), and say ⟦dest {name}⟧ for having it refer to a specific named destination (otherwise, a new one will be created where the ⟦\outline⟧ command appears). @@ -101,6 +108,48 @@ are enabled by default. You can disable them by setting ⟦*\writehyphensandspaces⟧ to a nonpositive value. +\section PDF/UA % 1 + +You can claim pdf/ua conformance with ⟦*\pdfualevel 1⟧. +By itself, this will do very little: + +\startlist +\tagattribute List ListNumbering /Decimal +\item 1. The ⟦pdfuaid:part⟧ metadata key will be set. +\item 2. A conforming ⟦ViewerPreferences⟧ dictionary will be added to the document catalog. +\item 3. The ⟦/Suspects⟧ key of the ⟦MarkInfo⟧ dictionary will be set to ⟦false⟧. +\item 4. ⟦/Tab /S⟧ will be added to the page attributes. +\stoplist + +Also making your document pdf/a-compliant, however, will relieve you of a few +additional worries: + +\startlist +\tagattribute List ListNumbering /Decimal +\tagattribute List ContinuedList true +\item 5. Fonts will be included properly. +\item 6. The (natural) language of every element will be known. +\item 7. Headings will be strongly-structured. +\item 8. Table headers will have their ⟦Scope⟧ set properly. +\item 9. A document outline will be generated automatically. +\stoplist + +This leaves the following for you to provide before your document can be +pdf/ua-compliant: + +\startlist +\tagattribute List ListNumbering /Decimal +\tagattribute List ContinuedList true +\item 10. Figure and Formula structure elements must have alt texts. +\item 11. Hyperlinks must have alternate descriptions. +\item 12. Lists must have the ⟦ListNumbering⟧ attribute set. +\item 13. Tables must have headers that are tagged as such. +\item 14. Page headers and footers must be marked as header or footer artifacts. +\item 15. Document section structure elements should have their ⟦title⟧ set. +\item 16. All embedded files must have a description. +\stoplist + + \section Embedded files % 1 You can attach (associate) files with ⟦*\embedfile ⟧. @@ -110,7 +159,9 @@ document catalog. Arguments consisting of a single word can be given without braces and exactly one of the options ⟦file⟧ or ⟦string⟧ must be present. -\smallskip\marktableaslist \halign{#\quad\hfil&#\hfil\cr +\smallskip\marktableaslist +\tagattribute List ListNumbering /Description +\halign{#\quad\hfil&#\hfil\cr ⟦file ⟧\hfill⟦{...}⟧ & The file to embed.\cr ⟦string ⟧\hfill⟦{...}⟧ & The string to embed.\cr ⟦global⟧ & Attach to the document catalog.\cr @@ -166,6 +217,7 @@ You should always check the result in an external application. This is the full list of limitations, pitfalls and shortcomings: \startlist +\tagattribute List ListNumbering /Decimal \item1. Document content must be seen by tex in its logical order (although you can mark out-of-order content explicitly if you know what you are doing; see below). @@ -342,9 +394,16 @@ Note that for the ⟦owner⟧ and ⟦key⟧ the initial slash must be omitted; t ⟦value⟧ on the other hand will be written to the pdf verbatim. Any number of attributes can be added. -An identifier can be set with the ⟦id⟧ option, or after the fact with +An identifier can be set with the ⟦id {...}⟧ option, or after the fact with ⟦*\settagid {...}⟧. This identifier will be added to the ⟦IDTree⟧ and is entirely optional; you will probably already know when you need it. +The ⟦ref {...}⟧ option lets a structure element refer to another (the ⟦/Ref⟧ +option in the structure element dictionary). Its argument should be the ⟦id⟧ of +the other structure element. + +The title of the structure element (corresponding to the ⟦/T⟧ entry in the +structure element dictionary) can be set with the ⟦title {...}⟧ option. The +pdf/ua standard requires this key for all document sections. Finally, structure element classes can be given with the ⟦class ⟧ keyword, which can be repeated. @@ -450,12 +509,13 @@ sort (and indeed, no general logic can be given in the latter case). Always proc with caution when using cells spanning multiple rows, and inspect the resulting structure carefully. -Marking a table header (either manually or with ⟦\automarktable⟧) will not -connect normal cells with their headers; you will have to connect these -manually by including ⟦*\markcolumnhead⟧ or ⟦*\markrowhead⟧ in the appropriate -header cells. This must be done \emph{after} ⟦\markcolumnspan⟧ if the latter -appplies. If properly setup like this, other cells of the table (including -header cells) will be assigned to matching row or column headers automatically. +Marking up a table header (except if done through ⟦\automarktable⟧) +will not connect normal table cells with their headers; you will have to +connect these manually by including ⟦*\markcolumnhead⟧ or ⟦*\markrowhead⟧ in +the appropriate header cells. This must be done \emph{after} ⟦\markcolumnspan⟧ +if the latter appplies. If properly setup like this, other cells of the table +(including header cells) will be assigned to matching row or column headers +automatically. \section Other helper macros % 1 @@ -465,6 +525,9 @@ For marking up an entry in a table of contents, you can use the macro tags in the correct way. (The ⟦dest⟧ is a link destination and can be empty; the ⟦lbl⟧ is a section number and can also be empty.) +For tagging (foot)notes, ⟦*\marknoteref{*}⟧ and ⟦*\marknotelbl{*}⟧, when placed +around the footnote markers, will insert the proper ⟦Ref⟧, ⟦Note⟧ and ⟦Lbl⟧ +tags. %  diff --git a/macros/luatex/generic/minim-pdf/minim-pdf.lua b/macros/luatex/generic/minim-pdf/minim-pdf.lua index 74d56eeaac..875fd89659 100644 --- a/macros/luatex/generic/minim-pdf/minim-pdf.lua +++ b/macros/luatex/generic/minim-pdf/minim-pdf.lua @@ -7,9 +7,11 @@ alloc.remember('minim-pdf') -- 1 helper functions +local HLIST_NODE = node.id 'hlist' local GLUE_NODE = node.id 'glue' local GLYPH_NODE = node.id 'glyph' local RULE_NODE = node.id 'rule' +local DISC_NODE = node.id 'disc' local WHATSIT_NODE = node.id 'whatsit' local USER_DEFINED = node.subtype 'user_defined' local START_LINK = node.subtype 'pdf_start_link' @@ -51,9 +53,8 @@ local function singleton(t) return one end --- in-depth node list traversal --- returns current and parent node --- only dives into hbox, vbox and ins nodes +-- in-depth node list traversal; returns current and parent node +-- only dives into hbox, vbox and ins nodes, and in disc no-break text -- returns node and enclosing box local function full_traverse(head) return function(stack, last) @@ -178,7 +179,7 @@ local structure_types = alloc.saved_table('structure types', { -- inline structure elements ILSE Span = { type = 'inline' }, Quote = { type = 'inline' }, - Note = { type = 'inline' }, + Note = { type = 'extern' }, Reference = { type = 'inline' }, BibEntry = { type = 'inline' }, Code = { type = 'inline', attributes = { ['CSS-2.00'] = { ['white-space'] = '(pre)' } } }, @@ -198,9 +199,10 @@ local structure_type_compatibility = { none = { none=1, section=1, group=1, block=1, inline=1, contain=1 }, section = { none=1, section=1, group=1, block=1 }, group = { none=1, group=1, block=1 }, - block = { none=1, inline=1 }, - inline = { none=1, inline=1 }, - contain = { none=1, inline=1, block=1, group=1 }, + extern = { none=1, group=1, block=1 }, + block = { none=1, inline=1, extern=1 }, + inline = { none=1, inline=1, extern=1 }, + contain = { none=1, inline=1, block=1, group=1, extern=1 }, } local function check_structure_compatibility(parent, child, childtype) @@ -354,10 +356,19 @@ local function write_structure() local id_tree, id_tree_obj = { }, pdf.reserveobj() structure[1].parent = { objnum = root_obj } for _, se in ipairs(structure) do - if not se.hidden then se.objnum = pdf.reserveobj() end + if not se.hidden then + se.objnum = pdf.reserveobj() + if se.id then + id_tree[se.id] = se.objnum + end + end end -- update the document catalog - add_to_catalog('/MarkInfo << /Marked true >>') + if tex.count['pdfuaconformancelevel'] > 0 then + add_to_catalog('/MarkInfo << /Marked true /Suspects false >>') + else + add_to_catalog('/MarkInfo << /Marked true >>') + end add_to_catalog('/StructTreeRoot %s 0 R', root_obj) -- write the structure tree root pdf.immediateobj(root_obj, string.format( @@ -368,10 +379,11 @@ local function write_structure() if not se.hidden then local res = { '<<' } insert_formatted(res, '/Type/StructElem /S%s /P %d 0 R', pdf_name(se.struct), se.parent.objnum) - if se.id then id_tree[se.id] = se.objnum; insert_formatted(res, '/ID %s', pdf_string(se.id)) end - if se.lang and se.lang ~= se.parent.lang then insert_formatted(res, '/Lang (%s)', se.lang) end + if se.id then insert_formatted(res, '/ID %s', pdf_string(se.id)) end + if se.lang and se.lang ~= se.parent.lang then insert_formatted(res, '/Lang %s', pdf_string(se.lang)) end if se.alt then insert_formatted(res, '/Alt %s', pdf_string(se.alt)) end if se.actual then insert_formatted(res, '/ActualText %s', pdf_string(se.actual)) end + if se.title then insert_formatted(res, '/T %s', pdf_string(se.title)) end if #se.children > 0 then insert_formatted(res, '\n/K %s', format_K_array(se)) end if se.mainpage then insert_formatted(res, '/Pg %d 0 R', se.mainpage) end if se.class then @@ -382,6 +394,19 @@ local function write_structure() end if #se.class > 1 then table.insert(res, ']') end end + if se.ref then + table.insert(res, '/Ref') + table.insert(res, '[') + for _, c in ipairs(se.ref) do + local onum = id_tree[c] + if onum then + insert_formatted(res, '%d 0 R', onum) + else + alloc.err('Invalid structure element ID: %s', c) + end + end + table.insert(res, ']') + end if not is_empty(se.attributes) then table.insert(res, '/A') make_attributes(res, se.attributes) @@ -481,7 +506,7 @@ cb.register('uselanguage', function(name) end) local function write_language() - add_to_catalog('/Lang (%s)', structure[1].lang or 'und') + add_to_catalog('/Lang %s', pdf_string(structure[1].lang or 'und')) end -- 1 marking structure elements @@ -559,9 +584,11 @@ end alloc.luadef('tagging:startelement', function() local s = options_scanner() :string('id') + :string('ref', true) :string('type') -- 'section', 'group', 'block' etc. :argument('alt') :argument('actual') + :argument('title') :string('lang') :subtable('attr') :string('class', true) @@ -736,7 +763,7 @@ function M.mark_content_items(box) elseif marker and marker.what == 'mci_stop' then end_node = end_node and n; insert_tags(b) -- finally, see if we need to intervene between content nodes - elseif n.id == RULE_NODE or n.id == GLYPH_NODE + elseif n.id == RULE_NODE or n.id == GLYPH_NODE or n.id == DISC_NODE or marker and marker.what == 'content' then local _se, _order = n[current_struct], n[current_order] if n.id == RULE_NODE and (n.width == 0 or n.height == 0 and n.depth == 0) then @@ -768,7 +795,7 @@ cb.register('pre_shipout', function(nr) end end) --- 1 destinations +-- 1 links and destinations local dest_count = alloc.new_count('link dest count') local function new_dest_name() @@ -791,7 +818,41 @@ end alloc.luadef('newdestinationname', function() tex.sprint(new_dest_name()) end) alloc.luadef('lastdestinationname', function() tex.sprint(last_dest_name()) end) --- 1 bookmarks +-- provide the arguments to \pdfextension startlink +local link_types = { } +alloc.luadef('hyper:makelink', function() + local s = options_scanner() + :argument('alt'):argument('contents') -- same thing + :argument('attr') + :scan() + local type = token.scan_word() + local userf = link_types[type] + if not userf then + alloc.err('Unknown hyperlink type: %s', type) + userf = link_types.first + end + local user = userf() + attr = { 'attr {\\csname minim:linkattr\\endcsname' } + if s.attr then table.insert(attr, s.attr) end + if s.alt or s.contents then insert_formatted(attr, '/Contents %s', pdf_string(s.alt or s.contents)) end + insert_formatted(attr, '} user {%s}', user) + tex.sprint(table.concat(attr, ' ')) +end) + +function link_types.dest() + return string.format('/Subtype/Link /A <>', pdf_string(token.scan_argument())) +end +function link_types.url() + return string.format('/Subtype/Link /A <>', pdf_string(token.scan_argument())) +end + +function link_types.user() return token.scan_argument() end +function link_types.next() return '/Subtype/Link /A <>' end +function link_types.prev() return '/Subtype/Link /A <>' end +function link_types.first() return '/Subtype/Link /A <>' end +function link_types.last() return '/Subtype/Link /A <>' end + +-- 1 bookmarks (outlines) -- start with a dummy top-level bookmark local bookmarks = { { count = 0 } } @@ -811,8 +872,8 @@ local function write_bookmarks() -- write bookmark objects for i=2, #bookmarks do local bm, res = bookmarks[i], { } - insert_formatted(res, '<< /Title %s\n/Parent %s 0 R /Dest (%s)', pdf_string(bm.title), - bm.parent and bm.parent.outline_obj or bookmarks[1].outline_obj, bm.dest) + insert_formatted(res, '<< /Title %s\n/Parent %s 0 R /Dest %s', pdf_string(bm.title), + bm.parent and bm.parent.outline_obj or bookmarks[1].outline_obj, pdf_string(bm.dest)) if bm.next then insert_formatted(res, '/Next %s 0 R', bm.next.outline_obj) end if bm.prev then insert_formatted(res, '/Prev %s 0 R', bm.prev.outline_obj) end if bm.struct and bm.struct.objnum then @@ -945,13 +1006,13 @@ end, 'protected') function M.mark_discretionaries(head, gc) if not spaces_enabled() then return end - for disc in node.traverse_id(7, head) do + for disc in node.traverse_id(DISC_NODE, head) do if disc.subtype ~= 2 then -- ‘automatic’ (exclude explicit hyphens) local pre, post, replace = disc.pre, disc.post, disc.replace local se, order = disc[current_struct], disc[current_order] -- get the replacement text local actual = { } - for c in node.traverse_id(29, replace) do + for c in node.traverse_id(GLYPH_NODE, replace) do table.insert(actual, c.char) end -- special case: a single hyphen @@ -982,7 +1043,7 @@ local space_attr = alloc.new_attribute('space insertion marker') function M.mark_spaces(head, gc) if not spaces_enabled() then return end - for g in node.traverse_id(12, head) do -- glue + for g in node.traverse_id(GLUE_NODE, head) do if g.prev and g.subtype == 13 or g.subtype == 14 then -- (x)spaceskip local p = g.prev p[space_attr] = p.id == GLYPH_NODE and p.font @@ -1011,7 +1072,7 @@ end function M.insert_spaces(head, gc) if not spaces_enabled() then return end - for line in node.traverse_id(0, head) do + for line in node.traverse_id(HLIST_NODE, head) do insert_spaces(line.head) end return true @@ -1085,10 +1146,10 @@ local function write_output_intents() attr = string.format('/N %d', oi.N), immediate = true } insert_formatted(res, '<< /Type/OutputIntent /DestOutputProfile %d 0 R', p) - insert_formatted(res, '/S/%s /OutputConditionIdentifier (%s)', oi.subtype, oi.id) - if oi.info then insert_formatted(res, '/Info (%s)', oi.info) end - if oi.condition then insert_formatted(res, '/OutputCondition (%s)', oi.condition) end - if oi.registry then insert_formatted(res, '/RegistryName (%s)', oi.registry) end + insert_formatted(res, '/S/%s /OutputConditionIdentifier %s', oi.subtype, pdf_string(oi.id)) + if oi.info then insert_formatted(res, '/Info %s', pdf_string(oi.info)) end + if oi.condition then insert_formatted(res, '/OutputCondition %s', pdf_string(oi.condition)) end + if oi.registry then insert_formatted(res, '/RegistryName %s', pdf_string(oi.registry)) end table.insert(res, '>>') end table.insert(res, ']') @@ -1121,9 +1182,31 @@ end alloc.luadef('minim:default:rgb:profile', function() M.add_default_rgb_output_intent() end) alloc.luadef('minim:default:cmyk:profile', function() M.add_default_cmyk_output_intent() end) +-- 1 pdf/ua + +alloc.luadef('tagging:enablepdfua', function() + add_to_catalog('/ViewerPreferences << /DisplayDocTitle true >>') + local pageattr = pdf.getpageattributes() + if pageattr then + pdf.setpageattributes(pageattr .. ' /Tabs /S') + else + pdf.setpageattributes('/Tabs /S') + end +end) + +local function perform_pdfua_checks() + local xmp = require 'minim-xmp' + if xmp.get_metadata('dc:title') == '' then + alloc.err('PDF/UA error: no dc:title metadata') + end +end + -- -cb.register ('finish_pdffile', function() +cb.register('finish_pdffile', function() + if tex.count['pdfuaconformancelevel'] > 0 then + perform_pdfua_checks() + end if tagging_enabled() then write_language() write_structure() diff --git a/macros/luatex/generic/minim-pdf/minim-pdf.pdf b/macros/luatex/generic/minim-pdf/minim-pdf.pdf index a6e22ee194..2b2ea69c42 100644 Binary files a/macros/luatex/generic/minim-pdf/minim-pdf.pdf and b/macros/luatex/generic/minim-pdf/minim-pdf.pdf differ diff --git a/macros/luatex/generic/minim-pdf/minim-pdf.tex b/macros/luatex/generic/minim-pdf/minim-pdf.tex index d8b06255ba..8a5f738063 100644 --- a/macros/luatex/generic/minim-pdf/minim-pdf.tex +++ b/macros/luatex/generic/minim-pdf/minim-pdf.tex @@ -167,8 +167,8 @@ \newcount\tagging:tablecolspan \tagging:tablecolspan 1 \newcount\tagging:tablerowspan \tagging:tablerowspan 1 \newcount\tagging:i -\def\tagging:TH{TH} -\def\tagging:TD{TD} +\def\tagging:TH{{TH}\markcolumnhead} +\def\tagging:TD{{TD}} % initialising variables \def\marktable{\startelement{Table}% \global\advance\tagging:tablec1 @@ -205,7 +205,7 @@ \def\marktablecell{% \global\advance\tagging:tablecol1 \continueelementfrom\tagging:row - \startelement{\tagging:cell}% + \expandafter\startelement\tagging:cell% \tagging:assignheaders} % spans @@ -301,13 +301,27 @@ \def\marktocentry#1#2#3#4#5{% \ifx\marktocentry#1\marktocentry \def\marktocentry:link##1{##1}\else - \def\marktocentry:link##1{\hyperlink dest{#1}##1\endlink}\fi + \def\marktocentry:link##1{\hyperlink + alt{\csname minim:str:page\endcsname#5} + dest{#1}##1\endlink}\fi \markelement{TOCI}{\nextpartag{}\quitvmode \ifx\marktocentry#2\marktocentry\else \markelement{Lbl}{\marktocentry:link{#2}}\fi \markelement{Reference}{\marktocentry:link{#3% \ifx\marktocentry#4\marktocentry\else \markartifact{Layout}{#4}\fi#5}}}} +\def\minim:str:page{Page } + +% \marknoteref {*} +\def\marknoteref#1{% + \startelement ref{\newdestinationname}{Reference}% + {\stopformulatagging#1}\stopelement{Reference}} +% \marknotelbl {*} +\def\marknotelbl#1{% + \startelement id{\lastdestinationname}{Note}% + \aftergroup\tagging:ensurestopNote + \markelement{Lbl}{{\stopformulatagging#1}}} +\def\tagging:ensurestopNote{\ensurestopelement{Note}} % 1 tagging formulas @@ -351,7 +365,7 @@ \def\formulasource:set#1{% \begingroup % strip \setalttext, \setactualtext - \def\setalttext#1{}\def\setactualtext#1{}% + \def\setalttext##1{}\def\setactualtext##1{}% \xdef\formulasource:thesource{#1}% \endgroup \expandafter\splitcommalist @@ -370,6 +384,7 @@ relation Source desc {Equation source} name {\formulafilename.tex} string {\tagging:formulasource{#1}}\fi} +\def\formulasource:none#1{} \newtoks\includeformulasources \includeformulasources{actualtext,attachment} @@ -390,17 +405,18 @@ \def\linkdest:h#1{\vadjust pre{\linkdest:v{#1}}} \def\linkdest:v#1{\pdfextension dest name {#1} xyz\nobreak} -% \hyperlink dest {name} ... \endlink -% \hyperlink url {url} ... \endlink +% \hyperlink ... \endlink +% args: alt {...} attr {...} +% type: dest {name} | url {url} | next | prev | first | last \protected\def\endlink{\pdfextension endlink\stopelement{Link}\relax} \protected\def\startlink{\startelement{Link}\pdfextension startlink} -\def\hyperlink#1#{\quitvmode\hyperlink:rmspace#1 \hyperlink:rmspace} -\def\hyperlink:rmspace#1 #2\hyperlink:rmspace{% - \startlink attr {\minim:linkattr}% - \csname hyperlink:#1\endcsname} -\def\hyperlink:dest#1{user {/Subtype/Link /F 4 /A <>}} -\def\hyperlink:url#1{user {/Subtype/Link /F 4 /A <>}} -\def\minim:linkattr{/Border [0 0 0]} +\protected\def\hyperlink{\quitvmode\startlink\hyper:makelink} + +% \hyperlinkstyle { ... } +\def\minim:linkattr{\the\hyperlinkstyle\the\minim:pdfalinkattr} +\newtoks\hyperlinkstyle +\newtoks\minim:pdfalinkattr +\hyperlinkstyle{/Border [0 0 0]} % 1 languages @@ -449,9 +465,12 @@ \newcount \pdfaconformancelevel \pdfaconformancelevel = 0 +\newcount \pdfuaconformancelevel +\pdfuaconformancelevel = 0 % \pdfalevel 2b \def\pdfalevel#1#2{% + \minim:pdfalinkattr{ /F 4}% hyperlinks must be printed \global\pdfaconformancelevel=#1\relax \ifcsname minim:pdfa:#1#2\endcsname \lastnamedcs\else \errmessage{Unknown pdf/a standard pdf/a-#1}\fi} @@ -474,6 +493,12 @@ \expandafter\def\csname minim:pdfa:3b\endcsname{\minim:pdfasettings 7B3} \expandafter\def\csname minim:pdfa:3u\endcsname{\minim:pdfasettings 7U3} +% \pdfualavel 1 +\def\pdfualevel{\input minim-xmp + \setmetadata pdfuaid:part {1} + \tagging:enablepdfua + \global\pdfuaconformancelevel= } + %  \catcode`\: = \minimpdfloaded diff --git a/macros/luatex/generic/minim-xmp/README b/macros/luatex/generic/minim-xmp/README index 4b983bddeb..15878c6e17 100644 --- a/macros/luatex/generic/minim-xmp/README +++ b/macros/luatex/generic/minim-xmp/README @@ -1,4 +1,4 @@ -Version: 2023/1.2 +Version: 2024/1.3 SUMMARY @@ -21,6 +21,12 @@ In order to obtain the typeset manual of this package, simply say: HISTORY +2024/1.3 (5/1/2024) + + New features: + + * Add the pdfuaid namespace. + 2023/1.2 (3/3/2022) No new features. diff --git a/macros/luatex/generic/minim-xmp/minim-xmp.doc b/macros/luatex/generic/minim-xmp/minim-xmp.doc index 651373e2b6..250edb18af 100644 --- a/macros/luatex/generic/minim-xmp/minim-xmp.doc +++ b/macros/luatex/generic/minim-xmp/minim-xmp.doc @@ -8,8 +8,8 @@ \else \startmetadata author {Esger Renkema} title {minim-xmp} - date {2023-03-03} - version {2023/1.2} + date {2024-01-05} + version {2024/1.3} keywords {LuaTeX; Plain TeX; XMP; metadata; PDF/A;} stopmetadata \maketitle \fi @@ -85,7 +85,8 @@ the value of a single field and ⟦\getmetadata key⟧ will return all fields as \section Supported metadata keys Initially, the ⟦\setmetadata⟧ and ⟦\getmetadata⟧ recognise all pdf/a compatible -fields in the ⟦pdf⟧, ⟦pdfaid⟧, ⟦dc⟧, ⟦xmp⟧, ⟦xmpMM⟧ and ⟦xmpRights⟧ namespaces. +fields in the ⟦pdf⟧, ⟦pdfaid⟧, ⟦pdfuaid⟧, ⟦dc⟧, ⟦xmp⟧, ⟦xmpMM⟧ and ⟦xmpRights⟧ +namespaces. Keys should be prefixed with their namespace, e.g. ⟦dc:creator⟧ or ⟦xmp:CreatorTool⟧. Note that the ⟦dc⟧ namespace has lower-case fields; field names are diff --git a/macros/luatex/generic/minim-xmp/minim-xmp.lua b/macros/luatex/generic/minim-xmp/minim-xmp.lua index d6867a4c9b..e3b7a8de70 100644 --- a/macros/luatex/generic/minim-xmp/minim-xmp.lua +++ b/macros/luatex/generic/minim-xmp/minim-xmp.lua @@ -158,6 +158,12 @@ M.add_namespace('PDF/A Identification', 'pdfaid', 'http://www.aiim.org/pdfa/ns/i part = { 'Integer', 'Version identifier', true }, }, nil, true) +M.add_namespace('PDF/UA Identification', 'pdfuaid', 'http://www.aiim.org/pdfua/ns/id/', { + amd = { 'Text', 'Amendment identifier', true }, + corr = { 'Text', 'Corrigendum identifier', true }, + part = { 'Integer', 'Version identifier', true }, +}) + M.add_namespace('Dublin Core', 'dc', 'http://purl.org/dc/elements/1.1/', { contributor = { 'Bag ProperName', 'Other contributors' }, coverage = { 'Text', 'Extent or scope' }, diff --git a/macros/luatex/generic/minim-xmp/minim-xmp.pdf b/macros/luatex/generic/minim-xmp/minim-xmp.pdf index b5011cd8e0..fdf38f3a2c 100644 Binary files a/macros/luatex/generic/minim-xmp/minim-xmp.pdf and b/macros/luatex/generic/minim-xmp/minim-xmp.pdf differ diff --git a/macros/luatex/generic/minim/README b/macros/luatex/generic/minim/README index 36fe201f7c..4aa90c7cd8 100644 --- a/macros/luatex/generic/minim/README +++ b/macros/luatex/generic/minim/README @@ -1,4 +1,4 @@ -Version: 2023/1.3 +Version: 2024/1.4 SUMMARY @@ -31,6 +31,11 @@ the packages mentioned above. HISTORY +2024/1.4 (5/1/2024) + + * Documented the pdf resource management module + * Updated the manual to pdf/ua + 2023/1.3 (20/10/2023) No changes. diff --git a/macros/luatex/generic/minim/minim-alloc.doc b/macros/luatex/generic/minim/minim-alloc.doc index 4aec2d39fc..5a343c4b85 100644 --- a/macros/luatex/generic/minim/minim-alloc.doc +++ b/macros/luatex/generic/minim/minim-alloc.doc @@ -25,7 +25,7 @@ load both packages should not matter. \section Format files A major motivation for writing this module (and not, instead, depending on -⟦ltluatex.tex⟧) is the ability to write lua-heavy code that can be safely +ltluatex) is the ability to write lua-heavy code that can be safely included in format files. For this purpose, the register allocation functions described below allow ensuring that the allocation is made only once. @@ -171,6 +171,46 @@ If you create a new callback with a number for a name, that callback will replace the ⟦*process_rule⟧ callback when its number matches the index property of the rule. +\section PDF resources + +This package can perform sophisticated pdf resource management, assigning to +every page a resource object containing only the resources referenced on that +page. pdf resources are ⟦ExtGstate⟧, ⟦ColorSpace⟧, ⟦Pattern⟧ and ⟦Shading⟧ +objects that have to be referenced by name (⟦/name⟧) instead of with the usual +object references (⟦n 0 R⟧).\footnote + {*}{This is of course also the case for ⟦Font⟧ resources, but those are + already managed by luatex’s pdf backend.} +Currently, the only other package managing pdf resources for plain tex is +tikz/pgf, and the latter does so by collecting all resources in a single +(global) resource object. That approach is not wrong per se, but may cause +other tools processing the resulting pdf to retain unneeded resources. +Both implementations can safely be used together, but since pgf does not keep +track of actual resource use, any resources defined through pgf will be added +to the resource dictionary of every subsequent page. + +The resource management is implemented in minim-pdfresources.lua and +minim-pdfresources.tex, of which the tex file currently only includes pgf +compatibility code (and may thus be omitted in the absence of pgf). In the +following, ⟦R = require 'minim-pdfresources'⟧ is understood. + +You must register resources before you use them. This can be done with +⟦*R.add_resource(kind, name, resource)⟧, where ⟦kind⟧ is one of the resource +types, ⟦name⟧ is the name you want to use for it (without a preceding slash) +and ⟦resource⟧ is a table that may contain any data you want to associate with +the resource. In the ⟦resource⟧ table, either the key ⟦value⟧ must be present +(containing the (raw) contents of the resource; will be written to the pdf +as-is) or the key ⟦write⟧ (which must be a function that will be called once, +to generate the ⟦value⟧). Registered resources can be retrieved again with +⟦*R.get_resource(kind, name)⟧. + +You can refer to registered resources with the ⟦name⟧ you used to register +them. Whenever you do so, however, you must mark the reference with a special +⟦late_lua⟧ node that will tell minim to include the resource in the resource +list for the page it appears on. These nodes can be created from lua with +⟦*R.use_resource_node(kind, name)⟧ or directly inserted by tex with +⟦*\withpdfresource {kind} {name}⟧ (the braces are optional). + + \section Programming helpers Optional keyword arguments to tex macros can be defined with help of diff --git a/macros/luatex/generic/minim/minim-doc.sty b/macros/luatex/generic/minim/minim-doc.sty index 97b173beac..93d807f16a 100644 --- a/macros/luatex/generic/minim/minim-doc.sty +++ b/macros/luatex/generic/minim/minim-doc.sty @@ -9,6 +9,7 @@ %\decompressedpdf \pdfalevel 3a +\pdfualevel 1 \overfullrule = 0pt % 1 page layout @@ -124,8 +125,22 @@ endfig;} % page artifacts \edef\tmp{\markartifact{Pagination /Subtype/Footer}{\the\footline}} \footline\expandafter{\tmp} -\def\footnoterule{\markartifact{Layout}{\kern-3\p@ - \hrule width 2truein \kern 2.6\p@}} % the \hrule is .4pt high + +% footnotes +\edef\footnoterule{\markartifact{Layout}\footnoterule} +\catcode`\@=11 +\def\footnote#1{\let\@sf\empty % parameter #2 (the text) is read later + \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi + \marknoteref{#1}\@sf\vfootnote{#1}} +\def\vfootnote#1{% + \insert\footins\bgroup + \interlinepenalty\interfootnotelinepenalty + \splittopskip\ht\strutbox % top baseline for broken footnotes + \splitmaxdepth\dp\strutbox \floatingpenalty\@MM + \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip + \nextpartag{}\marknotelbl{#1}\enspace\startelement{P}% + \footstrut\futurelet\next\fo@t} +\catcode`\@=12 % \startlist \item x. ... \stoplist \def\listskip{\vskip 3pt plus 2pt\vskip-\parskip} @@ -141,22 +156,26 @@ endfig;} \protected\def\chapter#1 \par{% \vfil\break \ensurestopelement{Section}% - \startelement{Chapter}% + \global\advance\chapterno1 \global\sectionno0 + \startelement title{Chapter \the\chapterno}{Chapter}% \outline open {#1}% \addtotoc{\chapter{#1}{\lastdestinationname}}% \nextpartag{H}\quitvmode \red{\Title#1\hfill\copy\notehead}\bigskip\nobreak} +\newcount \chapterno % \section Title \par \addstructuretype Sect Section \protected\def\section#1 \par{% \bigskip\penalty-50\relax - \startelement{Section}% + \global\advance\sectionno1 + \startelement title{Section \the\chapterno.\the\sectionno}{Section}% \outline closed {#1}% \addtotoc{\section{#1}{\lastdestinationname}}% \nextpartag{H}\quitvmode \red{\title#1}% \par\nobreak} +\newcount \sectionno % table of contents \newtoks\toc \newif\iftoc \toctrue @@ -186,7 +205,9 @@ endfig;} \tocfalse \chapter \getmetadata title \hfill \tenrm version \getmetadata version \par\endgroup - \marktableaslist \halign {\strut + \marktableaslist + \tagattribute List ListNumbering /None + \halign {\strut \qquad##\quad&##\hfil\cr author&\getmetadata author\cr contact&{\def\tmp{@}\def\TMP{.}% @@ -207,8 +228,9 @@ Licence (EUPL) version 1.2 or later. An english version of this licence has been included as an attachment to this file; copies in other languages can be obtained at \stopformulatagging$$\hbox -{\hyperlink url {https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12}% -https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\endlink}$$\startformulatagging} +{\hyperlink alt{Link to the website of the EUPL.} + url {https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12}% + https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\endlink}$$\startformulatagging} % for identifying which file we are typesetting \edef\thejobname{\expandafter\scantextokens\expandafter{\jobname}} diff --git a/macros/luatex/generic/minim/minim-pdfresources.lua b/macros/luatex/generic/minim/minim-pdfresources.lua index e6a06e783e..468da03b48 100644 --- a/macros/luatex/generic/minim/minim-pdfresources.lua +++ b/macros/luatex/generic/minim/minim-pdfresources.lua @@ -50,7 +50,7 @@ function M.use_resource(kind, name) return res._entry_ end --- global resources are mainly for pgf compatibility: contains adds entries to +-- global resources are mainly for pgf compatibility: it contains entries to -- the resource dictionaries that will be added for every page. -- local global_resources = init_resources() -- name ↦ '/Key ' @@ -87,6 +87,10 @@ function M.use_resource_node(kind, name) return n end +alloc.luadef('withpdfresource', function() + node.write(M.use_resource_node(token.scan_string(), token.scan_string())) +end, 'protected') + -- construction and caching of resource dictionaries. -- local previous_dicts = init_resources() -- pdf dict ↦ objnum diff --git a/macros/luatex/generic/minim/minim-pdfresources.tex b/macros/luatex/generic/minim/minim-pdfresources.tex index 6b8dc29577..57e9d8f012 100644 --- a/macros/luatex/generic/minim/minim-pdfresources.tex +++ b/macros/luatex/generic/minim/minim-pdfresources.tex @@ -13,6 +13,7 @@ % 1 pgf compatibility % this ballet inserts our fix directly at the end of pgfsys-luatex.def +% (see the \ProvidesFile redefinition in minim-alloc.tex) \expandafter\def\csname minim:intercept:pgfsys-luatex.def\endcsname {\wlog{minim: applying pgf patches...}\newtoks\minim:pgf:fix:toks \minim:pgf:fix:toks\csname pgfutil@everybye\endcsname diff --git a/macros/luatex/generic/minim/minim.doc b/macros/luatex/generic/minim/minim.doc index bf56d89747..e975718b1e 100644 --- a/macros/luatex/generic/minim/minim.doc +++ b/macros/luatex/generic/minim/minim.doc @@ -4,8 +4,8 @@ \startmetadata author {Esger Renkema} title {minim} - date {2023-10-20} - version {2023/1.3} + date {2024-01-05} + version {2024/1.4} keywords {LuaTeX; Plain TeX; MetaPost; PDF/A; Tagged PDF; accessibility; a11y; Unicode mathematics; XMP; metadata; hypertext; bookmarks} stopmetadata @@ -20,7 +20,9 @@ a basis for your own formats. Most features included in the format are provided by separate packages that can be used on their own; see the packages -\smallskip\marktableaslist \halign {\strut +\smallskip\marktableaslist +\tagattribute List ListNumbering /Description +\halign {\strut \vrule height10ptdepth2ptwidth0pt\qquad \red{#}\quad\hfil&#\hfil\cr minim-mp&for mplib (MetaPost) support\cr diff --git a/macros/luatex/generic/minim/minim.pdf b/macros/luatex/generic/minim/minim.pdf index b6e05b6cc8..3848cf5103 100644 Binary files a/macros/luatex/generic/minim/minim.pdf and b/macros/luatex/generic/minim/minim.pdf differ diff --git a/systems/texlive/tlnet/install-tl b/systems/texlive/tlnet/install-tl index a30368d07b..fc17edb519 100755 --- a/systems/texlive/tlnet/install-tl +++ b/systems/texlive/tlnet/install-tl @@ -1,5 +1,5 @@ #!/usr/bin/env perl -# $Id: install-tl 67839 2023-08-07 21:47:31Z preining $ +# $Id: install-tl 69327 2024-01-07 11:10:51Z preining $ # Copyright 2007-2023 # Reinhard Kotucha, Norbert Preining, Karl Berry, Siep Kroonenberg. # This file is licensed under the GNU General Public License version 2 @@ -12,7 +12,7 @@ use strict; use warnings; -my $svnrev = '$Revision: 67839 $'; +my $svnrev = '$Revision: 69327 $'; $svnrev =~ m/: ([0-9]+) /; $::installerrevision = ($1 ? $1 : 'unknown'); @@ -914,7 +914,9 @@ sub final_remote_init { } elsif ($media eq "NET") { info("Distribution: net (downloading)\n"); info("Using URL: $TeXLiveURL\n"); - TeXLive::TLUtils::setup_persistent_downloads() if $opt_persistent_downloads; + TeXLive::TLUtils::setup_persistent_downloads( + "$::installerdir/tlpkg/installer/curl/curl-ca-bundle.crt" + ) if $opt_persistent_downloads; } else { info("Distribution: $media\n"); } @@ -3603,7 +3605,7 @@ This script and its documentation were written for the TeX Live distribution (L) and both are licensed under the GNU General Public License Version 2 or later. -$Id: install-tl 67839 2023-08-07 21:47:31Z preining $ +$Id: install-tl 69327 2024-01-07 11:10:51Z preining $ =cut # to remake HTML version: pod2html --cachedir=/tmp install-tl >/tmp/itl.html diff --git a/systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm b/systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm index 1e22f354d4..f424d7e6a2 100644 --- a/systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm +++ b/systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm @@ -1,4 +1,4 @@ -# $Id: TLDownload.pm 61372 2021-12-21 22:46:16Z karl $ +# $Id: TLDownload.pm 69328 2024-01-07 11:11:02Z preining $ # TeXLive::TLDownload.pm - module for abstracting the download modes # Copyright 2009-2021 Norbert Preining # This file is licensed under the GNU General Public License version 2 @@ -11,7 +11,7 @@ package TeXLive::TLDownload; use TeXLive::TLUtils; use TeXLive::TLConfig; -my $svnrev = '$Revision: 61372 $'; +my $svnrev = '$Revision: 69328 $'; my $_modulerevision; if ($svnrev =~ m/: ([0-9]+) /) { $_modulerevision = $1; @@ -40,10 +40,11 @@ if ($@) { sub new { my $class = shift; + my %params = @_; my $self = {}; $self->{'initcount'} = 0; bless $self, $class; - $self->reinit(); + $self->reinit(defined($params{'certificates'}) ? $params{'certificates'} : ""); return $self; } @@ -52,6 +53,7 @@ sub new sub reinit { my $self = shift; + my $certs = shift; # Irritatingly, as of around version 6.52, when env_proxy is set, LWP # started unconditionally complaining if the environment contains @@ -68,6 +70,14 @@ sub reinit { @env_proxy = ("env_proxy", 1); } # + # Set HTTPS_CA_FILE to the TL provided certificate bundle + # for systems that don't have a system-wide certificate bundle + # in particular MacOS. + if ((! exists $ENV{'HTTPS_CA_FILE'}) && $certs) { + debug("Setting env var HTTPS_CA_FILE to " . $certs ."\n"); + $ENV{'HTTPS_CA_FILE'} = $certs + } + # my $ua = LWP::UserAgent->new( agent => "texlive/lwp", # use LWP::ConnCache, and keep 1 connection open diff --git a/systems/texlive/tlnet/tlpkg/TeXLive/TLUtils.pm b/systems/texlive/tlnet/tlpkg/TeXLive/TLUtils.pm index 30d53ad7c7..a3bf3ff3b3 100644 --- a/systems/texlive/tlnet/tlpkg/TeXLive/TLUtils.pm +++ b/systems/texlive/tlnet/tlpkg/TeXLive/TLUtils.pm @@ -1,4 +1,4 @@ -# $Id: TLUtils.pm 68283 2023-09-15 13:11:11Z preining $ +# $Id: TLUtils.pm 69327 2024-01-07 11:10:51Z preining $ # TeXLive::TLUtils.pm - the inevitable utilities for TeX Live. # Copyright 2007-2023 Norbert Preining, Reinhard Kotucha # This file is licensed under the GNU General Public License version 2 @@ -8,7 +8,7 @@ use strict; use warnings; package TeXLive::TLUtils; -my $svnrev = '$Revision: 68283 $'; +my $svnrev = '$Revision: 69327 $'; my $_modulerevision = ($svnrev =~ m/: ([0-9]+) /) ? $1 : "unknown"; sub module_revision { return $_modulerevision; } @@ -4229,6 +4229,7 @@ false. =cut sub setup_persistent_downloads { + my $certs = shift; if ($TeXLive::TLDownload::net_lib_avail) { ddebug("setup_persistent_downloads has net_lib_avail set\n"); if ($::tldownload_server) { @@ -4236,10 +4237,10 @@ sub setup_persistent_downloads { debug("stop retrying to initialize LWP after 10 failures\n"); return 0; } else { - $::tldownload_server->reinit(); + $::tldownload_server->reinit(certificates => $certs); } } else { - $::tldownload_server = TeXLive::TLDownload->new; + $::tldownload_server = TeXLive::TLDownload->new(certificates => $certs); } if (!defined($::tldownload_server)) { ddebug("TLUtils:setup_persistent_downloads: failed to get ::tldownload_server\n"); diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl index 49d1d854ac..eeba54d804 100644 --- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl +++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl @@ -1,8 +1,5 @@ $mirrors = { 'Africa' => { - 'Morocco' => { - 'https://mirror.marwan.ma/ctan/' => 1, - }, 'South Africa' => { 'http://ftp.sun.ac.za/ftp/CTAN/' => 1, 'https://mirror.ufs.ac.za/ctan/' => 1, @@ -30,7 +27,6 @@ $mirrors = { }, 'India' => { 'https://in.mirrors.cicku.me/ctan/' => 1, - 'https://mirror.niser.ac.in/ctan/' => 1, }, 'Indonesia' => { 'http://repo.ugm.ac.id/ctan/' => 1, diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb index f94f7fb5e8..706e4f634a 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/2023 -depend revision/69320 +depend revision/69342 name 00texlive.image category TLCore -revision 69294 +revision 69343 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 @@ -4313,6 +4313,7 @@ runfiles size=13638 tlpkg/tlpsrc/tikz3d-fr.tlpsrc tlpkg/tlpsrc/tikzbricks.tlpsrc tlpkg/tlpsrc/tikzcodeblocks.tlpsrc + tlpkg/tlpsrc/tikzdotncross.tlpsrc tlpkg/tlpsrc/tikzducks.tlpsrc tlpkg/tlpsrc/tikzfill.tlpsrc tlpkg/tlpsrc/tikzinclude.tlpsrc @@ -4830,7 +4831,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd name 00texlive.installer category TLCore -revision 69314 +revision 69327 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 @@ -28568,7 +28569,7 @@ catalogue-version 1.0 name babel category Package -revision 69085 +revision 69343 shortdesc Multilingual support for LaTeX, LuaLaTeX, XeLaTeX, and Plain TeX relocated 1 longdesc This package manages culturally-determined typographical (and @@ -28582,17 +28583,17 @@ longdesc about 300 languages from around the World, including many longdesc written in non-Latin and RTL scripts. Many of them work with longdesc pdfLaTeX, as well as with XeLaTeX and LuaLaTeX, out of the box. longdesc A few even work with plain formats. -containersize 228304 -containerchecksum 658741ed33a93351c192e0fa79132c85183c8f1db0f1f2cbe87a6f3fa35fd29768120ad354527485a78dfd83932d06a95bf340cd2acebb1476005a66075d1625 -doccontainersize 1043868 -doccontainerchecksum fd4b51b2d04d4955c5d568eb0f5746accb605a7272da3071317f234756b56d4afad150439e32f6f8fd8f611e78cc93815762d801189e643f7b8abdf02d5ecbd4 +containersize 229440 +containerchecksum 8c4b15316808e7de5c039082ecec99cb1d2ab72909cb5c85899180e55d7d425db4440fe6fa9b9f801345c34d55fcfaefba2296d424187bf6f809ca1dd96245dd +doccontainersize 1044336 +doccontainerchecksum 5f6a02d13ca3e1104587595edffec7735d84ae5b4686692db04325a1bf3b82a45c08c8fb94d6cc79b0da02778e30f7eb8ff0473fcbb30e260022c647e4a8fdf3 docfiles size=261 RELOC/doc/latex/babel/README.md details="Readme" RELOC/doc/latex/babel/babel-code.pdf details="Code documentation" RELOC/doc/latex/babel/babel.pdf details="User guide" -srccontainersize 883644 -srccontainerchecksum 72e1b830318169d23efca27c5803dbbbd96e40adb0dbcef658a2ad137f82d528e41e904867689b3e404a1026f00f04599db6c5afd2e1661d366cd48578c0e7c6 -srcfiles size=469 +srccontainersize 885928 +srccontainerchecksum fab559d1876e220830972bae45ffbc2f25c1ae0c0d16f0ba4b857bac5a6f92316bd45951b2fc4c718f0fe3947d88afa0aeaee813787b23040bfbffaf88018850 +srcfiles size=470 RELOC/source/latex/babel/babel.dtx RELOC/source/latex/babel/babel.ins RELOC/source/latex/babel/bbcompat.dtx @@ -28921,6 +28922,7 @@ runfiles size=1265 RELOC/tex/generic/babel/locale/fo/babel-faroese.tex RELOC/tex/generic/babel/locale/fo/babel-fo.ini RELOC/tex/generic/babel/locale/fr/babel-acadian.tex + RELOC/tex/generic/babel/locale/fr/babel-canadianfrench.tex RELOC/tex/generic/babel/locale/fr/babel-fr-BE.ini RELOC/tex/generic/babel/locale/fr/babel-fr-CA.ini RELOC/tex/generic/babel/locale/fr/babel-fr-CH.ini @@ -28931,13 +28933,12 @@ runfiles size=1265 RELOC/tex/generic/babel/locale/fr/babel-french-belgium.tex RELOC/tex/generic/babel/locale/fr/babel-french-ca.tex RELOC/tex/generic/babel/locale/fr/babel-french-canada.tex - RELOC/tex/generic/babel/locale/fr/babel-french-canadianfrench.tex RELOC/tex/generic/babel/locale/fr/babel-french-ch.tex RELOC/tex/generic/babel/locale/fr/babel-french-lu.tex RELOC/tex/generic/babel/locale/fr/babel-french-luxembourg.tex - RELOC/tex/generic/babel/locale/fr/babel-french-swissfrench.tex RELOC/tex/generic/babel/locale/fr/babel-french-switzerland.tex RELOC/tex/generic/babel/locale/fr/babel-french.tex + RELOC/tex/generic/babel/locale/fr/babel-swissfrench.tex RELOC/tex/generic/babel/locale/frr/babel-frr.ini RELOC/tex/generic/babel/locale/frr/babel-northernfrisian.tex RELOC/tex/generic/babel/locale/fur/babel-friulian.tex @@ -29568,7 +29569,7 @@ catalogue-contact-repository https://github.com/latex3/babel catalogue-ctan /macros/latex/required/babel/base catalogue-license lppl1.3 catalogue-topics multilingual -catalogue-version 3.99 +catalogue-version 24.1 name babel-albanian category Package @@ -68857,7 +68858,7 @@ catalogue-version 1.0.4 name codedescribe category Package -revision 68937 +revision 69343 shortdesc A minimalist set of commands (expl3 based) to describe Document and Class level commands/functions relocated 1 longdesc This package aims to document both Document level (i.e. final @@ -68866,15 +68867,15 @@ longdesc fully implemented using expl3 syntax and structures, in longdesc particular l3coffins, l3seq and l3keys. Besides those the longdesc scontents and listing packages are used to typeset code longdesc snippets. -containersize 10984 -containerchecksum 2c97669829d2de39f395dc60381092650a4c546f13cd55ff3422d1bd9a23a79bd00c5b202b8d37c46dcd12f37731bfb0acfb209921a70790c23898a9f2e554c6 -doccontainersize 239212 -doccontainerchecksum 613d1efedb39855bf59532ff0d9a0d43568de32ed7d5906fdc245d625123b0e008340ee055bb1b00cc000fd83aedf19831345f3209beefe1ebbeddd14b23a0c2 +containersize 11044 +containerchecksum 9d1176a6934468658a99d00f862ff2554fda33ae7e458409c3dab3df42afcf093f3d28263f8f7b431024df1b67f969ac808806b222ba256d27793a4b1e7a2865 +doccontainersize 239500 +doccontainerchecksum 2540adbdb84154d3fa96a74e716b3b7051f4687852f873b67a0a0bbe6bf9e932b3bb19eee07b0e4cf7299e3f1d06983b4faeec77182db0e8676f53b2aeaa2776 docfiles size=69 RELOC/doc/latex/codedescribe/README.md details="Readme" RELOC/doc/latex/codedescribe/codedescribe.pdf details="Package documentation" RELOC/doc/latex/codedescribe/codedescribe.tex -runfiles size=15 +runfiles size=16 RELOC/tex/latex/codedescribe/codedescribe.sty RELOC/tex/latex/codedescribe/codelisting.sty catalogue-contact-bugs https://github.com/alceu-frigeri/codedescribe/issues @@ -68882,7 +68883,7 @@ catalogue-contact-repository https://github.com/alceu-frigeri/codedescribe catalogue-ctan /macros/latex/contrib/codedescribe catalogue-license lppl1.3c gpl catalogue-topics expl3 -catalogue-version 1.2 +catalogue-version 1.3 name codedoc category Package @@ -73776,7 +73777,7 @@ containerchecksum 951e172129275fa2cb7ccea6bf23f27484503533ebee4c3bef7d2f4ddda594 name collection-pictures category Collection -revision 69289 +revision 69329 shortdesc Graphics, pictures, diagrams relocated 1 longdesc Including TikZ, pict, etc., but MetaPost and PStricks are @@ -73988,6 +73989,7 @@ depend tikz2d-fr depend tikz3d-fr depend tikzbricks depend tikzcodeblocks +depend tikzdotncross depend tikzducks depend tikzfill depend tikzinclude @@ -74037,8 +74039,8 @@ depend worldflags depend xistercian depend xpicture depend xypic -containersize 1660 -containerchecksum 0d74ffd273e88f78776730bcad4c0795323b2a0b89eb313a2d0d3d87664c2732aa769e9b5c68869a6ea2480791c02bdb1a08fd26ad25d3d560b4260961faa886 +containersize 1668 +containerchecksum 4c3cf807783e8860c32aadefa285677183dc098879c6281d2d6201cb713314a94892a1ff35c2bc2f6e8f81fb80b3b8d26d7ca57325b9f179d1b2594abb05f2b2 name collection-plaingeneric category Collection @@ -97149,7 +97151,7 @@ catalogue-version 0.4.0 name docsurvey category Package -revision 61447 +revision 69343 shortdesc A survey of LaTeX documentation relocated 1 longdesc A survey of programming-related documentation for LaTeX. @@ -97159,14 +97161,14 @@ longdesc distributions, programming-related packages, users groups and longdesc online communities, and information on creating packages and longdesc documentation. containersize 548 -containerchecksum bfb93b2510b2b2e334e63468dbb4a4860d4a2166c36b5ce5ff706007a2af605ffb1b5b64c567fe1a3bc46a4fe420fef4020ce6bdc16a4a6d3396ef00dc69d076 -doccontainersize 260928 -doccontainerchecksum 5f91a58cd18315c612860bcfcac7b85ffd402b02dfe669e6fae1efbbac5eaec683b3a286231f9db1cfe5ba967be67f08b1319dea72263f7bbcc84cfd913ffc1a -docfiles size=84 +containerchecksum 06d5844c96ba47de92459a20594f0f575e0ca2fb6471f7079274ff752a1ac631f0f0d2f4f76f01fd5b8fa8036fca57557b37fe8490571b49b46fca06ade0a4ed +doccontainersize 269352 +doccontainerchecksum fbd223b5af17fd7e09d43f00d103ddd3e5730eee7fd86cb25a8d4568f00f0155a6aefa28d3addd507bc261ff57e99256f40b232781256744ff9634292b35fa87 +docfiles size=86 RELOC/doc/latex/docsurvey/README.txt details="Readme" RELOC/doc/latex/docsurvey/docsurvey.pdf details="The document itself" RELOC/doc/latex/docsurvey/docsurvey.tex -catalogue-contact-home http://bdtechconcepts.com/ +catalogue-contact-bugs https://github.com/bdtc/docsurvey catalogue-ctan /info/docsurvey catalogue-license lppl1.3 catalogue-topics ref-latex review-document tut-latex tut-latex-prg @@ -105662,7 +105664,7 @@ catalogue-topics notes editorial name easybook category Package -revision 69317 +revision 69343 shortdesc Easily typesetting Chinese theses or books relocated 1 longdesc easybook is a pure academic template created based on the @@ -105673,16 +105675,16 @@ longdesc providing multiple commands and interfaces allows users to longdesc easily customize the thesis template. Its basic macro package longdesc easybase can also be used with CTeX and standard document longdesc classes. -containersize 16488 -containerchecksum 8210eb1d29b45790df3e74d1c49fb980b4e30760571eaae339a033f83fea88a6bd234ac07eb71d9b2ec40c960f38538903abc0a30b6319666031e693fd8504e6 -doccontainersize 613116 -doccontainerchecksum 87fe8bb80554b47a2667bf0a9a7c8b74088dd9c6ac0a7fcc8dd357745ae1cceb369573816b78db8779ed7a17022562e685e5b303fb54766209e5eb648a0a22a4 +containersize 16472 +containerchecksum c26d2e3ed0dfa29e6cc9c64fd8f4354d4ad79cb6e83c4cbc57b2976a090c3a0074b2c3d68eb57a6cc091f71a10a76e2d5b31934b630a3f314dfea00a1d76b5f3 +doccontainersize 613288 +doccontainerchecksum 136c5e488e0454b46fe49bc166f897a6adb713989b08fbf7b5d784581981b4c4dee072fb2fef8c9260d36b2638f251e52b741b847b12ccb7f75e22fa249e17e6 docfiles size=167 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 16372 -srccontainerchecksum 8c767c2258e90f54b4874e9a963cd39e7ad267d3c9c183b8950982d2db33e69051035a0a75809c3056d117c61809bb22c4f44b5f62500de9b72337711c752161 +srccontainerchecksum fef991b847d146c71ba5cfe671f2650ff60223b24d1b62ef1119f77f535266aaa6041926e7e83a125e2327e2739383f65628274489fe0bc424453d626992b10b srcfiles size=20 RELOC/source/latex/easybook/easybook.dtx RELOC/source/latex/easybook/easybook.ins @@ -105695,7 +105697,7 @@ catalogue-contact-repository https://gitee.com/texno3/easybook catalogue-ctan /macros/latex/contrib/easybook catalogue-license lppl1.3c catalogue-topics book-pub dissertation class doc-templ chinese expl3 -catalogue-version 2024C +catalogue-version 2024D name easydtx category Package @@ -117398,7 +117400,7 @@ catalogue-version 0.3 name etoc category Package -revision 68691 +revision 69343 shortdesc Completely customisable TOCs relocated 1 longdesc With etoc loaded, \tableofcontents can be used multiple times, @@ -117411,10 +117413,10 @@ longdesc "contents lines" inherited from the class default or changed longdesc via other packages. But full usage of the package allows longdesc spectacular effects such as displaying TOCs as trees or mind longdesc maps. -containersize 13500 -containerchecksum 79b8cccce85a63ba6e5465412b73a1004f5d667b3916f9b98d5bc49ae8e626a4d56e5dca58d15915b0de2e9f8724ccb4b5e3a9ff002ae183a8914db00d03f55d +containersize 13544 +containerchecksum ee9e46861d53c0cf3f0807f55a78b2e9c24ed6d5b37037b87f162a297421548561728dbe268927e7155a16da256e61b24c74ee9b1c18addbca937b8c85ce21e9 doccontainersize 943100 -doccontainerchecksum 900a8ca499417ab5b945ded54bb28057d4367febe7df4a93193ad8c6af97fd7d74181104f28c7487af892f0145c166f032e192fbe117d2ffb2e2e457bc79c90e +doccontainerchecksum 693a6589f33a93e9086342d093b8801235d9e7d8e1729400e4e1069d0bd9457bf8b96c0a946110f12e2cf6ae646dfea81fcb9a795724558f73e53bb87b300957 docfiles size=270 RELOC/doc/latex/etoc/README.md details="Readme" RELOC/doc/latex/etoc/etoc.pdf details="Package documentation" @@ -117445,13 +117447,15 @@ docfiles size=270 RELOC/doc/latex/etoc/etocsnippet-24.tex RELOC/doc/latex/etoc/etocsnippet-25.tex RELOC/doc/latex/etoc/etocsnippet-26.tex -srccontainersize 123044 -srccontainerchecksum fe13f633d92482dbe7220a2044d98294f5f3769c59d73af871724813a568c6ac6e085e0e915d8610e8969500ac5ec5e4780e9f2b690a392256a151a25adcf65e +srccontainersize 123048 +srccontainerchecksum 0311468458efe4ba2b12bb0917dcc4bc763a1f7e1e6f2621843358afea9edc5a96373f5beb74224df33be1276b36cf53f7d45fd7183574acc38057b31c51f01a srcfiles size=124 RELOC/source/latex/etoc/etoc.dtx runfiles size=19 RELOC/tex/latex/etoc/etoc.sty catalogue-also titletoc tocbasic +catalogue-contact-bugs https://github.com/jfbu/etoc/issues +catalogue-contact-repository https://github.com/jfbu/etoc catalogue-ctan /macros/latex/contrib/etoc catalogue-license lppl1.3c catalogue-topics toc-etc etex @@ -119525,7 +119529,7 @@ catalogue-version 0.21k name exsol category Package -revision 48977 +revision 69343 shortdesc Exercises and solutions from the same source, into a book relocated 1 longdesc This package provides macros to allow for embedding exercises @@ -119540,21 +119544,32 @@ longdesc also writes the solutions to a secondary file that may be longdesc included in a simple document harness, may be processed by longdesc LaTeX, to generate a nice solution book. The code of the longdesc package was derived (in large part) from fancyvrb. -containersize 3472 -containerchecksum ef7e031334a27a522f54c5ba5adee0fbfdb4cfefca6e8c1d4f67c8bc542c82bab6ee89d35f8ba8e65ed0b17107fd164c00ed416c64160991b59693f5b567b502 -doccontainersize 600428 -doccontainerchecksum b6c5dd47fba5d14560a2d2341f1d17b17eda0ce16a6198ec589f47143ab46fa71808aa6a40a43613cf906542ed9df7d164fb2c7fe5785bf414076934932c63b5 +containersize 3632 +containerchecksum b29f3f9e3ba9d4b98b5db23876e69cce17740923419bc2999c742bd24ecf8f6434bc6226bf4f0bbbd17de79b45653b97ea85866b76892f07d696b0ab5b6afb46 +doccontainersize 498524 +doccontainerchecksum 8be8c7e37139dabc5095c1c77f21a55e60666067ffaed66448db31a3cdf1ef2c21cfa4cd8e4021ecdb6586f1a7b0ece40ebd79f485f878fb25249e1094b7b316 docfiles size=169 RELOC/doc/latex/exsol/LICENSE RELOC/doc/latex/exsol/README details="Readme" + RELOC/doc/latex/exsol/example-exercisebook.pdf + RELOC/doc/latex/exsol/example-exercisebook.tex + RELOC/doc/latex/exsol/example-external.pdf + RELOC/doc/latex/exsol/example-external.tex RELOC/doc/latex/exsol/example-formulacollection.pdf + RELOC/doc/latex/exsol/example-formulacollection.tex + RELOC/doc/latex/exsol/example-inline.pdf + RELOC/doc/latex/exsol/example-inline.tex RELOC/doc/latex/exsol/example-local.pdf + RELOC/doc/latex/exsol/example-local.tex RELOC/doc/latex/exsol/example-solutionbook.pdf + RELOC/doc/latex/exsol/example-solutionbook.tex RELOC/doc/latex/exsol/example.pdf + RELOC/doc/latex/exsol/example.tex RELOC/doc/latex/exsol/exsol.pdf details="Package documentation" -srccontainersize 12552 -srccontainerchecksum 1fa45d6d526e94e0574d15396a6d191d6b00bba30ef996aa999bf2b77a5426263f1e0a94303c07ff139bf44b0a07f419c19ac1c854c32b02e4c43c397c8a85a3 -srcfiles size=13 + RELOC/doc/latex/exsol/manifest.txt +srccontainersize 13712 +srccontainerchecksum d48acde6262a2eb4fcb2de2f0e3da5f7b0c33418d896235b2ec656df5fa946872c8cd4b266b8801fea5f9a30bae24154ab663358013e450736742604742578d8 +srcfiles size=16 RELOC/source/latex/exsol/exsol.dtx RELOC/source/latex/exsol/exsol.ins runfiles size=4 @@ -119562,7 +119577,7 @@ runfiles size=4 catalogue-ctan /macros/latex/contrib/exsol catalogue-license lppl1.3 catalogue-topics exercise -catalogue-version 1.4 +catalogue-version 1.6 name extarrows category Package @@ -159364,32 +159379,32 @@ catalogue-version 0.3 name isphysicalmath category Package -revision 68312 +revision 69343 shortdesc Simple way to write nice formulas relocated 1 longdesc This package provides an easy way to write mathematical and longdesc physical formulas and arguments in scientific notation in an longdesc elegant way. -containersize 1472 -containerchecksum d7786dee25bf5a03cf54fb1c7c5d918f7b2284571d931bc7281030bd41c59baa5ffada31235e50e0c2ea76ee5bb00b23463e388bc1d957da12cd685f617a03e7 -doccontainersize 80692 -doccontainerchecksum a186fc73154b32246a3841ae8f66b888ccdcd9d800eac39974e8383afa5717799c3a53e8c819c7db983251d8859843a2d4215aba1a902d65ae4a9a45a01844a0 -docfiles size=27 +containersize 1756 +containerchecksum 5329b97930fbe9cc13c275132a32cfe4293bc23b2c1911089aaaa80baeb0437606c73503b4430574e88da61615d0649fea6f5666a5609a79ac5ca37cc90294a5 +doccontainersize 90148 +doccontainerchecksum f044b6cbdcb63a5e66b6dfd396393a99d605a219ede55317c759c28c3890a7c79ff6c0feb1de8f6517350d15a6422dc54426b7b5169ea1865024e5a335fe5517 +docfiles size=31 RELOC/doc/latex/isphysicalmath/README.md details="Readme" RELOC/doc/latex/isphysicalmath/isphysicalmath-doc.pdf details="Package documentation" -srccontainersize 5120 -srccontainerchecksum 928fcaef5725fe2ef989bf97f43cf2c7314f6a37ccca36fc30deae2c374317970b1d27e4941ab6184b5d2649721b4376c65e0109a4a50ee0feb8dccc63e59896 -srcfiles size=5 +srccontainersize 6240 +srccontainerchecksum d68bb0b9753303e844476ec27156dc22ba7f3c4456a26870edb080709efb88a2485f2b41bd3c15a89d7d665f22acbd206c951d0f817742d352f6997621188734 +srcfiles size=8 RELOC/source/latex/isphysicalmath/isphysicalmath.dtx RELOC/source/latex/isphysicalmath/isphysicalmath.ins -runfiles size=1 +runfiles size=2 RELOC/tex/latex/isphysicalmath/isphysicalmath.sty catalogue-also siunitx catalogue-contact-home https://github.com/MartDiVenus/LaTeX/tree/isphysicalmath catalogue-ctan /macros/latex/contrib/isphysicalmath -catalogue-license lppl1.3c +catalogue-license lppl1.3 catalogue-topics units -catalogue-version 1.0.0 +catalogue-version 1.1.0 name issuulinks category Package @@ -248676,7 +248691,7 @@ catalogue-topics font font-sans font-ttf font-type1 name overpic category Package -revision 69311 +revision 69343 shortdesc Combine LaTeX commands over included graphics relocated 1 longdesc The overpic environment is a cross between the LaTeX picture @@ -248684,16 +248699,16 @@ longdesc environment and the \includegraphics command of graphicx. The longdesc resulting picture environment has the same dimensions as the longdesc included graphic. LaTeX commands can be placed on the graphic longdesc at defined positions; a grid for orientation is available. -containersize 1740 -containerchecksum f6630c33643704b65c5bf9e56dfaa6974fea1ed823175756dad6e786a4941489f4f68462a0711ab0a205b5a20b9a8e483aa43ea2a017aeed029941bd3b15f77f -doccontainersize 398112 -doccontainerchecksum 0ee79d813160a61a857f2e2b19ebca09a4a62ff8567563064013e58e6da28355d01829aed4f286fa2bc9ed08be99ea4e10295c43cf6afa79f0f9c512c9f10bb9 -docfiles size=101 +containersize 1816 +containerchecksum 6663af049c657a947c3894157eb21c38f8f240250894ee1c8e34e3ae7cfaec294670dcb053d36fbb7749c383b8e9645d25f583670401c7cacc232eb64996dcd1 +doccontainersize 399404 +doccontainerchecksum 005e2aabb66cb7904544463274add08f9680a38cb608c9d8976e4c8cae114658278d2fb3dae55af989c21825dc9d71b4a28202eb68566ab462d1a4bda76ad54c +docfiles size=102 RELOC/doc/latex/overpic/README.de.md details="Readme (German)" language="de" RELOC/doc/latex/overpic/README.md details="Readme (English)" language="en" RELOC/doc/latex/overpic/overpic.pdf details="Documentation" language="en" -srccontainersize 4908 -srccontainerchecksum de913e72d2c28cdfddc17f3ba6e531c43df7abe6cf3227ed96cc878533e99695f26c3f088c0784b6b6ac4f740cfb48e1d1b20a1e3723c15386192b58f721fe06 +srccontainersize 4992 +srccontainerchecksum 3d0e1d66a6ae6835eaa1e5342a448895d6cc6ca5b0f9a300113b2c43d276ec9e1785c41700895f4fcfa19d4fd3098e476dbdd320eccab3c2facc855a85f63870 srcfiles size=5 RELOC/source/latex/overpic/overpic.dtx RELOC/source/latex/overpic/overpic.ins @@ -248705,7 +248720,7 @@ catalogue-contact-repository https://github.com/rolfn/overpic catalogue-ctan /macros/latex/contrib/overpic catalogue-license lppl1.3 catalogue-topics graphics-text -catalogue-version 2.0 +catalogue-version 2.1 name pacioli category Package @@ -265936,7 +265951,7 @@ catalogue-version 1.1 name profcollege category Package -revision 68841 +revision 69343 shortdesc A LaTeX package for French maths teachers in college relocated 1 longdesc This package provides some commands to help French mathematics @@ -265946,16 +265961,16 @@ longdesc \Pythagore{ABC}{5}{7} to write the entire calculation of AC longdesc with the Pythagorean theorem, \Trigo[Cosinus]{ABC}{3}{}{60} to longdesc write the entire calculation of AC with cosine, ... and some longdesc others. -containersize 1333464 -containerchecksum a60279ad94dab8ee81597aa1926181a23095012e25094975c99e6e2e77dfbbdabb11c321779540542230b15f72f24f6d6911e4dc987dd5eec20db251ddf8df76 -doccontainersize 14981936 -doccontainerchecksum 2c588f7a18a653c24589ac06d2c7e95f646916e714d98a27b0f9b55f94b488b16d89f9e2d59143ef5a05903b9d49d22016ea20fbeb3299f81da164d2231abbcf -docfiles size=3844 +containersize 1336084 +containerchecksum eb75b12f184b7e3f5ecf333a376b8d59ddbea8a0cba86c9b553074686c354394f10de5b3187b85fd43f458495dbf72c9f0cce7c98d5824c33f485605dd064e7f +doccontainersize 14584416 +doccontainerchecksum 3976a1a95c47db9bf270f7730b8abd98d82356fdea0897e797d71a8b688c83a7ee122ddb59cc6f34b05d603d3611169bc5afb45c32a4568262b8f0c299b73965 +docfiles size=3847 RELOC/doc/latex/profcollege/PfCLogoNumberHive.png RELOC/doc/latex/profcollege/ProfCollege-doc.pdf details="Package documentation" language="fr" RELOC/doc/latex/profcollege/ProfCollege-doc.zip RELOC/doc/latex/profcollege/README details="Readme" -runfiles size=2907 +runfiles size=2923 RELOC/metapost/profcollege/PfCAfficheur.mp RELOC/metapost/profcollege/PfCAllumettes.mp RELOC/metapost/profcollege/PfCArithmetique.mp @@ -266199,6 +266214,7 @@ runfiles size=2907 RELOC/tex/latex/profcollege/PfCCibleQOp.tex RELOC/tex/latex/profcollege/PfCColorilude.tex RELOC/tex/latex/profcollege/PfCCompteBon.tex + RELOC/tex/latex/profcollege/PfCConversion.tex RELOC/tex/latex/profcollege/PfCCritere.tex RELOC/tex/latex/profcollege/PfCCryptarithme.tex RELOC/tex/latex/profcollege/PfCDecDeci.tex @@ -266221,6 +266237,7 @@ runfiles size=2907 RELOC/tex/latex/profcollege/PfCEnquete.tex RELOC/tex/latex/profcollege/PfCEquationComposition2.tex RELOC/tex/latex/profcollege/PfCEquationLaurent1.tex + RELOC/tex/latex/profcollege/PfCEquationModeleBarre.tex RELOC/tex/latex/profcollege/PfCEquationPose1.tex RELOC/tex/latex/profcollege/PfCEquationSoustraction2.tex RELOC/tex/latex/profcollege/PfCEquationSymbole1.tex @@ -266321,7 +266338,7 @@ catalogue-also proflycee catalogue-ctan /macros/latex/contrib/profcollege catalogue-license lppl1.3c catalogue-topics maths french teaching -catalogue-version 0.99-z-w +catalogue-version 0.99-z-y name proflabo category Package @@ -275523,7 +275540,7 @@ binfiles arch=x86_64-solaris size=1 name pyluatex category Package -revision 65855 +revision 69343 shortdesc Execute Python code on the fly in your LaTeX documents relocated 1 longdesc PyLuaTeX allows you to execute Python code and to include the @@ -275538,10 +275555,10 @@ longdesc and the output to be integrated in your LaTeX file in a single longdesc compilation run. No additional processing steps are needed. No longdesc intermediate files have to be written. No placeholders have to longdesc be inserted. -containersize 5360 -containerchecksum be9b33158b87cbd95d2fd4eb15bf834f1c828bd58e4f6b8ae58f64de1495b83ae79315311789aaae3266b9f171c4d5ba156adca28735eb9f628b86f45f2f330e -doccontainersize 101536 -doccontainerchecksum 86623a834885fa548a6aa84f6e471134c4200ed4cb2b915f6aa7540b38bd91b2daef85c9b8a60a92b63e23b20ea8ed47cdf0cfe3b0e7f30c369024bffe59d959 +containersize 5088 +containerchecksum feeaf7b5f5573bcf8a114ac2dba95137fd1fe82219e2786038b1f3ad7bc0781c0c6fd1ba5200e5386a4282f3816a32f28b0fb948dafc4924595e67dea270bd18 +doccontainersize 100836 +doccontainerchecksum ce8ff2a3ece825de5fc79fd541567035bda216b5f07d6da1e90b0bda6cc9e995f2a01becfa56cfd62330583fd2dc9c77dfeb705ee80d48d6b6aeb068e650a33c docfiles size=48 RELOC/doc/lualatex/pyluatex/README.md details="Readme" RELOC/doc/lualatex/pyluatex/example/beamer.tex @@ -275567,7 +275584,7 @@ catalogue-contact-repository https://github.com/tndrle/PyLuaTeX catalogue-ctan /macros/luatex/latex/pyluatex catalogue-license mit lppl1.3c catalogue-topics luatex callback expl3 -catalogue-version 0.6.1 +catalogue-version 0.6.2 name python category Package @@ -292857,7 +292874,7 @@ catalogue-version 0.3 name shapepar category Package -revision 30708 +revision 69343 shortdesc A macro to typeset paragraphs in specific shapes relocated 1 longdesc \shapepar is a macro to typeset paragraphs in a specific shape. @@ -292873,10 +292890,10 @@ longdesc \heartpar{sometext...} inside your document. The tedium of longdesc creating these polygon definitions may be alleviated by using longdesc the shapepatch extension to transfig which will convert xfig longdesc output to \shapepar polygon form. -containersize 15972 -containerchecksum 407fb09d162a3f361c7182f23b010d25bf5d0d4d645780c1c9679be422a50f7181a8184ea391505d258afda822059f0d7d60ad24321adffa05f37d56d0376605 -doccontainersize 169100 -doccontainerchecksum 4db069b9e52935f0ef1463e40999b7f7893ae12b68f6bb07a105f83199b839e6ca3366b7367f6b38f79c4febfbf3a8c1f88115244f59a306870fa4617ade478a +containersize 15956 +containerchecksum 24975c53f9b29ae8302dc4e169d7d176c4825a0033764c8a08aa610c184e79d249e849e2ac3ddbeccb3bb80a4a5e29ae1c474331de68000de1a63951079acb4d +doccontainersize 169104 +doccontainerchecksum 69a5f9dba1683ed0302a3dc4edede537986ea473357c0c8c454c26eeceb2c51d31d87d139bc3eed39ef1862c2a6feef0e570e9fb12bf88f15ee7f34280f7daf2 docfiles size=59 RELOC/doc/generic/shapepar/README.shapepar details="Package README" RELOC/doc/generic/shapepar/proshap.py @@ -292891,7 +292908,7 @@ runfiles size=16 RELOC/tex/generic/shapepar/triangleshapes.def catalogue-ctan /macros/latex/contrib/shapepar catalogue-license other-free -catalogue-topics micro-layout +catalogue-topics parshape text-flow micro-layout catalogue-version 2.2 name shapes @@ -323894,7 +323911,7 @@ docfiles size=376 name texlive-scripts category TLCore -revision 69314 +revision 69327 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. @@ -323902,10 +323919,10 @@ depend texlive-scripts.ARCH depend texlive.infra execute addMap mathpple.map postaction shortcut type=menu name="TeX Live command-line" cmd=TEXDIR/tlpkg/installer/tl-cmd.bat -containersize 114268 -containerchecksum 51660389a698d53b4166b8764319ab1ec9176bdfd67b6778111e0fad903c41c63cf2e13bab2c1f0bdb033b9b64e4dfd823d8dccd345a65370dae07cfad12f5a6 +containersize 114256 +containerchecksum 047397f615c895298039f7e54188f0b46d81961b9b46a12921681adaae9dbaa32bdf22c2c8d3d6eda112a1f6b1c4a982093979aaf732ffa4a9d961b9765bd0f7 doccontainersize 431260 -doccontainerchecksum 226caefb1f31c0b8dc1785099efdc5676e8c719e89b4784802d6ffdb02202774e352c544bfee5f2da0432416babee113b596352512d323483c498721ba182f2e +doccontainerchecksum cf9e83124787bc8940165dbbc17472429e3612dbc1c132d00f503e02e11ed58ca51f5f632efb61dd2d8028ede5f2747b524e537aab20521cef9385a1aa0a5450 docfiles size=561 doc.html texmf-dist/doc/man/man1/fmtutil-sys.1 @@ -326481,7 +326498,7 @@ catalogue-version 1.4 name texshade category Package -revision 67295 +revision 69343 shortdesc Package for setting nucleotide and peptide alignments relocated 1 longdesc TeXshade is alignment shading software completely written in @@ -326494,11 +326511,11 @@ longdesc legends; it even allows the user to define completely new longdesc shading modes. TeXshade combines highest flexibility with TeX longdesc output quality -- all in a bundle that does not demand longdesc excessive development time of the user. -containersize 62008 -containerchecksum cee15af218fd0bb6be633f7806eb6395e2dd320dc6a7e04a6238506a7ee2ef07d68d5de3faf93a566304b8e5b1addff2ec991ea81eecdafebaa52ce9374648e2 -doccontainersize 1247400 -doccontainerchecksum a3f414fe0397034c051ab1d75cb99986294b7e0a2ca8ea84b713bb9ce3cd4b502c1c86e9998553cfa73a46e7539e8c9cc5138d489d08c02d05d26d1e3177cd22 -docfiles size=441 +containersize 62840 +containerchecksum d980ea4d325565bec6a5c27e7104a3a82cec565132b52e418be856bef5f643bb0416d64d53fbb8b2a51f3e08373907d05e30a2e8ad56cbec1d6beee42d11de0a +doccontainersize 1002972 +doccontainerchecksum 4e97710c70cdc8eb69e480bb33b2387264973401b599af48290d5ba88b062f6a24c2b8b3e7ca4ab515668a45b6536d060b3ecc25f60d74cf7508cfa94d0e61dd +docfiles size=340 RELOC/doc/latex/texshade/AQP1.phd RELOC/doc/latex/texshade/AQP1.top RELOC/doc/latex/texshade/AQP2spec.ALN @@ -326514,19 +326531,19 @@ docfiles size=441 RELOC/doc/latex/texshade/meme.eps RELOC/doc/latex/texshade/standard.cod RELOC/doc/latex/texshade/texshade.pdf details="Package documentation" language="en" -srccontainersize 315428 -srccontainerchecksum 8fa990a1e4381b41d89ae943968d006c738de845dce8f7a3b33de0d6608190d33e678e03cd7b33fd8c1efeb29c14d672c88b8a93b2af745e7569852975d40695 -srcfiles size=363 +srccontainersize 317464 +srccontainerchecksum 73e02586015857ced965c2be682b26f61ac730a796aa4b0dc95f08851e3ad098db0c4462d402db5d8963e577dce8502138421192b7a5346a21e19e07ddde39eb +srcfiles size=366 RELOC/source/latex/texshade/texshade.dtx RELOC/source/latex/texshade/texshade.ins -runfiles size=165 +runfiles size=168 RELOC/tex/latex/texshade/texshade.def RELOC/tex/latex/texshade/texshade.sty catalogue-contact-home https://www.pharmazie.uni-kiel.de/en/pharmceitica/prof-dr-eric-beitz/biotex catalogue-ctan /macros/latex/contrib/texshade catalogue-license gpl2 catalogue-topics chemistry molbio -catalogue-version 1.26c +catalogue-version 1.27 name texsis category Package @@ -330873,6 +330890,34 @@ catalogue-license lppl1.3c catalogue-topics pgf-tikz catalogue-version 0.13 +name tikzdotncross +category Package +revision 69329 +shortdesc Small set of macros for defining/marking coordinates and crossing (jumps) paths +relocated 1 +longdesc This package offers a few alternative ways for declaring and +longdesc marking coordinates and drawing a line with "jumps" over an +longdesc already existent path, which is a quite common issue when +longdesc drawing, for instace, Electronic Circuits (like with +longdesc CircuiTikZ). +containersize 3076 +containerchecksum bc35051e81ddf690aed0d525de84f52479adbc8707e9d498f955c72a2dfc838e5c433d30633f7257372687c763b0c037fe93d35f24b9ba1545feed92579bd584 +doccontainersize 216872 +doccontainerchecksum f7bdf076862a448cc97a8efc9baca993635e51653e93a8173e353d837354146e0ce3ee53fa9d8ce97a071788357dc7ef5d2f754c23a19ce4e7b67caf1389b043 +docfiles size=63 + RELOC/doc/latex/tikzdotncross/README.md details="Readme" + RELOC/doc/latex/tikzdotncross/tikzdotncross.pdf details="Package documentation" + RELOC/doc/latex/tikzdotncross/tikzdotncross.tex +runfiles size=2 + RELOC/tex/latex/tikzdotncross/tikzdotncross.sty +catalogue-contact-bugs https://github.com/alceu-frigeri/tikzdotncross/issues +catalogue-contact-development https://github.com/alceu-frigeri/tikzdotncross +catalogue-contact-repository https://github.com/alceu-frigeri/tikzdotncross +catalogue-ctan /graphics/pgf/contrib/tikzdotncross +catalogue-license lppl1.3c gpl3+ +catalogue-topics pgf-tikz graphics diagram-circ electronic +catalogue-version 1.0 + name tikzducks category Package revision 66773 @@ -342254,31 +342299,31 @@ catalogue-version 1.3a name tutodoc category Package -revision 69079 +revision 69343 shortdesc Typeset tutorial-like documentations relocated 1 longdesc This package provides some macros to write documentation of longdesc LaTeX packages in a tutorial style. -containersize 7288 -containerchecksum e2025a9bf3358c41838ec65328747ce6e7c4245e6807c56a2d0c225a2696b9722b5dac4c1b705e42d852037a9fc2f4be554fe2f57780848789b9995c45b84e42 -doccontainersize 1302720 -doccontainerchecksum 966dad4ddc15234ac2e806aa41118bd315ddf8ad69ed0fa73dbe85ddb4bc4a653541b75c041e0a0942ca267cf206fcfae495eeefd4894dc41a3982cddd60067a -docfiles size=371 +containersize 7456 +containerchecksum acd6fc6114ab1c25259485514b54d848b75cb5f45dc05cdb8324a91b127031c0db8c84c445b0e1b429dc1a5ca0a6a394987465363265c0f830ea60e72c6ab7de +doccontainersize 1301892 +doccontainerchecksum 8f58c8eaa4db17315d69088b9cb446b90504fe62395fcb07495742695f2c8e8215ab76596d4d98cad3c432f3e6079a2ec3088074345d0ace4d309db3163ce405 +docfiles size=375 RELOC/doc/latex/tutodoc/MANIFEST.md RELOC/doc/latex/tutodoc/README.md details="Readme" RELOC/doc/latex/tutodoc/tutodoc-en.pdf details="Package documentation" language="en" RELOC/doc/latex/tutodoc/tutodoc-en.tex RELOC/doc/latex/tutodoc/tutodoc-fr.pdf details="Package documentation" language="fr" RELOC/doc/latex/tutodoc/tutodoc-fr.tex -runfiles size=8 - RELOC/tex/latex/tutodoc/tdoc-locale-english.cfg.sty - RELOC/tex/latex/tutodoc/tdoc-locale-french.cfg.sty +runfiles size=9 + RELOC/tex/latex/tutodoc/tutodoc-locale-main-english.cfg.sty + RELOC/tex/latex/tutodoc/tutodoc-locale-main-french.cfg.sty RELOC/tex/latex/tutodoc/tutodoc.sty catalogue-contact-repository https://github.com/bc-tools/for-latex catalogue-ctan /macros/latex/contrib/tutodoc catalogue-license gpl3 -catalogue-topics doc-tool -catalogue-version 1.0.1 +catalogue-topics doc-tool expl3 +catalogue-version 1.1.0 name twemoji-colr category Package @@ -347947,29 +347992,29 @@ catalogue-version 2.25 name ukbill category Package -revision 68862 +revision 69343 shortdesc A class for typesetting UK legislation relocated 1 longdesc This package provides formatting to easily typeset draft UK longdesc legislation. The libre font Palatine Parliamentary is required longdesc to use this package. -containersize 4864 -containerchecksum 62df42c7881c5d6c9422f5d23458cdde0ded8d20e23c9a5f26623153fadd6c2744d930933c58ca34ee39aea57687eb46a5098ac86b668c5bdf5f1390f9d2b723 -doccontainersize 192652 -doccontainerchecksum caea960263e007a4c71767f053d9df3666861f0599106e2851a6da33bfb1796af4b2ac27a55edd35b96a0b452f451cb03897160cda7d40d0a09c6a1784384b5f -docfiles size=59 +containersize 5192 +containerchecksum eacc14fe9e99a588032338942bf115c49216e15c6db2bd8958180f6b1ae2c7c243bf272d526a0b0ee68049fb96ab726bb9e993d81a90ca2cf17eaefe59344de0 +doccontainersize 196488 +doccontainerchecksum c025d09b95efa89cc221113fd8b52797a99309d5ba956d60eb374b6ee1420940c84ca2fe718cfc7f3184ce840fdcab7d5cd60d3b19447296e9736269dab7e3c4 +docfiles size=60 RELOC/doc/latex/ukbill/README details="Readme" RELOC/doc/latex/ukbill/immigration-bill.pdf details="Example of use" RELOC/doc/latex/ukbill/immigration-bill.tex RELOC/doc/latex/ukbill/ukbill-documentation.pdf details="Package documentation" RELOC/doc/latex/ukbill/ukbill-documentation.tex -runfiles size=5 +runfiles size=6 RELOC/tex/latex/ukbill/ukbill.cls catalogue-contact-home https://github.com/ezgranet/ukbill catalogue-ctan /macros/latex/contrib/ukbill catalogue-license lppl1.3c -catalogue-topics legal -catalogue-version 1.0.3 +catalogue-topics legal class doc-templ +catalogue-version 1.2.0 name ukrhyph category Package diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 index f992cf6037..26c33e20d0 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 @@ -1 +1 @@ -dcbb0ac93366cb877b4c12310273e1f7 texlive.tlpdb +eabc2989868e13823953b2d4bc09fa13 texlive.tlpdb diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 index 313f5d1c81..c314b62c1e 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 @@ -1 +1 @@ -e4e04d1f7312d19680a6bcbfab6444dcd9d89665b11022bcaadfdf4aee946e244e0156784a12a42101032491f8f69b4b2b60e263a08e63298d1987a7959a0c23 texlive.tlpdb +5df0b432175dfab34af87cce763f464a0a57705c4e92b7ae5df4fe5c113823dcce2f6d627fca2076e10b6a50d1e527bb8a9e593422642e52a1214229e6ad7bb1 texlive.tlpdb diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc index 2e508513b8..329189f3be 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc @@ -1,11 +1,11 @@ -----BEGIN PGP SIGNATURE----- -iQEzBAEBCgAdFiEE2PL4YFeoV+QqiBBqTOGHfhlDjHAFAmWZ9ZMACgkQTOGHfhlD -jHDkQAf+Lsqc7txva2pV87wdNCJ1KyMj6u0tAgL0Va3mYuzSE/1VRQ4aYhaa5cxT -y6xNf4aAlDh/nNXlKdGqoYQkqlBozhcX6axmi9KMYYzxwryZq4qYsFYzfgz0F7Ti -ZiSKHxjFfSIcqJS2PNn5s9E07GIvpfBJ1FQAK0gQxdBvfYd6ZwK4dEt5XLFh7S61 -h2ns94HKGZcgk9tDVhZkqxbisGuFWeBe/Z3BFeZ7NF6xOK0pY3ctTtnUD58aADIP -Tt4w7S062P+LyZLAaSavvwaPqMljPMuH2+ZTz3vMPsdKgXhG4+nvyZWbNGVwElKG -JJewTu01ES8gTerS6nsvnF0P+O0VXg== -=WkQQ +iQEzBAEBCgAdFiEE2PL4YFeoV+QqiBBqTOGHfhlDjHAFAmWbRe0ACgkQTOGHfhlD +jHCZcwf+Nqe8cBLT0IOkyloZkriBYSEF9HBr7UerSXzRZ0HrWsUDYZbXRvrYpB7g +yUYVrMJLL5n1UJSgzTuR0n0KyxEzTqZexiIu0M5wix40QLSl/vBh8ncjepOUoRil +O3qovHu0ZGH2k7/noUq+E0QLbSiU9w54sxMhk/GPC8hcB97hK2pKzNA3Wulyz7l3 +PbKTurpo2qGs+oMzlFHYHH9/L40PeeGgN66MXQS77GCj1sI5WjA3a1+nCqaa3MiY +hk+VOnwjJ4aGBbcw9R5P6XCphzhrGvibWgCAph4FYcFsbZGqnyEZQ9PAcFD2jemB +uzxXlabkRuKhbGpN2j13Lhn4SF/hUg== +=Z7ix -----END PGP SIGNATURE----- diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz index 84f092f81d..280b939522 100644 Binary files a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz and b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz differ diff --git a/timestamp b/timestamp index 2e331ebb10..c6e00e1c8f 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: -2024-01-08-02-02 +2024-01-09-02-02 -- cgit v1.2.3