summaryrefslogtreecommitdiff
path: root/macros/latex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-09-16 03:01:41 +0000
committerNorbert Preining <norbert@preining.info>2022-09-16 03:01:41 +0000
commit3d3e0a1ec600d13b4db750f4b15dbaa7bad36781 (patch)
tree9b945a76aadc072cc646c5c22b1913d626987567 /macros/latex
parent6d44c638512eb736c41551c5887b4475a14935bf (diff)
CTAN sync 202209160301
Diffstat (limited to 'macros/latex')
-rw-r--r--macros/latex/contrib/animate/ChangeLog6
-rw-r--r--macros/latex/contrib/animate/animate.pdf1409
-rw-r--r--macros/latex/contrib/animate/animate.sty30
-rw-r--r--macros/latex/contrib/bithesis/README.md43
-rw-r--r--macros/latex/contrib/bithesis/bithesis.dtx4899
-rw-r--r--macros/latex/contrib/bithesis/bithesis.ins80
-rw-r--r--macros/latex/contrib/bithesis/bithesis.pdfbin818866 -> 0 bytes
-rw-r--r--macros/latex/contrib/bithesis/contributing-zh.md54
-rw-r--r--macros/latex/contrib/bithesis/contributing.md56
-rw-r--r--macros/latex/contrib/l3build/CHANGELOG.md8
-rw-r--r--macros/latex/contrib/l3build/README.md2
-rw-r--r--macros/latex/contrib/l3build/l3build-install.lua8
-rw-r--r--macros/latex/contrib/l3build/l3build.12
-rw-r--r--macros/latex/contrib/l3build/l3build.dtx13
-rwxr-xr-xmacros/latex/contrib/l3build/l3build.lua2
-rw-r--r--macros/latex/contrib/l3build/l3build.pdfbin741923 -> 742080 bytes
-rw-r--r--macros/latex/contrib/newpax/README.md2
-rw-r--r--macros/latex/contrib/newpax/doc-input1.pdf4
-rw-r--r--macros/latex/contrib/newpax/doc-input1.tex3
-rw-r--r--macros/latex/contrib/newpax/doc-input2.pdf4
-rw-r--r--macros/latex/contrib/newpax/doc-input2.tex3
-rw-r--r--macros/latex/contrib/newpax/doc-use-newpax.pdf274
-rw-r--r--macros/latex/contrib/newpax/doc-use-newpax.tex6
-rw-r--r--macros/latex/contrib/newpax/doc-use-pax.pdfbin44928 -> 45012 bytes
-rw-r--r--macros/latex/contrib/newpax/doc-use-pax.tex4
-rw-r--r--macros/latex/contrib/newpax/newpax.dtx73
-rw-r--r--macros/latex/contrib/newpax/newpax.ins4
-rw-r--r--macros/latex/contrib/newpax/newpax.pdf1367
-rw-r--r--macros/latex/contrib/newpax/newpax.tex14
-rw-r--r--macros/latex/contrib/opencolor/LICENSE21
-rw-r--r--macros/latex/contrib/opencolor/README.md45
-rw-r--r--macros/latex/contrib/opencolor/demo-opencolor.pdfbin0 -> 15089 bytes
-rw-r--r--macros/latex/contrib/opencolor/demo-opencolor.pngbin0 -> 189796 bytes
-rw-r--r--macros/latex/contrib/opencolor/demo-opencolor.tex26
-rw-r--r--macros/latex/contrib/opencolor/opencolor.sty154
-rw-r--r--macros/latex/contrib/photobook/LICENSE29
-rw-r--r--macros/latex/contrib/photobook/Makefile375
-rw-r--r--macros/latex/contrib/photobook/README.md52
-rw-r--r--macros/latex/contrib/photobook/photobook.cls5058
-rw-r--r--macros/latex/contrib/photobook/photobook.pdfbin0 -> 134431 bytes
-rwxr-xr-xmacros/latex/contrib/photobook/scripts/cls2tex.sh156
-rw-r--r--macros/latex/contrib/photobook/scripts/make-images.sh449
-rw-r--r--macros/latex/contrib/ppt-slides/ppt-slides.pdfbin227754 -> 229755 bytes
-rw-r--r--macros/latex/contrib/ppt-slides/ppt-slides.sty3
-rw-r--r--macros/latex/contrib/ppt-slides/ppt-slides.tex16
-rw-r--r--macros/latex/contrib/ppt-slides/ppt-templates/ppt-9x6.tex14
-rw-r--r--macros/latex/contrib/qrbill/README.md25
-rw-r--r--macros/latex/contrib/qrbill/qrbill-latexluaqrcode.lua24
-rw-r--r--macros/latex/contrib/qrbill/qrbill.dtx243
-rw-r--r--macros/latex/contrib/qrbill/qrbill.pdfbin80077 -> 85725 bytes
-rw-r--r--macros/latex/contrib/udes-genie-these/README.md17
-rw-r--r--macros/latex/contrib/udes-genie-these/acronymes.tex12
-rw-r--r--macros/latex/contrib/udes-genie-these/analyse.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/conception.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/conclusion-anglaise.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/conclusion-francaise.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/document.tex55
-rw-r--r--macros/latex/contrib/udes-genie-these/donnees.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/introduction.tex33
-rw-r--r--macros/latex/contrib/udes-genie-these/lexique.tex12
-rw-r--r--macros/latex/contrib/udes-genie-these/merci.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/realisation.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/references.bib219
-rw-r--r--macros/latex/contrib/udes-genie-these/resume-anglais.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/resume-francais.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/revue.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/symboles.tex15
-rw-r--r--macros/latex/contrib/udes-genie-these/tests.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/udes-genie-these.dtx1420
-rw-r--r--macros/latex/contrib/udes-genie-these/udes-genie-these.ins61
-rw-r--r--macros/latex/contrib/udes-genie-these/udes-genie-these.pdfbin0 -> 113355 bytes
71 files changed, 10279 insertions, 6636 deletions
diff --git a/macros/latex/contrib/animate/ChangeLog b/macros/latex/contrib/animate/ChangeLog
index d9da4f0679..885e8a8453 100644
--- a/macros/latex/contrib/animate/ChangeLog
+++ b/macros/latex/contrib/animate/ChangeLog
@@ -1,3 +1,9 @@
+2022-09-15
+ * fix: failure (in dvisvgm driver mode) when setting `draft'
+ globally and then setting `final' locally
+ * improvement: accelerating compilation in `draft' mode for long
+ \multiframe loops
+
2022-08-04
* fix: a few obsolete code lines removed; option processing acc. to new
LaTeX format 22-06-01
diff --git a/macros/latex/contrib/animate/animate.pdf b/macros/latex/contrib/animate/animate.pdf
index 33f6b8c81b..093f0ff0a2 100644
--- a/macros/latex/contrib/animate/animate.pdf
+++ b/macros/latex/contrib/animate/animate.pdf
@@ -1,7 +1,7 @@
%PDF-1.4
%
610 0 obj
-<< /Linearized 1 /L 3751366 /H [ 3136261 525 ] /O 1884 /E 3171583 /N 29 /T 3739046 >>
+<< /Linearized 1 /L 3751374 /H [ 3136261 524 ] /O 1884 /E 3171591 /N 29 /T 3739054 >>
endobj
xref
@@ -1280,62 +1280,62 @@ xref
0003135858 00000 n
0003136096 00000 n
0003136261 00000 n
-0003136786 00000 n
-0003137210 00000 n
-0003137341 00000 n
-0003141252 00000 n
-0003141507 00000 n
-0003141726 00000 n
-0003141906 00000 n
-0003142086 00000 n
-0003142266 00000 n
-0003142446 00000 n
-0003142626 00000 n
-0003142806 00000 n
-0003142991 00000 n
-0003143176 00000 n
-0003143356 00000 n
-0003143536 00000 n
-0003143721 00000 n
-0003143906 00000 n
-0003144086 00000 n
-0003144292 00000 n
-0003144504 00000 n
-0003144567 00000 n
-0003144619 00000 n
-0003144724 00000 n
-0003144849 00000 n
-0003144973 00000 n
-0003145344 00000 n
-0003145645 00000 n
-0003146124 00000 n
-0003146523 00000 n
-0003147068 00000 n
-0003147712 00000 n
-0003153961 00000 n
-0003156222 00000 n
-0003166497 00000 n
-0003167054 00000 n
-0003167179 00000 n
-0003167532 00000 n
-0003168272 00000 n
-0003168389 00000 n
-0003168470 00000 n
-0003168628 00000 n
-0003168801 00000 n
-0003168974 00000 n
-0003169167 00000 n
-0003169364 00000 n
-0003169590 00000 n
-0003169765 00000 n
-0003169972 00000 n
-0003170181 00000 n
-0003170379 00000 n
-0003170714 00000 n
-0003171085 00000 n
-0003171258 00000 n
-0003171404 00000 n
-trailer << /Info 218 0 R /Root 611 0 R /Size 1939 /Prev 3739036 /ID [<75e8fb4f5346631caadd4dd62bc0c8cf><c56a8654f67f089b6bb008ec65f15f3a>] >>
+0003136785 00000 n
+0003137209 00000 n
+0003137340 00000 n
+0003141260 00000 n
+0003141515 00000 n
+0003141734 00000 n
+0003141914 00000 n
+0003142094 00000 n
+0003142274 00000 n
+0003142454 00000 n
+0003142634 00000 n
+0003142814 00000 n
+0003142999 00000 n
+0003143184 00000 n
+0003143364 00000 n
+0003143544 00000 n
+0003143729 00000 n
+0003143914 00000 n
+0003144094 00000 n
+0003144300 00000 n
+0003144512 00000 n
+0003144575 00000 n
+0003144627 00000 n
+0003144732 00000 n
+0003144857 00000 n
+0003144981 00000 n
+0003145352 00000 n
+0003145653 00000 n
+0003146132 00000 n
+0003146531 00000 n
+0003147076 00000 n
+0003147720 00000 n
+0003153969 00000 n
+0003156230 00000 n
+0003166505 00000 n
+0003167062 00000 n
+0003167187 00000 n
+0003167540 00000 n
+0003168280 00000 n
+0003168397 00000 n
+0003168478 00000 n
+0003168636 00000 n
+0003168809 00000 n
+0003168982 00000 n
+0003169175 00000 n
+0003169372 00000 n
+0003169598 00000 n
+0003169773 00000 n
+0003169980 00000 n
+0003170189 00000 n
+0003170387 00000 n
+0003170722 00000 n
+0003171093 00000 n
+0003171266 00000 n
+0003171412 00000 n
+trailer << /Info 218 0 R /Root 611 0 R /Size 1939 /Prev 3739044 /ID [<782d3cd91591d75b4d8a62e34c092caf><e4d110360488353819d6e43044744b8d>] >>
startxref
0
%%EOF
@@ -1442,7 +1442,7 @@ stream
xLH4/IK׬KS5JJS5k34b M["k4%jj NJHuqjj[Qbn5
endobj
625 0 obj
-<< /AA << /PC << /JS 624 0 R /S /JavaScript >> /PI << /JS 624 0 R /S /JavaScript >> /PO << /JS 623 0 R /S /JavaScript >> /PV << /JS 623 0 R /S /JavaScript >> >> /AP << /N 616 0 R >> /BS << /W 0 >> /Contents (animation by animate, v. 2022/08/04) /F 4 /FT /Btn /Ff 65537 /H /N /MK << /I 616 0 R /IF << /FB true /S /A >> /TP 1 >> /Rect [ 333.72 629.38 347.04 638.62 ] /Subtype /Widget /T (anm0) /Type /Annot >>
+<< /AA << /PC << /JS 624 0 R /S /JavaScript >> /PI << /JS 624 0 R /S /JavaScript >> /PO << /JS 623 0 R /S /JavaScript >> /PV << /JS 623 0 R /S /JavaScript >> >> /AP << /N 616 0 R >> /BS << /W 0 >> /Contents (animation by animate, v. 2022/09/15) /F 4 /FT /Btn /Ff 65537 /H /N /MK << /I 616 0 R /IF << /FB true /S /A >> /TP 1 >> /Rect [ 333.72 629.38 347.04 638.62 ] /Subtype /Widget /T (anm0) /Type /Annot >>
endobj
626 0 obj
<< /BaseFont /DFMPLS+LinLibertineTI /Encoding 1872 0 R /FirstChar 27 /FontDescriptor 627 0 R /LastChar 246 /Subtype /Type1 /ToUnicode 1871 0 R /Type /Font /Widths [ 564 0 0 0 0 0 0 0 0 0 0 0 268 306 313 0 0 219 333 219 291 0 0 0 0 444 0 0 0 0 444 219 0 0 527 0 0 0 667 557 0 667 526 457 664 0 280 414 637 519 804 0 668 499 0 0 454 544 0 597 0 628 0 0 0 0 0 0 0 268 486 478 389 489 401 314 477 519 276 259 486 266 783 518 447 489 0 357 353 307 521 472 688 475 503 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 447 ] >>
@@ -1483,7 +1483,7 @@ stream
xLH4/IK׬KS5JJS5k34b M["k4%jj NJHuqjj[Qbn5
endobj
634 0 obj
-<< /AA << /PC << /JS 633 0 R /S /JavaScript >> /PI << /JS 633 0 R /S /JavaScript >> /PO << /JS 632 0 R /S /JavaScript >> /PV << /JS 632 0 R /S /JavaScript >> >> /AP << /N 628 0 R >> /BS << /W 0 >> /Contents (animation by animate, v. 2022/08/04) /F 4 /FT /Btn /Ff 65537 /H /N /MK << /I 628 0 R /IF << /FB true /S /A >> /TP 1 >> /Rect [ 124.8 547.18 166.8 559.06 ] /Subtype /Widget /T (anm1) /Type /Annot >>
+<< /AA << /PC << /JS 633 0 R /S /JavaScript >> /PI << /JS 633 0 R /S /JavaScript >> /PO << /JS 632 0 R /S /JavaScript >> /PV << /JS 632 0 R /S /JavaScript >> >> /AP << /N 628 0 R >> /BS << /W 0 >> /Contents (animation by animate, v. 2022/09/15) /F 4 /FT /Btn /Ff 65537 /H /N /MK << /I 628 0 R /IF << /FB true /S /A >> /TP 1 >> /Rect [ 124.8 547.18 166.8 559.06 ] /Subtype /Widget /T (anm1) /Type /Annot >>
endobj
635 0 obj
<< /BaseFont /EPUAGO+LibertinusT1Math /Encoding 1882 0 R /FirstChar 11 /FontDescriptor 636 0 R /LastChar 122 /Subtype /Type1 /ToUnicode 1881 0 R /Type /Font /Widths [ 522 472 458 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 299 0 0 0 475 503 436 ] >>
@@ -1715,7 +1715,7 @@ stream
xLH4/IK׬KS5JJS5k34b M["k4%jj NJHuqjj[Qbn5
endobj
671 0 obj
-<< /AA << /D << /JS (try{if\(a2_playing\){a2_pause\(\);}}catch\(e\){}) /S /JavaScript >> /PC << /JS 670 0 R /S /JavaScript >> /PI << /JS 670 0 R /S /JavaScript >> /PO << /JS 669 0 R /S /JavaScript >> /PV << /JS 669 0 R /S /JavaScript >> /U << /JS (try{if\(event.shift\)a2_playsRight=!a2_playsRight;var\ndoplay=true;if\(a2_idx==8&&a2_playsRight\){a2_stopFirst\(\);}if\(a2_idx==0&&!a2_playsRight\){a2_stopLast\(\);}if\(doplay\){if\(a2_playsRight\){a2_playRight\(\);}else{a2_playLeft\(\);}}}catch\(e\){}) /S /JavaScript >> >> /AP << /N 643 0 R >> /BS << /W 0 >> /Contents (animation by animate, v. 2022/08/04) /F 4 /FT /Btn /Ff 65536 /H /N /MK << /I 643 0 R /IF << /FB true /S /A >> /TP 1 >> /Rect [ 217.2 554.14 376.2 716.14 ] /Subtype /Widget /T (anm2) /Type /Annot >>
+<< /AA << /D << /JS (try{if\(a2_playing\){a2_pause\(\);}}catch\(e\){}) /S /JavaScript >> /PC << /JS 670 0 R /S /JavaScript >> /PI << /JS 670 0 R /S /JavaScript >> /PO << /JS 669 0 R /S /JavaScript >> /PV << /JS 669 0 R /S /JavaScript >> /U << /JS (try{if\(event.shift\)a2_playsRight=!a2_playsRight;var\ndoplay=true;if\(a2_idx==8&&a2_playsRight\){a2_stopFirst\(\);}if\(a2_idx==0&&!a2_playsRight\){a2_stopLast\(\);}if\(doplay\){if\(a2_playsRight\){a2_playRight\(\);}else{a2_playLeft\(\);}}}catch\(e\){}) /S /JavaScript >> >> /AP << /N 643 0 R >> /BS << /W 0 >> /Contents (animation by animate, v. 2022/09/15) /F 4 /FT /Btn /Ff 65536 /H /N /MK << /I 643 0 R /IF << /FB true /S /A >> /TP 1 >> /Rect [ 217.2 554.14 376.2 716.14 ] /Subtype /Widget /T (anm2) /Type /Annot >>
endobj
672 0 obj
<< /BBox [ 0 8270 150 8420 ] /Filter /FlateDecode /FormType 1 /Matrix [ 0.833333 0 0 -0.833333 0 7016.67 ] /Resources << /ProcSet [ /PDF ] >> /Subtype /Form /Type /XObject /Length 165 >>
@@ -4184,7 +4184,7 @@ stream
xLH4/IK׬KS5JJS5k34b M["k4%jj NJHuqjj[Qbn5
endobj
1170 0 obj
-<< /AA << /D << /JS (try{if\(a3_playing\){a3_pause\(\);}}catch\(e\){}) /S /JavaScript >> /PC << /JS 1169 0 R /S /JavaScript >> /PI << /JS 1169 0 R /S /JavaScript >> /PO << /JS 1168 0 R /S /JavaScript >> /PV << /JS 1168 0 R /S /JavaScript >> /U << /JS (try{if\(event.shift\)a3_playsRight=!a3_playsRight;var\ndoplay=true;if\(a3_idx==100&&a3_playsRight\){a3_stopFirst\(\);}if\(a3_idx==0&&!a3_playsRight\){a3_stopLast\(\);}if\(doplay\){if\(a3_playsRight\){a3_playRight\(\);}else{a3_playLeft\(\);}}}catch\(e\){}) /S /JavaScript >> >> /AP << /N 966 0 R >> /BS << /W 0 >> /Contents (animation by animate, v. 2022/08/04) /F 4 /FT /Btn /Ff 65536 /H /N /MK << /I 966 0 R /IF << /FB true /S /A >> /TP 1 >> /Rect [ 159.12 451.78 434.16 716.14 ] /Subtype /Widget /T (anm3) /Type /Annot >>
+<< /AA << /D << /JS (try{if\(a3_playing\){a3_pause\(\);}}catch\(e\){}) /S /JavaScript >> /PC << /JS 1169 0 R /S /JavaScript >> /PI << /JS 1169 0 R /S /JavaScript >> /PO << /JS 1168 0 R /S /JavaScript >> /PV << /JS 1168 0 R /S /JavaScript >> /U << /JS (try{if\(event.shift\)a3_playsRight=!a3_playsRight;var\ndoplay=true;if\(a3_idx==100&&a3_playsRight\){a3_stopFirst\(\);}if\(a3_idx==0&&!a3_playsRight\){a3_stopLast\(\);}if\(doplay\){if\(a3_playsRight\){a3_playRight\(\);}else{a3_playLeft\(\);}}}catch\(e\){}) /S /JavaScript >> >> /AP << /N 966 0 R >> /BS << /W 0 >> /Contents (animation by animate, v. 2022/09/15) /F 4 /FT /Btn /Ff 65536 /H /N /MK << /I 966 0 R /IF << /FB true /S /A >> /TP 1 >> /Rect [ 159.12 451.78 434.16 716.14 ] /Subtype /Widget /T (anm3) /Type /Annot >>
endobj
1171 0 obj
<< /AA << /D << /JS (a3_stopFirst\(\);) /S /JavaScript >> >> /AP << /N 672 0 R >> /BS << /W 0 >> /F 0 /FT /Btn /Ff 65536 /H /I /MK << /I 672 0 R /IF << /FB true /S /A >> /TP 1 >> /Rect [ 229.92 435.94 244.32 450.34 ] /Subtype /Widget /T (3.EndLeft) /Type /Annot >>
@@ -7674,7 +7674,7 @@ stream
xLH4/IK׬KS5JJS5k34b M["k4%jj NJHyqjj[Qbno
endobj
1244 0 obj
-<< /AA << /D << /JS (try{if\(a4_playing\){a4_pause\(\);}}catch\(e\){}) /S /JavaScript >> /PC << /JS 1243 0 R /S /JavaScript >> /PI << /JS 1243 0 R /S /JavaScript >> /PO << /JS 1242 0 R /S /JavaScript >> /PV << /JS 1242 0 R /S /JavaScript >> /U << /JS (try{if\(event.shift\)a4_playsRight=!a4_playsRight;if\(a4_idx==0\)a4_playsRight=true;if\(a4_idx==28\)a4_playsRight=false;if\(a4_playsRight\){a4_playRight\(\);}else{a4_playLeft\(\);}}catch\(e\){}) /S /JavaScript >> >> /AP << /N 1212 0 R >> /BS << /W 0 >> /Contents (animation by animate, v. 2022/08/04) /F 4 /FT /Btn /Ff 65536 /H /N /MK << /I 1212 0 R /IF << /FB true /S /A >> /TP 1 >> /Rect [ 174.6 584.14 418.68 716.14 ] /Subtype /Widget /T (anm4) /Type /Annot >>
+<< /AA << /D << /JS (try{if\(a4_playing\){a4_pause\(\);}}catch\(e\){}) /S /JavaScript >> /PC << /JS 1243 0 R /S /JavaScript >> /PI << /JS 1243 0 R /S /JavaScript >> /PO << /JS 1242 0 R /S /JavaScript >> /PV << /JS 1242 0 R /S /JavaScript >> /U << /JS (try{if\(event.shift\)a4_playsRight=!a4_playsRight;if\(a4_idx==0\)a4_playsRight=true;if\(a4_idx==28\)a4_playsRight=false;if\(a4_playsRight\){a4_playRight\(\);}else{a4_playLeft\(\);}}catch\(e\){}) /S /JavaScript >> >> /AP << /N 1212 0 R >> /BS << /W 0 >> /Contents (animation by animate, v. 2022/09/15) /F 4 /FT /Btn /Ff 65536 /H /N /MK << /I 1212 0 R /IF << /FB true /S /A >> /TP 1 >> /Rect [ 174.6 584.14 418.68 716.14 ] /Subtype /Widget /T (anm4) /Type /Annot >>
endobj
1245 0 obj
<< /AA << /D << /JS (a4_stopFirst\(\);) /S /JavaScript >> >> /AP << /N 672 0 R >> /BS << /W 0 >> /F 0 /FT /Btn /Ff 65536 /H /I /MK << /I 672 0 R /IF << /FB true /S /A >> /TP 1 >> /Rect [ 229.92 568.42 244.32 582.7 ] /Subtype /Widget /T (4.EndLeft) /Type /Annot >>
@@ -16192,7 +16192,7 @@ stream
xLH4/IK׬KS5JJS5k34b M["k4%jj NJH}qjj[QbnH
endobj
1742 0 obj
-<< /AA << /D << /JS (try{if\(a5_playing\){a5_pause\(\);}}catch\(e\){}) /S /JavaScript >> /PC << /JS 1741 0 R /S /JavaScript >> /PI << /JS 1741 0 R /S /JavaScript >> /PO << /JS 1740 0 R /S /JavaScript >> /PV << /JS 1740 0 R /S /JavaScript >> /U << /JS (try{if\(event.shift\)a5_playsRight=!a5_playsRight;var\ndoplay=true;if\(a5_idx==190&&a5_playsRight\){a5_stopFirst\(\);}if\(a5_idx==0&&!a5_playsRight\){a5_stopLast\(\);}if\(doplay\){if\(a5_playsRight\){a5_playRight\(\);}else{a5_playLeft\(\);}}}catch\(e\){}) /S /JavaScript >> >> /AP << /N 1448 0 R >> /BS << /W 0 >> /Contents (animation by animate, v. 2022/08/04) /F 4 /FT /Btn /Ff 65536 /H /N /MK << /I 1448 0 R /IF << /FB true /S /A >> /TP 1 >> /Rect [ 125.28 395.38 468 716.14 ] /Subtype /Widget /T (anm5) /Type /Annot >>
+<< /AA << /D << /JS (try{if\(a5_playing\){a5_pause\(\);}}catch\(e\){}) /S /JavaScript >> /PC << /JS 1741 0 R /S /JavaScript >> /PI << /JS 1741 0 R /S /JavaScript >> /PO << /JS 1740 0 R /S /JavaScript >> /PV << /JS 1740 0 R /S /JavaScript >> /U << /JS (try{if\(event.shift\)a5_playsRight=!a5_playsRight;var\ndoplay=true;if\(a5_idx==190&&a5_playsRight\){a5_stopFirst\(\);}if\(a5_idx==0&&!a5_playsRight\){a5_stopLast\(\);}if\(doplay\){if\(a5_playsRight\){a5_playRight\(\);}else{a5_playLeft\(\);}}}catch\(e\){}) /S /JavaScript >> >> /AP << /N 1448 0 R >> /BS << /W 0 >> /Contents (animation by animate, v. 2022/09/15) /F 4 /FT /Btn /Ff 65536 /H /N /MK << /I 1448 0 R /IF << /FB true /S /A >> /TP 1 >> /Rect [ 125.28 395.38 468 716.14 ] /Subtype /Widget /T (anm5) /Type /Annot >>
endobj
1743 0 obj
<< /AA << /D << /JS (a5_stopFirst\(\);) /S /JavaScript >> >> /AP << /N 672 0 R >> /BS << /W 0 >> /F 0 /FT /Btn /Ff 65536 /H /I /MK << /I 672 0 R /IF << /FB true /S /A >> /TP 1 >> /Rect [ 229.92 379.54 244.32 393.94 ] /Subtype /Widget /T (5.EndLeft) /Type /Annot >>
@@ -16694,7 +16694,7 @@ stream
xLH4/IK׬KS5JJS5k34b M["k4%jj NJHuqjj[Qbn5
endobj
1840 0 obj
-<< /AA << /D << /JS (try{if\(a6_playing\){a6_pause\(\);}}catch\(e\){}) /S /JavaScript >> /PC << /JS 1839 0 R /S /JavaScript >> /PI << /JS 1839 0 R /S /JavaScript >> /PO << /JS 1838 0 R /S /JavaScript >> /PV << /JS 1838 0 R /S /JavaScript >> /U << /JS (try{if\(event.shift\)a6_playsRight=!a6_playsRight;if\(a6_idx==0\)a6_playsRight=true;if\(a6_idx==25\)a6_playsRight=false;if\(a6_playsRight\){a6_playRight\(\);}else{a6_playLeft\(\);}}catch\(e\){}) /S /JavaScript >> >> /AP << /N 1786 0 R >> /BS << /W 0 >> /Contents (animation by animate, v. 2022/08/04) /F 4 /FT /Btn /Ff 65536 /H /N /MK << /I 1786 0 R /IF << /FB true /S /A >> /TP 1 >> /Rect [ 176.4 165.34 417 418.66 ] /Subtype /Widget /T (anm6) /Type /Annot >>
+<< /AA << /D << /JS (try{if\(a6_playing\){a6_pause\(\);}}catch\(e\){}) /S /JavaScript >> /PC << /JS 1839 0 R /S /JavaScript >> /PI << /JS 1839 0 R /S /JavaScript >> /PO << /JS 1838 0 R /S /JavaScript >> /PV << /JS 1838 0 R /S /JavaScript >> /U << /JS (try{if\(event.shift\)a6_playsRight=!a6_playsRight;if\(a6_idx==0\)a6_playsRight=true;if\(a6_idx==25\)a6_playsRight=false;if\(a6_playsRight\){a6_playRight\(\);}else{a6_playLeft\(\);}}catch\(e\){}) /S /JavaScript >> >> /AP << /N 1786 0 R >> /BS << /W 0 >> /Contents (animation by animate, v. 2022/09/15) /F 4 /FT /Btn /Ff 65536 /H /N /MK << /I 1786 0 R /IF << /FB true /S /A >> /TP 1 >> /Rect [ 176.4 165.34 417 418.66 ] /Subtype /Widget /T (anm6) /Type /Annot >>
endobj
1841 0 obj
<< /AA << /D << /JS (a6_stopFirst\(\);) /S /JavaScript >> >> /AP << /N 672 0 R >> /BS << /W 0 >> /F 0 /FT /Btn /Ff 65536 /H /I /MK << /I 672 0 R /IF << /FB true /S /A >> /TP 1 >> /Rect [ 229.92 149.62 244.32 163.9 ] /Subtype /Widget /T (6.EndLeft) /Type /Annot >>
@@ -16986,10 +16986,13 @@ endobj
<< /BaseEncoding /WinAnsiEncoding /Differences [ 11 /u1D6FC /u1D6FD /u1D6FE 59 /comma 116 /u1D461 120 /u1D465 /u1D466 /u1D467 ] /Type /Encoding >>
endobj
1883 0 obj
-<< /Filter /FlateDecode /S 425 /O 568 /Length 436 >>
+<< /Filter /FlateDecode /S 425 /O 568 /Length 435 >>
stream
-xc```aпc
- L IN5,`a`udT`縚5G Su,[dWOserz w`6S A{'cjg!u؛ * `j
+xc```aпc
+c <0'3,P>9AV_l
+ O
+4X"m+zMi1ض;oԟH꿿tftmOgn9=i7
endstream
endobj
1884 0 obj
@@ -16999,25 +17002,27 @@ endobj
<< /FT /Btn /Ff 65537 /Rect [ 0.960007 837.94 3.96001 840.94 ] /Subtype /Widget /T (pbs@ARFix@1) /Type /Annot >>
endobj
1886 0 obj
-<< /Filter /FlateDecode /Length 3836 >>
-stream
-x[ms5 e,ŎzߒpQWu +OKQ7v쨻կOK'jqz始^ZhM mou˕D݋%:hKǤ\>IP x eeu&t SwJBw\aBpO^};ح<jtN'1S WWN0*mrizr&y)ÔbxQ
-Z>QJ=Dw@ZikAZ2afvڹnli{Ҏg{}. U)4ޓV~#% ૫,
-K.`rN^Ǒ谸u)9,pIUOz59k,9)e}Qn Nl6RzUO:d>:bt8m M֛;([g[ 6eo=fxŃ>bwt&&%mhE!,rF`g9SD͋)- 8)F̘|qSr^zH_#1B-"7ֺdRLw}s0DN^ O!2/NӒOlG[5)VXT}E|ڔ|Sm2%;b7 a#9Ŕ!&]ߣP6B&qi
-Tɜ7X7KFRqe?\ W0] %䡘A0[G@0%ձLqMlK6O$ hH<A*W>LU7vrSgIG"E ΎI8m A"xZ/62ISƶq_lNuF9+wŐq&7(୺Vsm8$Xll5[hˈ< pcd&|};)m!w o;x}1lfĨHAQ.2Fp0dVT+!і8z-[IZb7`ts)m&e>XC_6Na7rfҎ0Rj. Y)gS \U߸=H` UuZMP5~m1+|˝B%BcJKHZLԷ ,`-
-S.GarPkm9,iFyBs< !PN?fyڝ;!x
-gkg҅
-]
-`RQ-Gn"2)7U!0SA̠c~ʵ@`̆&T4!UӔUh~]Rhm;uB,u4 bf TMnHrNmQ'7nspmksCwJvl4EMY!@O61b08AU͇EJF3_jƶL)#G#Y2<s)y@ByRWrnd.ݕd IFpƦCͻYƨT*0c܀
-(3[jXSh޵9嵯=u=<3eAZj#<`O^N#N.9ܱuIpnbe0Gc(I肁]/5| 8qDEČ|#h ؆>D㔧 /rkJ=X97AD+xn<? b (}3iD8zCy
-^
-C4l6󲓄4kH֔r+7ge G}||jMЧP_LPE
-dxG_QQQCr#,@
-?ek+FTt۽уὙ1+zxӍ
-vI';1Cw趁#\)}E$J L9׽݁
-ؼa}km4T컅n zi27,1}"(lx/Q\wSJ@\Z4 iQDk|-pMu41Dʦ&>
-.*op@wچ[ݟYW D?d,Y"z#{G*XRa6Tmw  GÅqæ$-.NZ|dt,8˷&%n|u*jD=m?+ҝr x[>YDFpda+#ʰH#]oQ>~
-=Y\dYO4-ީN?1ȍآi:zFwIk~*0L3 dȷh})W-SlO%%N#RvrIǽ6ͷBྐE(dyS gk)":qw}$gOK+ K눤7u7{2`#VI竄e n.1cA|lͻd0`BC`j ՏLދPNKHێ?2noC1*;%?;42b﬇S څ('>Uf#_Uh>FbsdZF u,^|u?endstream
+<< /Filter /FlateDecode /Length 3845 >>
+stream
+x[n7gB^m{L;;vV ,Ȃ#9SdY=ӒE
+s~nQkp"= Xdb 2r}wQhKӓ3˟OTVƋQ.VR* ?iK|4\oա-6!ifgO'xqчr[ON=io<R)ZҡOAᯰ![ژ>b+ui~y{߿R?>%.<Iϱ&ge7@[]Gi#u~Ni-&O]`dɞ}u{lᓦgó ?gS_\;M v:䖅ȳCrFGoqȎXWg95d#Z?矽! "#=rtGjRsɉt9>p2\!ˬh.;gJH#nMo{9!i4 R_#^s"L&kk!@=ꚧdJv
+e]0^bʉks4W
+}7/Y3gK0jVwriTMH1=~`&E &+v `uO,"(
+eY*=msydTmE[)pS%svDb, tQKaF1@x5
+[2Hń :
+id.Y6Ue&NqP:.<l.|` "EĚFP4 oFϒ/ϵ6)9%u4q䣗6E DRF&ijrU6{9*xFToDrQ '_;/ |lmr? ުje<؆^K6AFzAQzHP7F&jBY~pwgKM܅W>u3Vbp
+Ll#2 p
+c6&Oz.NY 풞 ۑ|6aU%AYh Ti6C2ܲWŬH-w
+,y.!i3S߂F:h)Pu9:K֖(凲Xt %$@9e[D]U8ܐ<K.WhԈeo`bMJJ.g8p
+I$QoWEzyz-4[9FM ,V! қy*!B<AQwym[zFA<p$5p ,G 6g_=s4
+<8Ah@Qf=bBRiI3qwBXsw
+o7 Z0N9 EeR.Óot Cja>AǨkș MiB)+|;nڢMii8Ѐy6P17!9E}/ߺi67t1X[&xQzSVC /NPfe|niihA̗Z-S%QH"kLz\J^b$6-FЇE^緜"94xJ$# IwcSLp,cThi y1n@ p޼ (VrraHr6-̤
+Q#B rK}P(olF |r²txë|ĻխSKƖ]˾q@~cu<ią񈼑prds'0Pw¼͵)ڠCy
+U<%_DwHK{d5U1I.W>
+ii:>\ ?|M8I\c[\Xn3pЗORJ>*UԤJ෉z~V;A>?|. 䉂 OɶVGڵa+F b
+|Y?_W&g+dsv=G}Zx8f1Et80
+af ˑ?.!Pa$(I/5p*ߚÐK8?dm%"
+8\c,TmA,ٚw3ja򅔩ɇ6*Ըy +&l ޗ4(&O?2noC1*;%?;42bϱS څ('>Uf#_Uh>FbsdZF u,^|u?e#endstream
endobj
1887 0 obj
<< /AA << /PC << /JS 624 0 R /S /JavaScript >> /PI << /JS 624 0 R /S /JavaScript >> /PO << /JS 623 0 R /S /JavaScript >> /PV << /JS 623 0 R /S /JavaScript >> >> /F 2 /Rect [ 333.72 629.38 338.76 634.54 ] /Subtype /Screen /Type /Annot >>
@@ -17642,12 +17647,12 @@ x\[\G~߿3sKH!
8MOOXas`dd O`
rO ƸqGhm0{jSն .
RyT'RZ|瓟0 e
-%%c<h|5Ă(ZɪP&WZ3a1܈g
+%%c<h|5Ă(ZɪP&WZ3a1܈g
z NI=j+30^\3Ihs 4]).KnU~œP4t/g#
wF IlK7
Jx[AGGeVR4,ȿzidՍ$Bs:307:Ŗf0;Vfq+DyǪ_%(wx8U'4x=
Fg:V,RZAfvE8qK:2fTNO H~ {1)Kh@o1wa m`7[lzAkCg MtTT`5prӓy8S WExQ^ *Q53o5Ϙͧ˅kq&PJ7RNo!=}y}I8(אv)0($%9h.p`Mp`䭂'TGtr5ӸԖJ,Z&y-[(|@ Vl!?-~bilqW\6u.x-Cҧ2N3!0jV”+ކxcجf7EX]˄K0ó2e^ȏ(0Map5vؚlnv\O"˅;( AyΊM]}.Wȅk[ E Đר:H{U|xmSSN-|_9Aw
-g'1ˁFg,ݕ˥w%fEc}{8%sŋ$4,b+Eݻm@`-}W%Ȉthbf;ޣn
+g'1ˁFg,ݕ˥w%fEc}{8%sŋ$4,b+Eݻm@`-}W%Ȉthbf;ޣn
endobj
54 0 obj
<< /A << /D (section.7) /S /GoTo >> /Border [ 0 0 0 ] /C [ 0.701176 0.4 0.414118 ] /H /I /Rect [ 145.524 690.827 152.196 701.685 ] /Subtype /Link /Type /Annot >>
@@ -19892,7 +19897,7 @@ endobj
<< /Count 29 /Kids [ 1884 0 R 1 0 R 9 0 R 16 0 R 22 0 R 31 0 R 37 0 R 43 0 R 47 0 R 51 0 R 58 0 R 64 0 R 73 0 R 83 0 R 87 0 R 96 0 R 100 0 R 107 0 R 116 0 R 122 0 R 129 0 R 141 0 R 147 0 R 154 0 R 170 0 R 176 0 R 180 0 R 184 0 R 192 0 R ] /Type /Pages >>
endobj
218 0 obj
-<< /Author <feff0041006c006500780061006e00640065007200200047007200610068006e> /CreationDate (D:20220804170136+02'00') /Creator <feff004c006100540065005800200077006900740068002000680079007000650072007200650066> /Keywords <feff0069006e0063006c00750064006500200070006f0072007400610062006c0065002000500044004600200061006e0069006d006100740069006f006e002000530056004700200061006e0069006d006100740069006f006e00200061006e0069006d0061007400650064002000500044004600200061006e0069006d006100740065006400200053005600470020006400760069007300760067006d002000680074006d006c0020005400650058003400680074002000770065006200200061006e0069006d006100740069006e006700200065006d00620065006400200061006e0069006d00610074006500640020006700720061007000680069006300730020004c00610054006500580020007000640066004c00610054006500580020004c00750061004c00610054006500580020005000530054007200690063006b00730020007000670066002000540069006b005a0020004c0061005400650058002d00700069006300740075007200650020004d0065007400610050006f0073007400200069006e006c0069006e006500200067007200610070006800690063007300200076006500630074006f007200200067007200610070006800690063007300200061006e0069006d006100740065006400200047004900460020004c006100540065005800200064007600690070007300200070007300320070006400660020006400760069007000640066006d0078002000580065004c00610054006500580020004a0061007600610053006300720069007000740020004100630072006f00620061007400200052006500610064006500720020004b004400450020004f006b0075006c006100720020005000440046002d0058004300680061006e0067006500200046006f0078006900740020005200650061006400650072002000460069007200650066006f00780020004300680072006f006d00650020004300680072006f006d00690075006d> /ModDate (D:20220804170136+02'00') /Producer (GPL Ghostscript 9.55.0) /Subject <feff0044006f00630075006d0065006e0074006100740069006f006e> /Title <feff00540068006500200061006e0069006d0061007400650020005000610063006b006100670065> >>
+<< /Author <feff0041006c006500780061006e00640065007200200047007200610068006e> /CreationDate (D:20220915163953+02'00') /Creator <feff004c006100540065005800200077006900740068002000680079007000650072007200650066> /Keywords <feff0069006e0063006c00750064006500200070006f0072007400610062006c0065002000500044004600200061006e0069006d006100740069006f006e002000530056004700200061006e0069006d006100740069006f006e00200061006e0069006d0061007400650064002000500044004600200061006e0069006d006100740065006400200053005600470020006400760069007300760067006d002000680074006d006c0020005400650058003400680074002000770065006200200061006e0069006d006100740069006e006700200065006d00620065006400200061006e0069006d00610074006500640020006700720061007000680069006300730020004c00610054006500580020007000640066004c00610054006500580020004c00750061004c00610054006500580020005000530054007200690063006b00730020007000670066002000540069006b005a0020004c0061005400650058002d00700069006300740075007200650020004d0065007400610050006f0073007400200069006e006c0069006e006500200067007200610070006800690063007300200076006500630074006f007200200067007200610070006800690063007300200061006e0069006d006100740065006400200047004900460020004c006100540065005800200064007600690070007300200070007300320070006400660020006400760069007000640066006d0078002000580065004c00610054006500580020004a0061007600610053006300720069007000740020004100630072006f00620061007400200052006500610064006500720020004b004400450020004f006b0075006c006100720020005000440046002d0058004300680061006e0067006500200046006f0078006900740020005200650061006400650072002000460069007200650066006f00780020004300680072006f006d00650020004300680072006f006d00690075006d> /ModDate (D:20220915163953+02'00') /Producer (GPL Ghostscript 9.55.0) /Subject <feff0044006f00630075006d0065006e0074006100740069006f006e> /Title <feff00540068006500200061006e0069006d0061007400650020005000610063006b006100670065> >>
endobj
219 0 obj
<< /Limits [ (Doc-Start) (table.4) ] /Names [ (Doc-Start) 221 0 R (Hfootnote.1) 232 0 R (Item.1) 587 0 R (Item.2) 588 0 R (Item.3) 589 0 R (Item.4) 590 0 R (Item.5) 591 0 R (Item.6) 592 0 R (Item.7) 593 0 R (Item.8) 595 0 R (beginend) 242 0 R (cite.chupin) 598 0 R (cite.dvisvgm) 599 0 R (cite.gilg05) 600 0 R (cite.hol) 601 0 R (cite.luque12) 602 0 R (cite.media4svg) 603 0 R (cite.media9) 604 0 R (cite.texsx) 605 0 R (dest:mem) 586 0 R (figure.1) 323 0 R (figure.2) 341 0 R (figure.3) 412 0 R (figure.4) 424 0 R (figure.5) 508 0 R (lstlisting.-1) 255 0 R (lstlisting.-2) 265 0 R (lstlisting.-3) 284 0 R (lstlisting.-4) 324 0 R (lstlisting.-5) 370 0 R (lstlisting.-6) 413 0 R (lstlisting.-7) 480 0 R (lstlisting.-8) 556 0 R (lstlisting.-9) 578 0 R (lstnumber.-1.1) 256 0 R (lstnumber.-1.2) 257 0 R (lstnumber.-1.3) 258 0 R (lstnumber.-1.4) 259 0 R (lstnumber.-1.5) 260 0 R (lstnumber.-1.6) 261 0 R (lstnumber.-1.7) 262 0 R (lstnumber.-2.1) 266 0 R (lstnumber.-2.10) 275 0 R (lstnumber.-2.11) 276 0 R (lstnumber.-2.12) 277 0 R (lstnumber.-2.2) 267 0 R (lstnumber.-2.3) 268 0 R (lstnumber.-2.4) 269 0 R (lstnumber.-2.5) 270 0 R (lstnumber.-2.6) 271 0 R (lstnumber.-2.7) 272 0 R (lstnumber.-2.8) 273 0 R (lstnumber.-2.9) 274 0 R (lstnumber.-3.1) 285 0 R (lstnumber.-3.10) 294 0 R (lstnumber.-3.11) 295 0 R (lstnumber.-3.12) 296 0 R (lstnumber.-3.13) 297 0 R (lstnumber.-3.14) 298 0 R (lstnumber.-3.15) 299 0 R (lstnumber.-3.16) 300 0 R (lstnumber.-3.17) 301 0 R (lstnumber.-3.18) 302 0 R (lstnumber.-3.19) 303 0 R (lstnumber.-3.2) 286 0 R (lstnumber.-3.20) 304 0 R (lstnumber.-3.21) 305 0 R (lstnumber.-3.22) 306 0 R (lstnumber.-3.23) 307 0 R (lstnumber.-3.24) 308 0 R (lstnumber.-3.25) 309 0 R (lstnumber.-3.26) 310 0 R (lstnumber.-3.27) 311 0 R (lstnumber.-3.28) 312 0 R (lstnumber.-3.29) 313 0 R (lstnumber.-3.3) 287 0 R (lstnumber.-3.30) 314 0 R (lstnumber.-3.31) 315 0 R (lstnumber.-3.32) 316 0 R (lstnumber.-3.33) 317 0 R (lstnumber.-3.34) 318 0 R (lstnumber.-3.35) 319 0 R (lstnumber.-3.36) 320 0 R (lstnumber.-3.37) 321 0 R (lstnumber.-3.4) 288 0 R (lstnumber.-3.5) 289 0 R (lstnumber.-3.6) 290 0 R (lstnumber.-3.7) 291 0 R (lstnumber.-3.8) 292 0 R (lstnumber.-3.9) 293 0 R (lstnumber.-4.1) 325 0 R (lstnumber.-4.10) 334 0 R (lstnumber.-4.11) 335 0 R (lstnumber.-4.12) 336 0 R (lstnumber.-4.13) 337 0 R (lstnumber.-4.14) 338 0 R (lstnumber.-4.15) 339 0 R (lstnumber.-4.16) 342 0 R (lstnumber.-4.17) 343 0 R (lstnumber.-4.18) 344 0 R (lstnumber.-4.19) 345 0 R (lstnumber.-4.2) 326 0 R (lstnumber.-4.20) 346 0 R (lstnumber.-4.21) 347 0 R (lstnumber.-4.22) 348 0 R (lstnumber.-4.23) 349 0 R (lstnumber.-4.24) 350 0 R (lstnumber.-4.25) 351 0 R (lstnumber.-4.26) 352 0 R (lstnumber.-4.27) 353 0 R (lstnumber.-4.28) 354 0 R (lstnumber.-4.29) 355 0 R (lstnumber.-4.3) 327 0 R (lstnumber.-4.30) 356 0 R (lstnumber.-4.31) 357 0 R (lstnumber.-4.32) 358 0 R (lstnumber.-4.33) 359 0 R (lstnumber.-4.34) 360 0 R (lstnumber.-4.35) 361 0 R (lstnumber.-4.36) 362 0 R (lstnumber.-4.37) 363 0 R (lstnumber.-4.38) 364 0 R (lstnumber.-4.39) 366 0 R (lstnumber.-4.4) 328 0 R (lstnumber.-4.40) 367 0 R (lstnumber.-4.41) 368 0 R (lstnumber.-4.5) 329 0 R (lstnumber.-4.6) 330 0 R (lstnumber.-4.7) 331 0 R (lstnumber.-4.8) 332 0 R (lstnumber.-4.9) 333 0 R (lstnumber.-5.1) 371 0 R (lstnumber.-5.10) 380 0 R (lstnumber.-5.11) 381 0 R (lstnumber.-5.12) 382 0 R (lstnumber.-5.13) 383 0 R (lstnumber.-5.14) 384 0 R (lstnumber.-5.15) 385 0 R (lstnumber.-5.16) 386 0 R (lstnumber.-5.17) 387 0 R (lstnumber.-5.18) 388 0 R (lstnumber.-5.19) 389 0 R (lstnumber.-5.2) 372 0 R (lstnumber.-5.20) 390 0 R (lstnumber.-5.21) 391 0 R (lstnumber.-5.22) 392 0 R (lstnumber.-5.23) 393 0 R (lstnumber.-5.24) 394 0 R (lstnumber.-5.25) 395 0 R (lstnumber.-5.26) 396 0 R (lstnumber.-5.27) 397 0 R (lstnumber.-5.28) 398 0 R (lstnumber.-5.29) 399 0 R (lstnumber.-5.3) 373 0 R (lstnumber.-5.30) 400 0 R (lstnumber.-5.31) 401 0 R (lstnumber.-5.32) 402 0 R (lstnumber.-5.33) 403 0 R (lstnumber.-5.34) 404 0 R (lstnumber.-5.35) 405 0 R (lstnumber.-5.36) 406 0 R (lstnumber.-5.37) 407 0 R (lstnumber.-5.38) 408 0 R (lstnumber.-5.39) 409 0 R (lstnumber.-5.4) 374 0 R (lstnumber.-5.40) 410 0 R (lstnumber.-5.5) 375 0 R (lstnumber.-5.6) 376 0 R (lstnumber.-5.7) 377 0 R (lstnumber.-5.8) 378 0 R (lstnumber.-5.9) 379 0 R (lstnumber.-6.1) 414 0 R (lstnumber.-6.10) 425 0 R (lstnumber.-6.11) 426 0 R (lstnumber.-6.12) 427 0 R (lstnumber.-6.13) 428 0 R (lstnumber.-6.14) 429 0 R (lstnumber.-6.15) 430 0 R (lstnumber.-6.16) 431 0 R (lstnumber.-6.17) 432 0 R (lstnumber.-6.18) 433 0 R (lstnumber.-6.19) 434 0 R (lstnumber.-6.2) 415 0 R (lstnumber.-6.20) 435 0 R (lstnumber.-6.21) 436 0 R (lstnumber.-6.22) 437 0 R (lstnumber.-6.23) 438 0 R (lstnumber.-6.24) 439 0 R (lstnumber.-6.25) 440 0 R (lstnumber.-6.26) 441 0 R (lstnumber.-6.27) 442 0 R (lstnumber.-6.28) 444 0 R (lstnumber.-6.29) 445 0 R (lstnumber.-6.3) 416 0 R (lstnumber.-6.30) 446 0 R (lstnumber.-6.31) 447 0 R (lstnumber.-6.32) 448 0 R (lstnumber.-6.33) 449 0 R (lstnumber.-6.34) 450 0 R (lstnumber.-6.35) 451 0 R (lstnumber.-6.36) 452 0 R (lstnumber.-6.37) 453 0 R (lstnumber.-6.38) 454 0 R (lstnumber.-6.39) 455 0 R (lstnumber.-6.4) 417 0 R (lstnumber.-6.40) 456 0 R (lstnumber.-6.41) 457 0 R (lstnumber.-6.42) 458 0 R (lstnumber.-6.43) 459 0 R (lstnumber.-6.44) 460 0 R (lstnumber.-6.45) 461 0 R (lstnumber.-6.46) 462 0 R (lstnumber.-6.47) 463 0 R (lstnumber.-6.48) 464 0 R (lstnumber.-6.49) 465 0 R (lstnumber.-6.5) 418 0 R (lstnumber.-6.50) 466 0 R (lstnumber.-6.51) 467 0 R (lstnumber.-6.52) 468 0 R (lstnumber.-6.53) 469 0 R (lstnumber.-6.54) 470 0 R (lstnumber.-6.55) 471 0 R (lstnumber.-6.56) 472 0 R (lstnumber.-6.57) 473 0 R (lstnumber.-6.58) 474 0 R (lstnumber.-6.59) 475 0 R (lstnumber.-6.6) 419 0 R (lstnumber.-6.60) 476 0 R (lstnumber.-6.61) 477 0 R (lstnumber.-6.62) 478 0 R (lstnumber.-6.63) 479 0 R (lstnumber.-6.7) 420 0 R (lstnumber.-6.8) 421 0 R (lstnumber.-6.9) 422 0 R (lstnumber.-7.1) 481 0 R (lstnumber.-7.10) 491 0 R (lstnumber.-7.11) 492 0 R (lstnumber.-7.12) 493 0 R (lstnumber.-7.13) 494 0 R (lstnumber.-7.14) 495 0 R (lstnumber.-7.15) 496 0 R (lstnumber.-7.16) 497 0 R (lstnumber.-7.17) 498 0 R (lstnumber.-7.18) 499 0 R (lstnumber.-7.19) 500 0 R (lstnumber.-7.2) 482 0 R (lstnumber.-7.20) 501 0 R (lstnumber.-7.21) 502 0 R (lstnumber.-7.22) 503 0 R (lstnumber.-7.23) 504 0 R (lstnumber.-7.24) 505 0 R (lstnumber.-7.25) 506 0 R (lstnumber.-7.26) 507 0 R (lstnumber.-7.27) 510 0 R (lstnumber.-7.28) 511 0 R (lstnumber.-7.29) 512 0 R (lstnumber.-7.3) 483 0 R (lstnumber.-7.30) 513 0 R (lstnumber.-7.31) 514 0 R (lstnumber.-7.32) 515 0 R (lstnumber.-7.33) 516 0 R (lstnumber.-7.34) 517 0 R (lstnumber.-7.35) 518 0 R (lstnumber.-7.36) 519 0 R (lstnumber.-7.37) 520 0 R (lstnumber.-7.38) 521 0 R (lstnumber.-7.39) 522 0 R (lstnumber.-7.4) 485 0 R (lstnumber.-7.40) 523 0 R (lstnumber.-7.41) 524 0 R (lstnumber.-7.42) 525 0 R (lstnumber.-7.43) 526 0 R (lstnumber.-7.44) 527 0 R (lstnumber.-7.45) 528 0 R (lstnumber.-7.46) 529 0 R (lstnumber.-7.47) 530 0 R (lstnumber.-7.48) 531 0 R (lstnumber.-7.49) 532 0 R (lstnumber.-7.5) 486 0 R (lstnumber.-7.50) 533 0 R (lstnumber.-7.51) 534 0 R (lstnumber.-7.52) 535 0 R (lstnumber.-7.53) 536 0 R (lstnumber.-7.54) 537 0 R (lstnumber.-7.55) 538 0 R (lstnumber.-7.56) 539 0 R (lstnumber.-7.57) 540 0 R (lstnumber.-7.58) 541 0 R (lstnumber.-7.59) 542 0 R (lstnumber.-7.6) 487 0 R (lstnumber.-7.60) 543 0 R (lstnumber.-7.61) 544 0 R (lstnumber.-7.62) 545 0 R (lstnumber.-7.63) 546 0 R (lstnumber.-7.64) 547 0 R (lstnumber.-7.65) 548 0 R (lstnumber.-7.66) 549 0 R (lstnumber.-7.67) 550 0 R (lstnumber.-7.68) 551 0 R (lstnumber.-7.69) 552 0 R (lstnumber.-7.7) 488 0 R (lstnumber.-7.70) 553 0 R (lstnumber.-7.8) 489 0 R (lstnumber.-7.9) 490 0 R (lstnumber.-8.1) 557 0 R (lstnumber.-8.10) 566 0 R (lstnumber.-8.11) 567 0 R (lstnumber.-8.12) 568 0 R (lstnumber.-8.13) 569 0 R (lstnumber.-8.14) 570 0 R (lstnumber.-8.15) 571 0 R (lstnumber.-8.16) 572 0 R (lstnumber.-8.17) 573 0 R (lstnumber.-8.18) 574 0 R (lstnumber.-8.19) 575 0 R (lstnumber.-8.2) 558 0 R (lstnumber.-8.20) 576 0 R (lstnumber.-8.3) 559 0 R (lstnumber.-8.4) 560 0 R (lstnumber.-8.5) 561 0 R (lstnumber.-8.6) 562 0 R (lstnumber.-8.7) 563 0 R (lstnumber.-8.8) 564 0 R (lstnumber.-8.9) 565 0 R (lstnumber.-9.1) 579 0 R (lstnumber.-9.2) 580 0 R (lstnumber.-9.3) 581 0 R (lstnumber.-9.4) 582 0 R (lstnumber.-9.5) 583 0 R (page.1) 220 0 R (page.10) 241 0 R (page.11) 244 0 R (page.12) 246 0 R (page.13) 250 0 R (page.14) 252 0 R (page.15) 263 0 R (page.16) 278 0 R (page.17) 281 0 R (page.18) 322 0 R (page.19) 340 0 R (page.2) 223 0 R (page.20) 365 0 R (page.21) 411 0 R (page.22) 423 0 R (page.23) 443 0 R (page.24) 484 0 R (page.25) 509 0 R (page.26) 555 0 R (page.27) 577 0 R (page.28) 585 0 R (page.29) 594 0 R (page.3) 226 0 R (page.4) 229 0 R (page.5) 231 0 R (page.6) 233 0 R (page.7) 236 0 R (page.8) 239 0 R (page.9) 240 0 R (section*.1) 222 0 R (section*.2) 234 0 R (section*.3) 235 0 R (section*.4) 245 0 R (section*.5) 247 0 R (section*.6) 249 0 R (section*.7) 251 0 R (section*.8) 254 0 R (section*.9) 597 0 R (section.1) 224 0 R (section.10) 584 0 R (section.11) 596 0 R (section.2) 225 0 R (section.3) 227 0 R (section.4) 228 0 R (section.5) 230 0 R (section.6) 237 0 R (section.7) 264 0 R (section.8) 282 0 R (section.9) 554 0 R (subsection.6.1) 238 0 R (subsection.6.2) 243 0 R (subsection.8.1) 283 0 R (subsection.8.2) 369 0 R (table.1) 248 0 R (table.2) 253 0 R (table.3) 279 0 R (table.4) 280 0 R ] >>
@@ -21074,10 +21079,10 @@ stream
<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/'><pdf:Producer>GPL Ghostscript 9.55.0</pdf:Producer>
<pdf:Keywords>include portable PDF animation SVG animation animated PDF animated SVG dvisvgm html TeX4ht web animating embed animated graphics LaTeX pdfLaTeX LuaLaTeX PSTricks pgf TikZ LaTeX-picture MetaPost inline graphics vector graphics animated GIF LaTeX dvips ps2pdf dvipdfmx XeLaTeX JavaScript Acrobat Reader KDE Okular PDF-XChange Foxit Reader Firefox Chrome Chromium</pdf:Keywords>
</rdf:Description>
-<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2022-08-04T17:01:36+02:00</xmp:ModifyDate>
-<xmp:CreateDate>2022-08-04T17:01:36+02:00</xmp:CreateDate>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2022-09-15T16:39:53+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2022-09-15T16:39:53+02:00</xmp:CreateDate>
<xmp:CreatorTool>LaTeX with hyperref</xmp:CreatorTool></rdf:Description>
-<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:e29b451c-4c22-11f8-0000-6fab357213a8'/>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:cf4f4d4f-6d20-11f8-0000-8217dcd6e355'/>
<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>The animate Package</rdf:li></rdf:Alt></dc:title><dc:creator><rdf:Seq><rdf:li>Alexander Grahn</rdf:li></rdf:Seq></dc:creator><dc:description><rdf:Alt><rdf:li xml:lang='x-default'>Documentation</rdf:li></rdf:Alt></dc:description></rdf:Description>
</rdf:RDF>
</x:xmpmeta>
@@ -21088,616 +21093,616 @@ endobj
xref
0 610
0000000000 65535 f
-0003171583 00000 n
-0003171791 00000 n
-0003171919 00000 n
-0003177808 00000 n
-0003177986 00000 n
-0003178164 00000 n
-0003178346 00000 n
-0003178395 00000 n
-0003178470 00000 n
-0003178678 00000 n
-0003178807 00000 n
-0003181921 00000 n
-0003182173 00000 n
-0003182352 00000 n
-0003182402 00000 n
-0003182465 00000 n
-0003182688 00000 n
-0003182817 00000 n
-0003187589 00000 n
-0003187841 00000 n
-0003187889 00000 n
-0003187965 00000 n
-0003188175 00000 n
-0003188304 00000 n
-0003194463 00000 n
-0003194643 00000 n
-0003194878 00000 n
-0003195142 00000 n
-0003195192 00000 n
-0003195267 00000 n
-0003196350 00000 n
-0003196560 00000 n
-0003196689 00000 n
-0003204483 00000 n
-0003204666 00000 n
-0003204716 00000 n
-0003204805 00000 n
-0003205007 00000 n
-0003205136 00000 n
-0003209732 00000 n
-0003209910 00000 n
-0003209960 00000 n
-0003210036 00000 n
-0003210212 00000 n
-0003210341 00000 n
-0003214561 00000 n
-0003214610 00000 n
-0003214786 00000 n
-0003214915 00000 n
-0003221023 00000 n
-0003221072 00000 n
-0003221281 00000 n
-0003221411 00000 n
-0003227012 00000 n
-0003227190 00000 n
-0003227368 00000 n
-0003227418 00000 n
-0003227495 00000 n
-0003227697 00000 n
-0003227827 00000 n
-0003234888 00000 n
-0003235067 00000 n
-0003235117 00000 n
-0003235179 00000 n
-0003235410 00000 n
-0003235540 00000 n
-0003240939 00000 n
-0003241115 00000 n
-0003241292 00000 n
-0003241469 00000 n
-0003241652 00000 n
-0003241702 00000 n
-0003241764 00000 n
-0003241994 00000 n
-0003242124 00000 n
-0003248780 00000 n
-0003248956 00000 n
-0003249133 00000 n
-0003249316 00000 n
-0003249496 00000 n
-0003249674 00000 n
-0003249724 00000 n
-0003249786 00000 n
-0003249970 00000 n
-0003250100 00000 n
-0003253147 00000 n
-0003253209 00000 n
-0003253432 00000 n
-0003253562 00000 n
-0003257144 00000 n
-0003257320 00000 n
-0003257496 00000 n
-0003257679 00000 n
-0003257858 00000 n
-0003257908 00000 n
-0003257971 00000 n
-0003258155 00000 n
-0003258285 00000 n
-0003261923 00000 n
-0003261972 00000 n
-0003262188 00000 n
-0003262319 00000 n
-0003265705 00000 n
-0003265883 00000 n
-0003266061 00000 n
-0003266112 00000 n
-0003266231 00000 n
-0003266664 00000 n
-0003266795 00000 n
-0003270442 00000 n
-0003270694 00000 n
-0003270872 00000 n
-0003271053 00000 n
-0003271496 00000 n
-0003271547 00000 n
-0003271653 00000 n
-0003272876 00000 n
-0003273007 00000 n
-0003274256 00000 n
-0003274514 00000 n
-0003279563 00000 n
-0003279711 00000 n
-0003279927 00000 n
-0003280058 00000 n
-0003282644 00000 n
-0003282822 00000 n
-0003283003 00000 n
-0003283054 00000 n
-0003283132 00000 n
-0003283760 00000 n
-0003283891 00000 n
-0003287891 00000 n
-0003288148 00000 n
-0003288326 00000 n
-0003288499 00000 n
-0003288735 00000 n
-0003289193 00000 n
-0003289244 00000 n
-0003289336 00000 n
-0003290001 00000 n
-0003290100 00000 n
-0003292150 00000 n
-0003292281 00000 n
-0003293371 00000 n
-0003293628 00000 n
-0003298307 00000 n
-0003298371 00000 n
-0003298587 00000 n
-0003298718 00000 n
-0003303333 00000 n
-0003303511 00000 n
-0003303693 00000 n
-0003303744 00000 n
-0003303794 00000 n
-0003304376 00000 n
-0003304507 00000 n
-0003305201 00000 n
-0003305435 00000 n
-0003659895 00000 n
-0003659972 00000 n
-0003662261 00000 n
-0003662336 00000 n
-0003662493 00000 n
-0003662585 00000 n
-0003662727 00000 n
-0003662897 00000 n
-0003663160 00000 n
-0003663416 00000 n
-0003664302 00000 n
-0003664381 00000 n
-0003664589 00000 n
-0003664720 00000 n
-0003667218 00000 n
-0003667400 00000 n
-0003667451 00000 n
-0003667515 00000 n
-0003667695 00000 n
-0003667826 00000 n
-0003672575 00000 n
-0003672639 00000 n
-0003672819 00000 n
-0003672950 00000 n
-0003678846 00000 n
-0003678910 00000 n
-0003679134 00000 n
-0003679265 00000 n
-0003685042 00000 n
-0003685220 00000 n
-0003685396 00000 n
-0003685572 00000 n
-0003685623 00000 n
-0003685699 00000 n
-0003685995 00000 n
-0003686126 00000 n
-0003691449 00000 n
-0003691672 00000 n
-0003691852 00000 n
-0003692031 00000 n
-0003692210 00000 n
-0003692466 00000 n
-0003692722 00000 n
-0003692924 00000 n
-0003693137 00000 n
-0003693355 00000 n
-0003693570 00000 n
-0003693793 00000 n
-0003694016 00000 n
-0003694067 00000 n
-0003694144 00000 n
-0003694626 00000 n
-0003695003 00000 n
-0003695223 00000 n
-0003695463 00000 n
-0003696437 00000 n
-0003698815 00000 n
-0003699160 00000 n
-0003699383 00000 n
-0003699655 00000 n
-0003701570 00000 n
-0003711033 00000 n
-0003711104 00000 n
-0003711172 00000 n
-0003711240 00000 n
-0003711305 00000 n
-0003711369 00000 n
-0003711434 00000 n
-0003711502 00000 n
-0003711567 00000 n
-0003711632 00000 n
-0003711698 00000 n
-0003711762 00000 n
-0003711831 00000 n
-0003711897 00000 n
-0003711963 00000 n
-0003712029 00000 n
-0003712095 00000 n
-0003712164 00000 n
-0003712230 00000 n
-0003712296 00000 n
-0003712362 00000 n
-0003712431 00000 n
-0003712497 00000 n
-0003712562 00000 n
-0003712627 00000 n
-0003712696 00000 n
-0003712762 00000 n
-0003712828 00000 n
-0003712893 00000 n
-0003712959 00000 n
-0003713025 00000 n
-0003713094 00000 n
-0003713160 00000 n
-0003713226 00000 n
-0003713292 00000 n
-0003713358 00000 n
-0003713424 00000 n
-0003713489 00000 n
-0003713555 00000 n
-0003713621 00000 n
-0003713687 00000 n
-0003713752 00000 n
-0003713818 00000 n
-0003713884 00000 n
-0003713953 00000 n
-0003714019 00000 n
-0003714085 00000 n
-0003714151 00000 n
-0003714217 00000 n
-0003714282 00000 n
-0003714348 00000 n
-0003714414 00000 n
-0003714480 00000 n
-0003714546 00000 n
-0003714612 00000 n
-0003714678 00000 n
-0003714744 00000 n
-0003714810 00000 n
-0003714876 00000 n
-0003714942 00000 n
-0003715008 00000 n
-0003715074 00000 n
-0003715144 00000 n
-0003715211 00000 n
-0003715278 00000 n
-0003715345 00000 n
-0003715412 00000 n
-0003715479 00000 n
-0003715546 00000 n
-0003715612 00000 n
-0003715678 00000 n
-0003715745 00000 n
-0003715812 00000 n
-0003715879 00000 n
-0003715945 00000 n
-0003716011 00000 n
-0003716078 00000 n
-0003716145 00000 n
-0003716212 00000 n
-0003716278 00000 n
-0003716345 00000 n
-0003716412 00000 n
-0003716479 00000 n
-0003716545 00000 n
-0003716611 00000 n
-0003716678 00000 n
-0003716745 00000 n
-0003716812 00000 n
-0003716879 00000 n
-0003716946 00000 n
-0003717013 00000 n
-0003717080 00000 n
-0003717147 00000 n
-0003717214 00000 n
-0003717281 00000 n
-0003717348 00000 n
-0003717415 00000 n
-0003717482 00000 n
-0003717548 00000 n
-0003717615 00000 n
-0003717682 00000 n
-0003717749 00000 n
-0003717816 00000 n
-0003717883 00000 n
-0003717950 00000 n
-0003718015 00000 n
-0003718082 00000 n
-0003718149 00000 n
-0003718216 00000 n
-0003718283 00000 n
-0003718350 00000 n
-0003718417 00000 n
-0003718484 00000 n
-0003718551 00000 n
-0003718618 00000 n
-0003718685 00000 n
-0003718752 00000 n
-0003718819 00000 n
-0003718886 00000 n
-0003718953 00000 n
-0003719020 00000 n
-0003719090 00000 n
-0003719157 00000 n
-0003719224 00000 n
-0003719291 00000 n
-0003719358 00000 n
-0003719425 00000 n
-0003719490 00000 n
-0003719557 00000 n
-0003719624 00000 n
-0003719691 00000 n
-0003719758 00000 n
-0003719825 00000 n
-0003719892 00000 n
-0003719959 00000 n
-0003720026 00000 n
-0003720092 00000 n
-0003720158 00000 n
-0003720225 00000 n
-0003720292 00000 n
-0003720359 00000 n
-0003720425 00000 n
-0003720492 00000 n
-0003720559 00000 n
-0003720626 00000 n
-0003720693 00000 n
-0003720760 00000 n
-0003720827 00000 n
-0003720894 00000 n
-0003720961 00000 n
-0003721028 00000 n
-0003721095 00000 n
-0003721162 00000 n
-0003721229 00000 n
-0003721296 00000 n
-0003721363 00000 n
-0003721429 00000 n
-0003721496 00000 n
-0003721563 00000 n
-0003721630 00000 n
-0003721697 00000 n
-0003721764 00000 n
-0003721831 00000 n
-0003721898 00000 n
-0003721965 00000 n
-0003722032 00000 n
-0003722099 00000 n
-0003722166 00000 n
-0003722233 00000 n
-0003722300 00000 n
-0003722367 00000 n
-0003722431 00000 n
-0003722498 00000 n
-0003722562 00000 n
-0003722629 00000 n
-0003722695 00000 n
-0003722762 00000 n
-0003722829 00000 n
-0003722896 00000 n
-0003722963 00000 n
-0003723029 00000 n
-0003723096 00000 n
-0003723163 00000 n
-0003723230 00000 n
-0003723297 00000 n
-0003723363 00000 n
-0003723430 00000 n
-0003723497 00000 n
-0003723564 00000 n
-0003723630 00000 n
-0003723696 00000 n
-0003723763 00000 n
-0003723833 00000 n
-0003723900 00000 n
-0003723967 00000 n
-0003724034 00000 n
-0003724101 00000 n
-0003724168 00000 n
-0003724235 00000 n
-0003724302 00000 n
-0003724369 00000 n
-0003724436 00000 n
-0003724503 00000 n
-0003724570 00000 n
-0003724637 00000 n
-0003724704 00000 n
-0003724771 00000 n
-0003724838 00000 n
-0003724905 00000 n
-0003724972 00000 n
-0003725039 00000 n
-0003725106 00000 n
-0003725173 00000 n
-0003725240 00000 n
-0003725307 00000 n
-0003725373 00000 n
-0003725437 00000 n
-0003725504 00000 n
-0003725571 00000 n
-0003725638 00000 n
-0003725705 00000 n
-0003725772 00000 n
-0003725839 00000 n
-0003725906 00000 n
-0003725976 00000 n
-0003726043 00000 n
-0003726110 00000 n
-0003726177 00000 n
-0003726243 00000 n
-0003726309 00000 n
-0003726376 00000 n
-0003726443 00000 n
-0003726510 00000 n
-0003726576 00000 n
-0003726642 00000 n
-0003726709 00000 n
-0003726776 00000 n
-0003726843 00000 n
-0003726909 00000 n
-0003726976 00000 n
-0003727043 00000 n
-0003727110 00000 n
-0003727177 00000 n
-0003727244 00000 n
-0003727311 00000 n
-0003727378 00000 n
-0003727442 00000 n
-0003727509 00000 n
-0003727576 00000 n
-0003727643 00000 n
-0003727710 00000 n
-0003727777 00000 n
-0003727843 00000 n
-0003727910 00000 n
-0003727977 00000 n
-0003728044 00000 n
-0003728111 00000 n
-0003728178 00000 n
-0003728245 00000 n
-0003728312 00000 n
-0003728379 00000 n
-0003728446 00000 n
-0003728512 00000 n
-0003728579 00000 n
-0003728643 00000 n
-0003728710 00000 n
-0003728777 00000 n
-0003728844 00000 n
-0003728911 00000 n
-0003728977 00000 n
-0003729043 00000 n
-0003729110 00000 n
-0003729177 00000 n
-0003729244 00000 n
-0003729310 00000 n
-0003729376 00000 n
-0003729443 00000 n
-0003729510 00000 n
-0003729577 00000 n
-0003729643 00000 n
-0003729710 00000 n
-0003729777 00000 n
-0003729844 00000 n
-0003729911 00000 n
-0003729978 00000 n
-0003730045 00000 n
-0003730112 00000 n
-0003730176 00000 n
-0003730243 00000 n
-0003730310 00000 n
-0003730380 00000 n
-0003730447 00000 n
-0003730514 00000 n
-0003730581 00000 n
-0003730647 00000 n
-0003730713 00000 n
-0003730780 00000 n
-0003730847 00000 n
-0003730914 00000 n
-0003730980 00000 n
-0003731046 00000 n
-0003731113 00000 n
-0003731180 00000 n
-0003731247 00000 n
-0003731313 00000 n
-0003731380 00000 n
-0003731447 00000 n
-0003731514 00000 n
-0003731581 00000 n
-0003731648 00000 n
-0003731715 00000 n
-0003731782 00000 n
-0003731846 00000 n
-0003731913 00000 n
-0003731980 00000 n
-0003732047 00000 n
-0003732114 00000 n
-0003732181 00000 n
-0003732247 00000 n
-0003732314 00000 n
-0003732381 00000 n
-0003732448 00000 n
-0003732515 00000 n
-0003732582 00000 n
-0003732649 00000 n
-0003732716 00000 n
-0003732783 00000 n
-0003732850 00000 n
-0003732917 00000 n
-0003732984 00000 n
-0003733051 00000 n
-0003733118 00000 n
-0003733185 00000 n
-0003733252 00000 n
-0003733319 00000 n
-0003733386 00000 n
-0003733453 00000 n
-0003733520 00000 n
-0003733587 00000 n
-0003733654 00000 n
-0003733721 00000 n
-0003733788 00000 n
-0003733855 00000 n
-0003733919 00000 n
-0003733986 00000 n
-0003734053 00000 n
-0003734120 00000 n
-0003734187 00000 n
-0003734254 00000 n
-0003734320 00000 n
-0003734387 00000 n
-0003734454 00000 n
-0003734521 00000 n
-0003734588 00000 n
-0003734655 00000 n
-0003734722 00000 n
-0003734789 00000 n
-0003734856 00000 n
-0003734926 00000 n
-0003734993 00000 n
-0003735060 00000 n
-0003735127 00000 n
-0003735194 00000 n
-0003735261 00000 n
-0003735328 00000 n
-0003735395 00000 n
-0003735462 00000 n
-0003735529 00000 n
-0003735596 00000 n
-0003735663 00000 n
-0003735730 00000 n
-0003735797 00000 n
-0003735864 00000 n
-0003735931 00000 n
-0003735998 00000 n
-0003736068 00000 n
-0003736135 00000 n
-0003736202 00000 n
-0003736269 00000 n
-0003736336 00000 n
-0003736403 00000 n
-0003736470 00000 n
-0003736537 00000 n
-0003736604 00000 n
-0003736671 00000 n
-0003736738 00000 n
-0003736805 00000 n
-0003736844 00000 n
-0003736874 00000 n
-0003737159 00000 n
-trailer << /Size 610 /ID [<75e8fb4f5346631caadd4dd62bc0c8cf><c56a8654f67f089b6bb008ec65f15f3a>] >>
+0003171591 00000 n
+0003171799 00000 n
+0003171927 00000 n
+0003177816 00000 n
+0003177994 00000 n
+0003178172 00000 n
+0003178354 00000 n
+0003178403 00000 n
+0003178478 00000 n
+0003178686 00000 n
+0003178815 00000 n
+0003181929 00000 n
+0003182181 00000 n
+0003182360 00000 n
+0003182410 00000 n
+0003182473 00000 n
+0003182696 00000 n
+0003182825 00000 n
+0003187597 00000 n
+0003187849 00000 n
+0003187897 00000 n
+0003187973 00000 n
+0003188183 00000 n
+0003188312 00000 n
+0003194471 00000 n
+0003194651 00000 n
+0003194886 00000 n
+0003195150 00000 n
+0003195200 00000 n
+0003195275 00000 n
+0003196358 00000 n
+0003196568 00000 n
+0003196697 00000 n
+0003204491 00000 n
+0003204674 00000 n
+0003204724 00000 n
+0003204813 00000 n
+0003205015 00000 n
+0003205144 00000 n
+0003209740 00000 n
+0003209918 00000 n
+0003209968 00000 n
+0003210044 00000 n
+0003210220 00000 n
+0003210349 00000 n
+0003214569 00000 n
+0003214618 00000 n
+0003214794 00000 n
+0003214923 00000 n
+0003221031 00000 n
+0003221080 00000 n
+0003221289 00000 n
+0003221419 00000 n
+0003227020 00000 n
+0003227198 00000 n
+0003227376 00000 n
+0003227426 00000 n
+0003227503 00000 n
+0003227705 00000 n
+0003227835 00000 n
+0003234896 00000 n
+0003235075 00000 n
+0003235125 00000 n
+0003235187 00000 n
+0003235418 00000 n
+0003235548 00000 n
+0003240947 00000 n
+0003241123 00000 n
+0003241300 00000 n
+0003241477 00000 n
+0003241660 00000 n
+0003241710 00000 n
+0003241772 00000 n
+0003242002 00000 n
+0003242132 00000 n
+0003248788 00000 n
+0003248964 00000 n
+0003249141 00000 n
+0003249324 00000 n
+0003249504 00000 n
+0003249682 00000 n
+0003249732 00000 n
+0003249794 00000 n
+0003249978 00000 n
+0003250108 00000 n
+0003253155 00000 n
+0003253217 00000 n
+0003253440 00000 n
+0003253570 00000 n
+0003257152 00000 n
+0003257328 00000 n
+0003257504 00000 n
+0003257687 00000 n
+0003257866 00000 n
+0003257916 00000 n
+0003257979 00000 n
+0003258163 00000 n
+0003258293 00000 n
+0003261931 00000 n
+0003261980 00000 n
+0003262196 00000 n
+0003262327 00000 n
+0003265713 00000 n
+0003265891 00000 n
+0003266069 00000 n
+0003266120 00000 n
+0003266239 00000 n
+0003266672 00000 n
+0003266803 00000 n
+0003270450 00000 n
+0003270702 00000 n
+0003270880 00000 n
+0003271061 00000 n
+0003271504 00000 n
+0003271555 00000 n
+0003271661 00000 n
+0003272884 00000 n
+0003273015 00000 n
+0003274264 00000 n
+0003274522 00000 n
+0003279571 00000 n
+0003279719 00000 n
+0003279935 00000 n
+0003280066 00000 n
+0003282652 00000 n
+0003282830 00000 n
+0003283011 00000 n
+0003283062 00000 n
+0003283140 00000 n
+0003283768 00000 n
+0003283899 00000 n
+0003287899 00000 n
+0003288156 00000 n
+0003288334 00000 n
+0003288507 00000 n
+0003288743 00000 n
+0003289201 00000 n
+0003289252 00000 n
+0003289344 00000 n
+0003290009 00000 n
+0003290108 00000 n
+0003292158 00000 n
+0003292289 00000 n
+0003293379 00000 n
+0003293636 00000 n
+0003298315 00000 n
+0003298379 00000 n
+0003298595 00000 n
+0003298726 00000 n
+0003303341 00000 n
+0003303519 00000 n
+0003303701 00000 n
+0003303752 00000 n
+0003303802 00000 n
+0003304384 00000 n
+0003304515 00000 n
+0003305209 00000 n
+0003305443 00000 n
+0003659903 00000 n
+0003659980 00000 n
+0003662269 00000 n
+0003662344 00000 n
+0003662501 00000 n
+0003662593 00000 n
+0003662735 00000 n
+0003662905 00000 n
+0003663168 00000 n
+0003663424 00000 n
+0003664310 00000 n
+0003664389 00000 n
+0003664597 00000 n
+0003664728 00000 n
+0003667226 00000 n
+0003667408 00000 n
+0003667459 00000 n
+0003667523 00000 n
+0003667703 00000 n
+0003667834 00000 n
+0003672583 00000 n
+0003672647 00000 n
+0003672827 00000 n
+0003672958 00000 n
+0003678854 00000 n
+0003678918 00000 n
+0003679142 00000 n
+0003679273 00000 n
+0003685050 00000 n
+0003685228 00000 n
+0003685404 00000 n
+0003685580 00000 n
+0003685631 00000 n
+0003685707 00000 n
+0003686003 00000 n
+0003686134 00000 n
+0003691457 00000 n
+0003691680 00000 n
+0003691860 00000 n
+0003692039 00000 n
+0003692218 00000 n
+0003692474 00000 n
+0003692730 00000 n
+0003692932 00000 n
+0003693145 00000 n
+0003693363 00000 n
+0003693578 00000 n
+0003693801 00000 n
+0003694024 00000 n
+0003694075 00000 n
+0003694152 00000 n
+0003694634 00000 n
+0003695011 00000 n
+0003695231 00000 n
+0003695471 00000 n
+0003696445 00000 n
+0003698823 00000 n
+0003699168 00000 n
+0003699391 00000 n
+0003699663 00000 n
+0003701578 00000 n
+0003711041 00000 n
+0003711112 00000 n
+0003711180 00000 n
+0003711248 00000 n
+0003711313 00000 n
+0003711377 00000 n
+0003711442 00000 n
+0003711510 00000 n
+0003711575 00000 n
+0003711640 00000 n
+0003711706 00000 n
+0003711770 00000 n
+0003711839 00000 n
+0003711905 00000 n
+0003711971 00000 n
+0003712037 00000 n
+0003712103 00000 n
+0003712172 00000 n
+0003712238 00000 n
+0003712304 00000 n
+0003712370 00000 n
+0003712439 00000 n
+0003712505 00000 n
+0003712570 00000 n
+0003712635 00000 n
+0003712704 00000 n
+0003712770 00000 n
+0003712836 00000 n
+0003712901 00000 n
+0003712967 00000 n
+0003713033 00000 n
+0003713102 00000 n
+0003713168 00000 n
+0003713234 00000 n
+0003713300 00000 n
+0003713366 00000 n
+0003713432 00000 n
+0003713497 00000 n
+0003713563 00000 n
+0003713629 00000 n
+0003713695 00000 n
+0003713760 00000 n
+0003713826 00000 n
+0003713892 00000 n
+0003713961 00000 n
+0003714027 00000 n
+0003714093 00000 n
+0003714159 00000 n
+0003714225 00000 n
+0003714290 00000 n
+0003714356 00000 n
+0003714422 00000 n
+0003714488 00000 n
+0003714554 00000 n
+0003714620 00000 n
+0003714686 00000 n
+0003714752 00000 n
+0003714818 00000 n
+0003714884 00000 n
+0003714950 00000 n
+0003715016 00000 n
+0003715082 00000 n
+0003715152 00000 n
+0003715219 00000 n
+0003715286 00000 n
+0003715353 00000 n
+0003715420 00000 n
+0003715487 00000 n
+0003715554 00000 n
+0003715620 00000 n
+0003715686 00000 n
+0003715753 00000 n
+0003715820 00000 n
+0003715887 00000 n
+0003715953 00000 n
+0003716019 00000 n
+0003716086 00000 n
+0003716153 00000 n
+0003716220 00000 n
+0003716286 00000 n
+0003716353 00000 n
+0003716420 00000 n
+0003716487 00000 n
+0003716553 00000 n
+0003716619 00000 n
+0003716686 00000 n
+0003716753 00000 n
+0003716820 00000 n
+0003716887 00000 n
+0003716954 00000 n
+0003717021 00000 n
+0003717088 00000 n
+0003717155 00000 n
+0003717222 00000 n
+0003717289 00000 n
+0003717356 00000 n
+0003717423 00000 n
+0003717490 00000 n
+0003717556 00000 n
+0003717623 00000 n
+0003717690 00000 n
+0003717757 00000 n
+0003717824 00000 n
+0003717891 00000 n
+0003717958 00000 n
+0003718023 00000 n
+0003718090 00000 n
+0003718157 00000 n
+0003718224 00000 n
+0003718291 00000 n
+0003718358 00000 n
+0003718425 00000 n
+0003718492 00000 n
+0003718559 00000 n
+0003718626 00000 n
+0003718693 00000 n
+0003718760 00000 n
+0003718827 00000 n
+0003718894 00000 n
+0003718961 00000 n
+0003719028 00000 n
+0003719098 00000 n
+0003719165 00000 n
+0003719232 00000 n
+0003719299 00000 n
+0003719366 00000 n
+0003719433 00000 n
+0003719498 00000 n
+0003719565 00000 n
+0003719632 00000 n
+0003719699 00000 n
+0003719766 00000 n
+0003719833 00000 n
+0003719900 00000 n
+0003719967 00000 n
+0003720034 00000 n
+0003720100 00000 n
+0003720166 00000 n
+0003720233 00000 n
+0003720300 00000 n
+0003720367 00000 n
+0003720433 00000 n
+0003720500 00000 n
+0003720567 00000 n
+0003720634 00000 n
+0003720701 00000 n
+0003720768 00000 n
+0003720835 00000 n
+0003720902 00000 n
+0003720969 00000 n
+0003721036 00000 n
+0003721103 00000 n
+0003721170 00000 n
+0003721237 00000 n
+0003721304 00000 n
+0003721371 00000 n
+0003721437 00000 n
+0003721504 00000 n
+0003721571 00000 n
+0003721638 00000 n
+0003721705 00000 n
+0003721772 00000 n
+0003721839 00000 n
+0003721906 00000 n
+0003721973 00000 n
+0003722040 00000 n
+0003722107 00000 n
+0003722174 00000 n
+0003722241 00000 n
+0003722308 00000 n
+0003722375 00000 n
+0003722439 00000 n
+0003722506 00000 n
+0003722570 00000 n
+0003722637 00000 n
+0003722703 00000 n
+0003722770 00000 n
+0003722837 00000 n
+0003722904 00000 n
+0003722971 00000 n
+0003723037 00000 n
+0003723104 00000 n
+0003723171 00000 n
+0003723238 00000 n
+0003723305 00000 n
+0003723371 00000 n
+0003723438 00000 n
+0003723505 00000 n
+0003723572 00000 n
+0003723638 00000 n
+0003723704 00000 n
+0003723771 00000 n
+0003723841 00000 n
+0003723908 00000 n
+0003723975 00000 n
+0003724042 00000 n
+0003724109 00000 n
+0003724176 00000 n
+0003724243 00000 n
+0003724310 00000 n
+0003724377 00000 n
+0003724444 00000 n
+0003724511 00000 n
+0003724578 00000 n
+0003724645 00000 n
+0003724712 00000 n
+0003724779 00000 n
+0003724846 00000 n
+0003724913 00000 n
+0003724980 00000 n
+0003725047 00000 n
+0003725114 00000 n
+0003725181 00000 n
+0003725248 00000 n
+0003725315 00000 n
+0003725381 00000 n
+0003725445 00000 n
+0003725512 00000 n
+0003725579 00000 n
+0003725646 00000 n
+0003725713 00000 n
+0003725780 00000 n
+0003725847 00000 n
+0003725914 00000 n
+0003725984 00000 n
+0003726051 00000 n
+0003726118 00000 n
+0003726185 00000 n
+0003726251 00000 n
+0003726317 00000 n
+0003726384 00000 n
+0003726451 00000 n
+0003726518 00000 n
+0003726584 00000 n
+0003726650 00000 n
+0003726717 00000 n
+0003726784 00000 n
+0003726851 00000 n
+0003726917 00000 n
+0003726984 00000 n
+0003727051 00000 n
+0003727118 00000 n
+0003727185 00000 n
+0003727252 00000 n
+0003727319 00000 n
+0003727386 00000 n
+0003727450 00000 n
+0003727517 00000 n
+0003727584 00000 n
+0003727651 00000 n
+0003727718 00000 n
+0003727785 00000 n
+0003727851 00000 n
+0003727918 00000 n
+0003727985 00000 n
+0003728052 00000 n
+0003728119 00000 n
+0003728186 00000 n
+0003728253 00000 n
+0003728320 00000 n
+0003728387 00000 n
+0003728454 00000 n
+0003728520 00000 n
+0003728587 00000 n
+0003728651 00000 n
+0003728718 00000 n
+0003728785 00000 n
+0003728852 00000 n
+0003728919 00000 n
+0003728985 00000 n
+0003729051 00000 n
+0003729118 00000 n
+0003729185 00000 n
+0003729252 00000 n
+0003729318 00000 n
+0003729384 00000 n
+0003729451 00000 n
+0003729518 00000 n
+0003729585 00000 n
+0003729651 00000 n
+0003729718 00000 n
+0003729785 00000 n
+0003729852 00000 n
+0003729919 00000 n
+0003729986 00000 n
+0003730053 00000 n
+0003730120 00000 n
+0003730184 00000 n
+0003730251 00000 n
+0003730318 00000 n
+0003730388 00000 n
+0003730455 00000 n
+0003730522 00000 n
+0003730589 00000 n
+0003730655 00000 n
+0003730721 00000 n
+0003730788 00000 n
+0003730855 00000 n
+0003730922 00000 n
+0003730988 00000 n
+0003731054 00000 n
+0003731121 00000 n
+0003731188 00000 n
+0003731255 00000 n
+0003731321 00000 n
+0003731388 00000 n
+0003731455 00000 n
+0003731522 00000 n
+0003731589 00000 n
+0003731656 00000 n
+0003731723 00000 n
+0003731790 00000 n
+0003731854 00000 n
+0003731921 00000 n
+0003731988 00000 n
+0003732055 00000 n
+0003732122 00000 n
+0003732189 00000 n
+0003732255 00000 n
+0003732322 00000 n
+0003732389 00000 n
+0003732456 00000 n
+0003732523 00000 n
+0003732590 00000 n
+0003732657 00000 n
+0003732724 00000 n
+0003732791 00000 n
+0003732858 00000 n
+0003732925 00000 n
+0003732992 00000 n
+0003733059 00000 n
+0003733126 00000 n
+0003733193 00000 n
+0003733260 00000 n
+0003733327 00000 n
+0003733394 00000 n
+0003733461 00000 n
+0003733528 00000 n
+0003733595 00000 n
+0003733662 00000 n
+0003733729 00000 n
+0003733796 00000 n
+0003733863 00000 n
+0003733927 00000 n
+0003733994 00000 n
+0003734061 00000 n
+0003734128 00000 n
+0003734195 00000 n
+0003734262 00000 n
+0003734328 00000 n
+0003734395 00000 n
+0003734462 00000 n
+0003734529 00000 n
+0003734596 00000 n
+0003734663 00000 n
+0003734730 00000 n
+0003734797 00000 n
+0003734864 00000 n
+0003734934 00000 n
+0003735001 00000 n
+0003735068 00000 n
+0003735135 00000 n
+0003735202 00000 n
+0003735269 00000 n
+0003735336 00000 n
+0003735403 00000 n
+0003735470 00000 n
+0003735537 00000 n
+0003735604 00000 n
+0003735671 00000 n
+0003735738 00000 n
+0003735805 00000 n
+0003735872 00000 n
+0003735939 00000 n
+0003736006 00000 n
+0003736076 00000 n
+0003736143 00000 n
+0003736210 00000 n
+0003736277 00000 n
+0003736344 00000 n
+0003736411 00000 n
+0003736478 00000 n
+0003736545 00000 n
+0003736612 00000 n
+0003736679 00000 n
+0003736746 00000 n
+0003736813 00000 n
+0003736852 00000 n
+0003736882 00000 n
+0003737167 00000 n
+trailer << /Size 610 /ID [<782d3cd91591d75b4d8a62e34c092caf><e4d110360488353819d6e43044744b8d>] >>
startxref
216
%%EOF
diff --git a/macros/latex/contrib/animate/animate.sty b/macros/latex/contrib/animate/animate.sty
index 408cf967f3..ba9fc998e2 100644
--- a/macros/latex/contrib/animate/animate.sty
+++ b/macros/latex/contrib/animate/animate.sty
@@ -13,7 +13,7 @@
\NeedsTeXFormat{LaTeX2e}[2022-06-01]
-\def\@anim@version{2022/08/04}
+\def\@anim@version{2022/09/15}
\ProvidesPackage{animate}
[\@anim@version\space PDF & SVG animations from files and inline graphics]
@@ -1575,17 +1575,17 @@
}%
\fi%
\begingroup%
+ \@anim@beginLTR%
+ \ifcsname Ginput@path\endcsname% make use of graphic[xs] search path
+ \let\input@path\Ginput@path%
+ \fi%
+ \SetKeys[anim@user]{#1}%
%store current abs. page num in macro \@anim@abspage
\if@anim@dvisvgm\if@anim@draft\else%
\zref@labelbyprops{anim@abspage\the\@anim@num}{abspage}%
\zref@def@extractdefault{\@anim@abspage}{%
anim@abspage\the\@anim@num}{abspage}{-1}%
\fi\fi%
- \@anim@beginLTR%
- \ifcsname Ginput@path\endcsname% make use of graphic[xs] search path
- \let\input@path\Ginput@path%
- \fi%
- \SetKeys[anim@user]{#1}%
\ifx\empty\@anim@bg\empty\xdef\@anim@alpha{}\fi%
\xdef\@anim@btnsize{\the\dimexpr\@anim@btnsize\relax}%
%correct wrong option combination; totalheight overrides height
@@ -2105,18 +2105,18 @@
}%
\fi%
\begingroup%
- %store current abs. page num in macro \@anim@abspage
- \if@anim@dvisvgm\if@anim@draft\else%
- \zref@labelbyprops{anim@abspage\the\@anim@num}{abspage}%
- \zref@def@extractdefault{\@anim@abspage}{%
- anim@abspage\the\@anim@num}{abspage}{-1}%
- \fi\fi%
\@anim@beginLTR%
\ifdefined\NoHyper\NoHyper\fi% silently suppress any hyperref specials
\ifcsname Ginput@path\endcsname% make use of graphic[xs] search path
\let\input@path\Ginput@path%
\fi%
\SetKeys[anim@user]{#1}%
+ %store current abs. page num in macro \@anim@abspage
+ \if@anim@dvisvgm\if@anim@draft\else%
+ \zref@labelbyprops{anim@abspage\the\@anim@num}{abspage}%
+ \zref@def@extractdefault{\@anim@abspage}{%
+ anim@abspage\the\@anim@num}{abspage}{-1}%
+ \fi\fi%
\ifx\empty\@anim@bg\empty\xdef\@anim@alpha{}\fi%
\xdef\@anim@btnsize{\the\dimexpr\@anim@btnsize\relax}%
%correct wrong option combination; totalheight overrides height
@@ -2389,7 +2389,11 @@
\@anim@updatevars% update variables
\fi%
\global\advance\@anim@mulframecnt by \@ne%
- \def\multiframebreak{\global\@anim@mulframecnt=#1}%
+ \if@anim@draft%
+ \global\@anim@mulframecnt=#1%
+ \else%
+ \def\multiframebreak{\global\@anim@mulframecnt=#1}%
+ \fi%
\ignorespaces%
#3% execute loop body
\unskip%
diff --git a/macros/latex/contrib/bithesis/README.md b/macros/latex/contrib/bithesis/README.md
deleted file mode 100644
index c76d91bfdc..0000000000
--- a/macros/latex/contrib/bithesis/README.md
+++ /dev/null
@@ -1,43 +0,0 @@
-<!-- This README aims to be packed into bithesis LaTeX package -->
-
-# The `bithesis` Class
-
-$\LaTeX$ thesis template for Beijing Institute of Technology.
-
-The current maintainer of this project is [Feng Kaiyu](https://github.com/fky2015).
-
-[![BIThesis](./assets/bithesis_badge_solid.svg)](https://bithesis.bitnp.net/)
-[![Latexmk](https://badgen.net/badge/compiler/latexmk/blue)](https://mg.readthedocs.io/latexmk.html)
-[![License](https://badgen.net/github/license/BITNP/BIThesis?color=008080&labelColor=2b2b2b)](./LICENSE)
-
-BIThesis is an unofficial LaTeX template set for your
-**undergraduate, master or doctoral thesis** as well as other academic writing here at BIT.
-
-This project is supported by the _[Dept. of Undergraduate Academic Affairs, BIT](https://jwc.bit.edu.cn/)_ and the _[School of Computer Science and Technology, BIT](https://cs.bit.edu.cn/)_. See [Acknowledgements - Official Sponsors](https://bithesis.bitnp.net/Guide/5-Acknowledgements/Acknowledgements.html#%E5%AE%98%E6%96%B9%E8%B5%9E%E5%8A%A9-official-sponsors).
-
-At present, `bithesis` only supports XeTeX and LuaTeX engines. `bithesis` only allows `UTF-8` encoding.
-
-## How Do I Use `bithesis`?
-
-### Installation
-
-```
-tlmgr install bithesis
-```
-
-Or make a clone from our [repo](https://github.com/BITNP/BIThesis). Then run: `make cls` to generate class files.
-
-## How Do I Use BIThesis?
-
-**For a comprehensive guide on how to install LaTeX, compile `bithesis`, and use a single one of BIThesis' template, please refer to BIThesis' Wiki. 👇**
-
-[![BIThesis Wiki](https://img.shields.io/badge/BIThesis-Wiki-009944?logo=wikipedia&labelColor=2b2b2b&style=for-the-badge)](https://bithesis.bitnp.net/)
-
-## Contributing
-
-For more details, please see the [contributing doc](./contributing.md).
-
-## Contributors
-
-For more information, please see: [Github Contributors](https://github.com/BITNP/BIThesis/graphs/contributors) and [Acknowledgements](https://bithesis.bitnp.net/Guide/5-Acknowledgements/Acknowledgements.html).
-
diff --git a/macros/latex/contrib/bithesis/bithesis.dtx b/macros/latex/contrib/bithesis/bithesis.dtx
deleted file mode 100644
index 4d8499b64d..0000000000
--- a/macros/latex/contrib/bithesis/bithesis.dtx
+++ /dev/null
@@ -1,4899 +0,0 @@
-% \iffalse meta-comment
-%
-% Copyright (C) 2022
-% Association of Bit Network Pioneer and any individual authors listed elsewhere in this file.
-% -----------------------------------
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either
-% version 1.3c of this license or (at your option) any later
-% version. This version of this license is in
-% http://www.latex-project.org/lppl/lppl-1-3c.txt
-% and the latest version of this license is in
-% http://www.latex-project.org/lppl.txt
-% and version 1.3 or later is part of all distributions of
-% LaTeX version 2020/11/27 or later.
-%
-% \fi
-%
-% \iffalse
-%<cls>\RequirePackage{expl3,l3keys2e}
-%<thesis>\ProvidesExplClass{bithesis}
-%<report>\ProvidesExplClass{bitreport}
-%<beamer>\ProvidesExplClass{bitbeamer}
-%<cls>{2022-09-03}{3.0.0}{BIT Thesis Templates}
-%
-%<oldcls>\NeedsTeXFormat{LaTeX2e}[2020/10/01]
-%<book>\ProvidesClass{bitbook}
-%<article>\ProvidesClass{bitart}
-%<graduate>\ProvidesClass{bitgrad}
-%<oldcls> [2022/05/09 v2.1.1 BIT Thesis Templates]
-%
-%<*driver>
-\ProvidesFile{bithesis.dtx}[2022/09/03 3.0.0 BIT Thesis Templates]
-\documentclass[letterpaper]{l3doc}
-\usepackage{dtx-style}
-
-\EnableCrossrefs
-\CodelineIndex
-
-\RecordChanges
-\begin{document}
- \DocInput{\jobname.dtx}
- \PrintChanges
- \def\indexname{代码索引}
- \PrintIndex
-\end{document}
-%</driver>
-% \fi
-%
-% \DoNotIndex{\newenvironment,\@bsphack,\@empty,\@esphack,\sfcode}
-% \DoNotIndex{\addtocounter,\label,\let,\linewidth,\newcounter}
-% \DoNotIndex{\noindent,\normalfont,\par,\parskip,\phantomsection}
-% \DoNotIndex{\providecommand,\ProvidesPackage,\refstepcounter}
-% \DoNotIndex{\RequirePackage,\setcounter,\setlength,\string,\strut}
-% \DoNotIndex{\textbackslash,\texttt,\ttfamily,\usepackage}
-% \DoNotIndex{\begin,\end,\begingroup,\endgroup,\par,\\}
-% \DoNotIndex{\if,\ifx,\ifdim,\ifnum,\ifcase,\else,\or,\fi}
-% \DoNotIndex{\let,\def,\xdef,\edef,\newcommand,\renewcommand}
-% \DoNotIndex{\expandafter,\csname,\endcsname,\relax,\protect}
-% \DoNotIndex{\Huge,\huge,\LARGE,\Large,\large,\normalsize}
-% \DoNotIndex{\small,\footnotesize,\scriptsize,\tiny}
-% \DoNotIndex{\normalfont,\bfseries,\slshape,\sffamily,\interlinepenalty}
-% \DoNotIndex{\textbf,\textit,\textsf,\textsc}
-% \DoNotIndex{\hfil,\par,\hskip,\vskip,\vspace,\quad}
-% \DoNotIndex{\centering,\raggedright,\ref}
-% \DoNotIndex{\c@secnumdepth,\@startsection,\@setfontsize}
-% \DoNotIndex{\ ,\@plus,\@minus,\p@,\z@,\@m,\@M,\@ne,\m@ne}
-% \DoNotIndex{\@@par,\DeclareOperation,\RequirePackage,\LoadClass}
-% \DoNotIndex{\AtBeginDocument,\AtEndDocument,\AtBeginEnvironment}
-%
-% \GetFileInfo{\jobname.dtx} %
-%
-% \def\indexname{索引}
-% \IndexPrologue{\section{\indexname}}
-%
-% \title{\includegraphics[width=0.3\textwidth]{images/icon.png}
-% \\[1cm]
-% \bfseries 北京理工大学{\LaTeX}学位论文及报告模板 }
-% \author{北京理工大学网络开拓者协会 \\ \texttt{webmaster@bitnp.net}} %
-% \date{\zihao{-4} \today\quad \color{RubineRed}{\kaishu {\BIThesis}版本\version}}
-% \maketitle\thispagestyle{empty}
-%
-% \def\abstractname{}
-% \begin{abstract}\noindent
-% 此宏包旨在建立一个简单易用的北京理工大学学位论文模板(以及其他模板),包括本科毕业设计与研究生论文。
-% \end{abstract}
-%
-% \vspace{5mm}
-%
-% \begin{center}
-% \noindent\rule[0.25\baselineskip]{0.5\textwidth}{0.7pt}
-% \end{center}
-%
-% \def\abstractname{免责声明}
-% \begin{abstract}
-% \noindent
-% \begin{enumerate}
-% \item 本模板的发布遵守 \LPPL ,使用前请认真阅读协议内容。
-% \item 与\BIThesis 相关的文档内容采用 \href{https://github.com/BITNP/BIThesis-wiki/blob/main/LICENSE}{CC0-1.0 协议} 发布。
-% \item 任何个人或组织以本模板为基础进行修改、扩展而生成的新的专用模板,请严格遵
-% 守 \LaTeX{} Project Public License 协议。由于违犯协议而引起的任何纠纷争端均与
-% 本模板作者无关。
-% \end{enumerate}
-% \end{abstract}
-%
-% \vspace{5mm}
-%
-% \def\abstractname{简介}
-% \begin{abstract}
-% \BIThesisLaTeX 是北京理工大学本科生毕业设计与研究生学位论文,以及其他课程报告、实验报告的 {\LaTeX} 模板集合。
-% 如果你厌烦了 Word 格式的不人性化、参考文献的难以管理、公式输入的差劲体验……那么欢迎来尝试用专业的学术稿件排版利器 —— {\LaTeX},来排版你的论文。
-% 专业高端、学界认可、开源免费,{\LaTeX} 是你论文排版的最佳搭档。
-%
-% \BIThesisLaTeX 目前支持使用 {\hologo{XeLaTeX}} 进行编译,使用以 biber 为后端的 BibLaTeX 进行参考文献的生成,
-% 符合《信息与文献参考文献著录规则》
-% (\href{http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=7FA63E9BBA56E60471AEDAEBDE44B14C}{GB/T 7714—2015})的标准。
-% 目前主要设计完成了计算机学院本科生毕业论文开题报告、毕业设计毕业论文与通用实验报告的 {\LaTeX} 模板。
-%
-% \end{abstract}
-% \newpage
-%
-% \tableofcontents
-% \clearpage
-% \setlength{\parskip}{0.8ex}
-%
-% \section{项目简介}
-% \subsection{历史与贡献者们}
-% \begin{itemize}
-% \item 2017 - 2018 年,杨雅婷等人受研究生院委托,制作了\href{https://github.com/BIT-thesis/LaTeX-template}{BIT-Thesis} 研究生学位论文模板。
-% \item 2019 - 2020 年,\BIThesis 最早由 2016 级的武上博、王赞、唐誉铭、牟思睿和詹熠莎等人维护。
-% \begin{itemize}
-% \item 在此期间,\BIThesis 从无到有诞生了,包括使用手册、在线文档和开箱即用的模板。
-% \item 同时,2017 级的赵池等同学完成了一系列 \BIThesisLaTeX 的视频教程。
-% \end{itemize}
-% \item 2020 - 2021 年,2017 级的冯开宇、杨思云、郝正亮和顾骁等人接管了维护开发工作。
-% \begin{itemize}
-% \item 在此期间,冯开宇将原来的 .tex 文件制作成了宏包,并发布到 CTAN 上。
-% \item 项目代码也随之被拆分成了 \BIThesisMacroPackage,\BIThesisWiki 和 \BIThesisScaffold。
-% \end{itemize}
-% \item 2021 - 2022 年,2021 级(硕士研究生)的冯开宇针对 2021、2022 毕业季收到的反馈对该项目进行维护升级。
-% \begin{itemize}
-% \item 在此期间,冯开宇合入了杨雅婷等人在 2017 年开发的研究生学位论文模板。
-% \item 在项目架构上,BIThesis-scaffold 合入 BIThesis 以便于进一步维护。
-% \item 次年暑假期间,冯开宇用 \pkg{expl3} 重构了\LaTeX 样式代码,向用户提供了简易易用的接口。
-% \item 同时,也增加了本科全英文专业的毕设论文模板样式。
-% \end{itemize}
-% \end{itemize}
-% \subsection{\BIThesis 是什么?}
-% \BIThesis 之名是英文单词 Beijing Institution of Technology(北京理工大学)的首字母缩写“BIT” 与“Thesis”结合而成。在纯文本环境下,该名字应写作“BIThesis”。
-%
-% \BIThesisLaTeX 是由北京理工大学众多学子发起并维护的开源项目。该项目旨在建立一套简单易用的北京理工大学 \LaTeX 学位论文模板,包括本科综合论文训练。
-% \subsubsection{\BIThesisLaTeX 的组成}
-% 我们将 \BIThesisLaTeX 划分为了两个主要仓库:
-% \begin{table}[H]
-% \centering
-% \begin{tabular}{@{}l l p{6cm} @{}}
-% \toprule
-% 项目 & 项目地址 & 主要目的 \\ \midrule
-% BIThesis & \href{https://github.com/BITNP/BIThesis}{BITNP/BIThesis} & 主要存储 \BIThesis 宏包以及开箱即用的模板样式 \\
-% BIThesis-wiki & \href{https://github.com/BITNP/BIThesis-wiki}{BITNP/BIThesis-wiki} & 存储 \BIThesisLaTeX 项目在线文档 \\ \bottomrule
-% \end{tabular}
-% \end{table}
-%
-% 如果你仅想解决「我如何使用 \BIThesisLaTeX 来帮助我完成实验论文?」这个问题,那么欢迎你访问我们的\href{https://bithesis.bitnp.net}{在线文档}以获得更多信息。
-%
-% 如果你想深入了解 \BIThesisLaTeX 提供的接口的各种选项,那么请继续阅读。
-%
-% \subsection{\BIThesis 宏包的组成}
-% 为了适应用户的不同需求,并符合 CTeX 宏集的设计习惯,我们将 \BIThesisMacroPackage 的主要功能设计安排在两个中文文档类当中,具体的组成见 \ref{tab:classes}。
-% \begin{table}[H]
-% \centering
-% \caption{测试}
-% \label{tab:classes}
-% \begin{tabular}{@{}lll@{}}
-% \toprule
-% 类别 & 文件 & 说明 \\ \midrule
-% \multirow{2}{*}{文档类} & \cls{bithesis.cls} & 封装本科生与研究生的毕业论文样式。 \\
-% & \cls{bitreport.cls} & 封装了本科生开题报告与实验报告样式。 \\ \cmidrule(l){2-3}
-% & \cls{bitbeamer.cls} & 对应 ctexbeamer.cls ,提供了北理工的 Beamer 模板样式。 \\ \cmidrule(l){2-3}
-% \end{tabular}
-% \end{table}
-%
-% \section{安装}
-% \subsection{\BIThesis 宏包的安装和更新}
-% 最常见的 \TeX 发行版(\hologo{TeX} Live 和 \hologo{MiKTeX})已收录\BIThesisMacroPackage 及其依赖的宏包和宏集。
-%
-% 如果安装以上发行版的时间较早,可能你本地的环境中不存在 \BIThesisMacroPackage 或者不是最新版本的。那么你需要通过包管理器来安装/更新 \BIThesisMacroPackage:
-% \begin{shell}[morekeywords={tlmgr,install}]
-% tlmgr install fduthesis
-% \end{shell}
-%
-% 更新可以通过图形界面进行,或者通过命令行:
-% \begin{shell}[morekeywords={tlmgr,install}]
-% tlmgr update fduthesis
-% \end{shell}
-%
-% \section{\cls{bithesis} 使用与配置}
-%
-% 推荐使用\BIThesisRelease (开箱即用)。
-%
-% \BIThesisRelease 提供了多种最常用的模板,你可以在
-% \href{https://github.com/BITNP/BIThesis/releases}{主项目的 Releases}中找到它们。
-%
-% 使用此文档类的模板有:
-% \begin{itemize}
-% \item \BIThesisTemplates{UT}
-% \item \BIThesisTemplates{UTE}
-% \item \BIThesisTemplates{PT}
-% \item \BIThesisTemplates{GT}
-% \end{itemize}
-%
-% \subsection{最小用例}
-%
-% \begin{latex}
-% \documentclass[type=bachelor]{bithesis}
-% \BITSetup{
-% info = {
-% author = FKY,
-% ......
-% }
-% }
-% \begin{document}
-% \end{document}
-% \end{latex}
-%
-% 如您所见,在 \LaTeX 中,用户使用的命令通常以「\\」作为开头,后面依次跟随
-% 命令名称、若干可选参数和若干必需参数。如:
-%
-% \begin{latex}
-% \MakeCover
-% \BITSetup{}
-% \FooBar[]{}
-% \end{latex}
-%
-% 同理,用户使用的环境通常以 begin 和 end 进行包裹,同样可以传入可选参数和必需参数:
-%
-% \begin{latex}
-% \begin{abstract}
-% \end{abstract}
-%
-% \begin{abstract}[addTOC=false]
-% \end{abstract}
-%
-% \begin{foo}{param1}
-% \end{foo}
-% \end{latex}
-%
-% 需要强调的是:以方框号表示的可选参数,在没有参数传入的时候,是可以忽略的。
-% 比如以下两个命令等价:
-% \begin{latex}
-% \FooBar
-% \FooBar[]
-% \end{latex}
-%
-% 环境同理。
-%
-% \subsection{模板选项} \label{sec:template-options}
-%
-% 所谓“模板选项”,指需要在引入文档类的时候指定的选项:
-%
-% \begin{latex}[deletetexcs={\documentclass},morekeywords={\documentclass}]
-% \documentclass(*\oarg{模板选项}*){bithesis}
-% \end{latex}
-%
-% \begin{function}{type}
-% \begin{bitsyntax}[emph={[1]type}]
-% type = (*<(bachelor)|\mbox{bachelor_translation}|\mbox{bachelor_english}|master|docter>*)
-% \end{bitsyntax}
-% 选择论文类型,它们分别对应:
-% \begin{itemize}
-% \item \BIThesisTemplates{UT}
-% \item \BIThesisTemplates{PT}
-% \item \BIThesisTemplates{UTE}
-% \item \BIThesisTemplates{GT} 研究生
-% \item \BIThesisTemplates{GT} 博士生
-% \end{itemize}
-% \end{function}
-%
-% \begin{function}{blindPeerReview}
-% \begin{bitsyntax}[emph={[1]blindPeerReview}]
-% blindPeerReview = (*<(false)|true>*)
-% \end{bitsyntax}
-%
-% 此选项用于输出符合盲审要求的论文。所有可能暴露个人信息的页面都将隐藏,
-% 比如封面、信息页、原创性声明、个人简介、致谢等等。
-% \end{function}
-%
-% \begin{function}{twoside}
-% \begin{bitsyntax}[emph={[1]twoside}]
-% twoside = (*<(false)|true>*)
-% \end{bitsyntax}
-% \end{function}
-%
-% \begin{function}{ctex}
-% \begin{bitsyntax}[emph={[1]ctex}]
-% ctex = (*传给 ctexbook 的模板选项*)
-% \end{bitsyntax}
-%
-% 该选项用于传入模板选项至 ctexbook。
-% \end{function}
-%
-% \subsection{参数设置}
-%
-% \begin{function}{\BITSetup}
-% \begin{bitsyntax}[emph={[1]BITSetup}]
-% \BITSetup = {(*\oarg{键值对}*)}
-% \end{bitsyntax}
-% \end{function}
-%
-% 本模板提供了一系列选项,可由您自行配置。载入文档类之后,以下所有选项均可通过统一的
-% 命令 \cs{BITSetup} 来设置。
-%
-% \cs{BITSetup} 的参数是一组由(英文)逗号隔开的选项列表,列表中的选项通常是 \meta{key} =
-% \meta{value} 的形式。部分选项的 \meta{value} 可以省略。对于同一项,后面的设置将会覆盖前面的设
-% 置。在下文的说明中,将用粗体表示默认值。
-%
-% \cs{BITSetup} 采用 LATEX3 风格的键值设置,支持不同类型以及多种层次的选项设定。键值列
-% 表中,“=”左右的空格不影响设置;但需注意,参数列表中不可以出现空行。
-% 与模板选项相同,布尔型的参数可以省略 \meta{选项} = true 中的“= true”。
-% 另有一些选项包含子选项,如 cover 和 info 等。它们可以按如下两种等价方式来设定:
-%
-% \begin{latex}[morekeywords={\BITSetup},emph={[1]BITSetup,cover,date,info,title,author}]
-% \BITSetup{
-% cover = {
-% date = xxxx年x月,
-% },
-% info = {
-% author = Feng Kaiyu,
-% title = A Thesis Title for Your Paper,
-% }
-% }
-% \end{latex}
-%
-% 或者
-%
-% \begin{latex}[morekeywords={\BITSetup},emph={[1]BITSetup,cover,date,info,title,author}]
-% \BITSetup{
-% cover / date = xxxx年x月,
-% info / author = Feng Kaiyu,
-% info / title = A Thesis Title for Your Paper,
-% }
-% \end{latex}
-%
-% \textbf{请注意:以下选项根据模板的不同,可能会有不同的默认值。
-% 有些模板可能不会使用某些选项。使用与否以及使用方式是根据学校的论文撰写要求实现的。}
-%
-% \subsubsection{封面选项} \label{sec:cover}
-%
-% \begin{function}{cover}
-% \begin{bitsyntax}[emph={[1]cover}]
-% cover = (*\marg{键值列表}*)
-% cover/(*\meta{key}*) = (*\meta{value}*)
-% \end{bitsyntax}
-%
-% 该选项包含许多子项目,用于设置论文格式。具体内容见下。
-% \end{function}
-%
-% \begin{function}{cover/date}
-% \begin{bitsyntax}[emph={[1]date}]
-% date = (*\marg{任意字符串}*)
-% \end{bitsyntax}
-%
-% 覆盖封面的日期。
-% \end{function}
-%
-% \begin{function}{cover/headerImage}
-% \begin{bitsyntax}[emph={[1]headerImage}]
-% headerImage = (*\marg{图片路径}*)
-% \end{bitsyntax}
-%
-% 设置封面顶部的“北京理工大学”字样图片。
-% \end{function}
-%
-% \begin{function}{cover/xiheiFont}
-% \begin{bitsyntax}[emph={[1]xiheiFont}]
-% xiheiFont = (*\marg{字体路径}*)
-% \end{bitsyntax}
-%
-% 配置此选项以在部分模板封面中使用“华文细黑”,保证与 Word 模板中的字体一致。
-%
-% 在 Windows 和 MacOS 中,该字体已经安装;在 Linux 中一般需要用户自行安装。
-% \end{function}
-%
-% \begin{function}{cover/dilimiter}
-% \begin{bitsyntax}[emph={[1]dilimiter}]
-% dilimiter = (*\marg{任意字符串}*)
-% \end{bitsyntax}
-%
-% \textit{此选项一般不需要用户自行修改。}
-%
-% 设置封面信息中标签和值的分隔符。一般为全角或者半角的冒号。
-% \end{function}
-%
-% \begin{function}{cover/autoWidth}
-% \begin{bitsyntax}[emph={[1]autoWidth}]
-% autoWidth = (*<(true)|false>*)
-% \end{bitsyntax}
-%
-% \textit{此选项一般不需要用户自行修改。}
-%
-% 自动计算封面中下划线的长度。
-%
-% 如果关闭了该选项,则建议配合\kvopt{cover/labelMaxWidth}{\meta{长度}}\\
-% 和\kvopt{cover/valueMaxWidth}{\meta{长度}}使用,以控制下划线的长度。
-% \end{function}
-%
-% \begin{function}{cover/labelMaxWidth}
-% \begin{bitsyntax}[emph={[1]labelMaxWidth}]
-% labelMaxWidth = (*\marg{任意长度}*)
-% \end{bitsyntax}
-%
-% 此选项仅当\kvopt{cover/autoWidth}{false}时生效。
-%
-% 设置封面信息中标签的占位长度。
-% \end{function}
-%
-% \begin{function}{cover/valueMaxWidth}
-% \begin{bitsyntax}[emph={[1]valueMaxWidth}]
-% valueMaxWidth = (*\marg{任意长度}*)
-% \end{bitsyntax}
-%
-% \textit{此选项一般不需要用户自行修改。}
-%
-% 设置封面信息中值的占位长度。\textbf{同时也会影响下划线的长度。}
-% \end{function}
-%
-% \begin{function}{cover/labelAlign}
-% \begin{bitsyntax}[emph={[1]labelAlign}]
-% labelAlign = (*<c|l|r>*)
-% \end{bitsyntax}
-%
-% \textit{此选项一般不需要用户自行修改。}
-%
-% 设置封面信息中值的对其方式(居中,左对齐、右对齐)。
-% \end{function}
-%
-% \begin{function}{cover/valueAlign}
-% \begin{bitsyntax}[emph={[1]valueAlign}]
-% valueAlign = (*<c|l|r>*)
-% \end{bitsyntax}
-%
-% 此选项仅当\kvopt{cover/autoWidth}{false}时生效。
-%
-% 设置封面信息中标签的对其方式(居中,左对齐、右对齐)。
-% \end{function}
-%
-% \begin{function}{cover/underlineThickness}
-% \begin{bitsyntax}[emph={[1]underlineThickness}]
-% underlineThickness = (*\marg{任意长度}*)
-% \end{bitsyntax}
-%
-% 设置封面信息中下划线的厚度。
-% \end{function}
-%
-% \begin{function}{cover/underlineOffset}
-% \begin{bitsyntax}[emph={[1]underlineOffset}]
-% underlineOffset = (*(-10pt)|\marg{任意长度}*)
-% \end{bitsyntax}
-%
-% 设置封面信息中下划线的偏移量。
-% \end{function}
-%
-% \subsubsection{论文基本信息}
-%
-% \begin{function}{info}
-% \begin{bitsyntax}[emph={[1]info}]
-% info = (*\marg{键值列表}*)
-% info/(*\meta{key}*) = (*\meta{value}*)
-% \end{bitsyntax}
-%
-% 该选项包含许多子项目,用于录入论文信息。具体内容见下。
-% 一般以「En」结尾的项目表示对应的英文字段。
-% \end{function}
-%
-% \begin{function}{info/title,info/titleEn}
-% \begin{bitsyntax}[emph={[1]title,titleEn}]
-% title = (*\marg{字符串}*)
-% titleEn = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 论文标题。
-% \end{function}
-%
-% \begin{function}{info/school,info/schoolEn}
-% \begin{bitsyntax}[emph={[1]school,schoolEn}]
-% school = (*\marg{字符串}*)
-% schoolEn = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 学院名称。
-% \end{function}
-%
-% \begin{function}{info/major,info/majorEn}
-% \begin{bitsyntax}[emph={[1]major,majorEn}]
-% major = (*\marg{字符串}*)
-% majorEn = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 专业名称。
-% \end{function}
-%
-% \begin{function}{info/author,info/authorEn}
-% \begin{bitsyntax}[emph={[1]author,authorEn}]
-% author = (*\marg{字符串}*)
-% authorEn = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 作者姓名。
-% \end{function}
-%
-% \begin{function}{info/studentId}
-% \begin{bitsyntax}[emph={[1]studentId}]
-% studentId = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 学号。
-% \end{function}
-%
-% \begin{function}{info/supervisor,info/supervisorEn}
-% \begin{bitsyntax}[emph={[1]supervisor,supervisorEn}]
-% supervisor = (*\marg{字符串}*)
-% supervisorEn = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 指导教师。
-% \end{function}
-%
-% \begin{function}{info/externalSupervisor}
-% \begin{bitsyntax}[emph={[1]externalSupervisor}]
-% externalSupervisor = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 校外指导教师。
-% \end{function}
-%
-% \begin{function}{info/keywords,info/keywordsEn}
-% \begin{bitsyntax}[emph={[1]keywords,keywordsEn}]
-% keywords = (*\marg{字符串;以全角分号分割}*)
-% keywordsEn = (*\marg{字符串;以分号分割}*)
-% \end{bitsyntax}
-%
-% 摘要关键词。
-% \end{function}
-%
-% \begin{function}{info/translationTitle}
-% \begin{bitsyntax}[emph={[1]translationTitle}]
-% translationTitle = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 文献翻译中,翻译后的论文名称。
-% \end{function}
-%
-% \begin{function}{info/translationOriginTitleEn}
-% \begin{bitsyntax}[emph={[1]translationOriginTitleEn}]
-% translationOriginTitleEn = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 文献翻译中,翻译前的论文名称。
-% \end{function}
-%
-% \begin{function}{info/classification}
-% \begin{bitsyntax}[emph={[1]classification}]
-% classification = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 中国分类号。
-% \end{function}
-%
-% \begin{function}{info/UDC}
-% \begin{bitsyntax}[emph={[1]UDC}]
-% UDC = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% UDC分类号。
-% \end{function}
-%
-% \begin{function}{info/chairman,info/chairmanEn}
-% \begin{bitsyntax}[emph={[1]chairman,chairmanEn}]
-% chairman = (*\marg{字符串}*)
-% chairmanEn = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 答辩委员会主席。
-% \end{function}
-%
-% \begin{function}{info/degree,info/degreeEn}
-% \begin{bitsyntax}[emph={[1]degree,degreeEn}]
-% degree = (*\marg{字符串}*)
-% degreeEn = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 申请学位。
-% \end{function}
-%
-% \begin{function}{info/institute,info/instituteEn}
-% \begin{bitsyntax}[emph={[1]institute,instituteEn}]
-% institute = (*(北京理工大学)|\marg{字符串}*)
-% instituteEn = (*(Beijing~Institute~of~Technology)|\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 学位授予单位。
-% \end{function}
-%
-% \begin{function}{info/defenseDate,info/defenseDateEn}
-% \begin{bitsyntax}[emph={[1]defenseDate,defenseDateEn}]
-% defenseDate = (*\marg{字符串}*)
-% defenseDateEn = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 答辩日期。
-% \end{function}
-%
-% \begin{function}{info/classifiedLevel}
-% \begin{bitsyntax}[emph={[1]classifiedLevel}]
-% classifiedLevel = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 密级。
-% \end{function}
-%
-% \subsubsection{样式信息}
-%
-% \begin{function}{style}
-% \begin{bitsyntax}[emph={[1]style}]
-% style = (*\marg{键值列表}*)
-% style/(*\meta{key}*) = (*\meta{value}*)
-% \end{bitsyntax}
-%
-% 该选项包含许多子项目,用于调整样式。具体内容见下。
-% \end{function}
-%
-% \begin{function}{style/head}
-% \begin{bitsyntax}[emph={[1]head}]
-% head = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% \textit{此选项一般不需要用户自行修改。}
-%
-% 页眉文字。
-% \end{function}
-%
-% \subsubsection{目录选项}
-%
-% \begin{function}{TOC}
-% \begin{bitsyntax}[emph={[1]TOC}]
-% TOC = (*\marg{键值列表}*)
-% TOC/(*\meta{key}*) = (*\meta{value}*)
-% \end{bitsyntax}
-%
-% 该选项包含许多子项目,用于调整其他选项。具体内容见下。
-% \end{function}
-%
-% \begin{function}{TOC/abstract,TOC/abstractEn}
-% \begin{bitsyntax}[emph={[1]abstract,abstractEn}]
-% abstract = (*(true)|false*)
-% \end{bitsyntax}
-%
-% \textit{此选项一般不需要用户自行修改。}
-%
-% 是否在目录中索引摘要。
-% \end{function}
-%
-% \begin{function}{TOC/symbols}
-% \begin{bitsyntax}[emph={[1]symbols}]
-% abstract = (*(true)|false*)
-% \end{bitsyntax}
-%
-% \textit{此选项一般不需要用户自行修改。}
-%
-% 是否在目录中索引主要符号对照表。
-% \end{function}
-%
-% \subsubsection{附录选项}
-%
-% \begin{function}{appendices}
-% \begin{bitsyntax}[emph={[1]appendices}]
-% appendices = (*\marg{键值列表}*)
-% appendices/(*\meta{key}*) = (*\meta{value}*)
-% \end{bitsyntax}
-%
-% 该选项包含许多子项目,用于调整其他选项。具体内容见下。
-% \end{function}
-%
-% \begin{function}{appendices/chapterLevel}
-% \begin{bitsyntax}[emph={[1]chapterLevel}]
-% chapterLevel = (*<(false)|true>*)
-% \end{bitsyntax}
-%
-% \textit{此选项一般不需要用户自行修改。}
-%
-% 开启后,可以使用以「chapter」为顶层的附录格式。
-%
-% \begin{latex}[emph={[1]appendices,chapter}]
-% \begin{appendices}
-% \chapter{附录A 题目}
-% (*\meta{附录A 内容}*)
-% \chapter{附录B 题目}
-% (*\meta{附录B 内容}*)
-% \end{appendices}
-% \end{latex}
-% \end{function}
-%
-% \begin{function}{appendices/title}
-% \begin{bitsyntax}[emph={[1]title}]
-% title = (*\meta{字符串}*)
-% \end{bitsyntax}
-%
-% 可以覆盖附录的标题名称,默认为「附录」。
-% \end{function}
-%
-% \begin{function}{appendices/TOCTitle}
-% \begin{bitsyntax}[emph={[1]TOCTitle}]
-% TOCTitle = (*\meta{字符串}*)
-% \end{bitsyntax}
-%
-% 可以覆盖附录在目录中的名称,默认为「附录」。
-% \end{function}
-%
-% \subsubsection{其他配置}
-%
-% \begin{function}{misc}
-% \begin{bitsyntax}[emph={[1]misc}]
-% misc = (*\marg{键值列表}*)
-% misc/(*\meta{key}*) = (*\meta{value}*)
-% \end{bitsyntax}
-%
-% 该选项包含许多子项目,用于调整其他选项。具体内容见下。
-% \end{function}
-%
-% \begin{function}{misc/arialFont}
-% \begin{bitsyntax}[emph={[1]arialFont}]
-% arialFont = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% \textit{此选项一般不需要用户自行修改。}
-%
-% 本科生毕业设计模板(全英文专业)需要设置 Arial 字体。
-% (Windows 和 MacOS 自带,Linux 需要用户自行安装)
-% \end{function}
-%
-% \section{正文编写}
-%
-% 请注意,请在\env{document} 之内使用以下命令 。
-%
-% \subsection{封面及基本信息}
-%
-% \begin{function}{\MakeCover}
-%
-% \textit{封面内容会根据模板选项(具体参见节\ref{sec:template-options})中\meta{type=xxx}的值而变化。}
-% \textit{封面的下划线效果会受到参数设置中封面选项(具体见节\ref{sec:cover})的影响。}
-%
-% 绘制封面。
-%
-% 在默认配置下,封面中的下划线会自动计算最大宽度。此时,如果用户需要换行,可以通过「//」控制换行。
-%
-% 当关闭自动计算下划线宽度后,可以通过\meta{labelMaxWidth=xxx} 与 \meta{valueMaxWidth=xxx}来指定下划线的宽度。一般情况下,我们不建议您这样做。
-% \end{function}
-%
-% \begin{function}{\MakePaperBack}
-%
-% 绘制书脊。
-% \end{function}
-%
-% \begin{function}{\MakeTitle}
-%
-% 绘制中英文信息页。
-% \end{function}
-%
-% \begin{function}{\MakeOriginality}
-%
-% 绘制中英文信息页。
-% \end{function}
-%
-% \subsection{前置部分}
-%
-% \begin{function}{\frontmatter}
-%
-% 声明前置部分开始。
-%
-% 此时页码会使用罗马数字进行计数。
-% \end{function}
-%
-% \begin{function}{abstract}
-% \begin{bitsyntax}[emph={[1]abstract}]
-% \begin{abstract}
-% (*\meta{中文摘要}*)
-% \end{abstract}
-% \end{bitsyntax}
-% \end{function}
-%
-% \begin{function}{abstractEn}
-% \begin{bitsyntax}[emph={[1]abstractEn}]
-% \begin{abstractEn}
-% (*\meta{英文摘要}*)
-% \end{abstractEn}
-% \end{bitsyntax}
-%
-% 摘要。
-%
-% 摘要的最后会显示关键词,关键词通过 \cs{BITSetup} 录入。
-%
-% \end{function}
-%
-% \begin{function}{\MakeTOC,\listoffigures,\listoftables}
-%
-% 绘制目录、插图目录与表格目录。
-% \end{function}
-%
-% \begin{function}{symbols}
-% \begin{bitsyntax}[emph={[1]symbols}]
-% \begin{symbols}
-% \item[BIT] 北京理工大学的英文缩写
-% \item[\LaTeX] 一个很棒的排版系统
-% \end{symbols}
-% \end{bitsyntax}
-%
-% 主要符号对照表。
-%
-% 主要符号对照表类似于一个列表环境,用以添加文章中使用的关键符号与缩略词。
-%
-% \end{function}
-%
-% \begin{function}{addTOC}
-% \begin{bitsyntax}[emph={[1]addTOC}]
-% addTOC = (*<(true)|false>*)
-% \end{bitsyntax}
-%
-% 主要符号对照表的可选参数。
-%
-% 添加主要符号对照表到目录,默认开启。
-% \end{function}
-%
-% \subsection{正文部分}
-%
-% \begin{function}{\mainmatter}
-%
-% 声明正文部分开始。
-%
-% 此时页码会使用阿拉伯数字进行计数。
-% \end{function}
-%
-% \subsubsection{定理类环境}
-% \paragraph{默认格式}
-%
-% \begin{function}{algorithm,theorem,lemma,proposition,corollary,axiom,definition,conjecture,example,case,remark}
-% \begin{bitsyntax}[emph={[2]proof}]
-% \begin{theorem}[留数定理]
-% (*\meta{定理内容}*)
-% \end{theorem}
-%
-% \begin{proof}(*\oarg{小标题}*)
-% (*\meta{证明过程}*)
-% \end{proof}
-% \end{bitsyntax}
-% 一系列预定义的数学环境。具体含义见表~\ref{tab:theorem}。
-% \end{function}
-%
-% \begin{table}[]
-% \caption{预定义的数学环境}
-% \centering
-% \subfloat[][plain样式]{
-% \begin{tabular}{@{}ccccccc@{}}
-% \toprule
-% \textbf{名称} & algorithm & theorem & lemma & proposition & corollary & axiom \\ \midrule
-% \textbf{含义} & 算法 & 定理 & 引理 & 命题 & 推论 & 公理 \\
-% \textbf{样式} & \multicolumn{6}{c}{\textbf{定理2.1.} \textit{定理内容……}} \\ \bottomrule
-% \end{tabular}
-% }
-%
-% \subfloat[][definition样式]{
-% \begin{tabular}{@{}ccccc@{}}
-% \toprule
-% \textbf{名称} & definition & conjecture & example & case \\ \midrule
-% \textbf{含义} & 定义 & 猜想 & 例 & 情形 \\
-% \textbf{样式} & \multicolumn{4}{c}{\textbf{定义2.1.} 定义内容……} \\ \bottomrule
-% \end{tabular}
-% }
-%
-% \subfloat[][remark样式]{
-% \begin{tabular}{@{}cc@{}}
-% \toprule
-% \textbf{名称} & remark \\ \midrule
-% \textbf{含义} & 注 \\
-% \textbf{样式} & \multicolumn{1}{c}{\textit{注1.} 内容……} \\ \bottomrule
-% \end{tabular}
-% }
-%
-% \subfloat[][proof样式]{
-% \begin{tabular}{@{}cc@{}}
-% \toprule
-% \textbf{名称} & proof \\ \midrule
-% \textbf{含义} & 证明 \\
-% \textbf{样式} & \multicolumn{1}{c}{\textit{证明. } 内容…… 「证毕符号」} \\ \bottomrule
-% \end{tabular}
-% }
-% \label{tab:theorem}
-% \end{table}
-%
-% \subsection{后置部分}
-%
-% \begin{function}{\backmatter}
-%
-% 声明后置部分开始。
-%
-% 会取消章节标题的的编号。
-%
-% \end{function}
-%
-% \begin{function}{conclusion}
-% \begin{bitsyntax}[emph={[1]conclusion}]
-% \begin{conclusion}
-% (*\meta{结论}*)
-% \end{conclusion}
-% \end{bitsyntax}
-% \end{function}
-%
-% \begin{function}{bibprint}
-% \begin{bitsyntax}[emph={[1]bibprint}]
-% \begin{bibprint}
-% \printbibliography[heading=none]
-% \end{bibprint}
-% \end{bitsyntax}
-%
-% 打印参考文献。
-%
-% 在使用\BIThesisTemplates{GT}时需要注意,由于研究生学位论文也要求使用国标形式输出「攻读学位期间发表论文与研究成果清单」,因此 bithesis 同样使用 bibtex 管理其文献。而由于 biblatex 的排序是全局的,因此需要使用 \meta{category} 功能来分割出两个不同的类别。
-%
-% 因此,请使用下列语句输出参考文献:
-% \begin{latex}[emph={[1]bibprint}]
-% \begin{bibprint}
-% \printbibliography[heading=none,notcategory=mypub,resetnumbers=true]
-% \end{bibprint}
-% \end{latex}
-% \end{function}
-%
-% \begin{function}{appendices}
-% \begin{bitsyntax}[emph={[1]appendices}]
-% \begin{appendices}
-% \section{附录A题目}
-% (*\meta{附录A内容}*)
-% \section{附录B题目}
-% (*\meta{附录B内容}*)
-% \end{appendices}
-% \end{bitsyntax}
-%
-% 附录。
-% \end{function}
-%
-% \begin{function}{publications}
-% \begin{bitsyntax}[emph={[1]publications,addtocategory,printbibliography}]
-% \begin{publications}
-% \nocite{\meta{引用内容的key}}
-% \addtocategory{mypub}{\meta{引用内容的key}}
-% \printbibliography[heading=none,category=mypub,resetnumbers=true]
-% \end{publications}
-% \end{bitsyntax}
-%
-% 攻读学位期间发表论文与研究成果清单。
-% \end{function}
-%
-% \begin{function}{acknowledgements}
-% \begin{bitsyntax}[emph={[1]acknowledgements}]
-% \begin{acknowledgements}
-% (*\meta{致谢内容}*)
-% \end{acknowledgements}
-% \end{bitsyntax}
-%
-% 致谢。
-% \end{function}
-%
-% \begin{function}{resume}
-% \begin{bitsyntax}[emph={[1]resume}]
-% \begin{resume}
-% (*\meta{个人简介内容}*)
-% \end{resume}
-% \end{bitsyntax}
-%
-% 个人简介。
-% \end{function}
-%
-% \section{\cls{bitreport} 使用与配置}
-%
-% 推荐使用\BIThesisRelease (开箱即用)。
-%
-% \BIThesisRelease 提供了多种最常用的模板,你可以在
-% \href{https://github.com/BITNP/BIThesis/releases}{主项目的 Releases}中找到它们。
-%
-% 使用此文档类的模板有:
-% \begin{itemize}
-% \item \BIThesisTemplates{UP}
-% \item \BIThesisTemplates{LR}
-% \end{itemize}
-%
-% \subsection{最小用例}
-%
-% \begin{latex}
-% \documentclass[]{bitreport}
-% \BITSetup{
-% info = {
-% author = FKY,
-% ......
-% }
-% }
-% \begin{document}
-% \end{document}
-% \end{latex}
-%
-% \subsection{模板选项}
-%
-% 所谓“模板选项”,指需要在引入文档类的时候指定的选项:
-%
-% \begin{latex}[deletetexcs={\documentclass},morekeywords={\documentclass}]
-% \documentclass(*\oarg{模板选项}*){bithesis}
-% \end{latex}
-%
-% \begin{function}{type}
-% \begin{bitsyntax}[emph={[1]type}]
-% type = (*<(common)|\mbox{undergraduate_proposal}>*)
-% \end{bitsyntax}
-% 选择论文类型,它们分别对应:
-% \begin{itemize}
-% \item \BIThesisTemplates{LR}
-% \item \BIThesisTemplates{UP}
-% \end{itemize}
-% \end{function}
-%
-% \begin{function}{ctex}
-% \begin{bitsyntax}[emph={[1]ctex}]
-% ctex = (*传给 ctexbook 的模板选项*)
-% \end{bitsyntax}
-%
-% 该选项用于传入模板选项至 ctexbook。
-% \end{function}
-%
-% \subsection{参数设置}
-%
-% \begin{function}{\BITSetup}
-% \begin{bitsyntax}[emph={[1]BITSetup}]
-% \BITSetup = {(*\oarg{键值对}*)}
-% \end{bitsyntax}
-% \end{function}
-%
-% 本模板提供了一系列选项,可由您自行配置。载入文档类之后,以下所有选项均可通过统一的
-% 命令 \cs{BITSetup} 来设置。
-%
-% \cs{BITSetup} 的参数是一组由(英文)逗号隔开的选项列表,列表中的选项通常是 \meta{key} =
-% \meta{value} 的形式。部分选项的 \meta{value} 可以省略。对于同一项,后面的设置将会覆盖前面的设
-% 置。在下文的说明中,将用粗体表示默认值。
-%
-% \cs{BITSetup} 采用 LATEX3 风格的键值设置,支持不同类型以及多种层次的选项设定。键值列
-% 表中,“=”左右的空格不影响设置;但需注意,参数列表中不可以出现空行。
-% 与模板选项相同,布尔型的参数可以省略 \meta{选项} = true 中的“= true”。
-% 另有一些选项包含子选项,如 cover 和 info 等。它们可以按如下两种等价方式来设定:
-%
-% \begin{latex}[morekeywords={\BITSetup},emph={[1]BITSetup,cover,date,info,title,author}]
-% \BITSetup{
-% cover = {
-% date = xxxx年x月,
-% },
-% info = {
-% author = Feng Kaiyu,
-% title = A Report Title for Your Experiment,
-% }
-% }
-% \end{latex}
-%
-% 或者
-%
-% \begin{latex}[morekeywords={\BITSetup},emph={[1]BITSetup,cover,date,info,title,author}]
-% \BITSetup{
-% cover / date = xxxx年x月,
-% info / author = Feng Kaiyu,
-% info / title = A Thesis Title for Your Paper,
-% }
-% \end{latex}
-%
-% \subsubsection{封面选项}
-%
-% \begin{function}{cover}
-% \begin{bitsyntax}[emph={[1]cover}]
-% cover = (*\marg{键值列表}*)
-% cover/(*\meta{key}*) = (*\meta{value}*)
-% \end{bitsyntax}
-%
-% 该选项包含许多子项目,用于设置论文格式。具体内容见下。
-% \end{function}
-%
-% \begin{function}{cover/date}
-% \begin{bitsyntax}[emph={[1]date}]
-% date = (*\marg{任意字符串}*)
-% \end{bitsyntax}
-%
-% 覆盖封面的日期。
-% \end{function}
-%
-% \subsubsection{文档基本信息}
-%
-% \begin{function}{info}
-% \begin{bitsyntax}[emph={[1]info}]
-% info = (*\marg{键值列表}*)
-% info/(*\meta{key}*) = (*\meta{value}*)
-% \end{bitsyntax}
-%
-% 该选项包含许多子项目,用于录入论文信息。具体内容见下。
-% \end{function}
-%
-% \begin{function}{info/title}
-% \begin{bitsyntax}[emph={[1]title}]
-% title = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 论文或报告标题。
-% \end{function}
-%
-% \begin{function}{info/school}
-% \begin{bitsyntax}[emph={[1]school}]
-% school = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 学院名称。
-% \end{function}
-%
-% \begin{function}{info/major}
-% \begin{bitsyntax}[emph={[1]major}]
-% major = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 专业名称。
-% \end{function}
-%
-% \begin{function}{info/author}
-% \begin{bitsyntax}[emph={[1]author}]
-% author = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 作者姓名。
-% \end{function}
-%
-% \begin{function}{info/studentId}
-% \begin{bitsyntax}[emph={[1]studentId}]
-% studentId = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 学号。
-% \end{function}
-%
-% \begin{function}{info/supervisor}
-% \begin{bitsyntax}[emph={[1]supervisor}]
-% supervisor = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 指导教师。
-% \end{function}
-%
-% \begin{function}{info/externalSupervisor}
-% \begin{bitsyntax}[emph={[1]externalSupervisor}]
-% externalSupervisor = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 校外指导教师。
-% \end{function}
-%
-% \begin{function}{info/class}
-% \begin{bitsyntax}[emph={[1]class}]
-% class = (*\marg{字符串}*)
-% \end{bitsyntax}
-%
-% 班级。
-% \end{function}
-%
-% \subsubsection{其他选项}
-%
-% \begin{function}{misc}
-% \begin{bitsyntax}[emph={[1]misc}]
-% misc = (*\marg{键值列表}*)
-% misc/(*\meta{key}*) = (*\meta{value}*)
-% \end{bitsyntax}
-%
-% 该选项包含许多子项目,用于额外的控制。具体内容见下。
-% \end{function}
-%
-% \begin{function}{misc/reviewTable}
-% \begin{bitsyntax}[emph={[1]reviewTable}]
-% reviewTable = (*\marg{指向评审表的路径}*)
-% \end{bitsyntax}
-%
-% 用于指定已经填写好的评审表 PDF 文件。
-% \end{function}
-%
-% \section{致谢}
-% \begin{itemize}
-% \item 感谢贡献者对 BIThesis 的无私奉献。
-% \item 感谢学校及相关老师对 BIThesis 的支持。
-% \item 感谢清华大学和复旦大学的学位论文模板项目,他们为后来者提供了前进的方向。
-% \end{itemize}
-%
-% \section{软件许可证}
-%
-% \begin{itemize}
-% \item 北京理工大学校徽校名图片的版权归北京理工大学所有。
-% \item \BIThesisLaTeX 宏包以及相关文档类使用 \LPPL 授权。
-% \item \BIThesisLaTeX 文档及其他附属文件通过 CC0-1.0 授权。
-% \end{itemize}
-% \section{实现细节}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% Identify the internal prefix (\LaTeX3 \pkg{DocStrip} convention).
-% \begin{macrocode}
-%<@@=bithesis>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-
-% \begin{macrocode}
-%<*thesis>
-% \end{macrocode}
-
-% Define Global Variables
-% \begin{macrocode}
-\int_new:N \g_@@_thesis_type_int
-\int_new:N \g_@@_head_zihao_int
-\bool_new:N \g_@@_twoside_bool
-\bool_new:N \g_@@_thesis_type_english_bool
-\bool_new:N \g_@@_blind_mode_bool
-\tl_new:N \g_@@_label_divide_char_tl
-
-% \bool_new:N \l_@@_cover_auto_width_bool
-% \bool_set_true:N \l_@@_cover_auto_width_bool
-%
-% Define tmp Variables
-\seq_new:N \l_@@_right_seq
-\seq_new:N \l_@@_left_seq
-
-% helper functions
-
-\cs_generate_variant:Nn \tl_if_empty:nTF {x}
-\cs_generate_variant:Nn \seq_set_split:Nnn {Nnx}
-
-\cs_new:Npn \@@_same_page: {
- \let\clearpage\relax
- \let\cleardoublepage\relax
-}
-
-% 是否为研究生学位论文
-\cs_new:Npn \@@_if_graduate:TF #1#2 {
- \int_compare:nNnTF {3} < {\g_@@_thesis_type_int}
- {#1}
- {#2}
- }
-
-% 是否某一特定模板
-\cs_new:Npn \@@_if_thesis_int_type:nTF #1#2#3 {\int_compare:nNnTF {\g_@@_thesis_type_int} = {#1} {#2} {#3}}
-\cs_new:Npn \@@_if_thesis_int_type:nT #1#2 {\@@_if_thesis_int_type:nTF {#1} {#2} {}}
-
-% 是否为英文模板,这里包括全英文专业和研究生模板的英文模式。
-\cs_new:Npn \@@_if_thesis_english:TF #1#2 {\bool_if:nTF {\g_@@_thesis_type_english_bool} {#1} {#2}}
-\cs_new:Npn \@@_if_thesis_english:T #1 {\@@_if_thesis_english:TF {#1}{}}
-
-\cs_new:Npn \@@_if_bachelor_thesis:TF #1#2 {\int_compare:nNnTF {\g_@@_thesis_type_int} < {4} {#1} {#2}}
-\cs_new:Npn \@@_if_bachelor_thesis:T #1 {\@@_if_bachelor_thesis:TF {#1} {}}
-\cs_new:Npn \@@_if_master_thesis:TF #1#2 {\int_compare:nNnTF {\g_@@_thesis_type_int} = {4} {#1} {#2}}
-\cs_new:Npn \@@_if_doctor_thesis:TF #1#2 {\int_compare:nNnTF {\g_@@_thesis_type_int} = {5} {#1} {#2}}
-
-% Define Consts.
-\clist_const:Nn \c_@@_thesis_type_clist
- { bachelor, bachelor_translation, bachelor_english, master, docter}
-
-\cs_new_protected:Npn \@@_define_label:nn #1#2
- { \tl_const:cn { c_@@_label_ #1 _tl } {#2} }
-
-\cs_new_protected:Npn \@@_define_label_by_thesis_type:nnn #1#2#3
- {
- \tl_const:cn { c_@@_ #1 _label_ #2 _tl } {#3}
- }
-
-\cs_new_protected:Npn \@@_define_label:nnn #1#2#3
- {
- \tl_const:cn { c_@@_label_ #1 _tl } {#2}
- \tl_const:cn { c_@@_label_ #1 _en_tl } {#3}
- }
-
-\cs_new_protected:Npn \@@_define_label_by_thesis_type:nnnn #1#2#3#4
- {
- \tl_const:cn { c_@@_ #1 _label_ #2 _tl } {#3}
- \tl_const:cn { c_@@_ #1 _label_ #2 _en_tl } {#4}
- }
-
-\clist_map_inline:nn
- {
- {code} {代码},
- {udc} {UDC分类号:},
- {classification} {中国分类号:},
- {classified_level} {密级},
- {type} {种类},
- }
- {\@@_define_label:nn #1}
-
-% bachelor
-\clist_map_inline:nn
- {
- {title} {本科生毕业设计(论文)},
- {originality} {原创性声明},
- {originality_clause} {本人郑重声明:所呈交的毕业设计(论文),是本人在指导老师的指导下独立进行研究所取得的成果。除文中已经注明引用的内容外,本文不包含任何其他个人或集体已经发表或撰写过的研究成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。\par~特此申明。},
- {authorization} {关于使用授权的声明},
- {authorization_clause} {本人完全了解北京理工大学有关保管、使用毕业设计(论文)的规定,其中包括:\circled{1}~学校有权保管、并向有关部门送交本毕业设计(论文)的原件与复印件;\circled{2}~学校可以采用影印、缩印或其它复制手段复制并保存本毕业设计(论文);\circled{3}~学校可允许本毕业设计(论文)被查阅或借阅;\circled{4}~学校可以学术交流为目的,复制赠送和交换本毕业设计(论文);\circled{5}~学校可以公布本毕业设计(论文)的全部或部分内容。},
- {originality_author_signature} {本人签名:\hspace{40mm}日\hspace{2.5mm}期:\hspace{13mm}年\hspace{8mm}月\hspace{8mm}日},
- {originality_supervisor_signature} {指导老师签名:\hspace{40mm}日\hspace{2.5mm}期:\hspace{13mm}年\hspace{8mm}月\hspace{8mm}日},
- } {\@@_define_label_by_thesis_type:nnn {bachelor} #1}
-
-% % bachelor english
-\clist_map_inline:nn
- {
- {title} {},
- {originality} {原创性声明~Statement~of~Originality},
- {originality_clause} {
- 本人郑重声明:所呈交的毕业设计(论文),是本人在指导老师的指导下独立进行研究所取得的成果。除文中已经注明引用的内容外,本文不包含任何其他个人或集体已经发表或撰写过的研究成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。特此申明。\par
- \arialfamily I,\dunderline[-1pt]{1pt}{\makebox[18mm]{}},~solemnly~
- declare:~the~submitted~graduation~design~(thesis),~is~the~research~achievement~completed~independently~by~myself~
- under~the~guidance~of~the~supervisor.~This~article~does~not~contain~
- any~research~published~or~written~by~any~other~individual~or~group,~
- except~as~already~referenced~in~this~paper.~Individuals~and~groups~
- that~have~made~important~contributions~to~the~study~of~this~paper~
- are~clearly~indicated~and~cited~in~the~paper.\par
- },
- {authorization} {关于使用授权的声明~State~of~Use~Authorization},
- {authorization_clause} {
- 本人完全了解北京理工大学有关保管、使用毕业设计(论文)的规定,其中包括:\circled{1}学校有权保管、并向有关部门送交本毕业设计(论文)的原件与复印件;\circled{2}学校可以采用影印、缩印或其它复制手段复制并保存本毕业设计(论文);\circled{3}学校可允许本毕业设计(论文)被查阅或借阅;\circled{4}学校可以学术交流为目的,复制赠送和交换本毕业设计(论文);\circled{5}学校可以公布本毕业设计(论文)的全部或部分内容。\par
- I~fully~understand~the~regulations~on~the~storage,~use~of~graduation~design~(thesis)~in~Beijing~Institute~of~Technology.~Beijing~Institute~of~Technology~has~the~right~to~(1)~keep,~and~to~the~relevant~departments~to~send~the~original~or~copy~of~this~graduation~design~(thesis);~(2)~copy~and~preserve~this~graduation~design~(thesis)~by~photocopying,~miniature~or~other~means~of~reproduction;~(3)~allow~this~graduation~design~(thesis)~to~be~read~or~borrowed;~(4)~for~the~purpose~of~academic~exchange,~copy,~give~and~exchange~this~graduation~design~(thesis);~(5)~publish~all~or~part~of~the~contents~of~this~graduation~design~(thesis).~
- },
- } {\@@_define_label_by_thesis_type:nnn {bachelor_english} #1}
-
-\cs_new:Npn \smallgap: {
- \hspace{0.45ex}
-}
-
-\cs_new:Npn \label_space: {
- \@@_if_bachelor_thesis:T {
- \quad
- }
-}
-
-% graduate
-\clist_map_inline:nn
- {
- {originality} {研究成果声明},
- {originality_clause} {本人郑重声明:所提交的学位论文是我本人在指导教师的指导下进行的研究工作获得的研究成果。尽我所知,文中除特别标注和致谢的地方外,学位论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得北京理工大学或其它教育机构的学位或证书所使用过的材料。与我一同工作的合作者对此研究工作所做的任何贡献均已在学位论文中作了明确的说明并表示了谢意。\par~特此申明。},
- {authorization} {关于学位论文使用权的说明},
- {authorization_clause} {本人完全了解北京理工大学有关保管、使用学位论文的规定,其中包括:\circled{1}~学校有权保管、并向有关部门送交学位论文的原件与复印件;\circled{2}~学校可以采用影印、缩印或其它复制手段复制并保存学位论文;\circled{3}~学校可允许学位论文被查阅或借阅;\circled{4}~学校可以学术交流为目的,复制赠送和交换学位论文;\circled{5}~学校可以公布学位论文的全部或部分内容(保密学位论文在解密后遵守此规定)。},
- {originality_author_signature} {签\qquad 名:\hspace{40mm}日\hspace{2.5mm}期:\hspace{30mm}\quad},
- {originality_supervisor_signature} {指导老师签名:\hspace{40mm}日\hspace{2.5mm}期:\hspace{30mm}\quad},
- } {\@@_define_label_by_thesis_type:nnn {graduate} #1}
-
-\clist_map_inline:nn
- {
- {author} {作\quad 者\quad 姓\quad 名} {Candidate~Name},
- {school} {学\quad 院\quad 名\quad 称} {School~or~Department},
- {supervisor} {指\quad 导\quad 教\quad 师} {Faculty~Mentor},
- {chairman} {答辩委员会主席} {Chair,~Thesis~Committee},
- {degree} {申\smallgap: 请\smallgap: 学\smallgap: 位\smallgap: 级\smallgap: 别} {Degree~Applied},
- {major} {学\quad 科\quad 专\quad 业} {Major},
- {institute} {学\smallgap: 位\smallgap: 授\smallgap: 予\smallgap: 单\smallgap: 位} {Degree~by},
- {defense_date} {论\smallgap: 文\smallgap: 答\smallgap: 辩\smallgap: 日\smallgap: 期} {The~Date~of~Defence},
- } {\@@_define_label_by_thesis_type:nnnn {graduate} #1}
-
-\clist_map_inline:nn
- {
- {school} {学\qquad 院} {School},
- {major} {专\qquad 业} {Degree},
- {author} {学生姓名} {Author},
- {student_id} {学\qquad 号} {Student~ID},
- {supervisor} {指导教师} {Supervisor},
- {co_supervisor} {校外指导教师} {Co-Supervisor},
- {keywords} {关键词:} {Key~Words:~},
- {toc} {目\label_space: 录} {Table~of~Contents},
- {abstract} {摘\label_space: 要} {Abstract},
- {conclusion} {结\label_space: 论} {Conclusions},
- {appendix} {附\label_space: 录} {Appendices},
- {ack} {致\label_space: 谢} {Acknowledgement},
- {figure} {插\quad 图} {Illustrations},
- {table} {表\quad 格} {Tables},
- {appendix_prefix} {附录} {Appendix},
- {reference} {参考文献} {References},
- {university} {北京理工大学} {Beijing~Institute~of~Technology},
- {publications} {攻读学位期间发表论文与研究成果清单} {Publications~During~Studies},
- % TODO: Not so sure about the translation.
- {resume} {作者简介} {},
- {symbols} {主要符号对照表} {},
- }
- {\@@_define_label:nnn #1}
-
-% TODO: \clist_item:Nn
-\clist_const:Nn \c_@@_bachelor_thesis_header_clist
- {北京理工大学本科生毕业设计(论文), 北京理工大学本科生毕业设计(论文)外文翻译, Beijing~Institute~of~Technology~Bachelor's~Thesis }
-\clist_const:Nn \c_@@_bachelor_thesis_cover_title_clist
- {
- 本科生毕业设计(论文),
- 本科生毕业设计(论文)外文翻译,
- Beijing\nobreak{~}Institute\nobreak{~}of\nobreak{~}Technology~Bachelor's~Thesis,
- }
-
-
-% key-value interface definition.
-\keys_define:nn { bithesis }
-{
- info .meta:nn = { bithesis / info } {#1},
- misc .meta:nn = { bithesis / misc } {#1},
- cover .meta:nn = { bithesis / cover } {#1},
- style .meta:nn = { bithesis / style } {#1},
- option .meta:nn = { bithesis / option } {#1},
- TOC .meta:nn = { bithesis / TOC } {#1},
- appendices .meta:nn = { bithesis / appendices } {#1},
-}
-
-\keys_define:nn { bithesis / option }
-{
- type .choice:,
- type .value_required:n = true,
- type .choices:Vn =
- \c_@@_thesis_type_clist
- {
- \int_set_eq:NN \g_@@_thesis_type_int \l_keys_choice_int
- \int_case:nn {\l_keys_choice_int} {
- % 本科全英文也是英文模板。
- {3} {\bool_set_true:N \g_@@_thesis_type_english_bool}
- }
- },
- type .initial:n = bachelor,
- twoside .bool_gset:N = \g_@@_twoside_bool,
- blindPeerReview .bool_gset:N = \g_@@_blind_mode_bool,
- ctex .tl_set:N = \l_@@_options_to_ctex_tl,
-}
-
-\keys_define:nn { bithesis / cover }
- {
- date .tl_set:N = \l_@@_cover_date_tl,
- headerImage .tl_set:N = \l_bit_coverheaderimage_tl,
- xiheiFont .tl_set:N = \l_@@_cover_xihei_font_path_tl,
- xiheiFont .default:n = {STXihei},
- %% cover entry
- dilimiter .tl_set:N = \l_@@_cover_dilimiter_tl,
- labelAlign .tl_set:N = \l_@@_cover_label_align_tl,
- labelAlign .initial:n = {r},
- valueAlign .tl_set:N = \l_@@_cover_value_align_tl,
- valueAlign .initial:n = {c},
- labelMaxWidth .dim_set:N = \l_@@_cover_label_max_width_dim,
- valueMaxWidth .dim_set:N = \l_@@_cover_value_max_width_dim,
- autoWidth .bool_set:N = \l_@@_cover_auto_width_bool,
- autoWidth .initial:n = {true},
- underlineThickness .dim_set:N = \l_@@_cover_underline_thickness_dim,
- underlineThickness .initial:n = {1pt},
- underlineOffset .dim_set:N = \l_@@_cover_underline_offset_dim,
- underlineOffset .initial:n = { -10pt },
- }
-
-\keys_define:nn { bithesis / info }
- {
- title .tl_set:N = \l_@@_value_title_tl,
- titleEn .tl_set:N = \l_@@_value_title_en_tl,
- school .tl_set:N = \l_@@_value_school_tl,
- major .tl_set:N = \l_@@_value_major_tl,
- author .tl_set:N = \l_@@_value_author_tl,
- studentId .tl_set:N = \l_@@_value_student_id_tl,
- supervisor .tl_set:N = \l_@@_value_supervisor_tl,
- externalSupervisor .tl_set:N = \l_@@_value_external_supervisor_tl,
- keywords .tl_set:N = \l_@@_value_keywords_tl,
- keywordsEn .tl_set:N = \l_@@_value_keywords_en_tl,
- translationTitle .tl_set:N = \l_@@_value_trans_title_tl,
- translationOriginTitle .tl_set:N = \l_@@_value_trans_origin_title_tl,
- % 中国分类号,研究生学位论文使用
- classification .tl_set:N = \l_@@_value_classification_tl,
- % UDC 分类号,研究生学位论文使用
- UDC .tl_set:N = \l_@@_value_udc_tl,
- chairman .tl_set:N = \l_@@_value_chairman_tl,
- degree .tl_set:N = \l_@@_value_degree_tl,
- degreeEn .tl_set:N = \l_@@_value_degree_en_tl,
- institute .tl_set:N = \l_@@_value_institute_tl,
- institute .initial:n = {\c_@@_label_university_tl},
- defenseDate .tl_set:N = \l_@@_value_defense_date_tl,
- authorEn .tl_set:N = \l_@@_value_author_en_tl,
- schoolEn .tl_set:N = \l_@@_value_school_en_tl,
- supervisorEn .tl_set:N = \l_@@_value_supervisor_en_tl,
- chairmanEn .tl_set:N = \l_@@_value_chairman_en_tl,
- majorEn .tl_set:N = \l_@@_value_major_en_tl,
- instituteEn .tl_set:N = \l_@@_value_institute_en_tl,
- instituteEn .initial:n = {\c_@@_label_university_en_tl},
- defenseDateEn .tl_set:N = \l_@@_value_defense_date_en_tl,
- classifiedLevel .tl_set:N = \l_@@_value_classified_level_tl,
- }
-
-\keys_define:nn { bithesis / misc }
- {
- arialFont .tl_set:N = \l_@@_misc_arial_font_path_tl,
- }
-
-\keys_define:nn { bithesis / style }
-{
- head .tl_set:N = \l_@@_style_head_tl,
- head .initial:n = {
- \int_case:nn {\g_@@_thesis_type_int}
- {
- {1} {北京理工大学本科生毕业设计(论文)}
- {2} {北京理工大学本科生毕业设计(论文)外文翻译}
- {3} {Beijing~Institute~of~Technology~Bachelor's~Thesis}
- {4} {北京理工大学硕士学位论文}
- {5} {北京理工大学博士学位论文}
- }
- },
-}
-
-\keys_define:nn { bithesis / TOC }
-{
- abstract .bool_set:N = \l_@@_add_abstract_to_toc_bool,
- abstract .initial:n = {true},
- abstractEn .bool_set:N = \l_@@_add_abstract_en_to_toc_bool,
- abstractEn .initial:n = {true},
- symbols .bool_set:N = \l_@@_add_symbols_to_toc_bool,
- symbols .initial:n = {true},
-}
-
-\keys_define:nn { bithesis / appendices }
-{
- chapterLevel .bool_set:N = \l_@@_appendices_chapter_level_bool,
- title .tl_set:N = \l_@@_appendices_title_tl,
- TOCTitle .tl_set:N = \l_@@_appendix_toc_title_tl,
-}
-
-\ProcessKeysOptions { bithesis / option }
-
-\@@_if_thesis_english:T {
- \PassOptionsToClass{scheme=plain}{ctexbook}
-}
-
-\bool_if:NTF \g_@@_twoside_bool {} {
- \PassOptionsToClass{oneside,openany}{ctexbook}
-}
-
-
-% Any extra option passed by user will be passed to ctexbook.
-\DeclareOption*{
- \PassOptionsToClass{\l_@@_options_to_ctex_tl}{ctexbook}
-}
-% Executes the code for each option.
-\ProcessOptions\relax
-% Load
-\LoadClass[zihao=-4,]{ctexbook}
-
-\RequirePackage{geometry}
-\RequirePackage{xeCJK}
-\RequirePackage{titletoc}
-\RequirePackage{setspace}
-\RequirePackage{graphicx}
-\RequirePackage{fancyhdr}
-\RequirePackage{pdfpages}
-\RequirePackage{setspace}
-\RequirePackage{booktabs}
-\RequirePackage{multirow}
-\RequirePackage{tikz}
-\RequirePackage{etoolbox}
-\RequirePackage{hyperref}
-\RequirePackage{xcolor}
-\RequirePackage{caption}
-\RequirePackage{array}
-\RequirePackage{amsmath}
-\RequirePackage{amssymb}
-\RequirePackage{amsthm}
-\RequirePackage{unicode-math}
-\RequirePackage{pdfpages}
-\RequirePackage{listings}
-\RequirePackage{enumitem}
-\RequirePackage{environ}
-
-% Suppress warning for \hskip by hyperref.
-\pdfstringdefDisableCommands{%
- \let\quad\empty
-}
-
-\@@_if_graduate:TF {
- \int_set:Nn \g_@@_head_zihao_int {5}
- \geometry{
- a4paper,
- left=2.7cm,
- bottom=2.5cm + 7bp,
- top=3.5cm + 7bp,
- right=2.7cm,
- headsep = 3.5cm + 7bp - 2.5cm - 15bp,
- headheight = 15 bp,
- footskip = 2.5cm + 7bp - 1.8cm,
- }
-} {
- \int_set:Nn \g_@@_head_zihao_int {4}
- \geometry{
- a4paper,
- left=3cm,
- bottom=2.6cm + 7bp,
- top=3.5cm + 7bp,
- right=2.6cm,
- headsep = 3.5cm + 7bp - 2.4cm - 20bp,
- headheight = 20 bp,
- footskip = 2.6cm + 7bp - 2cm,
- }
-}
-
-% One blank line before the figure and after the caption.
-\setlength{\intextsep}{2\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip}
-
-\setromanfont{Times~New~Roman}
-
-\ctex_at_end_preamble:n {
- \@@_if_thesis_english:TF {
- \@@_if_thesis_int_type:nT {3} {
- % font Arial needed
- \newfontfamily\arialfamily{Arial}
- }
-
- } {
- \tl_if_blank:VTF \l_@@_cover_xihei_font_path_tl {}
- {
- \setCJKfamilyfont{xihei}[AutoFakeBold,AutoFakeSlant]{\l_@@_cover_xihei_font_path_tl}
- }
- }
-
- \@@_if_thesis_int_type:nT {3} {
- \RequirePackage[en-US]{datetime2}
- \RequirePackage{indentfirst}
- \DTMlangsetup[en-US]{dayyearsep={\space}}
- }
-
- % Define biblatex category if it was imported.
- \cs_if_exist:NT \DeclareBibliographyCategory {
- \DeclareBibliographyCategory{mypub}
- }
-}
-
-\cs_new:Npn \xihei:n #1 {
- \xeCJK_family_if_exist:nTF {xihei} {
- \CJKfamily{xihei} #1
- }{
- \heiti #1
- }
-}
-
-\cs_new:Npn \l_@@_title_font_cs:n #1 {
- \int_compare:nNnTF {\g_@@_thesis_type_int} = {3}
- {
- \arialfamily #1
- } {
- \heiti #1
- }
-}
-
-\cs_new:Npn \l_@@_unnumchapter_style_cs:n #1 {
- % 本科全英文、研究生学位论文需要加粗
- \int_compare:nNnTF {\g_@@_thesis_type_int} > {2}
- {
- \bfseries #1
- } {
- \mdseries #1
- }
-}
-
-\cs_set:Npn \arabicHeiti #1 {#1}
-
-% TODO: custom title
-\fancypagestyle{BIThesis}{
- \fancyhf{}
- % 定义页眉、页码
- \fancyhead[C]{\zihao{\int_use:N \g_@@_head_zihao_int}\ziju{0.08}\songti{\tl_use:N \l_@@_style_head_tl}}
- \fancyfoot[C]{\songti\zihao{5} \thepage}
- % 页眉分割线稍微粗一些
- \RenewDocumentCommand \headrulewidth {} {0.6pt}
-}
-
-\ctexset{chapter={
- number = {\arabicHeiti{ \arabic{chapter} }},
- format = { \l_@@_title_font_cs:n \bfseries \centering \zihao{3}},
- nameformat = {},
- titleformat = {},
- aftername = \hspace{9bp},
- pagestyle = BIThesis,
- beforeskip = 8bp,
- afterskip = 32bp,
- fixskip = true,
- }
-}
-
-\ctexset{section={
- number = {\arabicHeiti{\thechapter.\hspace{1bp}\arabic{section}}},
- format = {\l_@@_title_font_cs:n \raggedright \bfseries \zihao{4}},
- nameformat = {},
- titleformat = {},
- aftername = \hspace{8bp},
- beforeskip = 20bp plus 1ex minus .2ex,
- afterskip = 18bp plus .2ex,
- fixskip = true,
- }
-}
-
-\ctexset{subsection={
- number = {\arabicHeiti{\thechapter.\hspace{1bp}\arabic{section}.\hspace{1bp}\arabic{subsection}}},
- format = {\l_@@_title_font_cs:n \bfseries \raggedright \zihao{-4}},
- nameformat = {},
- titleformat = {},
- aftername = \hspace{7bp},
- beforeskip = 17bp plus 1ex minus .2ex,
- afterskip = 14bp plus .2ex,
- fixskip = true,
- }
-}
-
-\ctexset{
- secnumdepth = 3,
- subsubsection={
- numbering = true,
- number = {\arabicHeiti{\arabic{chapter}.\hspace{1bp}\arabic{section}.\hspace{1bp}\arabic{subsection}.\hspace{1bp}\arabic{subsubsection}}},
- format={\l_@@_title_font_cs:n \bfseries \raggedright \zihao{-4}},
- nameformat = {},
- titleformat = {},
- beforeskip=28bp plus 1ex minus .2ex,
- afterskip=24bp plus .2ex,
- fixskip=true,
- }
-}
-
-% TOC
-\addtocontents{toc}{\protect\hypersetup{hidelinks}}
-
-\@@_if_graduate:TF {
- % 各章标题,宋体四号
- \titlecontents{chapter}[0pt]{\songti \zihao{4}}
- {\thecontentslabel\hspace{\ccwd}}{}
- {\hspace{.5em}\titlerule*{.}\contentspage}
-} {
- \titlecontents{chapter}[0pt]{\songti \zihao{-4}}
- {\thecontentslabel\hspace{\ccwd}}{}
- {\hspace{.5em}\titlerule*{.}\contentspage}
-}
-\titlecontents{section}[1\ccwd]{\songti \zihao{-4}}
-{\thecontentslabel\hspace{\ccwd}}{}
-{\hspace{.5em}\titlerule*{.}\contentspage}
-\titlecontents{subsection}[2\ccwd]{\songti \zihao{-4}}
-{\thecontentslabel\hspace{\ccwd}}{}
-{\hspace{.5em}\titlerule*{.}\contentspage}
-
-% \bool_new:N \l_@@_add_to_toc_bool
-% \bool_set_true:N \l_@@_add_to_toc_bool
-%
-% \keys_define:nn { bit }
-% {
-% abstract .meta:nn = { bit / abstract } {#1},
-% abstract_en .meta:nn = { bit / abstract_en } {#1},
-% symbols .meta:nn = { bit / symbols } {#1},
-% appendices .meta:nn = { bit / appendices } {#1},
-% }
-%
-% \keys_define:nn { bit / abstract }
-% {
-% addTOC .bool_set:N = \l_@@_add_to_toc_bool,
-% }
-%
-% \keys_define:nn { bit / abstract_en }
-% {
-% addTOC .bool_set:N = \l_@@_add_to_toc_bool,
-% }
-%
-% \keys_define:nn { bit / symbols }
-% {
-% addTOC .bool_set:N = \l_@@_add_to_toc_bool,
-% }
-%
-% \keys_define:nn { bit / appendices }
-% {
-% chapterLevel .bool_set:N = \l_@@_appendices_chapter_level_bool,
-% title .tl_set:N = \l_@@_appendices_title_tl,
-% TOCTitle .tl_set:N = \l_@@_appendix_toc_title_tl,
-% }
-
-\RenewDocumentCommand \frontmatter {} {
-
- \int_compare:nNnTF {\g_@@_thesis_type_int} = {3}
- {
- \pagenumbering{roman}
- } {
- \pagenumbering{Roman}
- }
- \ctexset{
- chapter = {
- numbering = false,
- }
- }
- \pagestyle{BIThesis}
-}
-
-\RenewDocumentCommand \mainmatter {} {
- \cleardoublepage
-
- \ctexset{
- chapter = {
- numbering = true,
- }
- }
- \pagenumbering{arabic}
- \pagestyle{BIThesis}
- % 正文 22 磅的行距
- \setlength{\parskip}{0em}
- \setstretch{1.53}
- % 修复脚注出现跨页的问题
- \interfootnotelinepenalty=10000
-}
-
-\RenewDocumentCommand \backmatter {} {
- \setcounter{section}{0}
- \setcounter{subsection}{0}
- \setcounter{subsubsection}{0}
- \ctexset{
- chapter = {
- numbering = false,
- beforeskip = 18bp,
- format = {\l_@@_title_font_cs:n \l_@@_unnumchapter_style_cs:n \centering \zihao{3}},
- afterskip = 26bp,
- }
- }
-}
-
-\setlength{\abovecaptionskip}{11pt}
-\setlength{\belowcaptionskip}{9pt}
-
-\@@_if_graduate:TF {
- \tl_set:Nn \g_@@_label_divide_char_tl {.}
-} {
- \tl_set:Nn \g_@@_label_divide_char_tl {-}
-}
-
-% figure
-\cs_set:Npn \thefigure {\thechapter\g_@@_label_divide_char_tl\arabic{figure}}
-\captionsetup[figure]{font=small,labelsep=space}
-
-% table
-\cs_set:Npn \thetable {\thechapter\g_@@_label_divide_char_tl\arabic{table}}
-\captionsetup[table]{font=small,labelsep=space,skip=2pt}
-
-% equation
-\cs_set:Npn \theequation {\thechapter\g_@@_label_divide_char_tl\arabic{equation}}
-
-% code snippet
-\cs_set:Npn \thelstlisting {\thechapter\g_@@_label_divide_char_tl\arabic{lstlisting}}
-\cs_set:Npn \lstlistingname {\c_@@_label_code_tl}
-
-
-% 调整底层 TeX 排版引擎参数以保证所有段落能够很好地以两端对齐的方式呈现
-\tolerance=1
-\emergencystretch=\maxdimen
-\hyphenpenalty=10000
-\hbadness=10000
-
-\definecolor{codegreen}{rgb}{0,0.6,0}
-\definecolor{codegray}{rgb}{0.5,0.5,0.5}
-\definecolor{codepurple}{rgb}{0.58,0,0.82}
-\definecolor{backcolour}{rgb}{0.95,0.95,0.92}
-\lstdefinestyle{examplestyle}{
- backgroundcolor=\color{backcolour},
- commentstyle=\color{codegreen},
- keywordstyle=\color{magenta},
- numberstyle=\tiny\color{codegray},
- stringstyle=\color{codepurple},
- basicstyle=\ttfamily\footnotesize,
- breakatwhitespace=false,
- breaklines=true,
- captionpos=b,
- keepspaces=true,
- numbers=left,
- numbersep=5pt,
- showspaces=false,
- showstringspaces=false,
- showtabs=false,
- tabsize=2
-}
-% TODO: optional
-\lstset{style=examplestyle}
-
-% 调整插图目录与表格目录的标题
-\cs_set:Npn \listfigurename {\c_@@_label_figure_tl}
-\cs_set:Npn \listtablename {\c_@@_label_table_tl}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% 根据 GB 3102.11--93 以及 ISO 80000-2:2009 的规定,数学表达式中
-% 表示变量的拉丁字母和希腊字母均应当使用斜体。
-\unimathsetup{
- math-style = ISO,
- bold-style = ISO,
-}
-
-% 预定义用户常用的证明环境
-\theoremstyle{plain}
- \newtheorem{algorithm}{算法}[chapter]
- \newtheorem{theorem}{定理}[chapter]
- \newtheorem{lemma}[theorem]{引理}
- \newtheorem{proposition}[theorem]{命题}
- \newtheorem{corollary}[theorem]{推论}
- \newtheorem{axiom}[theorem]{公理}
-\theoremstyle{definition}
- \newtheorem{definition}{定义}[chapter]
- \newtheorem{conjecture}{猜想}[chapter]
- \newtheorem{example}{例}[chapter]
- \newtheorem{case}{情形}
-\theoremstyle{remark}
- \newtheorem{remark}{注}
- \renewcommand{\qedsymbol}{\ensuremath{\QED}}
-
-
-% user interface.
-\DeclareDocumentCommand \BITSetup { m }
- { \keys_set:nn { bithesis } { #1 }}
-
-\cs_new:Npn \@@_render_cover_entry:nn #1#2 {
- \makebox[\l_@@_cover_label_max_width_dim][\l_@@_cover_label_align_tl]{
- \tl_if_blank:VTF #1 {} {#1\l_@@_cover_dilimiter_tl}
- }
- \hspace{1ex}
- \@@_dunderline:nnn{\l_@@_cover_underline_offset_dim}{\l_@@_cover_underline_thickness_dim}{
- \makebox[\l_@@_cover_value_max_width_dim][\l_@@_cover_value_align_tl]{#2}
- }\par
-}
-
-% Get text with from #2, then set to #1.
-\cs_new:Npn \@@_get_text_width:Nn #1#2
- {
- \hbox_set:Nn \l_tmpa_box {#2}
- \dim_set:Nn #1 { \box_wd:N \l_tmpa_box }
- }
-\cs_generate_variant:Nn \@@_get_text_width:Nn { NV }
-
-% Get max text width from seq #2, then set to #1.
-\cs_new:Npn \@@_get_max_text_width:NN #1#2
- {
-% 这里用 |group| 确保局部变量不会被污染。
- \group_begin:
- \seq_set_eq:NN \l_@@_tmpa_seq #2
- \dim_zero_new:N \l_@@_tmpa_dim
- \bool_until_do:nn { \seq_if_empty_p:N \l_@@_tmpa_seq }
- {
- \seq_pop_left:NN \l_@@_tmpa_seq \l_@@_tmpa_tl
- \@@_get_text_width:NV \l_@@_tmpa_dim \l_@@_tmpa_tl
- \dim_gset:Nn #1 { \dim_max:nn {#1} { \l_@@_tmpa_dim } }
- }
- \group_end:
- }
-
-% process label (#1) and value #2 separately
-\cs_new:Npn \@@_parse_entry #1 #2 {
- \seq_set_split:Nnx \l_@@_tmp_right_seq {//} {#2}
- \seq_clear:N \l_@@_tmp_left_seq
- \seq_map_inline:Nn \l_@@_tmp_right_seq {
- \seq_put_right:Nn \l_@@_tmp_left_seq {}
- }
- \seq_put_left:Nn \l_@@_tmp_left_seq {#1}
- \seq_pop_right:NN \l_@@_tmp_left_seq \g_@@_trashcan_tl
-}
-
-\cs_new:Npn \@@_render_cover_entry:n #1 {
- \seq_set_from_clist:NN \l_@@_input_seq #1
- % parse newline //
- \seq_map_inline:Nn \l_@@_input_seq {
- \@@_parse_entry ##1
- \seq_concat:NNN \l_@@_right_seq \l_@@_right_seq \l_@@_tmp_right_seq
- \seq_concat:NNN \l_@@_left_seq \l_@@_left_seq \l_@@_tmp_left_seq
- }
-
- \bool_if:NT \l_@@_cover_auto_width_bool {
- \@@_get_max_text_width:NN \l_@@_cover_label_max_width_dim \l_@@_left_seq
- \@@_get_max_text_width:NN \l_@@_cover_value_max_width_dim \l_@@_right_seq
- }
-
-
- \group_begin:
- \bool_until_do:nn { \seq_if_empty_p:N \l_@@_left_seq }
- {
- \seq_pop_left:NN \l_@@_left_seq \l_@@_tmpa_tl
- \seq_pop_left:NN \l_@@_right_seq \l_@@_tmpb_tl
- \tl_if_empty:xTF \l_@@_tmpb_tl {} {
- \@@_render_cover_entry:nn {\l_@@_tmpa_tl} {\l_@@_tmpb_tl}
- }
- }
- \group_end:
-}
-
-% #1: position
-% #2: line_thickness
-% #3: token list
-\cs_new:Npn \@@_dunderline:nnn #1#2#3 {
- {\setbox0=\hbox{#3}\ooalign{\copy0\cr\rule[\dimexpr#1-#2\relax]{\wd0}{#2}}}
-}
-
-\cs_new:Npn \@@_dunderline:nn #1#2 {
- \@@_dunderline:nnn {#1} {1pt} {#2}
-}
-
-\cs_new:Npn \@@_dunderline:n #1 {
- \@@_dunderline:nnn {-10pt} {1pt} {#1}
-}
-
-\newcommand\dunderline[3][-1pt]{{%
- \setbox0=\hbox{#3}
- \ooalign{\copy0\cr\rule[\dimexpr#1-#2\relax]{\wd0}{#2}}}}
-
-\NewEnviron{blindPeerReview}{
- \bool_if:NTF \g_@@_blind_mode_bool {} {
- \BODY
- }
-}
-
-% 重定义 \tn{cleardoublepage},使得偶数页面在没有内容时也不显示页眉页脚,见
-% \url{https://tex.stackexchange.com/a/1683}。
-\RenewDocumentCommand \cleardoublepage { }
- {
- \clearpage
- \bool_if:NT \g_@@_twoside_bool
- {
- \int_if_odd:nF \c@page
- { \hbox:n { } \thispagestyle { empty } \newpage }
- }
- }
-
-\cs_new:Npn \make_graduate_cover: {
- \cleardoublepage
- \begin{titlepage}
- {
- \heiti\zihao{5}
- \tl_if_blank:VTF \l_@@_value_classified_level_tl {} {
- \flushright
- \c_@@_label_classified_level_tl:~
- \l_@@_value_classified_level_tl \par
- }
- }
- \centering
- \vspace*{65mm}
- {\heiti\zihao{-2} \l_@@_value_title_tl}
- \vskip 60mm
- {\heiti \zihao{-3} \l_@@_value_author_tl} % 黑体 小三
- \vskip 10mm
- {\heiti \zihao{-3} \l_@@_cover_date_tl} % 黑体 小三
- \end{titlepage}
-}
-
-\cs_new:Npn \make_paper_back: {
- \cleardoublepage
- \begin{titlepage}
- \vskip 5cm
- \begin{center}
- \setstretch{1.1}
- \begin{minipage}[t][19.7cm]{2em}
- \begin{center}
- {\heiti\zihao{3}\l_@@_value_title_tl}
- \vfill
- {\heiti\zihao{3}\l_@@_value_author_tl}
- \vfill
- {\heiti\zihao{3}\c_@@_label_university_tl}
- \end{center}
- \end{minipage}
- \end{center}
- % \vskip 5cm
- \end{titlepage}
-}
-
-\cs_new:Npn \@@_make_chinese_title_page: {
- \cleardoublepage
- \begin{titlepage}
- { %
- {\heiti \zihao{5} \noindent \c_@@_label_classification_tl} \l_@@_value_classification_tl\\
- {\heiti \zihao{5} \c_@@_label_udc_tl} \l_@@_value_udc_tl
- }
- \begin{center}
-
- \vskip \stretch{1}
- {\heiti\zihao{-2} \l_@@_value_title_tl}
- \vskip \stretch{1}
-
- % TODO: delete this?
- {\fangsong\zihao{4}}
- \def\tabcolsep{1pt}
- \def\arraystretch{1.5}
-
- {
- \renewcommand{\baselinestretch}{2}
-
- \tl_if_empty:NT \l_@@_cover_dilimiter_tl {
- \tl_set:Nn \l_@@_cover_dilimiter_tl {\qquad}
- }
- \tl_set:Nn \l_@@_cover_underline_offset_dim {-5pt}
- % if not auto width, try override width
- \bool_if:NF \l_@@_cover_auto_width_bool {
- \dim_compare:nNnT {\l_@@_cover_label_max_width_dim} = {0pt} {
- \dim_set:Nn \l_@@_cover_label_max_width_dim {45mm}
- }
- \dim_compare:nNnT {\l_@@_cover_value_max_width_dim} = {0pt} {
- \dim_set:Nn \l_@@_cover_value_max_width_dim {60mm}
- }
- }
-
- \clist_set:Nn \l_@@_input_clist {
- {\c_@@_graduate_label_author_tl} {\l_@@_value_author_tl},
- {\c_@@_graduate_label_school_tl} {\l_@@_value_school_tl},
- {\c_@@_graduate_label_supervisor_tl} {\l_@@_value_supervisor_tl},
- {\c_@@_graduate_label_chairman_tl} {\l_@@_value_chairman_tl},
- {\c_@@_graduate_label_degree_tl} {\l_@@_value_degree_tl},
- {\c_@@_graduate_label_major_tl} {\l_@@_value_major_tl},
- {\c_@@_graduate_label_institute_tl} {\l_@@_value_institute_tl},
- {\c_@@_graduate_label_defense_date_tl} {\l_@@_value_defense_date_tl},
- }
-
- \heiti\zihao{-3}
- \@@_render_cover_entry:n \l_@@_input_clist
- }
- \end{center}
- \vskip \stretch{0.5}
- \end{titlepage}
-}
-
-\cs_new:Npn \@@_make_english_title_page: {
- \begin{titlepage}
- \begin{center}
-
- \vspace*{10em}
- {\zihao{-2}\textbf{\l_@@_value_title_en_tl}}
- % \bfseries
- \vskip \stretch{1}
-
- {
- \tl_if_empty:NT \l_@@_cover_dilimiter_tl {
- \tl_set:Nn \l_@@_cover_dilimiter_tl {:~}
- }
-
- \tl_set:Nn \l_@@_cover_label_align_tl {l}
- \tl_set:Nn \l_@@_cover_underline_offset_dim {-5pt}
-
- % if not auto width, try override width
- \bool_if:NF \l_@@_cover_auto_width_bool {
- \dim_compare:nNnT {\l_@@_cover_label_max_width_dim} = {0pt} {
- \dim_set:Nn \l_@@_cover_label_max_width_dim {55mm}
- }
- \dim_compare:nNnT {\l_@@_cover_value_max_width_dim} = {0pt} {
- \dim_set:Nn \l_@@_cover_value_max_width_dim {85mm}
- }
- }
-
- \clist_set:Nn \l_@@_input_clist {
- {\c_@@_graduate_label_author_en_tl} {\l_@@_value_author_en_tl},
- {\c_@@_graduate_label_school_en_tl} {\l_@@_value_school_en_tl},
- {\c_@@_graduate_label_supervisor_en_tl} {\l_@@_value_supervisor_en_tl},
- {\c_@@_graduate_label_chairman_en_tl} {\l_@@_value_chairman_en_tl},
- {\c_@@_graduate_label_degree_en_tl} {\l_@@_value_degree_en_tl},
- {\c_@@_graduate_label_major_en_tl} {\l_@@_value_major_en_tl},
- {\c_@@_graduate_label_institute_en_tl} {\l_@@_value_institute_en_tl},
- {\c_@@_graduate_label_defense_date_en_tl} {\l_@@_value_defense_date_en_tl},
- }
-
- \zihao{-3}
- \@@_render_cover_entry:n \l_@@_input_clist
- }
-
- \end{center}
-
- \vskip \stretch{0.5}
- \end{titlepage}
-}
-
-\DeclareDocumentCommand \MakeCover {}
- {
- \begin{blindPeerReview}
- \group_begin:
-
- \int_case:nn {\g_@@_thesis_type_int}
- {
- {1}
- {
- \begin{titlepage}
- \vspace*{16mm}
-
- \centering
-
- \tl_if_blank:VTF \l_bit_coverheaderimage_tl {} {
- \includegraphics[width=9.87cm]{\l_bit_coverheaderimage_tl}\\
- }
-
- \vspace*{-3mm}
-
- \zihao{-0}\textbf{\ziju{0.12}\songti{\c_@@_bachelor_label_title_tl}}\par
-
- \vspace{16mm}
-
- \zihao{2}\textbf{\xihei:n \l_@@_value_title_tl}\par
-
- \vspace{3mm}
-
- \begin{spacing}{1.2}
- \zihao{3}\selectfont{\textbf{\l_@@_value_title_en_tl}}\par
- \end{spacing}
-
- \vspace{15mm}
-
-
- \begin{spacing}{1.8}
- \begin{center}
- \tl_if_empty:NT \l_@@_cover_dilimiter_tl {
- \tl_set:Nn \l_@@_cover_dilimiter_tl {:}
- }
- % if not auto width, try override width
- \bool_if:NF \l_@@_cover_auto_width_bool {
- \dim_compare:nNnT {\l_@@_cover_label_max_width_dim} = {0pt} {
- \dim_set:Nn \l_@@_cover_label_max_width_dim {35mm}
- }
- \dim_compare:nNnT {\l_@@_cover_value_max_width_dim} = {0pt} {
- \dim_set:Nn \l_@@_cover_value_max_width_dim {78mm}
- }
- }
-
- \clist_set:Nn \l_@@_input_clist {
- {\c_@@_label_school_tl} {\l_@@_value_school_tl},
- {\c_@@_label_major_tl} {\l_@@_value_major_tl},
- {\c_@@_label_author_tl} {\l_@@_value_author_tl},
- {\c_@@_label_student_id_tl} {\l_@@_value_student_id_tl},
- {\c_@@_label_supervisor_tl} {\l_@@_value_supervisor_tl},
- {\c_@@_label_co_supervisor_tl} {\l_@@_value_external_supervisor_tl},
- }
-
- \zihao{3}
-
- \@@_render_cover_entry:n \l_@@_input_clist
-
- \end{center}
- \end{spacing}
-
- \vspace*{\fill}
- \centering
- \zihao{3}\ziju{0.5}\songti{
- \tl_if_empty:NTF \l_@@_cover_date_tl {
- \today
- } {
- \l_@@_cover_date_tl
- }
- }
- \end{titlepage}
- }
- {2}
- {
- \begin{titlepage}
- \centering
-
- \tl_if_blank:VTF \l_bit_coverheaderimage_tl {} {
- \includegraphics[width=6.87cm]{\l_bit_coverheaderimage_tl}\\
- }
-
- \vspace{1mm}
-
- \zihao{2}\textbf{\songti{本科生毕业设计(论文)外文翻译}}
-
- \vspace{8mm}
-
- {
-
- \begin{spacing}{1.8}
-
- \tl_set:Nn \l_@@_cover_dilimiter_tl {\textbf{:}}
- \bool_set_false:N \l_@@_cover_auto_width_bool
- \dim_set:Nn \l_@@_cover_label_max_width_dim {35mm}
- \dim_set:Nn \l_@@_cover_value_max_width_dim {115mm}
-
- \clist_set:Nn \l_@@_input_clist {
- {\zihao{4}\textbf{外文原文题目}} {\l_@@_value_trans_origin_title_tl},
- {\zihao{4}\textbf{中文翻译题目}} {\l_@@_value_trans_title_tl},
- }
-
- \zihao{-3}
- \centering
-
- \@@_render_cover_entry:n \l_@@_input_clist
-
- \end{spacing}
-
- }
-
- \vspace{14mm}
-
- \zihao{2}\textbf{\xihei:n \l_@@_value_title_tl}\par
-
- \vspace{3mm}
-
- \begin{spacing}{1.2}
- \zihao{3}\selectfont{\textbf{\l_@@_value_title_en_tl}}\par
- \end{spacing}
-
- \vspace{19mm}
-
- \begin{spacing}{1.8}
- \tl_if_empty:NT \l_@@_cover_dilimiter_tl {
- \tl_set:Nn \l_@@_cover_dilimiter_tl {:}
- }
-
- % if not auto width, try override width
- \bool_if:NF \l_@@_cover_auto_width_bool {
- \dim_compare:nNnT {\l_@@_cover_label_max_width_dim} = {0pt} {
- \dim_set:Nn \l_@@_cover_label_max_width_dim {35mm}
- }
- \dim_compare:nNnT {\l_@@_cover_value_max_width_dim} = {0pt} {
- \dim_set:Nn \l_@@_cover_value_max_width_dim {78mm}
- }
- }
-
- \zihao{3}
-
- \clist_set:Nn \l_@@_input_clist {
- {\c_@@_label_school_tl} {\l_@@_value_school_tl},
- {\c_@@_label_major_tl} {\l_@@_value_major_tl},
- {\c_@@_label_author_tl} {\l_@@_value_author_tl},
- {\c_@@_label_student_id_tl} {\l_@@_value_student_id_tl},
- {\c_@@_label_supervisor_tl} {\l_@@_value_supervisor_tl},
- {\c_@@_label_co_supervisor_tl} {\l_@@_value_external_supervisor_tl},
- }
-
- \@@_render_cover_entry:n \l_@@_input_clist
-
- \end{spacing}
-
- \vspace*{\fill}
- \end{titlepage}
- }
- {3} {
- \begin{titlepage}
- \vspace*{16mm}
-
- \centering
-
- \tl_if_blank:VTF \l_bit_coverheaderimage_tl {} {
- \includegraphics[width=9.87cm]{\l_bit_coverheaderimage_tl}\\
- }
-
- \vspace*{-3mm}
-
- \zihao{1}\textbf{\ziju{0.12}Beijing\nobreak{~}Institute\nobreak{~}of\nobreak{~}Technology~Bachelor's~Thesis}\par
-
- \vspace{18mm}
-
- \zihao{2}\textbf{\xihei:n \l_@@_value_title_en_tl}\par
-
- \vspace{10mm}
-
-
- \begin{spacing}{1.8}
- \begin{center}
- \tl_if_empty:NT \l_@@_cover_dilimiter_tl {
- \tl_set:Nn \l_@@_cover_dilimiter_tl {:}
- }
-
- % if not auto width, try override width
- \bool_if:NF \l_@@_cover_auto_width_bool {
- \dim_compare:nNnT {\l_@@_cover_label_max_width_dim} = {0pt} {
- \dim_set:Nn \l_@@_cover_label_max_width_dim {20mm}
- }
- \dim_compare:nNnT {\l_@@_cover_value_max_width_dim} = {0pt} {
- \dim_set:Nn \l_@@_cover_value_max_width_dim {105mm}
- }
- }
-
- \zihao{4}
-
- \clist_set:Nn \l_@@_input_clist {
- {\c_@@_label_school_en_tl} {\l_@@_value_school_tl},
- {\c_@@_label_major_en_tl} {\l_@@_value_major_tl},
- {\c_@@_label_author_en_tl} {\l_@@_value_author_tl},
- {\c_@@_label_student_id_en_tl} {\l_@@_value_student_id_tl},
- {\c_@@_label_supervisor_en_tl} {\l_@@_value_supervisor_tl},
- {\c_@@_label_co_supervisor_en_tl} {\l_@@_value_external_supervisor_tl},
- }
-
- \@@_render_cover_entry:n \l_@@_input_clist
-
- \end{center}
- \end{spacing}
-
- \vspace*{\fill}
- \centering
- \zihao{3}\ziju{0.5}\songti{
- \tl_if_empty:NTF \l_@@_cover_date_tl {
- \today
- } {
- \l_@@_cover_date_tl
- }
- }
- \end{titlepage}
- }
- {4} {
- \make_graduate_cover:
- }
- {5} {
- \make_graduate_cover:
- }
- }
- \group_end:
- \end{blindPeerReview}
- }
-
-% 圆形数字编号定义
-\newcommand{\circled}[2][]{\tikz[baseline=(char.base)]
- {\node[shape = circle, draw, inner~sep = 1pt]
- (char) {\phantom{\ifblank{#1}{#2}{#1}}};
- \node at (char.center) {\makebox[0pt][c]{#2}};}}
-\robustify{\circled}
-
-\cs_new:Npn \@@_graduate_originality: {
- \ctexset {
- chapter / pagestyle = plain,
- }
-
- \begin{titlepage}
- \pagenumbering{gobble}
-
- % 原创性声明部分
- \begin{center}
- \@@_same_page:
- \chapter*{\heiti\zihao{3}\c_@@_graduate_label_originality_tl}
- \end{center}~\par
-
- % 本部分字号为小三
- \zihao{4}
- \c_@@_graduate_label_originality_clause_tl
-
- \vspace{17mm}
-
- \begin{flushright}
- \c_@@_graduate_label_originality_author_signature_tl\par
- \end{flushright}
-
- \vspace{16mm}
-
- % 使用授权声明部分
- \begin{center}
- \@@_same_page:
- \chapter*{\heiti\zihao{3}\c_@@_graduate_label_authorization_tl}
- \end{center}~\par
-
- \c_@@_graduate_label_authorization_clause_tl
-
- \vspace*{15mm}
-
- \begin{flushright}
- \begin{spacing}{1.65}
- \zihao{4}
- % \hspace{5mm}\raisebox{-2ex}{\includegraphics[width=30mm]{example-image}}\hspace{5mm}
- \c_@@_graduate_label_originality_author_signature_tl\par
- \c_@@_graduate_label_originality_supervisor_signature_tl\par
- \end{spacing}
- \end{flushright}
- \end{titlepage}
- \cleardoublepage
-}
-
-\NewDocumentCommand \MakeOriginality {}
-{
- \group_begin:
- \begin{blindPeerReview}
- \int_case:nn {\g_@@_thesis_type_int}
- {
- {1}
- {
- \pagestyle{BIThesis}
- \pagenumbering{gobble}
-
- % 原创性声明部分
- \begin{center}
- \vspace*{-2bp}
- \@@_same_page:
- \chapter*{\heiti\zihao{2}\c_@@_bachelor_label_originality_tl}
- \end{center}~\par
-
- % 本部分字号为小三
- \zihao{-3}
- \c_@@_bachelor_label_originality_clause_tl
-
- \vspace{17mm}
-
- \begin{flushright}
- \c_@@_bachelor_label_originality_author_signature_tl\par
- \end{flushright}
-
- \vspace{16mm}
-
- % 使用授权声明部分
- \begin{center}
- \@@_same_page:
- \chapter*{\heiti\zihao{2}\c_@@_bachelor_label_authorization_tl}
- \end{center}~\par
-
- \c_@@_bachelor_label_authorization_clause_tl
-
- \vspace*{3mm}
-
- \begin{flushright}
- \begin{spacing}{1.65}
- \zihao{-3}
- % \hspace{5mm}\raisebox{-2ex}{\includegraphics[width=30mm]{example-image}}\hspace{5mm}
- \c_@@_bachelor_label_originality_author_signature_tl\par
- \c_@@_bachelor_label_originality_supervisor_signature_tl\par
- \end{spacing}
- \end{flushright}
-
- \newpage
- }
- {3} {
- \setstretch{1.26}
- % 原创性声明部分
- \begin{center}
- \vspace*{-2bp}
- \@@_same_page:
- \chapter*{\heiti\zihao{-2}\c_@@_bachelor_english_label_originality_tl}
- \end{center}~\par
-
- % 本部分字号为小三
- \zihao{-4}
- \c_@@_bachelor_english_label_originality_clause_tl
-
- \bigbreak
-
- Student~(Signature):~\dunderline[-1pt]{1pt}{\makebox[18mm]{}}~Date:\par
-
- \vspace{6mm}
-
- % 使用授权声明部分
- \begin{center}
- \@@_same_page:
- \chapter*{\heiti\zihao{-2}\c_@@_bachelor_english_label_authorization_tl}
- \end{center}~\par
-
- \c_@@_bachelor_english_label_authorization_clause_tl
-
- \bigbreak
- Student~(Signature):~\dunderline[-1pt]{1pt}{\makebox[18mm + 16bp]{}}~\hspace{2mm}Date:\par
- Supervisor~(Signature):~\dunderline[-1pt]{1pt}{\makebox[18mm]{}}~\hspace{2mm}Date:\par
- }
- {4} {\@@_graduate_originality:}
- {5} {\@@_graduate_originality:}
- }
- \end{blindPeerReview}
- \group_end:
-}
-
-\NewDocumentCommand \MakePaperBack {}
- {
- \begin{blindPeerReview}
- \make_paper_back:
- \end{blindPeerReview}
- }
-
-\NewDocumentCommand \MakeTitle {}
- {
- \begin{blindPeerReview}
- \@@_make_chinese_title_page:
- \@@_make_english_title_page:
- \end{blindPeerReview}
- }
-
-\DeclareDocumentCommand \MakeTOC {}
- {
- {
- \@@_if_bachelor_thesis:TF {
- \renewcommand{\baselinestretch}{1.35}
- } {
- \renewcommand{\baselinestretch}{1.56}
- }
-
- \@@_if_thesis_english:TF {
- \tl_set:Nn \l_@@_toc_title_tl {\c_@@_label_toc_en_tl}
- } {
- \tl_set:Nn \l_@@_toc_title_tl {\c_@@_label_toc_tl}
- }
-
- % 自定义目录样式
- \cs_set:Npn \contentsname {
- \fontsize{16pt}{\baselineskip}
- \l_@@_unnumchapter_style_cs:n\l_@@_title_font_cs:n{\l_@@_toc_title_tl}
- \vspace{-8pt}
- }
-
- % 制作目录
- \tableofcontents
-
- % 在本科生全英文模板中,添加「目录」本身到目录中。
- \@@_if_thesis_int_type:nT {3} {
- \addcontentsline{toc}{chapter}{\c_@@_label_toc_en_tl}
- }
- }
- }
-
- % TODO:
- \NewDocumentEnvironment {abstract} {}
- {
-
- \cleardoublepage
- \setstretch{1.53}
-
- \@@_if_bachelor_thesis:T {
- \begin{center}
- \vspace*{-17bp}
- \heiti\zihao{-2}\textbf{
- \int_case:nn {\g_@@_thesis_type_int}
- {
- {1} {\l_@@_value_title_tl}
- {2} {\l_@@_value_trans_title_tl}
- {3} {\l_@@_value_title_tl}
- }
- }
- \end{center}
-
- \vspace*{2mm}
- }
-
- \ctexset{
- chapter/numbering = false,
- }
-
- \@@_if_bachelor_thesis:T {
- \ctexset{
- chapter/titleformat = {\textmd}
- }
- }
-
- {
- \@@_same_page:
- \bool_if:NTF \l_@@_add_abstract_to_toc_bool {
- \chapter{\c_@@_label_abstract_tl}
- } {
- \chapter*{\c_@@_label_abstract_tl}
- }
- }
- \vspace*{1mm}
- \par
- }
- {
- \par
- \vspace{4ex}\noindent\textbf{\heiti \c_@@_label_keywords_tl \l_@@_value_keywords_tl}\par
- \newpage
- }
-
- \NewDocumentEnvironment {abstractEn} {}
- {
- \cleardoublepage
- \setstretch{1.53}
-
- \@@_if_bachelor_thesis:T {
- \begin{spacing}{0.95}
- \centering
- \vspace*{-2bp}
-
- \@@_if_thesis_int_type:nTF {3} {
- \arialfamily\zihao{-2}\textbf\l_@@_value_title_en_tl\\
- } {
- \heiti\zihao{3}\textbf\l_@@_value_title_en_tl\\
- }
- \end{spacing}
- \vspace*{10mm}
- }
-
- \ctexset{
- chapter/numbering = false,
- }
-
- \@@_if_bachelor_thesis:TF {
- \int_compare:nNnTF {\g_@@_thesis_type_int} = {3}
- {
- \ctexset{
- chapter = {
- titleformat = {\heiti\zihao{3}\centering\textbf},
- }
- }
- } {
- \ctexset{
- chapter = {
- titleformat = {\heiti\zihao{-3}\centering\textmd},
- }
- }
- }
- } {
- \ctexset {
- chapter/titleformat = {\heiti\zihao{3}\centering\textbf}
- }
- }
-
- {
- \@@_same_page:
- \bool_if:nTF {\l_@@_add_abstract_en_to_toc_bool} {
- \chapter{\c_@@_label_abstract_en_tl}
- } {
- \chapter*{\c_@@_label_abstract_en_tl}
- }
- }
- }
- {
- \par\vspace{3ex}\noindent\textbf{\c_@@_label_keywords_en_tl \l_@@_value_keywords_en_tl}
- \newpage
- }
-
-% after \backmatter
- \NewDocumentEnvironment {conclusion} {}
- {
- \ctexset{
- section/number = \arabic{section}
- }
-
- \@@_if_thesis_english:TF {
- \chapter{\c_@@_label_conclusion_en_tl}
- } {
- \chapter{\c_@@_label_conclusion_tl}
- }
- }
- {}
-
-% after backmatter
- \NewDocumentEnvironment {bibprint} {}
- {
- % 设置参考文献字号为 5 号
- \renewcommand*{\bibfont}{\zihao{5}}
- % 设置参考文献各个项目之间的垂直距离为 0
- \setlength{\bibitemsep}{0ex}
- \setlength{\bibnamesep}{0ex}
- \setlength{\bibinitsep}{0ex}
- \@@_if_graduate:TF {
- } {
- % 「本科生」设置单倍行距
- \renewcommand{\baselinestretch}{1.2}
- }
- % 设置参考文献顺序标签 `[1]` 与文献内容 `作者. 文献标题...` 的间距
- \setlength{\biblabelsep}{1.7mm}
- % 设置参考文献后文缩进为 0(与 Word 模板保持一致)
- % See: https://github.com/hushidong/biblatex-gb7714-2015
- % 如何修参考文献表的缩进?
- \cs_set:Npn \itemcmd {
- \settowidth{\lengthid}{\mkgbnumlabel{\printfield{labelnumber}}}
- %%这里是所做的调整,以下两句通过调整\lengthid来调整缩进
- \setlength{\lengthid}{0pt}
- \addtolength{\lengthid}{-\biblabelsep}
- \setlength{\lengthlw}{\textwidth}
- \addtolength{\lengthlw}{-\lengthid}
- \addvspace{\bibitemsep}%恢复\bibitemsep的作用
- \hangindent\lengthid
- \leavevmode\mkgbnumlabel{\printfield{labelnumber}}%
- \hspace{\biblabelsep}
- }
- \@@_if_thesis_english:TF {
- \chapter{\c_@@_label_reference_en_tl}
- } {
- \chapter{\c_@@_label_reference_tl}
- }
- }
- {}
-
- % #1: The name that used as chapter title
- % #2: The name that used in ToC.
- \NewDocumentEnvironment {appendices} {}
- {
- % Used in chapter, ToC.
- \tl_new:N \l_@@_appendix_plain_label_tl
- % Used before reference label.
- \tl_new:N \l_@@_appendix_default_title_tl
-
- \@@_if_thesis_english:TF {
- \tl_set:Nn \l_@@_appendix_plain_label_tl {\c_@@_label_appendix_prefix_en_tl}
- \tl_set:Nn \l_@@_appendix_default_title_tl {\c_@@_label_appendix_en_tl}
- } {
- \tl_set:Nn \l_@@_appendix_plain_label_tl {\c_@@_label_appendix_prefix_tl}
- \tl_set:Nn \l_@@_appendix_default_title_tl {\c_@@_label_appendix_tl}
- }
-
- \bool_if:NTF \l_@@_appendices_chapter_level_bool {
- \setcounter{chapter}{0}
- \ctexset{
- chapter/numbering = true,
- chapter/name = {},
- chapter/number = \l_@@_appendix_plain_label_tl\hspace{1ex}\Alph{chapter},
- section/number = \Alph{chapter}. \arabic{section},
- subsection/number = \Alph{chapter}. \arabic{section}. \arabic{subsection},
- }
-
- \cs_set:Npn \thechapter {
- \Alph{chapter}
- }
- } {
- \ctexset{
- section/number = \l_@@_appendix_plain_label_tl\hspace{1ex}\Alph{section},
- subsection/number = \Alph{section}. \arabic{subsection},
- }
-
- \cs_set:Npn \thechapter {
- \Alph{section}
- }
-
- \tl_if_blank:VTF \l_@@_appendices_title_tl {
- \chapter{\l_@@_appendix_default_title_tl}
- } {
- \chapter*{\l_@@_appendices_title_tl}
- \stepcounter{chapter}
- \tl_if_blank:VTF \l_@@_appendix_toc_title_tl {
- \addcontentsline{toc}{chapter}{\l_@@_appendix_default_title_tl}
- } {
- \addcontentsline{toc}{chapter}{\l_@@_appendix_toc_title_tl}
- }
- }
- }
- }
- {
- }
-
- \NewDocumentEnvironment {acknowledgements} {+b}
- {
- \begin{blindPeerReview}
- \ctexset{
- section/number = \arabic{section},
- subsection/number = \arabic{section}. \arabic{subsection},
- }
-
- \@@_if_thesis_english:TF {
- \chapter{\c_@@_label_ack_en_tl}
- } {
- \chapter{\c_@@_label_ack_tl}
- }
- #1
- \end{blindPeerReview}
- } {}
-
- \NewDocumentEnvironment {publications} {+b}
- {
- \begin{blindPeerReview}
- % 设置参考文献字号为 5 号
- \renewcommand*{\bibfont}{\zihao{5}}
- % 设置参考文献各个项目之间的垂直距离为 0
- \setlength{\bibitemsep}{0ex}
- \setlength{\bibnamesep}{0ex}
- \setlength{\bibinitsep}{0ex}
- % 设置单倍行距
- \renewcommand{\baselinestretch}{1.2}
- % 设置参考文献顺序标签 `[1]` 与文献内容 `作者. 文献标题...` 的间距
- \setlength{\biblabelsep}{1.7mm}
- % 设置参考文献后文缩进为 0(与 Word 模板保持一致)
- % See: https://github.com/hushidong/biblatex-gb7714-2015
- % 如何修参考文献表的缩进?
- \cs_set:Npn \itemcmd {
- \settowidth{\lengthid}{\mkgbnumlabel{\printfield{labelnumber}}}
- %%这里是所做的调整,以下两句通过调整\lengthid来调整缩进
- \setlength{\lengthid}{0pt}
- \addtolength{\lengthid}{-\biblabelsep}
- \setlength{\lengthlw}{\textwidth}
- \addtolength{\lengthlw}{-\lengthid}
- \addvspace{\bibitemsep}%恢复\bibitemsep的作用
- \hangindent\lengthid
- \leavevmode\mkgbnumlabel{\printfield{labelnumber}}%
- \hspace{\biblabelsep}
- }
-
- % ===== 上方定义与「参考文献」部分相同
- \cs_set:Npn \mkbibnamegiven ##1 {
- \ifitemannotation{myself}{\textbf{##1}}{##1}
- }
-
- \cs_set:Npn \mkbibnamefamily ##1 {
- \ifitemannotation{myself}{\textbf{##1}}{##1}
- }
-
- % Sorting by year, name, type.
- \newrefcontext[sorting=ynt]
- \chapter{\c_@@_label_publications_tl}
- #1
- \end{blindPeerReview}
- }
- {}
-
- \NewDocumentEnvironment {resume} {+b}
- {
- \begin{blindPeerReview}
- \chapter{\c_@@_label_resume_tl}
- #1
- \end{blindPeerReview}
- }
- {
- }
-
- \NewDocumentEnvironment {symbols} {}
- {
- \bool_if:NTF \l_@@_add_symbols_to_toc_bool {
- \chapter{\c_@@_label_symbols_tl}
- } {
- \chapter*{\c_@@_label_symbols_tl}
- }
- \zihao{-4}
- \begin{itemize}[labelwidth=2.5cm,labelsep=0.5cm,leftmargin=3cm,itemindent=0cm,itemsep=0cm]
- \cs_set:Npn \makelabel ##1 {##1\hfil}
- }
- {
- \end{itemize}
- }
-% \end{macrocode}
-% \begin{macrocode}
-%</thesis>
-% \end{macrocode}
-
-% \begin{macrocode}
-%<*report>
-% \end{macrocode}
-%
-% \begin{macrocode}
-% Define global
-\int_new:N \g_@@_report_type_int
-
-% Define Consts.
-\clist_const:Nn \c_@@_report_type_clist
- { common, undergraduate_proposal}
-
-% Define tmp Variables
-\seq_new:N \l_@@_right_seq
-\seq_new:N \l_@@_left_seq
-
-\PassOptionsToPackage{AutoFakeBold,AutoFakeSlant}{xeCJK}
-
-\keys_define:nn { bitreport }
- {
- option .meta:nn = {bitreport / option } {#1},
- cover .meta:nn = { bitreport / cover } {#1},
- info .meta:nn = { bitreport / info } {#1},
- misc .meta:nn = { bitreport / misc } {#1}
- }
-
-\keys_define:nn { bitreport / option }
- {
- type .choice:,
- type .value_required:n = true,
- type .choices:Vn =
- \c_@@_report_type_clist
- {
- \int_set_eq:NN \g_@@_report_type_int \l_keys_choice_int
- },
- type .initial:n = common,
- ctex .tl_set:N = \l_@@_options_to_ctex_tl,
- }
-
-
-% Pass every option not explicitly defined to `ctexbeamer`.
-\DeclareOption*{
- \PassOptionsToClass{\l_@@_options_to_ctex_tl}{ctexart}
-}
-% Executes the code for each option.
-\ProcessOptions\relax
-% Load
-\LoadClass[zihao=-4]{ctexart}
-
-\RequirePackage[a4paper,left=3cm,right=2.4cm,top=2.6cm,bottom=2.38cm,includeheadfoot]{geometry}
-\RequirePackage{fancyhdr}
-\RequirePackage{setspace}
-\RequirePackage{caption}
-\RequirePackage{booktabs}
-\RequirePackage{pdfpages}
-
-
-\keys_define:nn { bitreport / cover }
- {
- imagePath .tl_set:N = \l_bit_coverimagepath_tl,
- date .tl_set:N = \l_@@_cover_date_tl,
- %% cover entry
- dilimiter .tl_set:N = \l_@@_cover_dilimiter_tl,
- labelAlign .tl_set:N = \l_@@_cover_label_align_tl,
- labelAlign .initial:n = {r},
- valueAlign .tl_set:N = \l_@@_cover_value_align_tl,
- valueAlign .initial:n = {c},
- labelMaxWidth .dim_set:N = \l_@@_cover_label_max_width_dim,
- valueMaxWidth .dim_set:N = \l_@@_cover_value_max_width_dim,
- autoWidth .bool_set:N = \l_@@_cover_auto_width_bool,
- autoWidth .initial:n = {true},
- underlineThickness .dim_set:N = \l_@@_cover_underline_thickness_dim,
- underlineThickness .initial:n = {1pt},
- underlineOffset .dim_set:N = \l_@@_cover_underline_offset_dim,
- underlineOffset .initial:n = { -10pt },
- }
-
-\keys_define:nn { bitreport / info }
- {
- title .tl_set:N = \l_@@_value_title_tl,
- school .tl_set:N = \l_@@_value_school_tl,
- major .tl_set:N = \l_@@_value_major_tl,
- class .tl_set:N = \l_@@_value_class_tl,
- author .tl_set:N = \l_@@_value_author_tl,
- supervisor .tl_set:N = \l_@@_value_supervisor_tl,
- externalSupervisor .tl_set:N = \l_@@_value_external_supervisor_tl,
- studentId .tl_set:N = \l_@@_value_student_id_tl,
- }
-
-\keys_define:nn { bitreport / misc }
- {
- reviewTable .tl_set:N = \l_bit_reviewtable_tl,
- }
-
-\ProcessKeysOptions { bitreport / option }
-
-\cs_generate_variant:Nn \tl_if_empty:nTF {x}
-\cs_generate_variant:Nn \seq_set_split:Nnn {Nnx}
-
-% #1: position
-% #2: line_thickness
-% #3: token list
-\cs_new:Npn \@@_dunderline:nnn #1#2#3 {
- {\setbox0=\hbox{#3}\ooalign{\copy0\cr\rule[\dimexpr#1-#2\relax]{\wd0}{#2}}}
-}
-
-\cs_new:Npn \@@_render_cover_entry:nn #1#2 {
- \makebox[\l_@@_cover_label_max_width_dim][\l_@@_cover_label_align_tl]{
- \tl_if_blank:VTF #1 {} {#1\l_@@_cover_dilimiter_tl}
- }
- \hspace{1ex}
- \@@_dunderline:nnn{\l_@@_cover_underline_offset_dim}{\l_@@_cover_underline_thickness_dim}{
- \makebox[\l_@@_cover_value_max_width_dim][\l_@@_cover_value_align_tl]{#2}
- }\par
-}
-
-% Get text with from #2, then set to #1.
-\cs_new:Npn \@@_get_text_width:Nn #1#2
- {
- \hbox_set:Nn \l_tmpa_box {#2}
- \dim_set:Nn #1 { \box_wd:N \l_tmpa_box }
- }
-\cs_generate_variant:Nn \@@_get_text_width:Nn { NV }
-
-% Get max text width from seq #2, then set to #1.
-\cs_new:Npn \@@_get_max_text_width:NN #1#2
- {
-% 这里用 |group| 确保局部变量不会被污染。
- \group_begin:
- \seq_set_eq:NN \l_@@_tmpa_seq #2
- \dim_zero_new:N \l_@@_tmpa_dim
- \bool_until_do:nn { \seq_if_empty_p:N \l_@@_tmpa_seq }
- {
- \seq_pop_left:NN \l_@@_tmpa_seq \l_@@_tmpa_tl
- \@@_get_text_width:NV \l_@@_tmpa_dim \l_@@_tmpa_tl
- \dim_gset:Nn #1 { \dim_max:nn {#1} { \l_@@_tmpa_dim } }
- }
- \group_end:
- }
-
-% process label (#1) and value #2 separately
-\cs_new:Npn \@@_parse_entry #1 #2 {
- \seq_set_split:Nnx \l_@@_tmp_right_seq {//} {#2}
- \seq_clear:N \l_@@_tmp_left_seq
- \seq_map_inline:Nn \l_@@_tmp_right_seq {
- \seq_put_right:Nn \l_@@_tmp_left_seq {}
- }
- \seq_put_left:Nn \l_@@_tmp_left_seq {#1}
- \seq_pop_right:NN \l_@@_tmp_left_seq \g_@@_trashcan_tl
-}
-
-\cs_new:Npn \@@_render_cover_entry:n #1 {
- \seq_set_from_clist:NN \l_@@_input_seq #1
- % parse newline //
- \seq_map_inline:Nn \l_@@_input_seq {
- \@@_parse_entry ##1
- \seq_concat:NNN \l_@@_right_seq \l_@@_right_seq \l_@@_tmp_right_seq
- \seq_concat:NNN \l_@@_left_seq \l_@@_left_seq \l_@@_tmp_left_seq
- }
-
- \bool_if:NT \l_@@_cover_auto_width_bool {
- \@@_get_max_text_width:NN \l_@@_cover_label_max_width_dim \l_@@_left_seq
- \@@_get_max_text_width:NN \l_@@_cover_value_max_width_dim \l_@@_right_seq
- }
-
-
- \group_begin:
- \bool_until_do:nn { \seq_if_empty_p:N \l_@@_left_seq }
- {
- \seq_pop_left:NN \l_@@_left_seq \l_@@_tmpa_tl
- \seq_pop_left:NN \l_@@_right_seq \l_@@_tmpb_tl
- \tl_if_empty:xTF \l_@@_tmpb_tl {} {
- \@@_render_cover_entry:nn {\l_@@_tmpa_tl} {\l_@@_tmpb_tl}
- }
- }
- \group_end:
-}
-
-\DeclareDocumentCommand \BITSetup { m }
- { \keys_set:nn { bitreport } { #1 }}
-\DeclareDocumentCommand \MakeCover {}
- {
- \group_begin:
- \int_case:nn {\g_@@_report_type_int} {
- {1} {
- \begin{titlepage}
- \centering
- \vspace{23mm}
- \tl_if_empty:NF \l_bit_coverimagepath_tl {
- \includegraphics[width=.5\textwidth]{\l_bit_coverimagepath_tl}\\
- }
- \vspace{10mm}
- \heiti\fontsize{24pt}{24pt}\selectfont{\l_@@_value_title_tl}\\
- \vspace{67mm}
- \begin{spacing}{2.2}
- \songti\zihao{3}
- \clist_set:Nn \l_@@_input_clist {
- {\textbf{学\qquad 院:}} {\l_@@_value_school_tl},
- {\textbf{专\qquad 业:}} {\l_@@_value_major_tl},
- {\textbf{班\qquad 级:}} {\l_@@_value_class_tl},
- {\textbf{学\qquad 号:}} {\l_@@_value_student_id_tl},
- {\textbf{姓\qquad 名:}} {\l_@@_value_author_tl},
- {\textbf{任课教师:}} {\l_@@_value_supervisor_tl},
- }
-
- \@@_render_cover_entry:n \l_@@_input_clist
-
- \end{spacing}
- \vspace*{\fill}
- \centering
- \songti\fontsize{12pt}{12pt}\selectfont{
- \tl_if_empty:NTF \l_@@_cover_date_tl {
- \today
- } {
- \l_@@_cover_date_tl
- }
- }
- \end{titlepage}
- }
- {2} {
- % Main code for \MakeCover
- \begin{titlepage}
- \topskip=0pt
- \vspace*{-16mm}
- \centering
- \hspace{-6mm}\songti\fontsize{22pt}{22pt}\selectfont{北京理工大学}\par
-
- \vspace{13mm}
-
- \hspace{-6mm}\heiti\fontsize{24pt}{24pt}\selectfont{本科生毕业设计(论文)开题报告}\par
-
- \vspace{53mm}
-
- \begin{spacing}{2.2}
- \songti\zihao{3}
- \clist_set:Nn \l_@@_input_clist {
- {\textbf{学\qquad 院:}} {\l_@@_value_school_tl},
- {\textbf{专\qquad 业:}} {\l_@@_value_major_tl},
- {\textbf{班\qquad 级:}} {\l_@@_value_class_tl},
- {\textbf{姓\qquad 名:}} {\l_@@_value_author_tl},
- {\textbf{指导教师:}} {\l_@@_value_supervisor_tl},
- {\textbf{校外指导教师:}} {\l_@@_value_external_supervisor_tl},
- }
-
- \@@_render_cover_entry:n \l_@@_input_clist
-
- \end{spacing}
-
- \vspace*{\fill}
-
- \centering
- \hspace{-6mm}\songti\fontsize{12pt}{12pt}\selectfont{\today}
- \end{titlepage}
- }
- }
- \group_end:
- }
-
-\DeclareDocumentCommand \MakeReviewTable {}
- {
- \group_begin:
- \begin{titlepage}
- \includepdf[pages=-]{\l_bit_reviewtable_tl}
- \end{titlepage}
- \group_end:
- }
-
-% 定义 caption 字体为楷体
-\DeclareCaptionFont{kaiticaption}{\kaishu \normalsize}
-
-% 设置图片的 caption 格式
-\renewcommand{\thefigure}{\thesection-\arabic{figure}}
-\captionsetup[figure]{font=small,labelsep=space,skip=10bp,labelfont=bf,font=kaiticaption}
-
-% 设置表格的 caption 格式
-\renewcommand{\thetable}{\thesection-\arabic{table}}
-\captionsetup[table]{font=small,labelsep=space,skip=10bp,labelfont=bf,font=kaiticaption}
-
-% 输出大写数字日期
-\ctexset{today=big}
-
-% 将西文字体设置为 Times New Roman
-\setromanfont{Times~New~Roman}
-
-%% 将中文楷体设置为 SIMKAI.TTF(如果需要)
-% \setCJKfamilyfont{zhkai}{[SIMKAI.TTF]}
-% \newcommand*{\kaiti}{\CJKfamily{zhkai}}
-
-% 设置文档标题深度
-\setcounter{tocdepth}{3}
-\setcounter{secnumdepth}{3}
-
-%%
-% 设置一级标题、二级标题格式
-% 一级标题:小三,宋体,加粗,段前段后各半行
-\ctexset{section={
- format={\raggedright \bfseries \songti \zihao{-3}},
- beforeskip = 24bp plus 1ex minus .2ex,
- afterskip = 24bp plus .2ex,
- fixskip = true,
- name = {,.\quad}
- }
-}
-% 二级标题:小四,宋体,加粗,段前段后各半行
-\ctexset{subsection={
- format = {\bfseries \songti \raggedright \zihao{4}},
- beforeskip = 24bp plus 1ex minus .2ex,
- afterskip = 24bp plus .2ex,
- fixskip = true,
- }
-}
-% 页眉和页脚(页码)的格式设定
-\fancyhf{}
-\int_case:nn {\g_@@_report_type_int} {
- {1} {\fancyhead[R]{\fontsize{10.5pt}{10.5pt}\selectfont{\l_@@_value_title_tl}}}
- {2} {\fancyhead[R]{\fontsize{10.5pt}{10.5pt}\selectfont{北京理工大学本科生毕业设计(论文)开题报告}}}
-}
-\fancyfoot[R]{\fontsize{9pt}{9pt}\selectfont{\thepage}}
-\renewcommand{\headrulewidth}{1pt}
-\renewcommand{\footrulewidth}{0pt}
-
-% 正文开始
-\pagestyle{fancy}
-\setcounter{page}{1}
-
-% 正文 22 磅的行距,段前段后间距为 0
-% \setlength{\parskip}{0em}
-\cs_set:Npn \baselinestretch {1.53}
-% 正文首行悬挂 1.02cm
-% \setlength{\parindent}{1.02cm}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</report>
-% \end{macrocode}
-% \begin{macrocode}
-%<*beamer>
-% \end{macrocode}
-%
-% \begin{macrocode}
-% Define our keyvalues
-\keys_define:nn { bitbeamer }
- {
- titlegraphic .tl_set:N = \l_bit_titlegraphic_tl,
- framelogo .tl_set:N = \l_bit_framelogo_tl,
- }
-\ProcessKeysOptions { bitbeamer }
-
-% Pass every option not explicitly defined to `ctexbeamer`.
-\DeclareOption*{
- \PassOptionsToClass{\CurrentOption}{ctexbeamer}
-}
-% Executes the code for each option.
-\ProcessOptions\relax
-
-% Load
-\LoadClass{ctexbeamer}
-
-\RequirePackage{xeCJKfntef}
-\RequirePackage{tikz}
-
-\usetheme{Madrid}
-% 设置主题色
-\colorlet{beamer@blendedblue}{green!40!black}
-
-\cs_new:Npn \CJKhl:nn #1 #2
- { \CJKsout*[thickness=2.5ex, format=\color{#1}]{#2} }
-
-% Set header if logo path is provided.
-\tl_if_empty:NF \l_bit_titlegraphic_tl {
- % BIT Logo
- \titlegraphic{
- \includegraphics[width=2cm]{\l_bit_titlegraphic_tl}
- }
-}
-
-% Set title logo if logo path is provided.
-\tl_if_empty:NF \l_bit_framelogo_tl {
- \addtobeamertemplate{frametitle}{}{%
- \begin{tikzpicture}[remember~picture,overlay]
- \node[anchor=north~east,yshift=2pt] at (current~page.north~east) {\includegraphics[height=0.8cm]{\tl_use:N \l_bit_framelogo_tl}};
- \end{tikzpicture}
- }
-}
-
-% Expose command to user.
-\cs_new_eq:NN \CJKhl \CJKhl:nn
-% \end{macrocode}
-% \begin{macrocode}
-%</beamer>
-% \end{macrocode}
-
-% \begin{macrocode}
-%<*book>
-% \end{macrocode}
-% \begin{macrocode}
-
-% 目前只有本科的模板,但仍旧要为可能预留空间。
-\newif\if@bit@bachelor
-\newif\if@bit@docTranslation
-\newif\if@bit@master
-\newif\if@bit@docter
-
-\RequirePackage{kvoptions}
-
-\SetupKeyvalOptions{
- family=BIThesis,
- prefix=BIThesis@
-}
-
-\DeclareStringOption[14pt]{footskip}
-\DeclareBoolOption{titleNumberHeiti}
-\ProcessKeyvalOptions*
-
-
-\DeclareOption{bachelor}{\@bit@bachelortrue}
-\DeclareOption{translation}{\@bit@docTranslationtrue}
-\DeclareOption*{\PassOptionsToClass{\CurrentOption}{ctexbook}}
-
-\ExecuteOptions{bachelor}
-
-\ProcessOptions\relax
-
-\PassOptionsToPackage{AutoFakeBold,AutoFakeSlant}{xeCJK}
-\LoadClass[UTF8,zihao=-4,oneside,openany]{ctexbook}
-
-% \RequirePackage[a4paper,left=3cm,right=2.6cm,top=3.5cm,bottom=2.9cm]{geometry}
-% 目前 29mm 最接近 Word 排版
-\RequirePackage{xeCJK}
-\RequirePackage{titletoc}
- % \RequirePackage{fontspec}
-\RequirePackage{setspace}
-\RequirePackage{graphicx}
-\RequirePackage{fancyhdr}
-\RequirePackage{pdfpages}
-\RequirePackage{setspace}
-\RequirePackage{booktabs}
-\RequirePackage{multirow}
-\RequirePackage{tikz}
-\RequirePackage{etoolbox}
-\RequirePackage{hyperref}
-\RequirePackage{xcolor}
-\RequirePackage{caption}
-\RequirePackage{array}
-\RequirePackage{amsmath}
-\RequirePackage{amssymb}
-\RequirePackage{pdfpages}
-\RequirePackage{listings}
-
-%\PackageError{zzzz}{Main \BIThesis@footskip hellp}{test}
-
-% 设置参考文献编译后端为 biber,引用格式为 GB/T7714-2015 格式
-% 参考文献使用宏包见 https://github.com/hushidong/biblatex-gb7714-2015
-\RequirePackage[
- backend=biber,
- style=gb7714-2015,
- gbalign=gb7714-2015,
- gbnamefmt=lowercase,
- gbpub=false,
- doi=false,
- url=false,
- eprint=false,
- isbn=false,
-]{biblatex}
-
-% 参考文献引用文件位于 misc/ref.bib
-\addbibresource{./misc/ref.bib}
-
-% 西文字体默认为 Times New Roman
-\setromanfont{Times New Roman}
-% 论文题目字体为华文细黑
-\setCJKfamilyfont{xihei}[AutoFakeBold,AutoFakeSlant]{[STXIHEI.TTF]} % 若希望使用本机字体,也可以用 {STXihei} 来调用
-\newcommand{\xihei}{\CJKfamily{xihei}}
-
-\ifBIThesis@titleNumberHeiti
- \newcommand{\arabicHeiti}[1]{\xeCJKsetup{CJKspace=true}\xeCJKDeclareCharClass{CJK}{`0 -> `9}{\heiti\raisebox{-0.1ex}{#1}}\normalspacedchars{0,1,2,3,4,5,6,7,8,9}\xeCJKsetup{CJKspace=false}}
-\else
- \newcommand{\arabicHeiti}[1]{#1}
-\fi
-
-
-
-% 主题页面格式:BIThesis
-\fancypagestyle{BIThesis}{
- % 页眉高度
- \setlength{\headheight}{20pt}
- % 页码高度(不完美,比规定稍微靠下 2mm)
- \setlength{\footskip}{\BIThesis@footskip}
-
- \fancyhf{}
- % 定义页眉、页码
- \fancyhead[C]{\zihao{4}\ziju{0.08}\songti{北京理工大学本科生毕业设计(论文)}}
- \fancyfoot[C]{\songti\zihao{5} \thepage}
- % 页眉分割线稍微粗一些
- \renewcommand{\headrulewidth}{0.6pt}
-}
-
-\if@bit@docTranslation
-% 主题页面格式:BIThesis
-\fancypagestyle{BIThesis}{
- % 页眉高度
- \setlength{\headheight}{20pt}
- % 页码高度(不完美,比规定稍微靠下 2mm)
- \setlength{\footskip}{\BIThesis@footskip}
-
- \fancyhf{}
- % 定义页码
- \fancyfoot[C]{\songti\zihao{5} \thepage}
- % 页眉分割线稍微粗一些
- \renewcommand{\headrulewidth}{0.6pt}
-
- % 定义页眉
- \fancyhead[C]{\zihao{4}\ziju{0.08}\songti{北京理工大学本科生毕业设计(论文)外文翻译}}
-}
-\fi
-% 设置章节格式
-% 一级标题:黑体,三号,加粗;间距:段前 0.5 行,段后 1 行;
-\ctexset{chapter={
- name = {第,章},
- number = {\arabicHeiti{ \arabic{chapter} }},
- format = {\heiti \bfseries \centering \zihao{3}},
- aftername = \hspace{9bp},
- pagestyle = BIThesis,
- beforeskip = 8bp,
- afterskip = 32bp,
- fixskip = true,
- }
-}
-
-% 二级标题:黑体,四号,加粗;间距:段前 0.5 行,段后 0 行;
-\ctexset{section={
- number = {\arabicHeiti{\thechapter.\hspace{1bp}\arabic{section}}},
- format = {\heiti \raggedright \bfseries \zihao{4}},
- aftername = \hspace{8bp},
- beforeskip = 20bp plus 1ex minus .2ex,
- afterskip = 18bp plus .2ex,
- fixskip = true,
- }
-}
-
-% 三级标题:黑体、小四、加粗;间距:段前 0.5 行,段后 0 行;
-\ctexset{subsection={
- number = {\arabicHeiti{\thechapter.\hspace{1bp}\arabic{section}.\hspace{1bp}\arabic{subsection}}},
- format = {\heiti \bfseries \raggedright \zihao{-4}},
- aftername = \hspace{7bp},
- beforeskip = 17bp plus 1ex minus .2ex,
- afterskip = 14bp plus .2ex,
- fixskip = true,
- }
-}
-
-% 设置目录样式
-% 添加 PDF 链接
-\addtocontents{toc}{\protect\hypersetup{hidelinks}}
-
-% 解决「目录」二字的格式问题
-\renewcommand{\contentsname}{
- \fontsize{16pt}{\baselineskip}
- \normalfont\heiti{目~~~~录}
- \vspace{-8pt}
-}
-% 定义目录样式
-\titlecontents{chapter}[0pt]{\songti \zihao{-4}}
-{\thecontentslabel\hspace{\ccwd}}{}
-{\hspace{.5em}\titlerule*{.}\contentspage}
-\titlecontents{section}[1\ccwd]{\songti \zihao{-4}}
-{\thecontentslabel\hspace{\ccwd}}{}
-{\hspace{.5em}\titlerule*{.}\contentspage}
-\titlecontents{subsection}[2\ccwd]{\songti \zihao{-4}}
-{\thecontentslabel\hspace{\ccwd}}{}
-{\hspace{.5em}\titlerule*{.}\contentspage}
-
-% 前置页面(原创性声明、中英文摘要、目录等)
-\renewcommand{\frontmatter}{
- \pagenumbering{Roman}
- \pagestyle{BIThesis}
-}
-
-% 正文页面
-\renewcommand{\mainmatter}{
- \pagenumbering{arabic}
- \pagestyle{BIThesis}
-}
-
-% 设置 caption 与 figure 之间的距离
-\setlength{\abovecaptionskip}{11pt}
-\setlength{\belowcaptionskip}{9pt}
-
-% 设置图片的 caption 格式
-\renewcommand{\thefigure}{\thechapter-\arabic{figure}}
-\captionsetup[figure]{font=small,labelsep=space}
-
-% 设置 listings 源代码高亮的格式
-\AtBeginDocument{
- \renewcommand{\lstlistingname}{代码}
- \renewcommand{\thelstlisting}{\arabic{chapter}-\arabic{lstlisting}}
-}
-
-\definecolor{codegreen}{rgb}{0,0.6,0}
-\definecolor{codegray}{rgb}{0.5,0.5,0.5}
-\definecolor{codepurple}{rgb}{0.58,0,0.82}
-\definecolor{backcolour}{rgb}{0.95,0.95,0.92}
-\lstdefinestyle{examplestyle}{
- backgroundcolor=\color{backcolour},
- commentstyle=\color{codegreen},
- keywordstyle=\color{magenta},
- numberstyle=\tiny\color{codegray},
- stringstyle=\color{codepurple},
- basicstyle=\ttfamily\footnotesize,
- breakatwhitespace=false,
- breaklines=true,
- captionpos=b,
- keepspaces=true,
- numbers=left,
- numbersep=5pt,
- showspaces=false,
- showstringspaces=false,
- showtabs=false,
- tabsize=2
-}
-\lstset{style=examplestyle}
-
-
-% 设置表格的 caption 格式和 caption 与 table 之间的垂直距离
-\renewcommand{\thetable}{\thechapter-\arabic{table}}
-\captionsetup[table]{font=small,labelsep=space,skip=2pt}
-
-% 调整底层 TeX 排版引擎参数以保证所有段落能够很好地以两端对齐的方式呈现
-\tolerance=1
-\emergencystretch=\maxdimen
-\hyphenpenalty=10000
-\hbadness=10000
-
-% 设置数学公式编号格式
-\renewcommand{\theequation}{\arabic{chapter}-\arabic{equation}}
-
-\newcommand{\unnumchapter}[1]{
- \chapter*{\vskip 10bp\textmd{#1} \vskip -6bp}
- \addcontentsline{toc}{chapter}{#1}
- \stepcounter{chapter}
-}
-
-
-
-% \end{macrocode}
-% \begin{macrocode}
-%</book>
-% \end{macrocode}
-% \begin{macrocode}
-%<*article>
-% \end{macrocode}
-% \begin{macrocode}
-
-\newif\if@bit@labreport
-\newif\if@bit@proposalreport
-
-\DeclareOption{lab-report}{\@bit@labreporttrue\@bit@proposalreportfalse}
-\DeclareOption{proposal-report}{\@bit@labreportfalse\@bit@proposalreporttrue}
-\DeclareOption*{\PassOptionsToClass{\CurrentOption}{ctexart}}
-\ExecuteOptions{lab-report}
-\ProcessOptions\relax
-
-\PassOptionsToPackage{AutoFakeBold,AutoFakeSlant}{xeCJK}
-\LoadClass[UTF8,zihao=-4]{ctexart}%
-
-\if@bit@labreport
- \RequirePackage[a4paper,left=3.18cm,right=3.18cm,top=2.54cm,bottom=2.54cm,includeheadfoot]{geometry}%
-\else
- \RequirePackage[a4paper,left=3cm,right=2.4cm,top=2.6cm,bottom=2.38cm,includeheadfoot]{geometry}
-\fi
-
-\RequirePackage{fontspec}%
-\RequirePackage{setspace}%
-\RequirePackage{graphicx}%
-\RequirePackage{fancyhdr}%
-\RequirePackage{pdfpages}%
-\RequirePackage{setspace}%
-\RequirePackage{booktabs}%
-\RequirePackage{multirow}%
-\RequirePackage{caption}%
-
-\if@bit@labreport
- \RequirePackage{titlesec}%
- \RequirePackage{float}%
- \RequirePackage{etoolbox}
-\fi
-
-% 设置参考文献编译后端为 biber,引用格式为 GB/T7714-2015 格式
-% 参考文献使用宏包见 https://github.com/hushidong/biblatex-gb7714-2015
-\RequirePackage[style=gb7714-2015,backend=biber]{biblatex}
-
-\if@bit@labreport
- % 将西文字体设置为 Times New Roman
- \setromanfont{Times New Roman}%
-
- % 设置文档标题深度
- \setcounter{tocdepth}{3}%
- \setcounter{secnumdepth}{3}%
-
- %%
- % 设置一级标题、二级标题格式
- \ctexset{section={%
- format={\raggedright \bfseries \songti \zihao{-3}},%
- name = {,.},%
- number = \chinese{section}%
- }%
- }%
- \ctexset{subsection={%
- format = {\bfseries \songti \raggedright \zihao{-4}},%
- }%
- }%
-
- % 页眉和页脚(页码)的格式设定
- \fancyhf{}%
- \fancyhead[L]{\fontsize{10.5pt}{10.5pt}\selectfont\kaishu{\reportName}}%
- \fancyfoot[C]{\fontsize{9pt}{9pt}\selectfont\kaishu{\thepage}}%
- \renewcommand{\headrulewidth}{0.5pt}%
- \renewcommand{\footrulewidth}{0pt}%
-
- \AtBeginDocument{
- }
-\fi
-
-\if@bit@proposalreport
- % 定义 caption 字体为楷体
- \DeclareCaptionFont{kaiticaption}{\kaishu \normalsize}
-
- % 设置图片的 caption 格式
- \renewcommand{\thefigure}{\thesection-\arabic{figure}}
- \captionsetup[figure]{font=small,labelsep=space,skip=10bp,labelfont=bf,font=kaiticaption}
-
- % 设置表格的 caption 格式
- \renewcommand{\thetable}{\thesection-\arabic{table}}
- \captionsetup[table]{font=small,labelsep=space,skip=10bp,labelfont=bf,font=kaiticaption}
-
- % 输出大写数字日期
- \ctexset{today=big}
-
- % 将西文字体设置为 Times New Roman
- \setromanfont{Times New Roman}
-
- %% 将中文楷体设置为 SIMKAI.TTF(如果需要)
- % \setCJKfamilyfont{zhkai}{[SIMKAI.TTF]}
- % \newcommand*{\kaiti}{\CJKfamily{zhkai}}
-
- % 设置文档标题深度
- \setcounter{tocdepth}{3}
- \setcounter{secnumdepth}{3}
-
- %%
- % 设置一级标题、二级标题格式
- % 一级标题:小三,宋体,加粗,段前段后各半行
- \ctexset{section={
- format={\raggedright \bfseries \songti \zihao{-3}},
- beforeskip = 24bp plus 1ex minus .2ex,
- afterskip = 24bp plus .2ex,
- fixskip = true,
- name = {,.\quad}
- }
- }
- % 二级标题:小四,宋体,加粗,段前段后各半行
- \ctexset{subsection={
- format = {\bfseries \songti \raggedright \zihao{4}},
- beforeskip =24bp plus 1ex minus .2ex,
- afterskip = 24bp plus .2ex,
- fixskip = true,
- }
- }
- % 页眉和页脚(页码)的格式设定
- \fancyhf{}
- \fancyhead[R]{\fontsize{10.5pt}{10.5pt}\selectfont{北京理工大学本科生毕业设计(论文)开题报告}}
- \fancyfoot[R]{\fontsize{9pt}{9pt}\selectfont{\thepage}}
- \renewcommand{\headrulewidth}{1pt}
- \renewcommand{\footrulewidth}{0pt}
-\fi
-
-
-\AtBeginDocument{
- \if@bit@labreport
- \input{misc/cover_v1.tex}
- % 正文开始
- \pagestyle{fancy}
- \setcounter{page}{1}%
- \fi
- \if@bit@proposalreport
- % 报告封面
- \input{misc/cover.tex}
- \fi
-
-}
-
-% \end{macrocode}
-%
-% \begin{macrocode}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</article>
-% \end{macrocode}
-% \begin{macrocode}
-%<*graduate>
-% \end{macrocode}
-% \begin{macrocode}
-
-%% ==================================================
-%% BIT-thesis-grd.cls for BIT Thesis
-%% modified by yang yating
-%% version: 1.4
-%% last update: Mar 25th, 2018
-%% ==================================================
-
-%% math packages -- conflict with xunicode
-\RequirePackage{amsmath,amsthm,amsfonts,amssymb,bm,mathrsfs}
-% 直立希腊字母字体
-\RequirePackage{upgreek}
-
-\DeclareOption*{\PassOptionsToClass{\CurrentOption}{ctexbook}}
-\newif\ifBIT@master\BIT@masterfalse
-\newif\ifBIT@doctor\BIT@doctorfalse
-\newif\ifBIT@istwoside\BIT@istwosidefalse
-\DeclareOption{twoside}{\BIT@istwosidetrue}
-\DeclareOption{master}{\BIT@mastertrue}
-\DeclareOption{doctor}{\BIT@doctortrue}
-
-\ProcessOptions\relax
-\ifBIT@istwoside
-\LoadClass[zihao=-4,a4paper,UTF8,space=auto]{ctexbook}
-\else
-\LoadClass[zihao=-4,a4paper,oneside,openany,UTF8,space=auto]{ctexbook}
-\fi
-
-%%
-%% the setup of ctex package
-%%
-\def\contentsname{目\BITspace 录}
-\def\listfigurename{插\BITspace 图}
-\def\listtablename{表\BITspace 格}
-
-%%
-%% 封面标题
-%%
-\def\BIT@label@major{学~~~~科~~~~专~~~~业}
-\def\BIT@label@title{论文题目}
-\def\BIT@label@author{作~~~~者~~~~姓~~~~名}
-\def\BIT@label@classification{中图分类号:}
-\def\BIT@label@confidential{密级}
-\def\BIT@label@UDC{UDC\!分类号:}
-\def\BIT@label@serialnumber{编号}
-\def\BIT@label@thesis{学位论文}
-\def\BIT@label@advisor{指~~~~导~~~~教~~~~师}
-\def\BIT@label@degree{申~~~~请~~~~学~~~~位}
-\def\BIT@label@submitdate{论文提交日期}
-\def\BIT@label@defenddate{论~文~答~辩~日~期}
-\def\BIT@label@institute{学~~~~院~~~~名~~~~称}
-\def\BIT@label@school{学~位~授~予~单~位}
-\def\BIT@label@chairman{答辩委员会主席}
-
-%%
-%% 封面内容
-%%
-
-\def\BIT@value@classification{}
-\def\BIT@value@confidential{}
-\def\BIT@value@UDC{}
-\def\BIT@value@serialnumber{}
-\def\BIT@value@school{}
-\def\BIT@value@degree{}
-\def\BIT@value@title{~~~~~(论~文~题~目)~~~~~}
-\def\BIT@value@vtitle{竖排论文题目}
-\def\BIT@value@titlemark{\BIT@value@title}
-\def\BIT@value@author{(作~者~姓~名)}
-\def\BIT@value@advisor{(姓名、专业技术职务、学位)}
-\def\BIT@value@advisorinstitute{(单位)}
-\def\BIT@value@major{}
-\def\BIT@value@studentnumber{} % _ added by wei.jianwen@gmail.com
-\def\BIT@value@submitdate{}
-\def\BIT@value@defenddate{}
-\def\BIT@value@institute{}
-\def\BIT@value@chairman{}
-\def\BIT@label@statement{}
-
-%% 设置圆圈的格式 或使用\textcircled
-\usepackage{tikz}
-\usepackage{etoolbox}
-\newcommand{\circled}[2][]{\tikz[baseline=(char.base)]
- {\node[shape = circle, draw, inner sep = 1pt]
- (char) {\phantom{\ifblank{#1}{#2}{#1}}};
- \node at (char.center) {\makebox[0pt][c]{#2}};}}
-\robustify{\circled}
-
-%% 论文原创性声明
-\def\BIT@label@original{研究成果声明}
-\def\BIT@label@authorization{关于学位论文使用权的说明}
-\def\BIT@label@authorsign{作者签名:}
-\def\BIT@label@Supervisorsign{导师签名:}
-\def\BIT@label@originalDate{签字日期:}
-\def\BIT@label@originalcontent{\BITspace\BITspace 本人郑重声明:所提交的学位论文是我本人在指导教师的指导下进行的研究工作获得的研究成果。尽我所知,文中除特别标注和致谢的地方外,学位论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得北京理工大学或其它教育机构的学位或证书所使用过的材料。与我一同工作的合作者对此研究工作所做的任何贡献均已在学位论文中作了明确的说明并表示了谢意。\par 特此申明。}
-\def\BIT@label@authorizationcontent{\BITspace\BITspace 本人完全了解北京理工大学有关保管、使用学位论文的规定,其中包括:\circled{1} 学校有权保管、并向有关部门送交学位论文的原件与复印件;\circled{2} 学校可以采用影印、缩印或其它复制手段复制并保存学位论文;\circled{3} 学校可允许学位论文被查阅或借阅;\circled{4} 学校可以学术交流为目的,复制赠送和交换学位论文;\circled{5} 学校可以公布学位论文的全部或部分内容(保密学位论文在解密后遵守此规定)。}
-
-%%
-%% 英语封面标题
-%%
-\def\BIT@label@englishadvisor{Supervisor:}
-\def\BIT@label@englishstatement{Submitted in total fulfilment
- of the requirements for the degree of \BIT@value@englishdegree \\
- in \BIT@value@englishmajor}
-\def\BIT@label@englishauthor{Candidate Name:}
-\def\BIT@label@englishadvisor{Faculty Mentor:}
-\def\BIT@label@englishchairman{Chair, Thesis Committee:}
-\def\BIT@label@englishinstitute{School or Department:}
-\def\BIT@label@englishdegree{Degree Applied:}
-\def\BIT@label@englishmajor{Major:}
-\def\BIT@label@englishschool{Degree by:}
-\def\BIT@label@englishdate{The Date of Defence:}
-
-
-%%
-%% 英语封面内容
-%%
-\def\BIT@value@englishtitle{(English Title of Thesis)}
-\def\BIT@value@englishauthor{(Author Name)}
-\def\BIT@value@englishadvisor{(Supervisor Name)}
-\def\BIT@value@englishinstitute{(Institute Name)}
-\def\BIT@value@englishscholl{(BIT)}
-\def\BIT@value@englishchair{(someone)}
-\def\BIT@value@englishdate{}
-\def\BIT@value@englishdegree{}
-\def\BIT@value@englishmajor{}
-
-
-
-\def\BIT@label@abstract{摘要}
-\def\BIT@label@englishabstract{Abstract}
-\def\BIT@label@keywords{关键词:}
-\def\BIT@label@englishkeywords{Key Words:~}
-\def\BIT@label@conclusion{结论}
-\def\BIT@label@appendix{附录}
-\def\BIT@label@publications{攻读学位期间发表论文与研究成果清单}
-\def\BIT@label@projects{攻读学位期间参与的项目}
-\def\BIT@label@resume{作者简介}
-\def\BIT@label@reference{参考文献!!!!}
-\def\BIT@label@thanks{致谢}
-\def\BIT@value@templateversion{v1.2}
-%%
-%% label in the head 页眉页脚
-%%
-\def\BIT@label@headschoolname{北京理工大学硕士学位论文}
-
-%% 当前模板的版本
-\newcommand{\version}{\BIT@value@templateversion}
-
-%% ==============引用geometry 宏包设置纸张和页面========================
-% 设置版面:上3.5cm,下2.5cm,左2.7cm,右2.7cm,页眉2.5cm,页脚1.8cm,装订线0cm
-\usepackage[%
-paper=a4paper,%
-top=3.5cm,% 上 3.5cm %
-bottom=2.5cm,% 下 2.5cm %
-left=2.7cm,% 左 2.7cm %
-right=2.7cm,% 右 2.7cm %
-headheight=1.0cm,% 页眉 2.5cm %
-footskip=0.7cm% 页脚 1.8cm %
-]{geometry} % 页面设置 %
-
-\parskip 0.5ex plus 0.25ex minus 0.25ex
-%% Command -- Clear Double Page
-\def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else
- \thispagestyle{empty}%
- \hbox{}\newpage\if@twocolumn\hbox{}\newpage\fi\fi\fi}
-% 设置行距,大概为22榜
-\RequirePackage{setspace}
-\setstretch{1.523}
-
-%% 设置章节格式, 黑体三号加粗居中,行距22磅,与正文或节标题的间距设定为段后间距1行。章序号与章名间空一格。
-\ctexset{chapter={
- name = {第,章},
- number = {\arabic{chapter}},
- format = {\bfseries \sffamily \centering \zihao{3}},
- pagestyle = {BIT@headings},
- beforeskip = 16 bp,
- afterskip = 32 bp,
- fixskip = true,
- }
-}
-%% 设置一级章节格式
-% 黑体四号加粗顶左,行距22磅,与上一节的间距为1行,与下面正文或节标题的段间间距为0.5行。序号与题目间空一格。
-
-\ctexset{section={
- format={\raggedright \bfseries \sffamily \zihao{4}},
- beforeskip = 28bp plus 1ex minus .2ex,
- afterskip = 24bp plus .2ex,
- fixskip = true,
- }
-}
-
-% 设置二级标题格式
-
-% 黑体小四加粗顶左,行距22磅,与上一节的间距为1行,与下面正文或节标题的段间间距为0.5行。序号与题目间空一格。
-
-\ctexset{subsection={
- format = {\bfseries \sffamily \raggedright \zihao{-4}},
- beforeskip =28bp plus 1ex minus .2ex,
- afterskip = 24bp plus .2ex,
- fixskip = true,
- }
-}
-
-% 设置三节标题格式
-
-\ctexset{subsubsection={
- format={\heiti \raggedright \zihao{-4}},
- beforeskip=28bp plus 1ex minus .2ex,
- afterskip=24bp plus .2ex,
- fixskip=true,
- }
-}
-
-%% 设定目录格式。目录颜色更改黑色
-\addtocontents{toc}{\protect\hypersetup{hidelinks}}
-\addtocontents{lot}{\protect\hypersetup{hidelinks}}
-\addtocontents{lof}{\protect\hypersetup{hidelinks}}
-
-\RequirePackage{titletoc}
-\titlecontents{chapter}[0pt]{\songti \zihao{4}}
- {\bf\thecontentslabel\hspace{\ccwd}}{\bf}
- {\hspace{.5em}\titlerule*{.}\contentspage}
-\titlecontents{section}[2\ccwd]{\songti \zihao{-4}}
- {\thecontentslabel\hspace{\ccwd}}{}
- {\hspace{.5em}\titlerule*{.}\contentspage}
-\titlecontents{subsection}[4\ccwd]{\songti \zihao{-4}}
- {\thecontentslabel\hspace{\ccwd}}{}
- {\hspace{.5em}\titlerule*{.}\contentspage}
-
-\titlecontents{figure}[0pt]{\songti\zihao{-4}}
- {\figurename~\thecontentslabel\quad}{\hspace*{-1.5cm}}
- {\hspace{.5em}\titlerule*{.}\contentspage}
-
-\titlecontents{table}[0pt]{\songti\zihao{-4}}
- {\tablename~\thecontentslabel\quad}{\hspace*{-1.5cm}}
- {\hspace{.5em}\titlerule*{.}\contentspage}
-
-%% 选择编译
-\RequirePackage{ifthen}
-
-%% check pdfTeX mode
-\RequirePackage{ifpdf}
-
-%% fancyhdr 页眉页脚控制
-\RequirePackage{fancyhdr}
-
-% 空 页眉页脚
-\fancypagestyle{BIT@empty}{%
- \fancyhf{}}
-
-% ======正文页眉页脚=================
-\fancypagestyle{BIT@headings}{%
- \fancyhf{}
- \fancyfoot[C]{\songti\zihao{5} \thepage}
- \fancyhead[C]{\ifBIT@master\zihao{5}{\songti 北京理工大学硕士学位论文}
- \else\zihao{5}{\songti 北京理工大学博士学位论文}\fi}
- }
-
-% ==================================对于openright 选项,必须保证章页右开,且如果前章末页内容须清空其页眉页脚。===================
-\let\BIT@cleardoublepage\cleardoublepage
-\newcommand{\BIT@clearemptydoublepage}{%
- \clearpage{\pagestyle{BIT@empty}\BIT@cleardoublepage}}
-\let\cleardoublepage\BIT@clearemptydoublepage
-
- % ================修该frontmatter 的页码为大写罗马格式,并调整页面风格===============
-\renewcommand{\frontmatter}{
- \if@openright\cleardoublepage\else\clearpage\fi
- \@mainmatterfalse
- \pagenumbering{Roman}
- \pagestyle{BIT@headings}
-}
-% =======================修改mainmatter 的页码为阿拉伯格式,并调整页面风格========================
-\renewcommand{\mainmatter}{
- \if@openright\cleardoublepage\else\clearpage\fi
- \@mainmattertrue
- \pagenumbering{arabic}
- \pagestyle{BIT@headings}
-}
-
-
-%% 复杂表格
-\RequirePackage{threeparttable}
-\RequirePackage{dcolumn}
-\RequirePackage{multirow}
-\RequirePackage{booktabs}
-\newcolumntype{d}[1]{D{.}{.}{#1}}% or D{.}{,}{#1} or D{.}{\cdot}{#1}
-
-
-%% 定义几个常用的数学常量符号
-\newcommand{\me}{\mathrm{e}} % 定义 对数常数e,虚数符号i,j以及微分算子d为直立体。
-\newcommand{\mi}{\mathrm{i}}
-\newcommand{\mj}{\mathrm{j}}
-\newcommand{\dif}{\,\mathrm{d}}
-
-\theoremstyle{plain}
- \newtheorem{algo}{算法~}[chapter]
- \newtheorem{thm}{定理~}[chapter]
- \newtheorem{lem}[thm]{引理~}
- \newtheorem{prop}[thm]{命题~}
- \newtheorem{cor}[thm]{推论~}
-\theoremstyle{definition}
- \newtheorem{defn}{定义~}[chapter]
- \newtheorem{conj}{猜想~}[chapter]
- \newtheorem{exmp}{例~}[chapter]
- \newtheorem{rem}{注~}
- \newtheorem{case}{情形~}
-\renewcommand{\proofname}{\bf 证明}
-
-%% 英文字体使用 Times New Roman
-\RequirePackage{xltxtra} % \XeTeX Logo
-\setmainfont{Times New Roman}
-\setsansfont{Arial}
-\setmonofont{Courier New}
-
-
-%% graphics packages
-\RequirePackage{graphicx}
-%% 并列子图
-\RequirePackage{subfigure}
-
-\RequirePackage{wrapfig}
-%% ===========================设置图表标题选项==========================
-\RequirePackage{amsmath}
-\RequirePackage{caption}
-\DeclareCaptionLabelSeparator{zhspace}{\hspace{1\ccwd}}
-\DeclareCaptionFont{fontsize}{\zihao{5}}
-\captionsetup{
- font = {fontsize},
- labelsep = zhspace,
-}
-\captionsetup[table]{
- position = top,
- aboveskip = 6bp,
- belowskip = 6bp,
-}
-\numberwithin{table}{chapter}
-\captionsetup[figure]{
- position = bottom,
- aboveskip = 6bp,
- belowskip = 6bp,
-}
-
-%% 如果插入的图片没有指定扩展名,那么依次搜索下面的扩展名所对应的文件
-\DeclareGraphicsExtensions{.pdf,.eps,.png,.jpg,.jpeg}
-% ccaption -- bicaption
-% \RequirePackage{ccaption}
-% \captiondelim{\ }
-% \captionnamefont{\songti\zihao{5}}
-% \captiontitlefont{\songti\zihao{5}}
-
-\RequirePackage[
- backend=biber,
- style=gb7714-2015,
- gbalign=gb7714-2015,
- gbnamefmt=lowercase,
- gbpub=false,
- doi=false,
- url=false,
- eprint=false,
- isbn=false,
-]{biblatex}
-
-% 将浮动参数设为较宽松的值
-\renewcommand{\textfraction}{0.15}
-\renewcommand{\topfraction}{0.85}
-\renewcommand{\bottomfraction}{0.65}
-\renewcommand{\floatpagefraction}{0.60}
-
-
-% 定公式、图、表编号为"3-1"的形式,即分隔符由.变为短杠
-\renewcommand\theequation{\arabic{chapter}.\arabic{equation}}
-\renewcommand\thefigure{\arabic{chapter}.\arabic{figure}}
-\renewcommand\thetable{\arabic{chapter}.\arabic{table}}
-
-% 颜色宏包
-\RequirePackage{xcolor}
-
-
-% 中文破折号
-\newcommand{\cndash}{\rule{0.0em}{0pt}\rule[0.35em]{1.4em}{0.05em}\rule{0.2em}{0pt}}
-
-% listings 源代码显示宏包
-\RequirePackage{listings}
-\lstset{tabsize=4, %
- frame=shadowbox, % 把代码用带有阴影的框圈起来
- commentstyle=\color{red!50!green!50!blue!50},% 浅灰色的注释
- rulesepcolor=\color{red!20!green!20!blue!20},% 代码块边框为淡青色
- keywordstyle=\color{blue!90}\bfseries, % 代码关键字的颜色为蓝色,粗体
- showstringspaces=false,% 不显示代码字符串中间的空格标记
- stringstyle=\ttfamily, % 代码字符串的特殊格式
- keepspaces=true, %
- breakindent=22pt, %
- numbers=left,% 左侧显示行号
- stepnumber=1,%
- numberstyle=\tiny, % 行号字体用小号
- basicstyle=\footnotesize, %
- showspaces=false, %
- flexiblecolumns=true, %
- breaklines=true, % 对过长的代码自动换行
- postbreak=\mbox{\textcolor{red}{$\hookrightarrow$}\space},
- aboveskip=1em, % 代码块边框
- %% added by http://bbs.ctex.org/viewthread.php?tid=53451
- fontadjust,
- captionpos=t,
- framextopmargin=2pt,framexbottommargin=2pt,abovecaptionskip=-3pt,belowcaptionskip=3pt,
- xleftmargin=4em,xrightmargin=4em, % 设定listing左右的空白
- texcl=true,
- % 设定中文冲突,断行,列模式,数学环境输入,listing数字的样式
- extendedchars=false,columns=flexible,mathescape=true
- numbersep=-1em
-}
-\renewcommand{\lstlistingname}{代码} %% 重命名Listings标题头
-
-%% hyperref package
-\definecolor{navyblue}{RGB}{0,0,128}
-\RequirePackage{hyperref}
-\hypersetup{
- bookmarksnumbered,%
- linktoc=all,
- colorlinks=true,
- citecolor=navyblue,
- filecolor=cyan,
- linkcolor=navyblue,
- linkbordercolor=navyblue,
- urlcolor=navyblue,
- plainpages=false,%
- pdfstartview=FitH
-}
-
-%% enumerate 列表环境间距调节
-\usepackage{enumitem}
-% \setenumerate[1]{itemsep=0pt,partopsep=0pt,parsep=\parskip,topsep=5pt}
-% \setitemize[1]{itemsep=0pt,partopsep=0pt,parsep=\parskip,topsep=0pt}
-% \setdescription{itemsep=0pt,partopsep=0pt,parsep=\parskip,topsep=5pt}
-
-% _ BITspace
-% \newcommand\BITspace{\protect\CTEX@spaceChar\protect\CTEX@spaceChar}
-\newcommand{\BITspace}[1][1]{\hspace{#1\ccwd}}
-
-\def\BIT@getfileinfo#1 #2 #3\relax#4\relax{%
- \def\BITfiledate{#1}%
- \def\BITfileversion{#2}%
- \def\BITfileinfo{#3}}%
-\expandafter\ifx\csname ver@bitmaster-xetex.cls\endcsname\relax
- \edef\reserved@a{\csname ver@ctextemp_bitmaster-xetex.cls\endcsname}
-\else
- \edef\reserved@a{\csname ver@bitmaster-xetex.cls\endcsname}
-\fi
-\expandafter\BIT@getfileinfo\reserved@a\relax? ? \relax\relax
-\def\BIT@underline[#1]#2{%
- \underline{\hbox to #1{\hfill#2\hfill}}}
-\def\BITunderline{\@ifnextchar[\BIT@underline\underline}
-
-% 中文标题页的可用命令
-\newcommand\classification[1]{\def\BIT@value@classification{#1}}
-\newcommand\studentnumber[1]{\def\BIT@value@studentnumber{#1}}
-\newcommand\confidential[1]{\def\BIT@value@confidential{#1}}
-\newcommand\UDC[1]{\def\BIT@value@UDC{#1}}
-\newcommand\serialnumber[1]{\def\BIT@value@serialnumber{#1}}
-\newcommand\school[1]{\def\BIT@value@school{#1}}
-\newcommand\degree[1]{\def\BIT@value@degree{#1}}
-\renewcommand\title[2][\BIT@value@title]{%
- \def\BIT@value@title{#2}
- \def\BIT@value@titlemark{\MakeUppercase{#1}}}
-
-\newcommand\vtitle[1]{\def\BIT@value@vtitle{#1}}
-\renewcommand\author[1]{\def\BIT@value@author{#1}}
-\newcommand\advisor[1]{\def\BIT@value@advisor{#1}}
-\newcommand\advisorinstitute[1]{\def\BIT@value@advisorinstitute{#1}}
-\newcommand\major[1]{\def\BIT@value@major{#1}}
-\newcommand\submitdate[1]{\def\BIT@value@submitdate{#1}}
-\newcommand\defenddate[1]{\def\BIT@value@defenddate{#1}}
-\newcommand\institute[1]{\def\BIT@value@institute{#1}}
-\newcommand\chairman[1]{\def\BIT@value@chairman{#1}}
-
-%% 第一页和第二页
-% “绘制”BIT中文标题页
-\renewcommand\maketitle[1]{%
- \cleardoublepage
- \thispagestyle{empty}
- \begin{center}
- \vspace*{60mm}
- {\heiti\zihao{-2} \BIT@value@title}
- \vskip 40mm
- {\heiti \zihao{-3} \BIT@value@author} % 黑体 小三
- \vskip 4mm
- {\heiti \zihao{-3} \BIT@value@defenddate} % 黑体 小三
- \end{center}
- \clearpage
- \if@twoside
- \thispagestyle{empty}
- \cleardoublepage
- \fi
- }
-
-\newcommand\makeInfo[1]%
- {
- \newpage
- \cleardoublepage
- \thispagestyle{empty}
-
-% udc ltz
-{ %
- {\heiti \zihao{5} \noindent \BIT@label@classification} \BIT@value@classification \\
- {\heiti \zihao{5} \BIT@label@UDC} \BIT@value@UDC
-}
-
- \begin{center}
-
- \vskip \stretch{1}
- {\heiti\zihao{-2} \BIT@value@title}
- \vskip \stretch{1}
-
- {\fangsong\zihao{4}}
- \def\tabcolsep{1pt}
- \def\arraystretch{1.5}
-
- % 黑体 小三
- {\heiti\zihao{-3}
- \begin{tabular}{l p{3mm} c}
- \BIT@label@author & &\BITunderline[180pt]{\BIT@value@author}
- \\
- \BIT@label@institute & & \BITunderline[180pt]{\BIT@value@institute}
- \\
- \BIT@label@advisor & & \BITunderline[180pt]{\BIT@value@advisor}
- \\
- \BIT@label@chairman & & \BITunderline[180pt]{\BIT@value@chairman}
- \\
- \BIT@label@degree & & \BITunderline[180pt]{\BIT@value@degree}
- \\
- \BIT@label@major & & \BITunderline[180pt]{\BIT@value@major}
- \\
- \BIT@label@school & & \BITunderline[180pt]{\BIT@value@school}
- \\
- \BIT@label@defenddate & & \BITunderline[180pt]{\BIT@value@defenddate}
- \end{tabular}}
-
- \end{center}
-
- \vskip \stretch{0.5}
- \clearpage
- \if@twoside
- \thispagestyle{empty}
- \cleardoublepage
- \fi
-}
-
-% English Title Page
-% 英文标题页可用命令
-\newcommand\englishtitle[1]{\def\BIT@value@englishtitle{#1}}
-\newcommand\englishauthor[1]{\def\BIT@value@englishauthor{#1}}
-\newcommand\englishadvisor[1]{\def\BIT@value@englishadvisor{#1}}
-\newcommand\englishschool[1]{\def\BIT@value@englishschool{#1}}
-\newcommand\englishinstitute[1]{\def\BIT@value@englishinstitute{#1}}
-\newcommand\englishdate[1]{\def\BIT@value@englishdate{#1}}
-\newcommand\englishdegree[1]{\def\BIT@value@englishdegree{#1}}
-\newcommand\englishmajor[1]{\def\BIT@value@englishmajor{#1}}
-\newcommand\englishchairman[1]{\def\BIT@value@englishchairman{#1}}
-
-% "绘制"英文标题页
-\newcommand\makeEnglishInfo[1]{%
- \cleardoublepage
- \thispagestyle{empty}
-
- \begin{center}
-
-
- \vspace*{10em}
-% 论文题目 Times New Roman 小二 加粗
- {\zihao{-2}\textbf{\BIT@value@englishtitle}}
- % \bfseries
- \vskip \stretch{1}
-
-% Times New Roman 小三
- {\zihao{-3}
- \begin{tabular}{ll}
- \BIT@label@englishauthor & \BITunderline[200pt]{\BIT@value@englishauthor}
- \\
- \BIT@label@englishinstitute & \BITunderline[200pt]{\BIT@value@englishinstitute}
- \\
- \BIT@label@englishadvisor & \BITunderline[200pt]{\BIT@value@englishadvisor}
- \\
- \BIT@label@englishchairman & \BITunderline[200pt]{\BIT@value@englishchairman}
- \\
- \BIT@label@englishdegree & \BITunderline[200pt]{\BIT@value@englishdegree}
- \\
- \BIT@label@englishmajor & \BITunderline[200pt]{\BIT@value@englishmajor}
- \\
- \BIT@label@englishschool & \BITunderline[200pt]{\BIT@value@englishschool}
- \\
- \BIT@label@englishdate & \BITunderline[200pt]{\BIT@value@englishdate}
- \end{tabular}}
-
- \end{center}
-
- \vskip \stretch{0.5}
- \clearpage
- \if@twoside
- \thispagestyle{empty}
- \cleardoublepage
- \fi
-}
-
-% 绘制树立排放的论文题目和学校名称
-
-\newcommand\makeVerticalTitle{
- \cleardoublepage
- \thispagestyle{empty}
- \vskip 5cm
- \begin{center}
- \setstretch{1.1}
- \begin{minipage}{2em}
- \begin{center}
- {\heiti\zihao{3}\BIT@value@vtitle}
- \vskip 2em
- {\heiti\zihao{3}\BIT@value@school}
- \end{center}
- \end{minipage}
- \end{center}
- \clearpage
- \if@twoside
- \thispagestyle{empty}
- \cleardoublepage
- \fi
-}
-
-% 原创性声明
-\newcommand\makeDeclareOriginal{%
- \cleardoublepage
- \pdfbookmark[0]{声明}{statement}
- \thispagestyle{empty}
- \begin{center}
- {\bf\zihao{3} \BIT@label@original}
- \end{center}
- \vskip 10pt
- {\zihao{4}\BIT@label@originalcontent}
- \vskip 10pt
- \hspace{8em}{\zihao{4}\BIT@label@authorsign} \BITunderline[6em]{} \hspace{2em} {\zihao{4}\BIT@label@originalDate} \BITunderline[6em]{}
-
- \vskip 30mm
-
- \begin{center}
- {\bf\zihao{3} \BIT@label@authorization}
- \end{center}
- \vskip 10pt
- {\zihao{4} \BIT@label@authorizationcontent}
- \vskip 40pt
-
- \hspace{8em}{\zihao{4}\BIT@label@authorsign} \BITunderline[6em]{} \hspace{2em} {\zihao{4}\BIT@label@Supervisorsign} \BITunderline[6em]{}
- \vskip 15pt
- \hspace{8em}{\zihao{4}\BIT@label@originalDate} \BITunderline[6em]{} \hspace{2em} {\zihao{4}\BIT@label@originalDate} \BITunderline[6em]{}
- \clearpage
- \if@twoside
- \thispagestyle{empty}
- \cleardoublepage
- \fi
-
-}
-
-
-% 页眉页脚
-\pagestyle{fancy}
-\fancyhf{}
-\fancyhead[C]{\songti \zihao{5} \BIT@label@headschoolname} % 奇数页左页眉
-\fancyfoot[C]{\songti \zihao{5} {\thepage}} % 页脚
-
-
-\fancypagestyle{plain}{% 设置开章页页眉页脚风格(只有页码作为页脚)
- \fancyhf{}%
- \fancyfoot[C]{\songti \zihao{5} \BIT@label@headschoolname}
- \fancyfoot[C]{\songti \zihao{5} ~---~{\thepage}~---~} % 首页页脚格式
-}
-
-
- % 中文摘要
- \newenvironment{abstract}
- {
- \cleardoublepage
- \chapter{\BIT@label@abstract}
- }
- {}
-% 下一页从偶数页开始
- \newcommand\beginatevenpage{
- \clearpage
- \if@twoside
- \thispagestyle{empty}
- \cleardoublepage
- \fi
- }
- % 中文关键词
- \newcommand\keywords[1]{%
- \vspace{2ex}\noindent{\bf \BIT@label@keywords} #1}
-
- % 英文摘要
- \newenvironment{englishabstract}
- {
- \clearpage
- \chapter{\BIT@label@englishabstract}
- }
- {}
-
- % 英文摘要
- \newcommand\englishkeywords[1]{%
- \vspace{2ex}\noindent{\bf \BIT@label@englishkeywords} #1}
-
-
-% 目录
-\renewcommand\tableofcontents{%
- \if@twocolumn
- \@restonecoltrue\onecolumn
- \else
- \@restonecolfalse
- \fi
- \chapter*{\contentsname}% 目录里显示“目录”,否则\chapter*
- \@mkboth{\MakeUppercase\contentsname}{\MakeUppercase\contentsname}%
- \pdfbookmark[0]{目录}{bittoc}
- \@starttoc{toc}%
- \if@restonecol\twocolumn\fi
-}
-
-
-% 参考文献环境
-\renewenvironment{thebibliography}[1]
- {\zihao{5}
- \chapter*{\bibname}
- \@mkboth{\MakeUppercase\bibname}{\MakeUppercase\bibname}%
- \addcontentsline{toc}{chapter}{参考文献}
- \list{\@biblabel{\@arabic\c@enumiv}}%
- {\settowidth\labelwidth{\@biblabel{#1}}%
- \leftmargin\labelwidth
- \advance\leftmargin\labelsep
- \setlength{\parsep}{1mm}
- \setlength{\labelsep}{0.5em}
- \setlength{\itemsep}{0.05pc}
- \setlength{\listparindent}{0in}
- \setlength{\itemindent}{0in}
- \setlength{\rightmargin}{0in}
- \@openbib@code
- \usecounter{enumiv}%
- \let\p@enumiv\@empty
- \renewcommand\theenumiv{\@arabic\c@enumiv}}%
- \sloppy
- \clubpenalty4000
- \@clubpenalty \clubpenalty
- \widowpenalty4000%
- \sfcode`\.\@m}
- {\def\@noitemerr
- {\@latex@warning{Empty `thebibliography' environment}}%
- \endlist}
-
-
-\newenvironment{publications}[1]
- {\chapter{\BIT@label@publications}%
- \@mkboth{\MakeUppercase\BIT@label@publications}
- {\MakeUppercase\BIT@label@publications}%
- \list{\@biblabel{\@arabic\c@enumiv}}%
- {\settowidth\labelwidth{\@biblabel{#1}}%
- \leftmargin\labelwidth
- \advance\leftmargin\labelsep
- \setlength{\parsep}{1mm}
- \setlength{\labelsep}{0.5em}
- \setlength{\itemsep}{0.05pc}
- \setlength{\listparindent}{0in}
- \setlength{\itemindent}{0in}
- \setlength{\rightmargin}{0in}
- \@openbib@code
- \usecounter{enumiv}%
- \let\p@enumiv\@empty
- \renewcommand\theenumiv{\@arabic\c@enumiv}}%
- \sloppy
- \clubpenalty4000
- \@clubpenalty \clubpenalty
- \widowpenalty4000%
- \sfcode`\.\@m}
- {\def\@noitemerr
- {\@latex@warning{Empty `publications' environment}}%
- \endlist}
-
-
-\newenvironment{projects}[1]
- {\chapter{\BIT@label@projects}%
- \@mkboth{\MakeUppercase\BIT@label@projects}
- {\MakeUppercase\BIT@label@projects}%
- \list{\@biblabel{\@arabic\c@enumiv}}%
- {\settowidth\labelwidth{\@biblabel{#1}}%
- \leftmargin\labelwidth
- \advance\leftmargin\labelsep
- \@openbib@code
- \usecounter{enumiv}%
- \let\p@enumiv\@empty
- \renewcommand\theenumiv{\@arabic\c@enumiv}}%
- \sloppy
- \clubpenalty4000
- \@clubpenalty \clubpenalty
- \widowpenalty4000%
- \sfcode`\.\@m}
- {\def\@noitemerr
- {\@latex@warning{Empty `projects' environment}}%
- \endlist}
-
- \newenvironment{resume}
- {\chapter{\BIT@label@resume}}
- {}
-
-\newenvironment{resumesection}[1]
- {{\noindent\normalfont\bfseries #1}
- \list{}{\labelwidth\z@
- \leftmargin 2\ccwd}
- \item\relax}
- {\endlist}
-
-\newenvironment{resumeli}[1]
- {{\noindent\normalfont\bfseries #1}
- \list{}{\labelwidth\z@
- \leftmargin 4\ccwd
- \itemindent -2\ccwd
- \listparindent\itemindent}
- \item\relax}
- {\endlist}
-
-\newenvironment{conclusion}
- {\chapter*{结论}
- \@mkboth{结论}{结论}%
- \addcontentsline{toc}{chapter}{结论}}
- {}
-
-\renewenvironment{thanks}
- {\chapter{\BIT@label@thanks}
- \fangsong
- }
- {}
-
-\newenvironment{symbolnote}
- {\chapter{\BIT@label@symbolnote}
- \fangsong}
- {}
-
- %% ===========================术语=====================
- \newcommand{\bit@denotation@name}{主要符号对照表}
- \newenvironment{denotation}[1][2.5cm]{
- \chapter{\bit@denotation@name} % no tocline
- \noindent\begin{list}{}%
- {\vskip-30bp\zihao{-4}
- \renewcommand\makelabel[1]{##1\hfil}
- \setlength{\labelwidth}{#1} % 标签盒子宽度
- \setlength{\labelsep}{0.5cm} % 标签与列表文本距离
- \setlength{\itemindent}{0cm} % 标签缩进量
- \setlength{\leftmargin}{\labelwidth+\labelsep} % 左边界
- \setlength{\rightmargin}{0cm}
- \setlength{\parsep}{0cm} % 段落间距
- \setlength{\itemsep}{0cm} % 标签间距
- \setlength{\listparindent}{0cm} % 段落缩进量
- \setlength{\topsep}{0pt} % 标签与上文的间距
- }}{\end{list}}
-% ====增加化学、国际单位宏包
- \RequirePackage[version=4]{mhchem}
- \RequirePackage{siunitx}
-\setcounter{secnumdepth}{4} % 章节编号深度 (part 对应 -1)
-\setcounter{tocdepth}{2} % 目录深度 (part 对应 -1)
-
-%% End of file `bitmaster-xetex.cls'.
-
-%% =========================================================
-
-% \end{macrocode}
-% \begin{macrocode}
-%</graduate>
-% \end{macrocode}
-%
-% \iffalse
-%<*dtx-style>
-\ProvidesPackage{dtx-style}
-\RequirePackage{hypdoc}
-\RequirePackage{ifthen}
-\RequirePackage{fontspec}
-\RequirePackage{amsmath}
-\RequirePackage{unicode-math}
-\RequirePackage[UTF8,scheme=chinese,heading,sub3section]{ctex}
-\RequirePackage[
- top=2.5cm, bottom=2.5cm,
- left=5cm, right=2cm,
- headsep=3mm]{geometry}
-\RequirePackage{graphicx}
-\RequirePackage{multirow}
-\RequirePackage{wrapfig}
-\RequirePackage{hologo}
-\RequirePackage{array,longtable,booktabs}
-\RequirePackage{listings}
-\RequirePackage{fancyhdr}
-\RequirePackage[dvipsnames]{xcolor}
-\RequirePackage{awesomebox}
-% \RequirePackage{etoolbox}
-\RequirePackage{dirtree}
-\RequirePackage{metalogo}
-\RequirePackage[tightLists=false]{markdown}
-\RequirePackage{caption}
-\RequirePackage{tikz}
-\usetikzlibrary{positioning}
-\RequirePackage{framed}
-\RequirePackage{menukeys}
-\RequirePackage{float}
-\RequirePackage{subfig}
-
- % 设置列表无间隔
-\usepackage{enumitem}
-\setlist{nosep}
-
-\markdownSetup{
- renderers = {
- link = {\href{#2}{#1}},
- }
-}
-
-\hypersetup{
- pdflang = zh-CN,
- pdftitle = {BIThesis:北京理工大学学位论文及报告模板},
- pdfauthor = {冯开宇},
- pdfsubject = {北京理工大学学位论文及报告模板使用说明},
- pdfkeywords = {论文模板; 北京理工大学; 使用说明},
- pdfdisplaydoctitle = true
-}%
-
-\newcommand{\BIThesisLaTeX}{{\BIThesis}北京理工大学学位论文及报告{\LaTeX}模板}
-\newcommand{\BIThesisMacroPackage}{{\BIThesis}宏集}
-\newcommand{\BIThesisWiki}{{\BIThesis}在线文档}
-\newcommand{\BIThesisScaffold}{{\BIThesis}模板}
-\newcommand{\BIThesisRelease}{{\BIThesis}模板}
-\newcommand{\LPPL}{{\href{https://www.latex-project.org/lppl/lppl-1-3c.txt}{\LaTeX{} Project Public License (1.3.c)}}}
-\newcommand{\versionold}{v2.0 BirthdayCake}
-\newcommand{\version}{v3 Summer Time}
-
-\ExplSyntaxOn
-
-\AtBeginEnvironment { bitsyntax } {
- \cs_set:Npn \lparen { \textup { ( } }
- \cs_set:Npn \rparen { \textup { ) } }
- \char_set_catcode_active:N |
- \char_set_catcode_active:N <
- \char_set_catcode_active:N (
- \char_set_active_eq:NN | \orbar
- \char_set_active_eq:NN < \syntaxopt@aux
- \char_set_active_eq:NN ( \defaultval@aux
-}
-
-\NewDocumentCommand \BIThesisTemplates {m} {
- \str_case:nn {#1} {
- {UT}{本科生毕业论文模板(undergraduate-thesis)}
- {UTE}{本科生全英文专业毕业论文模板(undergraduate-thesis-en)}
- {GT}{研究生学位论文模板(graduate-thesis)}
- {LR}{简易使用报告模板(lab-report)}
- {PT}{本科生毕业设计外文翻译模板(paper-translation)}
- {PS}{北理工主题的 Beamer 模板(presentation-slide)}
- {UP}{本科生毕业设计开题报告(undergraduate-proposal)}
- }
-}
-
-% 允许换行的细间距。
-\def\breakablethinspace{\hskip 0.16667em\relax}
-
-
-\DeclareDocumentCommand\kvopt{mm}
- {\texttt{#1\breakablethinspace=\breakablethinspace#2}}
-
-\ExplSyntaxOff
-
-\ctexset{
- today=big,
- abstractname=简介,
-}
-
-\ctexset{section={
- format={\raggedright \bfseries \zihao{-3}},
- name = {第,章}
- }
-}
-
-\ctexset{subsection={
- format = {\bfseries \raggedright \zihao{4}}
- }
-}
-
-
-
-\ifthenelse{\equal{\@nameuse{g__ctex_fontset_tl}}{mac}}{
- \setmainfont{Palatino}
- \setsansfont[Scale=MatchLowercase]{Helvetica}
- \setmonofont[Scale=MatchLowercase]{Menlo}
- \xeCJKsetwidth{‘’“”}{1em}
-}{
- \setmainfont[
- Extension = .otf,
- UprightFont = *-regular,
- BoldFont = *-bold,
- ItalicFont = *-italic,
- BoldItalicFont = *-bolditalic,
- ]{texgyrepagella}
- \setsansfont[
- Extension = .otf,
- UprightFont = *-regular,
- BoldFont = *-bold,
- ItalicFont = *-italic,
- BoldItalicFont = *-bolditalic,
- ]{texgyreheros}
- \setmonofont[
- Extension = .otf,
- UprightFont = *-regular,
- BoldFont = *-bold,
- ItalicFont = *-italic,
- BoldItalicFont = *-bolditalic,
- Scale = MatchLowercase,
- Ligatures = CommonOff,
- ]{texgyrecursor}
-}
-\unimathsetup{
- math-style=ISO,
- bold-style=ISO,
-}
-\IfFontExistsTF{XITSMath-Regular.otf}{
- \setmathfont[
- Extension = .otf,
- BoldFont = XITSMath-Bold,
- StylisticSet = 8,
- ]{XITSMath-Regular}
- \setmathfont[range={cal,bfcal},StylisticSet=1]{XITSMath-Regular.otf}
-}{
- \setmathfont[
- Extension = .otf,
- BoldFont = *bold,
- StylisticSet = 8,
- ]{xits-math}
- \setmathfont[range={cal,bfcal},StylisticSet=1]{xits-math.otf}
-}
-
-\colorlet{bit@macro}{blue!60!black}
-\colorlet{bit@env}{blue!70!black}
-\colorlet{bit@option}{purple}
-\patchcmd{\PrintMacroName}{\MacroFont}{\MacroFont\bfseries\color{bit@macro}}{}{}
-\patchcmd{\PrintDescribeMacro}{\MacroFont}{\MacroFont\bfseries\color{bit@macro}}{}{}
-\patchcmd{\PrintDescribeEnv}{\MacroFont}{\MacroFont\bfseries\color{bit@env}}{}{}
-\patchcmd{\PrintEnvName}{\MacroFont}{\MacroFont\bfseries\color{bit@env}}{}{}
-
-\def\DescribeOption{%
- \leavevmode\@bsphack\begingroup\MakePrivateLetters%
- \Describe@Option}
-\def\Describe@Option#1{\endgroup
- \marginpar{\raggedleft\PrintDescribeOption{#1}}%
- \bit@special@index{option}{#1}\@esphack\ignorespaces}
-\def\PrintDescribeOption#1{\strut \MacroFont\bfseries\sffamily\color{bit@option} #1\ }
-\def\bit@special@index#1#2{\@bsphack
- \begingroup
- \HD@target
- \let\HDorg@encapchar\encapchar
- \edef\encapchar usage{%
- \HDorg@encapchar hdclindex{\the\c@HD@hypercount}{usage}%
- }%
- \index{#2\actualchar{\string\ttfamily\space#2}
- (#1)\encapchar usage}%
- \index{#1:\levelchar#2\actualchar
- {\string\ttfamily\space#2}\encapchar usage}%
- \endgroup
- \@esphack}
-
-\lstdefinestyle{lstStyleBase}{%
- basicstyle=\small\ttfamily,
- aboveskip=\medskipamount,
- belowskip=\medskipamount,
- lineskip=0pt,
- boxpos=c,
- showlines=false,
- extendedchars=true,
- escapeinside = {(*}{*)},
- upquote=true,
- tabsize=2,
- showtabs=false,
- showspaces=false,
- showstringspaces=false,
- numbers=none,
- linewidth=\linewidth,
- xleftmargin=4pt,
- xrightmargin=0pt,
- resetmargins=false,
- breaklines=true,
- breakatwhitespace=false,
- breakindent=0pt,
- breakautoindent=true,
- columns=flexible,
- keepspaces=true,
- gobble=4,
- framesep=3pt,
- rulesep=1pt,
- framerule=1pt,
- backgroundcolor=\color{gray!5},
- stringstyle=\color{green!40!black!100},
- keywordstyle=\bfseries\color{blue!50!black},
- commentstyle=\slshape\color{black!60}}
-
-\lstdefinestyle{lstStyleShell}{%
- style=lstStyleBase,
- frame=l,
- rulecolor=\color{purple},
- language=bash,
-}
-
-\lstdefinestyle{lstStyleLaTeX}{%
- style=lstStyleBase,
- frame=l,
- rulecolor=\color{violet},
- language=[LaTeX]TeX,
- emphstyle=[1]\color{teal},
-}
-
-\lstdefinestyle{lstStyleSyntax}{%
- style=lstStyleBase,
- frame=l,
- rulecolor=\color{violet},
- language=[LaTeX]TeX,
- emphstyle=[1]\color{teal},
-}
-
-\lstnewenvironment{latex}[1][]{\lstset{style=lstStyleLaTeX, #1}}{}
-\lstnewenvironment{shell}{\lstset{style=lstStyleShell}}{}
-\lstnewenvironment{bitsyntax}[1][]{\lstset{style=lstStyleSyntax, #1}}{}
-
-\def\orbar{\textup{\textbar}}
-\def\syntaxopt#1{\textit{#1}}
-\def\defaultval#1{\textbf{\textup{#1}}}
-\def\syntaxopt@aux#1>{\syntaxopt{#1}}
-\def\defaultval@aux#1){\defaultval{#1}}
-
-
-\setlist{nosep}
-
-\DeclareDocumentCommand{\option}{m}{\textsf{#1}}
-\DeclareDocumentCommand{\env}{m}{\texttt{#1}}
-\newcommand{\myentry}[1]{%
- \marginpar{\raggedleft\color{purple}\bfseries\strut #1}}
-\newcommand{\note}[2][Note]{{%
- \color{magenta}{\bfseries #1}\emph{#2}}}
-
-\DeclareDocumentCommand{\githubuser}{m}{\href{https://github.com/#1}{@#1}}
-
-
- % 设置 caption 与 figure 之间的距离
-\setlength{\abovecaptionskip}{11pt}
-\setlength{\belowcaptionskip}{9pt}
-
- % 设置图片的 caption 格式
-\renewcommand{\thefigure}{\thesection-\arabic{figure}}
-\captionsetup[figure]{font=small,labelsep=space}
-
- % 设置表格的 caption 与 table 之间的垂直距离
-\captionsetup[table]{skip=2pt}
-
- % 设置表格的 caption 格式
-\renewcommand{\thetable}{\thesection-\arabic{table}}
-\captionsetup[table]{font=small,labelsep=space}
-
- % 定义 BIThesis \LaTeX 风格的 Logo
-\usepackage{relsize}
-\makeatletter
-\def\matex@ssize{\larger[-1]\scshape}
-\DeclareRobustCommand{\BIThesis}{
- \mbox{
- \kern-0.5em{B}\kern-0.05em
- {I}\kern-0.05em
- {T}\kern-0.1em
- \raisebox{-0.38ex}{\matex@ssize {H}}\kern-0.1em
- {\matex@ssize {E}}\kern-0.05em
- \raisebox{-0.38ex}{\matex@ssize {S}}\kern-0.05em
- {\matex@ssize {I}}\kern-0.05em
- \raisebox{-0.35ex}{\matex@ssize {S}}\kern-0.5em
- \kern 1ex
- }
-}
-
-\makeatother
-
-%</dtx-style>
-% \fi
-%
-%
-% \Finale
-\endinput
-% \iffalse
-% Local Variables:
-% mode: doctex
-% TeX-master: t
-% End:
-% \fi
diff --git a/macros/latex/contrib/bithesis/bithesis.ins b/macros/latex/contrib/bithesis/bithesis.ins
deleted file mode 100644
index 27ae5ee939..0000000000
--- a/macros/latex/contrib/bithesis/bithesis.ins
+++ /dev/null
@@ -1,80 +0,0 @@
-%% Copyright (C) 2022
-%% Association of Bit Network Pioneer and any individual authors listed elsewhere in this file.
-%% --------------------------------------------------------------------------
-%%
-%% This work may be distributed and/or modified under the
-%% conditions of the LaTeX Project Public License, either
-%% version 1.3c of this license or (at your option) any later
-%% version. This version of this license is in
-%% http://www.latex-project.org/lppl/lppl-1-3c.txt
-%% and the latest version of this license is in
-%% http://www.latex-project.org/lppl.txt
-%% and version 1.3 or later is part of all distributions of
-%% LaTeX version 2020/11/27 or later.
-%%
-%% This work has the LPPL maintenance status `maintained'.
-%%
-%% The Current Mainteiner of this work is Feng Kaiyu.
-%% --------------------------------------------------------------------------
-
-\input docstrip.tex
-\keepsilent
-
-\preamble
-
- Copyright (C) 2022
- Association of Bit Network Pioneer and any individual authors listed in the documentation.
-------------------------------------------------------------------------------
-
- This work may be distributed and/or modified under the
- conditions of the LaTeX Project Public License, either
- version 1.3c of this license or (at your option) any later
- version. This version of this license is in
- http://www.latex-project.org/lppl/lppl-1-3c.txt
- and the latest version of this license is in
- http://www.latex-project.org/lppl.txt
- and version 1.3 or later is part of all distributions of
- LaTeX version 2020/11/27 or later.
-
- This work has the LPPL maintenance status `maintained'.
-
- The Current Maintainer of this work is Feng Kaiyu.
-------------------------------------------------------------------------------
-
-\endpreamble
-
-\generate
- {
- \usedir{tex/latex/bithesis}
- \file{bitart.cls} {\from{\jobname.dtx}{oldcls,article}}
- \file{bitbook.cls} {\from{\jobname.dtx}{oldcls,book}}
- \file{bitgrad.cls} {\from{\jobname.dtx}{oldcls,graduate}}
- \file{bithesis.cls} {\from{\jobname.dtx}{cls,thesis}}
- \file{bitbeamer.cls} {\from{\jobname.dtx}{cls,beamer}}
- \file{bitreport.cls} {\from{\jobname.dtx}{cls,report}}
- \file{dtx-style.sty} {\from{\jobname.dtx}{dtx-style}}
- }
-
-\obeyspaces
-\Msg{*************************************************************}
-\Msg{* *}
-\Msg{* To finish the installation you have to move the following *}
-\Msg{* file into proper directories searched by TeX: *}
-\Msg{* *}
-\Msg{* The recommended directory is TDS:tex/latex/bithesis *}
-\Msg{* *}
-\Msg{* bithesis.cls *}
-\Msg{* bitreport.cls *}
-\Msg{* bitbeamer.cls *}
-\Msg{* bitart.cls (deprecated) *}
-\Msg{* bitbook.cls (deprecated) *}
-\Msg{* bitgrad.cls (deprecated) *}
-\Msg{* *}
-\Msg{* To produce the documentation run the file bithesis.dtx *}
-\Msg{* through XeLaTeX. *}
-\Msg{* *}
-\Msg{* Happy BIThesis! *}
-\Msg{* *}
-\Msg{*************************************************************}
-
-\endbatchfile
diff --git a/macros/latex/contrib/bithesis/bithesis.pdf b/macros/latex/contrib/bithesis/bithesis.pdf
deleted file mode 100644
index 83d3151ff5..0000000000
--- a/macros/latex/contrib/bithesis/bithesis.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/bithesis/contributing-zh.md b/macros/latex/contrib/bithesis/contributing-zh.md
deleted file mode 100644
index 52a09bae99..0000000000
--- a/macros/latex/contrib/bithesis/contributing-zh.md
+++ /dev/null
@@ -1,54 +0,0 @@
-# 贡献者指南
-
-[![English version](assets/english.svg)](./contributing.md)
-
-:tada: 首先,感谢你为本项目付出的宝贵时间!:tada:
-
-以下是有关如何为本项目贡献力量的一些指导建议。
-
-以下内容大多是指导性质的建议,并非强制要求。总之,在行动之前确保你知道自己要做什么。
-
-本文档目前仍处于完善阶段,欢迎通过提出你自己的意见或者提交 PR 来帮助我们。
-
-## Guidance
-
-**[我不想看下面的内容,我只是想问个小问题!!!](#加入我们的-QQ-群)**
-
-| | 普通使用者 | 开发者 |
-| ---------- | ------------------------------- | ------------------------------------------- |
-| 提出问题 | [QQ 群](#加入我们的-qq-群) | [QQ 群](#加入我们的-qq-群) |
-| 提交 Bug | [QQ 群](#加入我们的-qq-群) | [Github - Issues](#在-github-上提交-bug) |
-| 有好的想法 | [QQ 群](#加入我们的-qq-群) | Github - Issues |
-| 提交 PR | | [Github - Pull Request](#提交-pull-request) |
-| 有信心维护代码 | | [加入QQ 群并联系我们](#加入我们的-qq-群) |
-
-## 加入我们的 QQ 群
-
-在我们提供的[QQ 群(737548118)][QQ chat group invitation]中有**很多活跃的维护者**和**友好的社区氛围**。在这里你能获得很多与本项目有关的帮助。
-
-[![Join on QQ Chat Group](https://img.shields.io/badge/QQ%E7%BE%A4-737548118-green)](https://jq.qq.com/?_wv=1027&k=KYDrmS5z)
-
-> 提示:关于具体如何提出问题并没有明确的要求。总之请提供尽可能详细的信息,并且思考一下这个问题是不是已经被解决了。
-
-## 在 Github 上提交 Bug
-
-如果你能更精确的定位问题所在,或者能够提供更详细的信息;你可以向我们[提交一个 issue][issue reporting link]。
-
-## 提交 Pull Request
-
-欢迎提交 Pull Request!
-
-以下流程将会帮助你完成一次 PR。
-
-1. Fork 这个项目。
-2. 使用 `git clone` 将项目拉取到本地。
-3. 使用最少的修改来解决 bug。
-4. 使用 `git commit` 提交变更。
-5. 创建一个 PR,并添加相应的说明。
-6. 在 PR 被合并之前请保持关注,以便进行修改。
-
-更细致的流程请参考
-_[Github Help](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests)_。
-
-[QQ chat group invitation]: https://jq.qq.com/?_wv=1027&k=KYDrmS5z
-[issue reporting link]: https://github.com/BITNP/BIThesis/issues/new
diff --git a/macros/latex/contrib/bithesis/contributing.md b/macros/latex/contrib/bithesis/contributing.md
deleted file mode 100644
index 3dcd006aaa..0000000000
--- a/macros/latex/contrib/bithesis/contributing.md
+++ /dev/null
@@ -1,56 +0,0 @@
-# Contributing
-
-[![Chinese version](./assets/chinese.svg)](./contributing-zh.md)
-
-:tada: First off, thanks for taking the time to contribute! :tada:
-
-The following is a set of guidelines for contributing to BIThesis.
-
-These are mostly guidelines, not rules. Use your best judgment,
-and feel free to propose changes to this document in a pull request.
-
-## Guidance
-
-**[I don't want to read this whole thing, I just have a small question!!!](#join-our-QQ-chat-group)**
-
-| | For Users | For Developers |
-| --------------- | -------------------------------- | ---------------------------------------------- |
-| Have a Question | [QQ Chat Group](#join-our-QQ-chat-group) | [QQ Chat Group](#join-our-QQ-chat-group) |
-| Bug Report | [QQ Chat Group](#join-our-QQ-chat-group) | [Github - Issues](#bug-report-on-github) |
-| Feature Request | [QQ Chat Group](#join-our-QQ-chat-group) | [QQ Chat Group](#join-our-QQ-chat-group) |
-| Pull Request | | [Github - Pull Request](#pull-request-process) |
-
-## Join Our QQ Chat Group
-
-We provide an [QQ Chat Group][QQ chat group invitation]
-with **a bunch of active maintainers** and **a friendly community**
-to give helpful advice **if you have any questions**.
-
-[![Join on QQ Chat Group](https://img.shields.io/badge/QQ%E7%BE%A4-737548118-green)](https://jq.qq.com/?_wv=1027&k=KYDrmS5z)
-
-> note: there is no detailed rules about how to ask question, just provide enough information and
-rethink before write.
-
-## Bug Report on Github
-
-If you can locate the bug or provide more detailed information, you may
-_[report an issue here][issue reporting link]_.
-
-## Pull Request Process
-
-Pull Request are welcomed!
-
-The following steps will help you finish a pull request.
-
-1. Fork this repo.
-2. `git clone` your forked repo.
-3. Make changes until the bug is fixed.
-4. Commit your changes.
-5. Create a pull request with related information.
-6. Keep in touch with further discussion and refine.
-
-For more information, refer to the
-_[Github Help](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests)_.
-
-[QQ chat group invitation]: https://jq.qq.com/?_wv=1027&k=KYDrmS5z
-[issue reporting link]: https://github.com/BITNP/BIThesis/issues/new
diff --git a/macros/latex/contrib/l3build/CHANGELOG.md b/macros/latex/contrib/l3build/CHANGELOG.md
index 20d7a61bbb..c83c3fc3b0 100644
--- a/macros/latex/contrib/l3build/CHANGELOG.md
+++ b/macros/latex/contrib/l3build/CHANGELOG.md
@@ -7,6 +7,11 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2022-09-15]
+
+### Fixed
+- Copying of nested directories
+
## [2022-04-19]
### Changed
@@ -598,7 +603,8 @@ this project uses date-based 'snapshot' version identifiers.
- Rationalise short option names: removed `-d`, `-E`, `-r`
- Target `cmdcheck`: specific to LaTeX kernel work
-[Unreleased]: https://github.com/latex3/l3build/compare/2022-04-19...HEAD
+[Unreleased]: https://github.com/latex3/l3build/compare/2022-09-15...HEAD
+[2022-09-15]: https://github.com/latex3/l3build/compare/2022-04-19...2022-09-15
[2022-04-19]: https://github.com/latex3/l3build/compare/2022-04-12...2022-04-19
[2022-04-12]: https://github.com/latex3/l3build/compare/2022-03-15...2022-04-12
[2022-03-15]: https://github.com/latex3/l3build/compare/2022-02-24...2022-03-15
diff --git a/macros/latex/contrib/l3build/README.md b/macros/latex/contrib/l3build/README.md
index ed9a727216..bb05be7e4d 100644
--- a/macros/latex/contrib/l3build/README.md
+++ b/macros/latex/contrib/l3build/README.md
@@ -1,7 +1,7 @@
l3build: a testing and building system for LaTeX
=================================================
-Release 2022-04-19
+Release 2022-09-15
Overview
--------
diff --git a/macros/latex/contrib/l3build/l3build-install.lua b/macros/latex/contrib/l3build/l3build-install.lua
index baea5a9a42..64d29fc590 100644
--- a/macros/latex/contrib/l3build/l3build-install.lua
+++ b/macros/latex/contrib/l3build/l3build-install.lua
@@ -327,9 +327,17 @@ function install_files(target,full,dry_run)
if errorlevel ~= 0 then return errorlevel end
+ -- Track created destination directories to avoid overhead from
+ -- repeatedly creating them
+ local destination_dirs = {}
+
-- Files are all copied in one shot: this ensures that cleandir()
-- can't be an issue even if there are complex set-ups
for _,v in ipairs(installmap) do
+ if not destination_dirs[v.dest] then
+ mkdir(v.dest)
+ destination_dirs[v.dest] = true
+ end
errorlevel = cp(v.file,v.source,v.dest)
if errorlevel ~= 0 then return errorlevel end
end
diff --git a/macros/latex/contrib/l3build/l3build.1 b/macros/latex/contrib/l3build/l3build.1
index f3051302fd..a0b54c3507 100644
--- a/macros/latex/contrib/l3build/l3build.1
+++ b/macros/latex/contrib/l3build/l3build.1
@@ -1,4 +1,4 @@
-.TH l3build 1 "2022-04-19"
+.TH l3build 1 "2022-09-15"
.SH NAME
l3build \- Checking and building packages
.SH SYNOPSIS
diff --git a/macros/latex/contrib/l3build/l3build.dtx b/macros/latex/contrib/l3build/l3build.dtx
index 64ae3c39cf..efdadd7685 100644
--- a/macros/latex/contrib/l3build/l3build.dtx
+++ b/macros/latex/contrib/l3build/l3build.dtx
@@ -206,7 +206,6 @@
\end{longtable}
\endgroup
}
-\newcommand\code{\texttt}
\newcommand\var{\texttt}
\usepackage[procnames]{listings}
\lstset{
@@ -237,7 +236,7 @@
% }^^A
% }
%
-% \date{Released 2022-04-19}
+% \date{Released 2022-09-15}
%
% \maketitle
% \tableofcontents
@@ -510,7 +509,7 @@
% The documentation compilation is performed with the \var{typesetexe} binary (default \texttt{pdflatex}), with options \var{typesetopts}.
% Additional \TeX{} material defined in \var{typesetcmds} is passed to the document (e.g., for writing |\\PassOptionsToClass{l3doc}{letterpaper}|, and so on---note that backslashes need to be escaped in Lua strings).
%
-% Files that match |typesetsuppfiles| in the |support| directory (|supportdir|) are copied into the |build/local| directory (|localdir|) for the typesetting compilation process.
+% Files that match |typesetsuppfiles| in the |support| directory (|supportdir|) are copied into the |build/doc| directory (|typesetdir|) for the typesetting compilation process.
% Additional dependencies listed in the \var{typesetdeps} variable (empty by default) will also be installed.
%
% Source files specified in \var{sourcefiles} and \var{typesetsourcefiles}
@@ -714,7 +713,7 @@
% \label{fig:configs}
% \end{figure}
%
-% To allow selection of a one or more configurations, and to allow saving of
+% To allow selection of one or more configurations, and to allow saving of
% |.tlg| files in non-standard configurations, the |--config| (|-c|) option may
% be used. This works in the same way as |--engine|: it takes a comma list of
% configurations to apply, overriding \var{checkconfigs}.
@@ -1474,11 +1473,13 @@
% For example, to choose to use \LuaTeX{} for one file when \var{typesetexe}
% is |pdftex|
% \begin{verbatim}
-% specialtypesetting.foo = {cmd = "luatex -interaction=nonstopmode"}
+% specialtypesetting = specialtypesetting or {}
+% specialtypesetting["foo.tex"] = {cmd = "luatex -interaction=nonstopmode"}
% \end{verbatim}
% or to select an entirely different typesetting function
% \begin{verbatim}
-% specialtypesetting.foo = {func = typeset_foo}
+% specialtypesetting = specialtypesetting or {}
+% specialtypesetting["foo.tex"] = {func = typeset_foo}
% \end{verbatim}
%
% \subsection{Automated upload to CTAN}
diff --git a/macros/latex/contrib/l3build/l3build.lua b/macros/latex/contrib/l3build/l3build.lua
index 72d67d2e1c..ebca82423f 100755
--- a/macros/latex/contrib/l3build/l3build.lua
+++ b/macros/latex/contrib/l3build/l3build.lua
@@ -25,7 +25,7 @@ for those people who are interested.
--]]
-- Version information
-release_date = "2022-04-19"
+release_date = "2022-09-15"
-- File operations are aided by the LuaFileSystem module
local lfs = require("lfs")
diff --git a/macros/latex/contrib/l3build/l3build.pdf b/macros/latex/contrib/l3build/l3build.pdf
index 3f4e8750c2..3420d198a0 100644
--- a/macros/latex/contrib/l3build/l3build.pdf
+++ b/macros/latex/contrib/l3build/l3build.pdf
Binary files differ
diff --git a/macros/latex/contrib/newpax/README.md b/macros/latex/contrib/newpax/README.md
index 67884fc915..5023423287 100644
--- a/macros/latex/contrib/newpax/README.md
+++ b/macros/latex/contrib/newpax/README.md
@@ -7,7 +7,7 @@ a lua script first.
The package is based on and uses code from [pax](https://ctan.org/pkg/pax) by Heiko Oberdiek.
-Packageversion: 0.52
+Packageversion: 0.53
Packagedate: 2021-02-26
Author: Ulrike Fischer
diff --git a/macros/latex/contrib/newpax/doc-input1.pdf b/macros/latex/contrib/newpax/doc-input1.pdf
index 5502f64f96..49f91f65a5 100644
--- a/macros/latex/contrib/newpax/doc-input1.pdf
+++ b/macros/latex/contrib/newpax/doc-input1.pdf
@@ -544,7 +544,7 @@ endobj
<< /Type /Catalog /Pages 36 0 R /Outlines 84 0 R /Names 86 0 R /Lang (en-US)/PageMode /UseOutlines/OpenAction [5 0 R /Fit]/PageLabels <</Nums[0<</S/D>>]>> >>
endobj
88 0 obj
-<< /Creator <FEFF00630072006500610074006F0072>/Author <FEFF0041007500740068006F0072>/Title <FEFF007400690074006C0065> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220911155604+02'00') /ModDate (D:20220911155604+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >>
+<< /Creator <FEFF00630072006500610074006F0072>/Author <FEFF0041007500740068006F0072>/Title <FEFF007400690074006C0065> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220915203759+02'00') /ModDate (D:20220915203759+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >>
endobj
xref
0 89
@@ -638,7 +638,7 @@ xref
0000028679 00000 n
0000028853 00000 n
trailer
-<< /Size 89 /Root 87 0 R /Info 88 0 R /ID [ <8F0FB4F0B8248AA1FF4C68AF8F8BFDF5> <8F0FB4F0B8248AA1FF4C68AF8F8BFDF5> ] >>
+<< /Size 89 /Root 87 0 R /Info 88 0 R /ID [ <886964798E7A068E2C2C4A354A412824> <886964798E7A068E2C2C4A354A412824> ] >>
startxref
29175
%%EOF
diff --git a/macros/latex/contrib/newpax/doc-input1.tex b/macros/latex/contrib/newpax/doc-input1.tex
index b6da05beae..04c23b4d91 100644
--- a/macros/latex/contrib/newpax/doc-input1.tex
+++ b/macros/latex/contrib/newpax/doc-input1.tex
@@ -1,6 +1,5 @@
% !Mode:: "TeX:UTF-8:Main"
-\RequirePackage{pdfmanagement-testphase}
-\DeclareDocumentMetadata{uncompress}
+\DocumentMetadata{uncompress}
\documentclass{article}
\usepackage{hyperref}
diff --git a/macros/latex/contrib/newpax/doc-input2.pdf b/macros/latex/contrib/newpax/doc-input2.pdf
index f93f64ffc8..dcac6b1f3e 100644
--- a/macros/latex/contrib/newpax/doc-input2.pdf
+++ b/macros/latex/contrib/newpax/doc-input2.pdf
@@ -540,7 +540,7 @@ endobj
<< /Type /Catalog /Pages 35 0 R /Outlines 83 0 R /Names 85 0 R /Lang (en-US)/PageMode /UseOutlines/OpenAction [5 0 R /Fit]/PageLabels <</Nums[0<</S/D>>]>> >>
endobj
87 0 obj
-<< /Creator <FEFF00630072006500610074006F0072>/Author <FEFF0041007500740068006F0072>/Title <FEFF007400690074006C0065> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220911155626+02'00') /ModDate (D:20220911155626+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >>
+<< /Creator <FEFF00630072006500610074006F0072>/Author <FEFF0041007500740068006F0072>/Title <FEFF007400690074006C0065> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220915203828+02'00') /ModDate (D:20220915203828+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >>
endobj
xref
0 88
@@ -633,7 +633,7 @@ xref
0000028411 00000 n
0000028585 00000 n
trailer
-<< /Size 88 /Root 86 0 R /Info 87 0 R /ID [ <89E0AB23EDFDDB91B45D227A7255B6E9> <89E0AB23EDFDDB91B45D227A7255B6E9> ] >>
+<< /Size 88 /Root 86 0 R /Info 87 0 R /ID [ <A6E9D6D449A4C5E06D795AC75043336F> <A6E9D6D449A4C5E06D795AC75043336F> ] >>
startxref
28907
%%EOF
diff --git a/macros/latex/contrib/newpax/doc-input2.tex b/macros/latex/contrib/newpax/doc-input2.tex
index e0d96d307f..a1991db774 100644
--- a/macros/latex/contrib/newpax/doc-input2.tex
+++ b/macros/latex/contrib/newpax/doc-input2.tex
@@ -1,6 +1,5 @@
% !Mode:: "TeX:UTF-8:Main"
-\RequirePackage{pdfmanagement-testphase}
-\DeclareDocumentMetadata{uncompress}
+\DocumentMetadata{uncompress}
\documentclass{article}
\usepackage{hyperref}
diff --git a/macros/latex/contrib/newpax/doc-use-newpax.pdf b/macros/latex/contrib/newpax/doc-use-newpax.pdf
index b66c953778..3a3b35e65d 100644
--- a/macros/latex/contrib/newpax/doc-use-newpax.pdf
+++ b/macros/latex/contrib/newpax/doc-use-newpax.pdf
@@ -84,7 +84,7 @@ Q
endstream
endobj
6 0 obj
-<< /Type /XObject /Subtype /Form /FormType 1 /PTEX.PageNumber 1 /PTEX.InfoDict << /Creator <FEFF00630072006500610074006F0072> /Author <FEFF0041007500740068006F0072> /Title <FEFF007400690074006C0065> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220911155604+02'00') /ModDate (D:20220911155604+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >> /BBox [ 0 0 595.276 841.89 ] /Resources << /ExtGState 75 0 R /Font << /F15 76 0 R /F16 77 0 R /F28 78 0 R >> /ProcSet [ /PDF /Text ] >> /Length 4811 >>
+<< /Type /XObject /Subtype /Form /FormType 1 /PTEX.PageNumber 1 /PTEX.InfoDict << /Creator <FEFF00630072006500610074006F0072> /Author <FEFF0041007500740068006F0072> /Title <FEFF007400690074006C0065> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220915203759+02'00') /ModDate (D:20220915203759+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >> /BBox [ 0 0 595.276 841.89 ] /Resources << /ExtGState 75 0 R /Font << /F15 76 0 R /F16 77 0 R /F28 78 0 R >> /ProcSet [ /PDF /Text ] >> /Length 4811 >>
stream
/opacity1 gs
BT
@@ -393,7 +393,7 @@ Q
endstream
endobj
24 0 obj
-<< /Type /XObject /Subtype /Form /FormType 1 /PTEX.PageNumber 2 /PTEX.InfoDict << /Creator <FEFF00630072006500610074006F0072> /Author <FEFF0041007500740068006F0072> /Title <FEFF007400690074006C0065> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220911155604+02'00') /ModDate (D:20220911155604+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >> /BBox [ 0 0 595.276 841.89 ] /Resources << /ExtGState 75 0 R /Font << /F16 77 0 R /F15 76 0 R >> /ProcSet [ /PDF /Text ] >> /Length 303 >>
+<< /Type /XObject /Subtype /Form /FormType 1 /PTEX.PageNumber 2 /PTEX.InfoDict << /Creator <FEFF00630072006500610074006F0072> /Author <FEFF0041007500740068006F0072> /Title <FEFF007400690074006C0065> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220915203759+02'00') /ModDate (D:20220915203759+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >> /BBox [ 0 0 595.276 841.89 ] /Resources << /ExtGState 75 0 R /Font << /F16 77 0 R /F15 76 0 R >> /ProcSet [ /PDF /Text ] >> /Length 303 >>
stream
/opacity1 gs
BT
@@ -485,10 +485,10 @@ endobj
<< /Type /Annot /Subtype /Link /Border [0 0 1 ] /H /I /C [0.724708 0.4 0.717646 ] /A <</Type/Action/S/URI/URI(https://www.latex-project.org)>> /BS <</S/U/W 1>> /Rect [ 158.406 569.081 276.275 574.615 ] >>
endobj
22 0 obj
-<< /Type /Annot /Subtype /Link /Border [0 0 1 ] /H /I /C [0.444706 0.456472 0.680002 ] /A <</Type/Action/S/GoToR/F<FEFF002F0063002F007400650078006C006900760065002F0032003000320030002F007400650078006D0066002D0064006900730074002F0064006F0063002F006C0061007400650078002F0062006100730065002F0064006F0063002E007000640066>/D[ ]>> /BS <</S/U/W 1>> /Rect [ 165.878 563.163 174.078 568.637 ] >>
+<< /Type /Annot /Subtype /Link /Border [0 0 1 ] /H /I /C [0.444706 0.456472 0.680002 ] /A <</Type/Action/S/GoToR/F<</AFRelationship/Unspecified/F <FEFF002F0063002F007400650078006C006900760065002F0032003000320030002F007400650078006D0066002D0064006900730074002F0064006F0063002F006C0061007400650078002F0062006100730065002F0064006F0063002E007000640066>/Subtype/application#2Fpdf/Type/Filespec/UF <FEFF002F0063002F007400650078006C006900760065002F0032003000320030002F007400650078006D0066002D0064006900730074002F0064006F0063002F006C0061007400650078002F0062006100730065002F0064006F0063002E007000640066>>>/D(chapter.1)>> /BS <</S/U/W 1>> /Rect [ 165.878 563.163 174.078 568.637 ] >>
endobj
23 0 obj
-<< /Type /Annot /Subtype /Link /Border [0 0 1 ] /H /I /C [0.444706 0.456472 0.680002 ] /A <</Type/Action/S/GoToR/F<FEFF006500780061006D0070006C0065002D0069006D006100670065002E007000640066>/D[ ]>> /BS <</S/U/W 1>> /Rect [ 158.406 508.869 165.768 513.432 ] >>
+<< /Type /Annot /Subtype /Link /Border [0 0 1 ] /H /I /C [0.444706 0.456472 0.680002 ] /A <</Type/Action/S/GoToR/F<</AFRelationship/Unspecified/F <FEFF006500780061006D0070006C0065002D0069006D006100670065002E007000640066>/Subtype/application#2Fpdf/Type/Filespec/UF <FEFF006500780061006D0070006C0065002D0069006D006100670065002E007000640066>>>/D[0 /Fit]>> /BS <</S/U/W 1>> /Rect [ 158.406 508.869 165.768 513.432 ] >>
endobj
26 0 obj
<< /Type /Annot /Subtype /Link /Border [0 0 1 ] /H /I /C [0.724708 0.4 0.717646 ] /A <</Type/Action/S/URI/URI(https://www.latex-project.org)>> /BS <</S/U/W 1>> /Rect [ 282.581 640.697 359.667 646.291 ] >>
@@ -530,10 +530,10 @@ endobj
<< /Type /Annot /Subtype /Link /Border [0 0 1 ] /H /I /C [0.724708 0.4 0.717646 ] /A <</Type/Action/S/URI/URI(https://www.latex-project.org)>> /BS <</S/U/W 1>> /Rect [ 158.406 402.258 276.275 407.792 ] >>
endobj
45 0 obj
-<< /Type /Annot /Subtype /Link /Border [0 0 1 ] /H /I /C [0.444706 0.456472 0.680002 ] /A <</Type/Action/S/GoToR/F<FEFF002F0063002F007400650078006C006900760065002F0032003000320030002F007400650078006D0066002D0064006900730074002F0064006F0063002F006C0061007400650078002F0062006100730065002F0064006F0063002E007000640066>/D[ ]>> /BS <</S/U/W 1>> /Rect [ 165.878 396.34 174.078 401.814 ] >>
+<< /Type /Annot /Subtype /Link /Border [0 0 1 ] /H /I /C [0.444706 0.456472 0.680002 ] /A <</Type/Action/S/GoToR/F<</AFRelationship/Unspecified/F <FEFF002F0063002F007400650078006C006900760065002F0032003000320030002F007400650078006D0066002D0064006900730074002F0064006F0063002F006C0061007400650078002F0062006100730065002F0064006F0063002E007000640066>/Subtype/application#2Fpdf/Type/Filespec/UF <FEFF002F0063002F007400650078006C006900760065002F0032003000320030002F007400650078006D0066002D0064006900730074002F0064006F0063002F006C0061007400650078002F0062006100730065002F0064006F0063002E007000640066>>>/D(chapter.1)>> /BS <</S/U/W 1>> /Rect [ 165.878 396.34 174.078 401.814 ] >>
endobj
46 0 obj
-<< /Type /Annot /Subtype /Link /Border [0 0 1 ] /H /I /C [0.444706 0.456472 0.680002 ] /A <</Type/Action/S/GoToR/F<FEFF006500780061006D0070006C0065002D0069006D006100670065002E007000640066>/D[ ]>> /BS <</S/U/W 1>> /Rect [ 158.406 342.046 165.768 346.609 ] >>
+<< /Type /Annot /Subtype /Link /Border [0 0 1 ] /H /I /C [0.444706 0.456472 0.680002 ] /A <</Type/Action/S/GoToR/F<</AFRelationship/Unspecified/F <FEFF006500780061006D0070006C0065002D0069006D006100670065002E007000640066>/Subtype/application#2Fpdf/Type/Filespec/UF <FEFF006500780061006D0070006C0065002D0069006D006100670065002E007000640066>>>/D[0 /Fit]>> /BS <</S/U/W 1>> /Rect [ 158.406 342.046 165.768 346.609 ] >>
endobj
48 0 obj
<< /Type /Annot /Subtype /Link /Border [0 0 1 ] /H /I /C [0.724708 0.4 0.717646 ] /A <</Type/Action/S/URI/URI(https://www.latex-project.org)>> /BS <</S/U/W 1>> /Rect [ 282.581 473.874 359.667 479.468 ] >>
@@ -635,7 +635,7 @@ endobj
[ 102 0 R 103 0 R 104 0 R 105 0 R 106 0 R 107 0 R 108 0 R 109 0 R 110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 101 0 R ]
endobj
56 0 obj
-<< /Type /XObject /Subtype /Form /FormType 1 /PTEX.PageNumber 1 /PTEX.InfoDict << /Creator <FEFF00630072006500610074006F0072> /Author <FEFF0041007500740068006F0072> /Title <FEFF007400690074006C0065> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220911155626+02'00') /ModDate (D:20220911155626+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >> /BBox [ 0 0 595.276 841.89 ] /Resources << /ExtGState 125 0 R /Font << /F15 126 0 R /F16 127 0 R /F28 128 0 R >> /ProcSet [ /PDF /Text ] >> /Length 4742 >>
+<< /Type /XObject /Subtype /Form /FormType 1 /PTEX.PageNumber 1 /PTEX.InfoDict << /Creator <FEFF00630072006500610074006F0072> /Author <FEFF0041007500740068006F0072> /Title <FEFF007400690074006C0065> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220915203828+02'00') /ModDate (D:20220915203828+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >> /BBox [ 0 0 595.276 841.89 ] /Resources << /ExtGState 125 0 R /Font << /F15 126 0 R /F16 127 0 R /F28 128 0 R >> /ProcSet [ /PDF /Text ] >> /Length 4742 >>
stream
/opacity1 gs
BT
@@ -966,10 +966,10 @@ endobj
<< /Type /Annot /Subtype /Link /Border [0 0 1] /H /I /C [0.724708 0.4 0.717646] /A <</Type/Action/S/URI/URI(https://www.latex-project.org)>> /Rect [ 150.898 538.673 398.571 549.086 ] >>
endobj
114 0 obj
-<< /Type /Annot /Subtype /Link /Border [0 0 1] /H /I /C [0.444706 0.456472 0.680002] /A <</Type/Action/S/GoToR/F<FEFF002F0063002F007400650078006C006900760065002F0032003000320030002F007400650078006D0066002D0064006900730074002F0064006F0063002F006C0061007400650078002F0062006100730065002F0064006F0063002E007000640066>/D[ ]>> /Rect [ 164.957 527.537 180.385 537.838 ] >>
+<< /Type /Annot /Subtype /Link /Border [0 0 1] /H /I /C [0.444706 0.456472 0.680002] /A <</Type/Action/S/GoToR/F<</AFRelationship/Unspecified/F <FEFF002F0063002F007400650078006C006900760065002F0032003000320030002F007400650078006D0066002D0064006900730074002F0064006F0063002F006C0061007400650078002F0062006100730065002F0064006F0063002E007000640066>/Subtype/application#2Fpdf/Type/Filespec/UF <FEFF002F0063002F007400650078006C006900760065002F0032003000320030002F007400650078006D0066002D0064006900730074002F0064006F0063002F006C0061007400650078002F0062006100730065002F0064006F0063002E007000640066>>>/D(chapter.1)>> /Rect [ 164.957 527.537 180.385 537.838 ] >>
endobj
115 0 obj
-<< /Type /Annot /Subtype /Link /Border [0 0 1] /H /I /C [0.444706 0.456472 0.680002] /A <</Type/Action/S/GoToR/F<FEFF006500780061006D0070006C0065002D0069006D006100670065002E007000640066>/D[ ]>> /Rect [ 150.898 425.376 164.751 433.962 ] >>
+<< /Type /Annot /Subtype /Link /Border [0 0 1] /H /I /C [0.444706 0.456472 0.680002] /A <</Type/Action/S/GoToR/F<</AFRelationship/Unspecified/F <FEFF006500780061006D0070006C0065002D0069006D006100670065002E007000640066>/Subtype/application#2Fpdf/Type/Filespec/UF <FEFF006500780061006D0070006C0065002D0069006D006100670065002E007000640066>>>/D[0 /Fit]>> /Rect [ 150.898 425.376 164.751 433.962 ] >>
endobj
101 0 obj
<< /Type /Annot /Subtype /Link /Border [0 0 1] /H /I /C [0.0 0.0 1.0] /Rect [ 163.961 661.186 172.514 673.704 ]/A << /S /GoTo /D (NEWPAX@doc-input2.newpax@1@B) >> >>
@@ -1020,7 +1020,7 @@ endobj
[ 148 0 R 149 0 R 150 0 R 151 0 R ]
endobj
147 0 obj
-<< /Type /XObject /Subtype /Form /FormType 1 /PTEX.PageNumber 2 /PTEX.InfoDict << /Creator <FEFF00630072006500610074006F0072> /Author <FEFF0041007500740068006F0072> /Title <FEFF007400690074006C0065> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220911155626+02'00') /ModDate (D:20220911155626+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >> /BBox [ 0 0 595.276 841.89 ] /Resources << /ExtGState 125 0 R /Font << /F16 127 0 R /F15 126 0 R >> /ProcSet [ /PDF /Text ] >> /Length 303 >>
+<< /Type /XObject /Subtype /Form /FormType 1 /PTEX.PageNumber 2 /PTEX.InfoDict << /Creator <FEFF00630072006500610074006F0072> /Author <FEFF0041007500740068006F0072> /Title <FEFF007400690074006C0065> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220915203828+02'00') /ModDate (D:20220915203828+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >> /BBox [ 0 0 595.276 841.89 ] /Resources << /ExtGState 125 0 R /Font << /F16 127 0 R /F15 126 0 R >> /ProcSet [ /PDF /Text ] >> /Length 303 >>
stream
/opacity1 gs
BT
@@ -1079,7 +1079,7 @@ endobj
[ 158 0 R ]
endobj
157 0 obj
-<< /Type /XObject /Subtype /Form /FormType 1 /PTEX.PageNumber 3 /PTEX.InfoDict << /Creator <FEFF00630072006500610074006F0072> /Author <FEFF0041007500740068006F0072> /Title <FEFF007400690074006C0065> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220911155626+02'00') /ModDate (D:20220911155626+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >> /BBox [ 0 0 595.276 841.89 ] /Resources << /ExtGState 125 0 R /Font << /F15 126 0 R >> /ProcSet [ /PDF /Text ] >> /Length 173 >>
+<< /Type /XObject /Subtype /Form /FormType 1 /PTEX.PageNumber 3 /PTEX.InfoDict << /Creator <FEFF00630072006500610074006F0072> /Author <FEFF0041007500740068006F0072> /Title <FEFF007400690074006C0065> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220915203828+02'00') /ModDate (D:20220915203828+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >> /BBox [ 0 0 595.276 841.89 ] /Resources << /ExtGState 125 0 R /Font << /F15 126 0 R >> /ProcSet [ /PDF /Text ] >> /Length 173 >>
stream
/opacity1 gs
BT
@@ -1124,7 +1124,7 @@ endobj
<< /Type /Page /Contents 167 0 R /Resources 165 0 R /MediaBox [ 0 0 612 792 ] /Parent 72 0 R >>
endobj
164 0 obj
-<< /Type /XObject /Subtype /Form /FormType 1 /PTEX.PageNumber 4 /PTEX.InfoDict << /Creator <FEFF00630072006500610074006F0072> /Author <FEFF0041007500740068006F0072> /Title <FEFF007400690074006C0065> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220911155626+02'00') /ModDate (D:20220911155626+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >> /BBox [ 0 0 595.276 841.89 ] /Resources << /ExtGState 125 0 R /Font << /F15 126 0 R >> /ProcSet [ /PDF /Text ] >> /Length 123 >>
+<< /Type /XObject /Subtype /Form /FormType 1 /PTEX.PageNumber 4 /PTEX.InfoDict << /Creator <FEFF00630072006500610074006F0072> /Author <FEFF0041007500740068006F0072> /Title <FEFF007400690074006C0065> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220915203828+02'00') /ModDate (D:20220915203828+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >> /BBox [ 0 0 595.276 841.89 ] /Resources << /ExtGState 125 0 R /Font << /F15 126 0 R >> /ProcSet [ /PDF /Text ] >> /Length 123 >>
stream
/opacity1 gs
BT
@@ -1219,20 +1219,20 @@ endobj
<< /Type /Catalog /Pages 72 0 R /Names 176 0 R /Lang (en-US)/PageMode /UseOutlines/OpenAction [5 0 R /Fit]/PageLabels <</Nums[0<</S/D>>]>> >>
endobj
178 0 obj
-<< /Creator <FEFF004C006100540065005800200077006900740068002000680079007000650072007200650066> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220911155738+02'00') /ModDate (D:20220911155738+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >>
+<< /Creator <FEFF004C006100540065005800200077006900740068002000680079007000650072007200650066> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220915203954+02'00') /ModDate (D:20220915203954+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >>
endobj
xref
0 179
0000000002 65535 f
-0000062659 00000 n
+0000063994 00000 n
0000000003 00000 f
0000000004 00000 f
0000000053 00000 f
0000000668 00000 n
0000001304 00000 n
0000001090 00000 n
-0000030643 00000 n
-0000030854 00000 n
+0000031533 00000 n
+0000031744 00000 n
0000023523 00000 n
0000023745 00000 n
0000023967 00000 n
@@ -1246,56 +1246,56 @@ xref
0000025742 00000 n
0000025964 00000 n
0000026186 00000 n
-0000026589 00000 n
+0000026877 00000 n
0000021739 00000 n
0000021524 00000 n
-0000026864 00000 n
-0000031065 00000 n
-0000031276 00000 n
-0000031487 00000 n
+0000027309 00000 n
+0000031955 00000 n
+0000032166 00000 n
+0000032377 00000 n
0000022677 00000 n
-0000031698 00000 n
-0000031911 00000 n
-0000027086 00000 n
-0000027307 00000 n
-0000027529 00000 n
-0000027750 00000 n
-0000027972 00000 n
-0000028194 00000 n
-0000028416 00000 n
-0000028636 00000 n
-0000028858 00000 n
-0000029079 00000 n
-0000029301 00000 n
-0000029522 00000 n
-0000029744 00000 n
-0000030146 00000 n
+0000032588 00000 n
+0000032801 00000 n
+0000027531 00000 n
+0000027752 00000 n
+0000027974 00000 n
+0000028195 00000 n
+0000028417 00000 n
+0000028639 00000 n
+0000028861 00000 n
+0000029081 00000 n
+0000029303 00000 n
+0000029524 00000 n
+0000029746 00000 n
+0000029967 00000 n
+0000030189 00000 n
+0000030879 00000 n
0000022958 00000 n
-0000030421 00000 n
-0000032122 00000 n
-0000032335 00000 n
-0000032548 00000 n
+0000031311 00000 n
+0000033012 00000 n
+0000033225 00000 n
+0000033438 00000 n
0000023240 00000 n
0000000054 00000 f
0000000055 00000 f
0000000000 00000 f
-0000034124 00000 n
-0000033490 00000 n
+0000035014 00000 n
+0000034380 00000 n
0000000020 00000 n
-0000032761 00000 n
-0000032821 00000 n
-0000032882 00000 n
-0000032943 00000 n
-0000033003 00000 n
-0000033064 00000 n
-0000033125 00000 n
-0000033186 00000 n
-0000033247 00000 n
-0000033307 00000 n
-0000033368 00000 n
-0000033429 00000 n
-0000064461 00000 n
-0000064820 00000 n
+0000033651 00000 n
+0000033711 00000 n
+0000033772 00000 n
+0000033833 00000 n
+0000033893 00000 n
+0000033954 00000 n
+0000034015 00000 n
+0000034076 00000 n
+0000034137 00000 n
+0000034197 00000 n
+0000034258 00000 n
+0000034319 00000 n
+0000065796 00000 n
+0000066155 00000 n
0000000792 00000 n
0000021458 00000 n
0000006694 00000 n
@@ -1324,86 +1324,86 @@ xref
0000022892 00000 n
0000023173 00000 n
0000023456 00000 n
-0000057331 00000 n
-0000054254 00000 n
-0000054458 00000 n
-0000054661 00000 n
-0000054864 00000 n
-0000055067 00000 n
-0000055269 00000 n
-0000055472 00000 n
-0000055675 00000 n
-0000055878 00000 n
-0000056080 00000 n
-0000056283 00000 n
-0000056485 00000 n
-0000056689 00000 n
-0000057074 00000 n
-0000057834 00000 n
-0000033854 00000 n
-0000033651 00000 n
-0000057516 00000 n
-0000057580 00000 n
-0000057644 00000 n
-0000057707 00000 n
-0000057771 00000 n
-0000033983 00000 n
-0000039450 00000 n
-0000039501 00000 n
-0000039658 00000 n
-0000039814 00000 n
-0000039968 00000 n
-0000040171 00000 n
-0000041454 00000 n
-0000041656 00000 n
-0000042635 00000 n
-0000042835 00000 n
-0000043635 00000 n
-0000043874 00000 n
-0000044233 00000 n
-0000044471 00000 n
-0000044680 00000 n
-0000044917 00000 n
-0000044998 00000 n
-0000050284 00000 n
-0000050352 00000 n
-0000052850 00000 n
-0000052917 00000 n
-0000054188 00000 n
-0000058304 00000 n
-0000059179 00000 n
-0000059383 00000 n
-0000059568 00000 n
-0000059753 00000 n
-0000060001 00000 n
-0000058122 00000 n
-0000057919 00000 n
-0000059938 00000 n
-0000058251 00000 n
-0000060448 00000 n
-0000061180 00000 n
-0000061426 00000 n
-0000060290 00000 n
-0000060087 00000 n
-0000061363 00000 n
-0000060419 00000 n
-0000061828 00000 n
-0000062573 00000 n
-0000061715 00000 n
-0000061512 00000 n
-0000062510 00000 n
-0000062706 00000 n
-0000063469 00000 n
-0000062738 00000 n
-0000062810 00000 n
-0000063708 00000 n
-0000064617 00000 n
-0000064913 00000 n
-0000065614 00000 n
-0000065652 00000 n
-0000065811 00000 n
+0000058666 00000 n
+0000055144 00000 n
+0000055348 00000 n
+0000055551 00000 n
+0000055754 00000 n
+0000055957 00000 n
+0000056159 00000 n
+0000056362 00000 n
+0000056565 00000 n
+0000056768 00000 n
+0000056970 00000 n
+0000057173 00000 n
+0000057375 00000 n
+0000057579 00000 n
+0000058252 00000 n
+0000059169 00000 n
+0000034744 00000 n
+0000034541 00000 n
+0000058851 00000 n
+0000058915 00000 n
+0000058979 00000 n
+0000059042 00000 n
+0000059106 00000 n
+0000034873 00000 n
+0000040340 00000 n
+0000040391 00000 n
+0000040548 00000 n
+0000040704 00000 n
+0000040858 00000 n
+0000041061 00000 n
+0000042344 00000 n
+0000042546 00000 n
+0000043525 00000 n
+0000043725 00000 n
+0000044525 00000 n
+0000044764 00000 n
+0000045123 00000 n
+0000045361 00000 n
+0000045570 00000 n
+0000045807 00000 n
+0000045888 00000 n
+0000051174 00000 n
+0000051242 00000 n
+0000053740 00000 n
+0000053807 00000 n
+0000055078 00000 n
+0000059639 00000 n
+0000060514 00000 n
+0000060718 00000 n
+0000060903 00000 n
+0000061088 00000 n
+0000061336 00000 n
+0000059457 00000 n
+0000059254 00000 n
+0000061273 00000 n
+0000059586 00000 n
+0000061783 00000 n
+0000062515 00000 n
+0000062761 00000 n
+0000061625 00000 n
+0000061422 00000 n
+0000062698 00000 n
+0000061754 00000 n
+0000063163 00000 n
+0000063908 00000 n
+0000063050 00000 n
+0000062847 00000 n
+0000063845 00000 n
+0000064041 00000 n
+0000064804 00000 n
+0000064073 00000 n
+0000064145 00000 n
+0000065043 00000 n
+0000065952 00000 n
+0000066248 00000 n
+0000066949 00000 n
+0000066987 00000 n
+0000067146 00000 n
trailer
-<< /Size 179 /Root 177 0 R /Info 178 0 R /ID [ <F94E473E6C84E066C92FCD4834170CC7> <F94E473E6C84E066C92FCD4834170CC7> ] >>
+<< /Size 179 /Root 177 0 R /Info 178 0 R /ID [ <DCD86B2E6A4922ECA414BA263F4786CE> <DCD86B2E6A4922ECA414BA263F4786CE> ] >>
startxref
-66111
+67446
%%EOF
diff --git a/macros/latex/contrib/newpax/doc-use-newpax.tex b/macros/latex/contrib/newpax/doc-use-newpax.tex
index dc23bcd842..c24ea392ef 100644
--- a/macros/latex/contrib/newpax/doc-use-newpax.tex
+++ b/macros/latex/contrib/newpax/doc-use-newpax.tex
@@ -1,7 +1,7 @@
% !Mode:: "TeX:UTF-8:Main"
-
-\RequirePackage{pdfmanagement-testphase}
-\DeclareDocumentMetadata{uncompress}
+% The next command needs LaTeX 2022-06-01, for older formats see documentation
+% of pdfmanagement-testphase
+\DocumentMetadata{uncompress}
\documentclass{article}
\usepackage{pdfpages,xcolor}
diff --git a/macros/latex/contrib/newpax/doc-use-pax.pdf b/macros/latex/contrib/newpax/doc-use-pax.pdf
index 3840aee12e..624a2b7370 100644
--- a/macros/latex/contrib/newpax/doc-use-pax.pdf
+++ b/macros/latex/contrib/newpax/doc-use-pax.pdf
Binary files differ
diff --git a/macros/latex/contrib/newpax/doc-use-pax.tex b/macros/latex/contrib/newpax/doc-use-pax.tex
index f5b6e695a6..08bfe5abe7 100644
--- a/macros/latex/contrib/newpax/doc-use-pax.tex
+++ b/macros/latex/contrib/newpax/doc-use-pax.tex
@@ -16,6 +16,10 @@
%correct a bug in pax affecting clipping
\makeatletter
\patchcmd\PAX@pdf@annot{\PAX@pagellx}{\PAX@page@llx}{}{\fail}
+%allow hashes and percent in the pax file
+\patchcmd\PAX@AddAnnots{\InputIfFileExists\PAX@file{}{\typeout{* Missing: \PAX@file}}}
+ {\begingroup \catcode`\#=12 \catcode`\%=12
+ \InputIfFileExists\PAX@file{}{\typeout{* Missing: \PAX@file}}\endgroup}{}{\fail}
\makeatother
\begin{document}
\includegraphics[scale=0.5,trim=5cm 15cm 8cm 3cm,clip,page=2]{doc-input1}
diff --git a/macros/latex/contrib/newpax/newpax.dtx b/macros/latex/contrib/newpax/newpax.dtx
index 01f68546dd..12566c7053 100644
--- a/macros/latex/contrib/newpax/newpax.dtx
+++ b/macros/latex/contrib/newpax/newpax.dtx
@@ -2,7 +2,7 @@
%
% File: newpax.dtx
% Copyright 2006-2008, 2011, 2012 Heiko Oberdiek (original pax.sty)
-% Copyright (C) 2021 Ulrike Fischer
+% Copyright (C) 2021, 2022 Ulrike Fischer
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -29,7 +29,7 @@
%<@@=newpax>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{newpax}%
- [2021-03-07 v0.51 Annotation support for PDF graphics based on pax.sty adapted by (UF)]%
+ [2022-09-15 v0.53 Annotation support for PDF graphics based on pax.sty adapted by (UF)]%
\ExplSyntaxOn
\bool_if:nF
{
@@ -39,7 +39,7 @@
\PackageError{newpax}
{
PDF~resource~management~code~not~found!\MessageBreak
- newpage~will~no~work.
+ newpax~will~no~work.
}
{
Load~it~with \MessageBreak
@@ -701,8 +701,8 @@
%<*lua>
local ProvidesLuaModule = {
name = "newpax",
- version = "0.52", --TAGVERSION
- date = "2022-09-11", --TAGDATE
+ version = "0.53", --TAGVERSION
+ date = "2022-09-15", --TAGDATE
description = "newpax lua code",
license = "The LATEX Project Public License 1.3c"
}
@@ -1015,6 +1015,9 @@ end
local function outputKV_uri (pdfedict)
local type, value, hex = GETFROMDICTIONARY(pdfedict,constKEY_URI)
+ if TYPE(value) == "pdfe.reference" then
+ type,value,hex = GETFROMREFERENCE(value)
+ end
local a= strKV_BEG .. constKEY_URI .. strVALUE_BEG
if hex then
a = a .. strHEX_STR_BEG .. value .. strHEX_STR_END
@@ -1031,24 +1034,54 @@ local function outputKV_N (pdfedict)
return a
end
+-- if a gotoR has a filespec filespec we use this
+-- to output the reference. It is rather crude and handles only names and strings
+local function outputDICT (dictionary)
+ local tkeys = {}
+ local dict = DICTIONARYTOTABLE(dictionary)
+ for name,value in pairs(dict) do
+ table.insert(tkeys,name)
+ end
+ table.sort(tkeys)
+ local a = "<<"
+ for _,k in ipairs (tkeys) do
+ v=dict[k]
+ a = a .. strNAME.. k
+ if v[1]== 5 then -- it is a name
+ b = string.gsub(v[2], "/", "#2F")
+ a = a .. strNAME .. b
+ elseif v[1] == 6 then -- it is a string
+ local b
+ if v[3] then
+ b = "<" .. v[2] .. ">"
+ else
+ b = "(" .. v[2] .. ")"
+ end
+ a = a ..strRECT_SEP .. b
+ -- everything else is ignored for now!
+ end
+ end
+ a = a .. ">>"
+ return a
+end
+
local function outputKV_gotor (pdfedict) -- action dictionary
- local type, value, desttype, destvalue, hex
- local checktype, checkvalue, checkhex = GETFROMDICTIONARY(pdfedict,"F")
- if checktype==10 then
- -- TODO resolve reference deeper!!
- local a,b,c= GETFROMREFERENCE(checkvalue)
- type, value, hex = GETFROMDICTIONARY(b,"F")
- desttype,destvalue = GETFROMDICTIONARY(b,"D")
- else
- value=checkvalue
- desttype,destvalue = GETFROMDICTIONARY(pdfedict,"D")
- end
+ local type, value, hex = GETFROMDICTIONARY(pdfedict,"F")
+ local desttype, destvalue, destdetail = GETFROMDICTIONARY(pdfedict,"D")
local a = strKV_BEG .. constKEY_FILE .. strVALUE_BEG
- a = strKV_BEG .. constKEY_FILE .. strVALUE_BEG
- if hex then
- a = a .. strHEX_STR_BEG .. value .. strHEX_STR_END
+ if TYPE(value) == "pdfe.reference" then
+ local x,dictionary = GETFROMREFERENCE(value)
+ if TYPE(dictionary) == "pdfe.dictionary" then
+ a = a .. outputDICT (dictionary)
+ else
+ print("ERROR!? this is not a dictionary!!")
+ end
else
- a = a .. strLIT_STR_BEG .. value .. strLIT_STR_END
+ if hex then
+ a = a .. strHEX_STR_BEG .. value .. strHEX_STR_END
+ else
+ a = a .. strLIT_STR_BEG .. value .. strLIT_STR_END
+ end
end
a = a .. strVALUE_END .. strKV_END
if desttype == 7 then
diff --git a/macros/latex/contrib/newpax/newpax.ins b/macros/latex/contrib/newpax/newpax.ins
index 62ec48b0c9..ccce1d73c0 100644
--- a/macros/latex/contrib/newpax/newpax.ins
+++ b/macros/latex/contrib/newpax/newpax.ins
@@ -2,7 +2,7 @@
File: newpax.ins
-Copyright (C) 2021 Ulrike Fischer
+Copyright (C) 2021,2022 Ulrike Fischer
It may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -34,7 +34,7 @@ for those people who are interested.
\let\MetaPrefix\relax
\preamble
-Copyright (C) 2021 Ulrike Fischer
+Copyright (C) 2021,2022 Ulrike Fischer
It may be distributed and/or modified under the conditions of
the LaTeX Project Public License (LPPL), either version 1.3c of
diff --git a/macros/latex/contrib/newpax/newpax.pdf b/macros/latex/contrib/newpax/newpax.pdf
index 9dd7df22bd..b2391a73ee 100644
--- a/macros/latex/contrib/newpax/newpax.pdf
+++ b/macros/latex/contrib/newpax/newpax.pdf
@@ -1,7 +1,7 @@
%PDF-1.7
%
7 0 obj
-<< /Length 12182 >>
+<< /Length 12144 >>
stream
/opacity1 gs
0 g 0 G
@@ -24,7 +24,7 @@ BT
1 0 0 1 213.273 714.049 Tm [<004D003200720054001C0074>]TJ
0 g 0 G
/F46 20.66252 Tf
-1 0 0 1 285.943 714.049 Tm [<0054001C002B0046001C003B0032002D>-367<0070007900580038006B>]TJ
+1 0 0 1 285.943 714.049 Tm [<0054001C002B0046001C003B0032002D>-367<0070007900580038006A>]TJ
0 g 0 G
0 g 0 G
/F46 11.95517 Tf
@@ -35,7 +35,7 @@ BT
/F49 12.95146 Tf
1 0 0 1 342.914 666.569 Tm [<000B>]TJ
/F49 14.3462 Tf
-1 0 0 1 261.794 636.963 Tm [<0013001100130013000E0011001A000E00120012>]TJ
+1 0 0 1 261.6 636.963 Tm [<0013001100130013000E0011001A000E00120016>]TJ
0 g 0 G
/F46 14.3462 Tf
1 0 0 1 74.008 559.773 Tm [<0052>-500<0041004D006900600051>-31<002F006D002B006900420051004D>]TJ
@@ -55,11 +55,10 @@ BT
/F28 10.90909 Tf
1 0 0 1 466.587 439.085 Tm [<00240042004D002B0048006D002F00320054002F0037>]TJ
/F49 10.90909 Tf
-0.98 0 0 1 529.587 439.085 Tm [<0442005500490046>]TJ
-1.006 0 0 1 74.409 425.536 Tm [<0042004F004F0050005500420055004A0050004F>-225<0044005000500053>19<0045004A004F0042005500460054>-224<004F0050>-225<004D0050004F004800460053>-225<004E0042004C0046>-225<00540046004F00540046>-225<00420054>-226<005500490046005A>-225<00450050004F>81<0445>76<0055>-225<0053>20<0046004700460053>-224<00550050>-226<005500490046>-225<0053>20<004600440046004A0057004A004F0048>-225<0051004200480046>-225<00090042004F0045>]TJ
-0.98 0 0 1 74.409 411.987 Tm [<0050004700550046004F>-200<005500490046>-201<004200440055004A0050004F>-201<00500047>-200<0042004F>-201<0042004F004F0050005500420055004A0050004F>-200<0045005000460054004F>82<0445>78<0055>-200<004E0042004C0046>-200<00540046004F00540046>-201<0046004A0055004900460053000A000D>-207<00540050>-200<0042004D004D>-201<0035>103<00460039000E0046004F0048004A004F00460054>-199<0042004F0045>-201<004300420044004C0046004F00450054>]TJ
-1.011 0 0 1 74.409 398.437 Tm [<005400550053>-8<004A0051>-223<005500490046004E>-223<004200580042005A>-223<005800490046004F>-224<004A004F0044004D00560045004A004F0048>-223<0042>-223<003100250027001B>-224<005500490046>-223<004F00460055>-223<0046056C004600440055>-223<004A0054>-224<0055004900420055>-223<00460059005500460053>-8<004F0042004D>-223<0042004F0045>-223<004A004F005500460053>-8<004F0042004D>-223<004D004A004F004C0054>-224<00420053>20<0046>]TJ
-1 0 0 1 74.409 384.888 Tm [<004D005000540055000F>]TJ
+1 0 0 1 72.773 425.536 Tm [<0443005500490046>-226<0042004F004F0050005500420055004A0050004F>-227<0044005000500053>19<0045004A004F0042005500460054>-225<004F0050>-227<004D0050004F004800460053>-226<004E0042004C0046>-227<00540046004F00540046>-227<00420054>-226<005500490046005A>-227<00450050004F>81<0445>76<0055>-225<0053>19<0046004700460053>-225<00550050>-227<005500490046>-227<0053>20<004600440046004A0057004A004F0048>-226<0051004200480046>]TJ
+1.02 0 0 1 74.028 411.987 Tm [<00090042004F0045>-243<0050004700550046004F>-244<005500490046>-244<004200440055004A0050004F>-244<00500047>-244<0042004F>-243<0042004F004F0050005500420055004A0050004F>-244<0045005000460054004F>79<0445>75<0055>-243<004E0042004C0046>-244<00540046004F00540046>-244<0046004A0055004900460053000A000D>-249<00540050>-244<0042004D004D>-244<0035>99<00460039000E0046004F0048004A004F00460054>-243<0042004F0045>]TJ
+0.997 0 0 1 74.409 398.437 Tm [<004300420044004C0046004F00450054>-225<005400550053>-9<004A0051>-225<005500490046004E>-226<004200580042005A>-226<005800490046004F>-226<004A004F0044004D00560045004A004F0048>-226<0042>-225<003100250027001B>-226<005500490046>-226<004F00460055>-226<0046056C004600440055>-226<004A0054>-225<0055004900420055>-226<00460059005500460053>-8<004F0042004D>-226<0042004F0045>-226<004A004F005500460053>-8<004F0042004D>]TJ
+1 0 0 1 74.409 384.888 Tm [<004D004A004F004C0054>-225<00420053>20<0046>-225<004D005000540055000F>]TJ
1.02 0 0 1 74.071 364.564 Tm [<003500490046>]TJ
/F28 10.90909 Tf
@@ -452,7 +451,7 @@ endobj
<< /ExtGState 1 0 R /Font << /F46 10 0 R /F49 12 0 R /F28 14 0 R /F47 11 0 R /F81 35 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
38 0 obj
-<< /Length 11036 >>
+<< /Length 12664 >>
stream
/opacity1 gs
0 g 0 G
@@ -486,9 +485,86 @@ BT
0 g 0 G
1 0 0 1 271.325 685.628 Tm [<004500500044000E005600540046000E004F00460058005100420059000F005500460059>]TJ
0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+/F47 10.90909 Tf
+1 0 0 1 74.409 669.46 Tm [<0057>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 85.864 669.46 Tm [<0068003F0032>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 108.773 669.46 Tm [<004D003200740069>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 137.409 669.46 Tm [<002B0051004B004B001C004D002F>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 183.228 669.46 Tm [<004D00320032002F0062>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 217.591 669.46 Tm [<0047001C006800320073>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 251.955 669.46 Tm [<006B0079006B006B004000790065004000790052002D>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 320.682 669.46 Tm [<003700510060>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 343.591 669.46 Tm [<00510048002F00320060>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 377.955 669.46 Tm [<003700510060004B001C00690062>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 423.773 669.46 Tm [<006200320032>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 446.682 669.46 Tm [<002F0051002B006D004B0032004D0069001C006900420051004D>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 74.409 655.911 Tm [<0057>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 85.864 655.911 Tm [<00510037>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 103.046 655.911 Tm [<0054002F0037004B001C004D001C003B0032004B0032004D0069>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 177.5 655.911 Tm [<0040>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 183.228 655.911 Tm [<00690032006200690054003F001C00620032>]TJ
+0 g 0 G
/F28 10.90909 Tf
-1 0 0 1 74.409 655.911 Tm [<0024005F0032005B006D0042006000320053001C002B0046001C003B003200260054002F0037004B001C004D001C003B0032004B0032004D0069004000690032006200690054003F001C006200320027>]TJ
-1 0 0 1 74.409 642.362 Tm [<0024002E0032002B0048001C00600032002E0051002B006D004B0032004D0069004A00320069001C002F001C0069001C0026006D004D002B0051004B005400600032006200620027>]TJ
+1 0 0 1 74.409 642.362 Tm [<0024002E0051002B006D004B0032004D0069004A00320069001C002F001C0069001C0026006D004D002B0051004B005400600032006200620027>]TJ
1 0 0 1 74.409 628.812 Tm [<0024>]TJ
/F47 10.90909 Tf
1 0 0 1 80.137 628.812 Tm [<002F0051002B006D004B0032004D0069002B0048001C00620062>]TJ
@@ -1558,7 +1634,7 @@ Q
endstream
endobj
103 0 obj
-<< /Type /XObject /Subtype /Form /FormType 1 /PTEX.PageNumber 1 /PTEX.InfoDict << /Creator <FEFF00630072006500610074006F0072> /Author <FEFF0041007500740068006F0072> /Title <FEFF007400690074006C0065> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220911155604+02'00') /ModDate (D:20220911155604+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >> /BBox [ 0 0 595.276 841.89 ] /Resources << /ExtGState 154 0 R /Font << /F15 155 0 R /F16 156 0 R /F28 157 0 R >> /ProcSet [ /PDF /Text ] >> /Length 4811 >>
+<< /Type /XObject /Subtype /Form /FormType 1 /PTEX.PageNumber 1 /PTEX.InfoDict << /Creator <FEFF00630072006500610074006F0072> /Author <FEFF0041007500740068006F0072> /Title <FEFF007400690074006C0065> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220915203759+02'00') /ModDate (D:20220915203759+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >> /BBox [ 0 0 595.276 841.89 ] /Resources << /ExtGState 154 0 R /Font << /F15 155 0 R /F16 156 0 R /F28 157 0 R >> /ProcSet [ /PDF /Text ] >> /Length 4811 >>
stream
/opacity1 gs
BT
@@ -1867,7 +1943,7 @@ Q
endstream
endobj
121 0 obj
-<< /Type /XObject /Subtype /Form /FormType 1 /PTEX.PageNumber 2 /PTEX.InfoDict << /Creator <FEFF00630072006500610074006F0072> /Author <FEFF0041007500740068006F0072> /Title <FEFF007400690074006C0065> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220911155604+02'00') /ModDate (D:20220911155604+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >> /BBox [ 0 0 595.276 841.89 ] /Resources << /ExtGState 154 0 R /Font << /F16 156 0 R /F15 155 0 R >> /ProcSet [ /PDF /Text ] >> /Length 303 >>
+<< /Type /XObject /Subtype /Form /FormType 1 /PTEX.PageNumber 2 /PTEX.InfoDict << /Creator <FEFF00630072006500610074006F0072> /Author <FEFF0041007500740068006F0072> /Title <FEFF007400690074006C0065> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220915203759+02'00') /ModDate (D:20220915203759+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >> /BBox [ 0 0 595.276 841.89 ] /Resources << /ExtGState 154 0 R /Font << /F16 156 0 R /F15 155 0 R >> /ProcSet [ /PDF /Text ] >> /Length 303 >>
stream
/opacity1 gs
BT
@@ -1920,10 +1996,10 @@ endobj
<< /Type /Annot /Subtype /Link /Border [0 0 1 ] /H /I /C [0.724708 0.4 0.717646 ] /A <</Type/Action/S/URI/URI(https://www.latex-project.org)>> /BS <</S/U/W 1>> /Rect [ 87.49 579.455 205.36 584.989 ] >>
endobj
119 0 obj
-<< /Type /Annot /Subtype /Link /Border [0 0 1 ] /H /I /C [0.444706 0.456472 0.680002 ] /A <</Type/Action/S/GoToR/F<FEFF002F0063002F007400650078006C006900760065002F0032003000320030002F007400650078006D0066002D0064006900730074002F0064006F0063002F006C0061007400650078002F0062006100730065002F0064006F0063002E007000640066>/D[ ]>> /BS <</S/U/W 1>> /Rect [ 94.962 573.537 103.162 579.011 ] >>
+<< /Type /Annot /Subtype /Link /Border [0 0 1 ] /H /I /C [0.444706 0.456472 0.680002 ] /A <</Type/Action/S/GoToR/F<</AFRelationship/Unspecified/F <FEFF002F0063002F007400650078006C006900760065002F0032003000320030002F007400650078006D0066002D0064006900730074002F0064006F0063002F006C0061007400650078002F0062006100730065002F0064006F0063002E007000640066>/Subtype/application#2Fpdf/Type/Filespec/UF <FEFF002F0063002F007400650078006C006900760065002F0032003000320030002F007400650078006D0066002D0064006900730074002F0064006F0063002F006C0061007400650078002F0062006100730065002F0064006F0063002E007000640066>>>/D(chapter.1)>> /BS <</S/U/W 1>> /Rect [ 94.962 573.537 103.162 579.011 ] >>
endobj
120 0 obj
-<< /Type /Annot /Subtype /Link /Border [0 0 1 ] /H /I /C [0.444706 0.456472 0.680002 ] /A <</Type/Action/S/GoToR/F<FEFF006500780061006D0070006C0065002D0069006D006100670065002E007000640066>/D[ ]>> /BS <</S/U/W 1>> /Rect [ 87.49 519.243 94.853 523.806 ] >>
+<< /Type /Annot /Subtype /Link /Border [0 0 1 ] /H /I /C [0.444706 0.456472 0.680002 ] /A <</Type/Action/S/GoToR/F<</AFRelationship/Unspecified/F <FEFF006500780061006D0070006C0065002D0069006D006100670065002E007000640066>/Subtype/application#2Fpdf/Type/Filespec/UF <FEFF006500780061006D0070006C0065002D0069006D006100670065002E007000640066>>>/D[0 /Fit]>> /BS <</S/U/W 1>> /Rect [ 87.49 519.243 94.853 523.806 ] >>
endobj
123 0 obj
<< /Type /Annot /Subtype /Link /Border [0 0 1 ] /H /I /C [0.724708 0.4 0.717646 ] /A <</Type/Action/S/URI/URI(https://www.latex-project.org)>> /BS <</S/U/W 1>> /Rect [ 217.577 651.071 294.663 656.665 ] >>
@@ -2013,7 +2089,7 @@ endobj
<< /ExtGState 1 0 R /Font << /F49 12 0 R /F28 14 0 R /F46 10 0 R /F47 11 0 R >> /XObject << /Fm1 104 0 R /Fm2 122 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
179 0 obj
-<< /Length 11220 >>
+<< /Length 14099 >>
stream
/opacity1 gs
0 g 0 G
@@ -2067,198 +2143,273 @@ BT
0 g 0 G
1 0 0 1 91.766 607.5 Tm [<044C>]TJ
0 g 0 G
-1.015 0 0 1 101.682 607.5 Tm [<00250050004F>80<0445>75<0055>-221<004A004F0044004D005600450046>-222<0031002500270054>-222<0058004A00550049>-222<0045004600540055004A004F00420055004A0050004F0054>-221<00550058004A00440046>-222<00420054>-222<00550049004A0054>-222<0058004A004D004D>-222<004D004600420045>-222<00550050>-222<004500560051004D004A0044004200550046>-222<0045004600540055004A004F00420055004A0050004F0054>]TJ
-1 0 0 1 101.682 593.951 Tm [<0042004F0045>-225<00510045056E0042005500460059>-225<0058004A004D004D>-225<00440050004E0051004D0042004A004F000F>]TJ
+1 0 0 1 101.682 607.5 Tm [<002A>18<004F>-225<00540050004E0046>-225<00440042005400460054>-225<005500490046>-225<0044004200550044005000450046>-225<00500047>-225<0004>-225<0042004F0045>-225<0006>-225<004E005600540055>-225<00430046>-225<005400460055>-225<00550050>-225<004D00460055005500460053>-225<00550050>-225<00420057>5<0050004A0045>-225<004600530053>6<005000530054>20<000F>]TJ
+0 g 0 G
+1 0 0 1 91.766 587.176 Tm [<044C>]TJ
0 g 0 G
-1 0 0 1 91.766 573.627 Tm [<044C>]TJ
+1.015 0 0 1 101.682 587.176 Tm [<00250050004F>80<0445>75<0055>-221<004A004F0044004D005600450046>-222<0031002500270054>-222<0058004A00550049>-222<0045004600540055004A004F00420055004A0050004F0054>-221<00550058004A00440046>-222<00420054>-222<00550049004A0054>-222<0058004A004D004D>-222<004D004600420045>-222<00550050>-222<004500560051004D004A0044004200550046>-222<0045004600540055004A004F00420055004A0050004F0054>]TJ
+1 0 0 1 101.682 573.627 Tm [<0042004F0045>-225<00510045056E0042005500460059>-225<0058004A004D004D>-225<00440050004E0051004D0042004A004F000F>]TJ
0 g 0 G
-1 0 0 1 101.682 573.627 Tm [<002A>6<0047>-225<0042004F004F0050005500420055004A0050004F0054>-225<0054004900500056004D0045>-225<004F00500055>-225<00430046>-225<0053>20<0046004A004F005400460053>-8<005500460045>-225<0053>20<0046004E0050>30<0057>5<0046>-225<005500490046>]TJ
+1 0 0 1 91.766 553.303 Tm [<044C>]TJ
+0 g 0 G
+1 0 0 1 101.682 553.303 Tm [<002A>6<0047>-225<0042004F004F0050005500420055004A0050004F0054>-225<0054004900500056004D0045>-225<004F00500055>-225<00430046>-225<0053>20<0046004A004F005400460053>-8<005500460045>-225<0053>20<0046004E0050>30<0057>5<0046>-225<005500490046>]TJ
/F28 10.90909 Tf
-1 0 0 1 353.857 573.627 Tm [<00580054001C0074>]TJ
+1 0 0 1 353.857 553.303 Tm [<00580054001C0074>]TJ
/F49 10.90909 Tf
-1 0 0 1 376.766 573.627 Tm [<000E056D004D0046>20<000F>]TJ
+1 0 0 1 376.766 553.303 Tm [<000E056D004D0046>20<000F>]TJ
0 g 0 G
-1 0 0 1 91.766 553.303 Tm [<044C>]TJ
+1 0 0 1 91.766 532.979 Tm [<044C>]TJ
0 g 0 G
-1.008 0 0 1 101.682 553.303 Tm [<002A>6<0047>]TJ
+1.008 0 0 1 101.682 532.979 Tm [<002A>6<0047>]TJ
/F28 10.90909 Tf
-1 0 0 1 111.415 553.303 Tm [<003F0076005400320060006000320037>]TJ
+1 0 0 1 111.415 532.979 Tm [<003F0076005400320060006000320037>]TJ
0 g 0 G
/F49 10.90909 Tf
-1.008 0 0 1 159.688 553.303 Tm [<004A0054>-223<004D00500042004500460045>-223<005A>5<00500056>-222<00440042004F>-223<004400490042004F00480046>-223<005500490046>-224<00440050004D00500053>-223<0042004F0045>-223<00540055005A004D0046>-223<00500047>-223<004D004A004F004C>-224<004300500053>19<0045004600530054>-222<0058004A00550049>-223<0049005A0051004600530053>19<00460047>]TJ
-1 0 0 1 101.682 539.754 Tm [<005000510055004A0050004F0054>20<000F>]TJ
+1.008 0 0 1 159.688 532.979 Tm [<004A0054>-223<004D00500042004500460045>-223<005A>5<00500056>-222<00440042004F>-223<004400490042004F00480046>-223<005500490046>-224<00440050004D00500053>-223<0042004F0045>-223<00540055005A004D0046>-223<00500047>-223<004D004A004F004C>-224<004300500053>19<0045004600530054>-222<0058004A00550049>-223<0049005A0051004600530053>19<00460047>]TJ
+1 0 0 1 101.682 519.43 Tm [<005000510055004A0050004F0054>20<000F>]TJ
0 g 0 G
0 g 0 G
-1 0 0 1 234.632 514.25 Tm [<002D004A00540055004A004F0048>-225<0015001B>]TJ
+1 0 0 1 234.632 493.926 Tm [<002D004A00540055004A004F0048>-225<0015001B>]TJ
0 g 0 G
-1 0 0 1 281.694 514.25 Tm [<004500500044000E005600540046000E005100420059000F005500460059>]TJ
+1 0 0 1 281.694 493.926 Tm [<004500500044000E005600540046000E005100420059000F005500460059>]TJ
0 g 0 G
/F28 10.90909 Tf
-1 0 0 1 74.409 497.712 Tm [<0024>]TJ
+1 0 0 1 74.409 477.388 Tm [<0024>]TJ
/F47 10.90909 Tf
-1 0 0 1 80.137 497.712 Tm [<002F0051002B006D004B0032004D0069002B0048001C00620062>]TJ
+1 0 0 1 80.137 477.388 Tm [<002F0051002B006D004B0032004D0069002B0048001C00620062>]TJ
/F28 10.90909 Tf
-1 0 0 1 154.591 497.712 Tm [<0026001C006000690042002B004800320027>]TJ
-1 0 0 1 74.409 484.162 Tm [<0024>]TJ
+1 0 0 1 154.591 477.388 Tm [<0026001C006000690042002B004800320027>]TJ
+1 0 0 1 74.409 463.839 Tm [<0024>]TJ
/F47 10.90909 Tf
-1 0 0 1 80.137 484.162 Tm [<006D006200320054001C002B0046001C003B0032>]TJ
+1 0 0 1 80.137 463.839 Tm [<006D006200320054001C002B0046001C003B0032>]TJ
/F28 10.90909 Tf
-1 0 0 1 137.409 484.162 Tm [<0026004200370048006D001C006900320074002D003200690051005100480023005100740027>]TJ
-1 0 0 1 74.409 470.613 Tm [<0024>]TJ
+1 0 0 1 137.409 463.839 Tm [<0026004200370048006D001C006900320074002D003200690051005100480023005100740027>]TJ
+1 0 0 1 74.409 450.289 Tm [<0024>]TJ
/F47 10.90909 Tf
-1 0 0 1 80.137 470.613 Tm [<006D006200320054001C002B0046001C003B0032>]TJ
+1 0 0 1 80.137 450.289 Tm [<006D006200320054001C002B0046001C003B0032>]TJ
/F28 10.90909 Tf
-1 0 0 1 137.409 470.613 Tm [<00260054002F00370054001C003B003200620027>]TJ
+1 0 0 1 137.409 450.289 Tm [<00260054002F00370054001C003B003200620027>]TJ
0 0.5 0 rg 0 0.5 0 RG
/F47 10.90909 Tf
-1 0 0 1 74.409 457.064 Tm [<0057>]TJ
+1 0 0 1 74.409 436.74 Tm [<0057>]TJ
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
-1 0 0 1 80.137 457.064 Tm [<0054001C0074>]TJ
+1 0 0 1 80.137 436.74 Tm [<0054001C0074>]TJ
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
-1 0 0 1 103.046 457.064 Tm [<004D00320032002F0062>]TJ
+1 0 0 1 103.046 436.74 Tm [<004D00320032002F0062>]TJ
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
-1 0 0 1 137.409 457.064 Tm [<0069003F00420062>]TJ
+1 0 0 1 137.409 436.74 Tm [<0069003F00420062>]TJ
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
-1 0 0 1 166.046 457.064 Tm [<00690051>]TJ
+1 0 0 1 166.046 436.74 Tm [<00690051>]TJ
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
-1 0 0 1 183.228 457.064 Tm [<0060006D004D>]TJ
+1 0 0 1 183.228 436.74 Tm [<0060006D004D>]TJ
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
-1 0 0 1 206.137 457.064 Tm [<007200420069003F>]TJ
+1 0 0 1 206.137 436.74 Tm [<007200420069003F>]TJ
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
-1 0 0 1 234.773 457.064 Tm [<0048006D001C0048001C006900320074>]TJ
+1 0 0 1 234.773 436.74 Tm [<0048006D001C0048001C006900320074>]TJ
0 g 0 G
/F28 10.90909 Tf
-1 0 0 1 74.409 443.515 Tm [<0024004200370048006D001C006900320074>]TJ
-1 0 0 1 74.409 429.966 Tm [<0024>]TJ
+1 0 0 1 74.409 423.191 Tm [<0024004200370048006D001C006900320074>]TJ
+1 0 0 1 74.409 409.642 Tm [<0024>]TJ
/F47 10.90909 Tf
-1 0 0 1 80.137 429.966 Tm [<006D006200320054001C002B0046001C003B0032>]TJ
+1 0 0 1 80.137 409.642 Tm [<006D006200320054001C002B0046001C003B0032>]TJ
/F28 10.90909 Tf
-1 0 0 1 137.409 429.966 Tm [<00260054002F0037006900320074002B004B002F00620027>]TJ
-1 0 0 1 74.409 416.416 Tm [<0024>]TJ
+1 0 0 1 137.409 409.642 Tm [<00260054002F0037006900320074002B004B002F00620027>]TJ
+1 0 0 1 74.409 396.093 Tm [<0024>]TJ
/F47 10.90909 Tf
-1 0 0 1 80.137 416.416 Tm [<004B001C00460032001C0069004800320069006900320060>]TJ
+1 0 0 1 80.137 396.093 Tm [<004B001C00460032001C0069004800320069006900320060>]TJ
/F28 10.90909 Tf
-1 0 0 1 74.409 402.867 Tm [<0024>]TJ
+1 0 0 1 74.409 382.543 Tm [<0024>]TJ
/F47 10.90909 Tf
-1 0 0 1 80.137 402.867 Tm [<004800320069>]TJ
+1 0 0 1 80.137 382.543 Tm [<004800320069>]TJ
/F28 10.90909 Tf
-1 0 0 1 97.319 402.867 Tm [<00240054002F0037006200690060002B004B005400240054002F00370021006200690060002B004B0054>]TJ
-1 0 0 1 74.409 389.318 Tm [<0024>]TJ
+1 0 0 1 97.319 382.543 Tm [<00240054002F0037006200690060002B004B005400240054002F00370021006200690060002B004B0054>]TJ
+1 0 0 1 74.409 368.994 Tm [<0024>]TJ
/F47 10.90909 Tf
-1 0 0 1 80.137 389.318 Tm [<004800320069>]TJ
+1 0 0 1 80.137 368.994 Tm [<004800320069>]TJ
/F28 10.90909 Tf
-1 0 0 1 97.319 389.318 Tm [<00240054002F003700320062002B001C00540032004D001C004B003200240054002F0037002100320062002B001C00540032004D001C004B0032>]TJ
-1 0 0 1 74.409 375.769 Tm [<0024>]TJ
+1 0 0 1 97.319 368.994 Tm [<00240054002F003700320062002B001C00540032004D001C004B003200240054002F0037002100320062002B001C00540032004D001C004B0032>]TJ
+1 0 0 1 74.409 355.445 Tm [<0024>]TJ
/F47 10.90909 Tf
-1 0 0 1 80.137 375.769 Tm [<004B001C00460032001C006900510069003F00320060>]TJ
+1 0 0 1 80.137 355.445 Tm [<004B001C00460032001C006900510069003F00320060>]TJ
/F28 10.90909 Tf
-1 0 0 1 74.409 362.22 Tm [<0024>]TJ
+1 0 0 1 74.409 341.896 Tm [<0024>]TJ
/F47 10.90909 Tf
-1 0 0 1 80.137 362.22 Tm [<006D006200320054001C002B0046001C003B0032>]TJ
+1 0 0 1 80.137 341.896 Tm [<006D006200320054001C002B0046001C003B0032>]TJ
/F28 10.90909 Tf
-1 0 0 1 137.409 362.22 Tm [<00260048006D001C006900320074003300380027>]TJ
-1 0 0 1 74.409 348.67 Tm [<0024>]TJ
+1 0 0 1 137.409 341.896 Tm [<00260048006D001C006900320074003300380027>]TJ
+1 0 0 1 74.409 328.347 Tm [<0024>]TJ
/F47 10.90909 Tf
-1 0 0 1 80.137 348.67 Tm [<00370042>]TJ
+1 0 0 1 80.137 328.347 Tm [<00370042>]TJ
0 0.5 0 rg 0 0.5 0 RG
-1 0 0 1 74.409 335.121 Tm [<0057>]TJ
+1 0 0 1 74.409 314.797 Tm [<0057>]TJ
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
-1 0 0 1 80.137 335.121 Tm [<00480051001C002F>]TJ
+1 0 0 1 80.137 314.797 Tm [<00480051001C002F>]TJ
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
-1 0 0 1 108.773 335.121 Tm [<0054001C0074>]TJ
+1 0 0 1 108.773 314.797 Tm [<0054001C0074>]TJ
0 g 0 G
/F28 10.90909 Tf
-1 0 0 1 74.409 321.572 Tm [<0024>]TJ
+1 0 0 1 74.409 301.248 Tm [<0024>]TJ
/F47 10.90909 Tf
-1 0 0 1 80.137 321.572 Tm [<006D006200320054001C002B0046001C003B0032>]TJ
+1 0 0 1 80.137 301.248 Tm [<006D006200320054001C002B0046001C003B0032>]TJ
/F28 10.90909 Tf
-1 0 0 1 137.409 321.572 Tm [<00260054001C00740027>]TJ
+1 0 0 1 137.409 301.248 Tm [<00260054001C00740027>]TJ
0 0.5 0 rg 0 0.5 0 RG
/F47 10.90909 Tf
-1 0 0 1 74.409 308.023 Tm [<0057>]TJ
+1 0 0 1 74.409 287.699 Tm [<0057>]TJ
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
-1 0 0 1 80.137 308.023 Tm [<002B0051006000600032002B0069>]TJ
+1 0 0 1 80.137 287.699 Tm [<002B0051006000600032002B0069>]TJ
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
-1 0 0 1 125.955 308.023 Tm [<001C>]TJ
+1 0 0 1 125.955 287.699 Tm [<001C>]TJ
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
-1 0 0 1 137.409 308.023 Tm [<0023006D003B>]TJ
+1 0 0 1 137.409 287.699 Tm [<0023006D003B>]TJ
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
-1 0 0 1 160.319 308.023 Tm [<0042004D>]TJ
+1 0 0 1 160.319 287.699 Tm [<0042004D>]TJ
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
-1 0 0 1 177.5 308.023 Tm [<0054001C0074>]TJ
+1 0 0 1 177.5 287.699 Tm [<0054001C0074>]TJ
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
-1 0 0 1 200.409 308.023 Tm [<001C003700370032002B00690042004D003B>]TJ
+1 0 0 1 200.409 287.699 Tm [<001C003700370032002B00690042004D003B>]TJ
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
0 g 0 G
0 0.5 0 rg 0 0.5 0 RG
-1 0 0 1 257.682 308.023 Tm [<002B00480042005400540042004D003B>]TJ
+1 0 0 1 257.682 287.699 Tm [<002B00480042005400540042004D003B>]TJ
0 g 0 G
/F28 10.90909 Tf
-1 0 0 1 74.409 294.474 Tm [<0024>]TJ
+1 0 0 1 74.409 274.15 Tm [<0024>]TJ
/F47 10.90909 Tf
-1 0 0 1 80.137 294.474 Tm [<004B001C00460032001C0069004800320069006900320060>]TJ
+1 0 0 1 80.137 274.15 Tm [<004B001C00460032001C0069004800320069006900320060>]TJ
/F28 10.90909 Tf
-1 0 0 1 74.409 280.924 Tm [<00240054001C0069002B003F002B004B002F00240053001B007300210054002F00370021001C004D004D00510069002600240053001B007300210054001C003B00320048004800740027002600240053001B007300210054001C003B00320021004800480074002700260027002600240037001C004200480027>]TJ
-1 0 0 1 74.409 267.375 Tm [<0024>]TJ
+1 0 0 1 74.409 260.601 Tm [<00240054001C0069002B003F002B004B002F00240053001B007300210054002F00370021001C004D004D00510069002600240053001B007300210054001C003B00320048004800740027002600240053001B007300210054001C003B00320021004800480074002700260027002600240037001C004200480027>]TJ
+0 0.5 0 rg 0 0.5 0 RG
/F47 10.90909 Tf
-1 0 0 1 80.137 267.375 Tm [<004B001C00460032001C006900510069003F00320060>]TJ
+1 0 0 1 74.409 247.051 Tm [<0057>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 80.137 247.051 Tm [<001C0048004800510072>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 114.5 247.051 Tm [<003F001C0062003F00320062>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 154.591 247.051 Tm [<001C004D002F>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 177.5 247.051 Tm [<005400320060002B0032004D0069>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 223.319 247.051 Tm [<0042004D>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 240.5 247.051 Tm [<0069003F0032>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 263.409 247.051 Tm [<0054001C0074>]TJ
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 286.319 247.051 Tm [<0037004200480032>]TJ
+0 g 0 G
+/F28 10.90909 Tf
+1 0 0 1 74.409 233.502 Tm [<00240054001C0069002B003F002B004B002F00240053001B00730021001B002F002F001B004D004D005100690062002600240041004D0054006D006900410037003600420048003200310074004200620069006200240053001B0073002100370042004800320026002700260024>]TJ
+/F47 10.90909 Tf
+1 0 0 1 389.409 233.502 Tm [<00690076005400320051006D0069>]TJ
+/F28 10.90909 Tf
+1 0 0 1 429.5 233.502 Tm [<00260020>-525<004A0042006200620042004D003B002C>-525<00240053001B007300210037004200480032002700270027>]TJ
+1 0 0 1 79.319 219.953 Tm [<00260024>]TJ
+/F47 10.90909 Tf
+1 0 0 1 90.773 219.953 Tm [<00230032003B0042004D003B00600051006D0054>]TJ
/F28 10.90909 Tf
-1 0 0 1 74.409 253.826 Tm [<0024>]TJ
+1 0 0 1 153.773 219.953 Tm [<0024>]TJ
/F47 10.90909 Tf
-1 0 0 1 80.137 253.826 Tm [<00230032003B0042004D>]TJ
+1 0 0 1 159.5 219.953 Tm [<002B001C0069002B0051002F0032>]TJ
/F28 10.90909 Tf
-1 0 0 1 108.773 253.826 Tm [<0026002F0051002B006D004B0032004D00690027>]TJ
-1 0 0 1 74.409 240.277 Tm [<00240042004D002B0048006D002F0032003B0060001C0054003F0042002B006200280062002B001C004800320034007900580038002D006900600042004B00340038002B004B>-525<00520038002B004B>-525<0033002B004B>-525<006A002B004B002D002B004800420054002D0054001C003B00320034006B00290026002F0051002B00400042004D0054006D006900520027>]TJ
-1 0 0 1 74.409 226.728 Tm [<00240042004D002B0048006D002F0032003B0060001C0054003F0042002B006200280062002B001C004800320034007900580038002D006900600042004B00340038002B004B>-525<00520038002B004B>-525<0033002B004B>-525<006A002B004B002D002B004800420054002D0054001C003B00320034005200290026002F0051002B00400042004D0054006D006900520027>]TJ
-1 0 0 1 74.409 199.629 Tm [<00240042004D002B0048006D002F00320054002F003700280054001C003B003200620034004000290026002F0051002B00400042004D0054006D0069006B0027>]TJ
-1 0 0 1 74.409 186.08 Tm [<0024>]TJ
+1 0 0 1 199.591 219.953 Tm [<003C0024004F00340052006B>-525<0024>]TJ
/F47 10.90909 Tf
-1 0 0 1 80.137 186.08 Tm [<0032004D002F>]TJ
+1 0 0 1 245.409 219.953 Tm [<002B001C0069002B0051002F0032>]TJ
/F28 10.90909 Tf
-1 0 0 1 97.319 186.08 Tm [<0026002F0051002B006D004B0032004D00690027>]TJ
+1 0 0 1 285.5 219.953 Tm [<003C0024>]TJ
+0 0.5 0 rg 0 0.5 0 RG
+/F47 10.90909 Tf
+1 0 0 1 296.955 219.953 Tm [<0057>]TJ
0 g 0 G
+0 0.5 0 rg 0 0.5 0 RG
+1 0 0 1 302.682 219.953 Tm [<00340052006B>]TJ
0 g 0 G
+/F28 10.90909 Tf
+1 0 0 1 84.228 206.404 Tm [<00240041004D0054006D006900410037003600420048003200310074004200620069006200240053001B0073002100370042004800320026002700260024>]TJ
+/F47 10.90909 Tf
+1 0 0 1 261.773 206.404 Tm [<00690076005400320051006D0069>]TJ
+/F28 10.90909 Tf
+1 0 0 1 301.864 206.404 Tm [<00260020>-525<004A0042006200620042004D003B002C>-525<00240053001B007300210037004200480032002700270024>]TJ
+/F47 10.90909 Tf
+1 0 0 1 439.318 206.404 Tm [<0032004D002F003B00600051006D0054>]TJ
+/F28 10.90909 Tf
+1 0 0 1 485.137 206.404 Tm [<002700260027002600240037001C004200480027>]TJ
+1 0 0 1 74.409 192.855 Tm [<0024>]TJ
+/F47 10.90909 Tf
+1 0 0 1 80.137 192.855 Tm [<004B001C00460032001C006900510069003F00320060>]TJ
+/F28 10.90909 Tf
+1 0 0 1 74.409 179.305 Tm [<0024>]TJ
+/F47 10.90909 Tf
+1 0 0 1 80.137 179.305 Tm [<00230032003B0042004D>]TJ
+/F28 10.90909 Tf
+1 0 0 1 108.773 179.305 Tm [<0026002F0051002B006D004B0032004D00690027>]TJ
+1 0 0 1 74.409 165.756 Tm [<00240042004D002B0048006D002F0032003B0060001C0054003F0042002B006200280062002B001C004800320034007900580038002D006900600042004B00340038002B004B>-525<00520038002B004B>-525<0033002B004B>-525<006A002B004B002D002B004800420054002D0054001C003B00320034006B00290026002F0051002B00400042004D0054006D006900520027>]TJ
+1 0 0 1 74.409 152.207 Tm [<00240042004D002B0048006D002F0032003B0060001C0054003F0042002B006200280062002B001C004800320034007900580038002D006900600042004B00340038002B004B>-525<00520038002B004B>-525<0033002B004B>-525<006A002B004B002D002B004800420054002D0054001C003B00320034005200290026002F0051002B00400042004D0054006D006900520027>]TJ
+1 0 0 1 74.409 125.109 Tm [<00240042004D002B0048006D002F00320054002F003700280054001C003B003200620034004000290026002F0051002B00400042004D0054006D0069006B0027>]TJ
0 g 0 G
0 g 0 G
0 g 0 G
@@ -2285,190 +2436,248 @@ endobj
<< /D [ 178 0 R /XYZ 74.409 771.732 null ] >>
endobj
182 0 obj
-<< /D [ 178 0 R /XYZ 74.409 528.278 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 507.955 null ] >>
endobj
183 0 obj
-<< /D [ 178 0 R /XYZ 74.409 511.261 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 490.937 null ] >>
endobj
184 0 obj
-<< /D [ 178 0 R /XYZ 74.409 497.712 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 477.388 null ] >>
endobj
185 0 obj
-<< /D [ 178 0 R /XYZ 74.409 484.162 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 463.839 null ] >>
endobj
186 0 obj
-<< /D [ 178 0 R /XYZ 74.409 470.613 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 450.289 null ] >>
endobj
187 0 obj
-<< /D [ 178 0 R /XYZ 74.409 457.064 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 436.74 null ] >>
endobj
188 0 obj
-<< /D [ 178 0 R /XYZ 74.409 443.515 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 423.191 null ] >>
endobj
189 0 obj
-<< /D [ 178 0 R /XYZ 74.409 429.966 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 409.642 null ] >>
endobj
190 0 obj
-<< /D [ 178 0 R /XYZ 74.409 416.416 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 396.093 null ] >>
endobj
191 0 obj
-<< /D [ 178 0 R /XYZ 74.409 402.867 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 382.543 null ] >>
endobj
192 0 obj
-<< /D [ 178 0 R /XYZ 74.409 389.318 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 368.994 null ] >>
endobj
193 0 obj
-<< /D [ 178 0 R /XYZ 74.409 375.769 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 355.445 null ] >>
endobj
194 0 obj
-<< /D [ 178 0 R /XYZ 74.409 362.22 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 341.896 null ] >>
endobj
195 0 obj
-<< /D [ 178 0 R /XYZ 74.409 348.67 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 328.347 null ] >>
endobj
196 0 obj
-<< /D [ 178 0 R /XYZ 74.409 335.121 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 314.797 null ] >>
endobj
197 0 obj
-<< /D [ 178 0 R /XYZ 74.409 321.572 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 301.248 null ] >>
endobj
198 0 obj
-<< /D [ 178 0 R /XYZ 74.409 308.023 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 287.699 null ] >>
endobj
199 0 obj
-<< /D [ 178 0 R /XYZ 74.409 294.474 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 274.15 null ] >>
endobj
200 0 obj
-<< /D [ 178 0 R /XYZ 74.409 280.924 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 260.601 null ] >>
endobj
201 0 obj
-<< /D [ 178 0 R /XYZ 74.409 267.375 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 247.051 null ] >>
endobj
202 0 obj
-<< /D [ 178 0 R /XYZ 74.409 253.826 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 233.502 null ] >>
endobj
203 0 obj
-<< /D [ 178 0 R /XYZ 74.409 240.277 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 219.953 null ] >>
endobj
204 0 obj
-<< /D [ 178 0 R /XYZ 74.409 226.728 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 206.404 null ] >>
endobj
205 0 obj
-<< /D [ 178 0 R /XYZ 74.409 213.178 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 192.855 null ] >>
endobj
206 0 obj
-<< /D [ 178 0 R /XYZ 74.409 199.629 null ] >>
+<< /D [ 178 0 R /XYZ 74.409 179.305 null ] >>
+endobj
+207 0 obj
+<< /D [ 178 0 R /XYZ 74.409 165.756 null ] >>
+endobj
+208 0 obj
+<< /D [ 178 0 R /XYZ 74.409 152.207 null ] >>
+endobj
+209 0 obj
+<< /D [ 178 0 R /XYZ 74.409 138.658 null ] >>
endobj
177 0 obj
<< /ExtGState 1 0 R /Font << /F46 10 0 R /F47 11 0 R /F49 12 0 R /F28 14 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
+212 0 obj
+<< /Length 439 >>
+stream
+/opacity1 gs
+0 g 0 G
+0 g 0 G
+0 g 0 G
+0 g 0 G
+0 g 0 G
+0 g 0 G
+0 g 0 G
+0 g 0 G
+BT
+/F28 10.90909 Tf
+1 0 0 1 74.409 760.773 Tm [<0024>]TJ
+/F47 10.90909 Tf
+1 0 0 1 80.137 760.773 Tm [<0032004D002F>]TJ
+/F28 10.90909 Tf
+1 0 0 1 97.319 760.773 Tm [<0026002F0051002B006D004B0032004D00690027>]TJ
+0 g 0 G
+0 g 0 G
+0 g 0 G
+0 g 0 G
+0 g 0 G
+0 g 0 G
+/F49 10.90909 Tf
+1 0 0 1 294.747 93.476 Tm [<0019>]TJ
+0 g 0 G
+0 g 0 G
+0 g 0 G
+0 g 0 G
+0 g 0 G
+0 g 0 G
+ET
+
+endstream
+endobj
+211 0 obj
+<< /Type /Page /Contents 212 0 R /Resources 210 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 15 0 R >>
+endobj
+213 0 obj
+<< /D [ 211 0 R /XYZ 73.409 809.993 null ] >>
+endobj
+214 0 obj
+<< /D [ 211 0 R /XYZ 74.409 774.323 null ] >>
+endobj
+210 0 obj
+<< /ExtGState 1 0 R /Font << /F28 14 0 R /F47 11 0 R /F49 12 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
1 0 obj
<< /opacity1 <</ca 1/CA 1>> >>
endobj
-207 0 obj
+215 0 obj
<< /DisplayDocTitle true >>
endobj
-208 0 obj
+216 0 obj
<< /S /GoTo /D (section.1) >>
endobj
-210 0 obj
+218 0 obj
(\376\377\000I\000n\000t\000r\000o\000d\000u\000c\000t\000i\000o\000n)
endobj
-211 0 obj
+219 0 obj
<< /S /GoTo /D (section.2) >>
endobj
-213 0 obj
+221 0 obj
(\376\377\000Q\000u\000i\000c\000k\000\040\000u\000s\000e\000\040\000i\000n\000s\000t\000r\000u\000c\000t\000i\000o\000n\000s)
endobj
-214 0 obj
+222 0 obj
<< /S /GoTo /D (subsection.2.1) >>
endobj
-216 0 obj
+224 0 obj
(\376\377\000S\000t\000e\000p\000\040\0001\000:\000\040\000e\000x\000t\000r\000a\000c\000t\000\040\000a\000n\000d\000\040\000c\000o\000l\000l\000e\000c\000t\000\040\000t\000h\000e\000\040\000a\000n\000n\000o\000t\000a\000t\000i\000o\000n\000s)
endobj
-217 0 obj
+225 0 obj
<< /S /GoTo /D (subsection.2.2) >>
endobj
-219 0 obj
+227 0 obj
(\376\377\000S\000t\000e\000p\000\040\0002\000:\000\040\000U\000s\000i\000n\000g\000\040\000t\000h\000e\000\040\000.\000n\000e\000w\000p\000a\000x\000-\000f\000i\000l\000e\000\040\000w\000i\000t\000h\000\040\000n\000e\000w\000p\000a\000x)
endobj
-220 0 obj
+228 0 obj
<< /S /GoTo /D (subsection.2.3) >>
endobj
-222 0 obj
+230 0 obj
(\376\377\000C\000o\000m\000b\000i\000n\000i\000n\000g\000\040\000t\000h\000e\000\040\000s\000t\000e\000p\000s)
endobj
-223 0 obj
+231 0 obj
<< /S /GoTo /D (section.3) >>
endobj
-225 0 obj
+233 0 obj
(\376\377\000S\000e\000t\000u\000p\000\040\000o\000p\000t\000i\000o\000n\000s)
endobj
-226 0 obj
+234 0 obj
<< /S /GoTo /D (section.4) >>
endobj
-228 0 obj
+236 0 obj
(\376\377\000M\000o\000r\000e\000\040\000B\000a\000c\000k\000g\000r\000o\000u\000n\000d)
endobj
-229 0 obj
+237 0 obj
<< /S /GoTo /D (subsection.4.1) >>
endobj
-231 0 obj
+239 0 obj
(\376\377\000R\000e\000t\000r\000i\000e\000v\000i\000n\000g\000\040\000a\000n\000d\000\040\000s\000t\000o\000r\000i\000n\000g\000\040\000a\000n\000n\000o\000t\000a\000t\000i\000o\000n\000s)
endobj
-232 0 obj
+240 0 obj
<< /S /GoTo /D (section.5) >>
endobj
-234 0 obj
+242 0 obj
(\376\377\000I\000m\000p\000o\000r\000t\000i\000n\000g\000\040\000a\000n\000n\000o\000t\000a\000t\000i\000o\000n\000s)
endobj
-235 0 obj
+243 0 obj
<< /S /GoTo /D (section.6) >>
endobj
-237 0 obj
+245 0 obj
(\376\377\000E\000x\000a\000m\000p\000l\000e\000\040\000i\000n\000p\000u\000t)
endobj
-238 0 obj
+246 0 obj
<< /S /GoTo /D (section.7) >>
endobj
-240 0 obj
+248 0 obj
(\376\377\000S\000u\000p\000p\000o\000r\000t\000\040\000f\000o\000r\000\040\000t\000h\000e\000\040\000p\000a\000x\000\040\000p\000a\000c\000k\000a\000g\000e)
endobj
-241 0 obj
+249 0 obj
<< /S /GoTo /D (subsection.7.1) >>
endobj
-243 0 obj
+251 0 obj
(\376\377\000S\000t\000e\000p\000\040\0001\000:\000\040\000E\000x\000t\000r\000a\000c\000t\000i\000n\000g\000\040\000t\000h\000e\000\040\000a\000n\000n\000o\000t\000a\000t\000i\000o\000n\000s)
endobj
-244 0 obj
+252 0 obj
<< /S /GoTo /D (subsection.7.2) >>
endobj
-246 0 obj
+254 0 obj
(\376\377\000S\000t\000e\000p\000\040\0002\000:\000\040\000U\000s\000i\000n\000g\000\040\000t\000h\000e\000\040\000.\000p\000a\000x\000-\000f\000i\000l\000e\000\040\000w\000i\000t\000h\000\040\000p\000a\000x\000.\000s\000t\000y)
endobj
-247 0 obj
+255 0 obj
[ 66 [ 561 ] 68 [ 441 587 453 ] 74 [ 317 ] 77 [ 306 ] 79 [ 618 537 ] 83 [ 402 389 341 618 510 ] ]
endobj
-249 0 obj
+257 0 obj
<< /Length 11 >>
stream
endstream
endobj
-250 0 obj
+258 0 obj
<< /Subtype /CIDFontType0C /Length 2094 >>
stream

@@ -2479,10 +2688,10 @@ Heuristica ItalicHeuristicaAdobeIdentity
ˏ 
endstream
endobj
-248 0 obj
-<< /Type /FontDescriptor /FontName /ZZHGJH+Heuristica-Italic /Flags 4 /FontBBox [ -500 -326 1205 1110 ] /Ascent 950 /CapHeight 692 /Descent -250 /ItalicAngle -13 /StemV 88 /XHeight 490 /FontFile3 250 0 R /CIDSet 249 0 R >>
+256 0 obj
+<< /Type /FontDescriptor /FontName /ZZHGJH+Heuristica-Italic /Flags 4 /FontBBox [ -500 -326 1205 1110 ] /Ascent 950 /CapHeight 692 /Descent -250 /ItalicAngle -13 /StemV 88 /XHeight 490 /FontFile3 258 0 R /CIDSet 257 0 R >>
endobj
-251 0 obj
+259 0 obj
<< /Length 861 >>
stream
%!PS-Adobe-3.0 Resource-CMap
@@ -2532,30 +2741,30 @@ end
endstream
endobj
35 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /ZZHGJH+Heuristica-Italic /DescendantFonts [ 252 0 R ] /ToUnicode 251 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /ZZHGJH+Heuristica-Italic /DescendantFonts [ 260 0 R ] /ToUnicode 259 0 R >>
endobj
-252 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /ZZHGJH+Heuristica-Italic /FontDescriptor 248 0 R /W 247 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+260 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /ZZHGJH+Heuristica-Italic /FontDescriptor 256 0 R /W 255 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-253 0 obj
-[ 27 [ 525 525 ] 33 [ 525 525 525 525 ] 38 [ 525 525 525 525 525 525 525 525 525 525 ] 49 [ 525 525 525 525 ] 54 [ 525 525 525 525 ] 59 [ 525 ] 61 [ 525 525 525 525 525 525 ] 68 [ 525 ] 70 [ 525 525 525 525 525 525 ] 77 [ 525 ] 80 [ 525 525 525 525 525 525 525 ] 88 [ 525 ] 91 [ 525 ] 93 [ 525 ] 95 [ 525 525 525 525 ] 100 [ 525 525 525 ] 104 [ 525 525 525 525 525 525 525 ] 112 [ 525 525 525 525 525 ] 118 [ 525 ] 121 [ 525 ] ]
+261 0 obj
+[ 27 [ 525 525 ] 32 [ 525 525 525 525 525 ] 38 [ 525 525 525 525 525 525 525 525 525 525 ] 49 [ 525 525 525 525 ] 54 [ 525 525 525 525 ] 59 [ 525 525 525 525 525 525 525 525 ] 68 [ 525 ] 70 [ 525 525 525 525 525 525 ] 77 [ 525 ] 79 [ 525 525 525 525 525 525 525 525 ] 88 [ 525 ] 91 [ 525 ] 93 [ 525 ] 95 [ 525 525 525 525 ] 100 [ 525 525 525 ] 104 [ 525 525 525 525 525 525 525 ] 112 [ 525 525 525 525 525 ] 118 [ 525 ] 121 [ 525 ] ]
endobj
-255 0 obj
+263 0 obj
<< /Length 16 >>
stream
-
+
endstream
endobj
-256 0 obj
-<< /Subtype /CIDFontType0C /Length 8164 >>
+264 0 obj
+<< /Subtype /CIDFontType0C /Length 8551 >>
stream
-
-POXPUQ+LMMono10-Regular2.004Copyright 2003, 2009 B. Jackowski and J. M. Nowacki (on behalf of TeX users groups). This work is released under the GUST Font License -- see http://tug.org/fonts/licenses/GUST-FONT-LICENSE.txt for details.LMMono10-RegularLMMono10NormalAdobeIdentity
->
-  ~ G M #VDFe)S#S nhRA!wOOu| }ln{e }t~mwg6#gwlm=XT{xr|alU$`%Bm{׿lDEY+FJɒ@l=tvdyzg^Mb%ȾȾEtozkhei
+
+NXAEHY+LMMono10-Regular2.004Copyright 2003, 2009 B. Jackowski and J. M. Nowacki (on behalf of TeX users groups). This work is released under the GUST Font License -- see http://tug.org/fonts/licenses/GUST-FONT-LICENSE.txt for details.LMMono10-RegularLMMono10NormalAdobeIdentity
+  F A d
+ _Do ]6yG7C$ Wz'aMA!wOOu| }ln{e }t~mwg6#gwlm=XT{xr|alU$`%Bm{׿lDEY+FJɒ@l=tvdyzg^Mb%y\jrGq
h_ubRs{jkytݸBJ;DO7oKotv|md8E
-
-}|ihwvF}q|6{slm}f{slm }xgs{i2{rlm}{rlmh~IIx{}c~x~e9``vk}5r|Sb}qH^gnn3r}S|rml}kvlmΪvkq]T~teqkvlmT vg2mb~do|ojkm}usܩwyk|qmlgvlmvgG䴺zJ}xrlmvgG䴺zJ}xrlmTTr{_|X<H^ixxЫcB{rlm_{rlm3r{_EձoOwd{rlm-hvMMvppMLFMDUSqv23rɋϖƘ֮T\@Ngl..(,F.M@AAMJ0wNs{0mxe6Wx{vor:0{slmLt@At|qml}m{rlmq|mLFV`F+!FVr/Tз |l2![^ylieB{rlm_{rlm3r{_baF+EJE=hB4AIUy]qn` 1YBS ]hV@srw|85J'f0||w`\mkerllfqr/Ts{ZihzepbR%,*ϹkZ|rml;2RZ99AJָ>Ii~xn__|v8`i~xn__|vjjIaПstmfzoʋt}Ͱȴ?
+
+}|ihwvF}q|6{slm}f{slm }xgs{i2{rlm}{rlmh~IIx{}c~x~e9``vk}5r|Sb}qH^gnn3r}S|rml}kvlmΪvkq]T~teqkvlmT vg2mb~do|ojkm}usܩwyk|qmlgvlmvgG䴺zJ}xrlmvgG䴺zJ}xrlmTTr{_|X<H^ixxЫcB{rlm_{rlm3r{_EձoOwd{rlm-v7&6w}ZhI&hes|ln| $s|ln| >hhhy&Zhhh{yz{yz:Iy&$&hvMMvppMLFMDUSqv23rɋϖƘ֮T\@Ngl..(,F.M@AAMJ0wNs{0mxe6Wx{vor:0{slmLt@At|qml}m{rlmq|mLFV`F+!FVr/Tз |l2![^ylieB{rlm_{rlm3r{_baF+EJE=hB4AIUy]qn` 1YBS ]hV@srw|85J'f0||w`\mkerllfqr/Ts{ZihzepbR%,*ϹkZ|rml;2RZ99AJָ>Ii~xn__|v8`i~xn__|vjjIaПstmfzoʋt}Ͱȴ?
E{slm}r{slm s{rjovuaJmkm{ʣͱ2Z^Q0CjP[T-Ћ0{ 8XKyLTتi|rml:|rmlq|$ swJкell:gbp=:ae
-lumszmbU^@<6HIspw4W`P<oZcakhvw{rm{_kGnGޙmqzzms}__x;t9g/z}~Vffj0\Srqhvw*{rg2޻vts{yiuxaxuALip}j-B9DWkU3WWzb^!yswg* ^B F5IRCJdwǽHAf'|wu|~F{yzF}8ijjBxu}W|rmlAs{W}Vxu-2UhjvzMRt>8s{8ihvw94{rlm+gܶZO
cntB\IïB E[Fj}ҋϽg^m|hpukqrgR|nlHQNSL0c>qxrtu|k2Qrnlihxoƾֶù &
@@ -2563,21 +2772,21 @@ h_ubRs{jkytݸBJ;DO7oKotv|md8E
YY$s{ |rmls{ {slmin444q|<{slm_NWo\Ztwu\\MW s{<|qlmh~^yr[[%syysmlY~yhxucwWtxysmlt|ȝ㌙W z}MBMWMAM0Mq|t!tq|#|rmlD&>&r|#|qml uu{slmstVVtulmZTZZLZq|c5(q| |rmlA&?r| |qlm
(5c|qlm vloulm xN_[YHFY$s{ |rmlCi~fyl.s{ {slm"r7~rnTg|@yrpzyqac/[nN%'JNJF(J
==J
-(&)'
+(&)'

endstream
endobj
-254 0 obj
-<< /Type /FontDescriptor /FontName /POXPUQ+LMMono10-Regular /Flags 4 /FontBBox [ -451 -316 731 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 256 0 R /CIDSet 255 0 R >>
+262 0 obj
+<< /Type /FontDescriptor /FontName /NXAEHY+LMMono10-Regular /Flags 4 /FontBBox [ -451 -316 731 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 264 0 R /CIDSet 263 0 R >>
endobj
-257 0 obj
-<< /Length 1654 >>
+265 0 obj
+<< /Length 1696 >>
stream
%!PS-Adobe-3.0 Resource-CMap
%%DocumentNeededResources: ProcSet (CIDInit)
%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-POXPUQ-LMMono10-Regular-0)
-%%Title: (TeX-POXPUQ-LMMono10-Regular-0 TeX POXPUQ-LMMono10-Regular 0)
+%%BeginResource: CMap (TeX-NXAEHY-LMMono10-Regular-0)
+%%Title: (TeX-NXAEHY-LMMono10-Regular-0 TeX NXAEHY-LMMono10-Regular 0)
%%Version: 1.000
%%EndComments
/CIDInit /ProcSet findresource begin
@@ -2585,19 +2794,20 @@ stream
begincmap
/CIDSystemInfo
<< /Registry (TeX)
-/Ordering (POXPUQ-LMMono10-Regular)
+/Ordering (NXAEHY-LMMono10-Regular)
/Supplement 0
>> def
-/CMapName /TeX-Identity-POXPUQ-LMMono10-Regular def
+/CMapName /TeX-Identity-NXAEHY-LMMono10-Regular def
/CMapType 2 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
0 beginbfrange
endbfrange
-70 beginbfchar
+73 beginbfchar
<001B> <0041>
<001C> <0061>
+<0020> <002A>
<0021> <0040>
<0022> <0042>
<0023> <0062>
@@ -2621,6 +2831,7 @@ endbfrange
<0038> <0035>
<0039> <0034>
<003B> <0067>
+<003C> <0060>
<003D> <003E>
<003E> <0048>
<003F> <0068>
@@ -2635,6 +2846,7 @@ endbfrange
<004A> <004D>
<004B> <006D>
<004D> <006E>
+<004F> <0023>
<0050> <004F>
<0051> <006F>
<0052> <0031>
@@ -2677,55 +2889,57 @@ end
endstream
endobj
14 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /POXPUQ+LMMono10-Regular /DescendantFonts [ 258 0 R ] /ToUnicode 257 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /NXAEHY+LMMono10-Regular /DescendantFonts [ 266 0 R ] /ToUnicode 265 0 R >>
endobj
-258 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /POXPUQ+LMMono10-Regular /FontDescriptor 254 0 R /W 253 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+266 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /NXAEHY+LMMono10-Regular /FontDescriptor 262 0 R /W 261 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-259 0 obj
-[ 2 [ 242 ] 9 [ 350 350 412 ] 13 [ 265 392 265 460 530 530 530 530 530 530 530 530 ] 26 [ 530 265 265 ] 33 [ 793 635 646 684 779 606 580 ] 41 [ 798 349 ] 45 [ 568 ] 48 [ 762 600 ] 51 [ 644 541 621 791 ] 56 [ 940 624 588 ] 66 [ 523 598 496 598 514 319 520 607 291 280 524 279 923 619 577 608 591 389 436 344 606 504 768 486 506 ] 1090 [ 500 1000 ] 1093 [ 278 ] 1095 [ 458 458 ] 1100 [ 409 ] 1388 [ 638 610 610 929 ] ]
+267 0 obj
+[ 2 [ 242 ] 4 [ 530 ] 6 [ 838 ] 9 [ 350 350 412 ] 13 [ 265 392 265 460 530 530 530 530 530 530 530 530 530 530 265 265 ] 33 [ 793 635 646 684 779 606 580 ] 41 [ 798 349 ] 45 [ 568 ] 48 [ 762 600 ] 51 [ 644 541 621 791 ] 56 [ 940 624 588 ] 66 [ 523 598 496 598 514 319 520 607 291 280 524 279 923 619 577 608 591 389 436 344 606 504 768 486 506 ] 1091 [ 1000 ] 1093 [ 278 ] 1095 [ 458 458 ] 1100 [ 409 ] 1388 [ 638 610 610 929 ] ]
endobj
-261 0 obj
+269 0 obj
<< /Length 174 >>
stream
- wd?
+*wd?
endstream
endobj
-262 0 obj
-<< /Subtype /CIDFontType0C /Length 8652 >>
+270 0 obj
+<< /Subtype /CIDFontType0C /Length 9042 >>
stream
-
+
Copyright (c) 2008-2012 Andrey V. Panov (panov@canopus.iacp.dvo.ru).
-Heuristica RegularHeuristicaAdobeIdentity
-
-&
-`
-   P xTJ~NAx%`?hOll@D@H@'++*`'w
-CCTUu^gpsderof}NmCQ/ʘC^mN}C$rCmNN^mCr~5/6Q?WwC`{wfz+duwwy{x.tzx~F{u+z}w}>Jrrw-z?|y|u!x͋melysqgy`bqckhSllѾgpsderofvfw|΋ffHV\&99&\\P&99P&\7((77p(,,p(7Vwvܨ7vᆑbhrnyx7Vͮ2ovUwcո/"D8Wi{ϲɋ؋JB UO4> `Gx=VRj?`D!%Tⳋ4 J?`lzϱËڞESOv@6[p~yz>4 PaDI`xÅ}yhxgV'Nw\v%isKn^t$NB-B/0ӥ V9]G9 3 TPsknOφ⋁w\$a=4EgwĆ}wjwjVsl"*(7 <RVpjp勹dRZ 3*BȸR"bD74a Vv;gyQ:5R
-jɮ4Vخ]KɋL:yFyIhYKGr|zxowl_N ܋ɩĤ%rdeTK/6۲,*zw{{\dkV=^=gpsderof
+Heuristica RegularHeuristicaAdobeIdentity
+
+
+
+b
+ A ?  jk }=J &hqB[s@ L@H@'++*`'w
+CCTUu^gpsderofVv|gw|Q|‹|Q||􋕹#􋕹#gVWggUWg!]j!4jkckw;
+pLTisiyrxi=t|pjX!XG󬺽\#+lTVWlGX !XG󬺽\#+lTVWl}NmCQ/ʘC^mN}C$rCmNN^mCr~5/6Q?WwC`{wfz+duwwy{x.tzx~F{u+z}w}>Jrrw-z?|y|u!x͋melysqgy`bqckhSllѾgpsderofvfw|΋ffHV\&99&\\P&99P&\7((77p(,,p(7Vwvܨ7vᆑbhrnyx7Vͮ2ovUwcո/"D8Wi{ϲɋ؋JB UO4> `Gx=VRj?`D!%Tⳋ4 J?`lzϱËڞESOv@6[p~yz>4 PaDI`xÅ}yhxgV'Nw\v%isKn^t$NB-B/0ӥ V9]G9 3 TPsknOφ⋁w\$a=4EgwĆ}wjwjVsl"*(7 <RVpjp勹dRZ 3*BȸR"bD74a Vv;gyQ:5R
+jɮ4Vϯ=d=J&.66KGț
gpsderof!q4`=gpsderofxx͋melysqgy`bqckhf|(/DlB%;ɋܖɭ^xIQuI4KD]"1;$D+Hu{Jx~tFA`AJyڋ㧽mrx\{
7*ŋ؋ucdQ;nㅍSS3QM! 9k5;{mp$)Ld#| O} -OMtۋ硻;mo#X?b`_ 88Na
0^?0(gOHRKi5XGG8B>nㅍSS3Qoh=H<4zƱAmt^{\gvvq sLgmMs6 r#8nㅍSS3$~ sKjmKs6 t%4nㅍSS3ḵ4S3n4ÎnㅍSppÎnㅍSS3~4ÎnㅍSS3|̩GmwT~"YgvvsÎnㅍSS3G| N/OLiݭǪlUS99iSLUOl/'GFFG''`GFF`G'
"T]*a| vAa4bxыE
; kHSNjԷߋዻZ&!iGG
'FٜYnĆ~y~P]6l`bb?glk
-a_ iFz|ztm|k|jyyxrpnso(FѝTnw|OW+_ ] cf􅝉y8qq5q|q||zw|{΋kjmyvpgvfeselgrUkjzY]GHDHUkjzY]GHDzw|{΋kjmyvpgvfeselgH{΋kjmyvpgvfeselgBT3CB54BB4‹9^wuܩVXCn:
+a_ iFz|ztm|k|jyyxrpnso(FѝTnw|OW+_ ] cf􅝉y5q|q||zw|{΋kjmyvpgvfeselgrUkjzY]GHDHUkjzY]GHDzw|{΋kjmyvpgvfeselgH{΋kjmyvpgvfeselgBT3CB54BB4‹9^wuܩVXCn:

endstream
endobj
-260 0 obj
-<< /Type /FontDescriptor /FontName /XBNXDH+Heuristica-Regular /Flags 4 /FontBBox [ -500 -448 1158 1110 ] /Ascent 950 /CapHeight 692 /Descent -250 /ItalicAngle 0 /StemV 88 /XHeight 490 /FontFile3 262 0 R /CIDSet 261 0 R >>
+268 0 obj
+<< /Type /FontDescriptor /FontName /FDJNIX+Heuristica-Regular /Flags 4 /FontBBox [ -500 -448 1158 1110 ] /Ascent 950 /CapHeight 692 /Descent -250 /ItalicAngle 0 /StemV 88 /XHeight 490 /FontFile3 270 0 R /CIDSet 269 0 R >>
endobj
-263 0 obj
-<< /Length 1726 >>
+271 0 obj
+<< /Length 1754 >>
stream
%!PS-Adobe-3.0 Resource-CMap
%%DocumentNeededResources: ProcSet (CIDInit)
%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-XBNXDH-Heuristica-Regular-0)
-%%Title: (TeX-XBNXDH-Heuristica-Regular-0 TeX XBNXDH-Heuristica-Regular 0)
+%%BeginResource: CMap (TeX-FDJNIX-Heuristica-Regular-0)
+%%Title: (TeX-FDJNIX-Heuristica-Regular-0 TeX FDJNIX-Heuristica-Regular 0)
%%Version: 1.000
%%EndComments
/CIDInit /ProcSet findresource begin
@@ -2733,18 +2947,20 @@ stream
begincmap
/CIDSystemInfo
<< /Registry (TeX)
-/Ordering (XBNXDH-Heuristica-Regular)
+/Ordering (FDJNIX-Heuristica-Regular)
/Supplement 0
>> def
-/CMapName /TeX-Identity-XBNXDH-Heuristica-Regular def
+/CMapName /TeX-Identity-FDJNIX-Heuristica-Regular def
/CMapType 2 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
0 beginbfrange
endbfrange
-73 beginbfchar
+75 beginbfchar
<0002> <0021>
+<0004> <0023>
+<0006> <0025>
<0009> <0028>
<000A> <0029>
<000B> <002A>
@@ -2760,6 +2976,7 @@ endbfrange
<0016> <0035>
<0017> <0036>
<0018> <0037>
+<0019> <0038>
<001A> <0039>
<001B> <003A>
<001C> <003B>
@@ -2807,7 +3024,6 @@ endbfrange
<0058> <0077>
<0059> <0078>
<005A> <0079>
-<0442> <2013>
<0443> <2014>
<0445> <2019>
<0447> <201C>
@@ -2828,41 +3044,41 @@ end
endstream
endobj
12 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /XBNXDH+Heuristica-Regular /DescendantFonts [ 264 0 R ] /ToUnicode 263 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /FDJNIX+Heuristica-Regular /DescendantFonts [ 272 0 R ] /ToUnicode 271 0 R >>
endobj
-264 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /XBNXDH+Heuristica-Regular /FontDescriptor 260 0 R /W 259 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+272 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /FDJNIX+Heuristica-Regular /FontDescriptor 268 0 R /W 267 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-265 0 obj
-[ 28 [ 525 ] 35 [ 525 525 ] 43 [ 525 ] 45 [ 525 ] 47 [ 525 ] 50 [ 525 ] 55 [ 525 ] 59 [ 525 ] 63 [ 525 ] 66 [ 525 ] 70 [ 525 ] 72 [ 525 ] 75 [ 525 ] 77 [ 525 ] 81 [ 525 ] 84 [ 525 ] 87 [ 525 525 ] 91 [ 525 ] 94 [ 525 ] 96 [ 525 ] 98 [ 525 ] 102 [ 525 ] 105 [ 525 ] 109 [ 525 ] 112 [ 525 ] 114 [ 525 ] 116 [ 525 ] 118 [ 525 ] ]
+273 0 obj
+[ 28 [ 525 ] 35 [ 525 525 ] 43 [ 525 ] 45 [ 525 ] 47 [ 525 ] 50 [ 525 ] 52 [ 525 ] 55 [ 525 ] 59 [ 525 ] 63 [ 525 525 ] 66 [ 525 ] 70 [ 525 525 525 ] 75 [ 525 ] 77 [ 525 ] 81 [ 525 525 ] 84 [ 525 ] 87 [ 525 525 ] 91 [ 525 ] 94 [ 525 ] 96 [ 525 ] 98 [ 525 ] 101 [ 525 525 ] 104 [ 525 525 ] 107 [ 525 ] 109 [ 525 ] 112 [ 525 ] 114 [ 525 525 525 ] 118 [ 525 ] 121 [ 525 ] ]
endobj
-267 0 obj
-<< /Length 15 >>
+275 0 obj
+<< /Length 16 >>
stream
-
+
endstream
endobj
-268 0 obj
-<< /Subtype /CIDFontType0C /Length 3828 >>
+276 0 obj
+<< /Subtype /CIDFontType0C /Length 4658 >>
stream
-
-9
-   AFpnyn}aU&^#?iyͺrPA V,DGƒ@pJxxj|{iaTfکދ9|d~n0 `c}sj4cD0xnfg|ssʪk93KNJDlܷG;Ovwid5qsywu5x+kihxswaK=H߸c|!\AN2 $#V2a\_rjhap{\fvsxwFދދ~mzg|cDxnfglfe),)No;3Xb>EIUŷYY ghuu]wZrHHyI )&%5&ʛu4FL7y9=[1`1xngg0ymgfmy0pxʿ}os-ұHiݏߡ
-xnfgExgx .oejnzplnpytܡxylymhjgxjg{g;ۭ{Sovxkgzg;ۮ{SowxkgE\goxhnV9SctxsHdDxoggЯhxofg/nxh9ϮrVimxnfg)jn,,(+85REGGRO7lE]i)~n0 `b}rj$gDxngghxnfg/ŰnxhCj93KNJDlܷG;:rҷҷk`YXaP<:Ruyspv{2tx6bWWbO>=OfrphessfVjhapiicnlܳbGpxc"cilpeZ$,)ĵKcynhf7> W^?@GOϴDOvwd|ujYZyseE(4} 3[Q|WW c @ynhfDyngfmy'
+
+
+ ( ^  M X`AFpnyn}aU&^#?iyͺrPA V,DGƒ@pJxxj|{iaTfکދ9|d~n0 `c}sj4cD0xnfg|ssʪk93KNJDlܷG;Ovwid5qsywu5x+kihxswaK=H߸c|!\AN2 $#V2a\_rjhap{\fvsxwFދދ~mzg|cDxnfglfe),)No;3Xb>EIUŷYY ghuu]wZrHHyI )&%5&ʛu4R|b{{bcb(e}}ebcFL7y9=[1`1xngg0ymgfmy0pxʿ}os-ұHiݏߡ
+xnfgExgx .oejnzplnpytܡxylymhjgxjg{g;ۭ{Sovxkgzg;ۮ{SowxkgE\goxhnV9SctxsHdDxoggЯhxofg/nxh9ϮrVimxnfg)jn,,(+85REGGRO7 wQpx:ht}}i=[zxsjl:xofglE]i)~n0 `b}rj$gDxngghxnfg/ŰnxhCj93KNJDlܷG;:rҷҷk`YXaP<:Ruyspv{2tx6bWWbO>=OfrphessfVjhapiicnlܳbGpxc"cilpeZ$,)ĵKcynhf7> W^?@GOϴDOvwd|ujYZyseE(4} 3[Q|WW c @ynhfDyngfmy'
э 
endstream
endobj
-266 0 obj
-<< /Type /FontDescriptor /FontName /SRVENG+LMMonoLt10-Bold /Flags 4 /FontBBox [ -454 -308 734 1039 ] /Ascent 1039 /CapHeight 611 /Descent -308 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 268 0 R /CIDSet 267 0 R >>
+274 0 obj
+<< /Type /FontDescriptor /FontName /QFORMF+LMMonoLt10-Bold /Flags 4 /FontBBox [ -454 -308 734 1039 ] /Ascent 1039 /CapHeight 611 /Descent -308 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 276 0 R /CIDSet 275 0 R >>
endobj
-269 0 obj
-<< /Length 1089 >>
+277 0 obj
+<< /Length 1215 >>
stream
%!PS-Adobe-3.0 Resource-CMap
%%DocumentNeededResources: ProcSet (CIDInit)
%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-SRVENG-LMMonoLt10-Bold-0)
-%%Title: (TeX-SRVENG-LMMonoLt10-Bold-0 TeX SRVENG-LMMonoLt10-Bold 0)
+%%BeginResource: CMap (TeX-QFORMF-LMMonoLt10-Bold-0)
+%%Title: (TeX-QFORMF-LMMonoLt10-Bold-0 TeX QFORMF-LMMonoLt10-Bold 0)
%%Version: 1.000
%%EndComments
/CIDInit /ProcSet findresource begin
@@ -2870,17 +3086,17 @@ stream
begincmap
/CIDSystemInfo
<< /Registry (TeX)
-/Ordering (SRVENG-LMMonoLt10-Bold)
+/Ordering (QFORMF-LMMonoLt10-Bold)
/Supplement 0
>> def
-/CMapName /TeX-Identity-SRVENG-LMMonoLt10-Bold def
+/CMapName /TeX-Identity-QFORMF-LMMonoLt10-Bold def
/CMapType 2 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
0 beginbfrange
endbfrange
-30 beginbfchar
+39 beginbfchar
<001C> <0061>
<0023> <0062>
<0024> <005C>
@@ -2888,15 +3104,19 @@ endbfrange
<002D> <002C>
<002F> <0064>
<0032> <0065>
+<0034> <003D>
<0037> <0066>
<003B> <0067>
<003F> <0068>
+<0040> <002D>
<0042> <0069>
<0046> <006B>
+<0047> <004C>
<0048> <006C>
<004B> <006D>
<004D> <006E>
<0051> <006F>
+<0052> <0031>
<0054> <0070>
<0057> <0025>
<0058> <002E>
@@ -2904,13 +3124,18 @@ endbfrange
<005E> <0027>
<0060> <0072>
<0062> <0073>
+<0065> <0036>
<0066> <002F>
+<0068> <0054>
<0069> <0074>
+<006B> <0032>
<006D> <0075>
<0070> <0076>
<0072> <0077>
+<0073> <0058>
<0074> <0078>
<0076> <0079>
+<0079> <0030>
endbfchar
endcmap
CMapName currentdict /CMap defineresource pop
@@ -2922,21 +3147,21 @@ end
endstream
endobj
11 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /SRVENG+LMMonoLt10-Bold /DescendantFonts [ 270 0 R ] /ToUnicode 269 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /QFORMF+LMMonoLt10-Bold /DescendantFonts [ 278 0 R ] /ToUnicode 277 0 R >>
endobj
-270 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /SRVENG+LMMonoLt10-Bold /FontDescriptor 266 0 R /W 265 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+278 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /QFORMF+LMMonoLt10-Bold /FontDescriptor 274 0 R /W 273 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-271 0 obj
+279 0 obj
[ 28 [ 525 ] 34 [ 733 561 ] 42 [ 703 489 306 306 ] 47 [ 561 ] 49 [ 642 511 ] 55 [ 336 550 550 ] 59 [ 550 ] 63 [ 561 367 331 256 ] 70 [ 531 ] 72 [ 256 ] 74 [ 978 867 ] 77 [ 561 ] 81 [ 550 550 ] 84 [ 561 ] 88 [ 306 ] 90 [ 794 ] 95 [ 703 372 611 422 ] 100 [ 550 550 ] 104 [ 733 404 550 550 764 561 ] 112 [ 500 ] 114 [ 744 ] 116 [ 500 ] 121 [ 550 ] 125 [ 586 ] ]
endobj
-273 0 obj
+281 0 obj
<< /Length 16 >>
stream
endstream
endobj
-274 0 obj
+282 0 obj
<< /Subtype /CIDFontType0C /Length 5732 >>
stream

@@ -2952,10 +3177,10 @@ w''+4y5bce~h7)nJl8bXgf4g:bB
 
endstream
endobj
-272 0 obj
-<< /Type /FontDescriptor /FontName /NIIVWO+LMSans10-Bold /Flags 4 /FontBBox [ -460 -297 1761 1134 ] /Ascent 1134 /CapHeight 694 /Descent -297 /ItalicAngle 0 /StemV 102 /XHeight 458 /FontFile3 274 0 R /CIDSet 273 0 R >>
+280 0 obj
+<< /Type /FontDescriptor /FontName /NIIVWO+LMSans10-Bold /Flags 4 /FontBBox [ -460 -297 1761 1134 ] /Ascent 1134 /CapHeight 694 /Descent -297 /ItalicAngle 0 /StemV 102 /XHeight 458 /FontFile3 282 0 R /CIDSet 281 0 R >>
endobj
-275 0 obj
+283 0 obj
<< /Length 1293 >>
stream
%!PS-Adobe-3.0 Resource-CMap
@@ -3037,370 +3262,382 @@ end
endstream
endobj
10 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /NIIVWO+LMSans10-Bold /DescendantFonts [ 276 0 R ] /ToUnicode 275 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /NIIVWO+LMSans10-Bold /DescendantFonts [ 284 0 R ] /ToUnicode 283 0 R >>
endobj
-276 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /NIIVWO+LMSans10-Bold /FontDescriptor 272 0 R /W 271 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+284 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /NIIVWO+LMSans10-Bold /FontDescriptor 280 0 R /W 279 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
15 0 obj
-<< /Type /Pages /Count 7 /Kids [ 5 0 R 17 0 R 37 0 R 81 0 R 98 0 R 128 0 R 178 0 R ] >>
+<< /Type /Pages /Count 8 /Kids [ 5 0 R 17 0 R 37 0 R 81 0 R 98 0 R 128 0 R 178 0 R 211 0 R ] >>
endobj
-277 0 obj
-<< /Type /Outlines /First 209 0 R /Last 239 0 R /Count 7 >>
+285 0 obj
+<< /Type /Outlines /First 217 0 R /Last 247 0 R /Count 7 >>
endobj
-245 0 obj
-<< /Title 246 0 R /A 244 0 R /Parent 239 0 R /Prev 242 0 R >>
+253 0 obj
+<< /Title 254 0 R /A 252 0 R /Parent 247 0 R /Prev 250 0 R >>
endobj
-242 0 obj
-<< /Title 243 0 R /A 241 0 R /Parent 239 0 R /Next 245 0 R >>
+250 0 obj
+<< /Title 251 0 R /A 249 0 R /Parent 247 0 R /Next 253 0 R >>
endobj
-239 0 obj
-<< /Title 240 0 R /A 238 0 R /Parent 277 0 R /Prev 236 0 R /First 242 0 R /Last 245 0 R /Count -2 >>
+247 0 obj
+<< /Title 248 0 R /A 246 0 R /Parent 285 0 R /Prev 244 0 R /First 250 0 R /Last 253 0 R /Count -2 >>
endobj
-236 0 obj
-<< /Title 237 0 R /A 235 0 R /Parent 277 0 R /Prev 233 0 R /Next 239 0 R >>
+244 0 obj
+<< /Title 245 0 R /A 243 0 R /Parent 285 0 R /Prev 241 0 R /Next 247 0 R >>
endobj
-233 0 obj
-<< /Title 234 0 R /A 232 0 R /Parent 277 0 R /Prev 227 0 R /Next 236 0 R >>
+241 0 obj
+<< /Title 242 0 R /A 240 0 R /Parent 285 0 R /Prev 235 0 R /Next 244 0 R >>
endobj
-230 0 obj
-<< /Title 231 0 R /A 229 0 R /Parent 227 0 R >>
+238 0 obj
+<< /Title 239 0 R /A 237 0 R /Parent 235 0 R >>
endobj
-227 0 obj
-<< /Title 228 0 R /A 226 0 R /Parent 277 0 R /Prev 224 0 R /Next 233 0 R /First 230 0 R /Last 230 0 R /Count -1 >>
+235 0 obj
+<< /Title 236 0 R /A 234 0 R /Parent 285 0 R /Prev 232 0 R /Next 241 0 R /First 238 0 R /Last 238 0 R /Count -1 >>
endobj
-224 0 obj
-<< /Title 225 0 R /A 223 0 R /Parent 277 0 R /Prev 212 0 R /Next 227 0 R >>
+232 0 obj
+<< /Title 233 0 R /A 231 0 R /Parent 285 0 R /Prev 220 0 R /Next 235 0 R >>
endobj
-221 0 obj
-<< /Title 222 0 R /A 220 0 R /Parent 212 0 R /Prev 218 0 R >>
+229 0 obj
+<< /Title 230 0 R /A 228 0 R /Parent 220 0 R /Prev 226 0 R >>
endobj
-218 0 obj
-<< /Title 219 0 R /A 217 0 R /Parent 212 0 R /Prev 215 0 R /Next 221 0 R >>
+226 0 obj
+<< /Title 227 0 R /A 225 0 R /Parent 220 0 R /Prev 223 0 R /Next 229 0 R >>
endobj
-215 0 obj
-<< /Title 216 0 R /A 214 0 R /Parent 212 0 R /Next 218 0 R >>
+223 0 obj
+<< /Title 224 0 R /A 222 0 R /Parent 220 0 R /Next 226 0 R >>
endobj
-212 0 obj
-<< /Title 213 0 R /A 211 0 R /Parent 277 0 R /Prev 209 0 R /Next 224 0 R /First 215 0 R /Last 221 0 R /Count -3 >>
+220 0 obj
+<< /Title 221 0 R /A 219 0 R /Parent 285 0 R /Prev 217 0 R /Next 232 0 R /First 223 0 R /Last 229 0 R /Count -3 >>
endobj
-209 0 obj
-<< /Title 210 0 R /A 208 0 R /Parent 277 0 R /Next 212 0 R >>
+217 0 obj
+<< /Title 218 0 R /A 216 0 R /Parent 285 0 R /Next 220 0 R >>
endobj
-278 0 obj
+286 0 obj
<< /Names [ (Doc-Start) 9 0 R (NEWPAX@doc-input1.newpax@1@) 132 0 R (NEWPAX@doc-input1.newpax@2@) 133 0 R (NEWPAX@doc-input1.newpax@3@) 134 0 R (NEWPAX@doc-input1.newpax@4@) 135 0 R (NEWPAX@doc-input1.newpax@5@) 136 0 R (desc:newpaxsetup) 85 0 R (lstlisting.-1) 40 0 R (lstlisting.-2) 87 0 R (lstlisting.1) 22 0 R (lstlisting.2) 44 0 R (lstlisting.3) 139 0 R (lstlisting.4) 182 0 R (lstnumber.-1.1) 41 0 R (lstnumber.-1.2) 42 0 R (lstnumber.-1.3) 43 0 R (lstnumber.-2.1) 88 0 R (lstnumber.-2.2) 89 0 R (lstnumber.-2.3) 90 0 R (lstnumber.-2.4) 91 0 R (lstnumber.-2.5) 92 0 R (lstnumber.-2.6) 93 0 R (lstnumber.-2.7) 94 0 R (lstnumber.-2.8) 95 0 R (lstnumber.-2.9) 96 0 R (lstnumber.1.1) 23 0 R (lstnumber.1.10) 32 0 R (lstnumber.1.11) 33 0 R (lstnumber.1.2) 24 0 R (lstnumber.1.3) 25 0 R (lstnumber.1.4) 26 0 R (lstnumber.1.5) 27 0 R ] /Limits [ (Doc-Start) (lstnumber.1.5) ] >>
endobj
-279 0 obj
+287 0 obj
<< /Names [ (lstnumber.1.6) 28 0 R (lstnumber.1.7) 29 0 R (lstnumber.1.8) 30 0 R (lstnumber.1.9) 31 0 R (lstnumber.2.1) 45 0 R (lstnumber.2.10) 54 0 R (lstnumber.2.11) 55 0 R (lstnumber.2.12) 56 0 R (lstnumber.2.13) 57 0 R (lstnumber.2.14) 58 0 R (lstnumber.2.15) 59 0 R (lstnumber.2.16) 60 0 R (lstnumber.2.17) 61 0 R (lstnumber.2.18) 62 0 R (lstnumber.2.19) 63 0 R (lstnumber.2.2) 46 0 R (lstnumber.2.20) 64 0 R (lstnumber.2.21) 65 0 R (lstnumber.2.22) 66 0 R (lstnumber.2.23) 67 0 R (lstnumber.2.24) 68 0 R (lstnumber.2.25) 69 0 R (lstnumber.2.26) 70 0 R (lstnumber.2.27) 71 0 R (lstnumber.2.28) 72 0 R (lstnumber.2.29) 73 0 R (lstnumber.2.3) 47 0 R (lstnumber.2.30) 74 0 R (lstnumber.2.31) 75 0 R (lstnumber.2.32) 76 0 R (lstnumber.2.33) 77 0 R (lstnumber.2.34) 78 0 R ] /Limits [ (lstnumber.1.6) (lstnumber.2.34) ] >>
endobj
-280 0 obj
+288 0 obj
<< /Names [ (lstnumber.2.4) 48 0 R (lstnumber.2.5) 49 0 R (lstnumber.2.6) 50 0 R (lstnumber.2.7) 51 0 R (lstnumber.2.8) 52 0 R (lstnumber.2.9) 53 0 R (lstnumber.3.1) 140 0 R (lstnumber.3.10) 149 0 R (lstnumber.3.11) 150 0 R (lstnumber.3.12) 151 0 R (lstnumber.3.2) 141 0 R (lstnumber.3.3) 142 0 R (lstnumber.3.4) 143 0 R (lstnumber.3.5) 144 0 R (lstnumber.3.6) 145 0 R (lstnumber.3.7) 146 0 R (lstnumber.3.8) 147 0 R (lstnumber.3.9) 148 0 R (lstnumber.4.1) 183 0 R (lstnumber.4.10) 192 0 R (lstnumber.4.11) 193 0 R (lstnumber.4.12) 194 0 R (lstnumber.4.13) 195 0 R (lstnumber.4.14) 196 0 R (lstnumber.4.15) 197 0 R (lstnumber.4.16) 198 0 R (lstnumber.4.17) 199 0 R (lstnumber.4.18) 200 0 R (lstnumber.4.19) 201 0 R (lstnumber.4.2) 184 0 R (lstnumber.4.20) 202 0 R (lstnumber.4.21) 203 0 R ] /Limits [ (lstnumber.2.4) (lstnumber.4.21) ] >>
endobj
-281 0 obj
-<< /Names [ (lstnumber.4.22) 204 0 R (lstnumber.4.23) 205 0 R (lstnumber.4.24) 206 0 R (lstnumber.4.3) 185 0 R (lstnumber.4.4) 186 0 R (lstnumber.4.5) 187 0 R (lstnumber.4.6) 188 0 R (lstnumber.4.7) 189 0 R (lstnumber.4.8) 190 0 R (lstnumber.4.9) 191 0 R (page.1) 8 0 R (page.2) 19 0 R (page.3) 39 0 R (page.4) 83 0 R (page.5) 100 0 R (page.6) 130 0 R (page.7) 180 0 R (section.1) 13 0 R (section.2) 20 0 R (section.3) 84 0 R (section.4) 86 0 R (section.5) 102 0 R (section.6) 131 0 R (section.7) 137 0 R (subsection.2.1) 21 0 R (subsection.2.2) 34 0 R (subsection.2.3) 79 0 R (subsection.4.1) 101 0 R (subsection.7.1) 138 0 R (subsection.7.2) 181 0 R ] /Limits [ (lstnumber.4.22) (subsection.7.2) ] >>
+289 0 obj
+<< /Names [ (lstnumber.4.22) 204 0 R (lstnumber.4.23) 205 0 R (lstnumber.4.24) 206 0 R (lstnumber.4.25) 207 0 R (lstnumber.4.26) 208 0 R (lstnumber.4.27) 209 0 R (lstnumber.4.28) 214 0 R (lstnumber.4.3) 185 0 R (lstnumber.4.4) 186 0 R (lstnumber.4.5) 187 0 R (lstnumber.4.6) 188 0 R (lstnumber.4.7) 189 0 R (lstnumber.4.8) 190 0 R (lstnumber.4.9) 191 0 R (page.1) 8 0 R (page.2) 19 0 R (page.3) 39 0 R (page.4) 83 0 R (page.5) 100 0 R (page.6) 130 0 R (page.7) 180 0 R (page.8) 213 0 R (section.1) 13 0 R (section.2) 20 0 R (section.3) 84 0 R (section.4) 86 0 R (section.5) 102 0 R (section.6) 131 0 R (section.7) 137 0 R (subsection.2.1) 21 0 R (subsection.2.2) 34 0 R (subsection.2.3) 79 0 R ] /Limits [ (lstnumber.4.22) (subsection.2.3) ] >>
endobj
-282 0 obj
-<< /Kids [ 278 0 R 279 0 R 280 0 R 281 0 R ] /Limits [ (Doc-Start) (subsection.7.2) ] >>
+290 0 obj
+<< /Names [ (subsection.4.1) 101 0 R (subsection.7.1) 138 0 R (subsection.7.2) 181 0 R ] /Limits [ (subsection.4.1) (subsection.7.2) ] >>
endobj
-283 0 obj
-<< /Dests 282 0 R >>
+291 0 obj
+<< /Kids [ 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R ] /Limits [ (Doc-Start) (subsection.7.2) ] >>
endobj
-284 0 obj
-<< /Type /Catalog /Pages 15 0 R /Outlines 277 0 R /Names 283 0 R /ViewerPreferences 207 0 R/Lang (en-UK)/PageMode /UseOutlines/OpenAction [5 0 R /Fit]/PageLabels <</Nums[0<</S/D>>]>> >>
+292 0 obj
+<< /Dests 291 0 R >>
endobj
-285 0 obj
-<< /Creator <FEFF004C006100540065005800200077006900740068002000680079007000650072007200650066>/Title <FEFF0054006800650020006E006500770070006100780020007000610063006B006100670065>/Author <FEFF0055006C00720069006B006500200046006900730063006800650072> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220911155708+02'00') /ModDate (D:20220911155708+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >>
+293 0 obj
+<< /Type /Catalog /Pages 15 0 R /Outlines 285 0 R /Names 292 0 R /ViewerPreferences 215 0 R/Lang (en-UK)/PageMode /UseOutlines/OpenAction [5 0 R /Fit]/PageLabels <</Nums[0<</S/D>>]>> >>
+endobj
+294 0 obj
+<< /Creator <FEFF004C006100540065005800200077006900740068002000680079007000650072007200650066>/Title <FEFF0054006800650020006E006500770070006100780020007000610063006B006100670065>/Author <FEFF0055006C00720069006B006500200046006900730063006800650072> /Producer (LuaTeX-1.15.0) /CreationDate (D:20220915203917+02'00') /ModDate (D:20220915203917+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)) >>
endobj
xref
-0 286
+0 295
0000000002 65535 f
-0000118849 00000 n
+0000124810 00000 n
0000000003 00000 f
0000000004 00000 f
0000000000 00000 f
-0000012261 00000 n
-0000012553 00000 n
+0000012223 00000 n
+0000012515 00000 n
0000000020 00000 n
-0000012375 00000 n
-0000012434 00000 n
-0000162443 00000 n
-0000154228 00000 n
-0000148147 00000 n
-0000012493 00000 n
-0000136358 00000 n
-0000162794 00000 n
-0000027154 00000 n
-0000026063 00000 n
-0000012675 00000 n
-0000026180 00000 n
-0000026241 00000 n
-0000026302 00000 n
-0000026363 00000 n
-0000026423 00000 n
-0000026484 00000 n
-0000026545 00000 n
-0000026606 00000 n
-0000026667 00000 n
-0000026728 00000 n
-0000026789 00000 n
-0000026850 00000 n
-0000026911 00000 n
-0000026972 00000 n
-0000027033 00000 n
-0000027093 00000 n
-0000125274 00000 n
-0000041002 00000 n
-0000038385 00000 n
-0000027289 00000 n
-0000038502 00000 n
-0000038563 00000 n
-0000038624 00000 n
-0000038686 00000 n
-0000038748 00000 n
-0000038810 00000 n
-0000038871 00000 n
-0000038932 00000 n
-0000038992 00000 n
-0000039053 00000 n
-0000039114 00000 n
-0000039175 00000 n
-0000039236 00000 n
-0000039297 00000 n
-0000039358 00000 n
-0000039419 00000 n
-0000039480 00000 n
-0000039541 00000 n
-0000039602 00000 n
-0000039663 00000 n
-0000039723 00000 n
-0000039783 00000 n
-0000039844 00000 n
-0000039905 00000 n
-0000039966 00000 n
-0000040027 00000 n
-0000040088 00000 n
-0000040149 00000 n
-0000040210 00000 n
-0000040271 00000 n
-0000040332 00000 n
-0000040393 00000 n
-0000040454 00000 n
-0000040514 00000 n
-0000040575 00000 n
-0000040636 00000 n
-0000040697 00000 n
-0000040758 00000 n
-0000040819 00000 n
-0000040880 00000 n
-0000040941 00000 n
-0000053906 00000 n
-0000052936 00000 n
-0000041125 00000 n
-0000053053 00000 n
-0000053114 00000 n
-0000053175 00000 n
-0000053235 00000 n
-0000053296 00000 n
-0000053357 00000 n
-0000053418 00000 n
-0000053479 00000 n
-0000053540 00000 n
-0000053601 00000 n
-0000053662 00000 n
-0000053723 00000 n
-0000053784 00000 n
-0000053845 00000 n
-0000070251 00000 n
-0000069948 00000 n
-0000054041 00000 n
-0000070065 00000 n
-0000070127 00000 n
-0000070189 00000 n
-0000078046 00000 n
-0000077829 00000 n
-0000103015 00000 n
-0000103226 00000 n
-0000099476 00000 n
-0000099696 00000 n
-0000099917 00000 n
-0000100137 00000 n
-0000100357 00000 n
-0000100577 00000 n
-0000100797 00000 n
-0000101017 00000 n
-0000101236 00000 n
-0000101456 00000 n
-0000101676 00000 n
-0000101896 00000 n
-0000102116 00000 n
-0000102519 00000 n
-0000098532 00000 n
-0000098315 00000 n
-0000102792 00000 n
-0000103437 00000 n
-0000103648 00000 n
-0000103860 00000 n
-0000105460 00000 n
-0000077512 00000 n
-0000070374 00000 n
-0000104073 00000 n
-0000104136 00000 n
-0000104199 00000 n
-0000104261 00000 n
-0000104325 00000 n
-0000104389 00000 n
-0000104452 00000 n
-0000104516 00000 n
-0000104579 00000 n
-0000104642 00000 n
-0000104705 00000 n
-0000104768 00000 n
-0000104830 00000 n
-0000104893 00000 n
-0000104956 00000 n
-0000105019 00000 n
-0000105082 00000 n
-0000105145 00000 n
-0000105208 00000 n
-0000105271 00000 n
-0000105334 00000 n
-0000105397 00000 n
-0000077648 00000 n
-0000098246 00000 n
-0000083442 00000 n
-0000083493 00000 n
-0000083650 00000 n
-0000083806 00000 n
-0000083960 00000 n
-0000084163 00000 n
-0000085446 00000 n
-0000085648 00000 n
-0000086627 00000 n
-0000086827 00000 n
-0000087627 00000 n
-0000087866 00000 n
-0000088225 00000 n
-0000088463 00000 n
-0000088672 00000 n
-0000088909 00000 n
-0000088990 00000 n
-0000094276 00000 n
-0000094344 00000 n
-0000096842 00000 n
-0000096909 00000 n
-0000098180 00000 n
-0000099407 00000 n
-0000118725 00000 n
-0000116906 00000 n
-0000105625 00000 n
-0000117026 00000 n
-0000117089 00000 n
-0000117152 00000 n
-0000117215 00000 n
-0000117278 00000 n
-0000117341 00000 n
-0000117404 00000 n
-0000117467 00000 n
-0000117530 00000 n
-0000117593 00000 n
-0000117656 00000 n
-0000117719 00000 n
-0000117782 00000 n
-0000117845 00000 n
-0000117908 00000 n
-0000117970 00000 n
-0000118032 00000 n
-0000118095 00000 n
-0000118158 00000 n
-0000118221 00000 n
-0000118284 00000 n
-0000118347 00000 n
-0000118410 00000 n
-0000118473 00000 n
-0000118536 00000 n
-0000118599 00000 n
-0000118662 00000 n
-0000118896 00000 n
-0000118942 00000 n
-0000164111 00000 n
-0000118989 00000 n
-0000119078 00000 n
-0000163979 00000 n
-0000119125 00000 n
-0000119270 00000 n
-0000163900 00000 n
-0000119322 00000 n
-0000119584 00000 n
-0000163807 00000 n
-0000119636 00000 n
-0000119893 00000 n
-0000163728 00000 n
-0000119945 00000 n
-0000120075 00000 n
-0000163635 00000 n
-0000120122 00000 n
-0000120219 00000 n
-0000163503 00000 n
-0000120266 00000 n
-0000120373 00000 n
-0000163438 00000 n
-0000120425 00000 n
-0000120633 00000 n
-0000163345 00000 n
-0000120680 00000 n
-0000120817 00000 n
-0000163252 00000 n
-0000120864 00000 n
-0000120961 00000 n
-0000163134 00000 n
-0000121008 00000 n
-0000121184 00000 n
-0000163055 00000 n
-0000121236 00000 n
-0000121447 00000 n
-0000162976 00000 n
-0000121499 00000 n
-0000121746 00000 n
-0000124112 00000 n
-0000121861 00000 n
-0000121933 00000 n
-0000124352 00000 n
-0000125430 00000 n
-0000125633 00000 n
-0000134405 00000 n
-0000126079 00000 n
-0000126156 00000 n
-0000134643 00000 n
-0000136513 00000 n
-0000136715 00000 n
-0000146121 00000 n
-0000137149 00000 n
-0000137384 00000 n
-0000146360 00000 n
-0000148304 00000 n
-0000148508 00000 n
-0000152841 00000 n
-0000148852 00000 n
-0000148928 00000 n
-0000153078 00000 n
-0000154382 00000 n
-0000154583 00000 n
-0000160853 00000 n
-0000154959 00000 n
-0000155036 00000 n
-0000161089 00000 n
-0000162595 00000 n
-0000162899 00000 n
-0000164190 00000 n
-0000165085 00000 n
-0000165925 00000 n
-0000166781 00000 n
-0000167501 00000 n
-0000167607 00000 n
-0000167645 00000 n
-0000167848 00000 n
+0000012337 00000 n
+0000012396 00000 n
+0000170270 00000 n
+0000162055 00000 n
+0000154973 00000 n
+0000012455 00000 n
+0000142753 00000 n
+0000170621 00000 n
+0000027116 00000 n
+0000026025 00000 n
+0000012637 00000 n
+0000026142 00000 n
+0000026203 00000 n
+0000026264 00000 n
+0000026325 00000 n
+0000026385 00000 n
+0000026446 00000 n
+0000026507 00000 n
+0000026568 00000 n
+0000026629 00000 n
+0000026690 00000 n
+0000026751 00000 n
+0000026812 00000 n
+0000026873 00000 n
+0000026934 00000 n
+0000026995 00000 n
+0000027055 00000 n
+0000131235 00000 n
+0000042592 00000 n
+0000039975 00000 n
+0000027251 00000 n
+0000040092 00000 n
+0000040153 00000 n
+0000040214 00000 n
+0000040276 00000 n
+0000040338 00000 n
+0000040400 00000 n
+0000040461 00000 n
+0000040522 00000 n
+0000040582 00000 n
+0000040643 00000 n
+0000040704 00000 n
+0000040765 00000 n
+0000040826 00000 n
+0000040887 00000 n
+0000040948 00000 n
+0000041009 00000 n
+0000041070 00000 n
+0000041131 00000 n
+0000041192 00000 n
+0000041253 00000 n
+0000041313 00000 n
+0000041373 00000 n
+0000041434 00000 n
+0000041495 00000 n
+0000041556 00000 n
+0000041617 00000 n
+0000041678 00000 n
+0000041739 00000 n
+0000041800 00000 n
+0000041861 00000 n
+0000041922 00000 n
+0000041983 00000 n
+0000042044 00000 n
+0000042104 00000 n
+0000042165 00000 n
+0000042226 00000 n
+0000042287 00000 n
+0000042348 00000 n
+0000042409 00000 n
+0000042470 00000 n
+0000042531 00000 n
+0000055496 00000 n
+0000054526 00000 n
+0000042715 00000 n
+0000054643 00000 n
+0000054704 00000 n
+0000054765 00000 n
+0000054825 00000 n
+0000054886 00000 n
+0000054947 00000 n
+0000055008 00000 n
+0000055069 00000 n
+0000055130 00000 n
+0000055191 00000 n
+0000055252 00000 n
+0000055313 00000 n
+0000055374 00000 n
+0000055435 00000 n
+0000071841 00000 n
+0000071538 00000 n
+0000055631 00000 n
+0000071655 00000 n
+0000071717 00000 n
+0000071779 00000 n
+0000079636 00000 n
+0000079419 00000 n
+0000105050 00000 n
+0000105261 00000 n
+0000101066 00000 n
+0000101286 00000 n
+0000101507 00000 n
+0000101727 00000 n
+0000101947 00000 n
+0000102167 00000 n
+0000102387 00000 n
+0000102607 00000 n
+0000102826 00000 n
+0000103046 00000 n
+0000103266 00000 n
+0000103486 00000 n
+0000103706 00000 n
+0000104397 00000 n
+0000100122 00000 n
+0000099905 00000 n
+0000104827 00000 n
+0000105472 00000 n
+0000105683 00000 n
+0000105895 00000 n
+0000107495 00000 n
+0000079102 00000 n
+0000071964 00000 n
+0000106108 00000 n
+0000106171 00000 n
+0000106234 00000 n
+0000106296 00000 n
+0000106360 00000 n
+0000106424 00000 n
+0000106487 00000 n
+0000106551 00000 n
+0000106614 00000 n
+0000106677 00000 n
+0000106740 00000 n
+0000106803 00000 n
+0000106865 00000 n
+0000106928 00000 n
+0000106991 00000 n
+0000107054 00000 n
+0000107117 00000 n
+0000107180 00000 n
+0000107243 00000 n
+0000107306 00000 n
+0000107369 00000 n
+0000107432 00000 n
+0000079238 00000 n
+0000099836 00000 n
+0000085032 00000 n
+0000085083 00000 n
+0000085240 00000 n
+0000085396 00000 n
+0000085550 00000 n
+0000085753 00000 n
+0000087036 00000 n
+0000087238 00000 n
+0000088217 00000 n
+0000088417 00000 n
+0000089217 00000 n
+0000089456 00000 n
+0000089815 00000 n
+0000090053 00000 n
+0000090262 00000 n
+0000090499 00000 n
+0000090580 00000 n
+0000095866 00000 n
+0000095934 00000 n
+0000098432 00000 n
+0000098499 00000 n
+0000099770 00000 n
+0000100997 00000 n
+0000123828 00000 n
+0000121820 00000 n
+0000107660 00000 n
+0000121940 00000 n
+0000122003 00000 n
+0000122066 00000 n
+0000122129 00000 n
+0000122192 00000 n
+0000122255 00000 n
+0000122318 00000 n
+0000122381 00000 n
+0000122443 00000 n
+0000122506 00000 n
+0000122569 00000 n
+0000122632 00000 n
+0000122695 00000 n
+0000122758 00000 n
+0000122821 00000 n
+0000122884 00000 n
+0000122947 00000 n
+0000123010 00000 n
+0000123073 00000 n
+0000123136 00000 n
+0000123198 00000 n
+0000123261 00000 n
+0000123324 00000 n
+0000123387 00000 n
+0000123450 00000 n
+0000123513 00000 n
+0000123576 00000 n
+0000123639 00000 n
+0000123702 00000 n
+0000123765 00000 n
+0000124698 00000 n
+0000124452 00000 n
+0000123952 00000 n
+0000124572 00000 n
+0000124635 00000 n
+0000124857 00000 n
+0000124903 00000 n
+0000171946 00000 n
+0000124950 00000 n
+0000125039 00000 n
+0000171814 00000 n
+0000125086 00000 n
+0000125231 00000 n
+0000171735 00000 n
+0000125283 00000 n
+0000125545 00000 n
+0000171642 00000 n
+0000125597 00000 n
+0000125854 00000 n
+0000171563 00000 n
+0000125906 00000 n
+0000126036 00000 n
+0000171470 00000 n
+0000126083 00000 n
+0000126180 00000 n
+0000171338 00000 n
+0000126227 00000 n
+0000126334 00000 n
+0000171273 00000 n
+0000126386 00000 n
+0000126594 00000 n
+0000171180 00000 n
+0000126641 00000 n
+0000126778 00000 n
+0000171087 00000 n
+0000126825 00000 n
+0000126922 00000 n
+0000170969 00000 n
+0000126969 00000 n
+0000127145 00000 n
+0000170890 00000 n
+0000127197 00000 n
+0000127408 00000 n
+0000170811 00000 n
+0000127460 00000 n
+0000127707 00000 n
+0000130073 00000 n
+0000127822 00000 n
+0000127894 00000 n
+0000130313 00000 n
+0000131391 00000 n
+0000131594 00000 n
+0000140758 00000 n
+0000132045 00000 n
+0000132122 00000 n
+0000140996 00000 n
+0000142908 00000 n
+0000143110 00000 n
+0000152919 00000 n
+0000143557 00000 n
+0000143792 00000 n
+0000153158 00000 n
+0000155130 00000 n
+0000155334 00000 n
+0000160542 00000 n
+0000155722 00000 n
+0000155799 00000 n
+0000160779 00000 n
+0000162209 00000 n
+0000162410 00000 n
+0000168680 00000 n
+0000162786 00000 n
+0000162863 00000 n
+0000168916 00000 n
+0000170422 00000 n
+0000170734 00000 n
+0000172025 00000 n
+0000172920 00000 n
+0000173760 00000 n
+0000174616 00000 n
+0000175378 00000 n
+0000175533 00000 n
+0000175647 00000 n
+0000175685 00000 n
+0000175888 00000 n
trailer
-<< /Size 286 /Root 284 0 R /Info 285 0 R /ID [ <0D2E18C8F7F5B487459655A078BD03FD> <0D2E18C8F7F5B487459655A078BD03FD> ] >>
+<< /Size 295 /Root 293 0 R /Info 294 0 R /ID [ <1AFE8472BBB21752AA02B3F1B7023E03> <1AFE8472BBB21752AA02B3F1B7023E03> ] >>
startxref
-168303
+176343
%%EOF
diff --git a/macros/latex/contrib/newpax/newpax.tex b/macros/latex/contrib/newpax/newpax.tex
index c011638c90..f145dc57f5 100644
--- a/macros/latex/contrib/newpax/newpax.tex
+++ b/macros/latex/contrib/newpax/newpax.tex
@@ -1,10 +1,9 @@
% !Mode:: "TeX:UTF-8:Main"
\makeatletter
-\def\UlrikeFischer@package@version{0.52}
-\def\UlrikeFischer@package@date{2022-09-11}
+\def\UlrikeFischer@package@version{0.53}
+\def\UlrikeFischer@package@date{2022-09-15}
\makeatother
-\RequirePackage{pdfmanagement-testphase}
-\DeclareDocumentMetadata{pdfversion=1.7,lang=en-UK, uncompress}
+\DocumentMetadata{pdfversion=1.7,lang=en-UK, uncompress}
\documentclass[DIV=12,parskip=half-,bibliography=totoc]{scrartcl}
\usepackage{scrlayer-scrpage}
@@ -53,7 +52,7 @@ cursor is in the area. The coordinates of the area are given in absolute page co
The action of such an annotation can be an external URL, but also an internal destination.
Such destination are objects describing a page and some instructions how to display the page---again using absolute coordinates.
-When a PDF is included in another PDF---may it be with \cs{includegraphics} or with \cs{includepdf}--the annotation coordinates no longer make sense as they don't refer to the receiving page (and often the action of an annotation doesn't make sense either), so all TeX-engines and backends strip them away when including a PDF: the net effect is that external and internal links are lost.
+When a PDF is included in another PDF---may it be with \cs{includegraphics} or with \cs{includepdf}\hspace{0pt}---\hspace{0pt}the annotation coordinates no longer make sense as they don't refer to the receiving page (and often the action of an annotation doesn't make sense either), so all TeX-engines and backends strip them away when including a PDF: the net effect is that external and internal links are lost.
The \pkg{pax} package from Heiko Oberdiek offers a solution for this problem: it extracts all the annotations
and destinations of the included PDF in a text file, does some clever recalculations of their coordinates and reinserts them.
@@ -209,11 +208,12 @@ Ensure that the \texttt{.pax} file created in step 1 can be found by your main d
\item This works with pdflatex and lualatex. lualatex needs the extra code demonstrated in the document.
\item It needs two or three compilations until every reference is correct.
\item There is a small typo in \pkg{pax.sty} which affects clipping, the patch shown in the listing correct this.
+\item In some cases the catcode of \# and \% must be set to letter to avoid errors.
\item Don't include PDFs with destinations twice as this will lead to duplicate destinations and pdflatex will complain.
\item If annotations should not be reinserted remove the \texttt{.pax}-file.
\item If \pkg{hyperref} is loaded you can change the color and style of link borders with hyperref options.
\end{itemize}
-
-\lstinputlisting[firstline=2,caption=doc-use-pax.tex]{doc-use-pax.tex}
+\enlargethispage{\baselineskip}
+\lstinputlisting[firstline=2,caption=doc-use-pax.tex,escapechar={}]{doc-use-pax.tex}
\end{document}
diff --git a/macros/latex/contrib/opencolor/LICENSE b/macros/latex/contrib/opencolor/LICENSE
new file mode 100644
index 0000000000..0e3bcfd492
--- /dev/null
+++ b/macros/latex/contrib/opencolor/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 Michele Piazzai
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/macros/latex/contrib/opencolor/README.md b/macros/latex/contrib/opencolor/README.md
new file mode 100644
index 0000000000..4debc90ece
--- /dev/null
+++ b/macros/latex/contrib/opencolor/README.md
@@ -0,0 +1,45 @@
+<!--
+opencolor-latex v1.0.0
+Author: Michele Piazzai
+Contact: michele.piazzai@uc3m.es
+License: MIT
+-->
+
+# opencolor-latex
+
+This is a simple LaTeX package that provides hexadecimal color definitions of the 130 colors included in the [Open Color](https://yeun.github.io/open-color/) library (v1.9.1). Open Color's goal is to provide a selection of colors optimized for UI design. Although LaTeX is a typesetting system primarily intended for print, many of the documents it produces never get printed, in which case it makes sense to use colors suitable for on-screen reading.
+
+Open Colors are organized according to 13 hues (gray, red, pink, grape, violet, indigo, blue, cyan, teal, green, lime, yellow, orange) and 10 brightness levels (0–9). The naming convention is `oc-(color)-(number)`. At the same brightness level, the perceived brightness of different hues aims to be constant.
+
+The package's only dependency is [xcolor](https://www.ctan.org/pkg/xcolor), which is included in most LaTeX distributions.
+
+## Demo
+
+![](https://github.com/piazzai/opencolor-latex/blob/master/demo-opencolor.png)
+
+## Installation
+
+The package is hosted on CTAN and distributed as part of MikTeX and TeXLive. It can also be installed manually by cloning this repository in your `$HOME/texmf/tex/latex` folder. If you do not have this folder, [you can create it](https://www.ias.edu/math/computing/faq/local-latex-style-files).
+
+## Usage
+
+The choice of colors for a document is a responsibility of the author, but UI design principles can provide helpful guidelines. For example, in a beamer presentation, `oc-gray-1` could be used instead of white and `oc-gray-9` instead of black in order to reduce eye strain. If a color like `oc-teal-6` is used for a plot, then it would be best for other plots to use colors at the same brightness level, like `oc-orange-6`, for visual consistency.
+
+## Minimal working example
+
+```tex
+\documentclass{article}
+
+\usepackage{opencolor}
+
+\begin{document}
+ \textcolor{oc-red-8}{Hello}
+ \textcolor{oc-blue-6}{,}
+ \textcolor{oc-lime-9}{world}
+ \textcolor{oc-grape-7}{!}
+\end{document}
+```
+
+## Bugs
+
+The package merely loads xcolor and then provides color definitions, so any error or warning is most likely due to xcolor. Nonetheless, if you encounter any problem using this package, please [open an issue](https://github.com/piazzai/opencolor-latex/issues).
diff --git a/macros/latex/contrib/opencolor/demo-opencolor.pdf b/macros/latex/contrib/opencolor/demo-opencolor.pdf
new file mode 100644
index 0000000000..1f38189fec
--- /dev/null
+++ b/macros/latex/contrib/opencolor/demo-opencolor.pdf
Binary files differ
diff --git a/macros/latex/contrib/opencolor/demo-opencolor.png b/macros/latex/contrib/opencolor/demo-opencolor.png
new file mode 100644
index 0000000000..bd0ff08e1b
--- /dev/null
+++ b/macros/latex/contrib/opencolor/demo-opencolor.png
Binary files differ
diff --git a/macros/latex/contrib/opencolor/demo-opencolor.tex b/macros/latex/contrib/opencolor/demo-opencolor.tex
new file mode 100644
index 0000000000..a8bc47018b
--- /dev/null
+++ b/macros/latex/contrib/opencolor/demo-opencolor.tex
@@ -0,0 +1,26 @@
+% opencolor-latex v1.0.0
+% Author: Michele Piazzai
+% Contact: michele.piazzai@uc3m.es
+% License: MIT
+
+\documentclass{standalone}
+
+\usepackage{tikz}
+\usetikzlibrary{calc}
+
+\usepackage{etoolbox}
+\usepackage{opencolor}
+
+\newcommand\w{9em}
+\newcommand\h{4.5em}
+
+\begin{document}
+\begin{tikzpicture}
+ \foreach \c [count=\x] in {gray,red,pink,grape,violet,indigo,blue,cyan,teal,green,lime,yellow,orange} {%
+ \foreach \b in {0,...,9} {%
+ \draw[\ifnumgreater{\x}{1}{black}{\ifnumgreater{\b}{6}{white}{black}}] (\b*\w,-\x*\h) node [draw=black,fill=oc-\c-\b,minimum width=\w,minimum height=\h] {\ttfamily\large oc-\c-\b};
+ }
+ }
+\end{tikzpicture}
+
+\end{document}
diff --git a/macros/latex/contrib/opencolor/opencolor.sty b/macros/latex/contrib/opencolor/opencolor.sty
new file mode 100644
index 0000000000..df34ae2a76
--- /dev/null
+++ b/macros/latex/contrib/opencolor/opencolor.sty
@@ -0,0 +1,154 @@
+% opencolor-latex v1.0.0
+% Author: Michele Piazzai
+% Contact: michele.piazzai@uc3m.es
+% License: MIT
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{opencolor}[2022/09/15 Open Color]
+
+\RequirePackage{xcolor}
+
+\definecolor{oc-gray-0}{HTML}{F8F9FA}
+\definecolor{oc-gray-1}{HTML}{F1F3F5}
+\definecolor{oc-gray-2}{HTML}{E9ECEF}
+\definecolor{oc-gray-3}{HTML}{DEE2E6}
+\definecolor{oc-gray-4}{HTML}{CED4DA}
+\definecolor{oc-gray-5}{HTML}{ADB5BD}
+\definecolor{oc-gray-6}{HTML}{868E96}
+\definecolor{oc-gray-7}{HTML}{495057}
+\definecolor{oc-gray-8}{HTML}{343A40}
+\definecolor{oc-gray-9}{HTML}{212529}
+
+\definecolor{oc-red-0}{HTML}{FFF5F5}
+\definecolor{oc-red-1}{HTML}{FFE3E3}
+\definecolor{oc-red-2}{HTML}{FFC9C9}
+\definecolor{oc-red-3}{HTML}{FFA8A8}
+\definecolor{oc-red-4}{HTML}{FF8787}
+\definecolor{oc-red-5}{HTML}{FF6B6B}
+\definecolor{oc-red-6}{HTML}{FA5252}
+\definecolor{oc-red-7}{HTML}{F03E3E}
+\definecolor{oc-red-8}{HTML}{E03131}
+\definecolor{oc-red-9}{HTML}{C92A2A}
+
+\definecolor{oc-pink-0}{HTML}{FFF0F6}
+\definecolor{oc-pink-1}{HTML}{FFDEEB}
+\definecolor{oc-pink-2}{HTML}{FCC2D7}
+\definecolor{oc-pink-3}{HTML}{FAA2C1}
+\definecolor{oc-pink-4}{HTML}{F783AC}
+\definecolor{oc-pink-5}{HTML}{F06595}
+\definecolor{oc-pink-6}{HTML}{E64980}
+\definecolor{oc-pink-7}{HTML}{D6336C}
+\definecolor{oc-pink-8}{HTML}{C2255C}
+\definecolor{oc-pink-9}{HTML}{A61E4D}
+
+\definecolor{oc-grape-0}{HTML}{F8F0FC}
+\definecolor{oc-grape-1}{HTML}{F3D9FA}
+\definecolor{oc-grape-2}{HTML}{EEBEFA}
+\definecolor{oc-grape-3}{HTML}{E599F7}
+\definecolor{oc-grape-4}{HTML}{DA77F2}
+\definecolor{oc-grape-5}{HTML}{CC5DE8}
+\definecolor{oc-grape-6}{HTML}{BE4BDB}
+\definecolor{oc-grape-7}{HTML}{AE3EC9}
+\definecolor{oc-grape-8}{HTML}{9C36B5}
+\definecolor{oc-grape-9}{HTML}{862E9C}
+
+\definecolor{oc-violet-0}{HTML}{F3F0FF}
+\definecolor{oc-violet-1}{HTML}{E5DBFF}
+\definecolor{oc-violet-2}{HTML}{D0BFFF}
+\definecolor{oc-violet-3}{HTML}{B197FC}
+\definecolor{oc-violet-4}{HTML}{9775FA}
+\definecolor{oc-violet-5}{HTML}{845EF7}
+\definecolor{oc-violet-6}{HTML}{7950F2}
+\definecolor{oc-violet-7}{HTML}{7048E8}
+\definecolor{oc-violet-8}{HTML}{6741D9}
+\definecolor{oc-violet-9}{HTML}{5F3DC4}
+
+\definecolor{oc-indigo-0}{HTML}{EDF2FF}
+\definecolor{oc-indigo-1}{HTML}{DBE4FF}
+\definecolor{oc-indigo-2}{HTML}{BAC8FF}
+\definecolor{oc-indigo-3}{HTML}{91A7FF}
+\definecolor{oc-indigo-4}{HTML}{748FFC}
+\definecolor{oc-indigo-5}{HTML}{5C7CFA}
+\definecolor{oc-indigo-6}{HTML}{4C6EF5}
+\definecolor{oc-indigo-7}{HTML}{4263EB}
+\definecolor{oc-indigo-8}{HTML}{3B5BDB}
+\definecolor{oc-indigo-9}{HTML}{364FC7}
+
+\definecolor{oc-blue-0}{HTML}{E7F5FF}
+\definecolor{oc-blue-1}{HTML}{D0EBFF}
+\definecolor{oc-blue-2}{HTML}{A5D8FF}
+\definecolor{oc-blue-3}{HTML}{74C0FC}
+\definecolor{oc-blue-4}{HTML}{4DABF7}
+\definecolor{oc-blue-5}{HTML}{339AF0}
+\definecolor{oc-blue-6}{HTML}{228BE6}
+\definecolor{oc-blue-7}{HTML}{1C7ED6}
+\definecolor{oc-blue-8}{HTML}{1971C2}
+\definecolor{oc-blue-9}{HTML}{1864AB}
+
+\definecolor{oc-cyan-0}{HTML}{E3FAFC}
+\definecolor{oc-cyan-1}{HTML}{C5F6FA}
+\definecolor{oc-cyan-2}{HTML}{99E9F2}
+\definecolor{oc-cyan-3}{HTML}{66D9E8}
+\definecolor{oc-cyan-4}{HTML}{3BC9DB}
+\definecolor{oc-cyan-5}{HTML}{22B8CF}
+\definecolor{oc-cyan-6}{HTML}{15AABF}
+\definecolor{oc-cyan-7}{HTML}{1098AD}
+\definecolor{oc-cyan-8}{HTML}{0C8599}
+\definecolor{oc-cyan-9}{HTML}{0B7285}
+
+\definecolor{oc-teal-0}{HTML}{E6FCF5}
+\definecolor{oc-teal-1}{HTML}{C3FAE8}
+\definecolor{oc-teal-2}{HTML}{96F2D7}
+\definecolor{oc-teal-3}{HTML}{63E6BE}
+\definecolor{oc-teal-4}{HTML}{38D9A9}
+\definecolor{oc-teal-5}{HTML}{20C997}
+\definecolor{oc-teal-6}{HTML}{12B886}
+\definecolor{oc-teal-7}{HTML}{0CA678}
+\definecolor{oc-teal-8}{HTML}{099268}
+\definecolor{oc-teal-9}{HTML}{087F5B}
+
+\definecolor{oc-green-0}{HTML}{EBFBEE}
+\definecolor{oc-green-1}{HTML}{D3F9D8}
+\definecolor{oc-green-2}{HTML}{B2F2BB}
+\definecolor{oc-green-3}{HTML}{8CE99A}
+\definecolor{oc-green-4}{HTML}{69DB7C}
+\definecolor{oc-green-5}{HTML}{51CF66}
+\definecolor{oc-green-6}{HTML}{40C057}
+\definecolor{oc-green-7}{HTML}{37B24D}
+\definecolor{oc-green-8}{HTML}{2F9E44}
+\definecolor{oc-green-9}{HTML}{2B8A3E}
+
+\definecolor{oc-lime-0}{HTML}{F4FCE3}
+\definecolor{oc-lime-1}{HTML}{E9FAC8}
+\definecolor{oc-lime-2}{HTML}{D8F5A2}
+\definecolor{oc-lime-3}{HTML}{C0EB75}
+\definecolor{oc-lime-4}{HTML}{A9E34B}
+\definecolor{oc-lime-5}{HTML}{94D82D}
+\definecolor{oc-lime-6}{HTML}{82C91E}
+\definecolor{oc-lime-7}{HTML}{74B816}
+\definecolor{oc-lime-8}{HTML}{66A80F}
+\definecolor{oc-lime-9}{HTML}{5C940D}
+
+\definecolor{oc-yellow-0}{HTML}{FFF9DB}
+\definecolor{oc-yellow-1}{HTML}{FFF3BF}
+\definecolor{oc-yellow-2}{HTML}{FFEC99}
+\definecolor{oc-yellow-3}{HTML}{FFE066}
+\definecolor{oc-yellow-4}{HTML}{FFD43B}
+\definecolor{oc-yellow-5}{HTML}{FCC419}
+\definecolor{oc-yellow-6}{HTML}{FAB005}
+\definecolor{oc-yellow-7}{HTML}{F59F00}
+\definecolor{oc-yellow-8}{HTML}{F08C00}
+\definecolor{oc-yellow-9}{HTML}{E67700}
+
+\definecolor{oc-orange-0}{HTML}{FFF4E6}
+\definecolor{oc-orange-1}{HTML}{FFE8CC}
+\definecolor{oc-orange-2}{HTML}{FFD8A8}
+\definecolor{oc-orange-3}{HTML}{FFC078}
+\definecolor{oc-orange-4}{HTML}{FFA94D}
+\definecolor{oc-orange-5}{HTML}{FF922B}
+\definecolor{oc-orange-6}{HTML}{FD7E14}
+\definecolor{oc-orange-7}{HTML}{F76707}
+\definecolor{oc-orange-8}{HTML}{E8590C}
+\definecolor{oc-orange-9}{HTML}{D9480F}
+
+\endinput
diff --git a/macros/latex/contrib/photobook/LICENSE b/macros/latex/contrib/photobook/LICENSE
new file mode 100644
index 0000000000..d28638300d
--- /dev/null
+++ b/macros/latex/contrib/photobook/LICENSE
@@ -0,0 +1,29 @@
+BSD 3-Clause License
+
+Copyright (c) 2021, Alex A. Naanou
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/macros/latex/contrib/photobook/Makefile b/macros/latex/contrib/photobook/Makefile
new file mode 100644
index 0000000000..fd760d0352
--- /dev/null
+++ b/macros/latex/contrib/photobook/Makefile
@@ -0,0 +1,375 @@
+#----------------------------------------------------------------------
+#
+#
+#
+# Main targets:
+# pdf - build class pdf documentation...
+# md - build class markdown documentation (XXX EXPERIMENTAL)...
+#
+# Distribution and install:
+# dist - build a distributable zip
+# install - install to user home latex path
+# uninstall - uninstall/remove from user home latex path
+# install-local - install to local latex path
+# (may require elevated privileges)
+# uninstall-local - uninstall/remove from local latex path
+# (may require elevated privileges)
+# install-devel - XXX
+# uninstall-devel - XXX
+#
+# Other targets:
+# sweep - cleanup auxiliary generated files
+# clean - cleanup repo
+#
+#
+# Variables:
+# CODE_INSTALL - set how we handle the installing code/source.
+# this can be:
+# strip - strip the docs from code (default)
+# copy - copy the code/doc file
+# link - link the code/doc files
+# (affects install and install-local targets)
+# INSTALL_PATH - install path
+# (only affects install target)
+#
+#
+# Examples:
+#
+# $ INSTALL_PATH=./test CODE_INSTALL=link make install
+# install to "./test" and do not strip docs.
+#
+#
+#
+#----------------------------------------------------------------------
+# Config...
+
+.EXPORT_ALL_VARIABLES:
+
+# NOTE: this makes things run consistently on different systems including
+# things like Android...
+SHELL := bash
+
+MODULE := photobook
+
+
+# metadata...
+#
+# NOTE: the code version is in the code...
+VERSION = $(strip $(shell \
+ cat $(MODULE).cls \
+ | grep 'VERSION{' \
+ | sed 's/.*{\(.*\)}.*/\1/'))
+DATE = $(strip $(shell date "+%Y%m%d%H%M"))
+COMMIT = $(strip $(shell git rev-parse HEAD))
+
+
+# installing code...
+#
+# this can be:
+# - strip
+# - copy
+# - link
+#
+# NOTE: we are doing things in different ways for different modes:
+# - copy vs. strip
+# - simply change the target name and let make figure it out...
+# - link vs. copy/strip
+# - $(LN) vs. $(INSTALL) in the install target...
+CODE_INSTALL ?= strip
+ifeq ($(CODE_INSTALL),strip)
+ MODULE_CODE := $(MODULE)-stripped
+else
+ MODULE_CODE := $(MODULE)
+endif
+
+
+# markdown dialect...
+#
+# XXX still needs some tweaking...
+MD_FORMAT ?= markdown_github
+
+
+# debug output...
+#
+# $DEBUG can either be empty or anything else...
+DEBUG ?=
+ifeq ($(DEBUG),)
+ STDERR := > /dev/null
+else
+ STDERR :=
+endif
+
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# Paths and files...
+
+# LaTeX...
+TEX_LOCAL = $(shell kpsewhich --var-value TEXMFLOCAL)
+TEX_HOME = $(shell kpsewhich --var-value TEXMFHOME)
+
+# default install target...
+INSTALL_PATH ?= $(TEX_HOME)
+
+# build...
+BUILD_DIR := build
+
+# distribution...
+#DIST_NAME := $(MODULE)-$(VERSION)
+DIST_NAME := $(MODULE)-$(VERSION)-$(DATE)
+DIST_DIR := dist
+DIST_FILES = \
+ README.md \
+ LICENSE \
+ Makefile \
+ $(wildcard scripts/*) \
+ $(MODULE).cls \
+ $(MODULE).pdf
+# Add these when ready...
+# $(wildcard examples/*) \
+# $(wildcard manual/*) \
+# $(wildcard workflow/*) \
+#
+
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# Software...
+
+# NOTE: need to run latex two+ times to build index, the simpler way to
+# go is to use latexmk...
+#TEX := lualatex
+TEX := latexmk -lualatex
+
+# Doc generator...
+DOC := ./scripts/cls2tex.sh
+
+MD := mkdir -p
+# XXX cp/install, technically this is only used in install* targets so
+# renaming CP -> INSTALL would seem logical...
+#INSTALL := cp
+INSTALL := install
+# copy preserving relative paths...
+RCP := cp -r --parents
+LN := cp -l
+
+
+
+#----------------------------------------------------------------------
+# Rules...
+
+# docs (pdf)...
+#
+%.pdf: %.tex
+ $(TEX) $< $(STDERR)
+
+# docs (markdown)...
+#
+# XXX this still needs some tweaking...
+# - |..| - verbatim does not work...
+# - || - parts of doc omitted...
+# - verbatim blocks get merged sometimes...
+# - ...
+# ...not sure if this can be tweaked...
+#%.md: %.tex
+# pandoc -t $(MD_FORMAT) -s $< -o $@
+
+# XXX EXPERIMENTAL...
+# XXX revise:
+# ...for this to work we need to replace:
+# \documentclass{ltxdoc}
+# to:
+# \documentclass[markdownextra]{internet}
+# XXX install the internet class...
+# https://github.com/loopspace/latex-to-internet
+# ...needs testing...
+%.md: %.tex
+ cat $< \
+ | sed 's/documentclass{ltxdoc}/documentclass[markdownextra]{internet}/' \
+ > $<.tmp
+ mv $<{.tmp,}
+ $(TEX) $< $(STDERR)
+
+
+# meta-section...
+#
+# NOTE: .sty and .cls are essentially the same in terms of documentation
+# generation...
+# XXX might be a good idea to place a link/footnote where metadocs were
+# originally located...
+# ...not sure yet manually or automatically...
+%.tex: %.sty %-meta.tex
+ $(DOC) $< > $@
+
+%.tex: %.cls %-meta.tex
+ $(DOC) $< > $@
+
+
+# meta docs...
+#
+# NOTE: this is a bit ugly, but allot less so than trying to push \verb
+# into a LaTeX macro/env and then getting it out again in one pice...
+%-meta.tex: %.sty
+ $(DOC) --prefix M $< > $@
+
+%-meta.tex: %.cls
+ $(DOC) --prefix M $< > $@
+
+
+# strip docs out...
+#
+# XXX can we unify these???
+%-stripped.tex: %.tex
+ $(DOC) --strip $< \
+ $(DOC) --prefix M --strip \
+ > $@
+
+%-stripped.sty: %.sty
+ $(DOC) --strip $< \
+ | $(DOC) --prefix M --strip \
+ > $@
+
+%-stripped.cls: %.cls
+ $(DOC) --strip $< \
+ | $(DOC) --prefix M --strip \
+ > $@
+
+
+
+#----------------------------------------------------------------------
+# Info targets...
+
+.PHONY: version
+version:
+ @echo $(VERSION)
+
+
+
+#----------------------------------------------------------------------
+# Main targets...
+
+.PHONY: pdf
+pdf: $(MODULE).pdf
+
+
+.PHONY: md
+md: $(MODULE).md
+
+
+# XXX STUB -- not sure how to approach this yet...
+# on one hand the manual should be a self-contained example in
+# itself on the other hand we already have a working Makefile
+# building the docs...
+.PHONY: manual
+manual:
+ $(MAKE) -C manual all
+ mv manual/*.pdf .
+
+
+%.zipnote: %.zip
+ zipnote $< > $@
+
+
+.PHONY: dist
+dist: $(DIST_FILES)
+ $(MD) $(DIST_DIR)
+ zip -Drq $(DIST_DIR)/$(DIST_NAME).zip $(DIST_FILES)
+ # Place everything in the module dir as per CTAN spec...
+ zipnote $(DIST_DIR)/$(DIST_NAME).zip \
+ | sed 's/^\@ \([^(].*\)$$/@ \1\n@=$(MODULE)\/\1/' \
+ | zipnote -w $(DIST_DIR)/$(DIST_NAME).zip
+
+CTAN: dist
+ $(MD) $(DIST_DIR)/CTAN
+ cp $(DIST_DIR)/$(DIST_NAME).zip $(DIST_DIR)/CTAN/$(MODULE).zip
+
+
+.PHONY: all
+all: pdf
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# Install/uninstall targets...
+
+# NOTE: keep the dir clean unless this is explicitly built...
+.INTERMEDIATE: \
+ $(MODULE)-stripped.cls \
+ $(MODULE)-stripped.sty \
+ $(MODULE)-stripped.tex
+
+
+# user install...
+.PHONY: install
+install: pdf $(MODULE_CODE).cls
+ $(MD) $(INSTALL_PATH)/{tex,source,doc}/latex/$(MODULE)
+ $(INSTALL) "$(MODULE).pdf" $(INSTALL_PATH)/doc/latex/$(MODULE)
+ $(INSTALL) "$(MODULE_CODE).cls" $(INSTALL_PATH)/tex/latex/$(MODULE)/$(MODULE).cls
+# # NOTE: we are printing only the stuff we are doing...
+ @run(){ echo "$$@" ; "$$@" ; } ;\
+ if [[ $${CODE_INSTALL} == "link" ]] ; then \
+ run $(LN) \
+ "$(INSTALL_PATH)/tex/latex/$(MODULE)/$(MODULE).cls" \
+ "$(INSTALL_PATH)/source/latex/$(MODULE)/" ;\
+ else \
+ run $(INSTALL) "$(MODULE).cls" "$(INSTALL_PATH)/source/latex/$(MODULE)" ;\
+ fi
+
+.PHONY: uninstall
+uninstall:
+ rm -rf $(INSTALL_PATH)/{tex,source,doc}/latex/$(MODULE)
+ @echo "###"
+ @echo "### NOTE: this can leave the following dirs empty:"
+ @echo "### $(INSTALL_PATH)/{tex,source,doc}/latex/"
+ @echo "###"
+
+
+# local/system install...
+# NOTE: this should be run with sudo, i.e.:
+# $ sudo make install-local
+.PHONY: install-local
+install-local: INSTALL_PATH := $(TEX_LOCAL)
+install-local: install
+
+.PHONY: uninstall-local
+uninstall-local: INSTALL_PATH := $(TEX_LOCAL)
+uninstall-local: uninstall
+
+
+# XXX need to make this work for windows...
+# ...this must depend not on the OS but rather on in what context
+# (cygwin/wsl/windows), latex is running...
+# ...this seems to work:
+# > mkling TO FROM
+# but like ln, it's args are in the wrong order...
+# ...cp -s creates links usable from cygwin but not usable from
+# windows...
+.PHONY: install-devel
+install-devel: CODE_INSTALL := copy
+install-devel: INSTALL := cp -s
+install-devel: install
+
+.PHONY: uninstall-devel
+uninstall-devel: uninstall
+
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# Cleanup targets...
+
+.PHONY: sweep
+sweep:
+ rm -f \
+ *.{aux,fls,glo,gls,hd,idx,ilg,ind,ins,log,out,toc,fdb_latexmk} \
+ *-stripped.{tex,sty,cls} \
+ *-meta.{tex,sty,cls} \
+ ${MODULE}.tex
+
+
+.PHONY: clean
+clean: sweep
+ rm -rf $(DIST_DIR) $(BUILD_DIR) $(MODULE).md *.pdf
+
+
+
+#----------------------------------------------------------------------
+# vim:set ts=4 sw=4 :
diff --git a/macros/latex/contrib/photobook/README.md b/macros/latex/contrib/photobook/README.md
new file mode 100644
index 0000000000..cbab31c280
--- /dev/null
+++ b/macros/latex/contrib/photobook/README.md
@@ -0,0 +1,52 @@
+# photobook
+
+[LaTeX](https://www.latex-project.org/) document class for making photo books.
+
+
+## Build requirements for docs
+
+- LaTeX tool chain (including: `lualatex`, `latexmk`, ..)
+ The simplest way to get started is [TeX Live](https://www.tug.org/texlive/),
+ either a full install or for specific modules see the _Packages_ section
+ in [photobook.cls](./photobook.cls),
+- Un\*x-like environment (`bash`, GNU Make, coreutils, ...),
+ on Windows systems, either [Cygwin](https://www.cygwin.com/) or
+ [WSL/WSL2](https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux)
+ should work fine.
+
+
+
+## Build / Install
+
+```shell
+# get the source...
+$ git clone https://github.com/flynx/photobook.git
+
+# if desired, install in the user context...
+$ cd ./photobook
+$ make install
+```
+
+If only building the docs is required without installing:
+```shell
+$ make pdf
+```
+
+For more info on `make` targets see the: [./Makefile](./Makefile)
+
+
+
+## Authors
+
+[Alex A. Naanou](https://github.com/flynx)
+
+
+
+## License
+
+[BSD 3-Clause License](./LICENSE)
+
+Copyright (c) 2021-2022, Alex A. Naanou,
+All rights reserved.
+
+
diff --git a/macros/latex/contrib/photobook/photobook.cls b/macros/latex/contrib/photobook/photobook.cls
new file mode 100644
index 0000000000..c4f2d56c05
--- /dev/null
+++ b/macros/latex/contrib/photobook/photobook.cls
@@ -0,0 +1,5058 @@
+%----------------------------------------------------------------------
+%
+%
+% This does the following:
+% - sets up the document/pdf for viewing as a book
+% - adds support for page bleeds
+% - adds basic templates for image pages
+%
+%
+% This file contains both the code and the reference, but in a slightly
+% more readable format than the traditional LaTeX .dtx format. In general
+% there are two main sections:
+% - code
+% - reference
+% lines starting with "%%" or "%X" where X is a section id
+% Sections are parts of the reference that are logically ordered differently
+% than the code, e.g. main user tools should have priority in the reference
+% while meta code (identified by "%M") can be described later, while in code
+% we strictly need to define macros before they are used thus meta-macros
+% and other building blocks and components come before the user tools.
+%
+% Docs are build by the Makefile, so reference it for more info.
+%
+% $ make doc
+%
+%
+% NOTE: in a stripped code install this file may contain only code and
+% code comments, in this case, to see the docs refer to either the
+% source or the actual documentation/pdf.
+% NOTE: the stripped code file is auto-generated, it is not recommended
+% to edit it directly, edit the source instead.
+%
+%
+% XXX Q: do we add the pdf to the repo and if so, should it be
+% compressed (diff-able) or uncompressed (blob)??
+% XXX revise \clearcaption / \captionclearpage...
+% XXX unify API -- see CellContent env...
+% XXX make this loadable both as a class and as a package...
+% \@ifclassloaded{photobook}{<true>}{<false>}
+% XXX revise command naming -- should be obvious from name what is what:
+% - meta commands -- ??? (currently same as templates)
+% - general macros -- \usecell{..}
+% - templates -- \ImagePage{..}
+% XXX see where we need to \ignorespaces...
+% XXX might be a good idea to add a spine calculator...
+% XXX add list of dependencies to docs...
+% XXX manual / book:
+% - basic usage
+% - setup
+% - templates (copyright, front matter, back matter, acknowledgements, ...)
+% - using templates
+% - pre-print
+% - customizing
+% - extending
+%
+%
+%----------------------------------------------------------------------
+
+%%% NOTE: \def\<module-name>@[A-Z]+ macros will be visible to both the
+%%% code and the generated docs...
+\edef\photobook@FILEVERSION{v0.1}
+\edef\photobook@FILEDATE{2021-07-28}
+
+
+%% \documentclass{ltxdoc}
+%%
+%%% \usepackage{iftex}
+%%% \ifluatex
+%%% \edef\pdfcompresslevel{\pdfvariable compresslevel}
+%%% \edef\pdfobjcompresslevel{\pdfvariable objcompresslevel}
+%%% \fi
+%%% \pdfcompresslevel 0
+%%% \pdfobjcompresslevel 0
+%%
+%% \usepackage[a4paper,margin=25mm,left=55mm,nohead]{geometry}
+%%
+%% % NOTE: this needs to load before hyperref or bookmarks will break...
+%% % NOTE: loading hyperref here will break it loading later in one of
+%% % the packages...
+%% \usepackage{titlesec}
+%%
+%% \usepackage[numbered]{hypdoc}
+%% \usepackage{doctools}
+%% \usepackage{needspace}
+%%
+%% \usepackage[toc]{multitoc}
+%% \renewcommand*{\multicolumntoc}{2}
+%% \setlength{\columnseprule}{0.5pt}
+%%
+%% \usepackage{imakeidx}
+%% \makeindex[
+%% columns=1,
+%% title=Alphabetical Index,
+%% intoc,
+%% options= -s photobook.ist ]
+%%
+%%% \newcommand\DescribeGlobal[1]{%
+%%% \DescribeMacro{#1}}
+%%
+%% \newcommand\LEGACY[1][]{\fbox{LEGACY #1}}
+%% \newcommand\EXPERIMENTAL[1][]{\fbox{EXPERIMENTAL #1}}
+%%
+%%% sections to new pages...
+%% \newcommand\sectionbreak{\Needspace{5\baselineskip}}
+%%
+%% % remove section numbering...
+%% \setcounter{secnumdepth}{0}
+%%
+%% % paragraph configuration...
+%% \setlength\parindent{0pt}
+%% \setlength\parskip{0.5em}
+%%
+%% \newcommand\blankfootnote[1]{%
+%% \begingroup
+%% \renewcommand\thefootnote{}%
+%% \footnote{#1}%
+%% \addtocounter{footnote}{-1}%
+%% \endgroup}
+%%
+%%
+%% \begin{document}
+%%
+%% \title{\textsf{photobook} --- Document class for building photo-books
+%% \thanks{This file describes version \FILEVERSION,
+%% last revised \FILEDATE.}}
+%%
+%% \author{Alex A. Naanou\thanks{E-mail: alex.nanou@gmail.com}}
+%%
+%% \date{Released \FILEDATE}
+%%
+%%
+%% \maketitle
+%%
+%% \begin{abstract}
+%% The |photobook| \LaTeX\space document class extends the |book| class
+%% defining a set of parameters, meta-macros, macros and environments
+%% with reasonable defaults to help typeset, build and print books mainly
+%% based on visual/image content.
+%% \end{abstract}
+%%
+%% \tableofcontents
+%%
+%
+%%%% Introduction
+%
+%% \LaTeX\ is great with textual and text-primary content with figures
+%% peppered in, as long as pictures/figures flow within, with or as part
+%% of text, vanilla \LaTeX\ is fantastic.
+%%
+%% One can relatively easily stretch the flow concept to more complex
+%% layouts introducing {\it even} and {\it odd} pages (the |book| class is
+%% one example) and flow rules based on them, but the next step, {\it bleeds},
+%% combining page pairs into {\it spreads} as is often needed when designing
+%% image-oriented books is lacking. Full-bleed images/pages can be implemented
+%% manually, some more effort is needed to split something horizontally
+%% into a page spread, but doing so for whole book's worth of content is
+%% not practical -- automating and experimenting with this process is
+%% how |photobook| began.
+%%
+%% |photobook| extends the |book| class adding page layout types, bleeds
+%% and other global geometry configuration, introduces the {\it page} and
+%% {\it spread} as first-class elements into the document flow. These concepts
+%% are generalized as |cell|s. A |cell| is similar to a figure, it can
+%% be placed within the document flow, but unlike a figure a |cell| can
+%% be aligned relative to a page, it can fill a page, a cell can even be
+%% horizontally split to fill several pages (how spreads are implemented).
+%%
+%% On top of the |cell|, {\it page}, and {\it spread} concepts, |photobook|
+%% also builds a set of configurable high level macros and templates for
+%% common use cases like full bleed image spreads, foldouts, ... etc.
+%
+%
+%%%% Usage
+%
+%% >> \documentclass[<options>]{photobook}
+%%
+%
+%----------------------------------------------------------------------
+
+\NeedsTeXFormat{LaTeX2e}
+
+\ProvidesClass{photobook}
+ [\photobook@FILEDATE \space \photobook@FILEVERSION Photo book document class]
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%%%% Options
+%%
+
+\edef\photobook@options{\@classoptionslist}
+
+\RequirePackage{kvoptions}
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Helpers...
+
+\newcommand\@DeclareLiteralOptionTo[2]{%
+ \DeclareVoidOption{#2}{%
+ \expandafter\edef\csname photobook@#1\endcsname{#2}}}
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%%%%% Page geometry
+%
+%% \DescribeMacro{blockwidth=<len>}
+%% \DescribeMacro{blockheight=<len>}
+%% \DescribeMacro{bindingoffset=<len>}
+%% \DescribeMacro{bleed=<len>}
+%
+%% This is similar to what |geometry| does, but adds bleed support.
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% <---> bleed <---> bleed
+%%
+%% + - - - - - - - - - - - - - - - - - - - - - + - + ^
+%% . . . | bleed
+%% . +---------------------------------------+----- v . . ---
+%% . | ^ . = .
+%% . | . . . . . . | . . = . ^
+%% . |<-- blockwidth ----------------------->= . |
+%% . | . | . . = . |
+%% . | | . = . textheight
+%% . | . Page | . . = . |
+%% . | blockheight . = . |
+%% . | . | . . = . |
+%% . | | <---> bindingoffset |
+%% . | . . . . . . | . . = . v
+%% . | v . = .
+%% . +---------------------------------------+----- ^ . . ---
+%% . . . . | bleed
+%% + - - - - - - - - - - - - - - - - - - - - - + - + v
+%% . .
+%% | <-- textwidth --------------> . |
+%% ^ binding line
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+% NOTE: if blockwidth/blockheight are set they will force recalculations
+% and overriding of the paperwidth/paperheight if they were changed
+% by the user code anywhere between \documentclass[..]{photobook}
+% and \begin{document}...
+\DeclareStringOption{blockwidth}
+\DeclareStringOption{blockheight}
+\DeclareStringOption[0pt]{bindingoffset}[10mm]
+\DeclareStringOption[5mm]{bleed}[5mm]
+
+%% \DescribeMacro{flatfold=<len>}
+%
+%% Sets the clearance set aside for a flat fold, used for foldouts
+%% (see: \nameref{subsec:Foldout page cells} section).
+%%
+\DeclareStringOption[0pt]{flatfold}[0.2mm]
+
+%% \DescribeMacro{pagefold=<fold>}
+%
+%% Sets the default fold type.
+%%
+%% Can be |in| or |out|.
+%%
+% XXX check values...
+\DeclareStringOption{pagefold}
+
+%% \DescribeMacro{foldout=<fold-spec>}
+%
+%% Sets the default fold specification (i.e. sets |\defaultfoldout|).
+%%
+%% For more information see: \nameref{subsec:Foldout page cells} section.
+%%
+\DeclareStringOption[2]{foldout}[2]
+
+
+
+%%%%% layout
+%
+%% \DescribeMacro{layoutmode=<layout>}
+%% \DescribeMacro{block}
+%% \DescribeMacro{endpaper}
+%% \DescribeMacro{cover}
+%% \DescribeMacro{jacket}
+%
+%% Sat page layout mode.
+%
+%% >> layoutmode=<option>
+%%
+%% |block| (default)
+%%
+%% Basic page layout.
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% blockwidth
+%% <--------------->
+%%
+%% +---------------+
+%% | |
+%% | |
+%% | page |
+%% | |
+%% | |
+%% +---------------+
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%%
+%% |endpaper|:
+%%
+%% Endpaper layout.
+%%
+% XXX should this use \flatfold???
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% blockwidth 2x
+%% <------------------------------->
+%%
+%% +---------------+---------------+
+%% | . |
+%% | . |
+%% | endpaper |
+%% | . |
+%% | . |
+%% +---------------+---------------+
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%%
+%% |cover|
+%%
+%% Book cover layout
+%%
+%% \DescribeMacro{coverboardgrow=<len>}
+%% \DescribeMacro{coverflap=<len>}
+%% \DescribeMacro{spinewidth=<len>}
+%% \DescribeMacro{spinewidth=<len>}
+%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% blockwidth blockwidth
+%% <---------------> <--------------->
+%% <-> coverboardgrow <-> coverboardgrow
+%% <-> coverflap . <-> coverflap
+%% . . . . . .
+%% +-------------------++---++-------------------+ ---
+%% | + - - - - - - - - ++ - ++ - - - - - - - - + | --^ coverflap
+%% | . + - - - - - - - ++ - ++ - - - - - - - + . | --^ coverboardgrow
+%% | . . .. .. . . | ^
+%% | . . .. .. . . | | blockheight
+%% | . . Back .. .. Front . . | |
+%% | . . .. .. . . | |
+%% | . . .. .. . . | v
+%% | . + - - - - - - - ++ - ++ - - - - - - - + . | --v coverboardgrow
+%% | + - - - - - - - - ++ - ++ - - - - - - - - + | --v coverflap
+%% +-------------------++---++-------------------+ ---
+%% . .
+%% ^. .^ spinefold
+%% . .
+%% <---> spinewidth
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%%
+%% |jacket|
+%%
+%% Dust jacket layout
+%%
+%% \DescribeMacro{jacketwrap=<len>}
+%% \DescribeMacro{jacketflap=<len>}
+%% \DescribeMacro{jacketflapfront=<len>}
+%% \DescribeMacro{jacketflapback=<len>}
+%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% <---> jaketflap/jacketflapback <---> jaketflap/jacketflapfront
+%% . . . .
+%% . . blockwidth blockwidth . .
+%% . . <---------------> <---------------> . .
+%% . .<-> coverboardgrow <-> coverboardgrow
+%% . . . . . .
+%% +---++-----------------++---++-----------------++---+ ---
+%% | .. + - - - - - - - ++ - ++ - - - - - - - + .. | --^ coverboardgrow
+%% | .. . .. .. . .. | ^
+%% | .. . .. .. . .. | | blockheight
+%% | .. . Back .. .. Front . .. | |
+%% | .. . .. .. . .. | |
+%% | .. . .. .. . .. | v
+%% | .. + - - - - - - - ++ - ++ - - - - - - - + .. | --v coverboardgrow
+%% +---++-----------------++---++-----------------++---+ ---
+%% .. . . ..
+%% ^ jacketwrap . . ^ jacketwrap
+%% ^. .^ spinefold
+%% . .
+%% <---> spinewidth
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%
+% XXX in cover layout setup pdf boxes in a way to use \bleed as foldover...
+% ...see hyperref docs to set pdf view/print area (???)
+% .....should also set \bleed default to something like 17mm
+% XXX do we need to implement cover fold over???
+% XXX fold/cut marks???
+\DeclareStringOption[block]{layoutmode}[block]
+\@DeclareLiteralOptionTo{layoutmode}{block}
+%\@DeclareLiteralOptionTo{layoutmode}{web}
+\@DeclareLiteralOptionTo{layoutmode}{endpaper}
+% XXX add overhang...
+% XXX minght be a good idea to add cover types as separate values and
+% preset defeaults per type, e.g:
+% layoutmode= hardcover softcover
+% should also set:
+% spinefold= 5mm 5mm
+% coverflap= 17mm 0mm
+% bleed= 0mm 5mm
+\@DeclareLiteralOptionTo{layoutmode}{cover}
+%\@DeclareLiteralOptionTo{layoutmode}{hardcover}
+%\@DeclareLiteralOptionTo{layoutmode}{softcover}
+\@DeclareLiteralOptionTo{layoutmode}{jacket}
+
+
+% NOTE: this is only used when layoutmode=cover
+% NOTE: these are documented inline with layoutmode=.. docs...
+\DeclareStringOption[0pt]{spinewidth}[0pt]
+\DeclareStringOption[0pt]{spinefold}[7mm]
+\DeclareStringOption[0pt]{coverboardgrow}[3mm]
+\DeclareStringOption[0pt]{coverflap}[17mm]
+\DeclareStringOption[0pt]{jacketwrap}[2mm]
+\DeclareStringOption[0pt]{jacketflap}[50mm]
+\DeclareStringOption[0pt]{jacketflapfront}[50mm]
+\DeclareStringOption[0pt]{jacketflapback}[50mm]
+
+
+
+%%%%% Image clearance
+%
+%% \DescribeMacro{clearimage=<len>}
+%
+%% Distance from image to paper border (clearance) for full-page images.
+%%
+%% this can be:
+%% - negative value set image bleed,
+%% - positive value set distance from paper edge to image.
+%%
+\DeclareStringOption{clearimage}[10mm]
+
+
+%%%%% Image block layout
+%
+%% \DescribeMacro{imageblockwidth=<len>}
+%% \DescribeMacro{imageblockheight=<len>}
+%% \DescribeMacro{imageblockoffsettop=<len>}
+%
+%% Image block size relative to text block.
+%%
+\DeclareStringOption[0.85]{imageblockwidth}[1]
+\DeclareStringOption[0.85]{imageblockheight}[1]
+\DeclareStringOption[-0.05]{imageblockoffsettop}[0]
+
+%%%%% PDF Viewer layout
+%
+%% \DescribeMacro{pdfpagelayout=<mode>}
+%% \DescribeMacro{SinglePage}
+%% \DescribeMacro{OneColumn}
+%% \DescribeMacro{TwoColumnLeft}
+%% \DescribeMacro{TwoColumnRight}
+%% \DescribeMacro{TwoPageLeft}
+%% \DescribeMacro{TwoPageRight}
+%
+%% Sets PDF page display mode.
+%%
+%% Defaults to |TwoColumnLeft| for |layoutmode=block| and |SinglePage| for
+%% other modes.
+%%
+%% See:
+%% \href{https://ctan.altspu.ru/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf}{hyperref}'s
+%% |pdfpagelayout| for more options.
+%%
+\DeclareStringOption{pdfpagelayout}
+\@DeclareLiteralOptionTo{pdfpagelayout}{SinglePage}
+\@DeclareLiteralOptionTo{pdfpagelayout}{OneColumn}
+\@DeclareLiteralOptionTo{pdfpagelayout}{TwoColumnRight}
+\@DeclareLiteralOptionTo{pdfpagelayout}{TwoColumnLeft}
+\@DeclareLiteralOptionTo{pdfpagelayout}{TwoPageRight}
+\@DeclareLiteralOptionTo{pdfpagelayout}{TwoPageLeft}
+
+
+%%%%% Other options
+%
+%% \DescribeMacro{nofoldmarks}
+%
+%% If given disable fold marks.
+%%
+%% This sets |\iffoldmarks| to false, otherwise it is set to true.
+%%
+\DeclareBoolOption{nofoldmarks}
+
+%% \DescribeMacro{foldmarksize=<len>}
+%
+%% Sets the fold mark size (default: 6mm).
+%%
+\DeclareStringOption[6mm]{foldmarksize}
+
+%% \DescribeMacro{geometrynodefaults}
+%
+%% let the user set geometry defaults.
+%%
+%% If this is not set |photobook| will override some user settings when
+%% initializing geometry.
+%%
+%% If set |photobook| will only set override:
+%% \begin{verbatim}
+%% paperwidth=\bleedblockwidth
+%% paperheight=\bleedblockheight
+%% bindingoffset=\bindingoffset
+%% \end{verbatim}
+%%
+\DeclareBoolOption{geometrynodefaults}
+
+%% \DescribeMacro{roundprintedlengthsto=<num>}
+%
+%% Number of digits to round printed lengths to (default: 1).
+%%
+%% This is a shorthand to |numprint|'s |\nprounddigits{..}|, us it to
+%% change values mid-document if needed.
+%%
+%% This is mostly used for |\GenerateTemplate|.
+%%
+\DeclareStringOption[1]{roundprintedlengthsto}[1]
+
+
+\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{book}}
+\ProcessKeyvalOptions*
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Parent class...
+%
+\LoadClass[9pt, final, openany]{book}
+
+
+
+%----------------------------------------------------------------------
+% Packages...
+%
+% NOTE: imports are after \LoadClass{ .. } to avoid figting over macro
+% names...
+
+\RequirePackage{calc}
+\RequirePackage{xargs}
+\RequirePackage{ifthen}
+\RequirePackage{iftex}
+\RequirePackage{pgffor}
+\RequirePackage{xint}
+\RequirePackage{xinttools}
+\RequirePackage{listofitems}
+\RequirePackage{xkeyval}
+\RequirePackage{etoolbox}
+\RequirePackage{atbegshi}
+%\RequirePackage{afterpage}
+%\RequirePackage{changepage}
+\RequirePackage[unicode]{hyperref}
+%\RequirePackage{pdfcomment}
+\RequirePackage{eso-pic}
+\RequirePackage{environ}
+\RequirePackage{numprint}
+\RequirePackage{trimclip}
+\RequirePackage{xcolor}
+\RequirePackage{colorspace}
+\RequirePackage{graphicx}
+\RequirePackage{adjustbox}
+\RequirePackage[absolute]{textpos}
+\RequirePackage{fancyvrb}
+\RequirePackage{tikz}
+%\RequirePackage[linewidth=1pt]{mdframed}
+% XXX flow text frames...
+% XXX this messes with geometry....
+%\RequirePackage{flowfram}
+\RequirePackage{rotating}
+\RequirePackage{fancyhdr}
+\RequirePackage{pdfpages}
+
+
+
+%----------------------------------------------------------------------
+%%%% Globals
+% XXX move these out to relevant sections + add a separate globals glossary...
+%
+% NOTE: most of these are setup in \InitPages...
+
+%%% \DescribeGlobal{layoutmode}
+%% \DescribeMacro{\layoutmode=<mode>}
+%
+%% Layout mode
+%%
+\edef\layoutmode{\photobook@layoutmode}
+
+% layout mode tests...
+\newif\ifcoverlayout
+\newif\ifhardcoverlayout
+\newif\ifsoftcoverlayout
+\newif\ifendpaperlayout
+\newif\ifjacketlayout
+% aggregates...
+\newif\ifcoverlikelayout
+\newif\ifblocklayout
+
+%% \DescribeMacro{\pdfpagelayout=<mode>}
+%
+%% Controls the default layout in the pdf viewer.
+%%
+\edef\pdfpagelayout{\photobook@pdfpagelayout}
+
+%% \DescribeMacro{\spinewidth=<len>}
+%
+%% Spine width
+%%
+\newlength\spinewidth
+\setlength\spinewidth{\photobook@spinewidth}
+
+%% \DescribeMacro{\spinefold=<len>}
+%
+%% Spine fold width
+%%
+\newlength\spinefold
+\setlength\spinefold{\photobook@spinefold}
+
+%% \DescribeMacro{\coverboardgrow=<len>}
+%
+%% Controls how much biger the cover board is than the page block
+%%
+\newlength\coverboardgrow
+\setlength\coverboardgrow{\photobook@coverboardgrow}
+
+%% \DescribeMacro{\coverflap=<len>}
+%
+%% Cover flap
+%%
+\newlength\coverflap
+
+%% \DescribeMacro{\jacketwrap=<len>}
+%% \DescribeMacro{\jacketflap=<len>}
+%% \DescribeMacro{\jacketflapfront=<len>}
+%% \DescribeMacro{\jacketflapback=<len>}
+%
+%% Jacker configuration
+%%
+\newlength\jacketwrap
+\newlength\jacketflap
+\newlength\jacketflapfront
+\newlength\jacketflapback
+
+%% \DescribeMacro{\blockwidth=<len>}
+%% \DescribeMacro{\blockheight=<len>}
+%
+%% Page block size
+%%
+% NOTE: page and bleed block sizes are set via \InitPages
+\newlength\blockwidth
+\newlength\blockheight
+
+%% \DescribeMacro{\bleedblockwidth=<len>}
+%% \DescribeMacro{\bleedblockheight=<len>}
+%
+%% Page block size with bleeds
+%%
+%% These are equivalent to |\paperwidth| and |\paperheight| but are
+%% independent of them...
+%%
+\newlength\bleedblockwidth
+\newlength\bleedblockheight
+
+%% \DescribeMacro{\pageblockwidth=<len>}
+%% \DescribeMacro{\pageblockheight=<len>}
+%
+%% Original page block size
+%%
+%% for the block layout these are the same as |\blockwidth| and |\blockheight|
+%% for other layouts these are the original page layout size while the
+%% |\blockwidth| are set tho the current layout visible size.
+%%
+\newlength\pageblockwidth
+\newlength\pageblockheight
+
+%% \DescribeMacro{\bleed=<len>}
+%
+%% Page bleed size
+%%
+\newlength\bleed
+\setlength\bleed{\photobook@bleed}
+
+%% \DescribeMacro{\bindingoffset=<len>}
+%
+%% Binding offset
+%%
+\newlength\bindingoffset
+\setlength\bindingoffset{\photobook@bindingoffset}
+
+%% \DescribeMacro{\defaultfoldout=<fold-spec>}
+%
+%% Set the default fold specification.
+%%
+%% This can be set via the |foldout| class option.
+%%
+%% For more information see: \nameref{subsec:Foldout page cells} section.
+%%
+\edef\defaultfoldout{\photobook@foldout}
+
+%% \DescribeMacro{\flatfold=<len>}
+%
+%% Sets the amount of paper to account for a flat fold.
+%%
+\newlength\flatfold
+\setlength\flatfold{\photobook@flatfold}
+
+%% \DescribeMacro{\pagefold=<fold>}
+%
+%% Default fold type.
+%%
+%% This defaults to |out| for |jacket| and |cover| and to |in| for other
+%% layouts.
+%%
+\newcommand\photobook@setpagefold[1]{%
+ \edef\pagefold{
+ \ifx \photobook@pagefold \empty%
+ #1%
+ \else%
+ \photobook@pagefold\fi}}
+\photobook@setpagefold{in}
+
+%% \DescribeMacro{\foldmarkoffset=<len>}
+%
+%% Sets the offset of fold marks from outside of page edge (default: |0.5\bleed|).
+%%
+%% Note that this can either be a command or a dimension.
+%%
+%\def\foldmarkoffset{0.5\bleed}
+\def\foldmarkoffset{2mm}
+
+%% \DescribeMacro{\foldmarksize=<len>}
+%
+%% Sets fold marker size (vertical).
+%%
+\newlength\photobook@foldmarklen
+\setlength\photobook@foldmarklen{\photobook@foldmarksize}
+
+%% \DescribeMacro{\iffoldmarks}
+%
+%% Disable/enable fold marks.
+%%
+%% The default is true, to toggle on/off use |\foldmarkstrue| / |\foldmarksfalse|.
+%%
+%% This can be set globally via the |nofoldmarks| class option.
+%%
+\newif\iffoldmarks
+\ifphotobook@nofoldmarks%
+ \foldmarksfalse%
+\else%
+ \foldmarkstrue\fi%
+
+%% \DescribeMacro{\clearimage=<len>}
+%
+%% Image clearance
+%%
+% NOTE: since this can be any number but we need to detect if it was set
+% manually we'll set it to \maxdimen and hope noe will print
+% something big enough and dare to use it as image clearance...
+\newlength{\clearimage}
+\setlength\clearimage{\maxdimen}
+
+%% \DescribeMacro{\imageblockwidth=<ratio>}
+%% \DescribeMacro{\imageblockheight=<ratio>}
+%
+%% Image block width relative to |\textwidth|
+%%
+\edef\imageblockwidth{\photobook@imageblockwidth}
+\edef\imageblockheight{\photobook@imageblockheight}
+
+%% \DescribeMacro{\pagetextwidth=<len>}
+%% \DescribeMacro{\pagetextheight=<len>}
+%
+%% Root page text width/height.
+%%
+\newlength\pagetextwidth
+\setlength\pagetextwidth{\textwidth}
+\newlength\pagetextheight
+\setlength\pagetextheight{\textheight}
+
+%% \DescribeMacro{\imageblockoffsettop=<ratio>}
+%
+%% The ration by which the image is raised in |\ImagePage{..}| and
+%% derived templates.
+%%
+\edef\imageblockoffsettop{\photobook@imageblockoffsettop}
+
+%% \DescribeMacro{\clearcaption=<len>}
+%
+%% Block caption clearance from edge of parent cell.
+%%
+%% Used as default by |\captionblockcell{..}|
+%%
+% XXX do we need this???
+\newlength\clearcaption
+\setlength\clearcaption{0pt}
+
+%% \DescribeMacro{\captioncellspacing=<len>}
+%
+%% Block caption spacing from parent cell.
+%%
+%% Used as default by |\captionblockcell{..}|
+%%
+% XXX should this be used in other caption cells???
+\newlength\captioncellspacing
+\setlength\captioncellspacing{5pt}
+
+
+%% \DescribeMacro{\captionclearpage=<len>}
+%
+%% The distance between a caption block on a template page and page
+%% borders (defaults to: |\clearimage|).
+%%
+%% This is relevant only in page/spread templates.
+%%
+\def\captionclearpage{\clearimage}
+
+
+%% \DescribeMacro{\cellparentwidth=<len>}
+%% \DescribeMacro{\cellparentheight=<len>}
+%% \DescribeMacro{\cellwidth=<len>}
+%% \DescribeMacro{\cellheight=<len>}
+%% \DescribeMacro{\celloffsetleft=<len>}
+%% \DescribeMacro{\celloffsettop=<len>}
+%% \DescribeMacro{\clearance=<len>}
+%
+%% Cell geometry.
+%%
+%% These are set automatically by cells, thus it is not recommended to
+%% edit them manually.
+%%
+%% For more details see the \nameref{subsec:Cells} section.
+%%
+\newlength\cellparentwidth
+\setlength\cellparentwidth{\paperwidth}
+\newlength\cellparentheight
+\setlength\cellparentheight{\paperheight}
+\newlength\cellwidth
+\setlength\cellwidth{\cellparentwidth}
+\newlength\cellheight
+\setlength\cellheight{\cellparentheight}
+\newlength\celloffsetleft
+\setlength\celloffsetleft{0pt}
+\newlength\celloffsettop
+\setlength\celloffsettop{0pt}
+\newlength\clearance
+\setlength\clearance{0pt}
+
+
+%% \DescribeMacro{\clearfoldoutbinding=<len>}
+%% \DescribeMacro{\clearfoldoutfold=<len>}
+%% \DescribeMacro{\clearfoldoutedge=<len>}
+%
+%% Foldout geometry.
+%%
+%% For more info see \nameref{subsec:Foldout page cells} section.
+%%
+\newlength\clearfoldoutbinding
+\setlength\clearfoldoutbinding{8mm}
+\newlength\clearfoldoutfold
+\setlength\clearfoldoutfold{5mm}
+\newlength\clearfoldoutedge
+\setlength\clearfoldoutedge{1mm}
+
+
+
+%----------------------------------------------------------------------
+%%%% Initialization
+%%
+%% \DescribeMacro{\InitPages}
+%
+%% Initialize page dimensions.
+%%
+%% This is not intended for direct use.
+%%
+% XXX do we need to document this??
+% ...is there a usecase for calling this manually?
+\newcommand\InitPages{
+ % layout bools/tests...
+ \coverlayoutfalse
+ \hardcoverlayoutfalse
+ \softcoverlayoutfalse
+ \endpaperlayoutfalse
+ \jacketlayoutfalse
+ \coverlikelayoutfalse
+ \blocklayoutfalse
+ \ifdefstring{\layoutmode}{block}{
+ \blocklayouttrue }{}
+ \ifdefstring{\layoutmode}{cover}{
+ \coverlayouttrue
+ \coverlikelayouttrue }{}
+ \ifdefstring{\layoutmode}{hardcover}{
+ \hardcoverlayouttrue
+ \coverlikelayouttrue }{}
+ \ifdefstring{\layoutmode}{softcover}{
+ \softcoverlayouttrue
+ \coverlikelayouttrue }{}
+ \ifdefstring{\layoutmode}{jacket}{%
+ \jacketlayouttrue
+ \coverlikelayouttrue }{}
+ \ifdefstring{\layoutmode}{endpaper}{
+ \endpaperlayouttrue }{}
+ % pdf layout...
+ \ifx\photobook@pdfpagelayout\empty
+ \ifblocklayout
+ \def\pdfpagelayout{TwoPageRight}
+ \else
+ \def\pdfpagelayout{SinglePage}\fi
+ \else
+ \def\pdfpagelayout{\photobook@pdfpagelayout}\fi
+ % items to ignore in different layouts...
+ % XXX is this the correct way to go???
+ \ifcoverlayout
+ \setlength\coverflap{\photobook@coverflap}
+ \else
+ \setlength\coverflap{0pt}\fi
+ \ifjacketlayout
+ \setlength\jacketwrap{\photobook@jacketwrap}
+ \setlength\jacketflap{\photobook@jacketflap}
+ \else
+ \setlength\jacketwrap{0pt}
+ \setlength\jacketflap{0pt}\fi
+ % flaps...
+ \ifdim\jacketflapfront=0pt
+ \setlength\jacketflapfront{\jacketflap}\fi
+ \ifdim\jacketflapback=0pt
+ \setlength\jacketflapback{\jacketflap}\fi
+ % block size...
+ \ifdim\blockwidth=0pt
+ % layout: block...
+ \setlength\blockwidth{
+ \ifx\photobook@blockwidth\empty
+ \dimexpr
+ \paperwidth
+ - 2\bleed \relax
+ \else
+ \photobook@blockwidth \fi}
+ \setlength\pageblockwidth{\blockwidth}
+ % layout: cover...
+ \ifcoverlayout
+ \setsepchar{,}%
+ \readlist*\pagefoldpanels{%
+ \the\coverflap,
+ % board thickness is ignored...
+ \the\dimexpr
+ \coverboardgrow
+ + \pageblockwidth \relax,
+ \the\spinefold,
+ \the\spinewidth,
+ \the\spinefold,
+ \the\dimexpr
+ \coverboardgrow
+ + \pageblockwidth \relax,
+ % board thickness is ignored...
+ \the\coverflap}%
+ \photobook@setpagefold{out}
+ \setlength\blockwidth{
+ \dimexpr
+ 2\blockwidth
+ + \spinewidth
+ + 2\spinefold
+ + 2\coverboardgrow
+ + 2\coverflap \relax}\fi
+ % layout: jacket...
+ % XXX this seems to be about 6mm off -- what are we missing here???
+ \ifjacketlayout
+ \setsepchar{,}%
+ \readlist*\pagefoldpanels{%
+ \the\jacketflapback,
+ \the\jacketwrap,
+ \the\dimexpr
+ \coverboardgrow
+ + \pageblockwidth \relax,
+ \the\spinefold,
+ \the\spinewidth,
+ \the\spinefold,
+ \the\dimexpr
+ \coverboardgrow
+ + \pageblockwidth \relax,
+ \the\jacketwrap,
+ \the\jacketflapfront}%
+ \photobook@setpagefold{out}
+ \setlength\blockwidth{
+ \dimexpr
+ 2\blockwidth
+ + 2\coverboardgrow
+ + \spinewidth
+ + 2\spinefold
+ + 2\jacketwrap
+ + \jacketflapfront
+ + \jacketflapback \relax}\fi
+ % layout: endpaper...
+ \ifendpaperlayout
+ \readlist*\pagefoldpanels{%
+ \the\pageblockwidth,
+ \the\pageblockwidth}%
+ \photobook@setpagefold{in}
+ \setlength\blockwidth{2\blockwidth}\fi\fi
+ \ifdim\blockheight=0pt
+ % layout: block / endpaper...
+ \setlength\blockheight{
+ \ifx\photobook@blockheight\empty
+ \dimexpr \paperheight - 2\bleed \relax
+ \else
+ \photobook@blockheight\fi}
+ \setlength\pageblockheight{\blockheight}
+ % layout: cover...
+ \ifcoverlayout
+ \setlength\blockheight{
+ \dimexpr
+ \blockheight
+ + 2\coverboardgrow
+ + 2\coverflap
+ \relax}\fi
+ % layout: jacket...
+ \ifjacketlayout
+ \setlength\blockheight{
+ \dimexpr
+ \blockheight
+ + 2\coverboardgrow
+ \relax}\fi\fi
+ % default image clearance...
+ \ifdim \clearimage = \maxdimen
+ \ifx\photobook@clearimage\empty
+ %\setlength\clearimage{-\bleed}
+ \setlength\clearimage{10mm}
+ \else
+ \setlength\clearimage{\photobook@clearimage}\fi\fi
+ % page with bleeds...
+ % NOTE: this is essentially \paperwidth and \paperheight but we do
+ % not rely on them being defined -- photobook settings take
+ % priority over \paperwidth and \paperwidth...
+ \setlength\bleedblockwidth{\dimexpr
+ 2\bleed
+ + \blockwidth \relax}
+ \setlength\bleedblockheight{\dimexpr
+ 2\bleed
+ + \blockheight \relax}
+ % cells...
+ \global\setlength\cellparentwidth{\blockwidth}
+ \global\setlength\cellparentheight{\blockheight}
+ \global\setlength\cellwidth{\cellparentwidth}
+ \global\setlength\cellheight{\cellparentheight}
+ % misc...
+ \nprounddigits{\photobook@roundprintedlengthsto}}
+
+
+%% \DescribeMacro{\ReInitPages}
+%
+%% Reset and re-initialize page dimentions.
+%%
+\newcommand\ReInitPages{%
+ \setlength\blockwidth{0mm}%
+ \setlength\blockheight{0mm}%
+ \edef\pdfpagelayout{}%
+ %
+ \InitPages%
+ \ResetFoldMarks}
+
+
+
+%----------------------------------------------------------------------
+% Setup...
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% on-import...
+
+% init/update lengths...
+\InitPages
+
+% minimal geometry setup...
+\RequirePackage[
+ % paper size (incl. bleeds)...
+ paperwidth=\bleedblockwidth, paperheight=\bleedblockheight,
+]{geometry}
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% pre-document...
+
+\AtEndPreamble{
+
+ % Metadata...
+ \hypersetup{
+ pdfinfo={
+ Title={\@title},
+ Subject={\@subject},
+ Author={\@author},
+ Keywords={\@keywords},
+ },
+ pdfpagelayout=\pdfpagelayout,
+ }
+
+ % Geometry...
+ \InitPages
+ % no-defaults -- the user is expected to set things up...
+ \ifphotobook@geometrynodefaults
+ \geometry{
+ % paper size (incl. bleeds)...
+ paperwidth=\bleedblockwidth, paperheight=\bleedblockheight,
+ bindingoffset=\bindingoffset}
+ % normal mode...
+ \else
+ \geometry{
+ % paper size (incl. bleeds)...
+ paperwidth=\bleedblockwidth, paperheight=\bleedblockheight,
+ bindingoffset=\bindingoffset,
+ % include header/footer/margin notes in printed area
+ twoside, includeall, nomarginpar,
+ ignorehead=false, ignorefoot=false, ignoremp=false,
+ % center printed area on page
+ vcentering, hcentering}\fi
+
+ \setlength\pagetextwidth{\textwidth}
+ \setlength\pagetextheight{\textheight}
+
+ % PDF boxes...
+ \pdfboxesset[\bleed]{\bleedblockwidth}{\bleedblockheight}}
+
+
+
+%----------------------------------------------------------------------
+%%%% Generic commands
+%%
+
+
+%% \DescribeMacro{\keywords\{..\}}
+%
+%% Set pdf metadata keywords
+%%
+%% >> \keywords{<keywords>}
+%%
+\def\@keywords{}
+
+\newcommand\keywords[1]{%
+ \def\@keywords{#1}}
+
+
+%% \DescribeMacro{\subject\{..\}}
+%
+%% Set pdf metadata subject
+%%
+%% >> \subject{<subject>}
+%%
+\def\@subject{}
+
+\newcommand\subject[1]{%
+ \def\@subject{#1}}
+
+
+%% \DescribeMacro{\mindim\{..\}}
+%% \DescribeMacro{\maxdim\{..\}}
+%
+%% Get min/max dimension.
+%
+%% >> \mindim{A}{B}
+%
+%% >> \maxdim{A}{B}
+%%
+% XXX do we actually need these??
+% ...should be simple to replace with calc's:
+% 0pt + \minof{..}
+% 0pt + \maxof{..}
+\newcommand\mindim[2]{
+ \ifdim \dimexpr #1 \relax < \dimexpr #2 \relax%
+ \dimexpr #1 \relax%
+ \else%
+ \dimexpr #2 \relax\fi}
+
+\newcommand\maxdim[2]{
+ \ifdim \dimexpr #1 \relax > \dimexpr #2 \relax%
+ \dimexpr #1 \relax%
+ \else%
+ \dimexpr #2 \relax\fi}
+
+
+%% \DescribeMacro{\emptypage\{..\}}
+%
+%% Create an empty page.
+%
+%% >> \emptypage
+%% >> \emptypage[<style>]
+%
+%% |<style>| is the style name as defined via |fancyhdr| (default: |empty|).
+%%
+\newcommand\emptypage[1][empty]{%
+ \begin{page}%
+ \ifthenelse{\equal{#1}{}}{}{%
+ \thispagestyle{#1}}%
+ \end{page}}
+
+
+%% \DescribeMacro{\cleartoleftpage}
+%
+%% Forces content to left page.
+%%
+%% This is a companion to |\cleardoublepage|.
+%%
+\newcommand*{\cleartoleftpage}{%
+ \clearpage
+ \if@twoside
+ \ifodd\c@page
+ \hbox{}\newpage
+ \if@twocolumn
+ \hbox{}\newpage \fi\fi\fi }
+
+
+%M \DescribeMacro{\ResettableMacro\{..\}}
+%
+%M Create a resettable command.
+%
+%M >> \ResettableMacro{<name>}{<code>}
+%M >> \ResettableMacro{<name>}[<arg-count>]{<code>}
+%M >> \ResettableMacro{<name>}[<arg-count>][<default>]{<code>}
+%
+%M This is similar to |\newcommand{..}| but will define two commands:
+%M
+%M >> \<name>{..}
+%M
+%M >> \reset<name>
+%M
+%M |\<name>{..}| can be freely redefined or undefined by user.
+%M
+%M |\reset<name>| will reset |\<name>{..}| to its original state.
+%M
+% parse args...
+\def\ResettableMacro#1{%
+ \@ifnextchar[{%
+ \photobook@ResettableMacro@pre{#1}%
+ }{%
+ \photobook@ResettableMacro{#1}}}
+\def\photobook@ResettableMacro@pre#1[#2]{%
+ \@ifnextchar[{%
+ \photobook@ResettableMacro@args@dfl{#1}[#2]%
+ }{%
+ \photobook@ResettableMacro@args{#1}[#2]}}
+% pre -- main command definition...
+\def\photobook@ResettableMacro#1#2{%
+ \expandafter\newcommand\csname photobook@ResettableMacro@#1\endcsname{#2}%
+ \photobook@ResettableMacro@tail{#1}}
+\def\photobook@ResettableMacro@args#1[#2]#3{%
+ \expandafter\newcommand\csname photobook@ResettableMacro@#1\endcsname[#2]{#3}%
+ \photobook@ResettableMacro@tail{#1}}
+\def\photobook@ResettableMacro@args@dfl#1[#2][#3]#4{%
+ \expandafter\newcommand\csname photobook@ResettableMacro@#1\endcsname[#2][#3]{#4}%
+ \photobook@ResettableMacro@tail{#1}}
+% post...
+\def\photobook@ResettableMacro@tail#1{%
+ % \reset<name>
+ \expandafter\newcommand\csname reset#1\endcsname{%
+ \expandafter\let\csname #1\expandafter\endcsname\csname photobook@ResettableMacro@#1\endcsname}
+ % initialize...
+ \csname reset#1\endcsname}
+
+
+% XXX EXPERIMENTAL
+% >> \resizedpage[<bleed>]{<width>}{<height>}{<code>}
+\newenvironment{resizedpages}[3][\bleed]{
+ \begingroup%
+ % setup page...
+ \setlength\bleed{#1}%
+ \setlength\blockwidth{#2}%
+ \setlength\blockheight{#3}%
+ \setlength\pageblockwidth{\blockwidth}%
+ \setlength\pageblockheight{\blockheight}%
+ \edef\pdfpagelayout{}%
+ %
+ \InitPages%
+ %
+ \setlength\paperwidth{\bleedblockwidth}%
+ \setlength\paperheight{\bleedblockheight}%
+ %
+ \pdfboxesset[\bleed]{\bleedblockwidth}{\bleedblockheight}%
+ %
+ % NOTE: this prevents some issues with macros racing to place
+ % stuff at ship-out (possibly)...
+ % ...also see cell env...
+ % XXX needs more digging...
+ % XXX do this at beginshipout/beginpage... (???)
+ %\null%
+ %\hbox{}%
+}{%
+ \endgroup%
+ % reset...
+ \pdfboxesset[\bleed]{\bleedblockwidth}{\bleedblockheight}}
+
+
+
+
+%----------------------------------------------------------------------
+%%%% Environments and Cells
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%%%%% Generic
+
+%% \DescribeEnv{page}
+%
+%% Page environment.
+%%
+%% This is mainly designed to wrap other cell environment described later.
+%%
+%% Note that this may span more than one page if there is enough stuff
+%% packed in.
+%%
+\newenvironment{page}{%
+ \null%
+ \ignorespaces%
+}{%
+ \clearpage}
+
+
+%% \DescribeEnv{leftpage}
+%
+%% \EXPERIMENTAL
+%%
+% XXX not sure about this...
+\newenvironment{leftpage}{%
+ \begin{page}%
+ \cleartoleftpage%
+}{%
+ \end{page}}
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%%%%% Cells
+
+% meta helpers...
+
+%M \DescribeMacro{\CellContentOptions\{..\}}
+%
+%M \EXPERIMENTAL
+%M
+%M Define standard cell options.
+%M
+% XXX figure out how to align and pad without messing with geometry...
+\newcommand\CellContentOptions[1]{%
+ %% align...
+ %\expandafter\def\csname photobook@#1@align\endcsname{flushleft}%
+ %\define@key{#1@args}{align}{%
+ % \expandafter\edef\csname photobook@#1@align\endcsname{##1}}%
+ % valign...
+ \expandafter\def\csname photobook@#1@valign\endcsname{t}%
+ \define@key{#1@args}{valign}{%
+ \expandafter\edef\csname photobook@#1@valign\endcsname{##1}}%
+ %% margin...
+ %\expandafter\def\csname photobook@#1@margin\endcsname{0pt}%
+ %\define@key{#1@args}{margin}{%
+ % \expandafter\edef\csname photobook@#1@margin\endcsname{##1}}%
+ %% padding...
+ %\expandafter\def\csname photobook@#1@padding\endcsname{0pt}%
+ %\define@key{#1@args}{padding}{%
+ % \expandafter\edef\csname photobook@#1@padding\endcsname{##1}}%
+}
+
+%M \DescribeEnv{CellContent}
+%M \DescribeEnv{CellContent*}
+%
+%M \EXPERIMENTAL
+%M
+%M Standard cell content wrapper, used by |inlinecell|.
+%
+%M >> \begin{CellContent}[<parent-align>]{<name>} ... \end{CellContent}
+%M >> \begin{CellContent*}[<parent-align>]{<name>}{<width>}{<height>} ... \end{CellContent}
+%
+%M The star version requires width/height to be manually passed while the
+%M non-star version will get the values from |\cellwidth| and |\cellheight|
+%M respectively.
+%
+% XXX TEST params...
+\newenvironment{CellContent}[2][t]{%
+ \begin{CellContent*}[#1]{#2}{\cellwidth}{\cellheight}%
+}{%
+ \end{CellContent*}}
+
+\newenvironment{CellContent*}[4][t]{%
+ \begin{adjustbox}{
+ minipage=[#1][#4][\csname photobook@#2@valign\endcsname]{#3},
+ valign=#1}%
+ \ignorespaces%
+}{%
+ % NOTE: prevent empty "minipage" from collapsing...
+ \hspace{\fill}%
+ \end{adjustbox}}
+
+
+%M \DescribeEnv{CellContent}
+%M \DescribeEnv{CellContent*}
+%
+%M \EXPERIMENTAL
+%M
+%M Like |CellContent| / |CellContent*| but will use |minipage| as the wrapper.
+%
+%M >> \begin{MinipageCellContent}[<parent-align>]{<name>} ... \end{MinipageCellContent}
+%M >> \begin{MinipageCellContent*}[<parent-align>]{<name>}{<width>}{<height>} ... \end{MinipageCellContent}
+%
+% XXX TEST...
+% XXX doc...
+\newenvironment{MinipageCellContent}[2][t]{%
+ \begin{MinipageCellContent*}[#1]{#2}{\cellwidth}{\cellheight}%
+}{%
+ \end{MinipageCellContent*}}
+
+\newenvironment{MinipageCellContent*}[4][t]{%
+ \begin{minipage}[#1][#4][\csname photobook@#2@valign\endcsname]{#3}%
+}{%
+ \end{minipage}}
+
+
+%% A cell environment is a box of specified size.
+%%
+%% Cells can be both placed inline relative to other content or in an
+%% absolute location.
+%%
+%% Note that absolute cells are placed relative to the page and currently
+%% can not be placed relative to other absolute cells (this might change
+%% in the future).
+%%
+%% \DescribeMacro{\cellwidth=<len>}
+%% \DescribeMacro{\cellheight=<len>}
+%% \DescribeMacro{\cellparentwidth=<len>}
+%% \DescribeMacro{\cellparentheight=<len>}
+%% \DescribeMacro{\celloffsettop=<len>}
+%% \DescribeMacro{\celloffsetleft=<len>}
+%% \DescribeMacro{\clearance=<len>}
+%%
+%% A cell defines a set of contextual lengths:
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% <--> celloffsetleft
+%% . <--------------> cellwidth
+%% <----------------------> cellparentwidth
+%% . . . .
+%% +----------------------+ . . . . . . .
+%% | . . | ^ ^ celloffsettop
+%% | . . | | |
+%% | +--------------+ . | . . | . . . v
+%% | | | | | ^
+%% | | | | | | cellheight
+%% | | cell | | | |
+%% | | | | | |
+%% | | | | | |
+%% | +--------------+ . | . . | . v
+%% | | |
+%% | | | cellparentheight
+%% +----------------------+ . . v
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%% For absolutely positioned cells these define the cell offset from
+%% parent.
+%%
+%% The bare page can be reasonably treated as a cell.
+%%
+%% Initally, outside of any cells |\cellwidth|, |\cellparentwidth| and
+%% |\cellheight|, |\cellparentheight| are equal to |\paperwidth| and
+%% |\paperheight| respectively, and |\celloffsettop| and |\celloffsetleft|
+%% are set to |0pt|.
+%%
+%% Changing these is not recommended, it likely will not affect the
+%% current cell but can mess up nested cells.
+%%
+%% \DescribeEnv{inlinecell}
+%% \DescribeEnv{inlinecell*}
+%
+%% Create a basic inline cell.
+%
+%% >> \begin{inlinecell}{<width>}{<height>} ... \end{inlinecell}
+%% >> \begin{inlinecell}[<valign>]{<width>}{<height>} ... \end{inlinecell}
+%
+%% This will clip oversized content.
+%%
+%% |inlinecell*| is like |inlinecell| but will not clip.
+%
+%% >> \begin{inlinecell*}{<width>}{<height>} ... \end{inlinecell*}
+%% >> \begin{inlinecell*}[<valign>]{<width>}{<height>} ... \end{inlinecell*}
+%
+%% |<valign>| can be one of |t| (default) for top, |c| for center or |b| for bottom.
+%%
+%% These are just like |minipage| but provide cell mechanics.
+%%
+% XXX EXPERIMENTAL
+\CellContentOptions{inlinecell}
+
+\def\photobook@inlinecell@parentvalign{t}
+\define@boolkey{inlinecell@args}{t}[true]{%
+ \def\photobook@inlinecell@parentvalign{t}}
+\define@boolkey{inlinecell@args}{c}[true]{%
+ \def\photobook@inlinecell@parentvalign{c}}
+\define@boolkey{inlinecell@args}{b}[true]{%
+ \def\photobook@inlinecell@parentvalign{b}}
+
+\newenvironment{inlinecell*}[3][]{%
+ \begingroup%
+ \setkeys{inlinecell@args}{
+ t,
+ #1}%
+ %
+ % get args by value...
+ \edef\photobook@protect@w{\the\dimexpr #2 \relax}%
+ \edef\photobook@protect@h{\the\dimexpr #3 \relax}%
+ %
+ \setlength\cellparentwidth{\cellwidth}%
+ \setlength\cellparentheight{\cellheight}%
+ \setlength\cellwidth{\photobook@protect@w}%
+ \setlength\cellheight{\photobook@protect@h}%
+ \setlength\celloffsettop{0pt}%
+ \setlength\celloffsetleft{0pt}%
+ %
+ \begin{CellContent}[\photobook@inlinecell@parentvalign]{inlinecell}%
+}{%
+ \end{CellContent}%
+ \endgroup}
+
+\newenvironment{inlinecell}[3][t]{%
+ \begin{inlinecell*}[#1]{#2}{#3}%
+ \begin{cliptocell}%
+}{%
+ \end{cliptocell}%
+ \end{inlinecell*}}
+
+
+% XXX EXPERIMENTAL
+%% \DescribeEnv{minipagecell}
+%% \DescribeEnv{minipagecell*}
+%
+%% \EXPERIMENTAL
+%%
+\CellContentOptions{minipagecell}
+
+\def\photobook@minipagecell@parentvalign{t}
+\define@boolkey{minipagecell@args}{t}[true]{%
+ \def\photobook@minipagecell@parentvalign{t}}
+\define@boolkey{minipagecell@args}{c}[true]{%
+ \def\photobook@minipagecell@parentvalign{c}}
+\define@boolkey{minipagecell@args}{b}[true]{%
+ \def\photobook@minipagecell@parentvalign{b}}
+
+\newenvironment{minipagecell*}[3][]{%
+ \begingroup%
+ \setkeys{minipagecell@args}{
+ t,
+ #1}%
+ % get args by value...
+ \edef\photobook@protect@w{\the\dimexpr #2 \relax}%
+ \edef\photobook@protect@h{\the\dimexpr #3 \relax}%
+ %
+ \setlength\cellparentwidth{\cellwidth}%
+ \setlength\cellparentheight{\cellheight}%
+ \setlength\cellwidth{\photobook@protect@w}%
+ \setlength\cellheight{\photobook@protect@h}%
+ \setlength\celloffsettop{0pt}%
+ \setlength\celloffsetleft{0pt}%
+ \setlength\clearance{0pt}%
+ %
+ \begin{MinipageCellContent}[\photobook@minipagecell@parentvalign]{minipagecell}%
+}{%
+ \end{MinipageCellContent}%
+ \endgroup}
+
+\newenvironment{minipagecell}[3][t]{%
+ \begin{minipagecell*}[#1]{#2}{#3}%
+ \begin{cliptocell}%
+}{%
+ \end{cliptocell}%
+ \end{minipagecell*}}
+
+
+% XXX EXPERIMENTAL
+%% \DescribeEnv{zinlinecell}
+%% \DescribeEnv{zinlinecell*}
+%
+%% \EXPERIMENTAL
+%%
+%% Like |inlinecell| / |inlinecell*| but will take up zero space.
+%%
+%% >> \begin{zinlinecell}{<width>}{<height>} ... \end{zinlinecell}
+%% >> \begin{zinlinecell}[<valign>]{<width>}{<height>} ... \end{zinlinecell}
+%%
+% XXX need to get rid of the raisebox here...
+\NewEnviron{zinlinecell*}[1][]{%
+ \smash{\makebox[0pt][l]{%
+ % XXX HACK: RAISEBOX -- feels hackish...
+ \raisebox{0pt - \totalheightof{O}}{%
+ \begin{inlinecell*}[#1]{\cellwidth}{\cellheight}%
+ \BODY%
+ \end{inlinecell*}}}}}
+
+\NewEnviron{zinlinecell}[1][]{%
+ \smash{\makebox[0pt][l]{%
+ % XXX HACK: RAISEBOX -- feels hackish...
+ \raisebox{0pt - \totalheightof{O}}{%
+ \begin{inlinecell}[#1]{\cellwidth}{\cellheight}%
+ \BODY%
+ \end{inlinecell}}}}}
+
+
+%% \DescribeEnv{cell}
+%% \DescribeEnv{cell*}
+%
+%% Create a basic absolutely positioned cell.
+%
+%% >> \begin{cell}{<left>, <top>}{<width>}{<height>} ... \end{cell}
+%
+%% Oversized content will be clipped.
+%%
+%% |cell*| is just like |cell| but will not clip its content.
+%
+%% >> \begin{cell*}{<left>, <top>}{<width>}{<height>} ... \end{cell*}
+%%
+% XXX SYNTAX: place the second arg in braces...
+% \begin{cell*}(<left>, <top>){<width>}{<height>}
+\newenvironment{cell*}[3]{%
+ \begingroup%
+ \setsepchar{,}%
+ \readlist*\photobook@cell@offset{#1}%
+ %
+ % NOTE: if there is no \null before textblock then it can reset the
+ % non-standard page boxes...
+ % ...not sure yet if this is an issue with how/when foldout env
+ % updates the boxes or with textblock internals, needs
+ % investigating...
+ % XXX report this as a bug if issue is in textblock...
+ % XXX another place where this is relevant is in the resizedpages
+ % env...
+ \null%
+ \begin{textblock*}{#2}(#1)%
+ \begin{inlinecell*}{#2}{#3}%
+ \setlength\celloffsettop{\photobook@cell@offset[1]}%
+ \setlength\celloffsetleft{\photobook@cell@offset[2]}%
+ \ignorespaces%
+}{%
+ \end{inlinecell*}%
+ \end{textblock*}%
+ \endgroup%
+ \ignorespaces}
+
+\newenvironment{cell}[3]{%
+ \begin{cell*}{#1}{#2}{#3}%
+ \begin{cliptocell}%
+ \ignorespaces%
+}{%
+ \end{cliptocell}%
+ \end{cell*}%
+ \ignorespaces}
+
+
+% XXX EXPERIMENTAL
+%% \DescribeEnv{adjustcell}
+%% \DescribeEnv{adjustcell*}
+%
+%% \EXPERIMENTAL
+%%
+\newenvironment{adjustcell*}[4][t]{%
+ \begin{adjustbox}{#2}%
+ \vspace{0pt}%
+ \begin{minipagecell*}[#1]{#3}{#4}%
+}{%
+ \end{minipagecell*}%
+ \end{adjustbox}}
+
+\newenvironment{adjustcell}[4][t]{%
+ \begin{adjustbox}{#2}%
+ \vspace{0pt}%
+ \begin{minipagecell}[#1]{#3}{#4}%
+}{%
+ \end{minipagecell}%
+ \end{adjustbox}}
+
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%%%%% Save cells
+
+%% \DescribeMacro{\savecell\{..\}}
+%% \DescribeMacro{\gsavecell\{..\}}
+%
+%% Create a saved cell.
+%
+%% >> \savecell{<name>}{<width>}{<height>}{ .. }
+%
+%% This is similar to |\newsavebox{..}| and |\sbox{..}| but adds
+%% cell functionality.
+%%
+%% |\gsavecell{..}| is the same as |\savecell{..}| but greates a global
+%% cell.
+%%
+% XXX can/should we make this an env???
+% XXX should this be split into \newsavecell{..} and \scell{..} ???
+% XXX can we use root cells inside this???
+% ...i.e. things using textbox*...
+\newcommand\savecell[5][]{%
+ % only define a savebox once...
+ \@ifundefined{#2}{%
+ \expandafter\newsavebox\csname #2\endcsname}{}
+ \expandafter\sbox\csname #2\endcsname{%
+ \begin{inlinecell*}[#1]{#3}{#4}%
+ #5%
+ \end{inlinecell*}}%
+ \ignorespaces}
+
+\newcommand\gsavecell[5][]{%
+ % only define a savebox once...
+ \@ifundefined{#2}{%
+ \expandafter\newsavebox\csname #2\endcsname}{}
+ \global\expandafter\sbox\csname #2\endcsname{%
+ \begin{inlinecell*}[#1]{#3}{#4}%
+ #5%
+ \end{inlinecell*}}%
+ \ignorespaces}
+
+
+%% \DescribeMacro{\usecell\{..\}}
+%% \DescribeMacro{\usecell*\{..\}}
+%
+%% Use part of a saved cell.
+%%
+%% >> \usecell{<name>}(<top>, <left>){<width>}{<height>}
+%%
+%% This will clip the content to cell.
+%%
+%% |\usecell*{..}| is similar to |\usecell{..}| but will not clip the
+%% cell content.
+%%
+%% >> \usecell*{<name>}(<top>, <left>){<width>}{<height>}
+%%
+%% These are similar to |\usebox{..}|.
+%%
+\def\usecell{\@ifstar{%
+ \photobook@usecell%
+}{%
+ \photobook@usecell@star}}
+
+% cell content...
+% NOTE: this is not intended for direct use -- depends closure/context...
+\def\photobook@usecell@placecell#1(#2){%
+ \setsepchar{,}%
+ \readlist*\photobook@usecell@offset{#2}%
+ % XXX how we align things feels a bit odd...
+ \vspace{-\dimexpr \photobook@usecell@offset[1] \relax}%
+ \adjustbox{margin={-\dimexpr \photobook@usecell@offset[2] \relax} 0pt 0pt 0pt}{%
+ \expandafter\usebox\csname #1\endcsname}}
+
+% XXX add option to rotate saved cell...
+\def\photobook@usecell@star#1(#2)#3#4{
+ \begin{inlinecell}{#3}{#4}%
+ \photobook@usecell@placecell{#1}(#2)%
+ \end{inlinecell}}
+
+% XXX add option to rotate saved cell...
+\def\photobook@usecell#1(#2)#3#4{
+ \begin{inlinecell*}{#3}{#4}%
+ \photobook@usecell@placecell{#1}(#2)%
+ \end{inlinecell*}}
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%%%%% Cell macros
+%
+%% Cell macros require a cell environment to function correctly.
+%%
+
+%% \DescribeEnv{topdown}
+%% \DescribeEnv{bottomup}
+%
+%% Rotate cell content vertically, orienting it top-down or bottom-up.
+%
+%% >> \begin{topdown} ... \end{topdown}
+%% >> \begin{bottomup} ... \end{bottomup}
+%%
+\newenvironment{topdown}[1][t]{%
+ \begin{flushright}%
+ \begin{turn}{270}%
+ \begin{inlinecell*}[#1]{\cellheight}{\cellwidth}%
+}{%
+ \end{inlinecell*}%
+ \end{turn}%
+ \end{flushright}}
+
+\newenvironment{bottomup}[1][t]{%
+ \begin{turn}{90}%
+ \begin{inlinecell*}[#1]{\cellheight}{\cellwidth}%
+}{%
+ \end{inlinecell*}%
+ \end{turn}}
+
+
+%% \DescribeEnv{cliptocell}
+%
+%% Clip content to parent cell.
+%%
+\newenvironment{cliptocell}{%
+ \begin{clipbox*}{0cm {\height - \cellheight} {\cellwidth} {\height}}%
+ \begin{minipage}[t][\cellheight][t]{\cellwidth}%
+ \ignorespaces%
+}{%
+ \end{minipage}%
+ \end{clipbox*}}
+
+
+
+%% \DescribeMacro{\imagecell\{..\}}
+%
+%% Place image in cell.
+%
+%% >> \imagecell{<caption-cell>}{<image>}
+%% >> \imagecell[<key>=<value>, ..]{<caption-cell>}{<image>}
+%%
+%% >> \imagecell[fit]{}{<image>}
+%% >> \imagecell[fill]{}{<image>}
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% fit (default) fill
+%% +-----------------+ . . . +-----------------+ . . .
+%% | | . . | | . .
+%% +-----------------+ . | | .
+%% | . . | . | . . | .
+%% | . . | . | . . | .
+%% | image | . | image | .
+%% | . . | . | . . | .
+%% | . . | . | . . | .
+%% +-----------------+ . | | .
+%% | | . . | | . .
+%% +-----------------+ . . . +-----------------+ . . .
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%% Centering. The image will be centered by default.
+%%
+%% >> \imagecell{}{<image>}
+%% >> \imagecell[center]{}{<image>}
+%%
+%% Vertical alignment
+%%
+%% >> \imagecell[top]{}{<image>}
+%% >> \imagecell[bottom]{}{<image>}
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% top center (default) bottom
+%% +-----------------+ +-----------------+ +-----------------+
+%% | . . | | | | |
+%% | . . | +-----------------+ | |
+%% | image | | . . | | |
+%% | . . | | . . | +-----------------+
+%% | . . | | image | | . . |
+%% +-----------------+ | . . | | . . |
+%% | | | . . | | image |
+%% | | +-----------------+ | . . |
+%% | | | | | . . |
+%% +-----------------+ +-----------------+ +-----------------+
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%% Horizontal alignment
+%%
+%% >> \imagecell[left]{}{<image>}
+%% >> \imagecell[right]{}{<image>}
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% left center (default) right
+%% +-------------+---+ +-+-------------+-+ +---+-------------+
+%% | . . | | | | . . | | | | . . |
+%% | . . | | | | . . | | | | . . |
+%% | . . | | | | . . | | | | . . |
+%% | . . | | | | . . | | | | . . |
+%% | image | | | | image | | | | image |
+%% | . . | | | | . . | | | | . . |
+%% | . . | | | | . . | | | | . . |
+%% | . . | | | | . . | | | | . . |
+%% | . . | | | | . . | | | | . . |
+%% +-------------+---+ +-+-------------+-+ +---+-------------+
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%% Horizontal and vertical alignment can be combined to control alignment
+%% of both vertical and horizontal images at the same time.
+%%
+%% Image |clearance|. This sets the amount of clearance around an image
+%% (default: |0pt|).
+%%
+%% >> \imagecell[clearance=-4mm]{}{<image>}
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% clearance > 0pt clearance = 0pt clearance < 0pt
+%% (default)
+%% +--------v--------+ +-----------------+ +--------^--------+
+%% | | | | | |
+%% |+---------------+| +-----------------+ ..+-----------------+..
+%% || . . || | . . | . |. .| .
+%% || . . || | . . | . | . . | .
+%% |> image <| | image | < | image | >
+%% || . . || | . . | . | . . | .
+%% || . . || | . . | . |. .| .
+%% |+---------------+| +-----------------+ ..+-----------------+..
+%% | | | | | |
+%% +--------^--------+ +-----------------+ +--------v--------+
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%% Note that if |clearance| is less than 0, the image will take up more
+%% space than the containing cell, |\imagecell{..}| will not clip
+%% its content and the whole image surface will be shown. If clipping is
+%% needed then use |clipcell| environment as a container.
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% +-----------------+ - - caption cell size
+%% . . .
+%% +-----------------+ .
+%% | | .
+%% ..+-----------------+.. . +
+%% . |.caption cell .| . |
+%% . | . . | . |
+%% . | . | . |
+%% . | . . | . |
+%% . |. .| . |
+%% ..+-----------------+.. . +
+%% | |
+%% +-----------------+
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%% |<caption-cell>| occupies the same space as the image clipped by the
+%% containing cell and provides all the cell functionality.
+%%
+%% If |captionclearparent| is set, the |<caption-cell>| will fit into an
+%% intersection between the image area and the parent cell padded by
+%% |captionclearparent|.
+%%
+%% This will write image path, page and size to |\jobname|.image-list,
+%% this is useful for final image pre-press.
+%%
+%% To disable image list set:
+%
+%% >> \writeimagelistfalse
+%%
+% XXX do we need captionclearparent to be directional (a-la margin in adjustbox)???
+% XXX might be a good idea to split this into two parts:
+% - \aligncell{..}
+% - \imagecell{caption}{image}
+% -> size image
+% -> \aligncell{
+% image
+% caption}
+% XXX document scale/offsettop/offsetleft...
+
+% helpers...
+
+% image size logging...
+\newif\ifwriteimagelist
+\writeimagelisttrue
+
+\newwrite\photobook@imagelist
+\def\photobook@logimagesize@setup{%
+ \immediate\openout\photobook@imagelist=\jobname.image-list%
+ \AfterEndDocument{%
+ \immediate\closeout\photobook@imagelist}%
+ % setup only once per job...
+ \global\def\photobook@logimagesize@setup{}}
+
+% >> \photobook@logimagesize{<path>}{<page>}{<imagebox>}
+% XXX for some reason can't use \lenprint[mm]{..} in \write{..}...
+\newcommand\photobook@logimagesize[3]{%
+ \ifwriteimagelist%
+ % first setup...
+ \photobook@logimagesize@setup%
+ % write...
+ \immediate\write\photobook@imagelist{%
+ #1: p#2: \the\wd#3\space x \the\ht#3}\fi}%
+
+
+% NOTE: these are macros and not lengths as we need to "resolve" these
+% as late as possible, i.e. after all the arguments have been
+% processed.
+\def\photobook@imagecell@top{0pt}
+\def\photobook@imagecell@left{0pt}
+\def\photobook@imagecell@captiontop{0pt}
+\def\photobook@imagecell@captionleft{0pt}
+
+\newlength\photobook@imagecell@clearance
+\setlength\photobook@imagecell@clearance{0pt}
+
+% NOTE: these feel like a hack...
+\newlength\photobook@imagecell@imgratio
+\newlength\photobook@imagecell@cellratio
+
+% fit/fill...
+\define@boolkey{imagecell@args}{fit}[true]{%
+ \KV@imagecell@args@fillfalse}
+\define@boolkey{imagecell@args}{fill}[true]{%
+ \KV@imagecell@args@fitfalse}
+% center...
+\define@boolkey{imagecell@args}{center}[true]{%
+ \def\photobook@imagecell@top{\dimexpr
+ +0.5\cellheight
+ -0.5\ht\photobook@imagebox \relax}%
+ \def\photobook@imagecell@left{\dimexpr
+ +0.5\cellwidth
+ -0.5\wd\photobook@imagebox \relax}}%
+% left/right...
+% shortdands...
+\newcommand\photobook@imagecell@LEFT{%
+ \def\photobook@imagecell@left{\dimexpr%
+ +\photobook@imagecell@clearance \relax}%
+ \def\photobook@imagecell@captionleft{
+ % XXX not sure why this branch is needed...
+ \ifKV@imagecell@args@fit
+ 0pt
+ \else%
+ \dimexpr%
+ +\cellwidth
+ -\photobook@imagecell@clearance
+ -\wd\photobook@imagebox \relax\fi}}%
+\newcommand\photobook@imagecell@RIGHT{%
+ \def\photobook@imagecell@left{\dimexpr
+ +\cellwidth
+ -\photobook@imagecell@clearance
+ -\wd\photobook@imagebox \relax}
+ % XXX not sure why 0.5 but it seems to work...
+ \def\photobook@imagecell@captionleft{%
+ -0.5\photobook@imagecell@left}}%
+% args...
+\define@boolkey{imagecell@args}{left}[true]{%
+ \photobook@imagecell@LEFT}
+\define@boolkey{imagecell@args}{right}[true]{%
+ \photobook@imagecell@RIGHT}
+% inside/outside...
+\define@boolkey{imagecell@args}{inside}[true]{%
+ \ifthenelse{\isodd{\thepage}}{%
+ \photobook@imagecell@LEFT%
+ }{%
+ \photobook@imagecell@RIGHT}}%
+\define@boolkey{imagecell@args}{outside}[true]{%
+ \ifthenelse{\isodd{\thepage}}{%
+ \photobook@imagecell@RIGHT%
+ }{%
+ \photobook@imagecell@LEFT}}%
+% top/bottom...
+\define@boolkey{imagecell@args}{top}[true]{%
+ \def\photobook@imagecell@top{%
+ \photobook@imagecell@clearance}%
+ \def\photobook@imagecell@captiontop{%
+ -\dimexpr
+ +\cellheight
+ -\ht\photobook@imagebox \relax}}%
+\define@boolkey{imagecell@args}{bottom}[true]{%
+ \def\photobook@imagecell@top{%
+ \dimexpr
+ +\cellheight
+ -\photobook@imagecell@clearance
+ -\ht\photobook@imagebox \relax}%
+ \def\photobook@imagecell@captiontop{%
+ \dimexpr
+ \photobook@imagecell@top
+ +\photobook@imagecell@clearance \relax}}%
+% clearance=<len>...
+\define@key{imagecell@args}{clearance}{%
+ \setlength\photobook@imagecell@clearance{#1}}%
+
+% offsettop=<len> / offsetleft=<len>...
+% XXX DOC!!!
+\newlength\photobook@imagecell@offsettop%
+\setlength\photobook@imagecell@offsettop{0pt}%
+\define@key{imagecell@args}{offsettop}[0pt]{%
+ \setlength\photobook@imagecell@offsettop{#1}}%
+\newlength\photobook@imagecell@offsetleft%
+\setlength\photobook@imagecell@offsetleft{0pt}%
+\define@key{imagecell@args}{offsetleft}[0pt]{%
+ \setlength\photobook@imagecell@offsetleft{#1}}%
+
+% scale=<num>...
+\edef\photobook@imagecell@scale{1}%
+\define@key{imagecell@args}{scale}[1]{%
+ \edef\photobook@imagecell@scale{#1}}%
+
+% captionalign=t|c|b...
+\def\photobook@imagecell@captionalign{t}
+\define@choicekey{imagecell@args}{captionalign}{t,c,b}[t]{%
+ \def\photobook@imagecell@captionalign{#1}}
+
+% captionclearparent=<len>...
+% XXX DOC!!!
+\newif\ifphotobook@imagecell@captionclearparent
+\newlength\photobook@imagecell@captionclearparent
+\define@key{imagecell@args}{captionclearparent}[0pt]{%
+ \setlength\photobook@imagecell@captionclearparent{#1}%
+ \photobook@imagecell@captionclearparenttrue}
+
+% XXX can we make this an env???
+\newcommand\imagecell[3][]{%
+ \begingroup%
+ % args...
+ \setkeys{imagecell@args}{%
+ fit,
+ center,
+ clearance=0pt,
+ #1}%
+ % preload image...
+ % fit...
+ \ifKV@imagecell@args@fit%
+ \sbox{\photobook@imagebox}{%
+ \includegraphics[%
+ keepaspectratio,
+ width=\photobook@imagecell@scale\dimexpr
+ \cellwidth
+ - ((\photobook@imagecell@clearance) * 2) \relax,
+ height=\photobook@imagecell@scale\dimexpr
+ \cellheight
+ - ((\photobook@imagecell@clearance) * 2) \relax]{#3}}%
+ % fill...
+ \else\ifKV@imagecell@args@fill%
+ % preload image to get its proportions...
+ \sbox{\photobook@imagebox}{\includegraphics{#3}}%
+ % constrain minimal dimension of image...
+ % NOTE: here we calculate image/cell eccentricity to decide
+ % to fit to width or heigh of cell...
+ % NOTE: did I say that I "love" how LaTeX does basic math??
+ \setlength\photobook@imagecell@imgratio{%
+ 1pt * \ratio{\wd\photobook@imagebox}{\ht\photobook@imagebox}}%
+ \setlength\photobook@imagecell@cellratio{%
+ 1pt * \ratio{\cellwidth}{\cellheight}}%
+ \ifdim \photobook@imagecell@imgratio < \photobook@imagecell@cellratio%
+ \sbox{\photobook@imagebox}{%
+ \includegraphics[%
+ keepaspectratio,
+ width=\photobook@imagecell@scale\dimexpr
+ + \cellwidth
+ - ((\photobook@imagecell@clearance) * 2) \relax]{#3}}%
+ \else%
+ \sbox{\photobook@imagebox}{%
+ \includegraphics[%
+ keepaspectratio,
+ height=\photobook@imagecell@scale\dimexpr
+ + \cellheight
+ - ((\photobook@imagecell@clearance) * 2) \relax]{#3}}%
+ \fi\fi\fi%
+ %
+ \setlength\celloffsetleft{%
+ \dimexpr
+ \photobook@imagecell@offsetleft
+ + \photobook@imagecell@left \relax}%
+ \setlength\celloffsettop{%
+ \dimexpr
+ \photobook@imagecell@offsettop
+ + \photobook@imagecell@top \relax}%
+ %
+ %
+ % place image box...
+ % XXX for some odd reason without this the alignment completely breaks...
+ \vspace{0pt}%
+ \smash{\makebox[0pt][l]{%
+ \adjustbox{%
+ margin={\celloffsetleft} 0pt 0pt {\celloffsettop},
+ valign=T}{%
+ \photobook@logimagesize{#3}{\thepage}{\photobook@imagebox}%
+ \usebox\photobook@imagebox}}}%
+ %
+ %
+ % prepare for caption cell...
+ \setlength\cellparentwidth{\cellwidth}%
+ \setlength\cellparentheight{\cellheight}%
+ \setlength\cellwidth{%
+ \mindim{
+ \wd\photobook@imagebox
+ + \mindim{\celloffsetleft}{0pt}
+ }{
+ \cellwidth}}%
+ \setlength\cellheight{%
+ \mindim{
+ \ht\photobook@imagebox
+ + \mindim{\celloffsettop}{0pt}
+ }{
+ \cellheight}}%
+ \setlength\celloffsetleft{%
+ \maxdim{\celloffsetleft}{0pt}}%
+ \setlength\celloffsettop{%
+ \maxdim{\celloffsettop}{0pt}}%
+ \setlength\clearance{\photobook@imagecell@clearance}%
+ % clear parent...
+ % XXX might be a good idea to put this into a special reusable cell...
+ \ifphotobook@imagecell@captionclearparent%
+ % trim vertical...
+ % XXX this seems overcomplicated...
+ \setlength\cellheight{%
+ \mindim{
+ \cellheight
+ % trim from both sides....
+ }{\mindim{
+ \cellparentheight
+ - 2\photobook@imagecell@captionclearparent
+ % trim from bottom...
+ }{\mindim{
+ \cellheight
+ + \celloffsettop
+ - \photobook@imagecell@captionclearparent
+ % trim from top...
+ }{
+ \cellparentheight
+ - \photobook@imagecell@captionclearparent
+ - \celloffsettop}}}}%
+ % offset top...
+ \setlength\celloffsettop{
+ \maxdim{
+ \celloffsettop
+ + (\photobook@imagecell@captionclearparent - \celloffsettop)
+ }{
+ \celloffsettop}}%
+ % trim horizontal...
+ % XXX this seems overcomplicated...
+ \setlength\cellwidth{%
+ \mindim{
+ \cellwidth
+ % trim from both sides....
+ }{\mindim{
+ \cellparentwidth
+ - 2\photobook@imagecell@captionclearparent
+ % trim from right...
+ }{\mindim{
+ \cellwidth
+ + \celloffsetleft
+ - \photobook@imagecell@captionclearparent
+ % trim from left...
+ }{
+ \cellparentwidth
+ - \photobook@imagecell@captionclearparent
+ - \celloffsetleft}}}}%
+ % offset left...
+ \setlength\celloffsetleft{
+ \maxdim{
+ \celloffsetleft
+ + (\photobook@imagecell@captionclearparent - \celloffsetleft)
+ }{
+ \celloffsetleft}}\fi%
+ %
+ %
+ % place caption box...
+ \smash{\makebox[0pt][l]{%
+ \adjustbox{%
+ %cfbox=gray 0.5pt 0pt 0pt,
+ margin={\celloffsetleft} 0pt 0pt {\celloffsettop},
+ minipage=[b][\cellheight][\photobook@imagecell@captionalign]{\cellwidth},
+ valign=T}{%
+ \ignorespaces%
+ #2}}}%
+ \endgroup}
+
+
+%% \DescribeMacro{\captioncell\{..\}}
+%
+%% Caption cell
+%%
+%% Placement:
+%
+%% >> \captioncell[<position>]{<caption>}
+%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% over
+%% +-----------------+
+%% | top |
+%% | |
+%% | |
+%% | |
+%% | center |
+%% | |
+%% | |
+%% | |
+%% | bottom |
+%% +-----------------+
+%% under
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%% Default:
+%% >> \captioncell{<caption>}
+%% >> \captioncell[top]{<caption>}
+%%
+%% >> \captioncell[center]{<caption>}
+%% >> \captioncell[bottom]{<caption>}
+%%
+%% >> \captioncell[over]{<caption>}
+%% >> \captioncell[under]{<caption>}
+%%
+%% Horizontal alignment
+%
+%% >> \captioncell[align=<mode>]{<caption>}
+%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% +-----------------+ +-----------------+ +-----------------+
+%% |flushleft | | center | | flushright|
+%% | | | | | |
+%% | | | | | |
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%% Default:
+%% >> \captioncell{<caption>}
+%% >> \captioncell[align=flushleft]{<caption>}
+%%
+%% >> \captioncell[align=center]{<caption>}
+%% >> \captioncell[align=flushright]{<caption>}
+%%
+%% Note that a caption cell does not take up any space in the parent cell
+%% so multiple captions can be used in combination with other elements.
+%%
+%% Note that caption cells currently do not play well with other content
+%% in the same cell that takes up space, e.g. text, pictures, ...etc.
+%% Captions are mainly suited to play well with image cells.
+%%
+
+% over / top / center / bottom / under...
+\define@boolkey{captioncell@args}{over}[true]{%
+ \def\photobook@captioncell@format##1{%
+ \photobook@captioncell@formatalign[-\cellheight]{b}{##1}}}
+\define@boolkey{captioncell@args}{top}[true]{%
+ \def\photobook@captioncell@format##1{%
+ \photobook@captioncell@formatalign{t}{##1}}}
+\define@boolkey{captioncell@args}{center}[true]{%
+ \def\photobook@captioncell@format##1{%
+ \smash{\makebox[0pt][l]{%
+ \begin{minipage}[t][\cellheight][c]{\cellwidth}%
+ \begin{\photobook@captioncell@align}%
+ \ignorespaces%
+ ##1%
+ \end{\photobook@captioncell@align}%
+ \end{minipage}}}}}
+\define@boolkey{captioncell@args}{bottom}[true]{%
+ \def\photobook@captioncell@format##1{%
+ \photobook@captioncell@formatalign{b}{##1}}}
+\define@boolkey{captioncell@args}{under}[true]{%
+ \def\photobook@captioncell@format##1{%
+ \photobook@captioncell@formatalign[\cellheight]{t}{##1}}}
+% align=<len>...
+\def\photobook@captioncell@align{}
+% XXX for some reason \define@choicekey{..} does not expand macros...
+%\define@choicekey{captioncell@args}{align}{flushleft,center,flushright}{%
+\define@key{captioncell@args}{align}{%
+ \def\photobook@captioncell@align{#1}}
+% margin=<len>...
+\def\photobook@captioncell@margin{0pt}
+\define@key{captioncell@args}{margin}{%
+ \def\photobook@captioncell@margin{#1}}
+
+% helpers...
+% XXX set minipage height to available cell height (???)
+\newcommand\photobook@captioncell@formatalign[3][0pt]{%
+ \smash{\makebox[0pt][l]{%
+ \begin{minipage}[t][\cellheight][t]{\cellwidth}%
+ % XXX for some reason without this things get misaligned...
+ \vspace{#1}%
+ % XXX HACK: for some magical reason setting the above minipage to 'b'
+ % will make \vspace{..} above break...
+ % ...adding another nested minipage seems to fix the issue...
+ \begin{minipage}[t][\cellheight][#2]{\cellwidth}%
+ \begin{\photobook@captioncell@align}%
+ \ignorespaces%
+ #3%
+ \end{\photobook@captioncell@align}%
+ \end{minipage}
+ \end{minipage}}}}
+% format...
+\def\photobook@captioncell@format#1{%
+ \photobook@captioncell@formatalign{t}{#1}}
+
+\newcommand\captioncell[2][]{%
+ \setkeys{captioncell@args}{
+ top,
+ align=flushright,
+ margin=1pt,
+ #1}%
+ \photobook@captioncell@format{%
+ \adjustbox{margin=\photobook@captioncell@margin}{#2}}%
+ \ignorespaces}
+
+
+%% \DescribeMacro{\vcaptioncell\{..\}}
+%
+%% Vertical caption cell
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% (topdown) (bottomup)
+%% +-----------------+ +-----------------+
+%% b | l c r | a | |
+%% e | e e i | f | |
+%% f | f n g | t | |
+%% o | t t h | e e | r |
+%% r | e t | r r | e t | r
+%% e | r | o | t t h | e
+%% | | f | f n g | t
+%% | | e | e e i | f
+%% | | b | l c r | a
+%% +-----------------+ +-----------------+
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%% See samples for better illustration.
+%%
+
+% bottomup / topdown...
+\def\photobook@vcaptioncell@orientation{bottomup}
+\define@boolkey{vcaptioncell@args}{bottomup}[true]{%
+ \KV@vcaptioncell@args@topdownfalse%
+ \def\photobook@vcaptioncell@orientation{bottomup}}
+\define@boolkey{vcaptioncell@args}{topdown}[true]{%
+ \KV@vcaptioncell@args@bottomupfalse%
+ \def\photobook@vcaptioncell@orientation{topdown}}
+
+% before / left / center / right / after...
+\def\photobook@vcaptioncell@position{top}
+\define@boolkey{vcaptioncell@args}{before}[true]{%
+ \def\photobook@vcaptioncell@position{%
+ \ifKV@vcaptioncell@args@bottomup%
+ over%
+ \else%
+ under\fi}}
+\define@boolkey{vcaptioncell@args}{left}[true]{%
+ \def\photobook@vcaptioncell@position{%
+ \ifKV@vcaptioncell@args@bottomup%
+ top%
+ \else%
+ bottom\fi}}
+\define@boolkey{vcaptioncell@args}{center}[true]{%
+ \def\photobook@vcaptioncell@position{center}}
+\define@boolkey{vcaptioncell@args}{right}[true]{%
+ \def\photobook@vcaptioncell@position{%
+ \ifKV@vcaptioncell@args@bottomup%
+ bottom%
+ \else%
+ top\fi}}
+\define@boolkey{vcaptioncell@args}{after}[true]{%
+ \def\photobook@vcaptioncell@position{%
+ \ifKV@vcaptioncell@args@bottomup%
+ under%
+ \else%
+ over\fi}}
+% align...
+\def\photobook@vcaptioncell@align{}
+% XXX for some reason \define@choicekey{..} does not expand macros...
+%\define@choicekey{vcaptioncell@args}{align}{flushleft,center,flushright}{%
+\define@key{vcaptioncell@args}{align}{%
+ \def\photobook@vcaptioncell@align{#1}}
+% margin...
+\def\photobook@vcaptioncell@margin{0pt}
+\define@key{vcaptioncell@args}{margin}{%
+ \def\photobook@vcaptioncell@margin{#1}}
+
+% valign
+\def\photobook@vcaptioncell@valign{%
+ \ifKV@vcaptioncell@args@bottomup%
+ b%
+ \else%
+ t\fi}
+
+\newcommand\vcaptioncell[2][]{%
+ \setkeys{vcaptioncell@args}{
+ left,
+ bottomup,
+ align=flushleft,
+ margin=1pt,
+ #1}%
+ %
+ \smash{\makebox[0pt][l]{%
+ \begin{minipage}[t][\cellheight][\photobook@vcaptioncell@valign]{\cellwidth}%
+ \begin{\photobook@vcaptioncell@orientation}%
+ \captioncell[%
+ \photobook@vcaptioncell@position,
+ align=\photobook@vcaptioncell@align,
+ margin=\photobook@vcaptioncell@margin]{#2}%
+ \end{\photobook@vcaptioncell@orientation}%
+ \end{minipage}}}%
+ \ignorespaces}
+
+
+%% \DescribeMacro{\rcaptioncell\{..\}}
+%
+%% \EXPERIMENTAL
+%%
+%% Upside-down caption cell.
+%%
+% XXX a bit off...
+\newcommand\rcaptioncell[2][]{%
+ \captioncell[align=flushleft, #1]{%
+ \begin{turn}{180}%
+ % XXX HACK: RAISEBOX -- need to shift by x-height...
+ % ...currently this is set to 1/(golden ratio) would
+ % be nice to make this parametric / font-derived...
+ \raisebox{1ex * \real{-0.618033988749855}}{#2}%
+ \end{turn}}%
+ \ignorespaces}
+
+
+%% \DescribeMacro{\captionblockcell\{..\}}
+%
+%% Add caption into a box left/right of current cell.
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% celloffsetleft celloffsetleft
+%% <-------> v
+%% . <--------------> .<-------------> cellwidth
+%% <------------------------> <------------------------> cellparentwidth
+%% . .. .. .. . .
+%% +------------------------+ +------------------------+
+%% | | | |
+%% | | | |
+%% |+-------++ - - - - - - +| |+ - - - - - - ++-------+|
+%% || |. .| |. .| ||
+%% || |. .| |. .| ||
+%% || cap. |. cell .| |. cell .| cap. ||
+%% || |. .| |. .| ||
+%% || |. .| |. .| ||
+%% |+-------++ - - - - - - +| |+ - - - - - - ++-------+|
+%% | | | |
+%% | | | |
+%% +------------------------+ +------------------------+
+%% <> clearcaption .. <> clearcaption
+%% <> spacing <> spacing
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+% XXX make captions clear top/bottom of page...
+% XXX need to do a caption block -- a cell to one side of an image to the
+% end of the page...
+% XXX can we use the normal caption and simply insert a minipage of the
+% appropriate width???
+
+\newlength\photobook@captionblockcell@tmplen
+
+% left / right
+\define@boolkey{captionblockcell@args}{left}[true]{%
+ \KV@captionblockcell@args@rightfalse}
+\define@boolkey{captionblockcell@args}{right}[true]{%
+ \KV@captionblockcell@args@leftfalse}
+
+% align=flushright|center|flushright
+% XXX this should depend on left/right...
+\def\photobook@captionblockcell@align{%
+ \ifKV@captionblockcell@args@left%
+ flushright%
+ \else%
+ flushleft\fi}
+\define@key{captionblockcell@args}{align}{%
+ \def\photobook@captionblockcell@align{#1}}
+
+% valign=t|c|b
+% XXX should be a boolkey -- t|c|b???
+\edef\photobook@captionblockcell@valign{b}
+\define@key{captionblockcell@args}{valign}{%
+ \edef\photobook@captionblockcell@valign{#1}}
+
+% clearance=<len> (defaults: \clearcaption)
+\newlength\photobook@captionblockcell@clearance
+\define@key{captionblockcell@args}{clearance}{%
+ \setlength\photobook@captionblockcell@clearance{#1}}
+
+% XXX should this clear only top/bottom or all sides???
+% XXX doc!!
+% XXX do we need this here???
+\define@boolkey{captionblockcell@args}{constraintoparent}[true]{}
+\newlength\photobook@captionblockcell@clearparent
+\setlength\photobook@captionblockcell@clearparent{0pt}
+\define@key{captionblockcell@args}{clearparent}{%
+ \setlength\photobook@captionblockcell@clearparent{#1}%
+ \KV@captionblockcell@args@constraintoparenttrue}
+
+% spacing=<len>
+\newlength\photobook@captionblockcell@spacing
+\setlength\photobook@captionblockcell@spacing{0pt}
+\define@key{captionblockcell@args}{spacing}{%
+ \setlength\photobook@captionblockcell@spacing{#1}}
+
+% width=<len>
+\newlength\photobook@captionblockcell@width
+\setlength\photobook@captionblockcell@width{0pt}
+\define@key{captionblockcell@args}{width}{%
+ \setlength\photobook@captionblockcell@width{#1}}
+
+% showbox
+\define@boolkey{captionblockcell@args}{showbox}[true]{}
+
+\newcommand\photobook@captionblockcell@content[2][0pt]{%
+ \hspace{\celloffsetleft}{%
+ \begin{adjustbox}{
+ % NOTE: we need to draw the border before we set margins
+ % to show the original box...
+ fbox=#1 0pt 0pt,
+ margin=0pt 0pt 0pt \celloffsettop,
+ minipage=[t][\cellheight][\photobook@captionblockcell@valign]{\cellwidth},
+ valign=T}%
+ \begin{\photobook@captionblockcell@align}%
+ \ignorespaces%
+ #2%
+ \end{\photobook@captionblockcell@align}%
+ \end{adjustbox}}}
+
+% XXX revise how \clearance is handled...
+% XXX do we need top/bottom boxes???
+% ...if yes do we need lop/left, top/right, bottom/left and bottom/right???
+% XXX should we keep within parent cell if imagecell has negative clearance???
+% XXX need to auto-place within images via \offsetleft...
+% XXX add tweak support...
+\newcommand\captionblockcell[2][]{%
+ % XXX should this be within the group???
+ \setkeys{captionblockcell@args}{%
+ left,
+ valign=b,
+ clearance=\clearcaption,
+ spacing=\captioncellspacing,
+ #1}%
+ %
+ \smash{\makebox[0pt][l]{%
+ \begingroup%
+ % setup cell context...
+ \setlength\clearcaption{%
+ \photobook@captionblockcell@clearance}%
+ \setlength\photobook@captionblockcell@tmplen{\cellwidth}%
+ \setlength\cellwidth{%
+ \ifnum \photobook@captionblockcell@width = 0%
+ \dimexpr
+ \cellparentwidth
+ - \photobook@captionblockcell@spacing
+ - \cellwidth
+ - \clearcaption
+ % XXX this is only present in images...
+ - \clearance \relax%
+ \else%
+ \photobook@captionblockcell@width\fi}%
+ \setlength\cellparentwidth{%
+ \photobook@captionblockcell@tmplen}%
+ \setlength\celloffsetleft{%
+ \ifKV@captionblockcell@args@left%
+ \dimexpr
+ - \cellwidth%
+ - \photobook@captionblockcell@spacing \relax%
+ \else%
+ \dimexpr
+ \cellparentwidth
+ + \photobook@captionblockcell@spacing \relax%
+ \fi}%
+ % clear parent...
+ % XXX do we need this here???
+ \ifKV@captionblockcell@args@constraintoparent%
+ % offset top...
+ \setlength\celloffsettop{%
+ \mindim{
+ \photobook@captionblockcell@clearparent - \celloffsettop
+ }{
+ \photobook@captionblockcell@clearparent}}%
+ % trim cell top...
+ \ifdim \celloffsettop > 0pt%
+ \setlength\cellheight{%
+ \cellheight - \celloffsettop}\fi%
+ % trim cell bottom...
+ \ifdim \dimexpr
+ \cellheight
+ + \celloffsettop \relax%
+ > \dimexpr
+ \cellparentheight
+ - \photobook@captionblockcell@clearparent \relax%
+ \setlength\cellheight{%
+ \dimexpr
+ \cellparentheight
+ - \mindim{
+ \cellheight - \cellparentheight
+ }{
+ 2\photobook@captionblockcell@clearparent} \relax}\fi%
+ % do not clear parent...
+ \else%
+ \setlength\celloffsettop{0pt}\fi%
+ %
+ % place...
+ \ifKV@captionblockcell@args@showbox%
+ \photobook@captionblockcell@content[0.1pt]{#2}%
+ \else%
+ \photobook@captionblockcell@content{#2}\fi%
+ \endgroup}}%
+ \ignorespaces}
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%%%%% Paper cells
+%
+%% Paper and page cells are very similar but differ in one aspect -- paper
+%% cells represent the paper as indicated by |layoutmode=<layout>| while
+%% page cells are always the size of the page block, i.e. |layoutmode=block|.
+%%
+
+%% \DescribeEnv{papercell}
+%
+%% Paper cell.
+%%
+%% This does not include bleeds.
+%%
+\newenvironment{papercell}{%
+ \begin{cell*}{\bleed, \bleed}{\blockwidth}{\blockheight}%
+}{%
+ \end{cell*}}
+
+
+%% \DescribeEnv{paperbleedcell}
+%
+%% Paper bleed cell.
+%%
+%% Like |papercell| but includes bleeds.
+%%
+\newenvironment{paperbleedcell}{%
+ \begin{cell*}{0pt, 0pt}{\bleedblockwidth}{\bleedblockheight}%
+}{%
+ \end{cell*}}
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%%%%% Page cells
+%
+%% Page cells always correspond to the page block size, i.e. |layoutmode=block|
+%% regardless of the actual |layoutmode| set currently.
+%%
+
+%% \DescribeEnv{pagecell}
+%% \DescribeEnv{pagecell*}
+%
+%% Page cell.
+%%
+%% This corresponds to the visible page in the |layoutmode=block| and
+%% does not include bleeds.
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% <-> bleed <-> bleed
+%%
+%% + - - - - - - - - - + + bleed
+%% . +---------------+ . v
+%% . | | .
+%% . | | .
+%% . | pagecell | .
+%% . | | .
+%% . | | .
+%% . +---------------+ . + bleed
+%% + - - - - - - - - - + v
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%% The star version accounts for |\bindingoffset|.
+%%
+%% Note that |layoutmode|'s other than block will change the paper size
+%% but will not affect this either in size (block size) or in position
+%% (top-left).
+%%
+\newenvironment{pagecell}{%
+ \begin{cell*}{\bleed,\bleed}{\pageblockwidth}{\pageblockheight}%
+}{%
+ \end{cell*}}
+
+\newenvironment{pagecell*}{%
+ \begin{cell*}{%
+ \bleed + \ifnumodd{\thepage}{\bindingoffset}{0pt},%
+ \bleed}%
+ {\pageblockwidth - \bindingoffset}%
+ {\pageblockheight}%
+}{%
+ \end{cell*}}
+
+
+%% \DescribeEnv{pagebleedcell}
+%
+%% Like |page| but includes bleeds.
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% <-> bleed <-> bleed
+%%
+%% +-------------------+ + bleed
+%% | + - - - - - - - + | v
+%% | . . |
+%% | . . |
+%% | . pagebleedcell . |
+%% | . . |
+%% | . . |
+%% | + - - - - - - - + | + bleed
+%% +-------------------+ v
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%% Note that as with |pagecell| this is not affected by |layoutmode|.
+%%
+\newenvironment{pagebleedcell}{%
+ \begin{cell*}{0pt, 0pt}{\bleedblockwidth}{\bleedblockheight}%
+}{%
+ \end{cell*}}
+
+
+
+% XXX EXPERIMENTAL / TEST...
+\NewEnviron{shipoutbgcell}{%
+ \AddToShipoutPictureBG*{%
+ \begin{pagecell}%
+ \BODY%
+ \end{pagecell}}%
+ \ignorespaces}
+
+
+
+% XXX EXPERIMENTAL / TEST...
+%% \DescribeEnv{textcell}
+%
+%% \EXPERIMENTAL
+%%
+%% A cell taking up the page text block.
+%
+%% >> \begin{textcell}{<width>}{<height>} ... \end{textcell}
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% <-----------> \textwidth
+%%
+%% <-----------------> \pageblockwidth
+%%
+%% +-----------------+ ^ \pageblockheight
+%% | | |
+%% | +-----------+ | | ^ \textheight
+%% | | | | | |
+%% | | | | | |
+%% | | textcell | | | |
+%% | | | | | |
+%% | | | | | |
+%% | +-----------+ | | v
+%% | | |
+%% +-----------------+ v
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%% Note that this is an inline cell and if something is on the page it
+%% may not be centered properly.
+%%
+\newenvironment{textcell}{%
+ \begin{inlinecell*}{\textwidth}{\textheight}%
+}{%
+ \end{inlinecell*}}
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%%%%% Foldout page cells
+%
+%% \EXPERIMENTAL
+%%
+%% A foldout is a special case cell that changes the page format.
+%%
+%% In addition to cell lengths a foldout defines a set of additional
+%% lengths and lists within its context.
+%%
+%% \DescribeMacro{\pagefoldpanels=<list>}
+%% \DescribeMacro{\pagefoldpanelfolds=<list>}
+%
+%% Lists page folded panel widths and fold types respectively.
+%%
+%% |pagefoldpanels| is set automatically for layouts other than |block|
+%% and for foldout pages, changing this can mess up fold markers and
+%% page cell placement.
+%%
+%% |pagefoldpanelfolds| is generated when creating a foldout.
+%%
+%% See:
+%% \href{https://ctan.altspu.ru/macros/generic/listofitems/listofitems-en.pdf}{listofitems}
+%% for list API.
+%%
+% XXX add a generic panel constructor..
+% \foldedcell[<height>]{<index>}
+% NOTE: these are wrapped in \@ifundefined{..} to prevent overwriting when
+% values are defined in \InitPages...
+\@ifundefined{pagefoldpanels}{%
+ \def\pagefoldpanels{}}{}
+\@ifundefined{pagefoldpanelfolds}{%
+ \def\pagefoldpanelfolds{}}{}
+
+%% \DescribeMacro{\foldoutwidth=<len>}
+%
+%% Total foldout page width, calculated when a foldout page is created.
+%%
+\newlength\foldoutwidth
+\setlength\foldoutwidth{\blockwidth}
+
+
+%% \DescribeEnv{foldout}
+%
+%% Create 2 or more pages in foldout mode.
+%
+%% >> \begin{foldout}[<fold-spec>] ... \end{foldout}
+%
+%% |<fold-spec>| can be a number of folds, or contain one or more fold
+%% types (|in| or |out|), two or more panel widths (dimensions) or a
+%% sequence of both (i.e. dim fold dim ...) where missing widths are
+%% automatically calculated and missing folds are the same as the previous
+%% fold or the default if no folds are specified.
+%%
+%% If not |<fold-spec>| is given, then the value of |\defaultfoldout| is
+%% used (default: |2|).
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% v \flatfold v
+%%
+%% - --=----------------++---------------++--------------+
+%% = .. .. |
+%% = .. .. |
+%% = .. .. |
+%% = .. .. |
+%% = .. .. |
+%% = .. .. |
+%% = .. .. |
+%% = .. .. |
+%% = .. .. |
+%% = (1) .. (2) .. (3) |
+%% - --=----------------++---------------++--------------+
+%%
+%% +--------------++---------------++----------------=-- -
+%% | .. .. =
+%% | .. .. =
+%% | .. .. =
+%% | .. .. =
+%% | .. .. =
+%% | .. .. =
+%% | .. .. =
+%% | .. .. =
+%% | .. .. =
+%% | (1) .. (2) .. (3) =
+%% +--------------++---------------++----------------=-- -
+%%
+%% ^ \flatfold ^
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%%
+%% A foldout always starts on the right/odd page and will always end on
+%% the left/even page.
+%%
+%% If |\foldoutpages{..}| is called on an even page, an empty normal
+%% page will be created pushing the foldout to the right page of the
+%% spread. If an odd number of pages is created the set will be padded
+%% with an empty page before |\foldoutpages{..}| exits.
+%%
+%%
+%% Foldout panel numbering
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% right page
+%% - --=-------+-------+- --+-------+-------+
+%% = | | | | |
+%% = (1) | (2) | ... | (n-1) | (n) |
+%% = | | | | |
+%% - --=-------+-------+-- -+-------+-------+
+%%
+%% left page
+%% +-------+-------+- --+-------+-------=-- -
+%% | | | | | =
+%% | (1) | (2) | ... | (n-1) | (n) =
+%% | | | | | =
+%% +-------+-------+-- -+-------+-------=-- -
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%% Formal |<fold-spec>| grammar:
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%% <fold-spec> ::
+%% <count>
+%% | <fold>
+%% | <panels>
+%% <panels> ::=
+%% <panel>
+%% | <panel> <panels>
+%% <panel> ::=
+%% <width> <fold>
+%% | <width>
+%% | <fold>
+%% <fold> ::=
+%% in | out
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%
+%% \DescribeMacro{\clearfoldoutbinding=<len>}
+%% \DescribeMacro{\clearfoldoutedge=<len>}
+%% \DescribeMacro{\clearfoldoutfold=<len>}
+%
+%% Fold panel sizing for similar fold sequence:
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% \clearfoldoutedge <->
+%% \clearfoldoutfold <->
+%% <--> \clearfoldoutbinding
+%% (3) /\ (2)
+%% +---------------------------------+ / \
+%% +------------------------------- | /
+%% -------------------------------------+ / (1)
+%% ======================================== =====+=====
+%% ========================================
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%% Note that |in in| fold sequence is drawn, |out out| is identical in
+%% sizing but reflectd.
+%%
+%%
+%% Fold panel sizing for dissimilar fold sequence:
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% \clearfoldoutedge <-> /
+%% <--> \clearfoldoutbinding (3) /
+%% \
+%% +---------------------------------- \ (2)
+%% +---------------------------------+ /
+%% -------------------------------------+ / (1)
+%% ======================================== =====+=====
+%% ========================================
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%% |in out| is drawn, |out it| is the same but reflected.
+%%
+%% The size of the paper fold is set by |\flatfold|.
+%%
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Fold marks...
+
+% draw in/out fold mark...
+%
+% >> \foldinmark[<baseline>]
+% >> \foldoutmark[<baseline>]
+%
+% NOTE: these should be used in a box.
+% NOTE: these are centered in origin.
+%
+% XXX these can affect the items after -- need to encapsulate better + test...
+% XXX do we need to make centering block size dependant on \foldmarksize
+% or are the two independent??? (test)
+% XXX MARKOFFSET for some reason splitting the \vspace{..} into a
+% arg-dependant and a foldmarklen-dependant parts below yields
+% wrong results...
+% ...not that simply splitting the original into two \vspace{..}
+% calls works fine...
+\newsavebox\photobook@foldinmark
+\newsavebox\photobook@foldoutmark
+\newcommand\ResetFoldMarks{%
+ \sbox{\photobook@foldinmark}{%
+ % XXX MARKOFFSET
+ %\vspace{0.5\photobook@foldmarklen}%
+ \smash{\makebox[0pt][l]{%
+ % size-agnostic centering...
+ \hspace{-5mm}{\makebox[1cm][c]{%
+ \begin{tikzpicture}%
+ \draw[white, ultra thick]
+ (-0.3333\photobook@foldmarklen,0.3333\photobook@foldmarklen)
+ -- (0,0)
+ -- (0.3333\photobook@foldmarklen,0.3333\photobook@foldmarklen);
+ \draw[white, ultra thick]
+ (0,0.6666\photobook@foldmarklen)
+ -- (0,-0.3333\photobook@foldmarklen);
+ \draw[black, thin]
+ (-0.3333\photobook@foldmarklen,0.3333\photobook@foldmarklen)
+ -- (0,0)
+ -- (0.3333\photobook@foldmarklen,0.3333\photobook@foldmarklen);
+ \draw[black, thin]
+ (0,0.6666\photobook@foldmarklen)
+ -- (0,-0.3333\photobook@foldmarklen);
+ \end{tikzpicture}}}}}}
+ \sbox{\photobook@foldoutmark}{%
+ % XXX MARKOFFSET
+ %\vspace{0.5\photobook@foldmarklen}%
+ \smash{\makebox[0pt][l]{%
+ % size-agnostic centering...
+ \hspace{-5mm}{\makebox[1cm][c]{%
+ \begin{tikzpicture}%
+ \draw[white, ultra thick]
+ (-0.3333\photobook@foldmarklen,0)
+ -- (0,0.3333\photobook@foldmarklen)
+ -- (0.3333\photobook@foldmarklen,0);
+ \draw[white, ultra thick]
+ (0,0.6666\photobook@foldmarklen)
+ -- (0,-0.3333\photobook@foldmarklen);
+ \draw[black, thin]
+ (-0.3333\photobook@foldmarklen,0)
+ -- (0,0.3333\photobook@foldmarklen)
+ -- (0.3333\photobook@foldmarklen,0);
+ \draw[black, thin]
+ (0,0.6666\photobook@foldmarklen)
+ -- (0,-0.3333\photobook@foldmarklen);
+ \end{tikzpicture}}}}}}}
+\ResetFoldMarks
+
+% XXX EXPERIMENTAL...
+% XXX not sure if this should ever be needed...
+%\newcommand\setfoldmarksize[1][6mm]{%
+% \setlength\photobook@foldmarklen{#1}%
+% %\edef\photobook@foldmarklen{#1}%
+% \ResetFoldMarks}
+
+% >> \foldinmark[<baseline>]
+\newcommand\foldinmark[1][0pt]{%
+ % XXX MARKOFFSET
+ %\vspace{#1}%
+ \vspace{\dimexpr 0.5\photobook@foldmarklen + #1 \relax}%
+ \usebox\photobook@foldinmark}
+% >> \foldoutmark[<baseline>]
+\newcommand\foldoutmark[1][0pt]{
+ % XXX MARKOFFSET
+ %\vspace{#1}%
+ \vspace{\dimexpr 0.5\photobook@foldmarklen + #1 \relax}%
+ \usebox\photobook@foldoutmark}
+
+% >> \photobook@foldmark[<baseline>]{<type>}{<left>, <top>}
+\newif\ifphotobook@foldmark@in
+\newcommand\photobook@foldmark[3][0pt]{%
+ \begingroup%
+ \ifnumodd{\thepage}{%
+ \ifthenelse{\equal{#2}{in}}{%
+ \photobook@foldmark@intrue}{%
+ \photobook@foldmark@infalse}}{%
+ \ifthenelse{\equal{#2}{in}}{%
+ \photobook@foldmark@infalse}{%
+ \photobook@foldmark@intrue}}%
+ \begin{textblock*}{0pt}(#3)%
+ \ifphotobook@foldmark@in%
+ \foldinmark[#1]%
+ \else%
+ \foldoutmark[#1]\fi%
+ \end{textblock*}%
+ \endgroup}
+\newcommand\photobook@topfoldmark[2][in]{%
+ \photobook@foldmark[-0.5\photobook@foldmarklen]{#1}{#2}}
+\newcommand\photobook@bottomfoldmark[2][in]{%
+ \photobook@foldmark[0.5\photobook@foldmarklen]{#1}{#2}}
+% >> \photobook@markfold[<fold>]{<offset>}
+\newcommand\photobook@markfold[2][in]{%
+ \photobook@topfoldmark[#1]{
+ #2,
+ \bleed
+ - \foldmarkoffset}%
+ \photobook@bottomfoldmark[#1]{
+ #2,
+ \blockheight
+ + \bleed
+ + \foldmarkoffset}}
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+\newlength\photobook@foldout@panelwidth
+\setlength\photobook@foldout@panelwidth{0pt}
+\newlength\photobook@foldout@maxpanelwidth
+\setlength\photobook@foldout@maxpanelwidth{0pt}
+\edef\photobook@foldout@count{}
+\edef\photobook@foldout@prevfold{in}
+
+% >> \photobook@foldout@pushpanel{<width>}{<fold>}
+%
+% XXX should we set maxpanelwidth when manually setting panel widths???
+% XXX might be good to warn the user if the manual fold will not work...
+% after two folds in same direction panels must be strictly smaller...
+% ...would be nice to maintain maxpanelwidth and warn if explicit
+% width is larger...
+\newcommand\photobook@foldout@pushpanel[2]{%
+ % initial max panel size...
+ \ifnum \thephotobook@foldoutpanel = 1%
+ \setlength\photobook@foldout@maxpanelwidth{%
+ \blockwidth
+ - \clearfoldoutedge}\fi%
+ % panel #2 -- clear binding...
+ \ifnum \thephotobook@foldoutpanel = 2%
+ \setlength\photobook@foldout@maxpanelwidth{%
+ \photobook@foldout@maxpanelwidth
+ - \clearfoldoutbinding}\fi%
+ % calculate widths...
+ \ifdim #1 = 0pt%
+ % first two panels do not need fold compensation...
+ \ifnum \thephotobook@foldoutpanel < 3%
+ \setlength\photobook@foldout@panelwidth{%
+ \photobook@foldout@maxpanelwidth
+ + \flatfold}%
+ \else%
+ % double fold twice in same direction...
+ \ifthenelse{\equal{#2}{\photobook@foldout@prevfold}}{%
+ \setlength\photobook@foldout@panelwidth{%
+ \photobook@foldout@maxpanelwidth
+ + \flatfold
+ - \clearfoldoutfold}%
+ % different fold directions -- no resizing needed here...
+ }{%
+ \setlength\photobook@foldout@panelwidth{%
+ \photobook@foldout@maxpanelwidth
+ + \flatfold}}\fi%
+ \setlength\photobook@foldout@maxpanelwidth{%
+ \photobook@foldout@panelwidth}%
+ % explicit width...
+ \else%
+ % XXX should we set the maxpanelwidth here too???
+ % ...if yes, should we be more thorough and size it to the
+ % available space (accounting for last two folds)??
+ %\setlength\photobook@foldout@maxpanelwidth{#1}%
+ \setlength\photobook@foldout@panelwidth{#1}\fi%
+ % accumulate width...
+ \setlength\foldoutwidth{
+ \foldoutwidth
+ + \photobook@foldout@panelwidth}%
+ % panel spec lists...
+ \edef\pagefoldpanelfolds{%
+ \pagefoldpanelfolds,#2}%
+ \edef\pagefoldpanels{%
+ \pagefoldpanels,\the\photobook@foldout@panelwidth}%
+ \stepcounter{photobook@foldoutpanel}}
+
+% XXX also add this to jacket/cover/endpaper...
+\newlength\photobook@showmarks@offset
+\setlength\photobook@showmarks@offset{0pt}
+\newcommand\photobook@showmarks{%
+ % XXX make this a list-length check...
+ \ifx \pagefoldpanels \empty \else%
+ \begingroup%
+ \setlength\photobook@showmarks@offset{\bleed}%
+ % NOTE: we need to iterate left/right pages in reverse order...
+ % NOTE: the below branches are similar but not identical...
+ \ifnumodd{\thepage}{%
+ \xintFor* ##1 in {\xintSeq{1}{\pagefoldpanelslen - 1}} \do {%
+ \setlength\photobook@showmarks@offset{
+ \photobook@showmarks@offset
+ + \pagefoldpanels[##1]}%
+ % XXX HACK: it appears that we can't expand \pagefoldpanelfolds[##1] in [..]...
+ \edef\photobook@showmarks@tmp{\pagefoldpanelfolds[##1]}%
+ \photobook@markfold[\photobook@showmarks@tmp]{\photobook@showmarks@offset}}%
+ }{
+ \xintFor* ##1 in {\xintSeq{\pagefoldpanelslen}{2}} \do {%
+ \setlength\photobook@showmarks@offset{
+ \photobook@showmarks@offset
+ + \pagefoldpanels[##1]}%
+ % XXX HACK: it appears that we can't expand \pagefoldpanelfolds[##1] in [..]...
+ \edef\photobook@showmarks@tmp{\pagefoldpanelfolds[##1 - 1]}%
+ \photobook@markfold[\photobook@showmarks@tmp]{\photobook@showmarks@offset}}}%
+ \endgroup\fi}
+\AtBeginShipout{%
+ \iffoldmarks%
+ \photobook@showmarks\fi}
+
+\newcounter{photobook@foldoutpanel}
+\setcounter{photobook@foldoutpanel}{1}
+
+\newenvironment{foldout}[1][\defaultfoldout]{%
+ \begingroup%
+ \setsepchar{ }%
+ \readlist*\photobook@foldout@args{#1}%
+ %
+ % defaults...
+ \setcounter{photobook@foldoutpanel}{1}
+ \setlength\foldoutwidth{0pt}%
+ \edef\photobook@foldout@prevfold{\pagefold}%
+ %
+ % panel count...
+ \ifnum \photobook@foldout@argslen = 1%
+ % in/out...
+ \ifthenelse{
+ \equal{#1}{in}
+ \OR \equal{#1}{out}}{%
+ \edef\photobook@foldout@count{2}%
+ \edef\photobook@foldout@prevfold{#1}%
+ % count...
+ }{%
+ \edef\photobook@foldout@count{#1}}%
+ %
+ % build the panels...
+ \xintFor* ##1 in {\xintSeq{1}{\photobook@foldout@count}} \do {%
+ \photobook@foldout@pushpanel{%
+ 0pt}{\photobook@foldout@prevfold}}%
+ % fold spec...
+ \else%
+ \foreachitem \photobook@foldout@opt \in \photobook@foldout@args{%
+ % in/out...
+ \ifthenelse{
+ \equal{\photobook@foldout@opt}{in}
+ \OR \equal{\photobook@foldout@opt}{out}}{%
+ \photobook@foldout@pushpanel{%
+ \photobook@foldout@panelwidth}{\photobook@foldout@opt}%
+ % prep for next panel...
+ \edef\photobook@foldout@prevfold{%
+ \photobook@foldout@opt}%
+ \setlength\photobook@foldout@panelwidth{0pt}%
+ % explicit size...
+ }{%
+ % finalize prev panel...
+ \ifdim \photobook@foldout@panelwidth > 0pt%
+ \photobook@foldout@pushpanel{%
+ \photobook@foldout@panelwidth}{\photobook@foldout@prevfold}\fi%
+ %
+ \setlength\photobook@foldout@panelwidth{\photobook@foldout@opt}}}%
+ % add trailing panel...
+ \photobook@foldout@pushpanel{%
+ \photobook@foldout@panelwidth}{\photobook@foldout@prevfold}%
+ \fi%
+ % prepare data for cells...
+ \setsepchar{,}%
+ % NOTE: the first element is empty due to how we create these
+ % i.e. ('' + ',<value>')...
+ \ignoreemptyitems%
+ \readlist*\pagefoldpanelfolds{\pagefoldpanelfolds}%
+ \readlist*\pagefoldpanels{\pagefoldpanels}%
+ %
+ % pages...
+ % NOTE: we'll keep the start of the foldout set at the right page
+ % and end it on the left page.
+ \cleardoublepage%
+ \begin{resizedpages}{\foldoutwidth}{\blockheight}%
+ \ignorespaces%
+}{%
+ \cleardoublepage%
+ \end{resizedpages}%
+ \endgroup}
+
+
+%% \DescribeEnv{foldoutcell}
+%% \DescribeEnv{foldoutcell*}
+%
+%% Create a cell spanning one or more foldout panels.
+%
+%% >> \begin{foldoutcell}[<num>] ... \end{foldoutcell}
+%% >> \begin{foldoutcell}[<from>-<to>] ... \end{foldoutcell}
+%
+%% If no arguments are given this will create a panel at |foldoutpanel|
+%% counter and increment it by one.
+%
+%% >> \begin{foldoutcell} ... \end{foldoutcell}
+%
+%% This will also auto-advance the page when all panels are filled.
+%%
+%% Note that manual panel placement has no effect on the panel counter
+%% thus care must be taken when mixing manual and auto-advanced panels.
+%% Also note that |foldoutpanel|'s value is not maintained within manually
+%% placed panels and should be treated as undefined.
+%%
+%% |foldoutcell*| is the same as the non-star version but creates cells
+%% including bleeds.
+%%
+%% Neither version clips its content, to explicitly clip use the |cliptocell|
+%% environment.
+%%
+%% These can only be used from within a |foldout| cell.
+%%
+% XXX should we be able to turn clipping on/off???
+
+\newlength\photobook@foldoutcell@left
+\setlength\photobook@foldoutcell@left{0pt}
+\newlength\photobook@foldoutcell@width
+\setlength\photobook@foldoutcell@width{0pt}
+
+% calculate offset via \pagefoldpanels and write to dimension <name>...
+% >> \photobook@foldoutcell@setfoldoutoffset{<name>}{<from>}{<to>}
+%
+% NOTE: [<from>, <to>[ -- i.e. <to> is not included...
+\newcommand\photobook@foldoutcell@setfoldoutoffset[3]{%
+ \expandafter\setlength\csname #1\endcsname{0pt}%
+ \ifnum \numexpr #2 \relax < \numexpr #3 \relax%
+ \xintFor* ##1 in {%
+ \xintSeq{#2}{\xintiiMin{#3}{\pagefoldpanelslen + 1} - 1}} \do {%
+ \ifnumodd{\thepage}{%
+ \expandafter\setlength\csname #1\endcsname{%
+ \csname #1\endcsname%
+ + \pagefoldpanels[##1]}
+ }{%
+ \expandafter\setlength\csname #1\endcsname{%
+ \csname #1\endcsname%
+ + \pagefoldpanels[-\numexpr ##1 \relax]}}}\fi}
+
+% foldout panel auto-advance counter...
+\newcounter{foldoutpanel}
+\setcounter{foldoutpanel}{0}
+\edef\photobook@foldoutcell@from{0}
+% reset panel count on each page...
+\AtBeginShipout{%
+ \setcounter{foldoutpanel}{0}
+ \edef\photobook@foldoutcell@from{%
+ \thefoldoutpanel}}
+
+% set panel left/width dimensions (helper)...
+% >> \photobook@foldoutcell@setdimensions[<panel-spec>]
+%
+% NOTE: for <panel-spec> see docs for foldoutcell/foldoutcell*...
+\newcommand\photobook@foldoutcell@setdimensions[1][0]{
+ % parse args...
+ \setsepchar{-}%
+ \readlist*\photobook@foldoutcell@panels{#1}%
+ %
+ % auto advance panel...
+ \ifnum \photobook@foldoutcell@panels[1] = 0%
+ % auto advance page...
+ \ifnum \value{foldoutpanel} = \pagefoldpanelslen%
+ % NOTE: this will reset the counter...
+ \newpage\fi%
+ \stepcounter{foldoutpanel}%
+ \global\edef\photobook@foldoutcell@from{%
+ \thefoldoutpanel}%
+ % explicit panels...
+ \else%
+ \global\edef\photobook@foldoutcell@from{
+ \photobook@foldoutcell@panels[1]}\fi%
+ % left offset...
+ \photobook@foldoutcell@setfoldoutoffset{photobook@foldoutcell@left}{%
+ 1
+ }{%
+ \photobook@foldoutcell@from}%
+ % panel from-to width...
+ \ifnum \photobook@foldoutcell@panelslen > 1%
+ \photobook@foldoutcell@setfoldoutoffset{photobook@foldoutcell@width}{%
+ \photobook@foldoutcell@from%
+ }{%
+ \photobook@foldoutcell@panels[2] + 1}%
+ % panel N width...
+ \else%
+ \ifnumodd{\thepage}{%
+ \setlength\photobook@foldoutcell@width{%
+ \pagefoldpanels[{\photobook@foldoutcell@from}]}
+ }{%
+ \setlength\photobook@foldoutcell@width{%
+ \pagefoldpanels[-\numexpr \photobook@foldoutcell@from \relax]}}\fi}
+
+\newenvironment{foldoutcell}[1][0]{%
+ % XXX check if outside of foldout -> warn...
+ \begingroup%
+ \photobook@foldoutcell@setdimensions[#1]%
+ \begin{cell*}{%
+ \bleed
+ + \photobook@foldoutcell@left,%
+ \bleed}%
+ {\photobook@foldoutcell@width}%
+ {\pageblockheight}%
+}{%
+ \end{cell*}%
+ \endgroup}
+
+\newenvironment{foldoutcell*}[1][0]{%
+ % XXX check if outside of foldout -> warn...
+ \begingroup%
+ \photobook@foldoutcell@setdimensions[#1]%
+ % add bleed to first/last panel...
+ \ifnum \photobook@foldoutcell@from = 1%
+ \setlength\photobook@foldoutcell@width{%
+ \bleed
+ + \photobook@foldoutcell@width}
+ \else%
+ \setlength\photobook@foldoutcell@left{%
+ \bleed
+ + \photobook@foldoutcell@left}\fi%
+ \ifnum \photobook@foldoutcell@from = \pagefoldpanelslen%
+ \setlength\photobook@foldoutcell@width{%
+ \bleed
+ + \photobook@foldoutcell@width}\fi%
+ \begin{cell*}{%
+ \photobook@foldoutcell@left,%
+ 0pt}%
+ {\photobook@foldoutcell@width}%
+ {\pageblockheight + 2\bleed}%
+}{%
+ \end{cell*}%
+ \endgroup}
+
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%%%%% Multi-page cells
+%
+%% \DescribeEnv{spreadtopages}
+%% \DescribeEnv{spreadtopages*}
+%% \DescribeMacro{\usespreadpage\{..\}}
+%% \DescribeMacro{\usespreadpage*\{..\}}
+%
+%% Spread cell into pages.
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% +----------------------------------- -
+%% | <-- input cell
+%% | . . .
+%% | Oversized content cell...
+%% | . . .
+%% |
+%% +----------.----------.----------.-- -
+%% . . . . . . .
+%% . . . . . . .
+%% +----------+ +----------+ +----------+ +-- -
+%% | | | | | | | <-- output pages
+%% | | | | | | |
+%% | Overs| |ized conte| |nt cell...| |
+%% | | | | | | |
+%% | | | | | | |
+%% +----------+ +----------+ +----------+ +-- -
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%% |spreadtopages| creates a cell and spreads it into pages right away.
+%%
+%% >> \begin{spreadtopages} .. \end{spreadtopages}
+%% >> \begin{spreadtopages}[<page-count>] .. \end{spreadtopages}
+%%
+%% |spreadtopages*| creates a named save cell only allowing the pages
+%% to be placed manually via |\usespreadpage{..}|.
+%%
+%% >> \begin{spreadtopages*}{<name>} .. \end{spreadtopages*}
+%% >> \begin{spreadtopages*}[<page-count>]{<name>} .. \end{spreadtopages*}
+%%
+%% |\usespreadpage{..}| places a page from a saved cell.
+%%
+%% >> \usespreadpage{<name>}
+%% >> \usespreadpage[<page-num>]{<name>}
+%%
+%% |\usespreadpage*{..}| is the same as the non-star version but will
+%% not use a |page| environment, enabling the user to populate the page
+%% with other elements.
+%%
+%% Page numbers are 1-based.
+%%
+%% Note that the cell created by |spreadtopages*| env is a normal save
+%% cell and can be manipulated via |\usecell{..}| and |\usecell*{..}|.
+%%
+% XXX add nudge/grow support...
+
+\NewEnviron{spreadtopages*}[2][2]{%
+ % setup page count...
+ \@ifundefined{thespreadtopages#2page}{%
+ \newcounter{spreadtopages#2page}}{}
+ \setcounter{spreadtopages#2page}{1}
+ %
+ \begingroup%
+ % create the actual cell...
+ \setlength\cellparentwidth{\cellwidth}%
+ \setlength\cellparentheight{\cellheight}%
+ \setlength\cellwidth{#1\pageblockwidth}%
+ \setlength\cellheight{\pageblockheight}%
+ %
+ \gsavecell{#2}{\cellwidth}{\cellheight}{\BODY}%
+ \endgroup%
+ \ignorespaces}
+
+% NOTE: this essentially counts pages, \usecell{..} / \usecell*{..} are
+% better suited for custom stuff...
+% NOTE: page is a 1 based offset in pages and can be fractional...
+% NOTE: \usecell*{..} takes care of all the bleed calculations...
+\def\usespreadpage{\@ifstar{%
+ \photobook@usespreadpage@star%
+ }{%
+ \photobook@usespreadpage}}
+\newcommand\photobook@usespreadpage@star[2][]{%
+ \begin{pagecell}%
+ % auto advance pages...
+ \ifthenelse{\equal{#1}{}}{%
+ \usecell*{#2}%
+ (0pt, \numexpr \value{spreadtopages#2page} - 1 \relax\cellwidth)%
+ {\cellwidth}{\cellheight}%
+ \stepcounter{spreadtopages#2page}%
+ % manual page selected...
+ }{%
+ \usecell*{#2}%
+ (0pt, \numexpr #1 - 1 \relax\cellwidth)%
+ {\cellwidth}{\cellheight}}%
+ \end{pagecell}}
+\newcommand\photobook@usespreadpage[2][]{%
+ \begin{page}%
+ \usespreadpage*[#1]{#2}%
+ \end{page}}
+
+\NewEnviron{spreadtopages}[1][2]{%
+ \begingroup%
+ % create the actual cell...
+ \setlength\cellparentwidth{\cellwidth}%
+ \setlength\cellparentheight{\cellheight}%
+ \setlength\cellwidth{#1\pageblockwidth}%
+ \setlength\cellheight{\pageblockheight}%
+ %
+ \savecell{photobook@spreadtopages}{\cellwidth}{\cellheight}{\BODY}%
+ %
+ % place the pages...
+ \foreach \photobook@spreadtopages@page in {1, ..., #1}{%
+ \usespreadpage[\photobook@spreadtopages@page]{photobook@spreadtopages}}%
+ \endgroup%
+ \ignorespaces}
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%%%%% Endpaper cells
+%
+%% \DescribeEnv{leftside}
+%% \DescribeEnv{rightside}
+%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% +---------------+---------------+
+%% | | |
+%% | | |
+%% | leftside | rightside |
+%% | | |
+%% | | |
+%% +---------------+---------------+
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+
+% XXX for some reason naming these anything starting with endpaper will
+% make LaTeX complain that that is already defined...
+% ...collision with bools???
+\newenvironment{leftside}{%
+ \begin{pagecell}%
+}{%
+ \end{pagecell}}
+
+\newenvironment{rightside}{%
+ \begin{cell*}%
+ {\bleed + \pageblockwidth, \bleed}%
+ {\pageblockwidth}{\pageblockheight}%
+}{%
+ \end{cell*}}
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%%%%% Cover and dust jacket cells
+%
+%% \DescribeEnv{frontcover}
+%% \DescribeEnv{backcover}
+%
+%% \DescribeEnv{spine}
+%% \DescribeEnv{vspine}
+%
+%% \DescribeEnv{frontflap}
+%% \DescribeEnv{backflap}
+%
+%% Covers and dust jackets differ only in that covers do not {usually}
+%% have flaps.
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% backflap spline/vspine frontflap
+%% . backcover . frontcover .
+%% v v v v v
+%% +---+---------------+---+---------------+---+
+%% | | | | | |
+%% | | | | | |
+%% | | Back | | Front | |
+%% | | | | | |
+%% | | | | | |
+%% +---+---------------+---+---------------+---+
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+\newenvironment{frontcover}{%
+ \begin{cell*}{
+ \bleed
+ + \jacketflapback
+ + \coverflap
+ + \jacketwrap
+ + \coverboardgrow
+ + \pageblockwidth
+ + 2\spinefold
+ + \spinewidth,
+ \bleed
+ + \coverflap }%
+ { \pageblockwidth + \coverboardgrow }%
+ { \pageblockheight + 2\coverboardgrow }%
+}{%
+ \end{cell*}}
+
+\newenvironment{backcover}{%
+ \begin{cell*}{
+ \bleed
+ + \jacketflapback
+ + \coverflap
+ + \jacketwrap,
+ \bleed
+ + \coverflap }%
+ { \pageblockwidth + \coverboardgrow }%
+ { \pageblockheight + 2\coverboardgrow }%
+}{%
+ \end{cell*}}
+
+
+% spines...
+%
+\newenvironment{spine}{%
+ \begin{cell*}{
+ \bleed
+ + \jacketflapback
+ + \coverflap
+ + \jacketwrap
+ + \coverboardgrow
+ + \pageblockwidth
+ + \spinefold,
+ \bleed
+ + \coverflap }%
+ { \spinewidth }%
+ { \pageblockheight + 2\coverboardgrow }%
+}{%
+ \end{cell*}}
+
+\newenvironment{vspine}[1][topdown]{%
+ \def\photobook@vspine@orientation{#1}%
+ %
+ \begin{spine}%
+ \begin{\photobook@vspine@orientation}%
+}{%
+ \end{\photobook@vspine@orientation}%
+ \end{spine}}
+
+
+% jackets flaps...
+%
+\newenvironment{frontflap}{%
+ \begin{cell*}{
+ \bleed
+ + \jacketflapback
+ + 2\jacketwrap
+ + 2\coverboardgrow
+ + 2\pageblockwidth
+ + 2\spinefold
+ + \spinewidth,
+ \bleed
+ + \coverflap }%
+ { \jacketflapfront }%
+ { \pageblockheight + 2\coverboardgrow }%
+}{%
+ \end{cell*}}
+
+\newenvironment{backflap}{%
+ \begin{cell*}{
+ \bleed,
+ \bleed
+ + \coverflap }%
+ { \jacketflapback }%
+ { \pageblockheight + 2\coverboardgrow }%
+}{%
+ \end{cell*}}
+
+
+
+%----------------------------------------------------------------------
+%%%% Caption Templates
+% XXX need to be able to configure/pass/override:
+% - size / \captionsize...
+% - color...
+
+%% \DescribeMacro{\captionsize\{..\}}
+%
+%% Defines the caption font.
+%%
+%% Can be redefined to control caption font/style.
+%%
+\ResettableMacro{captionsize}{%
+ \fontsize{6.5pt}{8pt}\selectfont}
+
+
+%% \DescribeMacro{\captionformat\{..\}}
+%
+%% General caption format.
+%
+%% >> \captionformat{<code>}
+%
+%% This can be redefined to control the image caption.
+%%
+\ResettableMacro{captionformat}[1]{%
+ \adjustbox{
+ margin=0.1em 0.2em,
+ varwidth=\cellwidth}{%
+ \captionsize #1}}
+
+
+
+%----------------------------------------------------------------------
+%%%% Page Templates
+%
+%% This section contains a set of predefined configurable single-page
+%% templates.
+%%
+% XXX PRECLEAR this may lead to pages collapsing on each other, test...
+%
+%% Note that most page templates do not |\clearpage| before expanding,
+%% this enables one to prepend elements (like pdf comments), if clearing
+%% a page is required add |\clearpage| manually before the template.
+%%
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%%%%% Tweaking
+%
+%% Most page/spread templates provide an ability to externally "tweak"
+%% some image proportions.
+%%
+%% This is an alternative means to setting template properties, e.g:
+%
+%% \begin{verbatim}
+%% \tweakimagescale{0.8}
+%% \ImagePage{image}
+%% \end{verbatim}
+%
+%% Is equivalent to:
+%
+%% >> \ImagePage[scale=0.8]{image}
+%
+%% Tweaks get reset after each template.
+%%
+
+
+%% \DescribeMacro{\imagescale=<num>}
+%% \DescribeMacro{\imageoffsettop=<len>}
+%% \DescribeMacro{\imageoffsetleft=<len>}
+%
+%% Tweak next image templates scale/offsettop/offsetleft
+%%
+%% Note that |\imagescale| is not a length.
+%
+%% >> \edef\imagescale{<scale>}
+%% >> \setlength\imageoffsettop{<len>}
+%% >> \setlength\imageoffsetleft{<len>}
+%%
+\edef\imagescale{1}
+% NOTE: these are initialized later by \resetimagetweaks...
+\newlength\imageoffsettop
+\newlength\imageoffsetleft
+
+%% \DescribeMacro{\tweakimagescale\{..\}}
+%% \DescribeMacro{\tweakimageoffsettop\{..\}}
+%% \DescribeMacro{\tweakimageoffsetleft\{..\}}
+%
+%% Convenience commands
+%%
+%% These provide a uniform interface for tweaking.
+%
+%% >> \tweakimagescale{<scale>}
+%% >> \tweakimageoffsettop{<len>}
+%% >> \tweakimageoffsetleft{<len>}
+%%
+\newcommand\tweakimagescale[1]{%
+ \edef\imagescale{#1}}
+
+\newcommand\tweakimageoffsettop[1]{%
+ \setlength\imageoffsettop{#1}}
+
+\newcommand\tweakimageoffsetleft[1]{%
+ \setlength\imageoffsetleft{#1}}
+
+
+%% \DescribeMacro{\resetimagetweaks\{..\}}
+%
+%% Reset tweaked values.
+%%
+\newcommand\resetimagetweaks{%
+ \edef\imagescale{1}%
+ \setlength\imageoffsettop{0pt}%
+ \setlength\imageoffsetleft{0pt}}
+
+% setup initial state...
+\resetimagetweaks
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% meta-commands...
+
+%M \DescribeMacro{\ImagePageTemplate\{..\}}
+%
+%M >> \ImagePageTemplate{<name>}{<code>}
+%
+%M This will define two commands:
+%
+%M >> \<name>[<options>]{<caption>}{<code>}
+%M >> \<name>*[<options>]{<caption>}{<code>}
+%
+%M |\<name>{..}| will use |\<name>Caption{..}| template command to typeset
+%M the image caption while |\<name>*{..}| will show the caption as-is.
+%M
+\def\ImagePageTemplate#1#2{%
+ % handle <macro>* version...
+ \expandafter\def\csname #1\endcsname{\@ifstar{%
+ \csname photobook@ImagePageTemplate@#1@star\endcsname%
+ }{%
+ \csname photobook@ImagePageTemplate@#1\endcsname}}%
+ % main implementation (raw caption)...
+ \expandafter\newcommand\csname photobook@ImagePageTemplate@#1@star\endcsname[3][]{%
+ #2%
+ \resetimagetweaks}%
+ % main implementation with caption template...
+ \expandafter\newcommand\csname photobook@ImagePageTemplate@#1\endcsname[3][]{%
+ \csname photobook@ImagePageTemplate@#1@star\endcsname[##1]{%
+ \@ifundefined{#1Caption}{%
+ ##2%
+ }{%
+ \csname #1Caption\endcsname{##2}}}{##3}}}
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+\newsavebox\photobook@imagebox
+
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%%%%% General interface
+%
+%% A templates provide a uniform interface consisting of several commands:
+%%
+%% Base template command:
+%
+%% >> \<template-name>{<caption>}{<image>}
+%% >> \<template-name>[<options>]{<caption>}{<image>}
+%
+%% |<options>| is the same as for |\imagecell{..}|.
+%%
+%% Template-specific caption command:
+%
+%% >> \<template-name>Caption{<caption>}
+%
+%% This can be redefined to control typesetting the caption for all
+%% consecutive templates.
+%%
+%% Reset template caption to default:
+%
+%% >> \reset<template-name>Caption
+%
+%% An equivalent to the non-star version but use the caption as-is:
+%
+%% >> \<template-name>*{<caption>}{<image>}
+%% >> \<template-name>*[<options>]{<caption>}{<image>}
+%
+%% Note that thogh some template versions differ only in |<options>|
+%% defaults passed to |\imagecell{..}|, they are split to provide ability
+%% to configure the template defaults separately.
+%%
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%%%%% No bleed
+
+%% \DescribeMacro{\ImagePage\{..\}}
+%% \DescribeMacro{\ImagePageCaption\{..\}}
+%% \DescribeMacro{\resetImagePageCaption}
+%% \DescribeMacro{\ImagePage*\{..\}}
+%
+%% Basic image page
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% +-----------------+
+%% | |
+%% | +-------------+ |
+%% | | . . | |
+%% | | . . | |
+%% | | image | |
+%% | | . . | |
+%% | | . . | |
+%% | +-------------+ |
+%% | c |
+%% | |
+%% +-----------------+
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%% Create an image page:
+%%
+%% Note that |\ImagePage{..}| only supports tweaking |scale|, this is
+%% intentional ad tweaking offset will mess up page alignment relative
+%% to other pages in a book.
+%%
+\ResettableMacro{ImagePageCaption}[1]{%
+ \captioncell[under, align=flushright]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImagePage}{%
+ % XXX PRECLEAR do we need clear page here???
+ %\clearpage%
+ \begin{page}%
+ \begin{pagecell*}%
+ \begin{minipage}[t][\cellheight][c]{\cellwidth}%
+ \vspace{\imageblockoffsettop\pagetextheight}%
+ \begin{center}%
+ \begin{inlinecell*}%
+ {\imageblockwidth\pagetextwidth}%
+ {\imageblockheight\pagetextheight}%
+ \imagecell[fit,
+ scale=\imagescale,
+ %captionclearparent=\captionclearpage,
+ #1]{#2}{#3}%
+ \end{inlinecell*}%
+ \end{center}%
+ \end{minipage}%
+ \end{pagecell*}%
+ \end{page}}
+
+
+%% \DescribeMacro{\ImagePageClear\{..\}}
+%% \DescribeMacro{\ImagePageClearCaption\{..\}}
+%% \DescribeMacro{\resetImagePageClearCaption}
+%% \DescribeMacro{\ImagePageClear*\{..\}}
+%
+%% >> \ImagePageClear[<options>]{<caption>}{<image>}
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% \clearimage \clearimage
+%% v v
+%% +-----------------+ +-----------------+ < \clearimage
+%% | | | +-----------+ |
+%% |+---------------+| | | . . | |
+%% || . . || | | . . | |
+%% || . . || | | . . | |
+%% || image || | | image | |
+%% || . . || | | . . | |
+%% || . . || | | . . | |
+%% |+---------------+| | | . . | |
+%% | c | | +-----------+ |
+%% +-----------------+ +-----------------+ < \clearimage
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%% Default image clearance is set by |\clearimage| global length.
+%%
+%% This respects |\bindingoffset|.
+%%
+% XXX make captions adaptive???
+\ResettableMacro{ImagePageClearCaption}[1]{%
+ \captioncell[under, align=flushright]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImagePageClear}{%
+ % XXX PRECLEAR do we need clear page here???
+ %\clearpage%
+ \begin{page}%
+ % NOTE: this accounts for \bindingoffset...
+ \begin{pagecell*}%
+ \imagecell[%
+ center,
+ clearance=\clearimage,
+ scale=\imagescale,
+ offsettop=\imageoffsettop,
+ offsetleft=\imageoffsetleft,
+ captionclearparent=\captionclearpage,
+ #1]{#2}{#3}%
+ \end{pagecell*}%
+ \end{page}}
+
+
+%% \DescribeMacro{\ImagePageClear<D>\{..\}}
+%% \DescribeMacro{\ImagePageClear<D>Caption\{..\}}
+%% \DescribeMacro{\resetImagePageClear<D>Caption}
+%% \DescribeMacro{\ImagePageClear<D>*\{..\}}
+%
+%% |<D>| can be one of T, B, L or R, for top, bottom, left and right
+%% respectively.
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% +-----------------+ +-----------------+
+%% | +-------------+ | | |
+%% | | . . | | | c |
+%% | | . . | | | +-------------+ |
+%% | | image | | | | . . | |
+%% | | . (T) . | | | | . . | |
+%% | | . . | | | | image | |
+%% | +-------------+ | | | . (B) . | |
+%% | c | | | . . | |
+%% | | | +-------------+ |
+%% +-----------------+ +-----------------+
+%%
+%% +-----------------+ +-----------------+
+%% | +---------+ | | +---------+ |
+%% | |. .| | | |. .| |
+%% | | . . | | | | . . | |
+%% | | . . | | | | . . | |
+%% | | image | | | | image | |
+%% | | .(L). | | | | .(R). | |
+%% | | . . | | | | . . | |
+%% | |. .| | | |. .| |
+%% | +---------+ c | | c +---------+ |
+%% +-----------------+ +-----------------+
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+% XXX TEST...
+\ResettableMacro{ImagePageClearTCaption}[1]{%
+ \captioncell[under]{%
+ \captionformat{#1}}}
+% XXX the image seems to be a line too low...
+\ImagePageTemplate{ImagePageClearT}{%
+ \ImagePageClear*[%
+ top,
+ #1]{#2}{#3}}
+
+\ResettableMacro{ImagePageClearBCaption}[1]{%
+ \captioncell[over]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImagePageClearB}{%
+ \ImagePageClear*[%
+ bottom,
+ #1]{#2}{#3}}
+
+\ResettableMacro{ImagePageClearLCaption}[1]{%
+ \captionblockcell[right, clearance=\captionclearpage]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImagePageClearL}{%
+ \ImagePageClear*[%
+ left,
+ #1]{#2}{#3}}
+
+\ResettableMacro{ImagePageClearRCaption}[1]{%
+ \captionblockcell[left, clearance=\captionclearpage]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImagePageClearR}{%
+ \ImagePageClear*[%
+ right,
+ #1]{#2}{#3}}
+
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%%%%% Partial bleed
+
+%% \DescribeMacro{\ImagePageFit\{..\}}
+%% \DescribeMacro{\ImagePageFitCaption\{..\}}
+%% \DescribeMacro{\resetImagePageFitCaption}
+%% \DescribeMacro{\ImagePageFit*\{..\}}
+%
+%% Fit image into page...
+%
+%% >> \ImagePageFit[<options>]{<caption>}{<image>}
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% . . . . . . .
+%% +-----------------+ +-----------------+
+%% | | | |. .| |
+%% . +-----------------+ . | | . . | |
+%% . | . . | . | | . . | |
+%% . | . . | . | | . . | |
+%% . | image | . | | image | |
+%% . | . . | . | | . . | |
+%% . | . . | . | | . . | |
+%% . +-----------------+ . | | . . | |
+%% | c | | |. c.| |
+%% +-----------------+ +-----------------+
+%% . . . . . . .
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%% Default image clearance is set by |\bleed| global length.
+%%
+%% If centered image fits vertically this will account for |\bindingoffset|.
+%%
+% XXX make captions adaptive???
+\ResettableMacro{ImagePageFitCaption}[1]{%
+ \captioncell[under, align=flushright]{%
+ \captionformat{#1}}}
+
+\newif\ifphotobook@ImagePageFit@centered
+\photobook@ImagePageFit@centeredfalse
+
+\newlength\photobook@ImagePageFit@imgratio
+\newlength\photobook@ImagePageFit@cellratio
+\def\photobook@ImagePageFit@opt{}
+\def\photobook@ImagePageFit@args{}
+
+\ImagePageTemplate{ImagePageFit}{%
+ \begingroup%
+ % see if default alignment is overridden...
+ \setsepchar{,}%
+ \ignoreemptyitems%
+ \readlist*\photobook@ImagePageFit@args{moo, #1}%
+ \foreachitem\photobook@ImagePageFit@opt\in\photobook@ImagePageFit@args{%
+ \ifthenelse{\equal{\photobook@ImagePageFit@opt}{fill}}{%
+ \photobook@ImagePageFit@centeredtrue}{}%
+ \ifthenelse{\equal{\photobook@ImagePageFit@opt}{inner}}{%
+ \photobook@ImagePageFit@centeredtrue}{}%
+ \ifthenelse{\equal{\photobook@ImagePageFit@opt}{outer}}{%
+ \photobook@ImagePageFit@centeredtrue}{}%
+ \ifthenelse{\equal{\photobook@ImagePageFit@opt}{top}}{%
+ \photobook@ImagePageFit@centeredtrue}{}%
+ \ifthenelse{\equal{\photobook@ImagePageFit@opt}{left}}{%
+ \photobook@ImagePageFit@centeredtrue}{}%
+ \ifthenelse{\equal{\photobook@ImagePageFit@opt}{bottom}}{%
+ \photobook@ImagePageFit@centeredtrue}{}%
+ \ifthenelse{\equal{\photobook@ImagePageFit@opt}{right}}{%
+ \photobook@ImagePageFit@centeredtrue}{}}%
+ % align center -> check if image fits vertically...
+ \ifphotobook@ImagePageFit@centered\else%
+ \sbox{\photobook@imagebox}{\includegraphics{#3}}%
+ \setlength\photobook@ImagePageFit@imgratio{%
+ 1pt * \ratio{\wd\photobook@imagebox}{\ht\photobook@imagebox}}%
+ % NOTE: subtracting \bindingoffset from \cellwidth here makes sure that
+ % we avoid offsetting images close enough in ratio to the page and
+ % messing up bleeds...
+ \setlength\photobook@ImagePageFit@cellratio{%
+ 1pt * \ratio{\cellwidth - \bindingoffset}{\cellheight}}%
+ \ifdim \photobook@ImagePageFit@imgratio > \photobook@ImagePageFit@cellratio%
+ \photobook@ImagePageFit@centeredtrue\fi\fi%
+ %
+ % ignore \bindingoffset -> center the image...
+ \ifphotobook@ImagePageFit@centered%
+ % XXX PRECLEAR do we need clear page here???
+ %\clearpage%
+ \begin{page}%
+ % NOTE: this does not account for \bindingoffset...
+ \begin{pagecell}%
+ \imagecell[%
+ center,
+ clearance=-\bleed,
+ scale=\imagescale,
+ offsettop=\imageoffsettop,
+ offsetleft=\imageoffsetleft,
+ captionclearparent=\captionclearpage,
+ #1]{#2}{#3}%
+ \end{pagecell}%
+ \end{page}%
+ % special case: centered vertical image -> account for \bindingoffset...
+ \else%
+ \ImagePageClear*[%
+ clearance=-\bleed,
+ #1]{#2}{#3}\fi%
+ \endgroup}
+
+
+%% \DescribeMacro{\ImagePageFit<D>\{..\}}
+%% \DescribeMacro{\ImagePageFit<D>Caption\{..\}}
+%% \DescribeMacro{\resetImagePageFit<D>Caption}
+%% \DescribeMacro{\ImagePageFit<D>*\{..\}}
+%
+%% |<D>| can be one of T, B, L or R, for top, bottom, left and right
+%% respectively.
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% . . . . . . . . . . . .
+%% . +-----------------+ . +-----------------+
+%% . | . . | . | |
+%% . | . . | . | |
+%% . | image | . | |
+%% . | . (T) . | . . |-----------------| .
+%% . | . . | . . | . . | .
+%% . |-----------------| . . | . . | .
+%% | | . | image | .
+%% | | . | . (B) . | .
+%% | | . | . . | .
+%% +-----------------+ . +-----------------+ .
+%% . . . . . . . . . . . .
+%%
+%% . . . . . . . . . . . . . . . .
+%% . +-----------------+ +-----------------+ .
+%% . |. .| | | |. .| .
+%% . | . . | | | | . . | .
+%% . | . . | | | | . . | .
+%% . | . . | | | | . . | .
+%% . | image | | | | image | .
+%% . | .(L). | | | | .(R). | .
+%% . | . . | | | | . . | .
+%% . | . . | | | | . . | .
+%% . |. .| c | | c |. .| .
+%% . +-----------------+ +-----------------+ .
+%% . . . . . . . . . . . . . . . .
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+\ResettableMacro{ImagePageFitTCaption}[1]{%
+ \captioncell[under]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImagePageFitT}{%
+ \ImagePageFit*[%
+ top,
+ #1]{#2}{#3}}
+
+\ResettableMacro{ImagePageFitBCaption}[1]{%
+ \captioncell[over]{%
+ \captionformat{#1}}}
+% XXX the image seems a bit too low...
+\ImagePageTemplate{ImagePageFitB}{%
+ \ImagePageFit*[%
+ bottom,
+ #1]{#2}{#3}}
+
+\ResettableMacro{ImagePageFitLCaption}[1]{%
+ \captionblockcell[right, clearance=\captionclearpage]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImagePageFitL}{%
+ \ImagePageFit*[%
+ left,
+ #1]{#2}{#3}}
+
+\ResettableMacro{ImagePageFitRCaption}[1]{%
+ \captionblockcell[left, clearance=\captionclearpage]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImagePageFitR}{%
+ \ImagePageFit*[%
+ right,
+ #1]{#2}{#3}}
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%%%%% Full bleed
+
+%% \DescribeMacro{\ImagePageFill\{..\}}
+%% \DescribeMacro{\ImagePageFillCaption\{..\}}
+%% \DescribeMacro{\resetImagePageFillCaption}
+%% \DescribeMacro{\ImagePageFill*\{..\}}
+%
+%% Like |\ImagePage| but will fill page with image.
+%
+%% >> \ImagePageFill[<options>]{<caption>}{<image>}
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% . . . . . . . . . . . . . . . . . . .
+%% . . +-----------------+ . .
+%% . . | c | . .
+%% . .| |. .
+%% . | . . | .
+%% . | . . | .
+%% . | image | .
+%% . | . . | .
+%% . | . . | .
+%% . .| |. .
+%% . . | | . .
+%% . . +-----------------+ . .
+%% . . . . . . . . . . . . . . . . . . .
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+%% Default image clearance is set by |\bleed| global length.
+%%
+\ResettableMacro{ImagePageFillCaption}[1]{%
+ \captioncell[top, align=flushright]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImagePageFill}{%
+ \ImagePageFit*[%
+ fill,
+ #1]{#2}{#3}}
+
+
+%% \DescribeMacro{\ImageHalfPageL\{..\}}
+%% \DescribeMacro{\ImageHalfPageLCaption\{..\}}
+%% \DescribeMacro{\resetImageHalfPageLCaption}
+%% \DescribeMacro{\ImageHalfPageL*\{..\}}
+%
+%% Left half of image filling page with full bleed.
+%
+%% >> \imageleftspreadfullbleed[<vertical-offset>]{<caption>}{<image>}
+%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% . . . . . . . . . . . . .
+%% . +-----------------=
+%% . | . =
+%% . | . =
+%% . | . =
+%% . | . =
+%% . | image
+%% . | . =
+%% . | . =
+%% . | . =
+%% . | . c =
+%% . +-----------------=
+%% . . . . . . . . . . . . .
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+% XXX TEST...
+% XXX do a better default...
+\ResettableMacro{ImageHalfPageLCaption}[1]{%
+ \captioncell[bottom, align=flushright]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImageHalfPageL}{%
+ \begin{spreadtopages*}[2]{photobook@ImageHalfPageL@cell}%
+ \imagecell[%
+ fill,
+ clearance=-\bleed,
+ scale=\imagescale,
+ offsettop=\imageoffsettop,
+ offsetleft=\imageoffsetleft,
+ captionclearparent=\captionclearpage,
+ #1]{#2}{#3}%
+ \end{spreadtopages*}%
+ %
+ % XXX PRECLEAR do we need clear page here???
+ %\clearpage%
+ \usespreadpage[1]{photobook@ImageHalfPageL@cell}}
+
+
+
+%% \DescribeMacro{\ImageHalfPageR\{..\}}
+%% \DescribeMacro{\ImageHalfPageRCaption\{..\}}
+%% \DescribeMacro{\resetImageHalfPageRCaption}
+%% \DescribeMacro{\ImageHalfPageR*\{..\}}
+%
+%% Right half of image filling page with full bleed.
+%
+%% >> \imagerightspreadfullbleed[<vertical-offset>]{<caption>}{<image>}
+%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% . . . . . . . . . . . . .
+%% =-----------------+ .
+%% = . | .
+%% = . | .
+%% = . | .
+%% = . | .
+%% image | .
+%% = . | .
+%% = . | .
+%% = . | .
+%% = . c | .
+%% =-----------------+ .
+%% . . . . . . . . . . . . .
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+% XXX TEST...
+% XXX do a better default...
+\ResettableMacro{ImageHalfPageRCaption}[1]{%
+ \captioncell[bottom, align=flushright]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImageHalfPageR}{%
+ \begin{spreadtopages*}[2]{photobook@ImageHalfPageR@cell}%
+ \imagecell[%
+ fill,
+ clearance=-\bleed,
+ scale=\imagescale,
+ offsettop=\imageoffsettop,
+ offsetleft=\imageoffsetleft,
+ captionclearparent=\captionclearpage,
+ #1]{#2}{#3}%
+ \end{spreadtopages*}%
+ %
+ % XXX PRECLEAR do we need clear page here???
+ %\clearpage%
+ \usespreadpage[2]{photobook@ImageHalfPageR@cell}}
+
+
+
+%----------------------------------------------------------------------
+%%%% Spread Templates
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%%%%% No bleed
+
+% XXX TEST!!
+% XXX doc...
+% XXX Should we make this just like with pages, i.e. \imagePage{..} and
+% \ImagePageFit{..}, the first places relative to text and raises
+% slightly while the second simply centers...
+%% \DescribeMacro{\ImageSpread\{..\}}
+%% \DescribeMacro{\ImageSpreadCaption\{..\}}
+%% \DescribeMacro{\resetImageSpreadCaption}
+%% \DescribeMacro{\ImageSpread*\{..\}}
+%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% +---------------=---------------+
+%% | +-------------=-------------+ |
+%% | | . = . | |
+%% | | . = . | |
+%% | | . = . | |
+%% | | image | |
+%% | | . = . | |
+%% | | . = . | |
+%% | | . = . | |
+%% | +-------------=-------------+ |
+%% +---------------=---------------+
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+% XXX do a better default...
+% ...adaptive???
+\ResettableMacro{ImageSpreadCaption}[1]{%
+ \captioncell[under]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImageSpread}{%
+ \cleartoleftpage%
+ \begin{spreadtopages}[2]%
+ \imagecell[%
+ fit,
+ clearance=\clearimage,
+ scale=\imagescale,
+ offsettop=\imageoffsettop,
+ offsetleft=\imageoffsetleft,
+ captionclearparent=\captionclearpage,
+ #1]{#2}{#3}%
+ \end{spreadtopages}}
+
+
+%% \DescribeMacro{\ImageSpread<D>\{..\}}
+%% \DescribeMacro{\ImageSpread<D>Caption\{..\}}
+%% \DescribeMacro{\resetImageSpread<D>Caption}
+%% \DescribeMacro{\ImageSpread<D>*\{..\}}
+%
+%% |<D>| can be one of T, B, L or R, for top, bottom, left and right
+%% respectively.
+%%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% +---------------=---------------+ +---------------=---------------+
+%% | +-------------=-------------+ | | = |
+%% | | . = . | | | c = |
+%% | | . = . | | | +-------------=-------------+ |
+%% | | image | | | | . = . | |
+%% | | . (T) . | | | | . = . | |
+%% | | . = . | | | | image | |
+%% | +-------------=-------------+ | | | . (B) . | |
+%% | = c | | | . = . | |
+%% | = | | +-------------=-------------+ |
+%% +---------------=---------------+ +---------------=---------------+
+%%
+%% +---------------=---------------+ +---------------=---------------+
+%% | +-------------=---------+ | | +---------=-------------+ |
+%% | | . = . | | | | . = . | |
+%% | | . = . | | | | . = . | |
+%% | | . =. | | | | .= . | |
+%% | | image | | | | image | |
+%% | | . (L)=. | | | | .=(R) . | |
+%% | | . = . | | | | . = . | |
+%% | | . = . | | | | . = . | |
+%% | +-------------=---------+ c | | c +---------=-------------+ |
+%% +---------------=---------------+ +---------------=---------------+
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+\ResettableMacro{ImageSpreadTCaption}[1]{%
+ \captioncell[under]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImageSpreadT}{%
+ \ImageSpread*[%
+ top,
+ #1]{#2}{#3}}
+
+\ResettableMacro{ImageSpreadBCaption}[1]{%
+ \captioncell[over]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImageSpreadB}{%
+ \ImageSpread*[%
+ bottom,
+ #1]{#2}{#3}}
+
+\ResettableMacro{ImageSpreadLCaption}[1]{%
+ \captionblockcell[right, clearance=\captionclearpage]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImageSpreadL}{%
+ \ImageSpread*[%
+ left,
+ #1]{#2}{#3}}
+
+\ResettableMacro{ImageSpreadRCaption}[1]{%
+ \captionblockcell[left, clearance=\captionclearpage]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImageSpreadR}{%
+ \ImageSpread*[%
+ right,
+ #1]{#2}{#3}}
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%%%%% Partial bleed
+
+
+%% \DescribeMacro{\ImageSpreadFit\{..\}}
+%% \DescribeMacro{\ImageSpreadFitCaption\{..\}}
+%% \DescribeMacro{\resetImageSpreadFitCaption}
+%% \DescribeMacro{\ImageSpreadFit*\{..\}}
+%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% . . . . . . . . . . .
+%% +---------------=---------------+ +---------------=---------------+
+%% | = | | |. = .|. |
+%% . |---------------=---------------| . | | . = . | |
+%% . | . = . | . | | . = . | |
+%% . | . = . | . | | . = . | |
+%% . | image | . | | image | |
+%% . | . = . | . | | . = . | |
+%% . | . = . | . | | . = . | |
+%% . |---------------=---------------| . | | . = . | |
+%% | = c | | |. = .| c |
+%% +---------------=---------------+ +---------------=---------------+
+%% . . . . . . . . . . .
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+% XXX TEST...
+% XXX make caption adaptive...
+\ResettableMacro{ImageSpreadFitCaption}[1]{%
+ \captioncell[under]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImageSpreadFit}{%
+ \cleartoleftpage%
+ \begin{spreadtopages}[2]%
+ \imagecell[%
+ fit,
+ clearance=-\bleed,
+ scale=\imagescale,
+ offsettop=\imageoffsettop,
+ offsetleft=\imageoffsetleft,
+ captionclearparent=\captionclearpage,
+ #1]{#2}{#3}%
+ \end{spreadtopages}}
+
+
+%% \DescribeMacro{\ImageSpread<D>\{..\}}
+%% \DescribeMacro{\ImageSpread<D>Caption\{..\}}
+%% \DescribeMacro{\resetImageSpread<D>Caption}
+%% \DescribeMacro{\ImageSpread<D>*\{..\}}
+%
+%% Image spread aligned left (with bleed).
+%
+%% >> \ImageSpread<D>[<options>]{<caption>}{<image>}
+%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% . . . . . . . . . . . . . . . . . . .
+%% . +---------------=---------------+ . +---------------=---------------+
+%% . | . = . | . | c = |
+%% . | . = . | . . |---------------=---------------| .
+%% . | . = . | . . | . = . | .
+%% . | image | . . | . = . | .
+%% . | . (T) . | . . | . = . | .
+%% . | . = . | . . | image | .
+%% . | . = . | . . | . (B) . | .
+%% . |---------------=---------------| . . | . = . | .
+%% | = c | . | . = . | .
+%% +---------------=---------------+ . +---------------=---------------+ .
+%% . . . . . . . . . . . . . . . . . . .
+%%
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+%% . +---------------=---------------+ +---------------=---------------+ .
+%% . | . = . | | | | . = . | .
+%% . | . = . | | | | . = . | .
+%% . | . = . | | | | . = . | .
+%% . | . =. | | | | .= . | .
+%% . | image | | | | image | .
+%% . | . (L)=. | | | | .(R) . | .
+%% . | . = . | | | | . = . | .
+%% . | . = . | | | | . = . | .
+%% . | . = . | c | | c | . = . | .
+%% . +---------------=---------------+ +---------------=---------------+ .
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+% XXX TEST...
+% XXX do a better default...
+% XXX need a caption box...
+\ResettableMacro{ImageSpreadFitTCaption}[1]{%
+ \captioncell[under]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImageSpreadFitT}{%
+ \ImageSpreadFit*[top, #1]{#2}{#3}}
+
+\ResettableMacro{ImageSpreadFitBCaption}[1]{%
+ \captioncell[over]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImageSpreadFitB}{%
+ \ImageSpreadFit*[bottom, #1]{#2}{#3}}
+
+\ResettableMacro{ImageSpreadFitLCaption}[1]{%
+ \captionblockcell[right, clearance=\captionclearpage]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImageSpreadFitL}{%
+ \ImageSpreadFit*[left, #1]{#2}{#3}}
+
+\ResettableMacro{ImageSpreadFitRCaption}[1]{%
+ \captionblockcell[left, clearance=\captionclearpage]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImageSpreadFitR}{%
+ \ImageSpreadFit*[right, #1]{#2}{#3}}
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%%%%% Full bleed
+
+%% \DescribeMacro{\ImageSpreadFill\{..\}}
+%% \DescribeMacro{\ImageSpreadFillCaption\{..\}}
+%% \DescribeMacro{\resetImageSpreadFillCaption}
+%% \DescribeMacro{\ImageSpreadFill*\{..\}}
+%
+%% Image spread with full bleed.
+%
+%% >> \ImageSpreadFill[<options>]{<caption>}{<image>}
+%
+%% \begin{minipage}{\textwidth}
+%% \begin{verbatim}
+%%
+%% . . . . . . . . . . . . . . . . . . .
+%% . +---------------=---------------+ .
+%% . | . = . | .
+%% . | . = . | .
+%% . | . = . | .
+%% . | . = . | .
+%% . | image | .
+%% . | . = . | .
+%% . | . = . | .
+%% . | . = . | .
+%% . | . = . c | .
+%% . +---------------=---------------+ .
+%% . . . . . . . . . . . . . . . . . . .
+%%
+%% \end{verbatim}
+%% \end{minipage}
+%%
+
+% XXX do a better default...
+\ResettableMacro{ImageSpreadFillCaption}[1]{%
+ \captioncell[bottom, align=flushright]{%
+ \captionformat{#1}}}
+\ImagePageTemplate{ImageSpreadFill}{%
+ \cleartoleftpage%
+ \begin{spreadtopages}[2]%
+ \imagecell[%
+ fill,
+ clearance=-\bleed,
+ scale=\imagescale,
+ offsettop=\imageoffsettop,
+ offsetleft=\imageoffsetleft,
+ captionclearparent=\captionclearpage,
+ #1]{#2}{#3}%
+ \end{spreadtopages}}
+
+
+
+%----------------------------------------------------------------------
+%%%% Meta Macros / Environments
+%
+%% These macros and environments are used internally to help define cells
+%% and templates and thus can be useful when extending the functionality
+%% of this class both when authoring styles and when creating user
+%% macros/templates.\footnote{%
+%% Note that in code the relevant meta-macros are defined in the logical
+%% locations for each macro, i.e. before first use and at the start of
+%% the relevant context. This section in the reference is placed near
+%% the end so as to focus the user's attention on the main class interface,
+%% class internal architecture and extension API being secondary.}
+%%
+%% \input{\jobname-meta}
+%%
+%%
+
+
+
+%----------------------------------------------------------------------
+%%%% Miscellaneous
+
+%% \DescribeMacro{\PageInfo}
+%
+%% Display basic paper / page / cell geometry.
+%%
+\newcommand\PageInfo[1][mm]{%
+ Layout: \layoutmode
+ \par
+ paper: \lenprint[#1]{\paperwidth} x \lenprint[#1]{\paperheight} (w. bleeds) \\
+ block: \lenprint[#1]{\blockwidth} x \lenprint[#1]{\blockheight} \\
+ cell: \lenprint[#1]{\cellparentwidth} x \lenprint[#1]{\cellparentheight} \\
+ bleed: \lenprint[#1]{\bleed}}
+
+
+%% \DescribeMacro{\GenerateTemplate\{..\}}
+%
+%% Generate template page for current |layoutmode|.
+%
+%% >> \GenerateTemplate
+%
+%% Cell size can be printed in |mm| (default) or in any explicit unit
+%% supported by \LaTeX.
+%
+%% >> \GenerateTemplate{<unit>}
+%
+%% This can be useful if one needs to make the cover/jacket/... in either a
+%% different software package or by hand.
+%%
+%% This is a no-op for |layoutmode=block|.
+%%
+% XXX should digits/rounding be configurable???
+\newcommand\photobook@TemplateCell[2][mm]{
+ \begin{center}
+ \vfill%
+ #2 \\
+ (\lenprint[#1]{\cellwidth} \space x \lenprint[#1]{\cellheight})
+ \vfill%
+ \vspace{0pt}%
+ \end{center}%
+ \ignorespaces}
+
+\newcommand\GenerateTemplate[1][mm]{
+ \TPoptions{showboxes=true}%
+ \begin{page}
+ \setlength{\parindent}{0em}
+ % NOTE: only the relevant blocks will be visible...
+ \ifendpaperlayout%
+ \begin{leftside}
+ \photobook@TemplateCell[#1]{ENDPAPER LEFT}
+ \end{leftside}
+ \begin{rightside}
+ \photobook@TemplateCell[#1]{ENDPAPER RIGHT}
+ \end{rightside}\fi%
+ \ifcoverlikelayout%
+ \begin{frontcover}
+ \photobook@TemplateCell[#1]{FRONT COVER}
+ \end{frontcover}
+ \begin{vspine}%
+ \photobook@TemplateCell[#1]{SPINE}%
+ \end{vspine}
+ \begin{backcover}
+ \photobook@TemplateCell[#1]{BACK COVER}
+ \end{backcover}\fi%
+ \ifjacketlayout%
+ \begin{frontflap}%
+ \photobook@TemplateCell[#1]{FRONT FLAP}
+ \end{frontflap}
+ \begin{backflap}%
+ \photobook@TemplateCell[#1]{BACK FLAP}
+ \end{backflap}\fi%
+ \end{page}}
+
+
+% XXX place marks in bleed area...
+% XXX do this for all pages... (???)
+\newcommand\ShowMarks[1][1pt]{%
+ % general...
+ % XXX corners / cut marks...
+ \ifendpaperlayout%
+ % XXX fold...
+ \fi%
+ \ifcoverlikelayout%
+ % XXX spine...
+ % XXX folds...
+ \fi%
+ \ifjacketlayout%
+ % XXX spine...
+ % XXX folds...
+ \fi}
+
+
+% XXX EXPERIMENTAL...
+\def\photobook@pdfboxstore@stored{}
+
+% XXX should these be stacked???
+% XXX handle slot name...
+\newcommand\storepdfboxes[1][stored]{%
+ \edef\photobook@pdfboxstore@stored{%
+ \photobook@pdfboxes}}
+
+% XXX handle slot name...
+\newcommand\restorepdfboxes[1][stored]{%
+ \expandafter\pdfpageattr\expandafter{\photobook@pdfboxstore@stored}}
+
+
+%% \DescribeMacro{\pdfboxesset\{..\}}
+%
+%% >> \pdfboxesset[<bleed>]{<bleedblockwidth>}{<bleedblockheight>}
+%%
+\newcommand\pdfboxesset[3][\bleed]{%
+ % calculate pdf box dimensions in pt...
+ \edef\photobook@pdfboxesset@w{\strip@pt\dimexpr
+ 0.996264009963\dimexpr #2 \relax\relax}%
+ \edef\photobook@pdfboxesset@h{\strip@pt\dimexpr
+ 0.996264009963\dimexpr #3 \relax\relax}%
+ \edef\photobook@pdfboxesset@bleed{\strip@pt\dimexpr
+ 0.996264009963\dimexpr #1 \relax\relax}%
+ \edef\photobook@pdfboxesset@t{\strip@pt\dimexpr
+ 0.996264009963\dimexpr #3 - #1 \relax\relax}%
+ \edef\photobook@pdfboxesset@r{\strip@pt\dimexpr
+ 0.996264009963\dimexpr #2 - #1 \relax\relax}%
+ %
+ \edef\photobook@pdfboxes{%
+ /MediaBox [0 0 \photobook@pdfboxesset@w\space \photobook@pdfboxesset@h]
+ /BleedBox [0 0 \photobook@pdfboxesset@w\space \photobook@pdfboxesset@h]
+ /ArtBox [
+ \photobook@pdfboxesset@bleed\space \photobook@pdfboxesset@bleed\space
+ \photobook@pdfboxesset@r\space \photobook@pdfboxesset@t]
+ /TrimBox [
+ \photobook@pdfboxesset@bleed\space \photobook@pdfboxesset@bleed\space
+ \photobook@pdfboxesset@r\space \photobook@pdfboxesset@t]
+ /CropBox [
+ \photobook@pdfboxesset@bleed\space \photobook@pdfboxesset@bleed\space
+ \photobook@pdfboxesset@r\space \photobook@pdfboxesset@t]}%
+ %
+ % set the boxes...
+ \ifxetex%
+ % XXX make this reusable -- currently this will add new boxes per
+ % call, need to cleanup...
+ \AtBeginShipout{\AtBeginShipoutAddToBox{%
+ \special{pdf:put @thispage << \photobook@pdfboxes >>}}}%
+ \else%
+ \expandafter\pdfpageattr\expandafter{\photobook@pdfboxes}\fi}
+
+
+%% \DescribeMacro{\pdfcommentcell\{..\}}
+%
+%% Add pdf comment as margin overlay.
+%%
+%% >> \pdfcommentcell[<options>]{<comment>}
+%%
+% XXX BUG: this takes up space...
+\newcommand\pdfcommentcell[2][]{%
+ \begin{cell*}{
+ \ifnumodd{\thepage}{%
+ \cellwidth - \marginparwidth - 2\bleed - 1cm
+ }{%
+ \bleed + 1cm},
+ \bleed + 1cm
+ }{\marginparwidth}{1pt}%
+ \pdfcomment[color=yellow, #1]{#2}%
+ \end{cell*}}
+
+
+%% \DescribeMacro{\pdfpagecount\{..\}}
+%
+%% Get pdf page count
+%%
+%% >> \pdfpagecount{<file.pdf>}
+%%
+\newcommand\pdfpagecount[1]{%
+ \ifpdftex%
+ \pdfximage{#1}%
+ \number\pdflastximagepages%
+ \else\ifxetex%
+ \number\XeTeXpdfpagecount"#1"%
+ \else\ifluatex%
+ \number\directlua{%
+ local pages = 0
+ local doc = pdfe.open("\luaescapestring{#1}")
+ if doc then
+ pages = pdfe.getnofpages(doc)
+ pdfe.close(doc)
+ end
+ tex.write(pages) }\fi\fi}
+
+
+%% \DescribeMacro{\pdfspinewidth\{..\}}
+%
+%% Calculate spine thickness
+%%
+%% >> \pdfspinewidth{<paper-thikness>}{<cover-thikness>}{<block-pdf>}
+%%
+% NOTE: really "like" how LaTeX overcomplicats simple math...
+\newcommand\pdfspinewidth[3]{%
+ \setlength\spinewidth{\dimexpr
+ (#1 mm) * \numexpr \pdfpagecount{#3} / 2 \relax
+ + ((#2 mm) * 2)
+ \relax}}
+
+
+
+%----------------------------------------------------------------------
+% Index...
+%
+% XXX this prints trash at this point...
+% ...I do not want to build the index manually but it seems that
+% we are slowly moving in that direction...
+%%% \printindex
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%%% XXX DEBUG...
+%%%\AtBeginDocument{
+%%%}
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%% \blankfootnote{%
+%% Why ASCII diagrams instead of normal graphics, you might ask?
+%% Well, for the same reason as photo-books in \LaTeX\ -- I liked
+%% the idea of it, the simplicity, and thought that it would be fun to
+%% see how far can I push things before it all falling apart on me, and...
+%% We are here, at the end, and it all is still here too :)}
+
+
+
+%----------------------------------------------------------------------
+%% \end{document} % vim:set ts=4 sw=4 nowrap :
diff --git a/macros/latex/contrib/photobook/photobook.pdf b/macros/latex/contrib/photobook/photobook.pdf
new file mode 100644
index 0000000000..42b6a53eb4
--- /dev/null
+++ b/macros/latex/contrib/photobook/photobook.pdf
Binary files differ
diff --git a/macros/latex/contrib/photobook/scripts/cls2tex.sh b/macros/latex/contrib/photobook/scripts/cls2tex.sh
new file mode 100755
index 0000000000..8ec15ebf45
--- /dev/null
+++ b/macros/latex/contrib/photobook/scripts/cls2tex.sh
@@ -0,0 +1,156 @@
+#!/usr/bin/env bash
+#----------------------------------------------------------------------
+
+CMD="$0 $@"
+
+SCRIPT_NAME=$(basename $0)
+
+printusage(){
+ echo "Usage:"
+ echo " $SCRIPT_NAME [OPTIONS] [[INPUT] OUTPUT]"
+}
+
+printhelp(){
+ echo "Generate docs from latex package/class"
+ echo
+ printusage
+ echo
+ echo "Options:"
+ echo " -h | --help Show this message and exit"
+ echo " -p | --prefix PREFIX"
+ echo " Set the doc comment PREFIX (default: \"%\")"
+ echo " -s | --strip Strip docs out"
+ echo " -n | --no-msg Don't add the \"generated with\" message to output"
+ echo
+ echo "This will:"
+ echo " - read the INPUT"
+ echo " - keep lines starting with \\def\\<module-name>@[A-Z]\\+"
+ echo " - keep lines starting with '%%'"
+ echo " - %%%%% Text -> \\subsection(Text)"
+ echo " - %%%% Text -> \\section(Text)"
+ echo " - %% >> code -> \\begin{verbatim}code\\end{verbatim}"
+ echo " - write the result to OUTPUT"
+ echo
+ echo "If no OUTPUT is given $SCRIPT_NAME will read stdout. If no INPUT"
+ echo "is given $SCRIPT_NAME will read stdin."
+ echo
+ echo "PREFIX can replace the second \"%\" in the above patterns to make it"
+ echo "possible to integrate multiple layers of documentation in one file"
+ echo "and to integrate them in various ways, for example, in the photobook"
+ echo "document class documentation \"M\" prefix is used to indicate"
+ echo "meta-command docs, this enables us to document them in the relevant"
+ echo "location (i.e. at the implementation) in source but move the docs to"
+ echo "a unified location in docs, effectively decoupling the source and doc"
+ echo "structure when needed."
+ echo
+ echo "Strip mode is the reverse of of the default, it will strip out docs"
+ echo "and empty lines, keeping only the actual code and code comments."
+ echo
+ echo "NOTE: stripping will not remove non-doc comments."
+ echo "NOTE: the idea of keeping latex docs in a latex file is far simpler"
+ echo " than all the stuff crammed into .dtx, at least for my needs:"
+ echo " - keep the code readable"
+ echo " - keep the docs readable"
+ echo " in both the repo and in installed form, so .dtx is not used."
+}
+
+# Usage: printerror MESSAGE...
+printerror(){
+ echo Error: $@
+ echo
+ printusage
+}
+
+# Usage: printmsg TEXT
+printmsg(){
+ # print message...
+ if [ -z $NO_MSG ] ; then
+ echo "%----------------------------------------------------------------------"
+ echo "% $1 file generated by:"
+ echo "% $CMD"
+ echo "% NOTE: multiple messages indicate multiple runs."
+ echo "%----------------------------------------------------------------------"
+ fi
+}
+
+
+
+#----------------------------------------------------------------------
+# Args and defaults...
+
+PREFIX=%
+
+while true ; do
+ case $1 in
+ -h|--help)
+ printhelp
+ exit
+ ;;
+ -p|--prefix)
+ PREFIX=$2
+ shift
+ shift
+ ;;
+ -s|--strip)
+ STRIP_DOC=1
+ shift
+ ;;
+ -n|--no-msg)
+ NO_MSG=1
+ shift
+ ;;
+
+ # handle unknown options...
+ -*|--*)
+ printerror "unknown option \"$1\""
+ exit
+ ;;
+
+ # non-flag, option parsing done...
+ *)
+ break
+ ;;
+ esac
+done
+
+INPUT=${1:-/dev/stdin}
+
+OUTPUT=${2:-/dev/stdout}
+
+
+# generate the module name...
+MODULE=$(basename "$INPUT")
+MODULE=${MODULE/.*/}
+
+
+#----------------------------------------------------------------------
+# do the work...
+
+# make docs...
+if [ -z $STRIP_DOC ] ; then
+ printmsg "Documentation" \
+ > "$OUTPUT"
+ cat "$INPUT" \
+ | egrep '(^%'$PREFIX'|^\\edef\\'$MODULE'@[A-Z][A-Z]+)' \
+ | sed 's/^\(\\edef\\\)'$MODULE'@/%'$PREFIX'\1/' \
+ | sed 's/%'$PREFIX'%%%% \(.*\)/%'$PREFIX'\\subsubsection{\1}\\label{subsubsec:\1}/' \
+ | sed 's/%'$PREFIX'%%% \(.*\)/%'$PREFIX'\\subsection{\1}\\label{subsec:\1}/' \
+ | sed 's/%'$PREFIX'%% \(.*\)/%'$PREFIX'\\section{\1}\\label{sec:\1}/' \
+ | sed 's/%'$PREFIX'\s\+>>\s\+\(.*\)/%'$PREFIX'\\begin{verbatim} \1 \\end{verbatim}/' \
+ | cut -c 3- - \
+ >> "$OUTPUT"
+
+# make stripped code...
+else
+ printmsg "Stripped code" \
+ > "$OUTPUT"
+ cat "$INPUT" \
+ | egrep -v '%'$PREFIX'' \
+ | egrep -v '^(\s*%)?\s*$' \
+ >> "$OUTPUT"
+fi
+
+
+
+#----------------------------------------------------------------------
+# vim:set ts=4 sw=4 nowrap :
diff --git a/macros/latex/contrib/photobook/scripts/make-images.sh b/macros/latex/contrib/photobook/scripts/make-images.sh
new file mode 100644
index 0000000000..7be3a53cf8
--- /dev/null
+++ b/macros/latex/contrib/photobook/scripts/make-images.sh
@@ -0,0 +1,449 @@
+#!/bin/bash
+shopt -s nullglob extglob
+
+#----------------------------------------------------------------------
+#
+# Template structure:
+# templates/
+# imagepage.tex
+# textpage.tex
+# ...
+# $IMAGE_DIR/
+# $spread/
+# tweaks.tex
+# template tweaks.
+# loaded before the templates are handled.
+# layout.tex
+# manual layout of spread.
+# if given rest of directory contents are
+# ignored.
+# fields:
+# ${IMAGE0}
+# ${CAPTION0}
+# ${IMAGE1}
+# ${CAPTION1}
+# NOTE: if images are included, hi-res source
+# substitution is not done here.
+# <spread-template-name>.tpl
+# indicates the spread template to use.
+# if given the rest of the .tex files in
+# directory are ignored.
+# resolves to:
+# templates/<spread-template-name>.tex
+# fields:
+# ${IMAGE0}
+# ${CAPTION0}
+# ${IMAGE1}
+# ${CAPTION1}
+# imagepage.tex
+# image page template.
+# fields:
+# ${IMAGE}
+# ${CAPTION}
+# textpage.tex
+# text page template.
+# fields:
+# ${TEXT}
+# <spread-template-name>-imagepage.tpl
+# <spread-template-name>-textpage.tpl
+# indicates the image/text page template to use.
+# ignored if explicit templates are given.
+# image fields:
+# ${IMAGE}
+# ${CAPTION}
+# text fields:
+# ${TEXT}
+# 00-<image>.png
+# image.
+# if $IMAGE_HIRES_DIR is set then this will
+# resolve to:
+# $IMAGE_HIRES_DIR/<image>
+# XXX hi-res substitution currently disabled.
+# 01-<text>.txt
+# text.
+# ...
+# ...
+#
+#
+#
+# Env variables:
+# IMAGE_HIRES_DIR=<path>
+# sets the path to which the hi-res images are resolved.
+#
+#
+#
+#
+# XXX TODO:
+# - revise printed comments...
+# - add real arg handling...
+# - add abbility to apply template to a specific page in spread...
+# ...something like:
+# <template-name>-left.tpl
+# <template-name>-right.tpl
+#
+#
+#
+#----------------------------------------------------------------------
+
+# defaults...
+
+CFG_FILE=`basename $0`.cfg
+
+TEMPLATE_PATH=templates/
+
+IMAGE_DIR=pages/
+
+#IMAGE_HIRES_DIR=
+
+
+# Default timplates
+#SINGLE_IMAGE=blank-image
+SINGLE_IMAGE=imagebleedleft
+DOUBLE_IMAGE=image-image
+
+
+# load config...
+[ -e $CFG_FILE ] && source $CFG_FILE
+
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+printhelp(){
+ echo "Usage: `basename $0` [ARGUMENTS] [PATH]"
+ echo " `basename $0` [ARGUMENTS] PATH FROM [COUNT]"
+ echo
+ echo "Generate LaTeX layout from directory structure."
+ echo
+ echo "Arguments:"
+ echo " -h --help - print this help and exit."
+ echo " --templates=PATH"
+ echo " - path to search for templates (default: $TEMPLATE_PATH)."
+ echo " --single-image-tpl=NAME"
+ echo " - single image default template (default: $SINGLE_IMAGE)."
+ echo " --double-image-tpl=NAME"
+ echo " - double image default template (default: $DOUBLE_IMAGE)."
+ echo
+ echo "Parameters:"
+ echo " PATH - path to root pages directory (default: $IMAGE_DIR)"
+ echo " FROM - spread to start from (default: 0)"
+ echo " COUNT - number of spreads to generate (default: 1)"
+ echo
+ echo "Environment:"
+ echo " \$IMAGE_HIRES_DIR "
+ echo " - source directory for replacement hi-res images."
+ echo " \$ANOTATE_IMAGE_PATHS "
+ echo " - if true add image paths in anotations."
+ echo
+ echo "Configuration defaults can be stored in a config file: $CFG_FILE"
+ echo
+ echo "NOTE: COUNT is relevant iff FROM is given, otherwise all available "
+ echo " spreads are generated."
+ echo
+ echo "Examples:"
+ echo " $ `basename $0` ./pages > pages.tex"
+ echo " - generate a layout fron the contents of ./pages"
+ echo
+ echo " $ IMAGE_HIRES_DIR=images/hi-res `basename $0` ./pages"
+ echo " - generate a layout fron the contents of ./pages and "
+ echo " replaceing local images with images in ./images/hi-res"
+ echo
+}
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# handle arguments...
+
+while true ; do
+ case $1 in
+ -h|--help)
+ printhelp
+ exit
+ ;;
+
+ --templates)
+ TEMPLATE_PATH=$2
+ shift
+ shift
+ ;;
+ --single-image-tpl)
+ SINGLE_IMAGE=$2
+ shift
+ shift
+ ;;
+ --double-image-tpl)
+ DOUBLE_IMAGE=$2
+ shift
+ shift
+ ;;
+
+ # handle unknown options...
+ -*|--*)
+ echo "Error: unknown option \"$1\""
+ exit
+ ;;
+
+ *)
+ break
+ ;;
+ esac
+done
+
+
+if [ -z $1 ] ; then
+ IMAGE_DIR=pages/
+else
+ IMAGE_DIR=$1/
+fi
+
+
+# calculate spread index range...
+# XXX add support for negative indexing...
+FROM=$2
+COUNT=$( [ -z $3 ] && echo 1 || echo $3 )
+STOP=$(( FROM + COUNT ))
+
+
+
+#----------------------------------------------------------------------
+
+# XXX should we report images w/o captions???
+getCaption(){
+ local C=`basename "${1%.*}"`
+ #C="${C/[0-9]-}"
+ C="captions/${C}.txt"
+
+ if [ -e "${C}" ] ; then
+ C=`cat "${C}" | sed 's/\\\/\\\\\\\/g'`
+ else
+ C=""
+ fi
+
+ echo ${C[*]}
+}
+
+getTemplate(){
+ local SPREAD=$1
+ local TYPE=$2
+ local TEMPLATE=($SPREAD/*-$TYPE.tex)
+ if [ -z $TEMPLATE ] ; then
+ TEMPLATE=($SPREAD/*-$TYPE.tpl)
+ if ! [ -z $TEMPLATE ] ; then
+ TEMPLATE=${TEMPLATE/$SPREAD\//}
+ TEMPLATE=${TEMPLATE/[0-9]-/}
+ TEMPLATE="$TEMPLATE_PATH/${TEMPLATE[0]%-${TYPE}.*}.tex"
+ fi
+ fi
+ if [ -z $TEMPLATE ] ; then
+ TEMPLATE="$TEMPLATE_PATH/${TYPE}.tex"
+ fi
+ echo $TEMPLATE
+}
+
+anotatePath(){
+ if [ -z "$1" ] || [ -z "$ANOTATE_IMAGE_PATHS" ] ; then
+ return
+ fi
+ path=$(basename ${1%.*})
+ # NOTE: did not figure out how to make a verbatim comment in latex
+ # so here we are, doing it in shell...
+ path=${path//_/\\_}
+ #echo "\\pdfmargincomment{Image: $path}%"
+ echo "\\pdfcommentcell{Image: $path}%"
+}
+
+
+#----------------------------------------------------------------------
+
+
+echo %----------------------------------------------------------------------
+echo %
+echo % WARNING: This file is auto-generated by make-images.sh and will be
+echo "% overwritten on next run..."
+echo %
+echo "% Image source (preview): \"$IMAGE_DIR\""
+echo "% Image source (hi-res): \"$IMAGE_HIRES_DIR\""
+echo %
+echo %----------------------------------------------------------------------
+echo %
+#echo % set image source directory...
+#echo "\\graphicspath{{${IMAGE_DIR}}}"
+#echo %
+#echo %----------------------------------------------------------------------
+#echo %
+#
+#cd ${IMAGE_DIR}
+
+l=$(ls "$IMAGE_DIR/" | wc -l)
+c=0
+
+for spread in "${IMAGE_DIR}"/* ; do
+ # skip non-spreads...
+ if ! [ -d "$spread" ] ; then
+ continue
+ fi
+
+ c=$(( c + 1 ))
+
+ # if $FROM is given print only stuff in range...
+ [ -z $FROM ] \
+ || if (( $(( c - 1 )) < $FROM )) || (( $c > $STOP )) ; then
+ continue
+ fi
+
+ # if we are building only a specific spread...
+ ##if ! [ -z $SPREAD ] && [[ "$spread" != "$IMAGE_DIR/$SPREAD" ]]; then
+ ## continue
+ ##fi
+
+ if ! [ -z $SKIP_FIRST ] ; then
+ echo %
+ echo %
+ echo % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ fi
+ SKIP_FIRST=1
+ # skip temporarily disabled...
+ if [ -z ${spread/-*/} ] ; then
+ echo "% spread: ${spread/-/}: skipped..." | tee >(cat >&2)
+ echo %
+ continue
+ else
+ printf "Spread ($c/$l): ${spread/-/} \r" >&2
+ echo "% spread: ${spread/-/}"
+ fi
+
+
+ # auto layout / templates...
+ # NOTE: to use a specific template just `touch <template-name>.tpl`
+ # in the spread directory...
+
+ # layout tweaks...
+ tweaks=($spread/*tweak.tex)
+ if ! [ -z ${tweaks} ] ; then
+ echo "% tweaks: ${tweaks[0]}"
+ cat ${tweaks[0]}
+ fi
+
+
+ # NOTE: we also get *.txt files here...
+ items=($spread/*.!(tex|tpl|bak))
+
+ # get hi-res image paths...
+ if ! [ -z $IMAGE_HIRES_DIR ] ; then
+ C=0
+ for img in "${items[@]}" ; do
+ # skip non-images...
+ if [[ "$img" == "${img/.txt/}" ]] ; then
+ #new="../$IMAGE_HIRES_DIR/`basename ${img/[0-9]-/}`"
+ new="$IMAGE_HIRES_DIR/`basename ${img/[0-9]-/}`"
+ # ignore file ext for availability test...
+ # NOTE: the first match may be an unsupported format...
+ new="${new%.*}"
+ new=($new.*)
+ if [ -e "${new[0]}" ] ; then
+ items[$C]=${new[0]}
+ else
+ echo %
+ echo "% WARNING: hi-res image not found for: \"${img}\" -> \"${new}\"" | tee >(cat >&2)
+ echo %
+ fi
+ fi
+ C=$(( C + 1 ))
+ done
+ fi
+
+
+ # manual layout...
+ layout=($spread/*layout.tex)
+ if ! [ -z $layout ] ; then
+ TEMPLATE=${layout[0]}
+
+ # templates and partial templates...
+ else
+ # spread template...
+ TEMPLATE=($spread/*.tpl)
+ # skip page template refs: *-imagepage.tpl / *-textpage.tpl
+ # XXX this will also eat 0-imagepage.tpl / 20-textpage.tpl -- do a better pattern...
+ if ! [ -z $TEMPLATE ] ; then
+ TEMPLATE=(`ls "$spread/"*.tpl | egrep -v '.*-(imagepage|textpage)\.tpl'`)
+ fi
+ # no template explicitly defined -> match auto-template...
+ AUTO=
+ if [ -z $layout ] && [ -z $TEMPLATE ] ; then
+ AUTO=" (auto)"
+ if [ ${#items[@]} == 1 ] ; then
+ TEMPLATE=$SINGLE_IMAGE
+
+ # multiple items...
+ else
+ C=0
+ for img in "${items[@]}" ; do
+ C=$(( C + 1 ))
+ P=`[ $C == 1 ] && echo "left" || echo "right"`
+
+ # image...
+ if [ "${img/.txt/}" == "${img}" ] ; then
+ echo %
+ echo "% $P page (image)..."
+ TEMPLATE=`getTemplate "$spread" "imagepage"`
+ echo % page template: $TEMPLATE
+ anotatePath "${img}"
+ CAPTION=`getCaption "${img}"`
+ cat "${TEMPLATE}" \
+ | sed "s%\${IMAGE0\?}%${img%.*}%" \
+ | sed "s%\${CAPTION0\?}%${CAPTION}%"
+
+ # text...
+ else
+ echo %
+ echo "% $P page (text)..."
+ TEMPLATE=`getTemplate "$spread" "textpage"`
+ echo % page template: $TEMPLATE
+ cat "${TEMPLATE}" \
+ | sed "s%\${TEXT}%${img}%"
+ fi
+
+ # reset for next page...
+ TEMPLATE=
+ # only two pages at a time...
+ [ $C == 2 ] && break
+ done
+ fi
+ fi
+ # formatting done...
+ [ -z $TEMPLATE ] && continue
+
+ # format...
+ TEMPLATE=${TEMPLATE/$spread\//}
+ TEMPLATE=${TEMPLATE/[0-9]-/}
+ # get...
+ TEMPLATE="$TEMPLATE_PATH/${TEMPLATE[0]%.*}.tex"
+ fi
+
+ # captions...
+ CAPTION0=`getCaption "${items[0]}"`
+ CAPTION1=`getCaption "${items[1]}"`
+
+ echo "% template: (template${AUTO}: $TEMPLATE)"
+ anotatePath "${items[0]}"
+
+ # fill the template...
+ cat "${TEMPLATE}" \
+ | sed "s%\${IMAGE0\?}%${items[0]%.*}%" \
+ | sed "s%\${CAPTION0\?}%${CAPTION0}%" \
+ | sed "s%\${IMAGE1}%${items[1]%.*}%" \
+ | sed "s%\${CAPTION1}%${CAPTION1}%"
+done
+
+echo %
+echo %
+echo %
+echo %----------------------------------------------------------------------
+echo
+
+echo "Spread created: $c of $l " >&2
+
+
+
+#----------------------------------------------------------------------
+# vim:set ts=4 sw=4 :
diff --git a/macros/latex/contrib/ppt-slides/ppt-slides.pdf b/macros/latex/contrib/ppt-slides/ppt-slides.pdf
index f845668cc9..87d02b0432 100644
--- a/macros/latex/contrib/ppt-slides/ppt-slides.pdf
+++ b/macros/latex/contrib/ppt-slides/ppt-slides.pdf
Binary files differ
diff --git a/macros/latex/contrib/ppt-slides/ppt-slides.sty b/macros/latex/contrib/ppt-slides/ppt-slides.sty
index 026ee0abce..37ef3f2adf 100644
--- a/macros/latex/contrib/ppt-slides/ppt-slides.sty
+++ b/macros/latex/contrib/ppt-slides/ppt-slides.sty
@@ -21,7 +21,7 @@
% SOFTWARE.
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{ppt-slides}[2022/09/12 0.1.2 Slide Decks à la Power Point]
+\ProvidesPackage{ppt-slides}[2022/09/15 0.1.4 Slide Decks à la Power Point]
\RequirePackage{pgfopts}
\makeatletter
@@ -33,6 +33,7 @@
scheme/.estore in = \ppt@scheme,
directory/.estore in = \ppt@directory,
directory/.default = .,
+ nominutes/.estore in = \ppt@nominutes,
directory
}
\ProcessPgfOptions*
diff --git a/macros/latex/contrib/ppt-slides/ppt-slides.tex b/macros/latex/contrib/ppt-slides/ppt-slides.tex
index 13b771cc75..d3ae36d062 100644
--- a/macros/latex/contrib/ppt-slides/ppt-slides.tex
+++ b/macros/latex/contrib/ppt-slides/ppt-slides.tex
@@ -29,7 +29,7 @@
\usepackage{textcomp}
\title{\LaTeX{} Package for Slide Decks \`a la PowerPoint\texttrademark}
\author{Yegor Bugayenko}
-\date{0.1.2 2022/09/12}
+\date{0.1.4 2022/09/15}
\pptLeft{\thetitle}
\pptRight{\href{https://github.com/yegor256}{@yegor256}}
@@ -158,6 +158,20 @@ If you don't use \ff{\char`\\pptLeft} or \ff{\char`\\pptRight}, nothing will
be printed at the bottom.
\clearpage
+\pptSection[Minutes]{Tracking Minutes}
+By default, if you render your slide deck in non-static mode (option \ff{static} for clicks package),
+there will be minutes tracking in the right top corner of each slide. You can turn this off
+by using \ff{nominutes} option of the package:
+\begin{ffcode*}{fontsize=\small}
+\documentclass{article}
+\usepackage{clicks}
+\usepackage[template,scheme=light,nominutes]{ppt-slides}
+\begin{document}
+...
+\end{document}
+\end{ffcode*}
+
+\clearpage
\pptSection[Wide]{Wide Slides}
Sometimes you need your slide content to take all visible horizontal space:
\begin{ffcode*}{fontsize=\scriptsize}
diff --git a/macros/latex/contrib/ppt-slides/ppt-templates/ppt-9x6.tex b/macros/latex/contrib/ppt-slides/ppt-templates/ppt-9x6.tex
index d80db063fd..3c7afa2bb2 100644
--- a/macros/latex/contrib/ppt-slides/ppt-templates/ppt-9x6.tex
+++ b/macros/latex/contrib/ppt-slides/ppt-templates/ppt-9x6.tex
@@ -74,13 +74,15 @@
\begin{textblock}{4}[1,0](15,1)%
{\ttfamily\normalsize {\thepage{}}{\footnotesize{\color{grey}/\pageref{LastPage}}}}
\end{textblock}%
- \ifcsname c@minutes\endcsname
- \ifnum\value{minutes}=0\else%
- \begin{textblock}{1}[1,0](15.8,0.2)%
- \tikz{\node[inner sep=2pt,circle,draw=grey]{\color{grey}\scriptsize\ttfamily\theminutes{}};}
- \end{textblock}%
+ \makeatletter\ifdefined\ppt@nominutes\else
+ \ifcsname c@minutes\endcsname
+ \ifnum\value{minutes}=0\else%
+ \begin{textblock}{1}[1,0](15.8,0.2)%
+ \tikz{\node[inner sep=2pt,circle,draw=grey]{\color{grey}\scriptsize\ttfamily\theminutes{}};}
+ \end{textblock}%
+ \fi
\fi
- \fi
+ \fi\makeatother
\fi
}
diff --git a/macros/latex/contrib/qrbill/README.md b/macros/latex/contrib/qrbill/README.md
index 9a218919db..d04340f782 100644
--- a/macros/latex/contrib/qrbill/README.md
+++ b/macros/latex/contrib/qrbill/README.md
@@ -4,7 +4,7 @@ Copyright (C) Marei Peischl (peiTeX) <marei@peitex.de>, 2020–2022
This work is part of a collaborative project of Marei Peischl (peiTeX) and Alex Antener (foobar LLC).
-qrbill 2022/07/02 v1.04
+qrbill 2022/09/15 v1.05
***************************************************************************
@@ -38,6 +38,21 @@ have to be placed in the $TEXINPUTS path.
To simplify this, you can have a look at the qrbill.tds.zip, which provides an already prestructured variant to be extracted to any tds tree.
+### Use the Repository directly
+
+The repository provides a l3build script. You can build the documentation by running
+
+```
+l3build doc
+```
+This will unpack the package files and build the the docs within `build/`.
+
+To install the files into your local texmf tree run
+```
+l3build install
+```
+
+For further information on l3build and other options please have a look at the corresponding documentation `texdoc l3build`.
## Version History
@@ -52,4 +67,10 @@ To simplify this, you can have a look at the qrbill.tds.zip, which provides an a
- Add seb-iban and sep-reference to the example files
* v1.04 (2022/07/02)
- add basic support for EPC QR codes
- - add date parsing mechanism to preset the dates to values of `\today` \ No newline at end of file
+ - add date parsing mechanism to preset the dates to values of `\today`
+ * v1.05 (2022/09/15)
+ - add option to convert all data to strings
+ - add mechanism to do custom replacements within the data
+ - fix qrcode encoding to support UTF-8
+ - add support for speedata's luaqrcode library for qrcode generation http://speedata.github.io/luaqrcode/
+ - small layout and documentation fixes \ No newline at end of file
diff --git a/macros/latex/contrib/qrbill/qrbill-latexluaqrcode.lua b/macros/latex/contrib/qrbill/qrbill-latexluaqrcode.lua
new file mode 100644
index 0000000000..b1c31c2c64
--- /dev/null
+++ b/macros/latex/contrib/qrbill/qrbill-latexluaqrcode.lua
@@ -0,0 +1,24 @@
+qrencode = require("qrencode.lua")
+
+function printQRcode(codestring)
+ local ok, tab = qrencode.qrcode(codestring, 2)
+ local count = 0
+ local tabstr = ""
+ local qrrows = ""
+ if ok then
+ for k,v in pairs(tab) do
+
+ count = count + 1
+ for t,s in pairs(v) do
+ if s > 0 then
+ tabstr=tabstr.."\\qrblack"
+ else
+ tabstr=tabstr.."\\qrwhite"
+ end
+ end
+ qrrows=tabstr.."\\qrnewline"..qrrows
+ tabstr=""
+ end
+ end
+ return count, qrrows
+end \ No newline at end of file
diff --git a/macros/latex/contrib/qrbill/qrbill.dtx b/macros/latex/contrib/qrbill/qrbill.dtx
index e2b228f2ae..aa632a6845 100644
--- a/macros/latex/contrib/qrbill/qrbill.dtx
+++ b/macros/latex/contrib/qrbill/qrbill.dtx
@@ -54,7 +54,7 @@
% \fi
% \iffalse
%<*driver>
-\ProvidesFile{qrbill.dtx}[2022/07/02 v1.04 \ create QR-bills based on the Swiss standard]
+\ProvidesFile{qrbill.dtx}[2022/09/15 v1.05 \ create QR-bills based on the Swiss standard]
\documentclass[english, parskip=half-]{scrartcl}
\usepackage{iftex}
\ifPDFTeX
@@ -180,6 +180,7 @@
% \publishers{A collaborative project of pei\TeX{} and foobar LLC}
% \date{\filedate}
% \maketitle
+% \tableofcontents
% \section{Introduction}
% qrbill.sty, the \LaTeX-package, is the Free Software and Open Source answer to the launch of the swiss payments conversion, introduced mid 2020, replacing the former payment order slip by a restructured, QR enhanced slip. The published source code is based on the payment standard guidelines issued for Switzerland and intentionally has a modular structure to enable further development and adaptation for international use.
%
@@ -247,6 +248,10 @@
% \item[creditorprefix\\debtorprefix (String) (CR-/UD-)]
% For custom setups the predefined prefixes for the debtor and creditoraddress can be changes. The initial configuration is a requirement of the Swiss standards.
%
+% \item[data-to-string (true/false) (false)]
+% Converts data to be used to setup the billing QRcode into a string. This option has to be updated if the data should not be treated as ordinary \LaTeX{} code.
+% You can use this to automatically escape special characters.\changes{v1.05}{2022/09/15}{add data-to-string option}
+%
% \item[font (Frutiger/Arial/Helvetica/Liberation Sans/custom) (Liberation Sans)]
% \label{opt:font}
% The official guideline for the Swiss qrbill limits the choice of the font to the first four values of this option. The font selection and sizes currently hardcoded to fit to the size. Custom setups might be provided in the future.
@@ -258,8 +263,9 @@
% \renewcommand*{\qrbillfont}{\fontspec{Laconic}}
% \end{doccode}
%
-% \item[frame (true/false/top/bottom) (true)]
+% \item[frame (true/false/top/bottom/none) (true)]
% Switch to disable the frame around the created QRbill. The top/bottom options should be prefered when the bill is embedded into a document of a4 papersize.
+% The option none also disables the vertical line inside the bill as this may be included on preprinted paper.
%
% \changes{v1.02}{2020/08/25}{add ibanseparator option}
% \item[ibanseparator (tokenlist) (\textbackslash,)]
@@ -271,7 +277,11 @@
%
% \item[iconwidth (length) (7mm)]
% This option allows custom scaling for custom icons.
-
+%
+% \item[qrmode (package/lua) (package)] Selects the mechanism for QRcode generation.
+% With Version 2.0 the package supports usage of the the luaqrcode library \cite{luaqrcode}. This can be enabled by using the \latexinline{qmode=lua} option.
+% In that case the luaqrcode libary has to be installed within the \verb+$LUAINPUTS+.
+%
% \item[qrscheme (Name of a custom QRbill scheme) (swiss)]
% Loads the definitions for the QRcode and the BillingInformation. Currently only the
% swiss qrbill scheme is available, but one can define own variants based on this file.
@@ -299,8 +309,19 @@
% \changes{v1.02}{2020/08/25}{Fix placement issue with separate option}
% \item[separate (false/text/symbol) (text)]
% Setup the separation rule between the document and the qrbill. If the value is text or symbol the Info \enquote{\qrbillseparatename} or the corresponding translation will be printed on top of the frame. This option will be ignored it the frame has no top rule.
-% \end{optionlist}
+%
+% \item[replace-tilde\\replace-umlauts (true/false) (false)]
+% Add automatic string replacements for \latexinline{~} and Umlauts.
+% In general the Data has either to be parsed as string or be expandable.
+% There are some specials about active characters like \latexinline{~}.
+% The option \latexinline{replace-tilde=true} will replace this by an ordinary space within the data string for the QRcode.
+%
+% Similarly the replace-umlauts options is mapping Umlauts to the two character representation. This can be used if UTF-8 is not supported.
+% Custom replacements can be set up using \latexinline{\QRbillAddCustomReplacement} as described in section \ref{sec:custom-replacement}.
+% \changes{v1.05}{2022/09/15}{Add replace-tilde/replace-umlauts options}
%
+% \end{optionlist}
+%
% \section{Data setup}
% \label{sec:data-setup}
% \changes{v1.04}{2022/07/02}{Add starrred variant of qrbillsetdata}
@@ -323,6 +344,16 @@
% \end{doccode}
% By default this setting will return the ISO date (YYYY-MM-DD) but the swiss scheme is already changing this to the desired (YYMMDD) structure.
%
+% \section{String replacements}\label{sec:custom-replacement}
+% \changes{v1.05}{2022/09/15}{Add support for custom string replacements}
+% Following a feature request qrbill received support for custom replacements.
+% Those allow the use of special characters within the data fields.
+% The corresponding options \latexinline{replace-tilde} and \latexinline{replace-umlauts} provide preset variants for the most common replacements.
+% In case you want to add another you can use the following structure:
+% \begin{doccode}
+% \AddQRbillCustomReplacement{Ä}{Ae}
+% \end{doccode}
+%
% \section{Setup for the preconfigured Swiss QR-bill}
% \subsection{Preconfigured data}
% \changes{v1.03}{2021/05/07}{Update to swiss qrbill standard version 2.2}
@@ -353,7 +384,7 @@
% \begin{center}
% \begin{tabular}{@{}>{\ttfamily}l>{\centering}p{.25\linewidth}>{\centering\arraybackslash}p{.25\linewidth}@{}}
% \toprule
-% AddressType&K&S\\\cmidrule(r){1-1}\cmidrule(l){2-3}
+% AddressType&S&K\\\cmidrule(r){1-1}\cmidrule(l){2-3}
% Name& \multicolumn{2}{c}{Name}\\\cmidrule(r){1-1}\cmidrule(l){2-3}
% Address1&Street&Street with number\\\cmidrule(r){1-1}\cmidrule(l){2-3}
% Address2&Number&Postal code with City\\\cmidrule(r){1-1}\cmidrule(l){2-3}
@@ -474,7 +505,7 @@
% \section{Implementation}
% \begin{macrocode}
\RequirePackage{expl3}
-\ProvidesExplPackage{qrbill}{2022/07/02}{1.04}{
+\ProvidesExplPackage{qrbill}{2022/09/15}{1.05}{
Template for QR-bills based on the Swiss Payment Standards
}
\RequirePackage{iftex}
@@ -485,11 +516,19 @@
\bool_new:N \g__qrbill_bottom_frame_bool
\bool_new:N \g__qrbill_left_frame_bool
\bool_new:N \g__qrbill_right_frame_bool
+\bool_new:N \g__qrbill_vrule_bool
\bool_new:N \g__qrbill_separateinfo_bool
+\prop_new:N \g__qrbill_replacement_prop
+
+\msg_new:nnn {qrbill} {typo-in-option} {
+ A~typo~within~the~option~#1~was~removed.\\
+ The~correct~name~for~the~option~is~#2.\\
+ Please~use~#2~instead~of~#1,~which~only\\
+ exists~for~backwards~compatibility~and~will~be~removed.
+}
\keys_define:nn {qrbill} {
font .choices:nn = {Frutiger, Arial, Helvetica, Liberation Sans} {
- \bool_gset_true:N \g__qrbill_fontsetup_bool
\tl_gset_eq:NN \g__qrbill_font_tl \l_keys_choice_tl
},
font .initial:n = Liberation Sans,
@@ -506,29 +545,41 @@
qrmode .initial:n = package,
frame .choice:,
frame / false .code:n = {
- \bool_gset_false:N \__g__qrbill_top_frame_bool
+ \bool_gset_false:N \g__qrbill_top_frame_bool
\bool_gset_false:N \g__qrbill_bottom_frame_bool
\bool_gset_false:N \g__qrbill_left_frame_bool
\bool_gset_false:N \g__qrbill_right_frame_bool
+ \bool_gset_true:N \g__qrbill_vrule_bool
},
frame / true .code:n = {
\bool_gset_true:N \g__qrbill_top_frame_bool
\bool_gset_true:N \g__qrbill_bottom_frame_bool
\bool_gset_true:N \g__qrbill_left_frame_bool
\bool_gset_true:N \g__qrbill_right_frame_bool
+ \bool_gset_true:N \g__qrbill_vrule_bool
},
frame / top .code:n = {
\bool_gset_true:N \g__qrbill_top_frame_bool
\bool_gset_false:N \g__qrbill_bottom_frame_bool
\bool_gset_false:N \g__qrbill_left_frame_bool
\bool_gset_false:N \g__qrbill_right_frame_bool
+ \bool_gset_true:N \g__qrbill_vrule_bool
},
frame / bottom .code:n = {
\bool_gset_false:N \g__qrbill_top_frame_bool
\bool_gset_true:N \g__qrbill_bottom_frame_bool
\bool_gset_false:N \g__qrbill_left_frame_bool
\bool_gset_false:N \g__qrbill_right_frame_bool
+ \bool_gset_true:N \g__qrbill_vrule_bool
+ },
+ frame / none .code:n = {
+ \bool_gset_false:N \g__qrbill_top_frame_bool
+ \bool_gset_false:N \g__qrbill_bottom_frame_bool
+ \bool_gset_false:N \g__qrbill_left_frame_bool
+ \bool_gset_false:N \g__qrbill_right_frame_bool
+ \bool_gset_false:N \g__qrbill_vrule_bool
},
+
frame .initial:n = true,
billinginfo .bool_gset:N = \g__grbill_billinginfo_auto_bool,
billinginfo .default:n = true,
@@ -570,22 +621,40 @@
separate .initial:n = text,
sep-iban .int_gset:N = \g__qrbill_ibansep_int,
sep-iban .initial:n = 0,
- ibanseperator .tl_gset:N = \g__qrbill_ibansep_tl,
- ibanseperator .initial:n = {\,},
+ ibanseparator .tl_gset:N = \g__qrbill_ibansep_tl,
+ ibanseparator .initial:n = {\,},
+ ibanseperator .code:n = \keys_set:nn {qrbill} {ibanseparator=#1}\msg_warning:nnnn {qrbill} {typo-in-option} {ibanseperator} {ibanseparator},
sep-reference .int_gset:N = \g__qrbill_referencesep_int,
sep-reference .initial:n = 0,
- referenceseperator .tl_gset:N = \g__qrbill_referencesep_tl,
- referenceseperator .initial:n = {\,}
+ referenceseparator .tl_gset:N = \g__qrbill_referencesep_tl,
+ referenceseparator .initial:n = {\,},
+ referenceseperator .code:n = \keys_set:nn {qrbill} {referenceseparator=#1}\msg_warning:nnnn {qrbill} {typo-in-option} {referenceseperator} {referenceseparator},
+ replace-tilde .choice:,
+ replace-tilde / true .code:n = \prop_gput:Nxx \g__qrbill_replacement_prop {\char_generate:nn {126} {12}} {\ },
+ replace-tilde / false .code:n = \exp_args:NNx \prop_gremove:Nn \g__qrbill_replacement_prop {\char_generate:nn {126} {12}},
+ replace-umlauts .choice:,
+ replace-umlauts / true .code:n = \prop_gput_from_keyval:Nn \g__qrbill_replacement_prop {ä=ae,Ä=AE,ü=ue,Ü=UE,ö=oe,Ö=OE,ß=ss,ẞ=SS},
+ replace-umlauts / false .code:n = \clist_map_inline:nn {ä,Ä,ü,Ü,ö,Ö,ß,ẞ} {\prop_gremove:Nn \g__qrbill_replacement_prop {##1}},
+ data-to-string .bool_gset:N = \g__qrbill_to_string_bool,
}
\ProcessKeysOptions{qrbill}
\newcommand*{\qrbillsetup}[1]{\keys_set:nn {qrbill}{#1}}
\NewDocumentCommand{\qrbillsetdata}{sm}{
+ \bool_if:NTF \g__qrbill_to_string_bool {
+ \IfBooleanTF {#1} {
+ \tl_set:Nx \l_tmpa_tl {#2}
+ \exp_args:Nnx \keys_set:nn {qrbill/data} {\tl_to_str:V \l_tmpa_tl}
+ }{
+ \exp_args:Nnx \keys_set:nn {qrbill/data} {\tl_to_str:n {#2}}
+ }
+ } {
\IfBooleanT {#1}
\exp_args:Nnx
\keys_set:nn
{qrbill/data}{#2}
+ }
}
\tl_if_empty:NTF \g__qrbill_font_tl {
@@ -593,16 +662,99 @@
}{
\RequirePackage{fontspec}
\newfontfamily{\qrbillfont}{\g__qrbill_font_tl}
+ \RequirePackage{anyfontsize}
}
\dim_new:N \g_qrbill_QRcode_dim
\dim_gset:Nn \g_qrbill_QRcode_dim {46mm}
+\bool_if:NT \g__qrbill_luamode_bool {
+ \file_if_exist:nTF {qrencode.lua} {
+ \lua_load_module:n {qrbill-latexluaqrcode}
+ } {
+ \msg_new:nnn {qrbill} {luaqrcode-not-found} {
+ Could~not~find~the~required~library~for~qrmode=lua.\\
+ I~will~switch~to~qrmode=package.
+ }
+ \msg_warning:nn {qrbill} {luaqrcode-not-found}
+ \bool_gset_false:N \g__qrbill_luamode_bool
+ }
+
+ % qrcode setup
+ \dim_new:N \l__qrbill_QRblocksize_dim
+ \cs_set_protected:Npn \qrbill_qrcode_black: {\rule{\l__qrbill_QRblocksize_dim}{\l__qrbill_QRblocksize_dim}}
+ \cs_set_protected:Npn \qrbill_qrcode_white: {\rule{\l__qrbill_QRblocksize_dim}{0pt}\rule{0pt}{\l__qrbill_QRblocksize_dim}}
+ \cs_new:Nn \qrbill_parse_QRcode:n {
+ \lua_now:e {
+ num, string = printQRcode("\lua_escape:n {#1}")
+ }
+ \dim_set:Nn \l__qrbill_QRblocksize_dim {\g_qrbill_QRcode_dim/\lua_now:n {tex.print(num)}}
+ \let\qrblack\qrbill_qrcode_black:
+ \let\qrwhite\qrbill_qrcode_white:
+ \def\qrnewline{\\[\dimexpr-\baselineskip+\l__qrbill_QRblocksize_dim]}
+ \noindent\parbox{\g_qrbill_QRcode_dim}{
+ \lua_now:n {tex.sprint(string)}
+ }
+ }
+}
+
\bool_if:NF \g__qrbill_luamode_bool {
\usepackage{qrcode}
- \cs_new:Nn \qrbill_parse_QRcode:n {
- \raisebox{\depth}{\qrcode[height= \g_qrbill_QRcode_dim]{#1}}
+ % modified version of \qr@encode@binary to allow utf8 qrcodes required by swiss qrbill scheme
+ % Copyright (C) 2015 by Anders Hendrickson <ahendric@cord.edu>
+ \cs_set:Nn \__qrbill_encode_unicode_binary:n {
+ % #1 = string of ascii characters, to be converted into bitstream
+ %
+ % We do this one entirely in hex, rather than binary, because we can.
+ \edef\qr@plaintext{#1}%
+ %
+ %First, the mode indicator.
+ \def\qr@codetext{4}% %This means `binary'
+ %
+ %Next, the character count.
+ \xdef\qr@stringlength{\tl_count:o {\qr@plaintext}}%
+ %Set \qr@charactercountlengthinhex to \qr@charactercountbits@byte/4%
+ \edef\qr@charactercountlengthinhex{\int_eval:n {\qr@charactercountbits@byte / 4}}%
+ \qr@decimaltohex[\qr@charactercountlengthinhex]{\qr@charactercount}{\qr@stringlength}%
+ \xa\g@addto@macro\xa\qr@codetext\xa{\qr@charactercount}%
+ %
+ %Now comes the actual data.
+ \exp_args:NNx \str_set_convert:Nnnn \l_tmpa_str { \qr@plaintext } {iso88591} {utf8}
+ \exp_args:NNV \str_set_convert:Nnnn \l_tmpa_str \l_tmpa_str {} {latin1/hex}
+ \str_gput_right:NV \qr@codetext \l_tmpa_str
+ \xdef\qr@codetext{\exp_args:No \str_lowercase:n {\qr@codetext}}
+ %Now the terminator.
+ \g@addto@macro\qr@codetext{0}% %This is '0000' in binary.
+ %
+ %There is no need to pad bits to make a multiple of 8,
+ %because the data length is already 4 + 8 + 8n + 4.
+ %
+ %Now add padding codewords if needed.
+ \setcounter{qr@hexchars}{\tl_count:o {\qr@codetext}}%
+ %Set \qr@numpaddingcodewords equal to \qr@totaldatacodewords - qr@hexchars/2.
+ \edef\qr@numpaddingcodewords{\int_eval:n {(-\c@qr@hexchars / 2)+\qr@totaldatacodewords}}
+ %
+ \int_compare:nNnT {\qr@numpaddingcodewords} < {0} {
+ \edef\ds{ERROR:~Too~much~data!~Over~by~\qr@numpaddingcodewords~bytes.}
+ }
+ \int_compare:nNnT {\qr@numpaddingcodewords} > {0} {
+ \int_step_inline:nnnn {2} {2} {\qr@numpaddingcodewords} {
+ \g@addto@macro{\qr@codetext}{ec11}%
+ }
+ \int_if_odd:nT {\qr@numpaddingcodewords} {
+ \g@addto@macro{\qr@codetext}{ec}%
+ }
+ }
+ }
+ \cs_set:Nn \qrbill_parse_QRcode:n {
+ \cs_set_eq:NN \qr@encode@binary \__qrbill_encode_unicode_binary:n
+ \raisebox{\depth}{\cs_set_eq:NN \qr@encode@binary \__qrbill_encode_unicode_binary:n\qrcode[height= \g_qrbill_QRcode_dim]{#1}}
}
- \cs_generate_variant:Nn \qrbill_parse_QRcode:n {V}
+}
+
+\cs_generate_variant:Nn \qrbill_parse_QRcode:n {V}
+
+\newcommand*{\QRbillAddCustomReplacement}[2]{
+ \prop_gput:Nxx \g__qrbill_replacement_prop {#1} {#2},
}
\RequirePackage{scrbase}
@@ -818,7 +970,9 @@
{\rule{\g__qrbill_rule_dim}{\c_qrbill_height_dim}}
{\rule{\g__qrbill_rule_dim}{\c_zero_dim}}
\hspace{\dimexpr62mm-1.5\g__qrbill_rule_dim}
- \rule{\g__qrbill_rule_dim}{\c_qrbill_height_dim}
+ \bool_if:NTF \g__qrbill_vrule_bool
+ {\rule{\g__qrbill_rule_dim}{\c_qrbill_height_dim}}
+ {\rule{\g__qrbill_rule_dim}{\c_zero_dim}}
\hspace{\dimexpr148mm-1.5\g__qrbill_rule_dim}
\bool_if:NTF \g__qrbill_right_frame_bool
{\rule{\g__qrbill_rule_dim}{\c_qrbill_height_dim}}
@@ -864,7 +1018,13 @@
\seq_new:N \l_qrbill_tmp_seq
\cs_new:Nn \qrbill_set_address_combined:nn {
- \seq_set_split:Nnn \l_qrbill_tmp_seq {\\} {#2}
+ \bool_if:NTF \g__qrbill_to_string_bool {
+ \exp_args:NNxx \seq_set_split:Nnn \l_qrbill_tmp_seq
+ {\tl_to_str:n {\\}}
+ { \str_range:nnn { #2 } { 2 } { -2 } }
+ } {
+ \seq_set_split:Nnn \l_qrbill_tmp_seq {\\} {#2}
+ }
\exp_args:Nnx \keys_set:nn {qrbill/data} {
#1AddressType=K,
#1Name=\seq_item:Nn \l_qrbill_tmp_seq {1},
@@ -877,7 +1037,13 @@
}
\cs_new:Nn \qrbill_set_address_structured:nn {
- \seq_set_split:Nnn \l_qrbill_tmp_seq {\\} {#2}
+ \bool_if:NTF \g__qrbill_to_string_bool {
+ \exp_args:NNxx \seq_set_split:Nnn \l_qrbill_tmp_seq
+ {\tl_to_str:n {\\}}
+ { \str_range:nnn { #2 } { 2 } { -2 } }
+ } {
+ \seq_set_split:Nnn \l_qrbill_tmp_seq {\\} {#2}
+ }
\exp_args:Nnx \keys_set:nn {qrbill/data} {
#1AddressType=S,
#1Name=\seq_item:Nn \l_qrbill_tmp_seq {1},
@@ -926,7 +1092,7 @@
\int_set:Nn \l_tmpb_int {\int_abs:n {\int_use:c {g__qrbill_#1sep_int}}}
\int_set:Nn \l_tmpa_int {1}
\tl_clear:N \l_tmpa_tl
- \int_while_do:nn {\l_tmpa_int < \str_count:N \l_tmpa_str} {
+ \int_while_do:nNnn {\l_tmpa_int} < {\str_count:N \l_tmpa_str - \l_tmpb_int +1 } {
\tl_put_right:Nx \l_tmpa_tl {
\str_range:Nnn \l_tmpa_str {\l_tmpa_int} {\l_tmpa_int + \l_tmpb_int-1}
}
@@ -960,7 +1126,7 @@
\keys_define:nn {qrbill/data} {
#1 .code:n = {
\tl_if_empty:nF {##1}{
- \keys_set:nx {qrbill/data} {
+ \exp_args:Nnx \keys_set:nn {qrbill/data} {
#1-Parameters={\qrbill_av_prefix:n {#1}##1}
}
}
@@ -971,7 +1137,11 @@
}
\newcommand*{\SetupQrBill}[1]{
- \keys_set:nn {qrbill/data} {#1}
+ \bool_if:NTF \g__qrbill_to_string_bool {
+ \exp_args:Nnx \keys_set:nn {qrbill/data} {\tl_to_str:n {#1}}
+ } {
+ \keys_set:nn {qrbill/data} {#1}
+ }
}
\str_new:N \l_qrbill_data_str
@@ -985,7 +1155,10 @@
\exp_args:NNv \str_put_right:Nn \l_qrbill_data_str {l_qrbill_data_##1_tl}
}
%necessary to preserve spaces!
- \str_replace_all:Nnn \l_qrbill_data_str {~ } {\ }
+ \str_replace_all:Nnn \l_qrbill_data_str {~ } {\ }
+ \prop_map_inline:Nn \g__qrbill_replacement_prop {
+ \str_replace_all:Nnn \l_qrbill_data_str {##1} {##2}
+ }
\tl_set_rescan:Nno \l_qrbill_data_str {\ExplSyntaxOff} {\l_qrbill_data_str}
}
@@ -1004,18 +1177,31 @@
\prop_new:N \g__qrbill_billing_info_prop
\seq_new:N \g__qrbill_billing_info_seq
+
+\clist_new:N \g__qrbill_billing_info_static_clist
+\newcommand*{\SetStaticData}[1]{\clist_gset:Nx \g__qrbill_billing_info_static_clist {\tl_to_str:n {#1}}}
+
\newcommand*{\SetBillingInfoScheme}[1]{
\prop_gset_from_keyval:Nn \g__qrbill_billing_info_prop {#1}
\seq_gclear:N \g__qrbill_billing_info_seq
\prop_map_inline:Nn \g__qrbill_billing_info_prop {
- \exp_args:Nx \clist_if_in:nnF {\tl_to_str:n {prefix , postfix}} {##1} {
- \seq_push:Nn \g__qrbill_billing_info_seq {##1}
+ \clist_if_in:NnF \g__qrbill_billing_info_static_clist {##1} {
+ \seq_push:Nn \g__qrbill_billing_info_seq {##1}
}
\keys_define:nn {qrbill/data} {
##2 .tl_set:c = l_qrbill_##2_tl,
##2 .initial:n =,
}
}
+ \seq_if_empty:NF \g__qrbill_billing_info_seq {
+ \prop_map_inline:Nn \g__qrbill_billing_info_prop {
+ \clist_if_in:NnT \g__qrbill_billing_info_static_clist {##1} {
+ \exp_args:Nx \clist_if_in:nnF {\tl_to_str:n {prefix , postfix}} {##1} {
+ \seq_push:Nn \g__qrbill_billing_info_seq {##1}
+ }
+ }
+ }
+ }
\seq_sort:Nn \g__qrbill_billing_info_seq {
\int_compare:nNnTF { ##1 } > { ##2 }
{ \sort_return_swapped: }
@@ -1111,6 +1297,8 @@
AV2-Parameters
}
+\SetStaticData{prefix,11,31}
+
\SetBillingInfoScheme{
prefix=//S1,
10=invoicenum,
@@ -1183,8 +1371,10 @@
%
% \PrintChanges
% \begin{thebibliography}{99}
-% \bibitem{qrbill-spec} Swiss Implementation Guidelines QR-bill: Technical and professional specifications of the payment part with Swiss QR Code and of the receipt. Version 2.2, with effect from 22 February 2021. \url{https://www.paymentstandards.ch/dam/downloads/ig-qr-bill-en.pdf}. Last checked 2021-05-07
+% \bibitem{qrbill-spec} Swiss Implementation Guidelines QR-bill: Technical and professional specifications of the payment part with Swiss QR Code and of the receipt. Version 2.2, with effect from 22 February 2021. \url{https://www.paymentstandards.ch/dam/downloads/ig-qr-bill-en.pdf}. Last checked 2022-08-28
% \bibitem{qrbill-design} Style Guide QR-billStyle Guide QR-bill: The right layout pays off. Layout rules and recommendations for the payment part with Swiss QR Code and for the receipt. \url{https://www.paymentstandards.ch/dam/downloads/style-guide-en.pdf}
+% \bibitem{luaqrcode} Luaqrcode – Pure Lua QR Code library. By Patrick Gundlach (SPEEDATA GMBH) and contributors.
+% \url{http://speedata.github.io/luaqrcode/}. Last checked 2022-08-28
% \end{thebibliography}
% \appendix
% \section{Example of standalone qrbill}
@@ -1252,7 +1442,8 @@
sep-reference=-5,
]{qrbill}
-% Setup layer
+% Setup layer:
+% This requires the scrlayer package which is already loaded by scrletter
\DeclareNewLayer[
align=bl,
voffset=\paperheight,
diff --git a/macros/latex/contrib/qrbill/qrbill.pdf b/macros/latex/contrib/qrbill/qrbill.pdf
index 5f9d5acd0a..f515cbd69e 100644
--- a/macros/latex/contrib/qrbill/qrbill.pdf
+++ b/macros/latex/contrib/qrbill/qrbill.pdf
Binary files differ
diff --git a/macros/latex/contrib/udes-genie-these/README.md b/macros/latex/contrib/udes-genie-these/README.md
new file mode 100644
index 0000000000..173096c7fb
--- /dev/null
+++ b/macros/latex/contrib/udes-genie-these/README.md
@@ -0,0 +1,17 @@
+# udes-genie-these : Thesis class for the Faculté de génie at the Université de Sherbrooke
+
+## Overview
+The udes-genie-these class can be used for Ph.D. thesis, master's thesis and project definition at the Faculté de génie of the Université de Sherbrooke (Québec, Canada). The class file is coherent with the latest version of the *Protocole de rédaction aux études supérieures* which is available on the faculty's intranet.
+
+The class file documentation is in French, the language of the typical user at the Université de Sherbrooke. An example of use is also distributed with the documentation.
+
+Copyright (C) 2017-2022 Charles-Antoine Brunet
+
+## Authors and maintainers
+Charles-Antoine Brunet (<Charles-Antoine.Brunet@USherbrooke.ca>)
+
+## License
+The contents are distributed under the LaTeX Project Public License, version 1.3c or later.
+
+## History
+See the change log in the documentation.
diff --git a/macros/latex/contrib/udes-genie-these/acronymes.tex b/macros/latex/contrib/udes-genie-these/acronymes.tex
new file mode 100644
index 0000000000..84eb09844d
--- /dev/null
+++ b/macros/latex/contrib/udes-genie-these/acronymes.tex
@@ -0,0 +1,12 @@
+Ceci est un exemple de liste des acronymes.
+
+\begin{center}
+\begin{tabular}{ll}
+\toprule
+\textbf{Acronyme} & \textbf{Définition} \\ \midrule
+OIQ & Ordre des ingénieurs du Québec \\
+UdeS & Université de Sherbrooke \\
+... & ... \\
+\bottomrule
+\end{tabular}
+\end{center}
diff --git a/macros/latex/contrib/udes-genie-these/analyse.tex b/macros/latex/contrib/udes-genie-these/analyse.tex
new file mode 100644
index 0000000000..6ef4a0f95a
--- /dev/null
+++ b/macros/latex/contrib/udes-genie-these/analyse.tex
@@ -0,0 +1 @@
+\chapter{ANALYSE}
diff --git a/macros/latex/contrib/udes-genie-these/conception.tex b/macros/latex/contrib/udes-genie-these/conception.tex
new file mode 100644
index 0000000000..83b56eb755
--- /dev/null
+++ b/macros/latex/contrib/udes-genie-these/conception.tex
@@ -0,0 +1 @@
+\chapter{CONCEPTION}
diff --git a/macros/latex/contrib/udes-genie-these/conclusion-anglaise.tex b/macros/latex/contrib/udes-genie-these/conclusion-anglaise.tex
new file mode 100644
index 0000000000..d8a234314f
--- /dev/null
+++ b/macros/latex/contrib/udes-genie-these/conclusion-anglaise.tex
@@ -0,0 +1 @@
+\chapter{ENGLISH CONCLUSION} \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/conclusion-francaise.tex b/macros/latex/contrib/udes-genie-these/conclusion-francaise.tex
new file mode 100644
index 0000000000..e1b06616bd
--- /dev/null
+++ b/macros/latex/contrib/udes-genie-these/conclusion-francaise.tex
@@ -0,0 +1 @@
+\chapter{CONCLUSION FRANÇAISE} \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/document.tex b/macros/latex/contrib/udes-genie-these/document.tex
new file mode 100644
index 0000000000..9b82193ecf
--- /dev/null
+++ b/macros/latex/contrib/udes-genie-these/document.tex
@@ -0,0 +1,55 @@
+\documentclass[livre]{udes-genie-these}
+
+\usepackage[T1]{fontenc}
+\usepackage{booktabs}
+
+\ConfigurationDocument
+{
+ langue = francais,
+ type = memoire,
+ programme = electrique,
+ lignes,
+ liste-figures,
+ liste-tableaux,
+ fichier-resume-francais = {resume-francais},
+ fichier-resume-anglais = {resume-anglais},
+ fichier-remerciements = {merci},
+ fichier-lexique = {lexique},
+ fichier-symboles = {symboles},
+ fichier-acronymes = {acronymes},
+ fichiers-references = {references},
+}
+
+\TitreFrancais{CECI EST LE TITRE FRANÇAIS\\DU DOCUMENT}
+\TitreAnglais{DOCUMENT ENGLISH TITLE}
+\Auteur{Prénom}{NOM}
+\Date{Septembre}{2022}
+\Dedicace{À mon chien préféré, Pitou, et à mon chat préféré, Minou.}
+\MotsClesFrancais{3 à 8 mots-clés français}
+\MotsClesAnglais{3 to 8 english keywords}
+
+\Directeur{Prénom1}{NOM1}
+\Codirectrice{Prénom2}{NOM1}
+\Codirecteur{Prénom3}{NOM3}
+\Evaluatrice{Prénom4}{NOM4}
+\Evaluateur{Prénom5}{NOM5}
+
+% Le contenu du document doit respecter le protocole de rédaction.
+% Le contenu fourni ici n'est qu'un exemple afin d'illustre l'utilisation de la classe.
+\bibliographystyle{plain}
+
+\begin{document}
+
+\include{introduction}
+\include{conception}
+\include{realisation}
+\include{tests}
+\include{analyse}
+\include{conclusion-francaise}
+\include{conclusion-anglaise}
+
+\appendix
+
+\include{donnees}
+
+\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/donnees.tex b/macros/latex/contrib/udes-genie-these/donnees.tex
new file mode 100644
index 0000000000..18e57d0601
--- /dev/null
+++ b/macros/latex/contrib/udes-genie-these/donnees.tex
@@ -0,0 +1 @@
+\chapter{DONNÉES} \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/introduction.tex b/macros/latex/contrib/udes-genie-these/introduction.tex
new file mode 100644
index 0000000000..8e1a76e9fa
--- /dev/null
+++ b/macros/latex/contrib/udes-genie-these/introduction.tex
@@ -0,0 +1,33 @@
+
+\chapter{INTRODUCTION}
+
+Ce document est uniquement un exemple d'utilisation de la classe \LaTeX\ pour la rédaction de documents conforme au \textit{Protocole de rédaction aux études supérieures} de la Faculté de génie de l'Université de Sherbrooke. Le contenu de cet exemple n'est pas représentatif de ce que devrait contenir un vrai document. Pour connaître le contenu éventuel d'un vrai document, il faut se référer au protocole.
+
+Les références bibliographiques qui suivent ne sont que des exemples. Il faut se référer au protocole pour plus de détails à ce sujet afin de s'assurer que les références sont complètes et qu'elles sont conformes aux exigences.
+
+\begin{description}
+ \item[Article de périodique:]
+ il y a quatre exemples \cite{burke1995,pattamatta2009,roy2009,vasu2009}.
+
+ \item[Articles d'actes de conférence:]
+ il y a un exemple court~\cite{prevenslik2009}
+ et deux exemples longs~\cite{coronado2005,yeung2006}.
+
+ \item[Livre:]
+ il y a un exemple court~\cite{russell2003}
+ et trois exemples longs~\cite{kececioglu1991,knuth1998-num,meriam2010}.
+
+ \item[Livre, une partie:]
+ il y a deux exemples courts~\cite{cormen2001,gaddis2009}
+ et trois exemples longs~\cite{kececioglu1991-partie,knuth1998-sort,meriam2010-dist}.
+
+ \item[Essai, mémoire et thèse:]
+ il y a un exemple de chacun \cite{belanger2009,chafei2009,francoeur2009}.
+
+ \item[Rapport technique:]
+ il y a un exemple court~\cite{belley2008}
+ et un exemple long~\cite{kernighan1991}.
+
+\end{description}
+
+
diff --git a/macros/latex/contrib/udes-genie-these/lexique.tex b/macros/latex/contrib/udes-genie-these/lexique.tex
new file mode 100644
index 0000000000..33f0ad57b7
--- /dev/null
+++ b/macros/latex/contrib/udes-genie-these/lexique.tex
@@ -0,0 +1,12 @@
+Ceci est un exemple de lexique (glossaire).
+
+\begin{center}
+\begin{tabular}{ll}
+\toprule
+\textbf{Terme technique} & \textbf{Définition} \\ \midrule
+Actionneur & Définition du terme actionneur \\
+Capteur & Définition du terme capteur \\
+Référentiel & Définition du terme référentiel \\
+\bottomrule
+\end{tabular}
+\end{center}
diff --git a/macros/latex/contrib/udes-genie-these/merci.tex b/macros/latex/contrib/udes-genie-these/merci.tex
new file mode 100644
index 0000000000..1ca4d21385
--- /dev/null
+++ b/macros/latex/contrib/udes-genie-these/merci.tex
@@ -0,0 +1 @@
+Consultez le \textit{Protocole de rédaction aux études supérieures} de la Faculté de génie de l'Université de Sherbrooke afin de connaitre les détails sur le contenu des remerciements.
diff --git a/macros/latex/contrib/udes-genie-these/realisation.tex b/macros/latex/contrib/udes-genie-these/realisation.tex
new file mode 100644
index 0000000000..191e529570
--- /dev/null
+++ b/macros/latex/contrib/udes-genie-these/realisation.tex
@@ -0,0 +1 @@
+\chapter{RÉALISATION} \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/references.bib b/macros/latex/contrib/udes-genie-these/references.bib
new file mode 100644
index 0000000000..70583f06ac
--- /dev/null
+++ b/macros/latex/contrib/udes-genie-these/references.bib
@@ -0,0 +1,219 @@
+@MASTERSTHESIS{belanger2009,
+ YEAR = 2009,
+ AUTHOR = "F. B\'elanger",
+ TYPE = "Essai de maitrise",
+ SCHOOL = "Université de Sherbrooke",
+ ADDRESS = "Sherbrooke, Québec, Canada",
+ PAGES = 124,
+ TITLE = "Étude de faisabilité techno-économique et sociopolitique d'un projet régional de méthanisation de lisier de porc en co-digestion",
+}
+
+@TECHREPORT{belley2008,
+ YEAR = 2008,
+ AUTHOR = "K. Belley",
+ INSTITUTION = "Université de Sherbrooke",
+ PAGES = 48,
+ TITLE = "Détection de sites sécuritaires par réseaux de neurones pour un atterrissage autonome sur corps planétaire: résultats supplémentaires",
+}
+
+@ARTICLE{burke1995,
+ YEAR = 1995,
+ AUTHOR = "L. Burke and S. Flanders",
+ NUMBER = 9,
+ PAGES = "871--881",
+ TITLE = "Using ontogenic classification networks in a smart structures application",
+ JOURNAL = "Computers \& Operations Research",
+ VOLUME = 22,
+}
+
+@MASTERSTHESIS{chafei2009,
+ YEAR = 2009,
+ AUTHOR = "A. Chafei",
+ SCHOOL = "Université de Sherbrooke",
+ ADDRESS = "Sherbrooke, Québec, Canada",
+ PAGES = 144,
+ TITLE = "L'utilisation de systèmes intelligents réseautés pour l'instrumentation des structures en génie civil",
+}
+
+@INCOLLECTION{cormen2001,
+ YEAR = 2001,
+ AUTHOR = "T. H. Cormen and C. E. Leiserson and R. L. Rivest and C. Stein",
+ EDITION = 2,
+ PUBLISHER = "MIT Press",
+ PAGES = "200--220",
+ BOOKTITLE = "Introduction to algorithms",
+ TITLE = "Elementary Data Structures",
+}
+
+@INPROCEEDINGS{coronado2005,
+ YEAR = 2005,
+ AUTHOR = "C. A. Coronado and M. M. Lopez",
+ SERIES = "Proceedings of FRPRCS-7",
+ EDITOR = "C. K. Shield and J. P. Busel and S. L. Walkup and D. D. Gremel",
+ ADDRESS = "Farmington Hills",
+ PUBLISHER = "American Concrete Institute",
+ PAGES = "373--390",
+ BOOKTITLE = "7th International Symposium. Fiber-Reinforced Polymer (FRP) Reinforcement for Concrete Structures",
+ TITLE = "Modeling of {FRP}-concrete bond using nonlinear damage mechanics",
+ VOLUME = 1,
+}
+
+@PHDTHESIS{francoeur2009,
+ YEAR = 2009,
+ AUTHOR = "D. Francoeur",
+ SCHOOL = "Université de Sherbrooke",
+ ADDRESS = "Sherbrooke, Québec, Canada",
+ PAGES = 159,
+ TITLE = "Méthode d'identification paramétrique pour la surveillance in situ des joints à recouvrement par propagation d'ondes vibratoires",
+}
+
+@INCOLLECTION{gaddis2009,
+ YEAR = 2009,
+ AUTHOR = "T. Gaddis",
+ EDITION = 6,
+ PUBLISHER = "Pearson Addison Wesley",
+ PAGES = "507--557",
+ BOOKTITLE = "Starting Out with C++: from Control Structures through Objects",
+ TITLE = "Pointers",
+}
+
+@INCOLLECTION{kececioglu1991-partie,
+ YEAR = 1991,
+ AUTHOR = "D. Kececioglu",
+ ADDRESS = "Englewood Cliffs, NJ, USA",
+ PUBLISHER = "Prentice Hall PTR",
+ PAGES = "215--269",
+ BOOKTITLE = "Reliability engineering handbook",
+ TITLE = "The exponential distribution",
+ VOLUME = 1,
+}
+
+@BOOK{kececioglu1991,
+ YEAR = 1991,
+ AUTHOR = "D. Kececioglu",
+ ADDRESS = "Englewood Cliffs, NJ, USA",
+ PUBLISHER = "Prentice Hall PTR",
+ PAGES = 547,
+ TITLE = "Reliability engineering handbook",
+ VOLUME = 2,
+}
+
+@TECHREPORT{kernighan1991,
+ YEAR = 1991,
+ AUTHOR = "B. W. Kernighan",
+ INSTITUTION = "AT\&T Bell Laboratories",
+ ADDRESS = "Murray Hill, NJ, USA",
+ NUMBER = "116",
+ PAGES = 25,
+ TITLE = "{PIC} -- A Graphics Language for Typesetting, User Manual",
+ TYPE = "Computer Science Technical Report",
+}
+
+@BOOK{knuth1998-num,
+ YEAR = 1998,
+ AUTHOR = "D. E. Knuth",
+ EDITION = 3,
+ ADDRESS = "Reading, MA, USA",
+ PUBLISHER = "Addison Wesley Longman",
+ PAGES = 784,
+ TITLE = "The Art of Computer Programming",
+ VOLUME = 2,
+}
+
+@INCOLLECTION{knuth1998-sort,
+ YEAR = 1998,
+ AUTHOR = "D. E. Knuth",
+ EDITION = 2,
+ ADDRESS = "Reading, MA, USA",
+ PUBLISHER = "Addison Wesley Longman",
+ PAGES = "1--391",
+ BOOKTITLE = "The Art of Computer Programming",
+ TITLE = "Sorting",
+ VOLUME = 3,
+}
+
+@INCOLLECTION{meriam2010-dist,
+ YEAR = 2010,
+ AUTHOR = "J. L. Meriam and L. G. Kraige",
+ EDITION = 6,
+ ADDRESS = "Hoboken, NJ, USA",
+ PUBLISHER = "John Wiley \& Sons, Inc.",
+ PAGES = "235--337",
+ BOOKTITLE = "Engineering mechanics",
+ TITLE = "Distributed forces",
+ VOLUME = 1,
+}
+
+@BOOK{meriam2010,
+ YEAR = 2010,
+ AUTHOR = "J. L. Meriam and L. G. Kraige",
+ EDITION = 6,
+ ADDRESS = "Hoboken, NJ, USA",
+ PUBLISHER = "John Wiley \& Sons, Inc.",
+ PAGES = 744,
+ TITLE = "Engineering mechanics",
+ VOLUME = 2,
+}
+
+@ARTICLE{pattamatta2009,
+ YEAR = 2009,
+ AUTHOR = "A. Pattamatta and C. K. Madnia",
+ NUMBER = 3,
+ PAGES = "608--615",
+ TITLE = "Modeling thermal transport in nanoparticle composites",
+ JOURNAL = "Journal of Thermophysics and Heat Transfer",
+ VOLUME = 23,
+}
+
+@INPROCEEDINGS{prevenslik2009,
+ YEAR = 2009,
+ AUTHOR = "T. V. Prevenslik",
+ ADDRESS = "Piscataway, NJ, USA",
+ PUBLISHER = "IEEE",
+ PAGES = "73--76",
+ BOOKTITLE = "2009 Third International Conference on Quantum, Nano and Micro Technologies (ICQNM 2009)",
+ TITLE = "Heat transfer in thin films",
+}
+
+@ARTICLE{roy2009,
+ YEAR = 2009,
+ AUTHOR = "S. Roy and N. Ranganathan and S. Katkoori",
+ NUMBER = 11,
+ PAGES = "1640--1649",
+ TITLE = "A framework for power-gating functional units in embedded microprocessors",
+ JOURNAL = "IEEE Transactions on Very Large Scale Integration (VLSI) Systems",
+ VOLUME = 17,
+}
+
+@BOOK{russell2003,
+ YEAR = 2003,
+ AUTHOR = "S. J. Russell and P. Norvig",
+ EDITION = 2,
+ PUBLISHER = "Prentice Hall",
+ PAGES = 1080,
+ TITLE = "Artificial Intelligence: A Modern Approach",
+}
+
+@ARTICLE{vasu2009,
+ YEAR = 2009,
+ AUTHOR = "V. Vasu and K. R. Krishna and A. C. S. Kumar",
+ NUMBER = "1-2",
+ PAGES = "158--171",
+ TITLE = "Heat transfer with nanofluids for electronic cooling",
+ JOURNAL = "International Journal of Materials \& Product Technology",
+ VOLUME = 34,
+}
+
+@INPROCEEDINGS{yeung2006,
+ YEAR = 2006,
+ AUTHOR = "D. Yeung and J. Lowrance",
+ SERIES = "Lecture Notes in Computer Science",
+ EDITOR = "S. Mehrotra and D. D. Zeng and H. Chen and B. Thuraisingham and F.-Y. Wang",
+ ADDRESS = "Berlin, Germany",
+ PUBLISHER = "Springer",
+ ORGANIZATION = "IEEE",
+ PAGES = "1--13",
+ BOOKTITLE = "Proceedings of the IEEE International Conference on Intelligence and Security Informatics",
+ TITLE = "Computer-Mediated Collaborative Reasoning and Intelligence Analysis",
+ VOLUME = 3975,
+}
diff --git a/macros/latex/contrib/udes-genie-these/resume-anglais.tex b/macros/latex/contrib/udes-genie-these/resume-anglais.tex
new file mode 100644
index 0000000000..8a9c6d6202
--- /dev/null
+++ b/macros/latex/contrib/udes-genie-these/resume-anglais.tex
@@ -0,0 +1 @@
+Consult the \textit{Protocole de rédaction aux études supérieures} de la Faculté de génie de l'Université de Sherbrooke for details on the abstract's content.
diff --git a/macros/latex/contrib/udes-genie-these/resume-francais.tex b/macros/latex/contrib/udes-genie-these/resume-francais.tex
new file mode 100644
index 0000000000..344f5cd372
--- /dev/null
+++ b/macros/latex/contrib/udes-genie-these/resume-francais.tex
@@ -0,0 +1 @@
+Consultez le \textit{Protocole de rédaction aux études supérieures} de la Faculté de génie de l'Université de Sherbrooke afin de connaitre les détails sur le contenu du résumé.
diff --git a/macros/latex/contrib/udes-genie-these/revue.tex b/macros/latex/contrib/udes-genie-these/revue.tex
new file mode 100644
index 0000000000..356175d490
--- /dev/null
+++ b/macros/latex/contrib/udes-genie-these/revue.tex
@@ -0,0 +1 @@
+\chapter{REVUE DE LA LITTÉRATURE} \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/symboles.tex b/macros/latex/contrib/udes-genie-these/symboles.tex
new file mode 100644
index 0000000000..923a1c85ef
--- /dev/null
+++ b/macros/latex/contrib/udes-genie-these/symboles.tex
@@ -0,0 +1,15 @@
+Ceci est un exemple de liste des symboles.
+
+\begin{center}
+\begin{tabular}{ll}
+\toprule
+\textbf{Symbole} & \textbf{Définition} \\ \midrule
+$\dot{[~]}$ & Dérivée première selon le référentiel inertiel \\
+$\ddot{[~]}$ & Dérivée seconde selon le référentiel inertie \\
+$a$ & Accélération \\
+$m$ & Masse \\
+$t$ & Variable temporelle \\
+... & ... \\
+\bottomrule
+\end{tabular}
+\end{center}
diff --git a/macros/latex/contrib/udes-genie-these/tests.tex b/macros/latex/contrib/udes-genie-these/tests.tex
new file mode 100644
index 0000000000..065e9d103d
--- /dev/null
+++ b/macros/latex/contrib/udes-genie-these/tests.tex
@@ -0,0 +1 @@
+\chapter{TESTS} \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/udes-genie-these.dtx b/macros/latex/contrib/udes-genie-these/udes-genie-these.dtx
new file mode 100644
index 0000000000..ccdaae0838
--- /dev/null
+++ b/macros/latex/contrib/udes-genie-these/udes-genie-these.dtx
@@ -0,0 +1,1420 @@
+% \iffalse meta-comment
+%% udes-genie-these.dtx
+%% Copyright 2022 Charles-Antoine Brunet
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Charles-Antoine Brunet and
+% can be contacted at Charles-Antoine.Brunet@USherbrooke.ca
+%
+% This work consists of the files udes-genie-these.dtx and udes-genie-these.ins
+% and the derived files udes-genie-these.cls and udes-genie-protocole.cls.
+% \fi
+%
+% \iffalse
+%<@@=udesgeniethese>
+%<these|protocole>%%
+%<these|protocole>%%-----------------------------------------------------------------------------
+%<these|protocole>%%--- IDENTIFICATION ------------------------------------------------------
+%<these|protocole>%%-----------------------------------------------------------------------------
+%<these|protocole>
+%<these>\ProvidesExplClass{udes-genie-these}{2022/09/15}{2.0.1}
+%<these> {Universite de Sherbrooke, Faculte de genie: classe de document pour theses, memoires, DPR et essais}
+%<protocole>\ProvidesExplClass{udes-genie-protocole}{2022/09/15}{2.0.1}
+%<protocole> {Universite de Sherbrooke, Faculte de genie: classe de document pour le protocole de redaction}
+%<these|protocole>
+%<*driver>
+\documentclass[12pt,letterpaper,french]{l3doc}
+\usepackage[T1]{fontenc}
+\usepackage[notextcomp]{kpfonts}
+\usepackage[scaled=0.7881]{DejaVuSansMono}
+\usepackage[french]{babel}
+\usepackage{hologo,setspace,parskip,microtype,xspace,tabularx,xcolor,pifont}
+\hypersetup{colorlinks=true,linkcolor=blue,citecolor=blue,urlcolor=blue,linktocpage=true}
+\setlength{\parskip}{1ex plus0.25ex minus0ex}
+\setlength{\parindent}{0em}
+\clubpenalty=10000 % Penalité pour lignes orphelines
+\widowpenalty=10000 % Penalité pour lignes veuves
+\singlespacing %\singlespacing \onehalfspacing \doublespacing \setstretch{1.25}
+\makeatletter
+\c@IndexColumns = 2
+\c@GlossaryColumns = 2
+\makeatother
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\OnlyDescription
+\GlossaryPrologue{\section*{Historique des changements}\markboth{Historique des changements}{Historique des changements} \addcontentsline{toc}{section}{Historique des changements}
+}
+\IndexPrologue{\section*{Index}\markboth{Index}{Index}\addcontentsline{toc}{section}{Index}}
+\newcommand{\lancienneclasse}{\cls{udes-genie-demt}\xspace}
+\newcommand{\laclassename}{udes-genie-these}
+\newcommand{\laclasse}{\cls{\laclassename}\xspace}
+\newcommand{\laclasseprefix}{\cls{udes-genie}\xspace}
+\newcommand{\laclassefile}{\file{udes-genie-these.cls}\xspace}
+\newcommand{\laclassetitre}{\textsf{\laclassename}\xspace}
+\newcommand{\babel}{\pkg{babel}\xspace}
+\newcommand{\latex}{\hologo{LaTeX}\xspace}
+\newcommand{\latexiii}{\hologo{LaTeX3}\xspace}
+\newcommand{\pdflatex}{\hologo{pdfLaTeX}\xspace}
+\newcommand{\lualatex}{\hologo{LuaLaTeX}\xspace}
+\newcommand{\xelatex}{\hologo{XeLaTeX}\xspace}
+\newcommand{\bibtex}{\hologo{BibTeX}\xspace}
+\newcommand{\fac}{Faculté de génie\xspace}
+\newcommand{\protocole}{protocole\xspace}
+\newcommand{\protocoleit}{\textit{protocole}\xspace}
+\newcommand{\protlgu}{\textit{Protocole de rédaction aux études supérieures} de la Faculté de génie de l'Université de Sherbrooke\xspace}
+\newcommand{\package}{\textit{package}\xspace}
+\newcommand{\packages}{\textit{packages}\xspace}
+\newcommand{\encodage}{UTF-8\xspace}
+\newcommand{\enchamp}{\textbf{Nom} & \textbf{Requis} & \textbf{\bibtex}}
+\newcommand{\non}{}
+\newcommand{\oui}{\ding{'63}}
+\newcommand{\bipm}{\textit{Bureau international des poids et mesures} (BIPM)\xspace} \newcommand{\siunitx}{\pkg{siunitx}\xspace}
+\newcommand{\windows}{\textsf{Windows}\xspace}
+\newcommand{\macos}{\textsf{MacOS}\xspace}
+\newcommand{\linux}{\textsf{Linux} (ou \textsf{UNIX})\xspace}
+\newcommand{\miktex}{\textsf{MiKTeX}\xspace}
+\newcommand{\texlive}{\textsf{TeX Live}\xspace}
+\newcommand{\tlmgr}{\textsf{TeX Live Manager}\xspace}
+\newcommand{\ctan}{\textsf{CTAN}\xspace}
+
+\addto\captionsfrench
+{
+ \renewcommand{\glossaryname}{Historique~des~changements}
+ \renewcommand{\contentsname}{Table~des~matières}
+ \renewcommand{\bibname}{Liste~des~références}
+}
+
+\begin{document}
+ \DisableImplementation
+ \DocInput{udes-genie-these.dtx}
+ \clearpage
+ \PrintChanges
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{17}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \changes{v1.0}{2017/01/18}{Première version}
+% \changes{v1.1}{2017/07/18}{Adaptation à la nouvelle version de babel (changements internes).}
+% \changes{v1.2}{2017/12/21}{Adaptation à la nouvelle version de \latexiii (changements internes).}
+% \changes{v2.0}{2018/09/26}{Adaptations pour respecter la nouvelle version du protocole de rédaction.}
+% \changes{v2.0.1}{2020/04/17}{(Aussi connue comme v2.0a) Correction de bugs. Changements internes. Changements à la documentation.}
+% \changes{v2.0.2}{2022/09/15}{Maintenance (LaTeX2e 2020-02-02 à 2022-06-01). Distribution sur CTAN. Adaptations à la documentation.}
+%
+% \GetFileInfo{udes-genie-these.dtx}
+%
+% \title{CLASSE DE DOCUMENT \latex POUR LA RÉDACTION AUX ÉTUDES SUPÉRIEURES À LA FACULTÉ DE GÉNIE DE L'UNIVERSITÉ DE SHERBROOKE\\{\large \laclassetitre, version 2.0.2}}
+% \author{Charles-Antoine Brunet}
+% \date{\today}
+% \maketitle
+%
+% \begin{abstract}
+% La classe de document \laclasse pour \latex gère la mise en page et l'ordonnancement des parties préliminaires et de la liste des références d'un document afin qu'il respecte le \protlgu. Ce document explique l'utilisation de \laclasse. Un exemple d'utilisation est aussi distribué avec la documentation de \laclasse.
+% \end{abstract}
+%
+% \clearpage\tableofcontents\clearpage
+%
+% \section{Introduction}\label{sec:intro}
+% La classe de document \laclasse pour \latex gère la mise en page et l'ordonnancement des parties préliminaires et de la liste des références d'un document afin qu'il respecte le \protlgu, ci-après appelé le \protocoleit. La dernière version du \protocole est disponible dans l'intranet de la Faculté de génie.
+%
+% Ce document détaille l'utilisation de \laclasse afin de faciliter son utilisation. Un exemple complet est distribué avec \laclasse. Le but de ce document n'est pas d'expliquer l'utilisation générale de \latex ou de \bibtex. Pour cela, il faut consulter d'autres ouvrages. D'ailleurs, ce document assume une connaissance préalable fonctionnelle de \latex et de \bibtex.
+%
+%\section{Installation et vérification}\label{sec:inst}
+% La classe \laclasse peut être installée comme tout autre \package \latex avec le gestionnaire de \packages de votre distribution, comme avec la console de \miktex ou le \tlmgr. Du même coup, il faut s'assurer d'avoir une version à jour de la distribution \latex, car \laclasse utilise des fonctionnalités qui sont relativement récentes. Si vous optez pour une installation manuelle, la classe \laclasse est disponible sur \ctan et s'installe en accord avec les procédures spécifiées dans la documentation de votre distribution \latex.
+%
+% Afin de vérifier que l'installation s'est bien passée, il vous est suggéré de compiler l'exemple distribué avec \laclasse. C'est le meilleur moyen de savoir si votre installation \latex a tout ce qu'il faut pour utiliser \laclasse. L'exemple se trouve dans le même répertoire que la documentation.
+%
+% L'exemple distribué avec \laclasse a été compilé avec succès sous \windows, \macos et \linux avec les distributions \miktex et \texlive. Si des erreurs surviennent avec l'exemple, c'est que l'installation de \laclasse n'a pas été faite correctement ou que l'installation de \latex qui est utilisée est incomplète ou désuète.
+%
+%\section{Contact et support technique}\label{sec:support}
+% Une personne est responsable du support de \laclasse. Vous pouvez contacter cette personne uniquement dans les situations suivantes:
+%\begin{itemize}
+% \item Si des non-conformités par rapport à la dernière version du \protocole sont identifiées et que la section~\ref{sec:conformite} ne donne pas d'indication à ce sujet.
+% \item S'il y a des incompatibilités avec d'autres \packages \latex et que \laclasse est la cause du problème.
+% \item Si vous avez une idée géniale afin d'améliorer \laclasse et qu'elle serait bénéfique pour les autres. Cela à condition que votre idée ne soit pas déjà réalisée par d'autres \packages \latex existants et à condition que votre idée ne soit pas une préférence personnelle.
+%\end{itemize}
+%
+% La personne responsable ne répondra que pour des questions concernant les types de situations mentionnées ci-haut. Ne la contactez donc pas pour des questions reliées à l'usage général de \latex ou de \bibtex, car vos questions resteront sans réponses. L'entête du fichier \laclassefile nomme une personne responsable avec un courriel afin de la contacter.
+%
+% \section{Conformité au protocole}\label{sec:conformite}
+% Les chances sont que vous utilisez plusieurs \packages \latex pour la rédaction de votre document. Soyez donc vigilant et assurez-vous qu'ils ne modifieront pas le comportement de \laclasse ou tout autre aspect couvert par le \protocole afin de remettre un document qui est conforme.
+%
+% La classe \laclasse est réputée être conforme à la dernière version du \protocole. Si vous apportez des modifications aux fichiers distribués, vous pourriez alors remettre un document qui n'est pas conforme. Si des divergences au \protocole autres que celles mentionnées dans cette section sont identifiées, vous pouvez contacter la personne responsable (voir la section~\ref{sec:support}) en mentionnant et en expliquant les divergences. Ainsi, les correctifs nécessaires seront apportés dans les versions futures et tous bénéficieront des améliorations.
+%
+% Bien que \laclasse automatise et gère la mise en forme d'un document et l'ordonnancement des pages préliminaires et de la liste des références, elle ne tente pas de reproduire les fonctionnalités de \packages existants afin de laisser un maximum de liberté pour la rédaction. Plus spécifiquement, les points suivants ne sont pas pris en charge.
+%
+% \subsection{Minuscules et majuscules} À cause de la quantité d'exceptions qui surviennent, tout ce qui est relatif aux exigences des minuscules et majuscules, comme pour les titres de chapitres et de sections, n'est pas géré automatiquement par \laclasse. Cela veut dire que l'auteure ou l'auteur d'un document doit s'assurer de bien respecter ce qui est demandé dans le \protocole au sujet des minuscules et des majuscules.
+%
+% \subsection{Légendes} La position des légendes des tableaux et des figures, telle qu'exigée par le \protocole, n'est pas gérée automatiquement. L'auteure ou l'auteur d'un document doit s'assurer de positionner correctement les légendes.
+%
+% \subsection{Sous-figures et sous-tableaux} La numérotation ainsi que la référence aux sous-figures et aux sous-tableaux ne sont pas gérées automatiquement par \laclasse, car plusieurs \packages \latex permettent aisément de satisfaire les exigences du \protocole à ce sujet. Le \package \pkg{subcaption} en est un exemple. L'auteure ou l'auteur d'un document doit s'assurer de bien respecter le \protocole à ce sujet.
+%
+% \subsection{Système international d'unités}
+% Le protocole requiert que le système international d'unités soit utilisé. L'écriture correcte des unités est l'un des endroits où il y a le plus d'erreurs dans un document, car les règles d'écritures des unités ne sont pas bien connues. Pourtant, elles sont fixées par le \bipm qui publie des documents à ce sujet. L'usage correct des unités n'est pas géré par \laclasse, mais plusieurs \packages \latex peuvent aider à la rédaction et le respect des normes de rédaction, dont \siunitx.
+%
+%\section{Utilisation}\label{sec:utilisation}%
+% Un document basé sur \laclasse est rédigé comme tout autre document \latex standard de type \cls{book}, car la classe \laclasse est basée sur cette classe ainsi que sur d'autres \packages standards de \latex. La classe de document \laclasse ne devrait pas interférer avec les \packages standards de \latex et toutes les macros habituelles de \latex sont accessibles et l'utilisation de tout \package \latex est permis. La classe \laclasse tente d'imposer le minimum afin de maximiser la liberté de la personne qui rédige.
+%
+% Ce qui suit explique l'utilisation de \laclasse et il peut être avantageux de suivre avec l'exemple qui est distribué avec \laclasse.
+%
+% \subsection{Encodage}\label{sec:encodage}
+% L'encodage des fichiers distribués est \encodage, autant pour l'exemple d'utilisation que pour \laclasse. Cet encodage est maintenant l'encodage par défaut de toutes les variantes de \latex pour les fichiers en entrée. En effet, depuis la version d'avril 2018, \latex et \pdflatex présument que l'encodage des fichiers en entrée est \encodage et il n'est donc plus nécessaire de le spécifier avec le \package \pkg{inputenc} dans le préambule. Normalement, si vous avez une distribution à jour, le \package \pkg{inputenc} est utilisé uniquement si l'encodage n'est pas \encodage, malgré que de le spécifier ne cause pas de torts. Par design, l'encodage \encodage est le seul admis par \lualatex et \xelatex et l'usage du \package \pkg{inputenc} n'a aucun effet. Bref, il est maintenant avantageux d'avoir tous les fichiers en entrée dans l'encodage \encodage.
+%
+% Les fontes utilisées ne sont pas imposées afin de donner la même liberté que les classes standards de \latex, comme \pkg{book} et \pkg{article}. L'encodage des fontes est fixé avec le \package \pkg{fontenc} dans le préambule du document, comme tout autre document \latex.
+%
+%\begin{implementation}
+%%-----------------------------------------------------------------------------
+%%--- DECLARATION DES VARIABLES -------------------------------------------
+%%-----------------------------------------------------------------------------
+\bool_new:N \g_@@_lignes_bool
+\bool_new:N \g_@@_listeDesFigures_bool
+\bool_new:N \g_@@_listeDesTableaux_bool
+
+\clist_new:N \g_@@_dedicace_cl
+\clist_new:N \g_@@_jury_codirecteurs_cl
+\clist_new:N \g_@@_jury_evaluateurs_cl
+\clist_new:N \g_@@_pas_jury_cl
+\clist_new:N \g_@@_remerciements_cl
+\clist_new:N \g_@@_specialite_cl
+
+\int_new:N \g_@@_pages_int
+\int_new:N \l_@@_tmp_int
+
+\seq_new:N \g_@@_jury_codirecteurs_mf_seq
+\seq_new:N \g_@@_jury_evaluateurs_mf_seq
+
+\tl_new:N \g_@@_acknowledgementsname_tl
+\tl_new:N \g_@@_adressname_tl
+\tl_new:N \g_@@_auteur_nom_tl
+\tl_new:N \g_@@_auteur_prenom_tl
+\tl_new:N \g_@@_date_annee_tl
+\tl_new:N \g_@@_date_mois_tl
+%<protocole>\tl_new:N \g_@@_date_cres_tl
+%<protocole>\tl_new:N \g_@@_date_cefg_tl
+\tl_new:N \g_@@_dedicace_tl
+\tl_new:N \g_@@_departement_tl
+\tl_new:N \g_@@_dprdoctorat_tl
+\tl_new:N \g_@@_dprmaitrise_tl
+\tl_new:N \g_@@_essai_tl
+\tl_new:N \g_@@_facultyname_tl
+\tl_new:N \g_@@_fichier_acronymes_tl
+\tl_new:N \g_@@_fichier_lexique_tl
+\tl_new:N \g_@@_fichier_remerciements_tl
+\tl_new:N \g_@@_fichier_resume_anglais_tl
+\tl_new:N \g_@@_fichier_resume_francais_tl
+\tl_new:N \g_@@_fichier_symboles_tl
+\tl_new:N \g_@@_fichiers_references_tl
+\tl_new:N \g_@@_format_tl
+\tl_new:N \g_@@_juryname_tl
+\tl_new:N \g_@@_jury_codirname_tl
+\tl_new:N \g_@@_jury_codirnamef_tl
+\tl_new:N \g_@@_jury_directeur_tl
+\tl_new:N \g_@@_jury_directeur_mf_tl
+\tl_new:N \g_@@_jury_dirname_tl
+\tl_new:N \g_@@_jury_dirnamef_tl
+\tl_new:N \g_@@_jury_evalname_tl
+\tl_new:N \g_@@_jury_evalnamef_tl
+\tl_new:N \g_@@_langue_tl
+\tl_new:N \g_@@_listacronymsname_tl
+\tl_new:N \g_@@_listsymbolsname_tl
+\tl_new:N \g_@@_memoire_tl
+\tl_new:N \g_@@_mots_cles_anglais_tl
+\tl_new:N \g_@@_mots_cles_francais_tl
+\tl_new:N \g_@@_motsclesname_tl
+\tl_new:N \g_@@_programme_tl
+\tl_new:N \g_@@_specialite_tl
+\tl_new:N \g_@@_specialityname_tl
+\tl_new:N \g_@@_these_tl
+\tl_new:N \g_@@_titre_anglais_tl
+\tl_new:N \g_@@_titre_francais_tl
+\tl_new:N \g_@@_type_tl
+\tl_new:N \g_@@_udesname_tl
+
+%%-----------------------------------------------------------------------------
+%%--- DECLARATION DES CONSTANTES ------------------------------------------
+%%-----------------------------------------------------------------------------
+\int_const:Nn \c_@@_max_pages_dprdoctorat_int {40}
+\int_const:Nn \c_@@_max_pages_dprmaitrise_int {30}
+\int_const:Nn \c_@@_max_pages_essai_int {70}
+\int_const:Nn \c_@@_max_pages_memoire_int {120}
+%<protocole>\int_const:Nn \c_@@_max_pages_protocole_int {10000}
+\int_const:Nn \c_@@_max_pages_these_int {250}
+
+\tl_const:Nn \c_@@_female_tl {f}
+\tl_const:Nn \c_@@_format_livre_tl {livre}
+\tl_const:Nn \c_@@_format_simple_tl {simple}
+\tl_const:Nn \c_@@_langue_english_tl {english}
+\tl_const:Nn \c_@@_langue_francais_tl {francais}
+\tl_const:Nn \c_@@_male_tl {m}
+\tl_const:Nn \c_@@_programme_aero_tl {aerospatial}
+\tl_const:Nn \c_@@_programme_chim_tl {chimique}
+\tl_const:Nn \c_@@_programme_civil_tl {civil}
+\tl_const:Nn \c_@@_programme_elec_tl {electrique}
+\tl_const:Nn \c_@@_programme_meca_tl {mecanique}
+%<protocole>\tl_const:Nn \c_@@_protocole_droits_tl {Tous~droits~réservés.\ Faculté~de~génie,~Université~de~Sherbrooke.}
+%<protocole>\tl_const:Nn \c_@@_protocole_notice_tl {Document~adopté~à~la~Faculté~de~génie~de~l'Université~de~Sherbrooke~par~le~Comité~de~la~recherche~et~des~études~supérieures~(\g_@@_date_cres_tl)~et~le~Comité~des~études~de~la~faculté~de~génie~(\g_@@_date_cefg_tl).}
+\tl_const:Nn \c_@@_type_dprdoctorat_tl {dprdoctorat}
+\tl_const:Nn \c_@@_type_dprmaitrise_tl {dprmaitrise}
+\tl_const:Nn \c_@@_type_essai_tl {essai}
+\tl_const:Nn \c_@@_type_memoire_tl {memoire}
+%<protocole>\tl_const:Nn \c_@@_type_protocole_tl {protocole}
+\tl_const:Nn \c_@@_type_these_tl {these}
+
+%%-----------------------------------------------------------------------------
+%%--- INITIALISATION DE VARIABLES -----------------------------------------
+%%-----------------------------------------------------------------------------
+%% Identifie les types de documents avec dedicace (optionnelle)
+\clist_gput_right:Nx \g_@@_dedicace_cl
+ {\c_@@_type_essai_tl, \c_@@_type_memoire_tl, \c_@@_type_these_tl}
+%% Identifie les types de documents sans jury
+\clist_gput_right:Nx \g_@@_pas_jury_cl
+ {\c_@@_type_essai_tl}
+%% Identifie les types de documents avec remerciements (optionnels)
+\clist_gput_right:Nx \g_@@_remerciements_cl
+ {\c_@@_type_essai_tl, \c_@@_type_memoire_tl, \c_@@_type_these_tl}
+%% Identifie les types de documents avec specialite
+\clist_gput_right:Nx \g_@@_specialite_cl
+ {\c_@@_type_memoire_tl, \c_@@_type_these_tl}
+
+%\end{implementation}
+%
+% \subsection{Options}
+% Pour utiliser \laclasse, il faut spécifier son utilisation avec la macro \cs{documentclass} de \latex. La classe \laclasse a deux options qui permettent de spécifier le style du document, tel que spécifié par le \protocole. Le style choisi est spécifié dans le paramètre optionnel de \cs{documentclass}.
+%
+%\begin{variable}{livre,simple}
+%\begin{syntax}
+% |\documentclass| \oarg{style} \{\laclassename\}
+%\end{syntax}
+% La valeur de \meta{style} est |livre| ou |simple|. Si le paramètre est absent, le style |livre| est utilisé par défaut.
+%\end{variable}
+%
+%\begin{implementation}
+%%-----------------------------------------------------------------------------
+%%--- OPTIONS DE CLASSE ---------------------------------------------------
+%%-----------------------------------------------------------------------------
+\DeclareKeys {
+ livre.code:n = {
+ \PassOptionsToClass{twoside,openright}{book}
+ \PassOptionsToPackage{twoside=true}{geometry}
+ \tl_gset_eq:NN \g_@@_format_tl \c_@@_format_livre_tl
+ },
+ livre.usage:n = load,
+ simple.code:n = {
+ \PassOptionsToClass{oneside,openany}{book}
+ \PassOptionsToPackage{twoside=false}{geometry}
+ \tl_gset_eq:NN \g_@@_format_tl \c_@@_format_simple_tl
+ },
+ simple.usage:n = load,
+ unknown.code:n = {\PassOptionsToClass{\CurrentOption}{book}},
+}
+
+\SetKeys{livre}
+
+\IfFormatAtLeastTF {2022-06-01}
+{
+ \ProcessKeyOptions
+}
+{
+ \RequirePackage {l3keys2e}
+ \ProcessKeysOptions
+}
+
+%%-----------------------------------------------------------------------------
+%%--- DEPENDANCES DE CLASSE -----------------------------------------------
+%%-----------------------------------------------------------------------------
+\LoadClass[letterpaper,12pt]{book}
+
+\RequirePackage[english,french]{babel}
+\RequirePackage{caption,fancyhdr,flafter,geometry,parskip,setspace}
+
+%%-----------------------------------------------------------------------------
+%%--- MACROS DE DOCUMENT (USAGER) --------------------------------------
+%%-----------------------------------------------------------------------------
+%\end{implementation}
+%
+% \subsection{Configuration du document}\label{sec:config}
+% Le \protocole a des exigences au niveau de l'ordonnancement de certaines parties ou de certains éléments de présentation. Certaines de ces exigences sont gérées automatiquement en utilisant la macro de configuration du document, la macro |\ConfigurationDocument|. Cette macro est utilisée dans le préambule du document. Un exemple de configuration avec la description de chacun des champs suit. Vous devez évidemment adapter le contenu des champs de la configuration du document pour refléter vos besoins et les noms de vos fichiers. Il est à remarquer que chaque ligne qui spécifie un champ se termine par une virgule.
+%
+%\begin{function}{\ConfigurationDocument}
+%\begin{syntax}
+%\begin{verbatim}
+% \ConfigurationDocument
+% {
+% langue = francais,
+% type = memoire,
+% programme = electrique,
+% lignes,
+% liste-figures,
+% liste-tableaux,
+% fichier-resume-francais = {resumef},
+% fichier-resume-anglais = {resumea},
+% fichier-remerciements = {merci},
+% fichier-lexique = {lexique},
+% fichier-symboles = {symboles},
+% fichier-acronymes = {acronymes},
+% fichiers-references = {journaux,conferences},
+% }
+%\end{verbatim}
+%\end{syntax}
+%\end{function}
+%
+%\begin{variable}{langue}
+%\begin{syntax}
+% |langue =| \meta{valeur}
+%\end{syntax}
+% Ce champ spécifie la langue principale utilisée dans le document. Les choix pour \meta{valeur} sont |francais| et |english|. Il n'y a pas de valeur par défaut, ce champ doit être spécifié.
+%\end{variable}
+%
+%\begin{variable}{type}
+%\begin{syntax}
+% |type =| \meta{valeur}
+%\end{syntax}
+% Ce champ spécifie le type document, comme une thèse de doctorat. Les choix pour \meta{valeur} sont |dprmaitrise|, |dprdoctorat|, |essai|, |memoire| et |these|. Il n'y a pas de valeur par défaut, ce champ doit être spécifié.
+%\end{variable}
+%
+%\begin{variable}{programme}
+%\begin{syntax}
+% |programme =| \meta{valeur}
+%\end{syntax}
+% Ce champ spécifie le programme d'étude. Les choix pour \meta{valeur} sont |electrique|, |mecanique|, |aerospatial|, |chimique| et |civil|. Il n'y a pas de valeur par défaut, ce champ doit être spécifié.
+%\end{variable}
+%
+%\begin{variable}{lignes}
+%\begin{syntax}
+% |lignes =| \meta{valeur}
+%\end{syntax}
+% Ce champ spécifie si des lignes sont présentes dans l'entête et le pied de page du document. Les choix pour \meta{valeur} sont |true| et |false|. Si ce champ est omis, la valeur par défaut est |true|. Il est possible aussi de spécifier uniquement |lignes| pour spécifier |true|, comme dans l'exemple au début de la section.
+%\end{variable}
+%
+%\begin{variable}{liste-figures,liste-tableaux}
+%\begin{syntax}
+% |liste-figures =| \meta{valeur}
+% |liste-tableaux =| \meta{valeur}
+%\end{syntax}
+% Ces champs spécifient respectivement si une liste des figures et une liste des tableaux doivent être générées. Les choix pour \meta{valeur} sont |true| et |false|. Si le champ est omis, la valeur par défaut est |true|. Il est possible aussi de spécifier uniquement |liste-figures| ou |liste-tableaux| pour spécifier |true|, comme dans l'exemple au début de la section.
+%\end{variable}
+%
+%\begin{variable}{fichier-resume-francais,fichier-resume-anglais}
+%\begin{syntax}
+% |fichier-resume-francais =| \marg{valeur}
+% |fichier-resume-anglais =| \marg{valeur}
+%\end{syntax}
+% Ces champs spécifient respectivement le nom du fichier contenant le résumé français et le résumé anglais. \meta{valeur} est un nom de fichier et l'extension |.tex| est assumé. Si, tout en respectant le \protocole, un de ces résumés n'a pas à être fourni, le champ correspondant peut être omis.
+%\end{variable}
+%
+%\begin{variable}{fichier-remerciements,fichier-lexique,fichier-symboles,fichier-acronymes}
+%\begin{syntax}
+% |fichier-remerciements =| \marg{valeur}
+% |fichier-lexique =| \marg{valeur}
+% |fichier-symboles =| \marg{valeur}
+% |fichier-acronymes =| \marg{valeur}
+%\end{syntax}
+% Ces champs spécifient respectivement le nom du fichier contenant les remerciements, le lexique, la liste des symboles et la liste des acronymes. \meta{valeur} est un nom de fichier et l'extension |.tex| est assumé. Si, tout en respectant le \protocole, une de ces parties préliminaires n'est pas donnée, le champ correspondant peut être omis.
+%\end{variable}
+%
+%\begin{variable}{fichiers-references}
+%\begin{syntax}
+% |fichiers-references =| \marg{valeur}
+%\end{syntax}
+% Ce champ spécifie les fichiers de bibliographie \bibtex à être inclus pour la construction de la liste des références par \bibtex ou un autre utilitaire équivalent. \meta{valeur} est une liste de noms de fichiers et l'extension |.bib| est assumé pour chacun. Chaque nom de fichier est séparé par une virgule. Ce champ ne doit pas contenir d'espaces superflus. D'autres détails au sujet des références bibliographiques sont donnés dans la section~\ref{sec:bibtex}.
+%\end{variable}
+%
+%\begin{implementation}
+\DeclareDocumentCommand \ConfigurationDocument { m }
+{ \keys_set:nn { udes-genie-these } { #1 } }
+
+\keys_define:nn {udes-genie-these}
+{
+ langue .choices:nn = {francais,english}
+ {\tl_gset_eq:NN \g_@@_langue_tl \l_keys_choice_tl},
+ langue .value_required:n = true,
+%<these> type .choices:nn = {dprmaitrise,dprdoctorat,essai,memoire,these}
+%<protocole> type .choices:nn = {protocole}
+ {\tl_gset_eq:NN \g_@@_type_tl \l_keys_choice_tl},
+ type .value_required:n = true,
+ programme .choices:nn = {electrique,mecanique,aerospatial,chimique,civil}
+ {\tl_gset_eq:NN \g_@@_programme_tl \l_keys_choice_tl},
+ programme .value_required:n = true,
+ liste-figures .bool_gset:N = \g_@@_listeDesFigures_bool,
+ liste-figures .default:n = true,
+ liste-tableaux .bool_gset:N = \g_@@_listeDesTableaux_bool,
+ liste-tableaux .default:n = true,
+ lignes .bool_gset:N = \g_@@_lignes_bool,
+ lignes .default:n = true,
+ fichier-resume-francais .tl_gset:N = \g_@@_fichier_resume_francais_tl,
+ fichier-resume-francais .value_required:n = true,
+ fichier-resume-anglais .tl_gset:N = \g_@@_fichier_resume_anglais_tl,
+ fichier-resume-anglais .value_required:n = true,
+ fichier-remerciements .tl_gset:N = \g_@@_fichier_remerciements_tl,
+ fichier-remerciements .value_required:n = true,
+ fichier-lexique .tl_gset:N = \g_@@_fichier_lexique_tl,
+ fichier-lexique .value_required:n = true,
+ fichier-symboles .tl_gset:N = \g_@@_fichier_symboles_tl,
+ fichier-symboles .value_required:n = true,
+ fichier-acronymes .tl_gset:N = \g_@@_fichier_acronymes_tl,
+ fichier-acronymes .value_required:n = true,
+ fichiers-references .tl_gset:N = \g_@@_fichiers_references_tl,
+ fichiers-references .value_required:n = true,
+}
+
+%\end{implementation}
+%
+% \subsection{Informations générales}\label{sec:macros}
+% Les macros suivantes sont utilisées dans le préambule du document.
+%
+%\begin{function}{\Auteur}
+%\begin{syntax}
+% |\Auteur| \marg{prénom} \marg{nom}
+%\end{syntax}
+% L'auteure ou l'auteur du document sur la page titre est spécifié avec cette macro. La macro a deux paramètres qui spécifient le prénom et le nom de l'auteure ou l'auteur.
+%\end{function}
+%
+%\begin{implementation}
+\DeclareDocumentCommand \Auteur {mm}
+{
+ \tl_gset:Nn \g_@@_auteur_prenom_tl {#1}
+ \tl_gset:Nn \g_@@_auteur_nom_tl {#2}
+}
+
+%\end{implementation}
+%
+%\begin{function}{\Date}
+%\begin{syntax}
+% |\Date| \marg{mois} \marg{année}
+%\end{syntax}
+% La date sur la page titre est spécifiée avec cette macro. La macro a deux paramètres qui spécifient le mois et l'année.
+%\end{function}
+%
+%\begin{implementation}
+\DeclareDocumentCommand \Date {mm}
+{
+ \tl_gset:Nn \g_@@_date_mois_tl {#1}
+ \tl_gset:Nn \g_@@_date_annee_tl {#2}
+}
+
+%\end{implementation}
+%
+%\begin{function}{\Dedicace}
+%\begin{syntax}
+% |\Dedicace| \marg{texte}
+%\end{syntax}
+% Le texte de la dédicace est spécifié avec cette macro. La macro a un seul paramètre et il permet de spécifier le texte de la dédicace, typiquement une phrase courte.
+%\end{function}
+%
+%\begin{implementation}
+\DeclareDocumentCommand \Dedicace {+m}
+{ \tl_gset:Nn \g_@@_dedicace_tl {#1} }
+
+%\end{implementation}
+%
+%\begin{function}{\Directeur,\Directrice}
+%\begin{syntax}
+% |\Directeur| \marg{prénom} \marg{nom}
+% |\Directrice| \marg{prénom} \marg{nom}
+%\end{syntax}
+% La directrice principale ou le directeur principal de recherche est spécifié avec cette macro. Ces macros ont deux paramètres qui spécifient le prénom et le nom de la directrice ou du directeur.
+%\end{function}
+%
+%\begin{implementation}
+\DeclareDocumentCommand \Directeur {mm}
+{
+ \tl_gset:Nn \g_@@_jury_directeur_tl {#1\ #2}
+ \tl_gset_eq:NN \g_@@_jury_directeur_mf_tl \c_@@_male_tl
+}
+
+\DeclareDocumentCommand \Directrice {mm}
+{
+ \tl_gset:Nn \g_@@_jury_directeur_tl {#1\ #2}
+ \tl_gset_eq:NN \g_@@_jury_directeur_mf_tl \c_@@_female_tl
+}
+
+%\end{implementation}
+%
+%\begin{function}{\Codirecteur,\Codirectrice}
+%\begin{syntax}
+% |\Codirecteur| \marg{prénom} \marg{nom}
+% |\Codirectrice| \marg{prénom} \marg{nom}
+%\end{syntax}
+% Les codirectrices et les codirecteurs de recherche sont spécifiés avec ces macros. Ces macros ont deux paramètres qui spécifient le prénom et le nom de la codirectrice ou du codirecteur. Afin d'ajouter à la liste toutes les codirectrices et tous les codirecteurs, il faut utiliser ces macros autant de fois qu'il y a de codirectrices et de codirecteurs.
+%\end{function}
+%
+%\begin{implementation}
+\DeclareDocumentCommand \Codirecteur {mm}
+{
+ \clist_gput_right:Nn \g_@@_jury_codirecteurs_cl {#1\ #2}
+ \seq_gput_right:NV \g_@@_jury_codirecteurs_mf_seq \c_@@_male_tl
+}
+
+\DeclareDocumentCommand \Codirectrice {mm}
+{
+ \clist_gput_right:Nn \g_@@_jury_codirecteurs_cl {#1\ #2}
+ \seq_gput_right:NV \g_@@_jury_codirecteurs_mf_seq \c_@@_female_tl
+}
+
+%\end{implementation}
+%
+%\begin{function}{\Evaluateur,\Evaluatrice}
+%\begin{syntax}
+% |\Evaluateur| \marg{prénom} \marg{nom}
+% |\Evaluatrice| \marg{prénom} \marg{nom}
+%\end{syntax}
+% Les évaluatrices et les évaluateurs du jury sont spécifiés avec ces macros. Ces macros ont deux paramètres qui spécifient le prénom et le nom d'une évaluatrice ou d'un évaluateur. Afin d'ajouter à la liste toutes les évaluatrices et tous les évaluateurs, il faut utiliser ces macros autant de fois qu'il y a d'évaluatrices et d'évaluateurs.
+%\end{function}
+%
+%\begin{implementation}
+\DeclareDocumentCommand \Evaluateur {mm}
+{
+ \clist_gput_right:Nn \g_@@_jury_evaluateurs_cl {#1\ #2}
+ \seq_gput_right:NV \g_@@_jury_evaluateurs_mf_seq \c_@@_male_tl
+}
+
+\DeclareDocumentCommand \Evaluatrice {mm}
+{
+ \clist_gput_right:Nn \g_@@_jury_evaluateurs_cl {#1\ #2}
+ \seq_gput_right:NV \g_@@_jury_evaluateurs_mf_seq \c_@@_female_tl
+}
+
+%\end{implementation}
+%
+%\begin{function}{\MotsClesAnglais,\MotsClesFrancais}
+%\begin{syntax}
+% |\MotsClesAnglais| \marg{keywords}
+% |\MotsClesFrancais| \marg{mots-clés}
+%\end{syntax}
+% Les mot-clés des résumés anglais et français sont spécifiés avec ces macros. Ces macros ont un seul paramètre et il spécifie la liste des mots-clés. Si, tout en respectant le \protocole des mots-clés dans une langue ne sont pas requis, alors l'usage de la macro correspondante peut être omis.
+%\end{function}
+%
+%\begin{implementation}
+\DeclareDocumentCommand \MotsClesAnglais {m}
+{ \tl_gset:Nn \g_@@_mots_cles_anglais_tl {#1} }
+
+\DeclareDocumentCommand \MotsClesFrancais {m}
+{ \tl_gset:Nn \g_@@_mots_cles_francais_tl {#1} }
+
+%\end{implementation}
+%
+%\begin{function}{\TitreAnglais,\TitreFrancais}
+%\begin{syntax}
+% |\TitreAnglais| \marg{title}
+% |\TitreFrancais| \marg{titre}
+%\end{syntax}
+% Les titres anglais et français du document sont spécifiés avec ces macros. Ces macros ont un seul paramètre qui spécifie le texte du titre. Si, tout en respectant le \protocole le titre dans une langue n'est pas requis, alors l'usage de la macro correspondante peut être omis.
+%\end{function}
+%
+%\begin{implementation}
+\DeclareDocumentCommand \TitreAnglais {+m}
+{ \tl_gset:Nn \g_@@_titre_anglais_tl {#1} }
+
+\DeclareDocumentCommand \TitreFrancais {+m}
+{ \tl_gset:Nn \g_@@_titre_francais_tl {#1} }
+
+%\end{implementation}
+%
+%\subsection{Document multilingue}\label{sec:multi}
+%
+% Certains documents sont écrits avec des parties en français et d'autres en anglais. C'est souvent le cas avec un mémoire ou une thèse par articles où, par exemple, les articles insérés sont écrits en anglais alors que le reste du document est écrit en français.
+%
+% La gestion du passage d'une langue à une autre dans les parties principales est laissée à la personne qui rédige le document. Cependant, la classe \laclasse est basée, entre autres, sur le \package \babel qui permet de gérer des documents multilingues. Pour plus de détail sur le passage d'une langue à une autre dans un document, la lecture de la documentation de \babel est suggérée. Avec un bon usage des macros de \babel, la typographie sera ajustée en accord avec la langue de ces différentes parties du document.
+%
+%\subsection{Références bibliographiques et \bibtex}\label{sec:bibtex}
+% L'utilisation de \bibtex, ou autre utilitaire semblable, avec \laclasse se fait de la même manière que tout autre document \latex. Le style bibliographique est spécifié dans le document avec la commande |\bibliographystyle|, comme il est usuel de le faire. Il est important de noter que le style bibliographique choisi doit respecter les exigences du \protocole. Les fichiers de bibliographie (fichiers |.bib|) sont spécifiés avec le champ |fichiers-references| de la configuration du document, comme mentionné dans la section~\ref{sec:config}. Ils ne sont pas spécifiés avec la commande |\bibliography|, comme cela est fait habituellement, car le placement de la liste des références dans le document est géré par \laclasse.
+%
+%\begin{implementation}
+%<*protocole>
+\DeclareDocumentCommand \DateCRES {m}
+{ \tl_gset:Nn \g_@@_date_cres_tl {#1} }
+
+\DeclareDocumentCommand \DateCEFG {m}
+{ \tl_gset:Nn \g_@@_date_cefg_tl {#1} }
+
+%</protocole>
+%%-----------------------------------------------------------------------------
+%%--- MISE EN PAGE --------------------------------------------------------
+%%-----------------------------------------------------------------------------
+\setlength{\parskip}{1.5ex plus0.25ex minus0ex}
+\setlength{\parindent}{0em}
+\clubpenalty=10000
+\widowpenalty=10000
+\geometry{letterpaper,hmargin={2.5cm,2.5cm},vmargin={2.5cm,2.5cm},
+ foot=1.25cm,head=0.9cm,headsep=0.35cm,bindingoffset=0.5cm}
+\captionsetup[table]{labelsep=quad,textformat=simple,font=normal,margin=5ex,position=top,skip=0.5ex}
+\captionsetup[figure]{labelsep=quad,textformat=simple,font=normal,margin=5ex,position=bottom,skip=1ex}
+\frenchbsetup{ItemLabels=\textendash}
+
+%%-----------------------------------------------------------------------------
+%%--- REDEFINITION MACROS STANDARDS ------------------------------------
+%%-----------------------------------------------------------------------------
+\renewcommand*{\appendix}
+{
+ \par\singlespacing
+ \setcounter{chapter}{0}
+ \setcounter{section}{0}
+ \renewcommand*{\chaptername}{\appendixname}
+ \renewcommand*{\thechapter}{\Alph{chapter}}
+ \int_gset:Nn \g_@@_pages_int {\value{page}}
+}
+
+\renewcommand*{\subsubsection}{\@startsection{subsubsection}{3}{0pt}
+ {-0.3ex plus-0.03ex minus0ex}{0.15ex plus 0.015ex minus0ex}{\normalfont\normalsize\sffamily\bfseries}}
+
+\renewcommand*{\subsection}{\@startsection{subsection}{2}{0pt}
+ {-0.6ex plus-0.06ex minus0ex}{0.3ex plus0.03ex minus0ex}{\normalfont\large\sffamily\bfseries}}
+
+\renewcommand*{\section}{\@startsection{section}{1}{0pt}
+ {-1.2ex plus-0.12ex minus0ex}{0.6ex plus0.06ex minus0ex}{\normalfont\Large\sffamily\bfseries}}
+
+\renewcommand*{\chapter}
+{
+ \if@openright\cleardoublepage\else\clearpage\fi
+ \thispagestyle{chapitre}
+ \global\@topnum\z@
+ \@afterindentfalse
+ \secdef\@@_chapter\@@_schapter
+}
+
+\addto\captionsfrench
+{
+ \tl_gset:Nn \contentsname {TABLE~DES~MATIÈRES}
+ \tl_gset:Nn \listfigurename {LISTE~DES~FIGURES}
+ \tl_gset:Nn \listtablename {LISTE~DES~TABLEAUX}
+ \tl_gset:Nn \chaptername {CHAPITRE}
+ \tl_gset:Nn \bibname {LISTE~DES~RÉFÉRENCES}
+ \tl_gset:Nn \appendixname {ANNEXE}
+ \tl_gset:Nn \partname {PARTIE}
+ \tl_gset:Nn \figurename {Figure}
+ \tl_gset:Nn \tablename {Tableau}
+ \tl_gset:Nn \glossaryname {LEXIQUE}
+ \tl_gset:Nn \indexname {INDEX}
+ \tl_gset:Nn \abstractname {RÉSUMÉ}
+ \tl_gset:Nn \refname {LISTE~DES~RÉFÉRENCES}
+ \tl_gset:Nn \prefacename {PRÉFACE}
+ \tl_gset:Nn \CaptionSeparator {~~}
+ \tl_gset:Nn \g_@@_listsymbolsname_tl {LISTE~DES~SYMBOLES}
+ \tl_gset:Nn \g_@@_listacronymsname_tl {LISTE~DES~ACRONYMES}
+ \tl_gset:Nn \g_@@_acknowledgementsname_tl {REMERCIEMENTS}
+ \tl_gset:Nn \g_@@_udesname_tl {UNIVERSITÉ~DE~SHERBROOKE}
+ \tl_gset:Nn \g_@@_facultyname_tl {Faculté~de~génie}
+ \tl_gset:Nn \g_@@_specialityname_tl {Spécialité~:~}
+ \tl_gset:Nn \g_@@_juryname_tl {MEMBRES~DU~JURY}
+ \tl_gset:Nn \g_@@_adressname_tl {Sherbrooke~(Québec)~Canada}
+ \tl_gset:Nn \g_@@_motsclesname_tl {Mots-clés~:}
+ \tl_gset:Nn \g_@@_jury_codirname_tl {Codirecteur}
+ \tl_gset:Nn \g_@@_jury_codirnamef_tl {Codirectrice}
+ \tl_gset:Nn \g_@@_jury_dirname_tl {Directeur}
+ \tl_gset:Nn \g_@@_jury_dirnamef_tl {Directrice}
+ \tl_gset:Nn \g_@@_jury_evalname_tl {Évaluateur}
+ \tl_gset:Nn \g_@@_jury_evalnamef_tl {Évaluatrice}
+}
+
+\addto\captionsenglish
+{
+ \tl_gset:Nn \contentsname {TABLE~OF~CONTENTS}
+ \tl_gset:Nn \listfigurename {LIST~OF~FIGURES}
+ \tl_gset:Nn \listtablename {LIST~OF~TABLES}
+ \tl_gset:Nn \chaptername {CHAPTER}
+ \tl_gset:Nn \bibname {LIST~OF~REFERENCES}
+ \tl_gset:Nn \appendixname {APPENDIX}
+ \tl_gset:Nn \partname {PART}
+ \tl_gset:Nn \figurename {Figure}
+ \tl_gset:Nn \tablename {Table}
+ \tl_gset:Nn \glossaryname {GLOSSARY}
+ \tl_gset:Nn \indexname {INDEX}
+ \tl_gset:Nn \abstractname {ABSTRACT}~
+ \tl_gset:Nn \refname {REFERENCES}
+ \tl_gset:Nn \prefacename {PREFACE}
+ \tl_gset:Nn \CaptionSeparator {~~}
+ \tl_gset:Nn \g_@@_listsymbolsname_tl {LIST~OF~SYMBOLS}
+ \tl_gset:Nn \g_@@_listacronymsname_tl {LIST~OF~ACRONYMS}
+ \tl_gset:Nn \g_@@_acknowledgementsname_tl {ACKNOWLEDGEMENTS}
+ \tl_gset:Nn \g_@@_udesname_tl {UNIVERSITÉ~DE~SHERBROOKE}
+ \tl_gset:Nn \g_@@_facultyname_tl {Faculté~de~génie}
+ \tl_gset:Nn \g_@@_specialityname_tl {Specialité:~}
+ \tl_gset:Nn \g_@@_juryname_tl {JURY~MEMBERS}
+ \tl_gset:Nn \g_@@_adressname_tl {Sherbrooke~(Québec)~Canada}
+ \tl_gset:Nn \g_@@_motsclesname_tl {Keywords:}
+ \tl_gset:Nn \g_@@_jury_codirname_tl {Co-supervisor}
+ \tl_gset:Nn \g_@@_jury_codirnamef_tl {Co-supervisor}
+ \tl_gset:Nn \g_@@_jury_dirname_tl {Supervisor}
+ \tl_gset:Nn \g_@@_jury_dirnamef_tl {Supervisor} %Directress
+ \tl_gset:Nn \g_@@_jury_evalname_tl {Examiner} %Internal et external
+ \tl_gset:Nn \g_@@_jury_evalnamef_tl {Examiner} %Internal et external
+}
+
+%%-----------------------------------------------------------------------------
+%%--- MESSAGES D'ERREURS --------------------------------------------------
+%%-----------------------------------------------------------------------------
+\msg_new:nnnn {udesgeniethese}{auteur_nom_vide}{Le~nom~de~l'auteur~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~macro~\Auteur~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{auteur_prenom_vide}{Le~prenom~de~l'auteur~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~macro~\Auteur~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{config_fichier_vide}{Le~fichier~pour~#1~n'est~pas~specifie.~Specifiez-le~avec~la~cle~'#2'~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{config_fichiers_vides}{Les~fichiers~pour~#1~ne~sont~pas~specifies.~Specifiez-les~avec~la~cle~'#2'~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{config_langue_vide}{La~langue~principale~du~document~n'est~pas~specifiee.~Specifiez-la~avec~la~cle~'langue'~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{config_programme_vide}{Le~programme~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~cle~'programme'~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{config_type_vide}{Le~type~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~cle~'type'~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{date_annee_vide}{L'annee~de~la~date~du~document~n'est~pas~specifiee.~Specifiez-la~avec~la~macro~\Date~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{date_mois_vide}{Le~mois~de~la~date~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~macro~\Date~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{dprdoctorat_max_pages}{La~DPR~de~doctorat~semble~longue.~Le~protocole~suggere~de~25~a~40~pages.}{Consultez~le~protocole~de~redaction.}
+
+\msg_new:nnnn {udesgeniethese}{dprmaitrise_max_pages}{La~DPR~de~maitrise~semble~longue.~Le~protocole~suggere~de~20~a~30~pages.}{Consultez~le~protocole~de~redaction.}
+
+\msg_new:nnnn {udesgeniethese}{essai_max_pages}{L'essai~semble~long.~Le~protocole~exige~un~maximum~de~70~pages.}{Consultez~le~protocole~de~redaction.}
+
+\msg_new:nnnn {udesgeniethese}{memoire_max_pages}{Le~memoire~semble~long.~Le~protocole~exige~un~maximum~de~120~pages.}{Consultez~le~protocole~de~redaction.}
+
+\msg_new:nnnn {udesgeniethese}{mots_cles_anglais_vide}{Les~mots-cles~anglais~ne~sont~pas~specifies.~Specifiez-les~avec~la~macro~\MotsClesAnglais~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{mots_cles_francais_vide}{Les~mots-cles~francais~ne~sont~pas~specifies.~Specifiez-les~avec~la~macro~\MotsClesFrancais~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{remerciements_longs}{Les~remerciements~doivent~etre~d'une~page~maximum.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{resume_anglais_long}{Le~resume~anglais~doit~etre~d'une~page~maximum,~incluant~les~mots-cles.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{titre_resume_mots_cles_anglais}{Le~titre,~le~resume~et~les~mots-cles~anglais~doivent~etre~donnes.~On~ne~peut~donner~l'un~sans~les~autres.}{Consultez~la~documentation.}
+
+\msg_new:nnnn {udesgeniethese}{resume_francais_long}{Le~resume~francais~doit~etre~d'une~page~maximum,~incluant~les~mots-cles.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{these_max_pages}{La~these~semble~longue.~Le~protocole~exige~un~maximum~de~250~pages}{Consultez~le~protocole~de~redaction.}
+
+\msg_new:nnnn {udesgeniethese}{titre_anglais_vide}{Le~titre~anglais~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~macro~\TitreAnglais~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{titre_francais_vide}{Le~titre~francais~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~macro~\TitreFrancais~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{aerospatial}{Le~type~du~document~doit~etre~essai~si~le~programme~est~aerospatial.~Specifiez-le~~bon~type~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}
+
+%%-----------------------------------------------------------------------------
+%%--- MACROS INTERNES --------------------------------------------------
+%%-----------------------------------------------------------------------------
+\fancypagestyle{chapitre}
+{\fancyhf{} \cfoot{\thepage} \renewcommand{\headrulewidth}{0pt}}
+
+\newcommand*{\@@_chapter}[2][default]
+{
+ \ifnum \c@secnumdepth >\m@ne
+ \if@mainmatter
+ \refstepcounter{chapter}
+ \typeout{\chaptername\space\thechapter.}
+ \addcontentsline{toc}{chapter}{\protect\numberline{\thechapter}#1}
+ \else
+ \addcontentsline{toc}{chapter}{\protect\numberline#1}
+ \fi
+ \else
+ \addcontentsline{toc}{chapter}{\protect\numberline#1}
+ \fi
+ \chaptermark{#1}
+ \addtocontents{lof}{\protect\addvspace{10\p@}}
+ \addtocontents{lot}{\protect\addvspace{10\p@}}
+ \if@twocolumn
+ \@topnewpage[\@@_makechapterhead{#2}]
+ \else
+ \@@_makechapterhead{#2}
+ \@afterheading
+ \fi
+}
+
+\newcommand*{\@@_makechapterhead}[1]
+{
+ {
+ \parindent \z@ \normalfont % \raggedright
+ \ifnum \c@secnumdepth >\m@ne
+ \if@mainmatter
+ \LARGE\sffamily\bfseries \chaptername\space \thechapter
+ \par\nobreak
+ \vskip 0\p@
+ \fi
+ \fi
+ \interlinepenalty\@M
+ \LARGE\sffamily\bfseries #1 \par\nobreak
+ \vskip 30\p@
+ }
+}
+
+\newcommand*{\@@_schapter}[1]
+{
+ \if@twocolumn
+ \@topnewpage[\@@_makeschapterhead{#1}]
+ \else
+ \@@_makeschapterhead{#1}
+ \@afterheading
+ \fi
+}
+
+\newcommand*{\@@_makeschapterhead}[1]
+{
+ {
+ \parindent \z@ \normalfont %\raggedright
+ \vskip 0\p@
+ \interlinepenalty\@M
+ \LARGE\sffamily\bfseries #1 \par\nobreak
+ \vskip 30\p@
+ }
+}
+
+\cs_new:Npn \@@_validation
+{
+ \tl_if_blank:VT \g_@@_fichier_resume_francais_tl
+ { \tl_gclear:N \g_@@_fichier_resume_francais_tl }
+
+ \tl_if_blank:VT \g_@@_fichier_resume_anglais_tl
+ { \tl_gclear:N \g_@@_fichier_resume_anglais_tl }
+
+ \tl_if_blank:VT \g_@@_fichier_remerciements_tl
+ { \tl_gclear:N \g_@@_fichier_remerciements_tl }
+
+ \tl_if_blank:VT \g_@@_fichier_lexique_tl
+ { \tl_gclear:N \g_@@_fichier_lexique_tl }
+
+ \tl_if_blank:VT \g_@@_fichier_symboles_tl
+ { \tl_gclear:N \g_@@_fichier_symboles_tl }
+
+ \tl_if_blank:VT \g_@@_fichier_acronymes_tl
+ { \tl_gclear:N \g_@@_fichier_acronymes_tl }
+
+ \tl_if_blank:VT \g_@@_fichiers_references_tl
+ { \tl_gclear:N \g_@@_fichiers_references_tl }
+
+ \tl_if_blank:VT \g_@@_titre_francais_tl
+ { \tl_gclear:N \g_@@_titre_francais_tl }
+
+ \tl_if_blank:VT \g_@@_titre_anglais_tl
+ { \tl_gclear:N \g_@@_titre_anglais_tl }
+
+ \tl_if_blank:VT \g_@@_auteur_nom_tl
+ { \tl_gclear:N \g_@@_auteur_nom_tl }
+
+ \tl_if_blank:VT \g_@@_auteur_prenom_tl
+ { \tl_gclear:N \g_@@_auteur_prenom_tl }
+
+ \tl_if_blank:VT \g_@@_date_mois_tl
+ { \tl_gclear:N \g_@@_date_mois_tl }
+
+ \tl_if_blank:VT \g_@@_date_annee_tl
+ { \tl_gclear:N \g_@@_date_annee_tl }
+
+ \tl_if_blank:VT \g_@@_jury_directeur_tl
+ { \tl_gclear:N \g_@@_jury_directeur_tl }
+
+ \tl_if_blank:VT \g_@@_dedicace_tl
+ { \tl_gclear:N \g_@@_dedicace_tl }
+
+ \tl_if_blank:VT \g_@@_mots_cles_francais_tl
+ { \tl_gclear:N \g_@@_mots_cles_francais_tl }
+
+ \tl_if_blank:VT \g_@@_mots_cles_anglais_tl
+ { \tl_gclear:N \g_@@_mots_cles_anglais_tl }
+
+ \tl_if_empty:NT \g_@@_langue_tl
+ { \msg_error:nn {udesgeniethese}{config_langue_vide} }
+
+ \tl_if_empty:NT \g_@@_type_tl
+ { \msg_error:nn {udesgeniethese}{config_type_vide}{type} }
+
+%<these> \tl_if_empty:NT \g_@@_programme_tl
+%<these> { \msg_error:nn {udesgeniethese}{config_programme_vide}{type} }
+%<these>
+ \tl_if_empty:NT \g_@@_fichiers_references_tl
+ { \msg_error:nnnn {udesgeniethese}{config_fichiers_vides}{la~bibliographie}{fichiersReferences} }
+
+ \tl_if_empty:NT \g_@@_auteur_nom_tl
+ { \msg_error:nn {udesgeniethese}{auteur_nom_vide} }
+
+ \tl_if_empty:NT \g_@@_auteur_prenom_tl
+ { \msg_error:nn {udesgeniethese}{auteur_prenom_vide} }
+
+ \tl_if_empty:NT \g_@@_date_annee_tl
+ { \msg_error:nn {udesgeniethese}{date_annee_vide} }
+
+ \tl_if_empty:NT \g_@@_date_mois_tl
+ { \msg_error:nn {udesgeniethese}{date_mois_vide} }
+
+ \tl_case:Nn \g_@@_langue_tl
+ {
+ \c_@@_langue_francais_tl
+ {
+ \tl_if_empty:NT \g_@@_titre_francais_tl
+ { \msg_error:nn {udesgeniethese}{titre_francais_vide} }
+%<*these>
+ \tl_if_empty:NT \g_@@_mots_cles_francais_tl
+ { \msg_error:nn {udesgeniethese}{mots_cles_francais_vide} }
+
+ \tl_if_empty:NT \g_@@_fichier_resume_francais_tl
+ { \msg_error:nnnn {udesgeniethese}{config_fichier_vide}{le~resume~francais}{fichierResumeFrancais} }
+
+ \int_zero:N \l_tmpa_int
+ \tl_if_empty:NF \g_@@_titre_anglais_tl
+ { \int_incr:N \l_tmpa_int }
+ \tl_if_empty:NF \g_@@_fichier_resume_anglais_tl
+ { \int_incr:N \l_tmpa_int }
+ \tl_if_empty:NF \g_@@_mots_cles_anglais_tl
+ { \int_incr:N \l_tmpa_int }
+ \int_case:nnF { \l_tmpa_int }
+ { {0}{}{3}{} }
+ {
+ \msg_error:nn {udesgeniethese}{titre_resume_mots_cles_anglais}
+ \tl_gclear:N \g_@@_fichier_resume_anglais_tl % resume pas genere
+ }
+ }
+ \c_@@_langue_english_tl
+ {
+ \tl_if_empty:NT \g_@@_titre_francais_tl
+ { \msg_error:nn {udesgeniethese}{titre_francais_vide} }
+ \tl_if_empty:NT \g_@@_mots_cles_francais_tl
+ { \msg_error:nn {udesgeniethese}{mots_cles_francais_vide} }
+ \tl_if_empty:NT \g_@@_fichier_resume_francais_tl
+ { \msg_error:nnnn {udesgeniethese}{config_fichier_vide}{le~resume~francais}{fichierResumeFrancais} }
+ \tl_if_empty:NT \g_@@_titre_anglais_tl
+ { \msg_error:nn {udesgeniethese}{titre_anglais_vide} }
+ \tl_if_empty:NT \g_@@_mots_cles_anglais_tl
+ { \msg_error:nn {udesgeniethese}{mots_cles_anglais_vide} }
+ \tl_if_empty:NT \g_@@_fichier_resume_anglais_tl
+ { \msg_error:nnnn {udesgeniethese}{config_fichier_vide}{le~resume~anglais}{fichierResumeAnglais} }
+%</these>
+ }
+ }
+}
+
+\cs_new:Npn \@@_setup_electrique
+{
+ \tl_gset:Nn \g_@@_departement_tl
+ {Département~de~génie~électrique~et~de~génie~informatique}
+ \tl_gset:Nn \g_@@_specialite_tl
+ {génie~électrique}
+ \tl_gset:Nn \g_@@_essai_tl
+ {GEI~808~Essai}
+ \tl_gset:Nn \g_@@_dprmaitrise_tl
+ {GEI~727~Définition~du~projet~de~recherche}
+ \tl_gset:Nn \g_@@_dprdoctorat_tl
+ {SCA~772~Définition~du~projet~de~recherche~au~doctorat}
+ \tl_gset:Nn \g_@@_memoire_tl
+ {Mémoire~de~maitrise}
+ \tl_gset:Nn \g_@@_these_tl
+ {Thèse~de~doctorat}
+}
+
+\cs_new:Npn \@@_setup_mecanique
+{
+ \tl_gset:Nn \g_@@_departement_tl
+ {Département~de~génie~mécanique}
+ \tl_gset:Nn \g_@@_specialite_tl
+ {génie~mécanique}
+ \tl_gset:Nn \g_@@_essai_tl
+ {GMC~808~Essai}
+ \tl_gset:Nn \g_@@_dprmaitrise_tl
+ {GMC~727~Définition~du~projet~de~recherche}
+ \tl_gset:Nn \g_@@_dprdoctorat_tl
+ {SCA~772~Définition~du~projet~de~recherche~au~doctorat}
+ \tl_gset:Nn \g_@@_memoire_tl
+ {Mémoire~de~maitrise}
+ \tl_gset:Nn \g_@@_these_tl
+ {Thèse~de~doctorat}
+}
+
+\cs_new:Npn \@@_setup_aerospatial
+{
+ \@@_setup_mecanique
+ \tl_gset:Nn \g_@@_essai_tl
+ {GMC~809~Projet~en~génie~aérospatial}
+
+ \tl_if_eq:NNF \g_@@_type_tl \c_@@_type_essai_tl
+ {\msg_error:nn {udesgeniethese}{aerospatial}}
+}
+
+\cs_new:Npn \@@_setup_chimique
+{
+ \tl_gset:Nn \g_@@_departement_tl
+ {Département~de~génie~chimique~et~de~génie~biotechnologique}
+ \tl_gset:Nn \g_@@_specialite_tl
+ {génie~chimique}
+ \tl_gset:Nn \g_@@_essai_tl
+ {GCH~808~Essai}
+ \tl_gset:Nn \g_@@_dprmaitrise_tl
+ {GCH~727~Définition~du~projet~de~recherche}
+ \tl_gset:Nn \g_@@_dprdoctorat_tl
+ {SCA~772~Définition~du~projet~de~recherche~au~doctorat}
+ \tl_gset:Nn \g_@@_memoire_tl
+ {Mémoire~de~maitrise}
+ \tl_gset:Nn \g_@@_these_tl
+ {Thèse~de~doctorat}
+}
+
+\cs_new:Npn \@@_setup_civil
+{
+ \tl_gset:Nn \g_@@_departement_tl
+ {Département~de~génie~civil}
+ \tl_gset:Nn \g_@@_specialite_tl
+ {génie~civil}
+ \tl_gset:Nn \g_@@_essai_tl
+ {GCI~808~Projet~d'intégration:~essai}
+ \tl_gset:Nn \g_@@_dprmaitrise_tl
+ {GCI~727~Définition~du~projet~de~recherche}
+ \tl_gset:Nn \g_@@_dprdoctorat_tl
+ {SCA~772~Définition~du~projet~de~recherche~au~doctorat}
+ \tl_gset:Nn \g_@@_memoire_tl
+ {Mémoire~de~maitrise}
+ \tl_gset:Nn \g_@@_these_tl
+ {Thèse~de~doctorat}
+}
+
+\cs_new:Npn \@@_setup
+{
+ \tl_case:Nn \g_@@_langue_tl
+ {
+ \c_@@_langue_francais_tl {
+ \selectlanguage{french}
+ }
+ \c_@@_langue_english_tl {
+ \selectlanguage{english}
+ }
+ }
+
+ \bool_if:NTF \g_@@_lignes_bool
+ {
+ \renewcommand{\headrulewidth}{0.4pt}
+ \renewcommand{\footrulewidth}{0.4pt}
+ }
+ {
+ \renewcommand{\headrulewidth}{0pt}
+ \renewcommand{\footrulewidth}{0pt}
+ }
+
+ \tl_case:Nn \g_@@_format_tl
+ {
+ \c_@@_format_livre_tl
+ {
+ \pagestyle{fancy}
+ \fancyhf{}
+ \fancyhead[RO,LE]{\thepage}
+ \fancyhead[LO]{\rightmark}
+ \fancyhead[RE]{\leftmark}
+ }
+ \c_@@_format_simple_tl
+ {
+ \pagestyle{fancy}
+ \fancyhf{}
+ \cfoot{\thepage}
+ }
+ }
+
+%<these>
+%<these> \use:c {_@@_setup_ \g_@@_programme_tl}
+}
+
+\cs_new:Npn \@@_generer_page_titre
+{
+ {
+ \begin{titlepage}
+ \renewcommand*{\thepage}{T1}
+ \vspace*{-0.5 in}
+ \begin{center}
+ \begin{tabular}{c}
+ \Large \g_@@_udesname_tl \\
+%<protocole> \Large\g_@@_facultyname_tl
+%<these> \Large\g_@@_facultyname_tl\\
+%<these> \Large\g_@@_departement_tl\\[0.5ex]
+ \end{tabular}
+ \vfill
+ \tl_case:Nn \g_@@_langue_tl
+ {
+ \c_@@_langue_francais_tl {
+ {\huge\g_@@_titre_francais_tl\par}
+ }
+ \c_@@_langue_english_tl {
+ \begin{otherlanguage}{french}
+ {\huge\g_@@_titre_francais_tl}
+ \end{otherlanguage}\par
+ {\Large\g_@@_titre_anglais_tl\par}
+ }
+ }
+ \vfill
+%<these> \begin{tabular}{c}
+%<these> \Large \use:c {g_@@_ \g_@@_type_tl _tl}
+%<these> \clist_if_in:NVT \g_@@_specialite_cl \g_@@_type_tl
+%<these> {
+%<these> \\[0.5ex]\Large\g_@@_specialityname_tl\g_@@_specialite_tl
+%<these> }
+%<these> \end{tabular}
+%<these> \vfill
+ \begin{tabular}{c}
+ {\Large\g_@@_auteur_prenom_tl\ \g_@@_auteur_nom_tl}
+ \end{tabular}
+ \vfill
+ {\Large \g_@@_adressname_tl \par \vspace{2ex}\g_@@_date_mois_tl\ \g_@@_date_annee_tl}
+ \end{center}
+ \end{titlepage}
+ \clearpage
+%<protocole> \thispagestyle{empty}
+%<protocole> \renewcommand*{\thepage}{T2}
+%<protocole> \null\vfill
+%<protocole> \c_@@_protocole_notice_tl\par
+%<protocole> \textcopyright\g_@@_date_annee_tl\ \c_@@_protocole_droits_tl
+%<protocole> \cleardoublepage
+%<these> \clearpage
+%<these> \if@openright\null\thispagestyle{empty}\renewcommand*{\thepage}{T2}\cleardoublepage\fi
+ }
+}
+
+\cs_new:Npn \@@_generer_jury
+{
+ {
+ {\centering\chapter*{\g_@@_juryname_tl}}
+
+ \begin{center}
+ \vspace{4ex}
+ \begin{tabular}{p{3in}}
+ \hfill\large\g_@@_jury_directeur_tl\hfill\null \\ \hline
+ \centering\small
+ \tl_case:Nn \g_@@_jury_directeur_mf_tl
+ {
+ \c_@@_male_tl {\g_@@_jury_dirname_tl}
+ \c_@@_female_tl {\g_@@_jury_dirnamef_tl}
+ }
+ \end{tabular}\par
+
+ \tl_if_empty:NF \g_@@_jury_codirecteurs_cl
+ { \vspace{6ex} }
+
+ \clist_map_inline:Nn \g_@@_jury_codirecteurs_cl
+ {
+ \begin{tabular}{p{3in}}
+ \hfill\large ##1 \hfill\null \\ \hline
+ \seq_gpop_left:NN \g_@@_jury_codirecteurs_mf_seq \l_tmpa_tl
+ \centering\small
+ \tl_case:Nn \l_tmpa_tl
+ {
+ \c_@@_male_tl {\g_@@_jury_codirname_tl}
+ \c_@@_female_tl {\g_@@_jury_codirnamef_tl}
+ }
+ \end{tabular}\par
+ }
+
+ \tl_if_empty:NF \g_@@_jury_evaluateurs_cl
+ { \vspace{6ex} }
+
+ \clist_map_inline:Nn \g_@@_jury_evaluateurs_cl
+ {
+ \begin{tabular}{p{3in}}
+ \hfill\large ##1 \hfill\null \\ \hline
+ \seq_gpop_left:NN \g_@@_jury_evaluateurs_mf_seq \l_tmpa_tl
+ \centering\small
+ \tl_case:Nn \l_tmpa_tl
+ {
+ \c_@@_male_tl {\g_@@_jury_evalname_tl}
+ \c_@@_female_tl {\g_@@_jury_evalnamef_tl}
+ }
+ \end{tabular}\par
+ }
+ \end{center}
+
+ \thispagestyle{empty}\clearpage
+ \if@openright\null\thispagestyle{empty}\cleardoublepage\fi
+ }
+}
+
+\cs_new:Npn \@@_generer_dedicace
+{
+ \tl_if_empty:NF \g_@@_dedicace_tl
+ {
+ {\null\vfill\flushright
+ \begin{minipage}{0.5\linewidth}
+ \setlength{\parskip}{1.5ex}\setlength{\parindent}{0em}
+ \g_@@_dedicace_tl
+ \end{minipage}
+ \vfill\vfill
+ \thispagestyle{empty}\clearpage
+ \if@openright\null\thispagestyle{empty}\cleardoublepage\fi}
+ }
+}
+
+\cs_new:Npn \@@_generer_resume_francais
+{
+ \begin{otherlanguage}{french}
+ \chapter*{\abstractname}
+ \int_set:Nn \l_@@_tmp_int {\value{page}}
+ \input{\g_@@_fichier_resume_francais_tl}\par
+ \textbf{\g_@@_motsclesname_tl}~\g_@@_mots_cles_francais_tl \par
+ \thispagestyle{empty}\clearpage
+ \int_sub:Nn \l_@@_tmp_int {\value{page}}
+ \int_compare:nNnT {\l_@@_tmp_int} < {-1}
+ { \msg_error:nn {udesgeniethese}{resume_francais_long} }
+ \ifodd\value{page}\else\if@openright\null\thispagestyle{empty}\cleardoublepage\fi\fi
+ \end{otherlanguage}
+}
+
+\cs_new:Npn \@@_generer_resume_anglais
+{
+ \begin{otherlanguage}{english}
+ \chapter*{\abstractname}
+ \int_set:Nn \l_@@_tmp_int {\value{page}}
+
+ \tl_if_eq:NNT \g_@@_langue_tl \c_@@_langue_francais_tl
+ {{\bfseries\g_@@_titre_anglais_tl}\par}
+
+ \input{\g_@@_fichier_resume_anglais_tl}\par
+ \textbf{\g_@@_motsclesname_tl}~\g_@@_mots_cles_anglais_tl \par
+ \thispagestyle{empty}\clearpage
+ \int_sub:Nn \l_@@_tmp_int {\value{page}}
+ \int_compare:nNnT {\l_@@_tmp_int} < {-1}
+ {
+ \msg_error:nn {udesgeniethese}{resume_anglais_long}
+ }
+ \ifodd\value{page}\else\if@openright\null\thispagestyle{empty}\cleardoublepage\fi\fi
+ \end{otherlanguage}
+}
+
+\cs_new:Npn \@@_generer_remerciements
+{
+ \tl_if_empty:NF \g_@@_fichier_remerciements_tl
+ {
+ \chapter*{\g_@@_acknowledgementsname_tl}
+ \int_set:Nn \l_@@_tmp_int {\value{page}}
+ \input{\g_@@_fichier_remerciements_tl}
+ \thispagestyle{empty}\clearpage
+ \int_sub:Nn \l_@@_tmp_int {\value{page}}
+ \int_compare:nNnT {\l_@@_tmp_int} < {-1}
+ {
+ \msg_error:nn {udesgeniethese}{remerciements_longs}
+ }
+ \ifodd\value{page}\else\if@openright\null\thispagestyle{empty}\cleardoublepage\fi\fi
+ }
+}
+
+\cs_new:Npn \@@_generer_pages_preliminaires
+{
+ \setcounter{page}{1}
+%<*these>
+ \clist_if_in:NVF \g_@@_pas_jury_cl \g_@@_type_tl
+ { \@@_generer_jury }
+
+ \@@_generer_resume_francais
+ \tl_case:Nn \g_@@_langue_tl
+ {
+ \c_@@_langue_francais_tl {
+ \tl_if_blank:VF \g_@@_fichier_resume_anglais_tl
+ { \@@_generer_resume_anglais }
+ }
+ \c_@@_langue_english_tl {
+ \@@_generer_resume_anglais
+ }
+ }
+
+ \clist_if_in:NVT \g_@@_dedicace_cl \g_@@_type_tl
+ { \@@_generer_dedicace }
+
+ \clist_if_in:NVT \g_@@_remerciements_cl \g_@@_type_tl
+ { \@@_generer_remerciements }
+%</these>
+
+ \tableofcontents
+ \if@openright\cleardoublepage\else\clearpage\fi
+
+ \bool_if:NT \g_@@_listeDesFigures_bool
+ {
+ \listoffigures
+ \if@openright\cleardoublepage\else\clearpage\fi
+ }
+
+ \bool_if:NT \g_@@_listeDesTableaux_bool
+ {
+ \listoftables
+ \if@openright\cleardoublepage\else\clearpage\fi
+ }
+%<*these>
+
+ \tl_if_empty:NF \g_@@_fichier_lexique_tl
+ {
+ \chapter*{\glossaryname}
+ \markboth{\glossaryname}{\glossaryname}
+ \input{\g_@@_fichier_lexique_tl}
+ \if@openright\cleardoublepage\else\clearpage\fi
+ }
+
+ \tl_if_empty:NF \g_@@_fichier_symboles_tl
+ {
+ \chapter*{\g_@@_listsymbolsname_tl}
+ \markboth{\g_@@_listsymbolsname_tl}{\g_@@_listsymbolsname_tl}
+ \input{\g_@@_fichier_symboles_tl}
+ \if@openright\cleardoublepage\else\clearpage\fi
+ }
+
+ \tl_if_empty:NF \g_@@_fichier_acronymes_tl
+ {
+ \chapter*{\g_@@_listacronymsname_tl}
+ \markboth{\g_@@_listacronymsname_tl}{\g_@@_listacronymsname_tl}
+ \input{\g_@@_fichier_acronymes_tl}
+ \if@openright\cleardoublepage\else\clearpage\fi
+ }
+%</these>
+}
+
+\cs_new:Npn \@@_generer_liste_references
+{
+ \refstepcounter{chapter}
+ \addcontentsline{toc}{chapter}{\bibname}
+ \bibliography{\g_@@_fichiers_references_tl}
+ \if@openright\cleardoublepage\else\clearpage\fi
+}
+
+%%-----------------------------------------------------------------------------
+%%--- GESTION AUTOMATISEE -------------------------------------------------
+%%-----------------------------------------------------------------------------
+\AfterEndPreamble{
+ \@@_validation
+ \@@_setup
+ \frontmatter
+ \singlespacing
+ \@@_generer_page_titre
+ \@@_generer_pages_preliminaires
+ \mainmatter
+ \onehalfspacing
+}
+
+\AtEndDocument{
+ % Si pas eu d'annexes avec \appendix
+ \int_compare:nNnT {\g_@@_pages_int} = {0}
+ { \int_gset:Nn \g_@@_pages_int {\value{page}} }
+
+ \int_compare:nNnT {\g_@@_pages_int} > {\use:c {c_@@_max_pages_ \g_@@_type_tl _int}}
+ { \msg_error:nn {udesgeniethese}{\g_@@_type_tl _max_pages} }
+
+ \backmatter
+ \singlespacing
+ \@@_generer_liste_references
+}
+%\end{implementation}
+% \Finale
+\endinput
diff --git a/macros/latex/contrib/udes-genie-these/udes-genie-these.ins b/macros/latex/contrib/udes-genie-these/udes-genie-these.ins
new file mode 100644
index 0000000000..985c4e5698
--- /dev/null
+++ b/macros/latex/contrib/udes-genie-these/udes-genie-these.ins
@@ -0,0 +1,61 @@
+%% udes-genie-these.dtx
+%% Copyright 2022 Charles-Antoine Brunet
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Charles-Antoine Brunet.
+%%
+%% This work consists of the files udes-genie-these.dtx and udes-genie-these.ins
+%% and the derived file udes-genie-these.cls.
+
+\input docstrip.tex
+
+\keepsilent
+
+\preamble
+
+Copyright 2022 Charles-Antoine Brunet
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Charles-Antoine Brunet and
+ can be contacted at Charles-Antoine.Brunet@USherbrooke.ca
+
+This work consists of the files udes-genie-these.dtx and udes-genie-these.ins
+and the derived files udes-genie-these.cls and udes-genie-protocole.cls.
+
+\endpreamble
+
+\postamble
+\endpostamble
+
+\askforoverwritefalse
+\generate{\file{udes-genie-these.cls}{\from{udes-genie-these.dtx}{these}}}
+
+\obeyspaces
+\Msg{************************************************************}
+\Msg{*}
+\Msg{* Pour completer l'installation, il faut mettre}
+\Msg{* les fichiers suivants dans un endroit qui sera}
+\Msg{* trouve par TeX:}
+\Msg{* \space\space udes-genie-these.cls}
+\Msg{*}
+\Msg{************************************************************}
+
+\endbatchfile \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/udes-genie-these.pdf b/macros/latex/contrib/udes-genie-these/udes-genie-these.pdf
new file mode 100644
index 0000000000..ecd7d6287d
--- /dev/null
+++ b/macros/latex/contrib/udes-genie-these/udes-genie-these.pdf
Binary files differ