summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2024-01-09 03:01:30 +0000
committerNorbert Preining <norbert@preining.info>2024-01-09 03:01:30 +0000
commit140e2f7f1509acd423172e2895d0d7839e5b88c6 (patch)
treeb95babe2ddbb2ed3cb8f1aee35286b5218e5e4d1
parentafbba3b1d12f17572ca4745766f2e0d55a6f58f3 (diff)
CTAN sync 202401090301
-rw-r--r--FILES.byname394
-rw-r--r--FILES.byname.gzbin2585713 -> 2586014 bytes
-rw-r--r--FILES.last07days840
-rw-r--r--biblio/bibtex/contrib/iran-bibtex/LICENSE.txt416
-rw-r--r--biblio/bibtex/contrib/iran-bibtex/README.md137
-rw-r--r--biblio/bibtex/contrib/iran-bibtex/iran-bibtex-cp1256fa.csf44
-rw-r--r--biblio/bibtex/contrib/iran-bibtex/iran-bibtex-structure.pdfbin0 -> 91010 bytes
-rw-r--r--biblio/bibtex/contrib/iran-bibtex/iran-bibtex-structure.tex (renamed from biblio/bibtex/contrib/iran-bibtex/iran-structure.tex)4
-rw-r--r--biblio/bibtex/contrib/iran-bibtex/iran-bibtex.sty186
-rw-r--r--biblio/bibtex/contrib/iran-bibtex/iran-structure.pdfbin92925 -> 0 bytes
-rw-r--r--biblio/bibtex/contrib/iran-bibtex/iran-unsrt.bst4896
-rw-r--r--biblio/bibtex/contrib/iran-bibtex/iran-year.bst5078
-rw-r--r--biblio/bibtex/contrib/iran-bibtex/iran.bst4728
-rw-r--r--biblio/bibtex/contrib/iran-bibtex/iranlatin-unsrt.bst4486
-rw-r--r--biblio/bibtex/contrib/iran-bibtex/iranlatin-year.bst4665
-rw-r--r--biblio/bibtex/contrib/iran-bibtex/iranlatin.bst4637
-rw-r--r--biblio/ctan-bibdata/ctan.bib38
-rw-r--r--info/biblio/litprog.bib42
-rw-r--r--info/biblio/litprog.ltx12
-rw-r--r--macros/latex/contrib/dtxdescribe/README.txt4
-rw-r--r--macros/latex/contrib/dtxdescribe/dtxdescribe.dtx105
-rw-r--r--macros/latex/contrib/dtxdescribe/dtxdescribe.pdfbin467890 -> 470587 bytes
-rw-r--r--macros/latex/contrib/easybook/easybook.dtx11
-rw-r--r--macros/latex/contrib/easybook/easybook.pdfbin590690 -> 592288 bytes
-rw-r--r--macros/latex/contrib/easybook/easybook.tex72
-rw-r--r--macros/latex/contrib/lni/CHANGELOG.md32
-rw-r--r--macros/latex/contrib/lni/README.md4
-rw-r--r--macros/latex/contrib/lni/lni.dtx70
-rw-r--r--macros/latex/contrib/lni/lni.pdfbin377740 -> 377695 bytes
-rw-r--r--macros/latex/contrib/spbmark/spbmark.pdfbin84938 -> 85360 bytes
-rw-r--r--macros/latex/contrib/spbmark/spbmark.sty4
-rw-r--r--macros/latex/contrib/spbmark/spbmark.tex15
-rw-r--r--macros/latex/contrib/tuda-ci/README.md7
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdfbin552069 -> 552288 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdfbin601729 -> 601729 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer2023.pdfbin556834 -> 556834 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdfbin570431 -> 570532 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdfbin559914 -> 559914 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdfbin567048 -> 567142 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdfbin635542 -> 638055 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdfbin536279 -> 536447 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdfbin662473 -> 662437 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdfbin527234 -> 527922 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdfbin563698 -> 563698 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdfbin624503 -> 627330 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex3
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex3
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer2023.tex3
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib3
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex3
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco3
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex3
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex3
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex37
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex3
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex6
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex3
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex3
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex50
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa2023.sty7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa2023.sty7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2008.sty7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2023.sty7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa2023.sty7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2008.sty7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2023.sty7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudabeamer.cls7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudacolors.def7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudacolors.sty7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudaexercise.cls7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudafonts.sty7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudaletter.cls7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo4
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudaposter.cls7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudapub.cls124
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudarules.sty7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudasciposter.cls7
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo4
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudathesis.cfg23
-rw-r--r--macros/luatex/generic/minim-math/README6
-rw-r--r--macros/luatex/generic/minim-math/minim-math.doc8
-rw-r--r--macros/luatex/generic/minim-math/minim-math.pdfbin112093 -> 114067 bytes
-rw-r--r--macros/luatex/generic/minim-math/minim-math.tex2
-rw-r--r--macros/luatex/generic/minim-mp/README11
-rw-r--r--macros/luatex/generic/minim-mp/minim-mp.doc72
-rw-r--r--macros/luatex/generic/minim-mp/minim-mp.lua340
-rw-r--r--macros/luatex/generic/minim-mp/minim-mp.mp216
-rw-r--r--macros/luatex/generic/minim-mp/minim-mp.pdfbin109855 -> 120017 bytes
-rw-r--r--macros/luatex/generic/minim-mp/minim-mp.sty19
-rw-r--r--macros/luatex/generic/minim-mp/minim.mp4
-rw-r--r--macros/luatex/generic/minim-pdf/README16
-rw-r--r--macros/luatex/generic/minim-pdf/minim-pdf.doc99
-rw-r--r--macros/luatex/generic/minim-pdf/minim-pdf.lua135
-rw-r--r--macros/luatex/generic/minim-pdf/minim-pdf.pdfbin116670 -> 126824 bytes
-rw-r--r--macros/luatex/generic/minim-pdf/minim-pdf.tex53
-rw-r--r--macros/luatex/generic/minim-xmp/README8
-rw-r--r--macros/luatex/generic/minim-xmp/minim-xmp.doc7
-rw-r--r--macros/luatex/generic/minim-xmp/minim-xmp.lua6
-rw-r--r--macros/luatex/generic/minim-xmp/minim-xmp.pdfbin72075 -> 73080 bytes
-rw-r--r--macros/luatex/generic/minim/README7
-rw-r--r--macros/luatex/generic/minim/minim-alloc.doc42
-rw-r--r--macros/luatex/generic/minim/minim-doc.sty36
-rw-r--r--macros/luatex/generic/minim/minim-pdfresources.lua6
-rw-r--r--macros/luatex/generic/minim/minim-pdfresources.tex1
-rw-r--r--macros/luatex/generic/minim/minim.doc8
-rw-r--r--macros/luatex/generic/minim/minim.pdfbin338726 -> 365466 bytes
-rwxr-xr-xsystems/texlive/tlnet/install-tl10
-rw-r--r--systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm16
-rw-r--r--systems/texlive/tlnet/tlpkg/TeXLive/TLUtils.pm9
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl4
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb301
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.md52
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha5122
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc16
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.xzbin2518516 -> 2518792 bytes
-rw-r--r--timestamp2
131 files changed, 29067 insertions, 3822 deletions
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
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files 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 (<farshad.rasuli@gmail.com>).
+Copyright (c) 2023-2024 Farshad Rasuli (<farshad.rasuli@gmail.com>).
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: <http://www.latex-project.org/lppl.txt>.
-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: <https://ctan.org/pkg/iran-bibtex>.
+Catalog on CTAN: <https://ctan.org/pkg/iran-bibtex>
-The package's archive on CTAN is located at : <https://ctan.org/tex-archive/biblio/bibtex/contrib/iran-bibtex>.
+Archive on CTAN: <https://ctan.org/tex-archive/biblio/bibtex/contrib/iran-bibtex>
-The repository for the package is located at: <https://github.com/farshadrasuli/iran-bibtex>
+Repository on GitHub: <https://github.com/farshadrasuli/iran-bibtex>
## 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[<bibstyle>]{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{<bibstyle>}` 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[<bibstyle>]{iran-bibtex}` command in the preamble. With this package, there's no need to explicitly set the bibliography style using the `\bibliographystyle{<bibstyle>}` command anymore. It is recommended to load the `iran-bibtex` package before the `hyperref` package for optimal performance.
-## Reporting issues
+### Package's options as `<bibstyle>`
-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 `<bibstyle>` options as follows:
+
+| No. | Options | Description |
+| :-: | :---------------------------------- | :---------- |
+|1 |`iran`<br>`iranlatin` | Author-date citation format, with reference items are arranged in alphabetical order. |
+|2 |`iran-plain`<br>`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`<br>`iranlatin-year` | Author-date citation format, with reference items are arranged in chronological order by year. |
+|4 |`iran-plainyr`<br>`iranlatin-plainyr`| Numerical labeled citation format, with reference items are both chronologically by year sorted and numerically labeled. |
+|5 |`iran-unsrt`<br>`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 <farshad.rasuli@gmail.com>
%%
@@ -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
--- /dev/null
+++ b/biblio/bibtex/contrib/iran-bibtex/iran-bibtex-structure.pdf
Binary files differ
diff --git a/biblio/bibtex/contrib/iran-bibtex/iran-structure.tex b/biblio/bibtex/contrib/iran-bibtex/iran-bibtex-structure.tex
index c22db4c58d..acfb59dce8 100644
--- a/biblio/bibtex/contrib/iran-bibtex/iran-structure.tex
+++ b/biblio/bibtex/contrib/iran-bibtex/iran-bibtex-structure.tex
@@ -16,9 +16,9 @@
\begin{document}
-\title{خلاصه‌ای از ساختار چیدمان مشخصه‌ها در شیوه‌ی استاددهی {\tt iran.bst}}
+\title{خلاصه‌ای از ساختار چیدمان پیاده‌شده‌ی مشخصه‌ها در شیوه‌ی استاددهی ایران}
\author{فرشاد رسولی\thanks{رایانامه: \url{farshad.rasuli@gmail.com}}}
-\date{نسخه‌ی ۰٫۳٫۰ --- ۲۷ آذر ۱۴۰۲}
+\date{نسخه‌ی ۰٫۴٫۰ --- ۱۸ دی ۱۴۰۲}
\maketitle
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
--- a/biblio/bibtex/contrib/iran-bibtex/iran-structure.pdf
+++ /dev/null
Binary files differ
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 <farshad.rasuli@gmail.com>
+%%
+%% 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 <farshad.rasuli@gmail.com>" 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 <farshad.rasuli@gmail.com>
+%%
+%% 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 <farshad.rasuli@gmail.com>" 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 <farshad.rasuli@gmail.com>
+%% Copyright (c) 2023-2024 Farshad Rasuli <farshad.rasuli@gmail.com>
%%
%% 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,97 +817,11 @@ 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"}
-
-MACRO {nov} {"Nov"}
-
-MACRO {dec} {"Dec"}
-
-
-
-
-
-% 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}
+FUNCTION {word.in}
{
- swap$
- duplicate$ missing$
- {
- swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
- ""
- }
- {
- duplicate$ empty$
- {
- swap$ "empty " swap$ * " in " * cite$ * warning$
- }
- {
- swap$
- pop$
- }
- if$
- }
+ output.state mid.sentence =
+ { bbl.in " " * }
+ { bbl.in capitalize " " * }
if$
}
@@ -832,7 +829,7 @@ FUNCTION {bibinfo.warn}
-% Functions to format fields
+% Functions to format names
INTEGERS { nameptr namesleft numnames }
@@ -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}
+STRINGS {oldname}
+
+FUNCTION {name.or.dash}
{
- editor num.names$ #1 >
- 'bbl.editors
- 'bbl.editor
+ 's :=
+ oldname empty$
+ { s 'oldname := s }
+ {
+ s oldname =
+ { "---{}---{}---" }
+ { s 'oldname := s }
+ if$
+ }
if$
}
-FUNCTION {format.editors}
+
+
+
+
+% Functions to create the short name label for the entry
+
+FUNCTION {label.and}
{
- editor "editor" format.names
- duplicate$ empty$
- 'skip$
+ is.language.persian
+ { "و" }
{
- bbl.comma * " " * get.bbl.editor *
+ authorfa missing$
+ { "and" }
+ { "و" }
+ if$
}
if$
}
-FUNCTION {get.bbl.compiler}
+FUNCTION {label.andothers}
{
- compiler num.names$ #1 >
- 'bbl.compilers
- 'bbl.compiler
+ is.language.persian
+ { "و~دیگران" }
+ {
+ authorfa missing$
+ { "and~others" }
+ { "و~دیگران" }
+ if$
+ }
if$
}
-FUNCTION {format.compilers}
+
+
+FUNCTION {label.comma}
{
- compiler "compiler" format.names
- duplicate$ empty$
- 'skip$
+ is.language.persian
+ { "،" }
{
- bbl.comma * " " * get.bbl.compiler *
+ authorfa missing$
+ { "," }
+ { "،" }
+ if$
}
if$
}
-FUNCTION {get.bbl.translator}
+FUNCTION {label.etal}
{
- translator num.names$ #1 >
- 'bbl.translators
- 'bbl.translator
+ is.language.persian
+ { "و~همکاران" }
+ {
+ authorfa missing$
+ { "et~al." }
+ { "و~همکاران" }
+ if$
+ }
if$
}
-FUNCTION {format.translators}
+
+
+INTEGERS { is.authorfa.exist }
+
+FUNCTION {format.short.label.names}
{
- translator "translator" format.names
- duplicate$ empty$
- 'skip$
+ 's :=
+ "" 't :=
+ s #1 "{vv~}{ll}" format.name$
+ s num.names$ #3 >
{
- bbl.comma * " " * get.bbl.translator *
+ " " * 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.eprint}
+FUNCTION {author.key.short.label.names}
{
- eprint duplicate$ empty$
- 'skip$
+ authorfa empty$ not
+ { authorfa format.short.label.names }
{
- "\eprint"
- archive empty$
- 'skip$
- { "[" * archive * "]" * }
+ author empty$ not
+ { author format.short.label.names }
+ {
+ key empty$ not
+ 'key
+ { cite$ #1 #3 substring$ }
+ if$
+ }
if$
- "{" * swap$ * "}" *
}
if$
}
-FUNCTION {format.url}
+FUNCTION {author.editor.key.short.label.names}
{
- url duplicate$ empty$
- { pop$ "" }
+ authorfa empty$ not
+ { authorfa format.short.label.names }
{
- bbl.url "u" change.case$ ": \url{" * swap$ * "}" *
+ 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.urldate}
+FUNCTION {editor.key.short.label.names}
{
- urldate duplicate$ empty$
- { pop$ "" }
- { bbl.retrieved capitalize " " * swap$ * }
+ 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 {format.isbn}
+FUNCTION {book.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 }
+ {
+ 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 {format.issn}
+FUNCTION {incoll.short.label.names}
{
- issn "issn" bibinfo.check
- duplicate$ empty$
- 'skip$
- {
- bbl.issn "u" change.case$ ": " * swap$ *
- }
+ 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 {format.doi}
+
+
+FUNCTION {article.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 }
+ {
+ translator empty$ not
+ { translator format.short.label.names }
+ {
+ key empty$ not
+ 'key
+ { cite$ #1 #3 substring$ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
}
if$
}
-FUNCTION {format.note}
+FUNCTION {proc.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" }
+ 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$
- change.case$
}
if$
- note #2 global.max$ substring$ * "note" bibinfo.check
}
- { "" }
if$
}
-FUNCTION {format.title}
+FUNCTION {inproc.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 }
+ {
+ 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,224 +1572,658 @@ 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$
+ if$
+ }
+ if$
+ }
+ if$
}
-FUNCTION {word.in}
+FUNCTION {article.full.label.names}
{
- bbl.in capitalize " " *
+ 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 {format.date}
+FUNCTION {proc.full.label.names}
{
- year "year" bibinfo.check
- duplicate$ empty$
+ 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$
}
- 'skip$
if$
- extra.label *
- before.all 'output.state :=
- after.sentence 'output.state :=
}
-FUNCTION {format.comment}
+FUNCTION {inproc.full.label.names}
{
- comment
+ 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.journal}
+FUNCTION {conf.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 {make.full.label.names}
{
- journal empty$ not
+ type$ "book" =
+ 'book.full.label.names
{
- issue empty$ not
- { issue bbl.comma * " " *}
- { "" }
- if$
- format.article.journal *
- volume empty$ not
+ type$ "incollection" =
+ 'incoll.full.label.names
{
- number empty$ not
- {
- pages empty$ not
- {
- " " * volume * "~" *
- "(" * number * ")" * ": " *
- pages *
- }
- {
- " " * volume * bbl.comma *
- " " * bbl.number * "~" * number *
- }
- if$
- }
+ type$ "article" =
+ 'article.full.label.names
{
- pages empty$ not
- {
- " " * volume * ": " *
- pages *
- }
+ type$ "proceedings" =
+ 'proc.full.label.names
{
- " " * volume *
+ 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$
+ }
{
- number empty$ not
+ compiler empty$ not
{
- pages empty$ not
- {
- bbl.comma * " " * bbl.number * "~" * number * ": " *
- pages *
- }
- {
- bbl.comma * " " * bbl.number * "~" * number *
- }
+ year duplicate$ empty$
+ { pop$ "" }
+ 'skip$
if$
}
{
- pages empty$ not
+ editor empty$ not
{
- bbl.comma * " " * pages *
+ year duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+ }
+ {
+ translateyear duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
}
- 'skip$
if$
}
if$
}
if$
}
+ if$
+ *
+ 'label :=
+}
+
+
+
+
+
+% Functions to open, and close the bibitem
+
+FUNCTION {begin.bibitem}
+{
+ newline$
+ is.language.persian
+ {
+ "\bibitem[{" write$
+ }
{
- "journal" output.check
+ "\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.article.iss.vol.num.pp}
+FUNCTION {end.bibitem}
{
- journal empty$ not
+ add.period$ write$
+ newline$
+ is.language.persian
+ 'skip$
{
- issue empty$ not
- { issue bbl.comma * " " *}
- { "" }
+ "\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$
- volume empty$ not
+ 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$
{
- 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$
- }
+ 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
}
{
- number empty$ not
- {
- pages empty$ not
- {
- bbl.number * "~" * number * ": " *
- pages *
- }
- {
- bbl.number * "~" * number *
- }
- if$
- }
- {
- pages empty$ not
- {
- pages *
- }
- 'skip$
- if$
- }
- if$
}
if$
+ "pages" bibinfo.check
}
+ if$
+}
+
+
+
+FUNCTION {field.preface}
+{
+ preface empty$ not
{
- "journal" output.check
+ preface "preface" format.names.ed
+ bbl.prefaceby capitalize " " * swap$ *
}
+ { "" }
+ if$
+}
+
+
+
+FUNCTION {field.title}
+{
+ title
+ duplicate$ empty$
+ 'skip$
+ { bbl.dquote }
if$
}
-FUNCTION {format.btitle}
+FUNCTION {field.btitle}
{
title "title" bibinfo.check
duplicate$ empty$
@@ -1496,27 +2234,98 @@ FUNCTION {format.btitle}
-FUNCTION {format.title.in.books}
+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 {either.or.check}
+FUNCTION {get.bbl.translator}
{
- empty$
- 'pop$
- { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ 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 {format.bvolume}
+
+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$
{ "" }
@@ -1534,7 +2343,102 @@ FUNCTION {format.bvolume}
}
-FUNCTION {format.number.series}
+
+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$
{
@@ -1562,7 +2466,139 @@ FUNCTION {format.number.series}
-FUNCTION {format.book.volume.series.number}
+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
{
@@ -1691,22 +2727,14 @@ FUNCTION {format.book.volume.series.number}
-FUNCTION {format.booktitle}
-{
- booktitle "booktitle" bibinfo.check
- emphasize
-}
-
-
-
-FUNCTION {format.incoll.chapter.booktitle.volume.pages}
+FUNCTION {incoll.fields.chapter.booktitle.volume.pages}
{
booktitle empty$ not
{
chapter empty$ not
{
bbl.chapter capitalize "~" * chapter *
- " " * bbl.in * " " * format.booktitle *
+ " " * bbl.in * " " * field.booktitle *
pages empty$ not
{
bbl.comma * " " * pages * add.period$
@@ -1739,7 +2767,7 @@ FUNCTION {format.incoll.chapter.booktitle.volume.pages}
if$
}
{
- word.in format.booktitle *
+ word.in field.booktitle *
pages empty$ not
{
volume empty$ not
@@ -1805,13 +2833,13 @@ FUNCTION {format.incoll.chapter.booktitle.volume.pages}
-INTEGERS { emph.series }
-FUNCTION {format.incoll.series.number}
+INTEGERS { field.series.emph }
+FUNCTION {incoll.fields.series.number}
{
author empty$ not
{
translator empty$ not
- { #1 'emph.series := }
+ { #1 'field.series.emph := }
{
edition empty$ not
{ #1 }
@@ -1821,7 +2849,7 @@ FUNCTION {format.incoll.series.number}
{ #1 }
{ #0 }
if$
- + 'emph.series :=
+ + 'field.series.emph :=
}
if$
}
@@ -1829,7 +2857,7 @@ FUNCTION {format.incoll.series.number}
compiler empty$ not
{
translator empty$ not
- { #1 'emph.series := }
+ { #1 'field.series.emph := }
{
edition empty$ not
{ #1 }
@@ -1839,7 +2867,7 @@ FUNCTION {format.incoll.series.number}
{ #1 }
{ #0 }
if$
- + 'emph.series :=
+ + 'field.series.emph :=
}
if$
}
@@ -1847,7 +2875,7 @@ FUNCTION {format.incoll.series.number}
editor empty$ not
{
translator empty$ not
- { #1 'emph.series := }
+ { #1 'field.series.emph := }
{
edition empty$ not
{ #1 }
@@ -1857,7 +2885,7 @@ FUNCTION {format.incoll.series.number}
{ #1 }
{ #0 }
if$
- + 'emph.series :=
+ + 'field.series.emph :=
}
if$
}
@@ -1870,7 +2898,7 @@ FUNCTION {format.incoll.series.number}
{ #1 }
{ #0 }
if$
- + 'emph.series :=
+ + 'field.series.emph :=
}
if$
}
@@ -1879,7 +2907,7 @@ FUNCTION {format.incoll.series.number}
if$
series empty$ not
{
- emph.series #0 >
+ field.series.emph #0 >
{
number empty$ not
{ series emphasize " " * number * }
@@ -1905,7 +2933,221 @@ FUNCTION {format.incoll.series.number}
-FUNCTION {format.inproc.booktitle.volume.pages}
+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
{
@@ -1915,12 +3157,12 @@ FUNCTION {format.inproc.booktitle.volume.pages}
{
pages empty$ not
{
- format.booktitle " " *
+ field.booktitle " " *
volume * ": " * pages * add.period$
" " * volumes * "~" * bbl.volumes *
}
{
- format.booktitle add.period$
+ field.booktitle add.period$
" " * bbl.volume * "~" * volume * bbl.of * " " * volumes *
}
if$
@@ -1928,11 +3170,11 @@ FUNCTION {format.inproc.booktitle.volume.pages}
{
pages empty$ not
{
- format.booktitle " " *
+ field.booktitle " " *
volume * ": " * pages *
}
{
- format.booktitle add.period$
+ field.booktitle add.period$
" " * bbl.volume * "~" * volume *
}
if$
@@ -1944,12 +3186,12 @@ FUNCTION {format.inproc.booktitle.volume.pages}
{
pages empty$ not
{
- format.booktitle " " *
+ field.booktitle " " *
bbl.comma * " " * pages * add.period$
volumes * "~" * bbl.volumes
}
{
- format.booktitle " " * add.period$
+ field.booktitle " " * add.period$
" " * volumes * "~" * bbl.volumes *
}
if$
@@ -1957,11 +3199,11 @@ FUNCTION {format.inproc.booktitle.volume.pages}
{
pages empty$ not
{
- format.booktitle " " *
+ field.booktitle " " *
bbl.comma * " " * pages *
}
{
- format.booktitle
+ field.booktitle
}
if$
}
@@ -1977,12 +3219,12 @@ FUNCTION {format.inproc.booktitle.volume.pages}
-FUNCTION {format.inproc.series.number}
+FUNCTION {inproc.fields.series.number}
{
author empty$ not
{
translator empty$ not
- { #1 'emph.series := }
+ { #1 'field.series.emph := }
{
edition empty$ not
{ #1 }
@@ -1992,7 +3234,7 @@ FUNCTION {format.inproc.series.number}
{ #1 }
{ #0 }
if$
- + 'emph.series :=
+ + 'field.series.emph :=
}
if$
}
@@ -2005,12 +3247,12 @@ FUNCTION {format.inproc.series.number}
{ #1 }
{ #0 }
if$
- + 'emph.series :=
+ + 'field.series.emph :=
}
if$
series empty$ not
{
- emph.series #0 >
+ field.series.emph #0 >
{
number empty$ not
{ series emphasize " " * number * }
@@ -2036,7 +3278,11 @@ FUNCTION {format.inproc.series.number}
-FUNCTION {format.conf.series.number.pages}
+FUNCTION {inproc.field.crossref} { incoll.field.crossref }
+
+
+
+FUNCTION {conf.fields.series.number.pages}
{
series empty$ not
{
@@ -2071,62 +3317,24 @@ FUNCTION {format.conf.series.number.pages}
-FUNCTION {format.conf.org.publisher.address}
+FUNCTION {conf.fields.org.publisher.address} { proc.fields.org.publisher.address }
+
+
+
+FUNCTION {thesis.field.type}
{
- 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$
- }
+ type duplicate$ empty$
+ 'pop$
{
- publisher empty$ not
- {
- address empty$ not
- { address ": " * publisher *}
- { publisher }
- if$
- }
- {
- address empty$ not
- { address }
- { "" }
- if$
- }
- if$
+ swap$ pop$
+ "t" change.case$ "type" bibinfo.check
}
if$
}
-FUNCTION {format.proc.org.publisher.address} { format.conf.org.publisher.address }
-
-
-
-FUNCTION {format.thesis.school.type.address}
+FUNCTION {thesis.fields.school.type.address}
{
type empty$
{
@@ -2196,538 +3404,21 @@ FUNCTION {format.thesis.school.type.address}
-FUNCTION {format.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 {format.impression}
+FUNCTION {unpub.field.title}
{
- impression duplicate$ empty$ not
- {
- output.state mid.sentence =
- { "l" }
- { "t" }
- if$
- change.case$
- is.language.persian
- { bbl.impression " " * swap$ * }
- { " " * bbl.impression * }
- if$
- }
- 'skip$
- if$
-}
-
-
-
-INTEGERS { multiresult }
-
-FUNCTION {multi.page.check}
-{
- 't :=
- #0 'multiresult :=
- {
- multiresult not
- t empty$ not
- and
- }
- {
- t #1 #1 substring$
- duplicate$ "-" =
- swap$ duplicate$ "," =
- swap$ "+" =
- or or
- { #1 'multiresult := }
- { t #2 global.max$ substring$ 't := }
- if$
- }
- while$
- multiresult
-}
-
-
-
-FUNCTION {format.pages}
-{
- pages duplicate$ empty$
- 'skip$
- {
- duplicate$ multi.page.check
- {
- n.dashify
- }
- {
- }
- if$
- "pages" bibinfo.check
- }
- if$
-}
-
-
-
-FUNCTION {format.journal.pages}
-{
- pages duplicate$ empty$ 'pop$
- {
- swap$ duplicate$ empty$
- {
- pop$ pop$ format.pages
- }
- {
- ": " *
- swap$
- n.dashify
- "pages" bibinfo.check
- *
- }
- if$
- }
- if$
-}
-
-
-
-FUNCTION {format.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 {format.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$
- { format.journal.pages }
- { format.journal.eid }
- if$
-}
-
-
-
-FUNCTION {format.chapter.pages}
-{
- chapter empty$
- 'format.pages
- {
- type empty$
- { bbl.chapter }
- {
- type "l" change.case$
- "type" bibinfo.check
- }
- if$
- chapter tie.or.space.prefix
- "chapter" bibinfo.check
- * *
- pages empty$
- 'skip$
- { bbl.comma * " " * format.pages * }
- if$
- }
- if$
-}
-
-
-
-FUNCTION {format.in.ed.booktitle}
-{
- format.booktitle
- duplicate$ empty$
- 'skip$
- {
- format.bvolume
- duplicate$ empty$
- 'pop$
- { bbl.comma " " * swap$ * * }
- if$
- editor "editor" format.names.ed
- duplicate$ empty$
- 'pop$
- {
- bbl.edby capitalize " " * swap$ *
- swap$
- add.period$ " " * swap$ *
- }
- if$
- word.in swap$ *
- }
- if$
-}
-
-
-
-FUNCTION {format.by}
-{
- by empty$ not
- {
- by "by" format.names.ed
- bbl.by " " * swap$ *
- }
- { "" }
- if$
-}
-
-
-
-FUNCTION {format.incollaborationwith}
-{
- collaboration empty$ not
- {
- collaboration "collaboration" format.names.ed
- bbl.incollaborationwith capitalize " " * swap$ *
- }
- { "" }
- if$
-}
-
-
-
-FUNCTION {format.commentatedby}
-{
- commentator empty$ not
- {
- commentator "commentator" format.names.ed
- bbl.commentatedby capitalize " " * swap$ *
- }
- { "" }
- if$
-}
-
-
-
-FUNCTION {format.compiledby}
-{
- compiler empty$ not
- {
- compiler "compiler" format.names.ed
- bbl.compiledby capitalize " " * swap$ *
- }
- { "" }
- if$
-}
-
-
-
-FUNCTION {format.edby}
-{
- editor empty$ not
- {
- editor "editor" format.names.ed
- bbl.edby capitalize " " * swap$ *
- }
- { "" }
- if$
-}
-
-
-
-FUNCTION {format.translatedby}
-{
- translator empty$ not
- {
- translator "translator" format.names.ed
- bbl.translatedby capitalize " " * swap$ *
- }
- { "" }
- if$
-}
-
-
-FUNCTION {format.translateyear}
-{
- translateyear empty$ not
- {
- translateyear
- }
- { "" }
- if$
- before.all 'output.state :=
- after.sentence 'output.state :=
-}
-
-
-
-FUNCTION {format.introby}
-{
- introduction empty$ not
- {
- introduction "introduction" format.names.ed
- bbl.introby capitalize " " * swap$ *
- }
- { "" }
- if$
-}
-
-
-
-FUNCTION {format.prefaceby}
-{
- preface empty$ not
- {
- preface "preface" format.names.ed
- bbl.prefaceby capitalize " " * swap$ *
- }
- { "" }
- if$
-}
-
-
-
-FUNCTION {format.afterwordby}
-{
- afterword empty$ not
- {
- afterword "afterword" format.names.ed
- bbl.afterwordby capitalize " " * swap$ *
- }
- { "" }
- if$
-}
-
-
-
-FUNCTION {format.thesis.type}
-{
- type duplicate$ empty$
- 'pop$
- {
- swap$ pop$
- "t" change.case$ "type" bibinfo.check
- }
- if$
-}
-
-
-
-FUNCTION {format.tr.number}
-{
- number "number" bibinfo.check
- type duplicate$ empty$
- { pop$ bbl.techrep }
- 'skip$
- if$
- "type" bibinfo.check
- swap$ duplicate$ empty$
- { pop$ "t" change.case$ }
- { tie.or.space.prefix * * }
- if$
-}
-
-
-
-FUNCTION {format.article.crossref}
-{
- word.in
- " \cite{" * crossref * "}" *
-}
-
-
-
-FUNCTION {format.book.crossref}
-{
- volume duplicate$ empty$
- {
- "empty volume in " cite$ * "'s crossref of " * crossref * warning$
- pop$ word.in
- }
- {
- bbl.volume
- capitalize
- swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of separate.by.space *
- }
- if$
- " \cite{" * crossref * "}" *
-}
-
-
-
-FUNCTION {format.incoll.inproc.crossref}
-{
- word.in " \cite{" * crossref * "}" *
-}
-
-
-
-FUNCTION {format.org.or.pub}
-{
- 't :=
- ""
- address empty$ t empty$ and
+ title empty$ not
+ { title bbl.dquote }
'skip$
- {
- address "address" bibinfo.check *
- t empty$
- 'skip$
- {
- address empty$
- 'skip$
- { ": " * }
- if$
- t *
- }
- 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}
+FUNCTION {misc.field.title}
{
- organization "organization" bibinfo.check
-}
-
-
-
-STRINGS {oldname}
-
-FUNCTION {name.or.dash}
-{
- 's :=
- oldname empty$
- { s 'oldname := s }
- {
- s oldname =
- { "---{}---{}---" }
- { s 'oldname := s }
- if$
- }
- if$
-}
-
-
-
-
-
-% Functions to open, and close the bibitem
-
-INTEGERS { is.authorfa.exist }
-
-FUNCTION {begin.bibitem}
-{
- #0 'is.authorfa.exist :=
- newline$
- is.language.persian
- {
- "\bibitem[{" write$
- label write$
- ")" make.full.names
- duplicate$ short.list =
- { pop$ }
- { * }
- if$
- "}]{" * write$
- cite$ write$
- "}" write$
- newline$
- }
- {
- "\begin{LTRbibitems}" write$
- "\resetlatinfont" write$
- newline$
- "\bibitem[{" write$
- label write$
- ")" make.full.names
- duplicate$ short.list =
- { pop$ }
- { * }
- if$
- "}]{" * write$
- cite$ write$
- "}" write$
- newline$
- }
- if$
- ""
- before.all 'output.state :=
-}
-
-
-
-FUNCTION {end.bibitem}
-{
- add.period$ write$
- newline$
- is.language.persian
+ title empty$ not
+ { title }
'skip$
- {
- "\end{LTRbibitems}" write$
- newline$
- }
if$
}
@@ -2735,117 +3426,172 @@ FUNCTION {end.bibitem}
-% Function to format entries
+% Functions to format entries based on type (compatible entries)
-FUNCTION {article} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE
-{
+FUNCTION {book}
+{
begin.bibitem
author empty$ not
{
- format.authors output.nonnull
+ field.author 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
+ field.year extra.label * "year" output.check
+ new.block field.title.emph "title" output.check
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
+ 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
}
{
- format.article.crossref output.nonnull
- format.pages output
+ new.block book.field.crossref output.nonnull
}
if$
}
- { %%% if author is empty, proceeds with editor
- editor empty$ not
+ { %%% if author field is empty, proceeds with compiler
+ compiler empty$ not
{
- format.editors output.nonnull
+ field.compiler 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
+ field.year extra.label * "year" output.check
+ new.block field.title.emph "title" output.check
crossref missing$
{
- 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
+ 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
}
{
- format.article.crossref output.nonnull
- format.pages output
+ new.block book.field.crossref output.nonnull
}
if$
}
- { %%% if author, and editor 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 output
- new.sentence format.comment output
- new.sentence format.by output
- new.sentence format.date output
+ field.year extra.label * "year" output.check
+ new.block field.title.emph "title" output.check
crossref missing$
{
- 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
+ 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
}
{
- format.article.crossref output.nonnull
- format.pages output
+ new.block book.field.crossref output.nonnull
}
if$
}
- { %%% if author, editor, and translator are empty, proceeds with key
- key empty$ not
+ { %%% if author, compiler, and editor fields are empty, proceeds with translator
+ translator empty$ not
{
- format.article.journal output.nonnull
+ field.translator 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 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
{
- 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
+ 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$
}
{
- format.article.crossref output.nonnull
- format.pages output
+ "author, compiler, editor, translator, and key" output.check
}
if$
}
- {
- "author, translator, and key" output.check
- }
if$
}
if$
@@ -2858,162 +3604,146 @@ FUNCTION {article} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE
-FUNCTION {book}
+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.title.in.books "title" output.check
+ field.year extra.label * "year" output.check
+ new.block field.title.dqoute "title" output.check
+ new.sentence field.comment output
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.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 format.book.crossref output.nonnull
+ new.block incoll.field.crossref output.nonnull
}
if$
}
{ %%% 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
+ field.year extra.label * "year" output.check
+ new.block field.title.dqoute "title" output.check
+ new.sentence field.comment output
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.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.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 format.book.crossref output.nonnull
+ new.block incoll.field.crossref output.nonnull
}
if$
}
{ %%% if author, and compiler fields are empty, proceeds with editor
editor empty$ not
{
- format.editors output.nonnull
+ field.editor output.nonnull
name.or.dash
- format.date "year" output.check
- new.block format.title.in.books "title" output.check
+ field.year extra.label * "year" output.check
+ new.block field.title.dqoute "title" output.check
+ new.sentence field.comment output
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.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.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 format.book.crossref output.nonnull
+ new.block incoll.field.crossref output.nonnull
}
if$
}
- { %%% if author, compiler, and editor fields are empty, proceeds with translator
+ { %%% if author, compiler, and editor fields are empty, proceeds with translator
translator empty$ not
{
- format.translators output.nonnull
+ field.translator 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
+ 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
+ { %%% if author, compiler, editor, and translator fields are empty, proceeds with key
key empty$ not
{
- format.title.in.books "title" output.check
+ field.title.emph output
name.or.dash
- format.date "year" output.check
+ field.year extra.label * "year" output.check
+ new.sentence field.comment output
+ new.sentence field.by output
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.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 format.book.crossref output.nonnull
+ new.block incoll.field.crossref output.nonnull
}
if$
}
@@ -3034,226 +3764,208 @@ FUNCTION {book}
-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 {article}
{
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$
- {
- 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
- }
- {
- format.chapter.pages "chapter and pages" output.check
- new.block
- format.book.crossref output.nonnull
- }
- 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
{
- format.authors output.nonnull
+ field.author output.nonnull
name.or.dash
- format.date "year" output.check
- new.block format.title "title" output.check
- new.sentence format.comment output
+ 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 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.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
}
{
- new.block format.incoll.inproc.crossref output.nonnull
+ article.field.crossref output.nonnull
+ field.pages output
}
if$
}
- { %%% if author field is empty, proceeds with compiler
- compiler empty$ not
+ { %%% if author is empty, proceeds with editor
+ editor empty$ not
{
- format.compilers output.nonnull
+ field.editor output.nonnull
name.or.dash
- format.date "year" output.check
- new.block format.title "title" output.check
- new.sentence format.comment output
+ 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 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
+ 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
}
{
- new.block format.incoll.inproc.crossref output.nonnull
+ article.field.crossref output.nonnull
+ field.pages output
}
if$
}
- { %%% if author, and compiler fields are empty, proceeds with editor
- editor empty$ not
+ { %%% if author, and editor are empty, proceeds with translator
+ translator empty$ not
{
- format.editors output.nonnull
+ field.translator output.nonnull
name.or.dash
- format.date "year" output.check
- new.block format.title "title" output.check
- new.sentence format.comment output
+ 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 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
+ 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
}
{
- new.block format.incoll.inproc.crossref output.nonnull
+ article.field.crossref output.nonnull
+ field.pages output
}
if$
}
- { %%% if author, compiler, and editor fields are empty, proceeds with translator
- translator empty$ not
+ { %%% if author, editor, and translator are empty, proceeds with key
+ key empty$ not
{
- format.translators output.nonnull
+ article.field.journal 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
- }
- { %%% if author, compiler, editor, and translator fields are empty, proceeds with key
- key empty$ not
+ 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$
{
- 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$
+ 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
}
{
- "author, compiler, editor, translator, and key" output.check
+ 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$
@@ -3271,92 +3983,92 @@ FUNCTION {inproceedings}
begin.bibitem
author empty$ not
{
- format.authors output.nonnull
+ field.author output.nonnull
name.or.dash
- format.date "year" output.check
- new.block format.title "title" output.check
- new.sentence format.by output
+ field.year extra.label * "year" output.check
+ new.block field.title.dqoute "title" output.check
+ new.sentence field.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
+ 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
}
{
- format.incoll.inproc.crossref output.nonnull
- format.pages output
+ inproc.field.crossref output.nonnull
+ field.pages output
}
if$
}
{ %%% if author field is empty, proceeds with translator
translator empty$ not
{
- format.translators output.nonnull
+ field.translator 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
+ 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 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
+ 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
}
{
- format.incoll.inproc.crossref output.nonnull
- format.pages output
+ inproc.field.crossref output.nonnull
+ field.pages output
}
if$
}
{ %%% if author, and translator fields are empty, proceeds with key
key empty$ not
{
- format.title.in.books output
+ field.title.emph output
name.or.dash
- format.date "year" output.check
- new.sentence format.by output
+ field.year extra.label * "year" output.check
+ new.sentence field.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
+ 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
}
{
- format.incoll.inproc.crossref output.nonnull
- format.pages output
+ inproc.field.crossref output.nonnull
+ field.pages output
}
if$
}
@@ -3378,77 +4090,77 @@ FUNCTION {conference}
begin.bibitem
author empty$ not
{
- format.authors output.nonnull
+ field.author output.nonnull
name.or.dash
- format.date "year" output.check
- new.block format.title "title" output.check
- new.sentence format.by output
+ field.year extra.label * "year" output.check
+ new.block field.title.dqoute "title" output.check
+ new.sentence field.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
+ 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
}
{
- format.incoll.inproc.crossref output.nonnull
- format.pages output
+ inproc.field.crossref output.nonnull
+ field.pages output
}
if$
}
{ %%% if author is empty, proceeds with translator
translator empty$ not
{
- format.translators output.nonnull
+ field.translator 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
+ 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 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
+ 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
}
{
- format.incoll.inproc.crossref output.nonnull
- format.pages output
+ inproc.field.crossref output.nonnull
+ field.pages output
}
if$
}
{ %%% if author, and translator are empty, proceeds with key
key empty$ not
{
- format.title.in.books output
+ field.title.emph output
name.or.dash
- format.date "year" output.check
- new.sentence format.by output
+ field.year extra.label * "year" output.check
+ new.sentence field.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
+ 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
}
{
- format.incoll.inproc.crossref output.nonnull
- format.pages output
+ inproc.field.crossref output.nonnull
+ field.pages output
}
if$
}
@@ -3461,83 +4173,109 @@ FUNCTION {conference}
}
if$
end.bibitem
-
}
-FUNCTION {manual} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE
+FUNCTION {thesis}
{
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
+ 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 {format.misc.title}
-{
- title empty$ not
- { title }
- 'skip$
- if$
-}
+FUNCTION {mastersthesis} { thesis }
-FUNCTION {format.howpublished}
-{
- howpublished
-}
+FUNCTION {phdthesis} { thesis }
-FUNCTION {misc}
+FUNCTION {unpublished}
{
begin.bibitem
author empty$ not
{
- format.authors output.nonnull
+ field.author 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
+ 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 key
- key empty$ not
+ { %%% if author is empty, proceeds with translator
+ translator empty$ not
{
- format.title.in.books output
+ field.translator output.nonnull
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
+ 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$
}
- { "author, and key" output.check }
if$
}
if$
@@ -3546,33 +4284,36 @@ FUNCTION {misc}
-FUNCTION {thesis}
+FUNCTION {misc}
{
begin.bibitem
author empty$ not
{
- format.authors output.nonnull
+ field.author 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
+ 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
{
- format.title.in.books output
+ field.title.emph 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
+ 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$
@@ -3583,202 +4324,132 @@ FUNCTION {thesis}
-FUNCTION {mastersthesis} { thesis }
+% Functions to format entries based on type (incompatible entries)
-FUNCTION {phdthesis} { thesis }
+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 {proceedings}
+FUNCTION {inbook} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE
{
begin.bibitem
- editor empty$ not
- {
- format.editors output.nonnull
+ author empty$
+ { field.editor "author and editor" output.check
+ editor format.key output
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
}
- { %%% if editor field is empty, proceeds with compiler
- compiler empty$ not
- {
- format.compilers 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
- }
- { %%% if editor, and compiler fields are empty, proceeds with translator
- translator 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.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
- }
- {
- key empty$ not
- {
- format.title.in.books "title" output.check
- 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
- }
- {
- "editor, compiler, translator, and key" output.check
- }
- if$
- }
- if$
- }
+ { 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 {techreport} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE
+FUNCTION {manual} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE
{
begin.bibitem
- format.authors "author" output.check
+ field.author output
author format.key output
name.or.dash
- format.date "year" output.check
+ field.year extra.label * "year" output.check
date.block
- format.btitle
- "title" output.check
- new.block
- format.tr.number output.nonnull
- institution "institution" bibinfo.warn output
+ field.btitle "title" output.check
+ organization address new.block.checkb
+ organization "organization" bibinfo.check output
address "address" bibinfo.check output
- format.doi output
+ field.edition output
+ field.doi output
new.block
- format.note output
- format.eprint output
- format.url output
+ field.note output
+ field.eprint output
+ field.url output
end.bibitem
}
-FUNCTION {format.unpub.title}
+FUNCTION {techreport} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE
{
- title empty$ not
- { title bbl.dquote }
- 'skip$
- 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 {unpublished}
-{
- begin.bibitem
- author empty$ not
- {
- format.authors 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
- }
- { %%% if author is empty, proceeds with translator
- translator empty$ not
- {
- format.translators 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
- }
- { %%% 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.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
- }
- { "author, translator, and key" output.check }
- if$
- }
- if$
- }
- if$
- end.bibitem
-}
+% Function to format entry if the type is not recognized
FUNCTION {default.type} { misc }
@@ -3806,6 +4477,7 @@ FUNCTION {default.type} { misc }
READ
+% Function to generate a string that is suitable for sorting purposes
FUNCTION {sortify}
{
@@ -3815,7 +4487,7 @@ FUNCTION {sortify}
-% Length of the label name of the entry
+% Length of the short name label of the entry
INTEGERS { len }
@@ -3831,390 +4503,9 @@ FUNCTION {chop.word}
-% Function to create the label name of the entry
-
-FUNCTION {label.and}
-{
- is.language.persian
- { "و" }
- {
- authorfa missing$
- { "and" }
- { "و" }
- if$
- }
- if$
-}
-
-FUNCTION {label.etal}
-{
- is.language.persian
- { "و~همکاران" }
- {
- authorfa missing$
- { "et~al." }
- { "و~همکاران" }
- if$
- }
- if$
-}
-
-
-
-FUNCTION {format.lab.names}
-{
- '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 >
- {
- " " * label.etal *
- }
- {
- s num.names$ #2 <
- 'skip$
- {
- s num.names$ #3 <
- {
- 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$
- }
- {
- s #3 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
- {
- " " * label.etal *
- }
- {
- bbl.comma * " " * s #2 "{vv~}{ll}" format.name$ *
- bbl.comma * " " * label.and separate.by.space * s #3 "{vv~}{ll}" format.name$ *
- }
- if$
- }
- if$
- }
- if$
- }
- if$
- #0 'is.authorfa.exist :=
-}
-
-
-
-FUNCTION {author.key.label}
-{
- author empty$
- {
- key empty$
- { cite$ #1 #3 substring$ }
- 'key
- if$
- }
- { author format.lab.names }
- if$
-}
-
-FUNCTION {author.editor.key.label}
-{
- author empty$
- {
- editor empty$
- {
- key empty$
- { cite$ #1 #3 substring$ }
- 'key
- if$
- }
- { editor format.lab.names }
- if$
- }
- { author format.lab.names }
- if$
-}
-
-
-
-FUNCTION {editor.key.label}
-{
- editor empty$
- {
- key empty$
- { cite$ #1 #3 substring$ }
- 'key
- if$
- }
- {
- editor format.lab.names
- }
- if$
-}
-
-
-
-FUNCTION {article.creator.label.order}
-{
- author empty$ not
- { author 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$
- }
- if$
-}
-
-
-
-FUNCTION {book.creator.label.order}
-{
- 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$
- }
- if$
- }
- if$
-}
-
-
-
-FUNCTION {incoll.creator.label.order}
-{
- 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$
- }
- if$
- }
- if$
-}
-
-
-
-FUNCTION {proc.creator.label.order}
-{
- 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$
-}
-
-FUNCTION {conf.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 {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 {calc.short.authors}
-{
- 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 :=
-}
-
-
-
-FUNCTION {calc.label}
-{
- 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$
- }
- 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 <farshad.rasuli@gmail.com>" write$
+ "% Copyright (c) 2023-2024 Farshad Rasuli <farshad.rasuli@gmail.com>" 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 <farshad.rasuli@gmail.com>
+%%
+%% 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 <farshad.rasuli@gmail.com>" 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 <farshad.rasuli@gmail.com>
+%%
+%% 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 <farshad.rasuli@gmail.com>" 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 <farshad.rasuli@gmail.com>
+%%
+%% 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 <farshad.rasuli@gmail.com>" 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
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{dtxdescribe}
-%<package> [2023/01/03 v1.07 Describe additional object types in source files.]
+%<package> [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.
@@ -3114,6 +3139,52 @@ pageanchor=true,
% \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}
+%
+%
% \begin{macro}{\DescribeKey} \oarg{category} \marg{name}
%
% The |category| may be used to categorize keys by their kev/value group.
@@ -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
--- a/macros/latex/contrib/dtxdescribe/dtxdescribe.pdf
+++ b/macros/latex/contrib/dtxdescribe/dtxdescribe.pdf
Binary files 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 @@
}
%</package>
%<*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
--- a/macros/latex/contrib/easybook/easybook.pdf
+++ b/macros/latex/contrib/easybook/easybook.pdf
Binary files 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
%<class>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<class>\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'']
%</class>
%<*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
--- a/macros/latex/contrib/lni/lni.pdf
+++ b/macros/latex/contrib/lni/lni.pdf
Binary files differ
diff --git a/macros/latex/contrib/spbmark/spbmark.pdf b/macros/latex/contrib/spbmark/spbmark.pdf
index 799e84a323..678496688b 100644
--- a/macros/latex/contrib/spbmark/spbmark.pdf
+++ b/macros/latex/contrib/spbmark/spbmark.pdf
Binary files 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 <toquyi@163.com>
+% Copyright (C) 2021-2024 by Qu Yi <toquyi@163.com>
%
% 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 <marei@peitex.de>, 2018–2023
+ Copyright (C) Marei Peischl <marei@peitex.de>, 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
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf
Binary files 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
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf
Binary files 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
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer2023.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer2023.pdf
Binary files 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
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf
Binary files 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
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf
Binary files 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
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf
Binary files 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
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf
Binary files 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
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf
Binary files 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
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf
Binary files 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
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf
Binary files 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
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf
Binary files 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
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf
Binary files 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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=<Text>| 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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=<Text>| 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{<Verschiebung>}{<Inhalt>}+ problemlos möglich.
@@ -352,7 +372,7 @@ Hierbei ist zu beachten, dass die Einstellungen als Ausgangspunkt den Voreingest
<Eigene Anpassungen>
}
\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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <kontakt@peitex.de> and Markus Lazanowski <latex@ce.tu-darmstadt.de>.
+%% The Current Maintainers of this work are Marei Peischl <kontakt@peitex.de>.
%%
%%
\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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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 <kontakt@peitex.de> and Markus Lazanowski <latex@ce.tu-darmstadt.de>.
+%% The Current Maintainers of this work are Marei Peischl <kontakt@peitex.de>.
%%
%%
\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 <tuda-ci@peitex.de>
-%% Markus Lazanowski <latex@ce.tu-darmstadt.de>
%%
%% 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
--- a/macros/luatex/generic/minim-math/minim-math.pdf
+++ b/macros/luatex/generic/minim-math/minim-math.pdf
Binary files 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(<params>)⟧ 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 (<params>)⟧ 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) <picture>⟧
+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: ⟦<id> =⟧ ⟦*saveboxresource (<attributes>) <picture>⟧ 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 <id>⟧,
+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;
+
+% <drawing_cmd> 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
--- a/macros/luatex/generic/minim-mp/minim-mp.pdf
+++ b/macros/luatex/generic/minim-mp/minim-mp.pdf
Binary files 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 {...}] <action> ... \endlink⟧, where the
+⟦<action>⟧ 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 <options>⟧.
@@ -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 <classname>⟧ 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 <</S/GoTo /D %s>>', pdf_string(token.scan_argument()))
+end
+function link_types.url()
+ return string.format('/Subtype/Link /A <</S/URI /URI %s>>', pdf_string(token.scan_argument()))
+end
+
+function link_types.user() return token.scan_argument() end
+function link_types.next() return '/Subtype/Link /A <</S/Named /N/NextPage>>' end
+function link_types.prev() return '/Subtype/Link /A <</S/Named /N/PrevPage>>' end
+function link_types.first() return '/Subtype/Link /A <</S/Named /N/FirstPage>>' end
+function link_types.last() return '/Subtype/Link /A <</S/Named /N/LastPage>>' 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
--- a/macros/luatex/generic/minim-pdf/minim-pdf.pdf
+++ b/macros/luatex/generic/minim-pdf/minim-pdf.pdf
Binary files 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 <args> ... \endlink
+% args: alt {...} attr {...} <type>
+% 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 <</S/GoTo /D (#1)>>}}
-\def\hyperlink:url#1{user {/Subtype/Link /F 4 /A <</S/URI /URI (#1)>>}}
-\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
--- a/macros/luatex/generic/minim-xmp/minim-xmp.pdf
+++ b/macros/luatex/generic/minim-xmp/minim-xmp.pdf
Binary files 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 <value>'
@@ -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
--- a/macros/luatex/generic/minim/minim.pdf
+++ b/macros/luatex/generic/minim/minim.pdf
Binary files 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<https://tug.org/texlive>) 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
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
Binary files 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