summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CTAN.sites2
-rw-r--r--FILES.byname469
-rw-r--r--FILES.byname.gzbin2186992 -> 2187216 bytes
-rw-r--r--FILES.last07days232
-rw-r--r--dviware/dvisvgm/ChangeLog46
-rw-r--r--dviware/dvisvgm/NEWS9
-rwxr-xr-xdviware/dvisvgm/configure20
-rw-r--r--dviware/dvisvgm/configure.ac2
-rw-r--r--dviware/dvisvgm/doc/Makefile.am6
-rw-r--r--dviware/dvisvgm/doc/Makefile.in6
-rw-r--r--dviware/dvisvgm/doc/conf-dblatex-pdf.xsl7
-rw-r--r--dviware/dvisvgm/doc/dvisvgm.125
-rw-r--r--dviware/dvisvgm/doc/dvisvgm.txt.in13
-rw-r--r--dviware/dvisvgm/doc/generate-dvisvgm-sty.xsl1
-rw-r--r--dviware/dvisvgm/doc/tweak-dblatex-tex.py18
-rw-r--r--dviware/dvisvgm/src/Calculator.cpp1
-rw-r--r--dviware/dvisvgm/src/DvisvgmSpecialHandler.cpp33
-rw-r--r--dviware/dvisvgm/src/Matrix.cpp2
-rw-r--r--dviware/dvisvgm/src/NumericRanges.hpp9
-rw-r--r--dviware/dvisvgm/src/PageRanges.cpp1
-rw-r--r--dviware/dvisvgm/src/PageRanges.hpp5
-rw-r--r--dviware/dvisvgm/tests/CalculatorTest.cpp22
-rw-r--r--dviware/dvisvgm/tests/DvisvgmSpecialTest.cpp27
-rw-r--r--info/expose-expl3-dunkerque-2019/LISEZMOI.md40
-rw-r--r--info/expose-expl3-dunkerque-2019/Makefile134
-rw-r--r--info/expose-expl3-dunkerque-2019/README.md45
-rw-r--r--info/expose-expl3-dunkerque-2019/bibliographie/dun19expl3.bib56
-rw-r--r--info/expose-expl3-dunkerque-2019/codes/erato-def.tex103
-rw-r--r--info/expose-expl3-dunkerque-2019/codes/henel-def.tex66
-rw-r--r--info/expose-expl3-dunkerque-2019/codes/kaprekar-def.tex81
-rw-r--r--info/expose-expl3-dunkerque-2019/codes/knuth-def.tex20
-rw-r--r--info/expose-expl3-dunkerque-2019/dk19ecrireprem.tex400
-rw-r--r--info/expose-expl3-dunkerque-2019/dk19eratosthene.tex234
-rw-r--r--info/expose-expl3-dunkerque-2019/dk19intro.tex25
-rw-r--r--info/expose-expl3-dunkerque-2019/dk19kaprekar.tex244
-rw-r--r--info/expose-expl3-dunkerque-2019/dun19expl3.pdfbin0 -> 309536 bytes
-rw-r--r--info/expose-expl3-dunkerque-2019/dun19expl3.tex152
-rw-r--r--info/expose-expl3-dunkerque-2019/extensions/dun19codepres.sty321
-rw-r--r--info/expose-expl3-dunkerque-2019/glosaires/erato-supp-glo.tex75
-rw-r--r--info/expose-expl3-dunkerque-2019/glosaires/kaprekar-sup-glo.tex229
-rw-r--r--info/expose-expl3-dunkerque-2019/glosaires/les-macros.tex511
-rw-r--r--info/expose-expl3-dunkerque-2019/glosaires/termes-techniques.tex73
-rw-r--r--info/expose-expl3-dunkerque-2019/latexmkrc12
-rw-r--r--info/ptex-manual/LICENSE2
-rw-r--r--info/ptex-manual/README.md2
-rw-r--r--info/ptex-manual/eptexdoc.pdfbin380603 -> 347556 bytes
-rw-r--r--info/ptex-manual/eptexdoc.tex115
-rw-r--r--info/ptex-manual/fam256p.tex90
-rw-r--r--info/ptex-manual/jfm.pdfbin157050 -> 164504 bytes
-rw-r--r--info/ptex-manual/jfm.tex257
-rw-r--r--info/ptex-manual/ptex-guide-en.pdfbin99191 -> 98937 bytes
-rw-r--r--info/ptex-manual/ptex-guide-en.tex28
-rw-r--r--info/ptex-manual/ptex-manual.pdfbin381432 -> 329490 bytes
-rw-r--r--info/ptex-manual/ptex-manual.tex212
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-juradiss/Changes32
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-juradiss/README122
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biblatex-juradiss.pdfbin197504 -> 0 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biblatex-juradiss.tex711
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-juradiss/doc/biblatex-juradiss.pdfbin0 -> 109845 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-juradiss/doc/biblatex-juradiss.tex910
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-juradiss/latex/biber.conf (renamed from macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biber.conf)4
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-juradiss/latex/biblatex-juradiss.bbx (renamed from macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biblatex-juradiss.bbx)133
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-juradiss/latex/biblatex-juradiss.cbx (renamed from macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biblatex-juradiss.cbx)162
-rw-r--r--macros/latex/contrib/glosmathtools/sample_glosmathtools.pdfbin322662 -> 377849 bytes
-rw-r--r--macros/latex/contrib/media9/ChangeLog5
-rw-r--r--macros/latex/contrib/media9/doc/media9.pdfbin3735211 -> 3727329 bytes
-rw-r--r--macros/latex/contrib/media9/media9.sty4
-rw-r--r--macros/latex/contrib/media9/pdfbase.sty37
-rw-r--r--macros/latex/contrib/tasks/README4
-rw-r--r--macros/latex/contrib/tasks/tasks-manual.pdfbin0 -> 465232 bytes
-rw-r--r--macros/latex/contrib/tasks/tasks-manual.tex (renamed from macros/latex/contrib/tasks/tasks_en.tex)145
-rw-r--r--macros/latex/contrib/tasks/tasks.cfg2
-rw-r--r--macros/latex/contrib/tasks/tasks.sty102
-rw-r--r--macros/latex/contrib/tasks/tasks_en.pdfbin448228 -> 0 bytes
-rw-r--r--obsolete/graphics/pstricks/contrib/palette/README (renamed from obsolete/graphics/pstricks/contrib/README)0
-rw-r--r--obsolete/graphics/pstricks/contrib/palette/palette.sty (renamed from obsolete/graphics/pstricks/contrib/palette.sty)0
-rw-r--r--obsolete/graphics/pstricks/contrib/palette/palette.tex (renamed from obsolete/graphics/pstricks/contrib/palette.tex)0
-rw-r--r--obsolete/graphics/pstricks/contrib/pst-vue3d/Changes (renamed from graphics/pstricks/contrib/pst-vue3d/Changes)0
-rw-r--r--obsolete/graphics/pstricks/contrib/pst-vue3d/Makefile (renamed from graphics/pstricks/contrib/pst-vue3d/Makefile)0
-rw-r--r--obsolete/graphics/pstricks/contrib/pst-vue3d/README (renamed from graphics/pstricks/contrib/pst-vue3d/README)0
-rw-r--r--obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.bib (renamed from graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.bib)0
-rw-r--r--obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.pdf (renamed from graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.pdf)bin4588365 -> 4588365 bytes
-rw-r--r--obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.tex (renamed from graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.tex)0
-rw-r--r--obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.pro (renamed from graphics/pstricks/contrib/pst-vue3d/pst-vue3d.pro)0
-rw-r--r--obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.sty (renamed from graphics/pstricks/contrib/pst-vue3d/pst-vue3d.sty)0
-rw-r--r--obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.tex (renamed from graphics/pstricks/contrib/pst-vue3d/pst-vue3d.tex)0
-rw-r--r--support/latexindent/LatexIndent/AlignmentAtAmpersand.pm1401
-rw-r--r--support/latexindent/LatexIndent/Document.pm2
-rw-r--r--support/latexindent/LatexIndent/GetYamlSettings.pm4
-rw-r--r--support/latexindent/LatexIndent/LogFile.pm8
-rw-r--r--support/latexindent/LatexIndent/Sentence.pm11
-rw-r--r--support/latexindent/LatexIndent/Version.pm4
-rw-r--r--support/latexindent/README2
-rw-r--r--support/latexindent/defaultSettings.yaml8
-rw-r--r--support/latexindent/documentation/latexindent.pdfbin858722 -> 873258 bytes
-rw-r--r--support/latexindent/documentation/latexindent.tex54
-rw-r--r--support/latexindent/documentation/sec-conclusions-know-limitations.tex2
-rw-r--r--support/latexindent/documentation/sec-default-user-local.tex327
-rw-r--r--support/latexindent/documentation/sec-fine-tuning.tex74
-rw-r--r--support/latexindent/documentation/sec-how-to-use.tex17
-rw-r--r--support/latexindent/documentation/sec-introduction.tex8
-rw-r--r--support/latexindent/documentation/sec-replacements.tex79
-rw-r--r--support/latexindent/documentation/sec-the-m-switch.tex189
-rw-r--r--support/latexindent/documentation/subsubsec-no-add-remaining-code-blocks.tex6
-rw-r--r--support/latexindent/documentation/title.tex2
-rwxr-xr-xsupport/latexindent/latexindent.pl2
-rw-r--r--systems/win32/w32tex/ChangeLog14
-rw-r--r--timestamp2
108 files changed, 6850 insertions, 2222 deletions
diff --git a/CTAN.sites b/CTAN.sites
index 36bed6f5ed..82dc867b32 100644
--- a/CTAN.sites
+++ b/CTAN.sites
@@ -553,6 +553,8 @@ by country):
ctan.dcc.uchile.cl (Chile)
URL: ftp://ctan.dcc.uchile.cl/pub/lang/ctan/tex-archive/
+ URL: http://ctan.dcc.uchile.cl
+ URL: https://ctan.dcc.uchile.cl
diff --git a/FILES.byname b/FILES.byname
index dbd3120e18..367fefb4e4 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -3474,26 +3474,27 @@
1990/10/02 | 159 | dviware/dvisun/makefile
1990/10/02 | 280 | dviware/dvisun/README
2019/06/09 | 55720 | dviware/dvisun.zip
-2020/03/13 | 56818 | dviware/dvisvgm/aclocal.m4
+2020/03/21 | 56818 | dviware/dvisvgm/aclocal.m4
2019/03/09 | 5827 | dviware/dvisvgm/ar-lib
2018/09/08 | 576 | dviware/dvisvgm/AUTHORS
-2020/03/13 | 402661 | dviware/dvisvgm/ChangeLog
+2020/03/21 | 403941 | dviware/dvisvgm/ChangeLog
2019/03/09 | 7383 | dviware/dvisvgm/compile
2019/03/09 | 44166 | dviware/dvisvgm/config.guess
-2020/03/13 | 4369 | dviware/dvisvgm/config.h.in
+2020/03/21 | 4369 | dviware/dvisvgm/config.h.in
2019/03/09 | 36408 | dviware/dvisvgm/config.sub
-2020/03/13 | 682138 | dviware/dvisvgm/configure
-2020/03/13 | 8407 | dviware/dvisvgm/configure.ac
+2020/03/21 | 682158 | dviware/dvisvgm/configure
+2020/03/21 | 8409 | dviware/dvisvgm/configure.ac
2016/09/03 | 35147 | dviware/dvisvgm/COPYING
2019/03/09 | 23568 | dviware/dvisvgm/depcomp
2020/03/02 | 718 | dviware/dvisvgm/doc/conf-dblatex-man.xsl
-2020/03/02 | 2578 | dviware/dvisvgm/doc/conf-dblatex-pdf.xsl
-2020/03/13 | 66263 | dviware/dvisvgm/doc/dvisvgm.1
-2020/03/13 | 59872 | dviware/dvisvgm/doc/dvisvgm.txt.in
-2020/03/13 | 804 | dviware/dvisvgm/doc/generate-dvisvgm-sty.xsl
-2020/03/13 | 3527 | dviware/dvisvgm/doc/Makefile.am
-2020/03/13 | 21142 | dviware/dvisvgm/doc/Makefile.in
+2020/03/21 | 2618 | dviware/dvisvgm/doc/conf-dblatex-pdf.xsl
+2020/03/21 | 66573 | dviware/dvisvgm/doc/dvisvgm.1
+2020/03/21 | 60145 | dviware/dvisvgm/doc/dvisvgm.txt.in
+2020/03/21 | 840 | dviware/dvisvgm/doc/generate-dvisvgm-sty.xsl
+2020/03/21 | 3678 | dviware/dvisvgm/doc/Makefile.am
+2020/03/21 | 21313 | dviware/dvisvgm/doc/Makefile.in
2020/03/02 | 1041 | dviware/dvisvgm/doc/tweak-dblatex-pdf.xsl
+2020/03/21 | 712 | dviware/dvisvgm/doc/tweak-dblatex-tex.py
2020/03/02 | 1698 | dviware/dvisvgm/doc/tweak-db-refentry.xsl
2016/09/03 | 9236 | dviware/dvisvgm/INSTALL
2019/03/09 | 15368 | dviware/dvisvgm/install-sh
@@ -3571,12 +3572,12 @@
2018/07/31 | 2615 | dviware/dvisvgm/libs/brotli/include/brotli/types.h
2017/12/28 | 1084 | dviware/dvisvgm/libs/brotli/LICENSE
2019/03/09 | 1899 | dviware/dvisvgm/libs/brotli/Makefile.am
-2020/03/13 | 31488 | dviware/dvisvgm/libs/brotli/Makefile.in
+2020/03/21 | 31488 | dviware/dvisvgm/libs/brotli/Makefile.in
2018/09/08 | 132235 | dviware/dvisvgm/libs/clipper/clipper.cpp
2016/09/03 | 15879 | dviware/dvisvgm/libs/clipper/clipper.hpp
2017/04/14 | 1374 | dviware/dvisvgm/libs/clipper/License.txt
2017/04/14 | 202 | dviware/dvisvgm/libs/clipper/Makefile.am
-2020/03/13 | 20338 | dviware/dvisvgm/libs/clipper/Makefile.in
+2020/03/21 | 20338 | dviware/dvisvgm/libs/clipper/Makefile.in
2019/03/09 | 467 | dviware/dvisvgm/libs/defs.am
2017/04/14 | 188824 | dviware/dvisvgm/libs/ff-woff/fontforge/alphabet.c
2017/04/14 | 32761 | dviware/dvisvgm/libs/ff-woff/fontforge/asmfpst.c
@@ -3659,11 +3660,11 @@
2017/04/14 | 5185 | dviware/dvisvgm/libs/ff-woff/inc/utype.h
2017/04/14 | 9905 | dviware/dvisvgm/libs/ff-woff/LICENSE
2019/04/12 | 2027 | dviware/dvisvgm/libs/ff-woff/Makefile.am
-2020/03/13 | 40554 | dviware/dvisvgm/libs/ff-woff/Makefile.in
+2020/03/21 | 40554 | dviware/dvisvgm/libs/ff-woff/Makefile.in
2020/03/02 | 241 | dviware/dvisvgm/libs/Makefile.am
-2020/03/13 | 19936 | dviware/dvisvgm/libs/Makefile.in
+2020/03/21 | 19936 | dviware/dvisvgm/libs/Makefile.in
2018/09/08 | 171 | dviware/dvisvgm/libs/md5/Makefile.am
-2020/03/13 | 19545 | dviware/dvisvgm/libs/md5/Makefile.in
+2020/03/21 | 19545 | dviware/dvisvgm/libs/md5/Makefile.in
2018/09/08 | 8743 | dviware/dvisvgm/libs/md5/md5.c
2018/09/08 | 1426 | dviware/dvisvgm/libs/md5/md5.h
2019/10/25 | 2146 | dviware/dvisvgm/libs/potrace/auxiliary.h
@@ -3675,7 +3676,7 @@
2019/10/25 | 442 | dviware/dvisvgm/libs/potrace/decompose.h
2019/10/25 | 11118 | dviware/dvisvgm/libs/potrace/lists.h
2019/03/09 | 330 | dviware/dvisvgm/libs/potrace/Makefile.am
-2020/03/13 | 20804 | dviware/dvisvgm/libs/potrace/Makefile.in
+2020/03/21 | 20804 | dviware/dvisvgm/libs/potrace/Makefile.in
2019/10/25 | 3122 | dviware/dvisvgm/libs/potrace/potracelib.c
2019/10/25 | 4573 | dviware/dvisvgm/libs/potrace/potracelib.h
2019/10/25 | 2654 | dviware/dvisvgm/libs/potrace/progress.h
@@ -3684,14 +3685,14 @@
2019/03/09 | 102582 | dviware/dvisvgm/libs/variant/include/mpark/variant.hpp
2017/10/30 | 1338 | dviware/dvisvgm/libs/variant/LICENSE.md
2019/03/09 | 71 | dviware/dvisvgm/libs/variant/Makefile.am
-2020/03/13 | 15593 | dviware/dvisvgm/libs/variant/Makefile.in
+2020/03/21 | 15593 | dviware/dvisvgm/libs/variant/Makefile.in
2017/10/30 | 1171 | dviware/dvisvgm/libs/woff2/include/woff2/decode.h
2017/10/30 | 1434 | dviware/dvisvgm/libs/woff2/include/woff2/encode.h
2017/10/30 | 2304 | dviware/dvisvgm/libs/woff2/include/woff2/output.h
2018/07/31 | 131 | dviware/dvisvgm/libs/woff2/include/woff2/version.h
2016/09/03 | 11358 | dviware/dvisvgm/libs/woff2/LICENSE
2019/03/09 | 701 | dviware/dvisvgm/libs/woff2/Makefile.am
-2020/03/13 | 24681 | dviware/dvisvgm/libs/woff2/Makefile.in
+2020/03/21 | 24681 | dviware/dvisvgm/libs/woff2/Makefile.in
2017/10/30 | 4185 | dviware/dvisvgm/libs/woff2/src/buffer.h
2018/07/31 | 12155 | dviware/dvisvgm/libs/woff2/src/font.cc
2017/10/30 | 3509 | dviware/dvisvgm/libs/woff2/src/font.h
@@ -3713,7 +3714,7 @@
2018/07/31 | 15423 | dviware/dvisvgm/libs/woff2/src/woff2_enc.cc
2017/10/30 | 1564 | dviware/dvisvgm/libs/woff2/src/woff2_out.cc
2019/10/25 | 200 | dviware/dvisvgm/libs/xxHash/Makefile.am
-2020/03/13 | 19650 | dviware/dvisvgm/libs/xxHash/Makefile.in
+2020/03/21 | 19650 | dviware/dvisvgm/libs/xxHash/Makefile.in
2020/03/13 | 86868 | dviware/dvisvgm/libs/xxHash/xxh3.h
2020/03/13 | 1859 | dviware/dvisvgm/libs/xxHash/xxhash.c
2020/03/13 | 68784 | dviware/dvisvgm/libs/xxHash/xxhash.h
@@ -3727,11 +3728,11 @@
2019/03/09 | 4384 | dviware/dvisvgm/m4/ltsugar.m4
2019/03/09 | 699 | dviware/dvisvgm/m4/ltversion.m4
2019/03/09 | 95 | dviware/dvisvgm/m4/Makefile.am
-2020/03/13 | 13474 | dviware/dvisvgm/m4/Makefile.in
+2020/03/21 | 13474 | dviware/dvisvgm/m4/Makefile.in
2020/03/02 | 744 | dviware/dvisvgm/Makefile.am
-2020/03/13 | 27672 | dviware/dvisvgm/Makefile.in
+2020/03/21 | 27672 | dviware/dvisvgm/Makefile.in
2019/03/09 | 6878 | dviware/dvisvgm/missing
-2020/03/13 | 35349 | dviware/dvisvgm/NEWS
+2020/03/21 | 35755 | dviware/dvisvgm/NEWS
2020/03/02 | 6173 | dviware/dvisvgm/README
2020/03/02 | 158418 | dviware/dvisvgm/src/AGLTable.hpp
2020/03/02 | 13439 | dviware/dvisvgm/src/BasicDVIReader.cpp
@@ -3744,7 +3745,7 @@
2020/03/02 | 4166 | dviware/dvisvgm/src/Bitmap.hpp
2020/03/02 | 7864 | dviware/dvisvgm/src/BoundingBox.cpp
2020/03/02 | 3912 | dviware/dvisvgm/src/BoundingBox.hpp
-2020/03/02 | 5855 | dviware/dvisvgm/src/Calculator.cpp
+2020/03/21 | 5928 | dviware/dvisvgm/src/Calculator.cpp
2020/03/02 | 2272 | dviware/dvisvgm/src/Calculator.hpp
2020/03/02 | 2000 | dviware/dvisvgm/src/Character.hpp
2020/03/02 | 2040 | dviware/dvisvgm/src/CharMapID.cpp
@@ -3771,7 +3772,7 @@
2020/03/02 | 25282 | dviware/dvisvgm/src/DVIReader.cpp
2020/03/02 | 8464 | dviware/dvisvgm/src/DVIReader.hpp
2020/03/13 | 17749 | dviware/dvisvgm/src/dvisvgm.cpp
-2020/03/02 | 18126 | dviware/dvisvgm/src/DvisvgmSpecialHandler.cpp
+2020/03/21 | 19337 | dviware/dvisvgm/src/DvisvgmSpecialHandler.cpp
2020/03/02 | 4562 | dviware/dvisvgm/src/DvisvgmSpecialHandler.hpp
2020/03/02 | 12234 | dviware/dvisvgm/src/DVIToSVGActions.cpp
2020/03/02 | 4915 | dviware/dvisvgm/src/DVIToSVGActions.hpp
@@ -3843,10 +3844,10 @@
2020/03/02 | 4138 | dviware/dvisvgm/src/Length.hpp
2020/03/02 | 2014 | dviware/dvisvgm/src/macros.hpp
2020/03/02 | 7116 | dviware/dvisvgm/src/Makefile.am
-2020/03/13 | 59734 | dviware/dvisvgm/src/Makefile.in
+2020/03/21 | 59734 | dviware/dvisvgm/src/Makefile.in
2020/03/02 | 8495 | dviware/dvisvgm/src/MapLine.cpp
2020/03/02 | 3089 | dviware/dvisvgm/src/MapLine.hpp
-2020/03/13 | 16848 | dviware/dvisvgm/src/Matrix.cpp
+2020/03/21 | 16856 | dviware/dvisvgm/src/Matrix.cpp
2020/03/02 | 4123 | dviware/dvisvgm/src/Matrix.hpp
2020/03/02 | 2704 | dviware/dvisvgm/src/MD5HashFunction.hpp
2020/03/02 | 7517 | dviware/dvisvgm/src/Message.cpp
@@ -3858,14 +3859,14 @@
2020/03/02 | 1894 | dviware/dvisvgm/src/MiKTeXCom.hpp
2020/03/02 | 2062 | dviware/dvisvgm/src/NoPsSpecialHandler.cpp
2020/03/02 | 1999 | dviware/dvisvgm/src/NoPsSpecialHandler.hpp
-2020/03/02 | 3999 | dviware/dvisvgm/src/NumericRanges.hpp
+2020/03/21 | 3927 | dviware/dvisvgm/src/NumericRanges.hpp
2020/03/02 | 8119 | dviware/dvisvgm/src/optimizer/AttributeExtractor.cpp
2020/03/02 | 2709 | dviware/dvisvgm/src/optimizer/AttributeExtractor.hpp
2020/03/02 | 4213 | dviware/dvisvgm/src/optimizer/DependencyGraph.hpp
2020/03/02 | 6136 | dviware/dvisvgm/src/optimizer/GroupCollapser.cpp
2020/03/02 | 1984 | dviware/dvisvgm/src/optimizer/GroupCollapser.hpp
2019/12/06 | 534 | dviware/dvisvgm/src/optimizer/Makefile.am
-2020/03/13 | 22166 | dviware/dvisvgm/src/optimizer/Makefile.in
+2020/03/21 | 22166 | dviware/dvisvgm/src/optimizer/Makefile.in
2020/03/02 | 1642 | dviware/dvisvgm/src/optimizer/OptimizerModule.hpp
2020/03/02 | 3192 | dviware/dvisvgm/src/optimizer/RedundantElementRemover.cpp
2020/03/02 | 1644 | dviware/dvisvgm/src/optimizer/RedundantElementRemover.hpp
@@ -3879,8 +3880,8 @@
2020/03/02 | 1687 | dviware/dvisvgm/src/optimizer/WSNodeRemover.hpp
2020/03/02 | 2067 | dviware/dvisvgm/src/options.dtd
2020/03/13 | 8986 | dviware/dvisvgm/src/options.xml
-2020/03/02 | 2848 | dviware/dvisvgm/src/PageRanges.cpp
-2020/03/02 | 1711 | dviware/dvisvgm/src/PageRanges.hpp
+2020/03/21 | 2829 | dviware/dvisvgm/src/PageRanges.cpp
+2020/03/21 | 1676 | dviware/dvisvgm/src/PageRanges.hpp
2020/03/02 | 5332 | dviware/dvisvgm/src/PageSize.cpp
2020/03/02 | 2092 | dviware/dvisvgm/src/PageSize.hpp
2020/03/02 | 4043 | dviware/dvisvgm/src/Pair.hpp
@@ -3980,7 +3981,7 @@
2020/03/02 | 6075 | dviware/dvisvgm/tests/BezierTest.cpp
2020/03/02 | 2704 | dviware/dvisvgm/tests/BitmapTest.cpp
2020/03/02 | 6074 | dviware/dvisvgm/tests/BoundingBoxTest.cpp
-2020/03/02 | 2910 | dviware/dvisvgm/tests/CalculatorTest.cpp
+2020/03/21 | 3204 | dviware/dvisvgm/tests/CalculatorTest.cpp
2020/03/02 | 1216 | dviware/dvisvgm/tests/check-conv
2020/03/02 | 2974 | dviware/dvisvgm/tests/CMapManagerTest.cpp
2020/03/02 | 4223 | dviware/dvisvgm/tests/CMapReaderTest.cpp
@@ -3998,7 +3999,7 @@
2016/09/03 | 337419 | dviware/dvisvgm/tests/data/frktest-nf-cmp.svg
2016/09/03 | 163979 | dviware/dvisvgm/tests/data/frktest-wf-cmp.svg
2020/03/02 | 428 | dviware/dvisvgm/tests/data/Makefile.am
-2020/03/13 | 13688 | dviware/dvisvgm/tests/data/Makefile.in
+2020/03/21 | 13688 | dviware/dvisvgm/tests/data/Makefile.in
2016/09/03 | 1207 | dviware/dvisvgm/tests/data/ot1.cmap
2016/09/03 | 1320 | dviware/dvisvgm/tests/data/sample.dvi
2016/09/03 | 60654 | dviware/dvisvgm/tests/data/sample-nf-cmp.svg
@@ -4009,7 +4010,7 @@
2020/03/02 | 2512 | dviware/dvisvgm/tests/DependencyGraphTest.cpp
2020/03/02 | 2773 | dviware/dvisvgm/tests/DirectoryTest.cpp
2020/03/02 | 33210 | dviware/dvisvgm/tests/DVIReaderTest.cpp
-2020/03/02 | 13220 | dviware/dvisvgm/tests/DvisvgmSpecialTest.cpp
+2020/03/21 | 13266 | dviware/dvisvgm/tests/DvisvgmSpecialTest.cpp
2020/03/02 | 5850 | dviware/dvisvgm/tests/EllipticalArcTest.cpp
2020/03/02 | 7485 | dviware/dvisvgm/tests/EmSpecialTest.cpp
2020/03/02 | 3124 | dviware/dvisvgm/tests/FileFinderTest.cpp
@@ -4064,7 +4065,7 @@
2020/03/02 | 4034 | dviware/dvisvgm/tests/JFMReaderTest.cpp
2020/03/02 | 7803 | dviware/dvisvgm/tests/LengthTest.cpp
2020/03/02 | 15639 | dviware/dvisvgm/tests/Makefile.am
-2020/03/13 | 256010 | dviware/dvisvgm/tests/Makefile.in
+2020/03/21 | 256010 | dviware/dvisvgm/tests/Makefile.in
2020/03/02 | 5795 | dviware/dvisvgm/tests/MapLineTest.cpp
2020/03/02 | 8338 | dviware/dvisvgm/tests/MatrixTest.cpp
2020/03/02 | 2315 | dviware/dvisvgm/tests/MessageExceptionTest.cpp
@@ -4098,7 +4099,7 @@
2020/03/02 | 2276 | dviware/dvisvgm/tests/VectorStreamTest.cpp
2020/03/02 | 15061 | dviware/dvisvgm/tests/XMLNodeTest.cpp
2020/03/02 | 3034 | dviware/dvisvgm/tests/XMLStringTest.cpp
-2020/03/15 | 3477979 | dviware/dvisvgm.zip
+2020/03/21 | 3479555 | dviware/dvisvgm.zip
1991/04/12 | 1728 | dviware/dvitops/aftopl.1
1991/04/12 | 12075 | dviware/dvitops/aftopl.c
1991/01/25 | 837 | dviware/dvitops/cms.h
@@ -5000,7 +5001,7 @@
1990/10/02 | 5440 | dviware/vutex/vaxvms.hlp
1990/10/02 | 812 | dviware/vutex/vaxvms.ins
1990/10/02 | 127576 | dviware/vutex/vutex.web
-2020/03/20 | 84051 | FILES.last07days
+2020/03/21 | 82344 | FILES.last07days
2018/06/27 | 99883 | fonts/academicons/academicons.pdf
2018/06/27 | 10779 | fonts/academicons/academicons.sty
2018/06/27 | 5774 | fonts/academicons/academicons.tex
@@ -137176,16 +137177,6 @@
2018/12/04 | 4017 | graphics/pstricks/contrib/pst-venn/latex/pst-venn.sty
2018/12/04 | 295 | graphics/pstricks/contrib/pst-venn/README
2018/12/04 | 39018 | graphics/pstricks/contrib/pst-venn.zip
-2008/02/21 | 1046 | graphics/pstricks/contrib/pst-vue3d/Changes
-2007/03/26 | 1105 | graphics/pstricks/contrib/pst-vue3d/Makefile
-2007/03/18 | 3743 | graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.bib
-2007/03/26 | 4588365 | graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.pdf
-2007/03/26 | 38591 | graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.tex
-2007/03/26 | 57107 | graphics/pstricks/contrib/pst-vue3d/pst-vue3d.pro
-2007/03/26 | 293 | graphics/pstricks/contrib/pst-vue3d/pst-vue3d.sty
-2008/02/21 | 45912 | graphics/pstricks/contrib/pst-vue3d/pst-vue3d.tex
-2007/03/26 | 1448 | graphics/pstricks/contrib/pst-vue3d/README
-2008/02/21 | 4526819 | graphics/pstricks/contrib/pst-vue3d.zip
2010/03/17 | 218 | graphics/pstricks/contrib/uml/Changes
2006/11/28 | 1039 | graphics/pstricks/contrib/uml/Makefile
2006/11/28 | 734 | graphics/pstricks/contrib/uml/README
@@ -139113,8 +139104,8 @@
2020/02/15 | 3527 | info/biblio/tugboat.ltx
2014/08/12 | 20186 | info/biblio/type.bib
2019/12/12 | 2025 | info/biblio/type.ltx
-2020/03/04 | 1141386 | info/biblio/typeset.bib
-2019/12/24 | 2852 | info/biblio/typeset.ltx
+2020/03/20 | 1146469 | info/biblio/typeset.bib
+2020/03/20 | 2846 | info/biblio/typeset.ltx
1996/03/21 | 590 | info/biblio/widebib.sty
1994/09/24 | 2480 | info/biblio/xcite.sty
2019/10/22 | 2296480 | info/biblio.zip
@@ -158194,6 +158185,27 @@
2004/10/19 | 559 | info/examples/tlc2/w.eps
2004/10/19 | 606 | info/examples/tlc2/w.ps
2006/03/19 | 630832 | info/examples/tlc2.zip
+2019/08/26 | 1288 | info/expose-expl3-dunkerque-2019/bibliographie/dun19expl3.bib
+2019/08/26 | 3803 | info/expose-expl3-dunkerque-2019/codes/erato-def.tex
+2019/08/07 | 2162 | info/expose-expl3-dunkerque-2019/codes/henel-def.tex
+2019/08/28 | 2452 | info/expose-expl3-dunkerque-2019/codes/kaprekar-def.tex
+2019/08/04 | 624 | info/expose-expl3-dunkerque-2019/codes/knuth-def.tex
+2019/09/24 | 17629 | info/expose-expl3-dunkerque-2019/dk19ecrireprem.tex
+2019/09/24 | 10014 | info/expose-expl3-dunkerque-2019/dk19eratosthene.tex
+2020/03/21 | 1020 | info/expose-expl3-dunkerque-2019/dk19intro.tex
+2019/09/22 | 9928 | info/expose-expl3-dunkerque-2019/dk19kaprekar.tex
+2020/03/21 | 309536 | info/expose-expl3-dunkerque-2019/dun19expl3.pdf
+2020/03/21 | 3548 | info/expose-expl3-dunkerque-2019/dun19expl3.tex
+2019/08/28 | 8164 | info/expose-expl3-dunkerque-2019/extensions/dun19codepres.sty
+2019/08/24 | 1586 | info/expose-expl3-dunkerque-2019/glosaires/erato-supp-glo.tex
+2019/08/28 | 4610 | info/expose-expl3-dunkerque-2019/glosaires/kaprekar-sup-glo.tex
+2019/08/27 | 10002 | info/expose-expl3-dunkerque-2019/glosaires/les-macros.tex
+2019/08/28 | 1625 | info/expose-expl3-dunkerque-2019/glosaires/termes-techniques.tex
+2019/08/23 | 297 | info/expose-expl3-dunkerque-2019/latexmkrc
+2020/03/21 | 1026 | info/expose-expl3-dunkerque-2019/LISEZMOI.md
+2019/08/29 | 3078 | info/expose-expl3-dunkerque-2019/Makefile
+2020/03/21 | 1168 | info/expose-expl3-dunkerque-2019/README.md
+2020/03/21 | 339002 | info/expose-expl3-dunkerque-2019.zip
2011/09/04 | 152801 | info/fifinddo-info/dante-mv45-lueck.pdf
2011/10/25 | 147541 | info/fifinddo-info/dantev45.htm
2011/10/16 | 1849 | info/fifinddo-info/LIESMICH.txt
@@ -160690,30 +160702,30 @@
2014/06/23 | 584 | info/pstricks_calcnotes/README
2014/04/03 | 652952 | info/pstricks_calcnotes/ThreeAppsPDF.pdf
2014/06/22 | 2060099 | info/pstricks_calcnotes.zip
-2019/11/26 | 380603 | info/ptex-manual/eptexdoc.pdf
-2019/11/26 | 63372 | info/ptex-manual/eptexdoc.tex
-2019/11/26 | 694464 | info/ptex-manual/eptex_resume.pdf
-2019/11/26 | 95260 | info/ptex-manual/eptex_resume.tex
-2019/11/26 | 3173 | info/ptex-manual/fam256d.tex
-2019/11/26 | 3372 | info/ptex-manual/fam256p.tex
-2019/11/26 | 157050 | info/ptex-manual/jfm.pdf
-2019/11/26 | 16427 | info/ptex-manual/jfm.tex
-2019/11/26 | 251872 | info/ptex-manual/jtex_asciimw.pdf
-2019/11/26 | 35293 | info/ptex-manual/jtex_asciimw.tex
-2019/11/26 | 145704 | info/ptex-manual/jtexdoc_asciimw.pdf
-2019/11/26 | 20341 | info/ptex-manual/jtexdoc_asciimw.tex
-2019/11/26 | 1516 | info/ptex-manual/LICENSE
-2019/11/26 | 264764 | info/ptex-manual/ptexdoc_asciimw.pdf
-2019/11/26 | 42357 | info/ptex-manual/ptexdoc_asciimw.tex
-2019/11/26 | 99191 | info/ptex-manual/ptex-guide-en.pdf
-2019/11/26 | 37155 | info/ptex-manual/ptex-guide-en.tex
-2019/11/26 | 381432 | info/ptex-manual/ptex-manual.pdf
-2019/11/26 | 4282 | info/ptex-manual/ptex-manual.sty
-2019/11/26 | 71067 | info/ptex-manual/ptex-manual.tex
-2019/11/26 | 164929 | info/ptex-manual/ptexskip_asciimw.pdf
-2019/11/26 | 19615 | info/ptex-manual/ptexskip_asciimw.tex
-2019/11/26 | 1206 | info/ptex-manual/README.md
-2019/11/26 | 2577716 | info/ptex-manual.zip
+2020/03/21 | 347556 | info/ptex-manual/eptexdoc.pdf
+2020/03/21 | 63856 | info/ptex-manual/eptexdoc.tex
+2020/03/21 | 694464 | info/ptex-manual/eptex_resume.pdf
+2020/03/21 | 95260 | info/ptex-manual/eptex_resume.tex
+2020/03/21 | 3173 | info/ptex-manual/fam256d.tex
+2020/03/21 | 3372 | info/ptex-manual/fam256p.tex
+2020/03/21 | 164504 | info/ptex-manual/jfm.pdf
+2020/03/21 | 25964 | info/ptex-manual/jfm.tex
+2020/03/21 | 251872 | info/ptex-manual/jtex_asciimw.pdf
+2020/03/21 | 35293 | info/ptex-manual/jtex_asciimw.tex
+2020/03/21 | 145704 | info/ptex-manual/jtexdoc_asciimw.pdf
+2020/03/21 | 20341 | info/ptex-manual/jtexdoc_asciimw.tex
+2020/03/21 | 1516 | info/ptex-manual/LICENSE
+2020/03/21 | 264764 | info/ptex-manual/ptexdoc_asciimw.pdf
+2020/03/21 | 42357 | info/ptex-manual/ptexdoc_asciimw.tex
+2020/03/21 | 98937 | info/ptex-manual/ptex-guide-en.pdf
+2020/03/21 | 38159 | info/ptex-manual/ptex-guide-en.tex
+2020/03/21 | 329490 | info/ptex-manual/ptex-manual.pdf
+2020/03/21 | 4282 | info/ptex-manual/ptex-manual.sty
+2020/03/21 | 74584 | info/ptex-manual/ptex-manual.tex
+2020/03/21 | 164929 | info/ptex-manual/ptexskip_asciimw.pdf
+2020/03/21 | 19615 | info/ptex-manual/ptexskip_asciimw.tex
+2020/03/21 | 1206 | info/ptex-manual/README.md
+2020/03/21 | 2503114 | info/ptex-manual.zip
1994/01/21 | 22111 | info/qh2winh.zip
2013/01/03 | 4070156 | info/russian/Computer_Typesetting_Using_LaTeX/ctex.pdf
2013/01/03 | 7383534 | info/russian/Computer_Typesetting_Using_LaTeX/ctex.tar.gz
@@ -162311,7 +162323,7 @@
2014/06/19 | 690439 | install/macros/latex/contrib/matlab-prettifier.tds.zip
2010/03/26 | 732372 | install/macros/latex/contrib/mattens.tds.zip
2013/07/01 | 1898068 | install/macros/latex/contrib/mdframed.tds.zip
-2020/03/04 | 7429785 | install/macros/latex/contrib/media9.tds.zip
+2020/03/20 | 7429591 | install/macros/latex/contrib/media9.tds.zip
2019/11/21 | 3630558 | install/macros/latex/contrib/memoir.tds.zip
2016/08/08 | 586877 | install/macros/latex/contrib/menukeys.tds.zip
2017/11/14 | 704736 | install/macros/latex/contrib/mfirstuc.tds.zip
@@ -180606,13 +180618,14 @@
2019/12/28 | 378969 | macros/latex/contrib/biblatex-contrib/biblatex-jura2.zip
2008/12/09 | 55397 | macros/latex/contrib/biblatex-contrib/biblatex-jura/biblatex-jura.bbx
2008/12/09 | 35330 | macros/latex/contrib/biblatex-contrib/biblatex-jura/biblatex-jura.cbx
-2012/07/17 | 332 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biber.conf
-2012/07/17 | 14908 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biblatex-juradiss.bbx
-2012/07/17 | 11440 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biblatex-juradiss.cbx
-2012/07/17 | 197504 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biblatex-juradiss.pdf
-2012/07/17 | 31536 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biblatex-juradiss.tex
-2013/02/28 | 5629 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss/README
-2013/03/29 | 153725 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss.zip
+2020/03/21 | 1786 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss/Changes
+2020/03/21 | 109845 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss/doc/biblatex-juradiss.pdf
+2020/03/21 | 35280 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss/doc/biblatex-juradiss.tex
+2020/03/21 | 233 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss/latex/biber.conf
+2020/03/21 | 17456 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss/latex/biblatex-juradiss.bbx
+2020/03/21 | 12142 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss/latex/biblatex-juradiss.cbx
+2020/03/21 | 1565 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss/README
+2020/03/21 | 128704 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss.zip
2008/12/09 | 1719 | macros/latex/contrib/biblatex-contrib/biblatex-jura/README
2012/09/27 | 14483 | macros/latex/contrib/biblatex-contrib/biblatex-jura.zip
2019/02/03 | 1390 | macros/latex/contrib/biblatex-contrib/biblatex-lni/CHANGELOG.md
@@ -188658,9 +188671,9 @@
2020/03/20 | 16718 | macros/latex/contrib/glosmathtools/glosmathtools.sty
2020/03/20 | 751 | macros/latex/contrib/glosmathtools/README.md
2019/10/08 | 4467 | macros/latex/contrib/glosmathtools/sample_glosmathtools_glos.tex
-2020/03/20 | 322662 | macros/latex/contrib/glosmathtools/sample_glosmathtools.pdf
+2020/03/21 | 377849 | macros/latex/contrib/glosmathtools/sample_glosmathtools.pdf
2020/03/20 | 9340 | macros/latex/contrib/glosmathtools/sample_glosmathtools.tex
-2020/03/20 | 329377 | macros/latex/contrib/glosmathtools.zip
+2020/03/21 | 384366 | macros/latex/contrib/glosmathtools.zip
2020/03/19 | 41185 | macros/latex/contrib/glossaries/CHANGES
2014/11/24 | 4848 | macros/latex/contrib/glossaries-danish/glossaries-danish.dtx
2014/11/24 | 1179 | macros/latex/contrib/glossaries-danish/glossaries-danish.ins
@@ -193136,58 +193149,58 @@
2008/06/23 | 311275 | macros/latex/contrib/mdwtools/syntax.pdf
1999/03/25 | 19268 | macros/latex/contrib/mdwtools/syntax.sty
2008/06/23 | 1901320 | macros/latex/contrib/mdwtools.zip
-2020/03/04 | 13406 | macros/latex/contrib/media9/ChangeLog
-2019/01/02 | 7152 | macros/latex/contrib/media9/doc/files/3dsystem.fig
-2019/01/02 | 5989 | macros/latex/contrib/media9/doc/files/3dsystem.pdf
-2019/01/02 | 1550 | macros/latex/contrib/media9/doc/files/3dsystem.tex
-2019/01/02 | 735130 | macros/latex/contrib/media9/doc/files/bird.mp3
-2019/01/02 | 2363 | macros/latex/contrib/media9/doc/files/boutona.pdf
-2019/01/02 | 2203 | macros/latex/contrib/media9/doc/files/boutonb.pdf
-2019/01/02 | 2364 | macros/latex/contrib/media9/doc/files/boutonc.pdf
-2019/01/02 | 2199 | macros/latex/contrib/media9/doc/files/boutond.pdf
-2019/01/02 | 2236 | macros/latex/contrib/media9/doc/files/boutone.pdf
-2019/01/02 | 2208 | macros/latex/contrib/media9/doc/files/boutonf.pdf
-2019/01/02 | 3524 | macros/latex/contrib/media9/doc/files/config.xml
-2019/01/02 | 321886 | macros/latex/contrib/media9/doc/files/ctan_lion_1200.png
-2019/01/02 | 14220 | macros/latex/contrib/media9/doc/files/ctan_lion_200.png
-2019/01/02 | 44332 | macros/latex/contrib/media9/doc/files/ctan_lion_400.png
-2019/01/02 | 152532 | macros/latex/contrib/media9/doc/files/ctan_lion_800.png
-2019/01/02 | 945 | macros/latex/contrib/media9/doc/files/cube.asy
-2019/01/02 | 262653 | macros/latex/contrib/media9/doc/files/cube.mp4
-2019/01/02 | 3462 | macros/latex/contrib/media9/doc/files/cubeposter.png
-2019/01/02 | 160672 | macros/latex/contrib/media9/doc/files/dice.u3d
-2019/01/02 | 241 | macros/latex/contrib/media9/doc/files/dice.vws
-2019/01/02 | 3796 | macros/latex/contrib/media9/doc/files/dice.wrl
-2019/01/02 | 646 | macros/latex/contrib/media9/doc/files/epix.asy
-2019/01/02 | 111371 | macros/latex/contrib/media9/doc/files/epixposter.pdf
-2019/01/02 | 55043 | macros/latex/contrib/media9/doc/files/epix.prc
-2019/01/02 | 1268 | macros/latex/contrib/media9/doc/files/malte.js
-2019/01/02 | 105696 | macros/latex/contrib/media9/doc/files/malte.u3d
-2019/01/02 | 20206 | macros/latex/contrib/media9/doc/files/random.mp4
-2020/03/04 | 3735211 | macros/latex/contrib/media9/doc/media9.pdf
-2020/01/27 | 93396 | macros/latex/contrib/media9/doc/media9.tex
-2019/01/02 | 29121 | macros/latex/contrib/media9/javascript/3Dmenu.js
-2019/01/02 | 972 | macros/latex/contrib/media9/javascript/3Dspintool.js
-2019/01/02 | 3307 | macros/latex/contrib/media9/javascript/animation.js
-2019/01/02 | 2561 | macros/latex/contrib/media9/javascript/asylabels.js
-2020/03/04 | 79666 | macros/latex/contrib/media9/media9.sty
-2020/03/04 | 49864 | macros/latex/contrib/media9/pdfbase.sty
-2019/01/02 | 14420 | macros/latex/contrib/media9/players/APlayer9.mxml
-2019/01/02 | 206165 | macros/latex/contrib/media9/players/APlayer9.swf
-2019/01/02 | 15323 | macros/latex/contrib/media9/players/APlayer.mxml
-2019/01/02 | 354878 | macros/latex/contrib/media9/players/APlayer.swf
-2012/03/30 | 1528 | macros/latex/contrib/media9/players/BSD-License
-2019/01/02 | 18448 | macros/latex/contrib/media9/players/SlideShow.mxml
-2019/01/02 | 326715 | macros/latex/contrib/media9/players/SlideShow.swf
-2012/11/20 | 5409 | macros/latex/contrib/media9/players/SMPfixes.patch
-2012/03/30 | 379 | macros/latex/contrib/media9/players/StrobeMediaPlayback-license
-2019/01/02 | 275747 | macros/latex/contrib/media9/players/StrobeMediaPlayback.swf
-2019/01/02 | 11480 | macros/latex/contrib/media9/players/VPlayer9.mxml
-2019/01/02 | 219242 | macros/latex/contrib/media9/players/VPlayer9.swf
-2019/01/02 | 12571 | macros/latex/contrib/media9/players/VPlayer.mxml
-2019/01/02 | 483412 | macros/latex/contrib/media9/players/VPlayer.swf
-2019/05/09 | 2053 | macros/latex/contrib/media9/README.md
-2020/03/04 | 7424495 | macros/latex/contrib/media9.zip
+2020/03/20 | 13540 | macros/latex/contrib/media9/ChangeLog
+2020/03/11 | 7152 | macros/latex/contrib/media9/doc/files/3dsystem.fig
+2020/03/11 | 5989 | macros/latex/contrib/media9/doc/files/3dsystem.pdf
+2020/03/11 | 1550 | macros/latex/contrib/media9/doc/files/3dsystem.tex
+2020/03/11 | 735130 | macros/latex/contrib/media9/doc/files/bird.mp3
+2020/03/11 | 2363 | macros/latex/contrib/media9/doc/files/boutona.pdf
+2020/03/11 | 2203 | macros/latex/contrib/media9/doc/files/boutonb.pdf
+2020/03/11 | 2364 | macros/latex/contrib/media9/doc/files/boutonc.pdf
+2020/03/11 | 2199 | macros/latex/contrib/media9/doc/files/boutond.pdf
+2020/03/11 | 2236 | macros/latex/contrib/media9/doc/files/boutone.pdf
+2020/03/11 | 2208 | macros/latex/contrib/media9/doc/files/boutonf.pdf
+2020/03/11 | 3524 | macros/latex/contrib/media9/doc/files/config.xml
+2020/03/11 | 321886 | macros/latex/contrib/media9/doc/files/ctan_lion_1200.png
+2020/03/11 | 14220 | macros/latex/contrib/media9/doc/files/ctan_lion_200.png
+2020/03/11 | 44332 | macros/latex/contrib/media9/doc/files/ctan_lion_400.png
+2020/03/11 | 152532 | macros/latex/contrib/media9/doc/files/ctan_lion_800.png
+2020/03/11 | 945 | macros/latex/contrib/media9/doc/files/cube.asy
+2020/03/11 | 262653 | macros/latex/contrib/media9/doc/files/cube.mp4
+2020/03/11 | 3462 | macros/latex/contrib/media9/doc/files/cubeposter.png
+2020/03/11 | 160672 | macros/latex/contrib/media9/doc/files/dice.u3d
+2020/03/11 | 241 | macros/latex/contrib/media9/doc/files/dice.vws
+2020/03/11 | 3796 | macros/latex/contrib/media9/doc/files/dice.wrl
+2020/03/11 | 646 | macros/latex/contrib/media9/doc/files/epix.asy
+2020/03/11 | 111371 | macros/latex/contrib/media9/doc/files/epixposter.pdf
+2020/03/11 | 55043 | macros/latex/contrib/media9/doc/files/epix.prc
+2020/03/11 | 1268 | macros/latex/contrib/media9/doc/files/malte.js
+2020/03/11 | 105696 | macros/latex/contrib/media9/doc/files/malte.u3d
+2020/03/11 | 20206 | macros/latex/contrib/media9/doc/files/random.mp4
+2020/03/20 | 3727329 | macros/latex/contrib/media9/doc/media9.pdf
+2020/03/11 | 93396 | macros/latex/contrib/media9/doc/media9.tex
+2020/03/11 | 29121 | macros/latex/contrib/media9/javascript/3Dmenu.js
+2020/03/11 | 972 | macros/latex/contrib/media9/javascript/3Dspintool.js
+2020/03/11 | 3307 | macros/latex/contrib/media9/javascript/animation.js
+2020/03/11 | 2561 | macros/latex/contrib/media9/javascript/asylabels.js
+2020/03/20 | 79666 | macros/latex/contrib/media9/media9.sty
+2020/03/20 | 50233 | macros/latex/contrib/media9/pdfbase.sty
+2020/03/11 | 14420 | macros/latex/contrib/media9/players/APlayer9.mxml
+2020/03/11 | 206165 | macros/latex/contrib/media9/players/APlayer9.swf
+2020/03/11 | 15323 | macros/latex/contrib/media9/players/APlayer.mxml
+2020/03/11 | 354878 | macros/latex/contrib/media9/players/APlayer.swf
+2020/03/11 | 1528 | macros/latex/contrib/media9/players/BSD-License
+2020/03/11 | 18448 | macros/latex/contrib/media9/players/SlideShow.mxml
+2020/03/11 | 326715 | macros/latex/contrib/media9/players/SlideShow.swf
+2020/03/11 | 5409 | macros/latex/contrib/media9/players/SMPfixes.patch
+2020/03/11 | 379 | macros/latex/contrib/media9/players/StrobeMediaPlayback-license
+2020/03/11 | 275747 | macros/latex/contrib/media9/players/StrobeMediaPlayback.swf
+2020/03/11 | 11480 | macros/latex/contrib/media9/players/VPlayer9.mxml
+2020/03/11 | 219242 | macros/latex/contrib/media9/players/VPlayer9.swf
+2020/03/11 | 12571 | macros/latex/contrib/media9/players/VPlayer.mxml
+2020/03/11 | 483412 | macros/latex/contrib/media9/players/VPlayer.swf
+2020/03/11 | 2053 | macros/latex/contrib/media9/README.md
+2020/03/21 | 7424301 | macros/latex/contrib/media9.zip
2015/11/12 | 2413 | macros/latex/contrib/medstarbeamer/beamercolorthemeMedStarColors.sty
2015/11/12 | 1715 | macros/latex/contrib/medstarbeamer/example.tex
2015/11/12 | 3149 | macros/latex/contrib/medstarbeamer/medstarbeamer.cls
@@ -202631,12 +202644,12 @@
2006/08/14 | 127680 | macros/latex/contrib/t-angles/t-manual.pdf
2006/08/14 | 21711 | macros/latex/contrib/t-angles/t-manual.tex
2006/08/14 | 125188 | macros/latex/contrib/t-angles.zip
-2020/01/11 | 1322 | macros/latex/contrib/tasks/README
-2020/01/11 | 1232 | macros/latex/contrib/tasks/tasks.cfg
-2020/01/11 | 448228 | macros/latex/contrib/tasks/tasks_en.pdf
-2020/01/11 | 18873 | macros/latex/contrib/tasks/tasks_en.tex
-2020/01/11 | 29576 | macros/latex/contrib/tasks/tasks.sty
-2020/01/11 | 460669 | macros/latex/contrib/tasks.zip
+2020/03/21 | 1332 | macros/latex/contrib/tasks/README
+2020/03/21 | 1243 | macros/latex/contrib/tasks/tasks.cfg
+2020/03/21 | 465232 | macros/latex/contrib/tasks/tasks-manual.pdf
+2020/03/21 | 18381 | macros/latex/contrib/tasks/tasks-manual.tex
+2020/03/21 | 30712 | macros/latex/contrib/tasks/tasks.sty
+2020/03/21 | 477777 | macros/latex/contrib/tasks.zip
2002/02/08 | 29208 | macros/latex/contrib/taupin/moresize.zip
2002/02/07 | 2865 | macros/latex/contrib/taupin/t1cmsc.fd
2002/02/15 | 3810 | macros/latex/contrib/taupin/varsects.sty
@@ -225837,9 +225850,19 @@
1995/04/05 | 42569 | obsolete/graphics/metapost/MetaPost4OS2/tangle.zip
1995/04/05 | 27419 | obsolete/graphics/metapost/MetaPost4OS2/tftopl.zip
1995/04/05 | 46384 | obsolete/graphics/metapost/MetaPost4OS2/web2c.zip
-1997/03/20 | 69 | obsolete/graphics/pstricks/contrib/palette.sty
-1997/03/20 | 8736 | obsolete/graphics/pstricks/contrib/palette.tex
-1998/02/25 | 451 | obsolete/graphics/pstricks/contrib/README
+1997/03/20 | 69 | obsolete/graphics/pstricks/contrib/palette/palette.sty
+1997/03/20 | 8736 | obsolete/graphics/pstricks/contrib/palette/palette.tex
+1998/02/25 | 451 | obsolete/graphics/pstricks/contrib/palette/README
+2008/02/21 | 1046 | obsolete/graphics/pstricks/contrib/pst-vue3d/Changes
+2007/03/26 | 1105 | obsolete/graphics/pstricks/contrib/pst-vue3d/Makefile
+2007/03/18 | 3743 | obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.bib
+2007/03/26 | 4588365 | obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.pdf
+2007/03/26 | 38591 | obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.tex
+2007/03/26 | 57107 | obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.pro
+2007/03/26 | 293 | obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.sty
+2008/02/21 | 45912 | obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.tex
+2007/03/26 | 1448 | obsolete/graphics/pstricks/contrib/pst-vue3d/README
+2008/02/21 | 4526819 | obsolete/graphics/pstricks/contrib/pst-vue3d.zip
2017/03/26 | 286 | obsolete/graphics/pstricks/contrib/rputover/README.txt
2017/03/26 | 35254 | obsolete/graphics/pstricks/contrib/rputover/rputover.pdf
2017/03/26 | 2306 | obsolete/graphics/pstricks/contrib/rputover/rputover.sty
@@ -246296,76 +246319,76 @@
2018/04/15 | 1313 | support/latex-git-log/po/de.po
2020/02/26 | 3353 | support/latex-git-log/README.md
2020/02/27 | 87742 | support/latex-git-log.zip
-2019/09/07 | 17538 | support/latexindent/defaultSettings.yaml
-2019/09/07 | 10429 | support/latexindent/documentation/appendices.tex
-2019/09/07 | 492 | support/latexindent/documentation/cmhlistings.tex
-2019/09/07 | 1896 | support/latexindent/documentation/figure-schematic.tex
-2019/09/07 | 858722 | support/latexindent/documentation/latexindent.pdf
-2019/09/07 | 22931 | support/latexindent/documentation/latexindent.tex
-2019/09/07 | 1595 | support/latexindent/documentation/logo.tex
-2019/09/07 | 246 | support/latexindent/documentation/references.tex
-2019/09/07 | 2539 | support/latexindent/documentation/sec-conclusions-know-limitations.tex
-2019/09/07 | 43812 | support/latexindent/documentation/sec-default-user-local.tex
-2019/09/07 | 2118 | support/latexindent/documentation/sec-demonstration.tex
-2019/09/07 | 5766 | support/latexindent/documentation/sec-fine-tuning.tex
-2019/09/07 | 16888 | support/latexindent/documentation/sec-how-to-use.tex
-2019/09/07 | 9059 | support/latexindent/documentation/sec-indent-config-and-settings.tex
-2019/09/07 | 7483 | support/latexindent/documentation/sec-introduction.tex
-2019/09/07 | 20159 | support/latexindent/documentation/sec-replacements.tex
-2019/09/07 | 102144 | support/latexindent/documentation/sec-the-m-switch.tex
-2019/09/07 | 13839 | support/latexindent/documentation/subsec-commands-and-their-options.tex
-2019/09/07 | 8985 | support/latexindent/documentation/subsec-conflicting-poly-switches.tex
-2019/09/07 | 1646 | support/latexindent/documentation/subsec-noAdditionalIndent-indentRules.tex
-2019/09/07 | 2786 | support/latexindent/documentation/subsec-partnering-poly-switches.tex
-2019/09/07 | 5869 | support/latexindent/documentation/subsubsec-commands-with-arguments.tex
-2019/09/07 | 16308 | support/latexindent/documentation/subsubsec-environments-and-their-arguments.tex
-2019/09/07 | 3381 | support/latexindent/documentation/subsubsec-environments-with-items.tex
-2019/09/07 | 5214 | support/latexindent/documentation/subsubsec-headings.tex
-2019/09/07 | 4799 | support/latexindent/documentation/subsubsec-ifelsefi.tex
-2019/09/07 | 7104 | support/latexindent/documentation/subsubsec-no-add-remaining-code-blocks.tex
-2019/09/07 | 3688 | support/latexindent/documentation/subsubsec-special.tex
-2019/09/07 | 1460 | support/latexindent/documentation/title.tex
-2019/09/07 | 25975 | support/latexindent/LatexIndent/AlignmentAtAmpersand.pm
-2019/09/07 | 23226 | support/latexindent/LatexIndent/Arguments.pm
-2019/09/07 | 6042 | support/latexindent/LatexIndent/BackUpFileProcedure.pm
-2019/09/07 | 5435 | support/latexindent/LatexIndent/BlankLines.pm
-2019/09/07 | 12661 | support/latexindent/LatexIndent/Braces.pm
-2019/09/07 | 10361 | support/latexindent/LatexIndent/Command.pm
-2019/09/07 | 18042 | support/latexindent/LatexIndent/Document.pm
-2019/09/07 | 1483 | support/latexindent/LatexIndent/DoubleBackSlash.pm
-2019/09/07 | 5937 | support/latexindent/LatexIndent/Else.pm
-2019/09/07 | 6353 | support/latexindent/LatexIndent/Environment.pm
-2019/09/07 | 11466464 | support/latexindent/latexindent.exe
-2019/09/07 | 11862 | support/latexindent/LatexIndent/FileContents.pm
-2019/09/07 | 6513 | support/latexindent/LatexIndent/FileExtension.pm
-2019/09/07 | 43058 | support/latexindent/LatexIndent/GetYamlSettings.pm
-2019/09/07 | 10824 | support/latexindent/LatexIndent/Heading.pm
-2019/09/07 | 9602 | support/latexindent/LatexIndent/HiddenChildren.pm
-2019/09/07 | 3394 | support/latexindent/LatexIndent/HorizontalWhiteSpace.pm
-2019/09/07 | 9542 | support/latexindent/LatexIndent/IfElseFi.pm
-2019/09/07 | 20316 | support/latexindent/LatexIndent/Indent.pm
-2019/09/07 | 6358 | support/latexindent/LatexIndent/Item.pm
-2019/09/07 | 5330 | support/latexindent/LatexIndent/KeyEqualsValuesBraces.pm
-2019/09/07 | 11213 | support/latexindent/LatexIndent/LogFile.pm
-2019/09/07 | 6793 | support/latexindent/LatexIndent/MandatoryArgument.pm
-2019/09/07 | 20424 | support/latexindent/LatexIndent/ModifyLineBreaks.pm
-2019/09/07 | 1602 | support/latexindent/latexindent-module-installer.pl
-2019/09/07 | 3176 | support/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm
-2019/09/07 | 6062 | support/latexindent/LatexIndent/OptionalArgument.pm
-2019/09/07 | 2912 | support/latexindent/latexindent.pl
-2019/09/07 | 3463 | support/latexindent/LatexIndent/Preamble.pm
-2019/09/07 | 3636 | support/latexindent/LatexIndent/Replacement.pm
-2019/09/07 | 4355 | support/latexindent/LatexIndent/RoundBrackets.pm
-2019/09/07 | 19172 | support/latexindent/LatexIndent/Sentence.pm
-2019/09/07 | 13154 | support/latexindent/LatexIndent/Special.pm
-2019/09/07 | 1990 | support/latexindent/LatexIndent/Switches.pm
-2019/09/07 | 3273 | support/latexindent/LatexIndent/Tokens.pm
-2019/09/07 | 6036 | support/latexindent/LatexIndent/TrailingComments.pm
-2019/09/07 | 5777 | support/latexindent/LatexIndent/UnNamedGroupingBracesBrackets.pm
-2019/09/07 | 21098 | support/latexindent/LatexIndent/Verbatim.pm
-2019/09/07 | 834 | support/latexindent/LatexIndent/Version.pm
-2019/09/07 | 1875 | support/latexindent/README
-2019/09/07 | 9504861 | support/latexindent.zip
+2020/03/21 | 17660 | support/latexindent/defaultSettings.yaml
+2020/03/21 | 10429 | support/latexindent/documentation/appendices.tex
+2020/03/21 | 492 | support/latexindent/documentation/cmhlistings.tex
+2020/03/21 | 1896 | support/latexindent/documentation/figure-schematic.tex
+2020/03/21 | 873258 | support/latexindent/documentation/latexindent.pdf
+2020/03/21 | 23161 | support/latexindent/documentation/latexindent.tex
+2020/03/21 | 1595 | support/latexindent/documentation/logo.tex
+2020/03/21 | 246 | support/latexindent/documentation/references.tex
+2020/03/21 | 2538 | support/latexindent/documentation/sec-conclusions-know-limitations.tex
+2020/03/21 | 56399 | support/latexindent/documentation/sec-default-user-local.tex
+2020/03/21 | 2118 | support/latexindent/documentation/sec-demonstration.tex
+2020/03/21 | 7522 | support/latexindent/documentation/sec-fine-tuning.tex
+2020/03/21 | 17241 | support/latexindent/documentation/sec-how-to-use.tex
+2020/03/21 | 9059 | support/latexindent/documentation/sec-indent-config-and-settings.tex
+2020/03/21 | 7882 | support/latexindent/documentation/sec-introduction.tex
+2020/03/21 | 20120 | support/latexindent/documentation/sec-replacements.tex
+2020/03/21 | 102263 | support/latexindent/documentation/sec-the-m-switch.tex
+2020/03/21 | 13839 | support/latexindent/documentation/subsec-commands-and-their-options.tex
+2020/03/21 | 8985 | support/latexindent/documentation/subsec-conflicting-poly-switches.tex
+2020/03/21 | 1646 | support/latexindent/documentation/subsec-noAdditionalIndent-indentRules.tex
+2020/03/21 | 2786 | support/latexindent/documentation/subsec-partnering-poly-switches.tex
+2020/03/21 | 5869 | support/latexindent/documentation/subsubsec-commands-with-arguments.tex
+2020/03/21 | 16308 | support/latexindent/documentation/subsubsec-environments-and-their-arguments.tex
+2020/03/21 | 3381 | support/latexindent/documentation/subsubsec-environments-with-items.tex
+2020/03/21 | 5214 | support/latexindent/documentation/subsubsec-headings.tex
+2020/03/21 | 4799 | support/latexindent/documentation/subsubsec-ifelsefi.tex
+2020/03/21 | 7101 | support/latexindent/documentation/subsubsec-no-add-remaining-code-blocks.tex
+2020/03/21 | 3688 | support/latexindent/documentation/subsubsec-special.tex
+2020/03/21 | 1458 | support/latexindent/documentation/title.tex
+2020/03/21 | 51137 | support/latexindent/LatexIndent/AlignmentAtAmpersand.pm
+2020/03/21 | 23226 | support/latexindent/LatexIndent/Arguments.pm
+2020/03/21 | 6042 | support/latexindent/LatexIndent/BackUpFileProcedure.pm
+2020/03/21 | 5435 | support/latexindent/LatexIndent/BlankLines.pm
+2020/03/21 | 12661 | support/latexindent/LatexIndent/Braces.pm
+2020/03/21 | 10361 | support/latexindent/LatexIndent/Command.pm
+2020/03/21 | 18156 | support/latexindent/LatexIndent/Document.pm
+2020/03/21 | 1483 | support/latexindent/LatexIndent/DoubleBackSlash.pm
+2020/03/21 | 5937 | support/latexindent/LatexIndent/Else.pm
+2020/03/21 | 6353 | support/latexindent/LatexIndent/Environment.pm
+2020/03/21 | 11471745 | support/latexindent/latexindent.exe
+2020/03/21 | 11862 | support/latexindent/LatexIndent/FileContents.pm
+2020/03/21 | 6513 | support/latexindent/LatexIndent/FileExtension.pm
+2020/03/21 | 43396 | support/latexindent/LatexIndent/GetYamlSettings.pm
+2020/03/21 | 10824 | support/latexindent/LatexIndent/Heading.pm
+2020/03/21 | 9602 | support/latexindent/LatexIndent/HiddenChildren.pm
+2020/03/21 | 3394 | support/latexindent/LatexIndent/HorizontalWhiteSpace.pm
+2020/03/21 | 9542 | support/latexindent/LatexIndent/IfElseFi.pm
+2020/03/21 | 20316 | support/latexindent/LatexIndent/Indent.pm
+2020/03/21 | 6358 | support/latexindent/LatexIndent/Item.pm
+2020/03/21 | 5330 | support/latexindent/LatexIndent/KeyEqualsValuesBraces.pm
+2020/03/21 | 11259 | support/latexindent/LatexIndent/LogFile.pm
+2020/03/21 | 6793 | support/latexindent/LatexIndent/MandatoryArgument.pm
+2020/03/21 | 20424 | support/latexindent/LatexIndent/ModifyLineBreaks.pm
+2020/03/21 | 1602 | support/latexindent/latexindent-module-installer.pl
+2020/03/21 | 3176 | support/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm
+2020/03/21 | 6062 | support/latexindent/LatexIndent/OptionalArgument.pm
+2020/03/21 | 2910 | support/latexindent/latexindent.pl
+2020/03/21 | 3463 | support/latexindent/LatexIndent/Preamble.pm
+2020/03/21 | 3636 | support/latexindent/LatexIndent/Replacement.pm
+2020/03/21 | 4355 | support/latexindent/LatexIndent/RoundBrackets.pm
+2020/03/21 | 19864 | support/latexindent/LatexIndent/Sentence.pm
+2020/03/21 | 13154 | support/latexindent/LatexIndent/Special.pm
+2020/03/21 | 1990 | support/latexindent/LatexIndent/Switches.pm
+2020/03/21 | 3273 | support/latexindent/LatexIndent/Tokens.pm
+2020/03/21 | 6036 | support/latexindent/LatexIndent/TrailingComments.pm
+2020/03/21 | 5777 | support/latexindent/LatexIndent/UnNamedGroupingBracesBrackets.pm
+2020/03/21 | 21098 | support/latexindent/LatexIndent/Verbatim.pm
+2020/03/21 | 832 | support/latexindent/LatexIndent/Version.pm
+2020/03/21 | 1873 | support/latexindent/README
+2020/03/21 | 9532541 | support/latexindent.zip
2018/10/17 | 16966 | support/latex-make/figlatex.dtx
2018/10/17 | 224481 | support/latex-make/figlatex.pdf
2001/06/07 | 302 | support/latexmake/latexmake.diz
@@ -271127,9 +271150,9 @@
2019/08/12 | 14654 | systems/win32/w32tex/00FILES.euc
2019/08/12 | 14654 | systems/win32/w32tex/00FILES.sjis
2020/03/13 | 4937896 | systems/win32/w32tex/aleph-w32.tar.xz
-2020/03/15 | 64811544 | systems/win32/w32tex/biblatex-biber.tar.xz
+2020/03/20 | 64811676 | systems/win32/w32tex/biblatex-biber.tar.xz
2016/12/13 | 65971452 | systems/win32/w32tex/cbfonts.tar.xz
-2020/03/18 | 611022 | systems/win32/w32tex/ChangeLog
+2020/03/20 | 611350 | systems/win32/w32tex/ChangeLog
2009/08/03 | 141221 | systems/win32/w32tex/ChangeLog.0
2009/08/03 | 221890 | systems/win32/w32tex/ChangeLog.1
2009/08/03 | 116462 | systems/win32/w32tex/ChangeLog.2
@@ -271153,7 +271176,7 @@
2020/02/29 | 29401516 | systems/win32/w32tex/latex.tar.xz
2020/01/20 | 996420 | systems/win32/w32tex/lcdf-typetools-w32.tar.xz
2020/03/18 | 393157860 | systems/win32/w32tex/ltxpkgdocs.tar.xz
-2020/03/16 | 34505792 | systems/win32/w32tex/ltxpkgs.tar.xz
+2020/03/20 | 34493432 | systems/win32/w32tex/ltxpkgs.tar.xz
2020/03/14 | 3887684 | systems/win32/w32tex/luajittex-dev-w32.tar.xz
2020/03/14 | 3884552 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
2020/03/12 | 3851848 | systems/win32/w32tex/luajittex-w32.tar.xz
@@ -271171,10 +271194,10 @@
2020/02/29 | 1233788 | systems/win32/w32tex/omegaj-w32.tar.xz
2020/03/01 | 355876 | systems/win32/w32tex/otfbeta.tar.xz
2020/03/13 | 20620688 | systems/win32/w32tex/pdftex-w32.tar.xz
-2020/03/17 | 75709416 | systems/win32/w32tex/pgfcontrib.tar.xz
+2020/03/20 | 75737204 | systems/win32/w32tex/pgfcontrib.tar.xz
2015/01/26 | 189072 | systems/win32/w32tex/plain2-2.54-w32.tar.xz
2020/03/02 | 2970172 | systems/win32/w32tex/platex.tar.xz
-2020/03/18 | 1599104 | systems/win32/w32tex/pmx.tar.xz
+2020/03/20 | 1598792 | systems/win32/w32tex/pmx.tar.xz
2020/01/20 | 1168532 | systems/win32/w32tex/pstoedit-w32.tar.xz
2020/03/17 | 278956092 | systems/win32/w32tex/pstricks.tar.xz
2020/01/20 | 517548 | systems/win32/w32tex/psutils-w32.tar.xz
@@ -271191,7 +271214,7 @@
2020/01/19 | 97168 | systems/win32/w32tex/tiff2png-w32.tar.xz
2013/04/08 | 308444 | systems/win32/w32tex/timesnew.tar.xz
2020/03/16 | 2025 | systems/win32/w32tex/TLW64/00README.TLW64
-2020/03/16 | 93926785 | systems/win32/w32tex/TLW64/tl-win64.zip
+2020/03/20 | 93926171 | systems/win32/w32tex/TLW64/tl-win64.zip
2020/01/20 | 818648 | systems/win32/w32tex/ttf2pk-w32.tar.xz
2020/01/20 | 830576 | systems/win32/w32tex/ttf2pt1-w32.tar.xz
2017/10/13 | 1773368 | systems/win32/w32tex/tuftelatex.tar.xz
@@ -271204,7 +271227,7 @@
2013/04/08 | 13748 | systems/win32/w32tex/vf-n2bk.tar.xz
2019/04/08 | 35478888 | systems/win32/w32tex/w32tex-src.tar.xz
2020/03/17 | 98910652 | systems/win32/w32tex/web2c-lib.tar.xz
-2020/03/16 | 42961256 | systems/win32/w32tex/web2c-w32.tar.xz
+2020/03/20 | 42967596 | systems/win32/w32tex/web2c-w32.tar.xz
2020/02/10 | 810988 | systems/win32/w32tex/win64/aleph-w64.tar.xz
2019/12/09 | 22317480 | systems/win32/w32tex/win64/biblatex-biber-w64.tar.xz
2020/03/18 | 1965508 | systems/win32/w32tex/win64/context-w64.tar.xz
@@ -271232,7 +271255,7 @@
2020/01/20 | 406848 | systems/win32/w32tex/win64/omegaj-w64.tar.xz
2020/03/07 | 6276508 | systems/win32/w32tex/win64/pdftex-w64.tar.xz
2015/01/26 | 41440 | systems/win32/w32tex/win64/plain2-2.54-w64.tar.xz
-2020/02/07 | 558052 | systems/win32/w32tex/win64/pmx-w64.tar.xz
+2020/03/20 | 557532 | systems/win32/w32tex/win64/pmx-w64.tar.xz
2020/01/20 | 789804 | systems/win32/w32tex/win64/pstoedit-w64.tar.xz
2020/01/20 | 385896 | systems/win32/w32tex/win64/psutils-w64.tar.xz
2020/03/15 | 1682304 | systems/win32/w32tex/win64/ptex-ng-w64.tar.xz
@@ -271343,7 +271366,7 @@
2004/06/04 | 404 | tds/tds.sed
2004/06/23 | 65418 | tds/tds.tex
2019/05/29 | 304264 | tds.zip
-2020/03/21 | 186 | timestamp
+2020/03/22 | 186 | timestamp
2002/08/26 | 61898 | usergrps/dante/antrag.pdf
2002/08/26 | 118217 | usergrps/dante/antrag.ps
2017/06/30 | 917 | usergrps/dante/dtk/doc/beispiel.bib
diff --git a/FILES.byname.gz b/FILES.byname.gz
index 12ecc03f7c..ccfce4a50e 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index c6c20962b2..e909c933c8 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,30 +1,194 @@
+2020/03/21 | 98937 | info/ptex-manual/ptex-guide-en.pdf
+2020/03/21 | 9602 | support/latexindent/LatexIndent/HiddenChildren.pm
+2020/03/21 | 9542 | support/latexindent/LatexIndent/IfElseFi.pm
+2020/03/21 | 9532541 | support/latexindent.zip
+2020/03/21 | 95260 | info/ptex-manual/eptex_resume.tex
+2020/03/21 | 9059 | support/latexindent/documentation/sec-indent-config-and-settings.tex
+2020/03/21 | 8985 | support/latexindent/documentation/subsec-conflicting-poly-switches.tex
+2020/03/21 | 873258 | support/latexindent/documentation/latexindent.pdf
+2020/03/21 | 840 | dviware/dvisvgm/doc/generate-dvisvgm-sty.xsl
+2020/03/21 | 8409 | dviware/dvisvgm/configure.ac
+2020/03/21 | 832 | support/latexindent/LatexIndent/Version.pm
+2020/03/21 | 7882 | support/latexindent/documentation/sec-introduction.tex
+2020/03/21 | 7522 | support/latexindent/documentation/sec-fine-tuning.tex
+2020/03/21 | 74584 | info/ptex-manual/ptex-manual.tex
+2020/03/21 | 7424301 | macros/latex/contrib/media9.zip
+2020/03/21 | 712 | dviware/dvisvgm/doc/tweak-dblatex-tex.py
+2020/03/21 | 7101 | support/latexindent/documentation/subsubsec-no-add-remaining-code-blocks.tex
+2020/03/21 | 694464 | info/ptex-manual/eptex_resume.pdf
+2020/03/21 | 682158 | dviware/dvisvgm/configure
+2020/03/21 | 6793 | support/latexindent/LatexIndent/MandatoryArgument.pm
+2020/03/21 | 66573 | dviware/dvisvgm/doc/dvisvgm.1
+2020/03/21 | 6513 | support/latexindent/LatexIndent/FileExtension.pm
+2020/03/21 | 63856 | info/ptex-manual/eptexdoc.tex
+2020/03/21 | 6358 | support/latexindent/LatexIndent/Item.pm
+2020/03/21 | 6353 | support/latexindent/LatexIndent/Environment.pm
+2020/03/21 | 6062 | support/latexindent/LatexIndent/OptionalArgument.pm
+2020/03/21 | 6042 | support/latexindent/LatexIndent/BackUpFileProcedure.pm
+2020/03/21 | 6036 | support/latexindent/LatexIndent/TrailingComments.pm
+2020/03/21 | 60145 | dviware/dvisvgm/doc/dvisvgm.txt.in
+2020/03/21 | 59734 | dviware/dvisvgm/src/Makefile.in
+2020/03/21 | 5937 | support/latexindent/LatexIndent/Else.pm
+2020/03/21 | 5928 | dviware/dvisvgm/src/Calculator.cpp
+2020/03/21 | 5869 | support/latexindent/documentation/subsubsec-commands-with-arguments.tex
+2020/03/21 | 5777 | support/latexindent/LatexIndent/UnNamedGroupingBracesBrackets.pm
+2020/03/21 | 56818 | dviware/dvisvgm/aclocal.m4
+2020/03/21 | 56399 | support/latexindent/documentation/sec-default-user-local.tex
+2020/03/21 | 5435 | support/latexindent/LatexIndent/BlankLines.pm
+2020/03/21 | 5330 | support/latexindent/LatexIndent/KeyEqualsValuesBraces.pm
+2020/03/21 | 5214 | support/latexindent/documentation/subsubsec-headings.tex
+2020/03/21 | 51137 | support/latexindent/LatexIndent/AlignmentAtAmpersand.pm
+2020/03/21 | 492 | support/latexindent/documentation/cmhlistings.tex
+2020/03/21 | 4799 | support/latexindent/documentation/subsubsec-ifelsefi.tex
+2020/03/21 | 477777 | macros/latex/contrib/tasks.zip
+2020/03/21 | 465232 | macros/latex/contrib/tasks/tasks-manual.pdf
+2020/03/21 | 4369 | dviware/dvisvgm/config.h.in
+2020/03/21 | 4355 | support/latexindent/LatexIndent/RoundBrackets.pm
+2020/03/21 | 43396 | support/latexindent/LatexIndent/GetYamlSettings.pm
+2020/03/21 | 4282 | info/ptex-manual/ptex-manual.sty
+2020/03/21 | 42357 | info/ptex-manual/ptexdoc_asciimw.tex
+2020/03/21 | 40554 | dviware/dvisvgm/libs/ff-woff/Makefile.in
+2020/03/21 | 403941 | dviware/dvisvgm/ChangeLog
+2020/03/21 | 3927 | dviware/dvisvgm/src/NumericRanges.hpp
+2020/03/21 | 384366 | macros/latex/contrib/glosmathtools.zip
+2020/03/21 | 38159 | info/ptex-manual/ptex-guide-en.tex
+2020/03/21 | 377849 | macros/latex/contrib/glosmathtools/sample_glosmathtools.pdf
+2020/03/21 | 3688 | support/latexindent/documentation/subsubsec-special.tex
+2020/03/21 | 3678 | dviware/dvisvgm/doc/Makefile.am
+2020/03/21 | 3636 | support/latexindent/LatexIndent/Replacement.pm
+2020/03/21 | 35755 | dviware/dvisvgm/NEWS
+2020/03/21 | 3548 | info/expose-expl3-dunkerque-2019/dun19expl3.tex
+2020/03/21 | 35293 | info/ptex-manual/jtex_asciimw.tex
+2020/03/21 | 35280 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss/doc/biblatex-juradiss.tex
+2020/03/21 | 3479555 | dviware/dvisvgm.zip
+2020/03/21 | 347556 | info/ptex-manual/eptexdoc.pdf
+2020/03/21 | 3463 | support/latexindent/LatexIndent/Preamble.pm
+2020/03/21 | 3394 | support/latexindent/LatexIndent/HorizontalWhiteSpace.pm
+2020/03/21 | 339002 | info/expose-expl3-dunkerque-2019.zip
+2020/03/21 | 3381 | support/latexindent/documentation/subsubsec-environments-with-items.tex
+2020/03/21 | 3372 | info/ptex-manual/fam256p.tex
+2020/03/21 | 329490 | info/ptex-manual/ptex-manual.pdf
+2020/03/21 | 3273 | support/latexindent/LatexIndent/Tokens.pm
+2020/03/21 | 3204 | dviware/dvisvgm/tests/CalculatorTest.cpp
+2020/03/21 | 3176 | support/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm
+2020/03/21 | 3173 | info/ptex-manual/fam256d.tex
+2020/03/21 | 31488 | dviware/dvisvgm/libs/brotli/Makefile.in
+2020/03/21 | 309536 | info/expose-expl3-dunkerque-2019/dun19expl3.pdf
+2020/03/21 | 30712 | macros/latex/contrib/tasks/tasks.sty
+2020/03/21 | 2910 | support/latexindent/latexindent.pl
+2020/03/21 | 2829 | dviware/dvisvgm/src/PageRanges.cpp
+2020/03/21 | 2786 | support/latexindent/documentation/subsec-partnering-poly-switches.tex
+2020/03/21 | 27672 | dviware/dvisvgm/Makefile.in
+2020/03/21 | 264764 | info/ptex-manual/ptexdoc_asciimw.pdf
+2020/03/21 | 2618 | dviware/dvisvgm/doc/conf-dblatex-pdf.xsl
+2020/03/21 | 25964 | info/ptex-manual/jfm.tex
+2020/03/21 | 256010 | dviware/dvisvgm/tests/Makefile.in
+2020/03/21 | 2538 | support/latexindent/documentation/sec-conclusions-know-limitations.tex
+2020/03/21 | 251872 | info/ptex-manual/jtex_asciimw.pdf
+2020/03/21 | 2503114 | info/ptex-manual.zip
+2020/03/21 | 246 | support/latexindent/documentation/references.tex
+2020/03/21 | 24681 | dviware/dvisvgm/libs/woff2/Makefile.in
+2020/03/21 | 233 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss/latex/biber.conf
+2020/03/21 | 23226 | support/latexindent/LatexIndent/Arguments.pm
+2020/03/21 | 23161 | support/latexindent/documentation/latexindent.tex
+2020/03/21 | 22166 | dviware/dvisvgm/src/optimizer/Makefile.in
+2020/03/21 | 21313 | dviware/dvisvgm/doc/Makefile.in
+2020/03/21 | 2118 | support/latexindent/documentation/sec-demonstration.tex
+2020/03/21 | 21098 | support/latexindent/LatexIndent/Verbatim.pm
+2020/03/21 | 20804 | dviware/dvisvgm/libs/potrace/Makefile.in
+2020/03/21 | 20424 | support/latexindent/LatexIndent/ModifyLineBreaks.pm
+2020/03/21 | 20341 | info/ptex-manual/jtexdoc_asciimw.tex
+2020/03/21 | 20338 | dviware/dvisvgm/libs/clipper/Makefile.in
+2020/03/21 | 20316 | support/latexindent/LatexIndent/Indent.pm
+2020/03/21 | 20120 | support/latexindent/documentation/sec-replacements.tex
+2020/03/21 | 19936 | dviware/dvisvgm/libs/Makefile.in
+2020/03/21 | 1990 | support/latexindent/LatexIndent/Switches.pm
+2020/03/21 | 19864 | support/latexindent/LatexIndent/Sentence.pm
+2020/03/21 | 19650 | dviware/dvisvgm/libs/xxHash/Makefile.in
+2020/03/21 | 19615 | info/ptex-manual/ptexskip_asciimw.tex
+2020/03/21 | 19545 | dviware/dvisvgm/libs/md5/Makefile.in
+2020/03/21 | 19337 | dviware/dvisvgm/src/DvisvgmSpecialHandler.cpp
+2020/03/21 | 1896 | support/latexindent/documentation/figure-schematic.tex
+2020/03/21 | 1873 | support/latexindent/README
+2020/03/21 | 18381 | macros/latex/contrib/tasks/tasks-manual.tex
+2020/03/21 | 18156 | support/latexindent/LatexIndent/Document.pm
+2020/03/21 | 1786 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss/Changes
+2020/03/21 | 17660 | support/latexindent/defaultSettings.yaml
+2020/03/21 | 17456 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss/latex/biblatex-juradiss.bbx
+2020/03/21 | 17241 | support/latexindent/documentation/sec-how-to-use.tex
+2020/03/21 | 16856 | dviware/dvisvgm/src/Matrix.cpp
+2020/03/21 | 1676 | dviware/dvisvgm/src/PageRanges.hpp
+2020/03/21 | 164929 | info/ptex-manual/ptexskip_asciimw.pdf
+2020/03/21 | 1646 | support/latexindent/documentation/subsec-noAdditionalIndent-indentRules.tex
+2020/03/21 | 164504 | info/ptex-manual/jfm.pdf
+2020/03/21 | 16308 | support/latexindent/documentation/subsubsec-environments-and-their-arguments.tex
+2020/03/21 | 1602 | support/latexindent/latexindent-module-installer.pl
+2020/03/21 | 1595 | support/latexindent/documentation/logo.tex
+2020/03/21 | 1565 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss/README
+2020/03/21 | 15593 | dviware/dvisvgm/libs/variant/Makefile.in
+2020/03/21 | 1516 | info/ptex-manual/LICENSE
+2020/03/21 | 1483 | support/latexindent/LatexIndent/DoubleBackSlash.pm
+2020/03/21 | 1458 | support/latexindent/documentation/title.tex
+2020/03/21 | 145704 | info/ptex-manual/jtexdoc_asciimw.pdf
+2020/03/21 | 13839 | support/latexindent/documentation/subsec-commands-and-their-options.tex
+2020/03/21 | 13688 | dviware/dvisvgm/tests/data/Makefile.in
+2020/03/21 | 13474 | dviware/dvisvgm/m4/Makefile.in
+2020/03/21 | 1332 | macros/latex/contrib/tasks/README
+2020/03/21 | 13266 | dviware/dvisvgm/tests/DvisvgmSpecialTest.cpp
+2020/03/21 | 13154 | support/latexindent/LatexIndent/Special.pm
+2020/03/21 | 128704 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss.zip
+2020/03/21 | 12661 | support/latexindent/LatexIndent/Braces.pm
+2020/03/21 | 1243 | macros/latex/contrib/tasks/tasks.cfg
+2020/03/21 | 12142 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss/latex/biblatex-juradiss.cbx
+2020/03/21 | 1206 | info/ptex-manual/README.md
+2020/03/21 | 11862 | support/latexindent/LatexIndent/FileContents.pm
+2020/03/21 | 1168 | info/expose-expl3-dunkerque-2019/README.md
+2020/03/21 | 11471745 | support/latexindent/latexindent.exe
+2020/03/21 | 11259 | support/latexindent/LatexIndent/LogFile.pm
+2020/03/21 | 109845 | macros/latex/contrib/biblatex-contrib/biblatex-juradiss/doc/biblatex-juradiss.pdf
+2020/03/21 | 10824 | support/latexindent/LatexIndent/Heading.pm
+2020/03/21 | 10429 | support/latexindent/documentation/appendices.tex
+2020/03/21 | 10361 | support/latexindent/LatexIndent/Command.pm
+2020/03/21 | 1026 | info/expose-expl3-dunkerque-2019/LISEZMOI.md
+2020/03/21 | 102263 | support/latexindent/documentation/sec-the-m-switch.tex
+2020/03/21 | 1020 | info/expose-expl3-dunkerque-2019/dk19intro.tex
2020/03/20 | 994304 | macros/luatex/optex.zip
+2020/03/20 | 93926171 | systems/win32/w32tex/TLW64/tl-win64.zip
2020/03/20 | 9340 | macros/latex/contrib/glosmathtools/sample_glosmathtools.tex
2020/03/20 | 874 | macros/latex/contrib/csbulletin/csbulobalka.cls
+2020/03/20 | 79666 | macros/latex/contrib/media9/media9.sty
2020/03/20 | 7649 | fonts/erewhon/README
2020/03/20 | 75807 | macros/latex/contrib/xltabular.zip
+2020/03/20 | 75737204 | systems/win32/w32tex/pgfcontrib.tar.xz
2020/03/20 | 751 | macros/latex/contrib/glosmathtools/README.md
+2020/03/20 | 7429591 | install/macros/latex/contrib/media9.tds.zip
2020/03/20 | 7273 | macros/latex/contrib/csbulletin/csbulletin.tex
2020/03/20 | 724600 | fonts/erewhon/doc/erewhon-doc.pdf
2020/03/20 | 71369 | macros/latex/contrib/xltabular/xltabular-doc.pdf
2020/03/20 | 67382 | macros/luatex/optex/doc/optex-doc.tex
+2020/03/20 | 64811676 | systems/win32/w32tex/biblatex-biber.tar.xz
2020/03/20 | 611 | macros/latex/contrib/scratch3/README
+2020/03/20 | 611350 | systems/win32/w32tex/ChangeLog
+2020/03/20 | 557532 | systems/win32/w32tex/win64/pmx-w64.tar.xz
2020/03/20 | 532 | macros/latex/contrib/csbulletin/README
2020/03/20 | 526284 | macros/latex/contrib/scratch3.zip
2020/03/20 | 508522 | macros/latex/contrib/scratch3/scratch3-fr.pdf
+2020/03/20 | 50233 | macros/latex/contrib/media9/pdfbase.sty
2020/03/20 | 4839000 | install/fonts/erewhon.tds.zip
2020/03/20 | 4769484 | fonts/erewhon.zip
2020/03/20 | 473 | macros/latex/contrib/xltabular/Changes
2020/03/20 | 46184 | macros/latex/contrib/scratch3/scratch3.sty
2020/03/20 | 4310 | macros/musixtex/doc/scripts/musixtex.1
+2020/03/20 | 42967596 | systems/win32/w32tex/web2c-w32.tar.xz
2020/03/20 | 3739 | macros/latex/contrib/csbulletin/csbulacronym.sty
+2020/03/20 | 3727329 | macros/latex/contrib/media9/doc/media9.pdf
2020/03/20 | 361658 | macros/luatex/generic/luatexko.zip
+2020/03/20 | 34493432 | systems/win32/w32tex/ltxpkgs.tar.xz
2020/03/20 | 3297 | macros/latex/contrib/xltabular/xltabular.sty
-2020/03/20 | 329377 | macros/latex/contrib/glosmathtools.zip
-2020/03/20 | 322662 | macros/latex/contrib/glosmathtools/sample_glosmathtools.pdf
2020/03/20 | 31732 | macros/latex/contrib/scratch3/scratch3-fr.tex
2020/03/20 | 3067 | macros/musixtex/README
2020/03/20 | 288252 | macros/latex/contrib/csbulletin.zip
+2020/03/20 | 2846 | info/biblio/typeset.ltx
2020/03/20 | 265 | macros/musixtex/windows/musixtex.bat
2020/03/20 | 264133 | macros/latex/contrib/csbulletin/csbulletin.pdf
2020/03/20 | 2430654 | install/macros/musixtex.tds.zip
@@ -42,6 +206,9 @@
2020/03/20 | 17473 | macros/latex/contrib/csbulletin/csbulobalka.sty
2020/03/20 | 16718 | macros/latex/contrib/glosmathtools/glosmathtools.sty
2020/03/20 | 163979 | macros/luatex/optex/doc/optex-doc.pdf
+2020/03/20 | 1598792 | systems/win32/w32tex/pmx.tar.xz
+2020/03/20 | 13540 | macros/latex/contrib/media9/ChangeLog
+2020/03/20 | 1146469 | info/biblio/typeset.bib
2020/03/20 | 1126 | macros/latex/contrib/csbulletin/csbulv1.cls
2020/03/20 | 111 | macros/musixtex/doc/ChangeLog-130.txt
2020/03/20 | 11060 | fonts/erewhon/doc/erewhon-doc.tex
@@ -564,7 +731,6 @@
2020/03/18 | 663917 | systems/win32/miktex/tm/packages/els-cas-templates.tar.lzma
2020/03/18 | 659025 | systems/win32/miktex/tm/packages/oscola.tar.lzma
2020/03/18 | 652 | macros/latex/contrib/shortmathj/package.json
-2020/03/18 | 611022 | systems/win32/w32tex/ChangeLog
2020/03/18 | 610116 | systems/win32/miktex/tm/packages/biblatex-ext.tar.lzma
2020/03/18 | 596 | macros/latex/contrib/shortmathj/shortmathj-biblatex-mwe.tex
2020/03/18 | 579238 | macros/latex/contrib/nwejm/doc/nwejm-fr.pdf
@@ -609,7 +775,6 @@
2020/03/18 | 172223 | systems/win32/miktex/tm/packages/biblatex-german-legal.tar.lzma
2020/03/18 | 17055 | macros/latex/contrib/latexgit/latexgit.dtx
2020/03/18 | 1683177 | systems/win32/miktex/tm/packages/quran.tar.lzma
-2020/03/18 | 1599104 | systems/win32/w32tex/pmx.tar.xz
2020/03/18 | 1596082 | systems/win32/miktex/tm/packages/milsymb.tar.lzma
2020/03/18 | 1537746 | support/pmx/Windows64bit/pmxab.exe
2020/03/18 | 139785888 | systems/win32/w32tex/context.tar.xz
@@ -625,7 +790,6 @@
2020/03/17 | 84611 | macros/xetex/latex/langsci/documentation/langsci-doc.pdf
2020/03/17 | 833472 | language/korean/pmhanguljamo.zip
2020/03/17 | 76233 | macros/xetex/latex/langsci/langscibook.cls
-2020/03/17 | 75709416 | systems/win32/w32tex/pgfcontrib.tar.xz
2020/03/17 | 748123 | install/macros/latex/contrib/gzt.tds.zip
2020/03/17 | 671 | macros/latex/contrib/beamer-contrib/themes/hitszbeamer/Makefile
2020/03/17 | 659 | macros/latex/contrib/gzt/README.md
@@ -668,7 +832,6 @@
2020/03/16 | 993525 | support/bib2gls/texparserlib.jar
2020/03/16 | 965683 | info/biblio/texbook3.bib
2020/03/16 | 9614 | support/bib2gls/convertgls2bib.1
-2020/03/16 | 93926785 | systems/win32/w32tex/TLW64/tl-win64.zip
2020/03/16 | 9359000 | support/bib2gls.zip
2020/03/16 | 9358 | macros/latex/contrib/l3build/l3build-install.lua
2020/03/16 | 930888 | support/bib2gls/src/bib2gls.tex
@@ -715,7 +878,6 @@
2020/03/16 | 44448 | graphics/pstricks/contrib/pst-fractal/doc/pst-fractal-doc.tex
2020/03/16 | 43948 | support/bib2gls/bib2gls-en.xml
2020/03/16 | 4308 | macros/latex/contrib/l3build/l3build-stdmain.lua
-2020/03/16 | 42961256 | systems/win32/w32tex/web2c-w32.tar.xz
2020/03/16 | 41199 | support/bib2gls/examples/sample-units3.pdf
2020/03/16 | 4078 | support/bib2gls/src/bib2gls-cite.bib
2020/03/16 | 4053 | support/bib2gls/examples/usergroups.bib
@@ -726,7 +888,6 @@
2020/03/16 | 3756 | graphics/pstricks/contrib/pst-fractal/doc/pst-fractal-doc.bib
2020/03/16 | 3672 | support/bib2gls/examples/mathsobjects.bib
2020/03/16 | 3496 | support/bib2gls/examples/books.bib
-2020/03/16 | 34505792 | systems/win32/w32tex/ltxpkgs.tar.xz
2020/03/16 | 34238 | macros/latex/contrib/l3build/l3build-check.lua
2020/03/16 | 338 | support/bib2gls/examples/interpret-preamble2.bib
2020/03/16 | 328 | support/bib2gls/examples/no-interpret-preamble.bib
@@ -842,7 +1003,6 @@
2020/03/15 | 669235 | macros/latex/contrib/biblatex-contrib/biblatex-ext.zip
2020/03/15 | 6671 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-tiecomp.cbx
2020/03/15 | 654486 | macros/luatex/latex/arabluatex/arabluatex.pdf
-2020/03/15 | 64811544 | systems/win32/w32tex/biblatex-biber.tar.xz
2020/03/15 | 640 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-trad3.bbx
2020/03/15 | 640 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-trad2.bbx
2020/03/15 | 640 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-trad1.bbx
@@ -893,7 +1053,6 @@
2020/03/15 | 4555 | macros/xetex/latex/quran/tex/quran-transde.def
2020/03/15 | 45054 | macros/xetex/latex/quran/doc/quran-doc.tex
2020/03/15 | 43259 | macros/latex/contrib/limecv/examples/mwe-xelatex.pdf
-2020/03/15 | 431727 | macros/latex/contrib/beamer-contrib/themes/hitszbeamer/figures/hitlogo.jpg
2020/03/15 | 429395125 | systems/mac/mactex/MacTeXtras-20200315.zip
2020/03/15 | 42544 | macros/latex/contrib/limecv/examples/mwe-lualatex.pdf
2020/03/15 | 4111 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-numeric.cbx
@@ -911,7 +1070,6 @@
2020/03/15 | 35786 | macros/luatex/latex/arabluatex/arabluatex_trans.lua
2020/03/15 | 3551 | macros/luatex/latex/arabluatex/arabluatex.ins
2020/03/15 | 3548 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-numeric-verb.cbx
-2020/03/15 | 3477979 | dviware/dvisvgm.zip
2020/03/15 | 3466 | macros/latex/contrib/biblatex-contrib/oscola/README.md
2020/03/15 | 340142 | macros/latex/contrib/nicematrix/nicematrix-french.pdf
2020/03/15 | 331344 | macros/xetex/latex/quran/doc/quran-doc.pdf
@@ -977,55 +1135,3 @@
2020/03/15 | 1079786 | graphics/pgf/contrib/milsymb/milsymb.pdf
2020/03/15 | 107559 | graphics/pgf/contrib/milsymb/milsymb.tex
2020/03/15 | 102331 | macros/latex/contrib/biblatex-contrib/oscola/oscola.bbx
-2020/03/14 | 96397 | systems/doc/luatex/luatex-tex.tex
-2020/03/14 | 91219 | language/korean/kotex-oblivoir/doc/oblivoir-simpledoc.tex
-2020/03/14 | 85866 | macros/generic/schemata/schemata.dtx
-2020/03/14 | 846098 | systems/win32/miktex/tm/packages/tugboat.tar.lzma
-2020/03/14 | 765968 | systems/win32/miktex/tm/packages/l3backend.tar.lzma
-2020/03/14 | 7640 | systems/doc/luatex/luatex-harfbuzz.tex
-2020/03/14 | 68812 | systems/doc/luatex/luatex-math.tex
-2020/03/14 | 67921 | macros/latex/contrib/els-cas-templates/cas-common.sty
-2020/03/14 | 629768 | macros/generic/schemata/schemata.pdf
-2020/03/14 | 6134 | biblio/bibtex/contrib/gbt7714/README.md
-2020/03/14 | 566652 | systems/win32/miktex/tm/packages/hep-paper.tar.lzma
-2020/03/14 | 5012 | systems/doc/luatex/luatex-preamble.tex
-2020/03/14 | 48178 | systems/doc/luatex/luatex-modifications.tex
-2020/03/14 | 431641 | macros/latex/contrib/beamer-contrib/themes/hitszbeamer/figures/hitlogo-mask.jpg
-2020/03/14 | 42120 | systems/doc/luatex/luatex-fonts.tex
-2020/03/14 | 4165 | macros/latex/contrib/els-cas-templates/cas-sc.cls
-2020/03/14 | 416081 | systems/win32/miktex/tm/packages/thesis-gwu.tar.lzma
-2020/03/14 | 4131 | macros/latex/contrib/els-cas-templates/cas-dc.cls
-2020/03/14 | 3892 | macros/generic/schemata/README
-2020/03/14 | 3887684 | systems/win32/w32tex/luajittex-dev-w32.tar.xz
-2020/03/14 | 3884552 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
-2020/03/14 | 375475 | biblio/bibtex/contrib/gbt7714.zip
-2020/03/14 | 36373 | macros/latex/contrib/draftwatermark/draftwatermark.dtx
-2020/03/14 | 35672 | systems/doc/luatex/luatex-backend.tex
-2020/03/14 | 35529 | systems/doc/luatex/luatex-callbacks.tex
-2020/03/14 | 3492068 | systems/win32/w32tex/win64/luajittex-dev-w64.tar.xz
-2020/03/14 | 3482372 | systems/win32/w32tex/win64/luajittex-exp-w64.tar.xz
-2020/03/14 | 344970 | language/korean/kotex-oblivoir.zip
-2020/03/14 | 344133 | biblio/bibtex/contrib/gbt7714/gbt7714.pdf
-2020/03/14 | 3231 | macros/latex/contrib/draftwatermark/draftwatermark.ins
-2020/03/14 | 3124 | systems/doc/luatex/luatex.tex
-2020/03/14 | 3124556 | systems/win32/w32tex/win64/luatex-dev-w64.tar.xz
-2020/03/14 | 3124504 | systems/win32/w32tex/win64/luatex-exp-w64.tar.xz
-2020/03/14 | 301132 | systems/win32/miktex/tm/packages/acronym.tar.lzma
-2020/03/14 | 274931 | systems/win32/miktex/tm/packages/unicode-data.tar.lzma
-2020/03/14 | 2606636 | systems/win32/w32tex/dvitools-w32.tar.xz
-2020/03/14 | 2338108 | systems/win32/w32tex/win64/dvitools-w64.tar.xz
-2020/03/14 | 230610 | language/korean/kotex-oblivoir/doc/oblivoir-simpledoc.pdf
-2020/03/14 | 22158 | language/korean/kotex-oblivoir/ChangeLog
-2020/03/14 | 2057388 | systems/win32/miktex/tm/packages/scholax.tar.lzma
-2020/03/14 | 193879 | macros/latex/contrib/draftwatermark.zip
-2020/03/14 | 1895 | macros/latex/contrib/els-cas-templates/manifest.txt
-2020/03/14 | 187652 | systems/doc/luatex/graphics/luaharfbuzz.pdf
-2020/03/14 | 182386 | macros/latex/contrib/draftwatermark/draftwatermark.pdf
-2020/03/14 | 1756287 | systems/doc/luatex/luatex.pdf
-2020/03/14 | 171572 | macros/latex/contrib/biblatex-contrib/biblatex-german-legal.zip
-2020/03/14 | 1652 | macros/latex/contrib/els-cas-templates/README
-2020/03/14 | 1550 | macros/latex/contrib/draftwatermark/README
-2020/03/14 | 1356 | language/korean/kotex-oblivoir/README
-2020/03/14 | 1278925 | macros/latex/contrib/els-cas-templates.zip
-2020/03/14 | 1102 | biblio/bibtex/contrib/gbt7714/gbt7714.ins
-2020/03/14 | 106804 | biblio/bibtex/contrib/gbt7714/gbt7714.dtx
diff --git a/dviware/dvisvgm/ChangeLog b/dviware/dvisvgm/ChangeLog
index 9b23cf074b..725017aba8 100644
--- a/dviware/dvisvgm/ChangeLog
+++ b/dviware/dvisvgm/ChangeLog
@@ -1,3 +1,49 @@
+2020-03-21 Martin Gieseking <martin.gieseking@uos.de>
+
+ * src/Matrix.cpp:
+ fixed parsing of "scale(s)"
+fixes #131
+
+ * .appveyor.yml, .travis.yml, configure.ac, doc/dvisvgm.1, src/Doxyfile,
+ src/version.hpp:
+ set version to 2.9.1
+
+ * NEWS:
+ updated NEWS
+
+2020-03-20 Martin Gieseking <martin.gieseking@uos.de>
+
+ * src/Calculator.cpp, tests/CalculatorTest.cpp:
+ calculator: allow to omit '*' before '('
+
+2020-03-19 Martin Gieseking <martin.gieseking@uos.de>
+
+ * doc/dvisvgm.1, doc/dvisvgm.txt.in, src/DvisvgmSpecialHandler.cpp,
+ tests/DvisvgmSpecialTest.cpp:
+ added macro {?(expr)} to enable math expressions in raw specials
+closes
+ #130
+
+2020-03-17 Martin Gieseking <martin.gieseking@uos.de>
+
+ * doc/Makefile.am, doc/conf-dblatex-pdf.xsl, doc/dvisvgm.txt.in,
+ doc/generate-dvisvgm-sty.xsl, doc/tweak-dblatex-tex.py:
+ optimize line breaks and code blocks in pdf manpage
+
+2020-03-16 Martin Gieseking <martin.gieseking@uos.de>
+
+ * doc/conf-dblatex-pdf.xsl:
+ small font changes in pdf version of manual page
+- changed body font to
+ Source Serif Pro
+- scaled monospace font by 0.9
+
+ * src/PageRanges.cpp, src/PageRanges.hpp:
+ removed redundant #includes
+
+ * src/NumericRanges.hpp:
+ replaced explicit iterator type with auto
+
2020-03-13 Martin Gieseking <martin.gieseking@uos.de>
* NEWS:
diff --git a/dviware/dvisvgm/NEWS b/dviware/dvisvgm/NEWS
index 0f58739ca2..e898c38bd3 100644
--- a/dviware/dvisvgm/NEWS
+++ b/dviware/dvisvgm/NEWS
@@ -1,3 +1,12 @@
+dvisvgm-2.9.1 (2020-03-21)
+- added macro {?(expr)} to enable the evaluation of math expressions in
+ raw SVG fragments (GH #130)
+- multiplication operator "*" preceding an opening parentheses can now be
+ omitted in math expressions
+- fixed the evaluation of transformation command "scale(c)" which is now
+ correctly treated as "scale(c, c)" (GH #131)
+- minor layout optimizations of the PDF manual page
+
dvisvgm-2.9 (2020-03-13)
- added processing of PS operators 'image' and 'colorimage' to embed bitmaps
present in PS/PDF data into the generated SVG
diff --git a/dviware/dvisvgm/configure b/dviware/dvisvgm/configure
index c1eb843556..55663f51f2 100755
--- a/dviware/dvisvgm/configure
+++ b/dviware/dvisvgm/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for dvisvgm 2.9.
+# Generated by GNU Autoconf 2.69 for dvisvgm 2.9.1.
#
# Report bugs to <martin.gieseking@uos.de>.
#
@@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='dvisvgm'
PACKAGE_TARNAME='dvisvgm'
-PACKAGE_VERSION='2.9'
-PACKAGE_STRING='dvisvgm 2.9'
+PACKAGE_VERSION='2.9.1'
+PACKAGE_STRING='dvisvgm 2.9.1'
PACKAGE_BUGREPORT='martin.gieseking@uos.de'
PACKAGE_URL=''
@@ -1406,7 +1406,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures dvisvgm 2.9 to adapt to many kinds of systems.
+\`configure' configures dvisvgm 2.9.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1477,7 +1477,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of dvisvgm 2.9:";;
+ short | recursive ) echo "Configuration of dvisvgm 2.9.1:";;
esac
cat <<\_ACEOF
@@ -1625,7 +1625,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-dvisvgm configure 2.9
+dvisvgm configure 2.9.1
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2169,7 +2169,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by dvisvgm $as_me 2.9, which was
+It was created by dvisvgm $as_me 2.9.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3157,7 +3157,7 @@ fi
# Define the identity of the package.
PACKAGE='dvisvgm'
- VERSION='2.9'
+ VERSION='2.9.1'
cat >>confdefs.h <<_ACEOF
@@ -20138,7 +20138,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by dvisvgm $as_me 2.9, which was
+This file was extended by dvisvgm $as_me 2.9.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -20204,7 +20204,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-dvisvgm config.status 2.9
+dvisvgm config.status 2.9.1
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/dviware/dvisvgm/configure.ac b/dviware/dvisvgm/configure.ac
index 532bc08795..783d2709a8 100644
--- a/dviware/dvisvgm/configure.ac
+++ b/dviware/dvisvgm/configure.ac
@@ -4,7 +4,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
-AC_INIT([dvisvgm],[2.9],[martin.gieseking@uos.de])
+AC_INIT([dvisvgm],[2.9.1],[martin.gieseking@uos.de])
DATE="March 2020"
AC_CONFIG_SRCDIR(src)
AC_CONFIG_HEADERS([config.h])
diff --git a/dviware/dvisvgm/doc/Makefile.am b/dviware/dvisvgm/doc/Makefile.am
index fdbc24e1ce..92c7d25efd 100644
--- a/dviware/dvisvgm/doc/Makefile.am
+++ b/dviware/dvisvgm/doc/Makefile.am
@@ -15,6 +15,7 @@ EXTRA_DIST = $(man_MANS) \
dvisvgm.txt.in \
generate-dvisvgm-sty.xsl \
tweak-dblatex-pdf.xsl \
+ tweak-dblatex-tex.py \
tweak-db-refentry.xsl
if BUILD_MANPAGE
@@ -22,6 +23,7 @@ if BUILD_MANPAGE
CONF_DBLATEX_MAN = $(dvisvgm_srcdir)/doc/conf-dblatex-man.xsl
CONF_DBLATEX_PDF = $(dvisvgm_srcdir)/doc/conf-dblatex-pdf.xsl
TWEAK_DBLATEX_PDF = $(dvisvgm_srcdir)/doc/tweak-dblatex-pdf.xsl
+TWEAK_DBLATEX_TEX = $(dvisvgm_srcdir)/doc/tweak-dblatex-tex.py
TWEAK_DB_ARTICLE = $(dvisvgm_srcdir)/doc/tweak-db-article.xsl
TWEAK_DB_REFENTRY = $(dvisvgm_srcdir)/doc/tweak-db-refentry.xsl
GEN_DBLATEX_STY = $(dvisvgm_srcdir)/doc/generate-dvisvgm-sty.xsl
@@ -31,10 +33,10 @@ DB_VARS = man.endnotes.list.enabled=0 man.endnotes.are.numbered=0 man.authors.se
dvisvgm.1: dvisvgm-man.xml $(CONF_DBLATEX_MAN)
xmlto -m $(CONF_DBLATEX_MAN) $(addprefix --stringparam , $(DB_VARS)) man $<
-dvisvgm.pdf: dvisvgm-man.xml dvisvgm.sty $(CONF_DBLATEX_PDF) $(TWEAK_DBLATEX_PDF)
+dvisvgm.pdf: dvisvgm-man.xml dvisvgm.sty $(CONF_DBLATEX_PDF) $(TWEAK_DBLATEX_PDF) $(TWEAK_DBLATEX_TEX)
mv $< $<.tmp
xsltproc -o $< $(TWEAK_DBLATEX_PDF) $<.tmp
- dblatex -bxetex --texstyle=./dvisvgm.sty -p $(CONF_DBLATEX_PDF) $<
+ dblatex -bxetex --texstyle=./dvisvgm.sty -p $(CONF_DBLATEX_PDF) -r plugin:$(basename $(TWEAK_DBLATEX_TEX)) $<
mv $<.tmp $<
mv $(basename $<).pdf $@
diff --git a/dviware/dvisvgm/doc/Makefile.in b/dviware/dvisvgm/doc/Makefile.in
index 35bceae1d1..8568648c65 100644
--- a/dviware/dvisvgm/doc/Makefile.in
+++ b/dviware/dvisvgm/doc/Makefile.in
@@ -325,11 +325,13 @@ EXTRA_DIST = $(man_MANS) \
dvisvgm.txt.in \
generate-dvisvgm-sty.xsl \
tweak-dblatex-pdf.xsl \
+ tweak-dblatex-tex.py \
tweak-db-refentry.xsl
@BUILD_MANPAGE_TRUE@CONF_DBLATEX_MAN = $(dvisvgm_srcdir)/doc/conf-dblatex-man.xsl
@BUILD_MANPAGE_TRUE@CONF_DBLATEX_PDF = $(dvisvgm_srcdir)/doc/conf-dblatex-pdf.xsl
@BUILD_MANPAGE_TRUE@TWEAK_DBLATEX_PDF = $(dvisvgm_srcdir)/doc/tweak-dblatex-pdf.xsl
+@BUILD_MANPAGE_TRUE@TWEAK_DBLATEX_TEX = $(dvisvgm_srcdir)/doc/tweak-dblatex-tex.py
@BUILD_MANPAGE_TRUE@TWEAK_DB_ARTICLE = $(dvisvgm_srcdir)/doc/tweak-db-article.xsl
@BUILD_MANPAGE_TRUE@TWEAK_DB_REFENTRY = $(dvisvgm_srcdir)/doc/tweak-db-refentry.xsl
@BUILD_MANPAGE_TRUE@GEN_DBLATEX_STY = $(dvisvgm_srcdir)/doc/generate-dvisvgm-sty.xsl
@@ -583,10 +585,10 @@ uninstall-man: uninstall-man1
@BUILD_MANPAGE_TRUE@dvisvgm.1: dvisvgm-man.xml $(CONF_DBLATEX_MAN)
@BUILD_MANPAGE_TRUE@ xmlto -m $(CONF_DBLATEX_MAN) $(addprefix --stringparam , $(DB_VARS)) man $<
-@BUILD_MANPAGE_TRUE@dvisvgm.pdf: dvisvgm-man.xml dvisvgm.sty $(CONF_DBLATEX_PDF) $(TWEAK_DBLATEX_PDF)
+@BUILD_MANPAGE_TRUE@dvisvgm.pdf: dvisvgm-man.xml dvisvgm.sty $(CONF_DBLATEX_PDF) $(TWEAK_DBLATEX_PDF) $(TWEAK_DBLATEX_TEX)
@BUILD_MANPAGE_TRUE@ mv $< $<.tmp
@BUILD_MANPAGE_TRUE@ xsltproc -o $< $(TWEAK_DBLATEX_PDF) $<.tmp
-@BUILD_MANPAGE_TRUE@ dblatex -bxetex --texstyle=./dvisvgm.sty -p $(CONF_DBLATEX_PDF) $<
+@BUILD_MANPAGE_TRUE@ dblatex -bxetex --texstyle=./dvisvgm.sty -p $(CONF_DBLATEX_PDF) -r plugin:$(basename $(TWEAK_DBLATEX_TEX)) $<
@BUILD_MANPAGE_TRUE@ mv $<.tmp $<
@BUILD_MANPAGE_TRUE@ mv $(basename $<).pdf $@
diff --git a/dviware/dvisvgm/doc/conf-dblatex-pdf.xsl b/dviware/dvisvgm/doc/conf-dblatex-pdf.xsl
index 321bc0f4fb..bb3bd93b63 100644
--- a/dviware/dvisvgm/doc/conf-dblatex-pdf.xsl
+++ b/dviware/dvisvgm/doc/conf-dblatex-pdf.xsl
@@ -3,15 +3,16 @@
<!-- Copyright (C) 2015-2020 Martin Gieseking <martin.gieseking@uos.de> -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="xetex.font">
- <xsl:text>\setmainfont{Source Sans Pro}&#10;</xsl:text>
+ <xsl:text>\setmainfont{Source Serif Pro}&#10;</xsl:text>
<xsl:text>\setsansfont{Source Sans Pro}&#10;</xsl:text>
- <xsl:text>\setmonofont{Source Code Pro}&#10;</xsl:text>
+ <xsl:text>\setmonofont[Scale=0.9]{Source Code Pro}&#10;</xsl:text>
</xsl:param>
<xsl:param name="doc.toc.show">0</xsl:param>
<xsl:param name="refentry.numbered">0</xsl:param>
<xsl:param name="figure.caution">caution</xsl:param>
<xsl:param name="figure.note">note</xsl:param>
+ <xsl:param name="literal.layout.options"/>
<xsl:param name="table.default.tabstyle">tabular</xsl:param>
<xsl:param name="table.in.float">0</xsl:param>
<xsl:param name="term.breakline">1</xsl:param>
@@ -55,7 +56,7 @@
<xsl:text>\phantomsection\pdfbookmark[3]{</xsl:text>
<xsl:choose>
<xsl:when test="contains(emphasis, '--')">
- <xsl:value-of select="concat('-{}-', substring-after(emphasis, '--'))"/>
+ <xsl:value-of select="substring-after(emphasis, '--')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="emphasis"/>
diff --git a/dviware/dvisvgm/doc/dvisvgm.1 b/dviware/dvisvgm/doc/dvisvgm.1
index 43fd7e1126..67cc037d26 100644
--- a/dviware/dvisvgm/doc/dvisvgm.1
+++ b/dviware/dvisvgm/doc/dvisvgm.1
@@ -2,12 +2,12 @@
.\" Title: dvisvgm
.\" Author: Martin Gieseking <martin.gieseking@uos.de>
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\" Date: 2020-03-08
+.\" Date: 2020-03-19
.\" Manual: dvisvgm Manual
-.\" Source: dvisvgm 2.9
+.\" Source: dvisvgm 2.9.1
.\" Language: English
.\"
-.TH "DVISVGM" "1" "2020\-03\-08" "dvisvgm 2\&.9" "dvisvgm Manual"
+.TH "DVISVGM" "1" "2020\-03\-19" "dvisvgm 2\&.9\&.1" "dvisvgm Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -329,7 +329,7 @@ or
to the font format, e\&.g\&.
\fB\-\-font\-format=woff,autohint\fR
or
-\fB\-\-font\-format=woff,ah\fR\&.
+\fB\-\-fwoff,ah\fR\&.
.sp
Option
\fB\-\-font\-format\fR
@@ -1177,9 +1177,9 @@ dvisvgm offers its own small set of specials\&. The following list gives a brief
\fBdvisvgm:raw\fR \fItext\fR
.RS 4
Adds an arbitrary sequence of XML nodes to the page section of the SVG document\&. dvisvgm checks syntax and proper nesting of the inserted elements but does not perform any validation, thus the user has to ensure that the resulting SVG is still valid\&. Opening and closing tags may be distributed among different
-\fBraw\fR
-specials\&. The tags themselves can also be split but must be continued with the immediatly following
-\fBraw\fR
+\fIraw\fR
+specials\&. The tags themselves can also be split but must be continued with the immediately following
+\fIraw\fR
special\&. Both syntactically incorrect and wrongly nested tags lead to error messages\&. Parameter
\fItext\fR
may also contain the expressions
@@ -1191,9 +1191,16 @@ that expand to the current
\fIx\fR
or
\fIy\fR
-coordinate, the current color, and current transformation matrix, respectively\&. Furthermore,
+coordinate, the current color, and current transformation matrix, respectively\&. Character sequence
\fB{?nl}\fR
-expands to a newline character\&.
+expands to a newline character\&. Finally, constructions of the form
+\fB{?(\fR\fB\fIexpr\fR\fR\fB)}\fR
+enable the evaluation of mathematical expressions which may consist of basic arithmetic operations including modulo\&. Like above, the variables
+\fIx\fR
+and
+\fIy\fR
+represent the current coordinates\&. Example:
+\fB{?(\-10*(x+2y)\-5)}\fR\&.
.RE
.PP
\fBdvisvgm:rawdef\fR \fItext\fR
diff --git a/dviware/dvisvgm/doc/dvisvgm.txt.in b/dviware/dvisvgm/doc/dvisvgm.txt.in
index 7afc9138b9..2b51b57c32 100644
--- a/dviware/dvisvgm/doc/dvisvgm.txt.in
+++ b/dviware/dvisvgm/doc/dvisvgm.txt.in
@@ -22,7 +22,7 @@ Martin Gieseking <@PACKAGE_BUGREPORT@>
:man source: dvisvgm
:man version: @VERSION@
:man manual: dvisvgm Manual
-:revdate: 2020-03-08 09:20 +0100
+:revdate: 2020-03-19 22:06 +0100
Name
----
@@ -224,7 +224,7 @@ version 1 and 2).
By default, dvisvgm creates unhinted fonts that might look bad on low-resolution devices. In order to
improve the display quality, the generated TrueType, WOFF, or WOFF2 fonts can be autohinted. The
autohinter is enabled by appending +,autohint+ or +,ah+ to the font format,
-e.g. +--font-format=woff,autohint+ or +--font-format=woff,ah+.
+e.g. +--font-format=woff,autohint+ or +--fwoff,ah+.
+
Option *--font-format* is only available if dvisvgm was built with WOFF support enabled.
@@ -722,12 +722,15 @@ dvisvgm offers its own small set of specials. The following list gives a brief o
*dvisvgm:raw* 'text';;
Adds an arbitrary sequence of XML nodes to the page section of the SVG document. dvisvgm checks syntax and
proper nesting of the inserted elements but does not perform any validation, thus the user has to ensure
- that the resulting SVG is still valid. Opening and closing tags may be distributed among different +raw+
- specials. The tags themselves can also be split but must be continued with the immediatly following +raw+
+ that the resulting SVG is still valid. Opening and closing tags may be distributed among different 'raw'
+ specials. The tags themselves can also be split but must be continued with the immediately following 'raw'
special. Both syntactically incorrect and wrongly nested tags lead to error messages.
Parameter 'text' may also contain the expressions *{?x}*, *{?y}*, *{?color}*, and *{?matrix}* that expand to
the current 'x' or 'y' coordinate, the current color, and current transformation matrix, respectively.
- Furthermore, *{?nl}* expands to a newline character.
+ Character sequence *{?nl}* expands to a newline character. Finally, constructions of the form *{?(__expr__)}*
+ enable the evaluation of mathematical expressions which may consist of basic arithmetic operations including
+ modulo. Like above, the variables 'x' and 'y' represent the current coordinates.
+ Example: +{?(-10*(x+2y)-5)}+.
*dvisvgm:rawdef* 'text';;
This command is similar to *dvisvgm:raw*, but puts the XML nodes into the <defs> section of the SVG document
diff --git a/dviware/dvisvgm/doc/generate-dvisvgm-sty.xsl b/dviware/dvisvgm/doc/generate-dvisvgm-sty.xsl
index bdb279da99..7a3ae6a770 100644
--- a/dviware/dvisvgm/doc/generate-dvisvgm-sty.xsl
+++ b/dviware/dvisvgm/doc/generate-dvisvgm-sty.xsl
@@ -7,6 +7,7 @@
\ProvidesPackage{dvisvgm}[2015/02/04 dvisvgm DocBook style]
\RequirePackageWithOptions{docbook}
\RequirePackage[english]{babel}
+\RequirePackage[shortcuts]{extdash}
\RequirePackage{underscore}
\renewcommand*{\arraystretch}{-0.4}
\AtBeginDocument{%
diff --git a/dviware/dvisvgm/doc/tweak-dblatex-tex.py b/dviware/dvisvgm/doc/tweak-dblatex-tex.py
new file mode 100644
index 0000000000..3f34d94e65
--- /dev/null
+++ b/dviware/dvisvgm/doc/tweak-dblatex-tex.py
@@ -0,0 +1,18 @@
+import re
+import os
+
+def main (latex_file, stdout):
+ latex_file_old = latex_file+"-old"
+ os.rename(latex_file, latex_file_old)
+ os.remove(os.path.splitext(latex_file)[0]+".pdf")
+ with open(latex_file, "w") as outfile:
+ with open(latex_file_old) as infile:
+ lines = infile.readlines()
+ for line in lines:
+ if re.match(r'(.*\\def)|(.*\\href)', line) == None:
+ line = re.sub(r'([a-zA-Z0-9]+)/', r'\1\slash{}', line)
+ line = re.sub(r'-{}-{}', r'\=/\=/', line)
+ line = re.sub(r'([^a-zA-Z0-9])-{}', r'\1\=/', line)
+ print >>outfile, line.rstrip()
+ os.remove(latex_file_old)
+ return 0
diff --git a/dviware/dvisvgm/src/Calculator.cpp b/dviware/dvisvgm/src/Calculator.cpp
index c5dc00df4d..0fdcf0f2fa 100644
--- a/dviware/dvisvgm/src/Calculator.cpp
+++ b/dviware/dvisvgm/src/Calculator.cpp
@@ -71,6 +71,7 @@ double Calculator::term (istream &is, bool skip) { // term:
for (;;)
switch (lookAhead(is)) {
case '*': left *= prim(is, true); break; // prim '*' prim => $1 * $3
+ case '(': left *= prim(is, false); break; // prim '*' prim => $1 * $3
case '/': { // prim '/' prim => $1 / $3
double denom = prim(is, true);
if (denom == 0)
diff --git a/dviware/dvisvgm/src/DvisvgmSpecialHandler.cpp b/dviware/dvisvgm/src/DvisvgmSpecialHandler.cpp
index b2af27d636..1f331659f0 100644
--- a/dviware/dvisvgm/src/DvisvgmSpecialHandler.cpp
+++ b/dviware/dvisvgm/src/DvisvgmSpecialHandler.cpp
@@ -21,6 +21,7 @@
#include <array>
#include <cstring>
#include <utility>
+#include "Calculator.hpp"
#include "DvisvgmSpecialHandler.hpp"
#include "InputBuffer.hpp"
#include "InputReader.hpp"
@@ -190,6 +191,35 @@ static void expand_constants (string &str, SpecialActions &actions) {
}
+/** Evaluates substrings of the form {?(expr)} where 'expr' is a math expression,
+ * and replaces the substring by the computed value.
+ * @param[in,out] str string to scan for expressions */
+static void evaluate_expressions (string &str, SpecialActions &actions) {
+ size_t left = str.find("{?("); // start position of expression macro
+ while (left != string::npos) {
+ size_t right = str.find(")}", left+2); // end position of expression macro
+ if (right == string::npos)
+ break;
+ Calculator calc;
+ calc.setVariable("x", actions.getX());
+ calc.setVariable("y", actions.getY());
+ string expr = str.substr(left+3, right-left-3); // math expression to evaluate
+ if (util::normalize_space(expr).empty()) // no expression given, e.g. {?( )}
+ str.erase(left, right-left+2); // => replace with empty string
+ else {
+ try {
+ double val = calc.eval(expr);
+ str.replace(left, right-left+2, XMLString(val));
+ }
+ catch (CalculatorException &e) {
+ throw SpecialException(string(e.what())+" in '{?("+expr+")}'");
+ }
+ }
+ left = str.find("{?(", right+1); // find next expression macro
+ }
+}
+
+
/** Processes raw SVG fragments from the input stream. The SVG data must represent
* a single or multiple syntactically complete XML parts, like opening/closing tags,
* comments, or CDATA blocks. These must not be split and distributed over several
@@ -199,6 +229,7 @@ void DvisvgmSpecialHandler::processRaw (InputReader &ir, SpecialActions &actions
if (_nestingLevel == 0) {
string xml = ir.getLine();
if (!xml.empty()) {
+ evaluate_expressions(xml, actions);
expand_constants(xml, actions);
_pageParser.parse(xml, actions);
}
@@ -536,4 +567,4 @@ void DvisvgmSpecialHandler::XMLParser::flush (SpecialActions &actions) {
tags.resize(tags.length()-2);
throw SpecialException("missing closing tags: "+tags);
}
-} \ No newline at end of file
+}
diff --git a/dviware/dvisvgm/src/Matrix.cpp b/dviware/dvisvgm/src/Matrix.cpp
index 75d571877a..d0dcb2124d 100644
--- a/dviware/dvisvgm/src/Matrix.cpp
+++ b/dviware/dvisvgm/src/Matrix.cpp
@@ -538,7 +538,7 @@ Matrix Matrix::parseSVGTransform (const string &transform) {
}
else if (parse_transform_cmd(iss, "scale", 1, 2, params)) {
if (params.size() == 1)
- params.push_back(1);
+ params.push_back(params[0]);
if (ne(params[0], 1) || ne(params[1], 1))
matrix.rmultiply(ScalingMatrix(params[0], params[1]));
}
diff --git a/dviware/dvisvgm/src/NumericRanges.hpp b/dviware/dvisvgm/src/NumericRanges.hpp
index a6ee109568..1669f7ddce 100644
--- a/dviware/dvisvgm/src/NumericRanges.hpp
+++ b/dviware/dvisvgm/src/NumericRanges.hpp
@@ -26,8 +26,7 @@
#include <utility>
template <class T>
-class NumericRanges
-{
+class NumericRanges {
public:
using Range = std::pair<T,T>;
using Container = std::list<Range>;
@@ -54,7 +53,7 @@ template <class T>
void NumericRanges<T>::addRange (T first, T last) {
if (first > last)
std::swap(first, last);
- typename Container::iterator it = _ranges.begin();
+ auto it = _ranges.begin();
while (it != _ranges.end() && first > it->first+1 && first > it->second+1)
++it;
if (it == _ranges.end() || last < it->first-1 || first > it->second+1)
@@ -65,8 +64,8 @@ void NumericRanges<T>::addRange (T first, T last) {
}
// merge adjacent ranges
if (it != _ranges.end()) {
- typename Container::iterator l = it;
- typename Container::iterator r = it;
+ auto l = it;
+ auto r = it;
if (l == _ranges.begin())
l = _ranges.end();
else
diff --git a/dviware/dvisvgm/src/PageRanges.cpp b/dviware/dvisvgm/src/PageRanges.cpp
index a08ad4aa54..2623d2ef46 100644
--- a/dviware/dvisvgm/src/PageRanges.cpp
+++ b/dviware/dvisvgm/src/PageRanges.cpp
@@ -18,7 +18,6 @@
** along with this program; if not, see <http://www.gnu.org/licenses/>. **
*************************************************************************/
-#include <sstream>
#include "InputBuffer.hpp"
#include "InputReader.hpp"
#include "PageRanges.hpp"
diff --git a/dviware/dvisvgm/src/PageRanges.hpp b/dviware/dvisvgm/src/PageRanges.hpp
index e6909b9cd1..555338449a 100644
--- a/dviware/dvisvgm/src/PageRanges.hpp
+++ b/dviware/dvisvgm/src/PageRanges.hpp
@@ -21,13 +21,10 @@
#ifndef PAGERANGES_HPP
#define PAGERANGES_HPP
-#include <list>
#include <string>
-#include <utility>
#include "NumericRanges.hpp"
-class PageRanges : public NumericRanges<int>
-{
+class PageRanges : public NumericRanges<int> {
public:
bool parse (const std::string &str, int max_page=0);
size_t numberOfPages () const;
diff --git a/dviware/dvisvgm/tests/CalculatorTest.cpp b/dviware/dvisvgm/tests/CalculatorTest.cpp
index 28ebf342b8..af79a4c8e1 100644
--- a/dviware/dvisvgm/tests/CalculatorTest.cpp
+++ b/dviware/dvisvgm/tests/CalculatorTest.cpp
@@ -25,14 +25,19 @@
TEST(CalculatorTest, eval) {
Calculator calc;
- EXPECT_EQ(calc.eval("2+3+4"), 9);
- EXPECT_EQ(calc.eval("2*3+4"), 10);
- EXPECT_EQ(calc.eval("2+3*4"), 14);
- EXPECT_EQ(calc.eval("(2+3)*4"), 20);
- EXPECT_EQ(calc.eval("2*(3+4)"), 14);
- EXPECT_EQ(calc.eval("-2+3+4"), 5);
- EXPECT_EQ(calc.eval("3/2"), 1.5);
- EXPECT_EQ(calc.eval("3%2"), 1);
+ EXPECT_EQ(calc.eval("2+3+4"), 9);
+ EXPECT_EQ(calc.eval("2*3+4"), 10);
+ EXPECT_EQ(calc.eval("2+3*4"), 14);
+ EXPECT_EQ(calc.eval("(2+3)*4"), 20);
+ EXPECT_EQ(calc.eval("2*(3+4)"), 14);
+ EXPECT_EQ(calc.eval("2(3+4)"), 14);
+ EXPECT_EQ(calc.eval("(1+2)(3+4)"), 21);
+ EXPECT_EQ(calc.eval("-(1+2)(3+4)"), -21);
+ EXPECT_EQ(calc.eval("(1+2)-(3+4)"), -4);
+ EXPECT_EQ(calc.eval("-2+3+4"), 5);
+ EXPECT_EQ(calc.eval("3/2"), 1.5);
+ EXPECT_EQ(calc.eval("3%2"), 1);
+ EXPECT_EQ(calc.eval("-(4)"), -4);
}
@@ -47,6 +52,7 @@ TEST(CalculatorTest, variables) {
calc.setVariable("b", 3);
EXPECT_EQ(calc.eval("a+b"), 5);
EXPECT_EQ(calc.eval("2a+2b"), 10);
+ EXPECT_EQ(calc.eval("2a(1+2b)"), 28);
}
diff --git a/dviware/dvisvgm/tests/DvisvgmSpecialTest.cpp b/dviware/dvisvgm/tests/DvisvgmSpecialTest.cpp
index 829b4ca5ad..b8e67403ae 100644
--- a/dviware/dvisvgm/tests/DvisvgmSpecialTest.cpp
+++ b/dviware/dvisvgm/tests/DvisvgmSpecialTest.cpp
@@ -27,13 +27,14 @@
using namespace std;
+
class MyDvisvgmSpecialHandler : public DvisvgmSpecialHandler {
public:
void finishPreprocessing () {dviPreprocessingFinished();}
- void finishPage () {dviEndPage(0, emptyActions);}
+ void finishPage () {dviEndPage(0, _actions);}
protected:
- EmptySpecialActions emptyActions;
+ EmptySpecialActions _actions;
};
@@ -42,8 +43,8 @@ class DvisvgmSpecialTest : public ::testing::Test {
class ActionsRecorder : public EmptySpecialActions {
public:
void embed (const BoundingBox &bb) override {bbox.embed(bb);}
- double getX () const override {return 0;}
- double getY () const override {return 0;}
+ double getX () const override {return -42;}
+ double getY () const override {return 14;}
bool defsEquals (const string &str) const {return defsString() == str;}
bool pageEquals (const string &str) const {return pageString() == str;}
bool bboxEquals (const string &str) const {return bbox.toSVGViewBox() == str;}
@@ -86,15 +87,15 @@ TEST_F(DvisvgmSpecialTest, basic) {
TEST_F(DvisvgmSpecialTest, rawText) {
- istringstream iss("raw first{?nl}");
+ istringstream iss("raw first{?nl}{?x},{?y}");
handler.process("", iss, recorder);
EXPECT_TRUE(recorder.defsEquals(""));
- EXPECT_TRUE(recorder.pageEquals("<g id='page1'>first\n</g>")) << recorder.pageString();
+ EXPECT_TRUE(recorder.pageEquals("<g id='page1'>first\n-42,14</g>")) << recorder.pageString();
- iss.clear(); iss.str("raw \t second {?bbox dummy} \t");
+ iss.clear(); iss.str("raw \t ;{?(-x+2*y-5)}second {?bbox dummy} \t");
handler.process("", iss, recorder);
EXPECT_TRUE(recorder.defsEquals(""));
- EXPECT_TRUE(recorder.pageEquals("<g id='page1'>first\nsecond 0 0 0 0</g>")) << recorder.pageString();
+ EXPECT_TRUE(recorder.pageEquals("<g id='page1'>first\n-42,14;65second 0 0 0 0</g>")) << recorder.pageString();
}
@@ -313,13 +314,13 @@ TEST_F(DvisvgmSpecialTest, processImg) {
std::istringstream iss("img 72.27 72.27 test.png");
handler.process("", iss, recorder);
EXPECT_TRUE(recorder.defsEquals(""));
- EXPECT_TRUE(recorder.pageEquals("<g id='page1'><image x='0' y='0' width='72' height='72' xlink:href='test.png'/></g>")) << recorder.pageString();
+ EXPECT_TRUE(recorder.pageEquals("<g id='page1'><image x='-42' y='14' width='72' height='72' xlink:href='test.png'/></g>")) << recorder.pageString();
recorder.clear();
iss.clear();
iss.str("img 10bp 20bp test2.png");
handler.process("", iss, recorder);
- EXPECT_TRUE(recorder.pageEquals("<g id='page1'><image x='0' y='0' width='10' height='20' xlink:href='test2.png'/></g>")) << recorder.pageString();
+ EXPECT_TRUE(recorder.pageEquals("<g id='page1'><image x='-42' y='14' width='10' height='20' xlink:href='test2.png'/></g>")) << recorder.pageString();
}
@@ -340,19 +341,19 @@ TEST_F(DvisvgmSpecialTest, processBBox) {
iss.clear();
iss.str("bbox 72.27 72.27");
handler.process("", iss, recorder);
- EXPECT_TRUE(recorder.bboxEquals("0 -72 72 72"));
+ EXPECT_TRUE(recorder.bboxEquals("-42 -58 72 72"));
recorder.clear();
iss.clear();
iss.str("bbox 72bp 72bp");
handler.process("", iss, recorder);
- EXPECT_TRUE(recorder.bboxEquals("0 -72 72 72"));
+ EXPECT_TRUE(recorder.bboxEquals("-42 -58 72 72"));
recorder.clear();
iss.clear();
iss.str("bbox rel 72.27 72.27");
handler.process("", iss, recorder);
- EXPECT_TRUE(recorder.bboxEquals("0 -72 72 72"));
+ EXPECT_TRUE(recorder.bboxEquals("-42 -58 72 72"));
recorder.clear();
iss.clear();
diff --git a/info/expose-expl3-dunkerque-2019/LISEZMOI.md b/info/expose-expl3-dunkerque-2019/LISEZMOI.md
new file mode 100644
index 0000000000..1f182be82a
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/LISEZMOI.md
@@ -0,0 +1,40 @@
+<!-- Time-stamp: <2020-03-21 17:22:35 administrateur> -->
+<!-- Création : 2019-09-24T11:13:44+0200 -->
+
+# expose-expl3-dunkerque-2019
+
+Auteur: Yvon Henel, alias _Le TeXnicien de surface_
+([contact](le.texnicien.de.surface@yvon-henel.fr))
+
+## LICENCE
+
+Le contenu de cette archive est placé sous la « LaTeX Project Public License ».
+Voir http://www.ctan.org/license/lppl1.3
+pour la licence.
+
+© 2019-2020 Yvon Henel (Le TeXnicien de surface)
+
+## Description du document (dun19expl3.pdf)
+
+**Documentation en français**
+
+Article basé sur l'exposé fait lors du stage de Dunkerque 2019
+sur Expl3.
+
+Codes en Expl3 commentés des algorithmes de création d’une liste
+d’entiers premiers ; du crible d’Ératosthène ; des suites de Kaprekar.
+
+
+## Description de l’archive
+
+L’archive contient tous les fichiers nécessaires à compiler le
+document au format pdf. Invoquer `make all` dans le répertoire
+principal.
+
+## Historique
+
+Version 1.2 — 2020-03-21
+
+Version 1.1 — 2019-09-24
+
+Version 1 — 2019-08-29
diff --git a/info/expose-expl3-dunkerque-2019/Makefile b/info/expose-expl3-dunkerque-2019/Makefile
new file mode 100644
index 0000000000..4e4fc1fb9d
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/Makefile
@@ -0,0 +1,134 @@
+# Time-stamp: <2019-08-29 11:09:56 administrateur>
+# Création: 2019-08-08T10:10:07+0200
+# ---------------------------------------------------------------
+# Makefile pour latexmk et la suite par Y. Henel
+#
+# !!! règle "zip" à revoir, fichier bib etc. pas à la bonne place
+#
+# ---------------------------------------------------------------
+SHELL:=/bin/bash
+# ---------------------------------------------------------------
+
+AXLRTEX:=aux,toc
+PRDTTEX:=ltx
+PRDTVERBATIM:=vrb
+TEXLOG:=log
+AXLRINDEX:=idx,ind
+INDEXLOG:=ilg
+AXLRHYPERREF:=out,nav
+AXLRGLOSSARIES:=xdy,glo,gls
+GLOSSARIESLOG:=glg
+AXLRBIBLATEX:=run.xml,bbl,bcf
+BIBLATEXLOG:=blg
+LATEXMKAUX:=fdb_latexmk,fls
+AXLR=$(AXLRTEX),$(AXLRINDEX),$(AXLRHYPERREF),$(AXLRGLOSSARIES),$(AXLRBIBLATEX),$(AUTRESAXLR)
+PRDTAUX=$(PRDTTEX),$(PRDTVERBATIM)
+FICHIERSLOG=$(TEXLOG),$(INDEXLOG),$(GLOSSARIESLOG),$(BIBLATEXLOG),$(AUTRESLOG)
+
+# ---------------------------------------------------------------
+
+NOM:=dun19expl3
+NOMCOMP:= $(NOM)
+VERSION:=1.0
+SUJET:=expl3
+
+PRES:=$(NOMCOMP)
+
+SOURCE:=$(PRES).tex
+
+SRCAUX:=$(wildcard *.tex)
+
+BIBLIODIR=bibliographie
+BIBLIO:=$(wildcard $(BIBLIODIR)/*.bib)
+
+CODESDIR=codes
+CODES:=$(wildcard $(CODESDIR)/*.tex)
+
+GLOSAIRESDIR=glosaires
+GLOSAIRES:=$(wildcard $(GLOSAIRESDIR)/*.tex)
+
+SOURCES:= \
+ Makefile\
+ latexmkrc\
+ $(SOURCE)\
+ $(SRCAUX)\
+ $(BIBLIO)\
+ $(CODES)\
+ $(GLOSAIRES)\
+
+
+PRDT:= $(subst .tex,.pdf,$(SOURCE))
+
+AUTRESAXLR:=klo,kls
+
+AUTRESLOG:=klg
+
+# ---------------------------------------------------------------
+# règles
+# astuce avec TEXINPUT tirée du Makefile de la doc de pgf
+
+TEXINPUTS := ./extensions:$(TEXINPUTS)
+
+%.pdf: %.tex
+ TEXINPUTS="$(TEXINPUTS)" latexmk -pdf -bibtex $<
+# ---------------------------------------------------------------
+
+doc: $(PRDT)
+$(PRDT): $(SOURCES)
+# ---------------------------------------------------------------
+
+.PHONY: refaire
+
+refaire:
+ TEXINPUTS="$(TEXINPUTS)" latexmk -gg -pdf -bibtex $(SOURCE)
+# ---------------------------------------------------------------
+
+.PHONY: almostclean
+
+almostclean:
+ @rm -f *~
+ @rm -f *.{$(AXLR)}
+# ---------------------------------------------------------------
+
+.PHONY: clean
+
+clean: almostclean
+ @rm -f *.{$(PRDTAUX)}
+# ---------------------------------------------------------------
+
+.PHONY: veryclean
+
+veryclean: clean
+ @rm -f *.{$(FICHIERSLOG),$(LATEXMKAUX)}
+# ---------------------------------------------------------------
+
+.PHONY: distclean
+
+distclean: veryclean
+ @rm -f $(PRDT)
+# ---------------------------------------------------------------
+
+.PHONY: prepazip
+
+REPERT:= ./$(NOMCOMP)
+
+prepazip: doc veryclean
+ @rm -rf $(REPERT)
+ @mkdir -p $(REPERT)/SRC
+ @mkdir -p $(REPERT)/DOC
+ @cp $(SOURCES) $(REPERT)/SRC
+ @cp $(PRDT) $(REPERT)/DOC
+# ---------------------------------------------------------------
+
+.PHONY: zip
+
+zip: prepazip
+ @rm -f $(NOMCOMP).zip
+ @zip -r $(NOMCOMP) $(REPERT)
+ @rm -rf $(REPERT)
+
+# ---------------------------------------------------------------
+# version allégée, avec BASH ;
+# utilisation d'un fichier inclus 2019-08-08
+# ---------------------------------------------------------------
+
diff --git a/info/expose-expl3-dunkerque-2019/README.md b/info/expose-expl3-dunkerque-2019/README.md
new file mode 100644
index 0000000000..b085718cb8
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/README.md
@@ -0,0 +1,45 @@
+<!-- Time-stamp: <2020-03-21 17:22:24 administrateur> -->
+<!-- Création : 2019-09-24T11:13:44+0200 -->
+
+# expose-expl3-dunkerque-2019
+
+Author: Yvon Henel, aka Le TeXnicien de surface
+([contact](le.texnicien.de.surface@yvon-henel.fr))
+
+**Documentation in French only**
+
+## LICENCE
+
+This material is subject to the LaTeX Project Public License.
+See http://www.ctan.org/license/lppl1.3
+for the details of that license.
+
+© 2019-2020 Yvon Henel (Le TeXnicien de surface)
+
+## Description of the Archive
+
+An article based on the presentation made in Dunkerque
+for the “stage LaTeXâ€, 12 June 2019.
+
+The archive contains the pdf file and all the necessary files to
+produce it. You have to invoke the Makefile with `make all` to create
+the pdf file.
+
+## Summary of the Article
+
+1. I use Expl3 to solve the well known problem of creating the prime
+ numbers
+2. I use Expl3 again to implement the Sieve of Eratosthenes
+3. I finish with an Expl3 implementation of Kaprekar algorithm
+
+You can cast a glance at the glossary to see a list of all the
+commands used in the code.
+
+
+## History
+
+Version 1.2 — 2020-03-21
+
+Version 1.1 — 2019-09-24
+
+Version 1 — 2019-08-29
diff --git a/info/expose-expl3-dunkerque-2019/bibliographie/dun19expl3.bib b/info/expose-expl3-dunkerque-2019/bibliographie/dun19expl3.bib
new file mode 100644
index 0000000000..f6a803b3a8
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/bibliographie/dun19expl3.bib
@@ -0,0 +1,56 @@
+% Time-stamp: <2019-08-26 11:22:07 administrateur>
+% Création : 2019-08-07T10:51:21+0200
+
+@String{l3p = {The \LaTeX 3 Project Team}}
+
+@Manual{expl3progr,
+ author = l3p,
+ title = {The expl3 package and \LaTeX 3 programming},
+ type = {manual},
+ date = {2019-07-25},
+ language = {english},
+ pagetotal = 16}
+
+@Manual{l3interfaces,
+ author = l3p,
+ title = {The \LaTeX 3 Interfaces},
+ type = {manual},
+ date = {2019-07-25},
+ language = {english},
+ pagetotal = 299}
+
+@Manual{source3,
+ author = l3p,
+ title = {The \LaTeX 3 Source},
+ type = {manual},
+ date = {2019-07-25},
+ language = {english},
+ pagetotal = 1302}
+
+@Manual{source2e,
+ author = {Braams, Johannes and
+ Carlisle, David and
+ Jeffrey, Alan and
+ Lamport, Leslie and
+ Mittelbach, Frank and
+ Rowley, Chris and
+ Schöpf, Rainer},
+ title = {The \LaTeXe{} Source},
+ type = {manual},
+ date = {2019-07-25},
+ language = {english},
+ pagetotal = 677}
+
+@Manual{xparse,
+ author = l3p,
+ title = {The \Pkg{xparse} package, Document command parser},
+ date = {2019-05-28},
+ language = {english},
+ pagetotal = 15}
+
+@Book{tellechea,
+ author = {Tellechea,Christian},
+ title = {Apprendre à programmer en \TeX},
+ date = {2014-09-21},
+ isbn = {978-2-9548602-0-6}}
+
diff --git a/info/expose-expl3-dunkerque-2019/codes/erato-def.tex b/info/expose-expl3-dunkerque-2019/codes/erato-def.tex
new file mode 100644
index 0000000000..26e3d94f86
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/codes/erato-def.tex
@@ -0,0 +1,103 @@
+% Time-stamp: <2019-08-26 11:48:16 administrateur>
+% ReCréation : 2019-08-23T10:40:31+0200
+\ExplSyntaxOn
+
+\NewDocumentCommand{ \eratosthene } { m } {
+ \group_begin:
+ \int_new:N \l_ERA_diviseur_max_int
+ \int_set:Nn \l_ERA_diviseur_max_int { \fp_to_int:n { floor( sqrt ( #1 ))} }
+ \intarray_new:Nn \__ERA_qt_ia { #1 }
+ \intarray_new:Nn \__ERA_dv_ia { #1 }
+ % commande auxiliaire --------------------------------------------------------
+ \cs_set:Nn \ERA_marquer_de_a_par:nnn {
+ \int_set:Nn \l_tmpa_int { ##1 / ##3}
+
+ \int_step_inline:nnnn { ##1 } { ##3 } { ##2 } {
+ \int_compare:nNnT { \intarray_item:Nn \__ERA_dv_ia { ####1 } } = { 0 }
+ { \intarray_gset:Nnn \__ERA_dv_ia { ####1 } { ##3 }
+ \intarray_gset:Nnn \__ERA_qt_ia { ####1 } { \l_tmpa_int } }
+ \int_incr:N \l_tmpa_int }
+ }
+ % ----------------------------------------------------------------------------
+ % marquer les pairs
+ \int_set:Nn \l_tmpa_int { 1 }
+
+ \int_step_inline:nnnn { 2 } { 2 } { #1 }
+ { \intarray_gset:Nnn \__ERA_dv_ia { ##1 } { 2 }
+ \intarray_gset:Nnn \__ERA_qt_ia { ##1 } { \l_tmpa_int }
+ \int_incr:N \l_tmpa_int }
+
+ % marquer les impairs jusqu'à racine de #1
+ \int_set:Nn \l_tmpb_int { 3 }
+
+ \int_while_do:nNnn { \l_tmpb_int } < { \l_ERA_diviseur_max_int }
+ { \ERA_marquer_de_a_par:nnn { \l_tmpb_int } { #1 } { \l_tmpb_int }
+ \int_do_until:nNnn {\intarray_item:Nn \__ERA_dv_ia { \l_tmpb_int }} = { 0 }
+ { \int_add:Nn \l_tmpb_int { 2 } } }
+
+ % marquer les derniers impairs
+ \int_step_inline:nnnn { 3 } { 2 } { #1 }
+ { \int_compare:nNnT { \intarray_item:Nn \__ERA_dv_ia { ##1 } } = { 0 }
+ { \intarray_gset:Nnn \__ERA_dv_ia { ##1 } { ##1 }
+ \intarray_gset:Nnn \__ERA_qt_ia { ##1 } { 1 } } }
+
+ % nettoyage
+ \cs_undefine:N \l_ERA_diviseur_max_int
+ \group_end: }
+
+%%% -----------------------------------------------------------------------
+
+\cs_new:Nn \ERA_presenter_nieme:n {
+ \group_begin:
+ \int_set:Nn \l_tmpa_int { \intarray_item:Nn \__ERA_qt_ia { #1 } }
+ \int_set:Nn \l_tmpb_int { \int_mod:nn { #1 } { 10 } }
+
+ \framebox[4em] {\strut \footnotesize
+ \int_compare:nNnTF { \l_tmpa_int } = { 1 }
+ {\textbf} % premier
+ {\textcolor{gray}} % composé
+ {\int_to_arabic:n { #1 }}
+ \int_compare:nNnT { \l_tmpa_int } > { 1 }
+ { \int_set:Nn \l_tmpa_int { \intarray_item:Nn \__ERA_dv_ia { #1 } }
+ ~\({}^{\langle \int_to_arabic:n { \l_tmpa_int } \rangle}\) } }
+ \kern-\fboxrule
+ % saut de paragraphe tous les 10
+ \int_compare:nNnT { \l_tmpb_int } = { 0 }
+ { \par \nointerlineskip \kern-\fboxrule \noindent }
+ \group_end: }
+
+\NewDocumentCommand { \EcrireCribleEratosthene } { m }{
+ \par \noindent \int_step_inline:nn { #1 } { \ERA_presenter_nieme:n {##1} } }
+
+
+\NewDocumentCommand { \EcrireDiviseurs } { s m } {
+ \group_begin:
+ \int_new:N \l_ERA_nv_qt_int % quotient
+ \int_set:Nn \l_ERA_nv_qt_int { #2 }
+ \int_new:N \l_ERA_vx_dv_int % ancient diviseur
+ \int_set:Nn \l_ERA_vx_dv_int { 0 }
+ \int_new:N \l_ERA_nv_dv_int % nouveau diviseur
+ \int_set:Nn \l_ERA_nv_dv_int { \intarray_item:Nn \__ERA_dv_ia { #2 } }
+
+ \IfBooleanF{#1}{\par}
+ \( \int_to_arabic:n { #2 } =
+ \int_while_do:nNnn { \l_ERA_nv_qt_int } > { 1 }
+ { \int_compare:nNnT { \l_ERA_vx_dv_int } > { 0 } { \times }
+ \int_to_arabic:n { \l_ERA_nv_dv_int }
+ \int_set:Nn \l_ERA_vx_dv_int { \l_ERA_nv_dv_int }
+ \int_set:Nn \l_ERA_nv_qt_int {
+ \intarray_item:Nn \__ERA_qt_ia { \l_ERA_nv_qt_int } }
+ \int_set:Nn \l_ERA_nv_dv_int {
+ \intarray_item:Nn \__ERA_dv_ia { \l_ERA_nv_qt_int } } }
+ \)
+ \cs_undefine:N \l_ERA_nv_qt_int
+ \cs_undefine:N \l_ERA_vx_dv_int
+ \cs_undefine:N \l_ERA_nv_dv_int
+ \group_end: }
+
+\ExplSyntaxOff
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/info/expose-expl3-dunkerque-2019/codes/henel-def.tex b/info/expose-expl3-dunkerque-2019/codes/henel-def.tex
new file mode 100644
index 0000000000..0beae24a67
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/codes/henel-def.tex
@@ -0,0 +1,66 @@
+% Time-stamp: <2019-08-07 10:59:31 administrateur>
+% Création : 2019-05-20T11:51:49+0200
+\ExplSyntaxOn
+
+\cs_new:Nn \__yh_ecrire_nombre:n { \(\np{\int_to_arabic:n{ #1 }}\) }
+
+\cs_new:Nn \yh_impair_est_premier:nT {
+ \bool_set_true:N \yh_continue_bool
+ \bool_set_true:N \yh_est_premier_bool
+ \int_set:Nn \l_tmpa_int {1}
+ % FIN INITIALISATION
+ \bool_do_while:Nn \yh_continue_bool { % BOUCLE `TANTQUE'
+ % INCRÉMENTATION
+ \int_add:Nn \l_tmpa_int { 2 }
+ \bool_if:nTF {
+ % TEST de divisibilité
+ \int_compare_p:nNn { \int_mod:nn {#1} { \l_tmpa_int } } = { 0 }
+ } { % SI VRAI
+ \bool_set_false:N \yh_continue_bool
+ \bool_gset_false:N \yh_est_premier_bool
+ } { % SI FAUX
+ \int_compare:nNnT { \l_tmpa_int * \l_tmpa_int } > { #1 }
+ { \bool_set_false:N \yh_continue_bool }
+ } } % FIN DU SI ET FIN DE LA BOUCLE
+ \bool_if:nT {\yh_est_premier_bool} {#2} }
+
+\cs_new:Nn \yh_ecrire_separateur:n { }
+
+\cs_new:Nn \yh_ecrire_si_premier:n {
+ \yh_impair_est_premier:nT { #1 }
+ { \yh_ecrire_separateur:n { #1 }
+ \__yh_ecrire_nombre:n { #1 } } }
+
+\NewDocumentCommand { \ListePremiers } { m } {
+ \group_begin:
+ % INITIALISATION
+ \int_new:N \l_compteur_int
+ \int_new:N \l_nombre_requis
+ \int_set:Nn \l_compteur_int { 2 }
+ \int_set:Nn \l_nombre_requis { #1 }
+ \cs_set:Nn \yh_ecrire_separateur:n {
+ \int_compare:nNnTF { ##1 } < { \l_nombre_requis - 1} {,~} {~et~} }
+ % LES DEUX PREMIERS NOMBRES PREMIERS NE SONT PAS CALCULÉS
+ \__yh_ecrire_nombre:n {2}
+ \yh_ecrire_separateur:n {1}
+ \__yh_ecrire_nombre:n {3}
+ % PRÉPARATION DE LA BOUCLE, \l_tmpb_int EST LE CANDIDAT À TESTER
+ \int_set:Nn \l_tmpb_int { 3 }
+ % BOUCLE `TANT QUE'
+ \int_while_do:nNnn { \l_compteur_int } < { \l_nombre_requis } {
+ \int_add:Nn \l_tmpb_int { 2 }
+ \yh_impair_est_premier:nT { \l_tmpb_int }
+ { \yh_ecrire_separateur:n { \l_compteur_int }
+ \__yh_ecrire_nombre:n{ \l_tmpb_int }
+ \int_incr:N \l_compteur_int } }
+ % ON FAIT LE MÉNAGE AVANT DE SORTIR
+ \cs_undefine:N \l_compteur_int
+ \cs_undefine:N \l_nombre_requis
+ \group_end: }
+
+\ExplSyntaxOff
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/info/expose-expl3-dunkerque-2019/codes/kaprekar-def.tex b/info/expose-expl3-dunkerque-2019/codes/kaprekar-def.tex
new file mode 100644
index 0000000000..097279d8fe
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/codes/kaprekar-def.tex
@@ -0,0 +1,81 @@
+% Time-stamp: <2019-08-28 11:48:38 administrateur>
+% ReCréation : 2019-08-26T12:32:29+0200
+\ExplSyntaxOn
+\seq_new:N \kaprun_seq
+\seq_new:N \kaprekar_seq
+\int_new:N \l_tmpc_int
+
+
+\cs_new:Nn \KAP_int_to_seq:NN {
+ \int_set:Nn \l_tmpa_int { #1 }
+ \int_do_until:nNnn { \l_tmpa_int } = { 0 }
+ { \int_set:Nn \l_tmpb_int { \int_mod:nn { \l_tmpa_int } { 10 } }
+ \seq_put_left:NV #2 \l_tmpb_int
+ \int_set:Nn \l_tmpa_int
+ { \int_div_truncate:nn { \l_tmpa_int - \l_tmpb_int } { 10 } } } }
+
+\cs_new:Nn \KAP_seq_to_int:NN {
+ \seq_pop_right:NNT #1 \l_tmpa_tl
+ { \int_set:Nn #2 { \l_tmpa_tl }
+ \bool_do_until:nn { \seq_if_empty_p:N #1 }
+ { \seq_pop_right:NNT #1 \l_tmpa_tl
+ \int_set:Nn #2 { 10 * #2 + \l_tmpa_tl } } } }
+
+\cs_new:Nn \KAP_remplir_seq:Nn {
+ \int_while_do:nNnn { \seq_count:N #1 } < { #2 }
+ { \seq_put_left:Nn #1 { 0 } } }
+
+\cs_new:Nn \KAP_ranger_seq:N {
+ \seq_sort:Nn #1
+ { \int_compare:nNnTF { ##1 } > { ##2 }
+ { \sort_return_swapped: }
+ { \sort_return_same: } } }
+
+\cs_new:Nn \KAP_suivant:nNN {
+ \KAP_int_to_seq:NN #2 \kaprun_seq
+ \KAP_remplir_seq:Nn \kaprun_seq { #1 }
+ \KAP_ranger_seq:N \kaprun_seq
+
+ \seq_set_eq:NN \kaprdx_seq \kaprun_seq
+ \seq_reverse:N \kaprdx_seq
+
+ \KAP_seq_to_int:NN \kaprdx_seq \l_tmpa_int
+ \KAP_seq_to_int:NN \kaprun_seq \l_tmpb_int
+ \int_set:Nn #3 { \l_tmpb_int - \l_tmpa_int } }
+
+\cs_new:Nn \KAP_ecrire_tous_les_suivants:nn {
+ \group_begin:
+ \bool_set_true:N \l_tmpa_bool
+ \seq_clear:N \kaprekar_seq
+ \int_set:Nn \l_tmpc_int { #2 }
+ \seq_put_right:NV \kaprekar_seq \l_tmpc_int
+ \KAP_suivant:nNN {#1} \l_tmpc_int \l_tmpc_int
+ \seq_if_in:NVT \kaprekar_seq \l_tmpc_int {\bool_set_false:N \l_tmpa_bool}
+ \bool_while_do:nn { \l_tmpa_bool }
+ { \seq_put_right:NV \kaprekar_seq \l_tmpc_int
+ \KAP_suivant:nNN {#1} \l_tmpc_int \l_tmpc_int
+ \seq_if_in:NVT \kaprekar_seq \l_tmpc_int { \bool_set_false:N \l_tmpa_bool } }
+ % \seq_show:N \kaprekar_seq
+ % \seq_use:Nnnn \kaprekar_seq {~et~} {,~} {~et~}\par{}
+ \int_set:Nn \l_tmpa_int { \seq_count:N \kaprekar_seq }
+ \seq_map_inline:Nn \kaprekar_seq
+ { \( \np{##1} \)
+ \int_decr:N \l_tmpa_int
+ \int_case:nnF { \l_tmpa_int }
+ {
+ { 1 } {~et~}
+ { 0 } { }
+ }
+ {~;~}
+ }
+ \group_end: }
+
+\NewDocumentCommand{\Kaprekar}{ O{4} m }{
+ \KAP_ecrire_tous_les_suivants:nn { #1 } { #2 } }
+
+\ExplSyntaxOff
+%%% Local Variables:
+%%% coding: utf-8
+%%% mode: latex
+%%% TeX-master: "../dun19expl3"
+%%% End:
diff --git a/info/expose-expl3-dunkerque-2019/codes/knuth-def.tex b/info/expose-expl3-dunkerque-2019/codes/knuth-def.tex
new file mode 100644
index 0000000000..34c771501e
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/codes/knuth-def.tex
@@ -0,0 +1,20 @@
+\newif\ifprime \newif\ifunknown
+\newcount\n \newcount\p
+\newcount\d \newcount\a
+
+\def \primes#1{2,~3\n=#1 \advance \n by-2 \p=5
+ \loop \ifnum \n>0 \printifprime \advance \p by2 \repeat}
+
+\def \printp{, \ifnum \n=1 and~\fi
+ \number \p \advance \n by -1 }
+
+\def \printifprime{\testprimality \ifprime\printp\fi}
+
+\def \testprimality{{\d=3 \global \primetrue
+ \loop \trialdivision \ifunknown \advance \d by2 \repeat}}
+
+\def \trialdivision{\a=\p \divide \a by\d
+ \ifnum \a>\d \unknowntrue \else \unknownfalse \fi
+ \multiply \a by\d \ifnum \a=\p \global \primefalse \unknownfalse \fi}
+
+\endinput \ No newline at end of file
diff --git a/info/expose-expl3-dunkerque-2019/dk19ecrireprem.tex b/info/expose-expl3-dunkerque-2019/dk19ecrireprem.tex
new file mode 100644
index 0000000000..cff913ae23
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/dk19ecrireprem.tex
@@ -0,0 +1,400 @@
+% Time-stamp: <2019-09-24 10:47:32 administrateur>
+% Création : 2019-08-24T14:29:55+0200
+\section{Rappel}
+\label{sec:rappel}
+
+Je commence par redonner le code de Donald E. \textsc{Knuth} mais je
+laisse le lecteur rechercher l'article précité de Denis \textsc{Roegel}
+pour y trouver toutes les explications nécessaires.
+
+\VerbatimInput[frame=lines, framesep=0.75\baselineskip,
+label={\textsc{Knuth} \textemdash{} \emph{définitions}},
+labelposition=topline]{./codes/knuth-def.tex}
+
+L'appel |\primes{15}| permet d'obtenir
+\og \primes{15}\fg.
+
+\section{Version avec \Expliii}
+\label{sec:versionexpl3}
+
+
+Commençons par quelques remarques: comme le code est écrit dans un
+fichier \texttt{.tex} \TO et non dans un \gls{module} \TF je dois
+commencer par enclencher la syntaxe propre à \Expliii{}, ce que je
+fais dès la première ligne qui n'est pas un commentaire à usage
+interne \TO d'où le décalage de numéro \TF dans le premier fragment
+ci-dessous:
+%
+\Fragment{3}{5}{./codes/henel-def}
+
+\subsection{Une macro privée pour écrire les nombres}
+\label{sec:macro+ecrire+entier}
+
+Sur la ligne~\(5\), on lit la définition d'une macro \emph{interne}
+\CAD d'une macro qui n'a pas vocation à être appelée directement dans
+un document rédigé par l'utilisateur final. On y voit déjà quelques
+différences avec du code \LaTeXe{} que je vais préciser maintenant:
+\begin{itemize}
+\item les caractères |_| et~|:| sont promus au rang de lettres mais
+ par l'arobase~|@| cher aux programmeurs en~\LaTeXe{};
+
+\item les espaces du code ne donneront pas d'espace dans le
+ document. Voilà qui soulage grandement le programmeur puisque
+ disparait la phase de recherche des \TdSTrad{blancs
+ inopportuns}{spurious blanks}.
+\end{itemize}
+
+Autre remarque, d'ordre typographique, la présentation que j'adopte
+dans ce document \TO pour des raisons de place\TF n'est pas la
+présentation recommandée par l'équipe du projet \LaTeX3. On devrait
+plutôt, en effet, adopter la présentation qui suit\index{présentation
+ du code}:
+%
+\begin{Verbatim}[frame=lines, framesep=0.75\baselineskip]
+\cs_new:Nn \__yh_ecrire_nombre:n
+ {
+ \(\np{\int_to_arabic:n{ #1 }}\)
+ }
+\end{Verbatim}
+%
+dont on m'accordera, j'espère, qu'elle occupe plus d'espace.
+
+La commande que je définis s'appelle
+\Macro{__yh_ecrire_nombre:n}. Ce nom comporte plusieurs parties:
+\begin{enumerate}
+
+\item les \og |__|\fg initiaux signalent que cette commande est
+ \emph{privée} \CAD que son usage est réservée au \gls{module} \TO
+ ici le simple fichier contenant le code\TF et n'est pas
+ nécessairement documentée. Le programmeur ne s'engage à rien sur
+ cette commande et un utilisateur du \gls{module} ne doit pas
+ s'attendre à ce que le comportement de cette commande reste stable
+ au fil des versions ni même à ce qu'elle soit toujours
+ disponible. Il ne s'agit ici que d'une \textsb{convention} car
+ \TeX{} est resté ce qu'il est et la gestion des espaces de noms
+ n'est pas implémentée\footnote{L'équipe des développeurs de
+ \Expliii{} nous dit, dans \autocite[p.~1]{expl3progr} que celà
+ pourrait se faire mais avec un surcoût prohibitif.};
+
+\item \og |yh|\fg remplace ici ce qui est \TO dans un \gls{module}\TF
+ le nom du \gls{module} ou, à tout le moins, une chaine de caractères
+ réservée pour ce \gls{module};
+
+\item vient le nom explicite de la commande: \og |ecrire_nombre|\fg
+ dans lequel le souligné~\og |_|\fg sert de séparateur de mots;
+
+\item suivi du caractère~\og |:|\fg qui introduit la \gls{signature}
+ de la commande qui est, ici, \og |n|\fg. Cela nous indique que la
+ commande est une \gls{fonction} \TO c'est le vocabulaire défini par le
+ projet \LaTeX3\TF qui attend un seul argument fourni entre
+ accolades.
+\end{enumerate}
+
+La fonction \Macro{cs_new:Nn} utilise la \gls{signature} de la
+commande qui suit pour déterminer le nombre et le type des arguments
+que demande cette commande. Elle vérifie que la commande n'est pas
+déjà définie et produit une erreur si c'est le cas. De plus, elle
+définit la commande de manière globale \TO penser à \Macro{gdef} avec
+les pouvoirs de \Macro{newcommand}\TF.
+
+Elle possède plusieurs variantes dont, \PX{}, \Macro{cs_new:cn} qui
+attend comme premier argument le \emph{nom} de la commande plutôt que
+la commande elle-même. J'aurais obtenu le même résultat avec:
+%
+\begin{Verbatim}[frame=lines, framesep=0.75\baselineskip]
+\cs_new:cn { __yh_ecrire_nombre:n } { \(\np{\int_to_arabic:n{ #1 }}\) }
+\end{Verbatim}
+%
+code que je livre compacté.
+
+Le 2\ieme argument de \Macro{cs_new:Nn} doit être fourni entre
+accolades, c'est la définition de la commande. Ici j'utilise
+\Macro{np} de l'extension \Pkg{numprint} en mode mathématique en
+ligne \TO à l'aide du bien connu couple |\(| et~|\)| \TF afin
+d'obtenir \og \(\np{3257}\)\fg au lieu de \og \(3257\)\fg.
+
+La \gls{fonction} \Macro{int_to_arabic:n} appartient au \gls{module}
+\Mdl{int}, partie du noyau de \LaTeX3, qui regroupe les commandes
+traitant les \glspl{entier}. Elle prend un argument dont elle fournit
+la représentation en chiffres \emph{arabes}.
+
+\subsection{Commande vérifiant qu'un entier impair est premier}
+\label{sec:macro+impair+premier}
+
+La commande \Macro{yh_impair_est_premier:nT} ne se déclare pas comme
+privée, dans un \gls{module} elle devrait avoir une interface et une
+sortie stable et être documentée car son nom ne commence pas par~|__|
+mais ça aurait pu être le cas.
+
+\(2\) étant le seul nombre pair premier, la question de la primarité
+ne se pose vraiment que pour les entiers impairs. Je pourrai donc
+n'essayer que des diviseurs impairs.
+
+La \gls{signature} de cette \gls{fonction}, \CAD |nT|, nous indique
+qu'elle attend deux arguments entre accolades, que le 1\ier sera un
+test qui renverra soit~\VRAI{} soit~\FAUX{} et que, \emph{dans le seul
+ cas} où le test est~\VRAI{}, le code contenu dans la 2\ieme paire
+d'accolades sera considéré.
+
+Regardons le code:
+%
+\Fragment{7}{25}{./codes/henel-def}
+
+Dans la partie d'initialisation \TO lignes~\(8\) à~\(10\)\TF, je crée
+deux \glspl{booleen} \TO \Macro{yh_continue_bool} et
+\Macro{yh_est_premier_bool}\TF à l'aide de la \gls{fonction}
+\Macro{bool_set_true:N} qui, dans le même temps, leur donne la
+valeur~\VRAI.
+
+Les \glspl{fonction} dont le nom contient |set| définissent les
+commandes sans vérification et, à moins que le nom contienne |gset|
+\TO |g| comme \og global\fg\TF, elles créent ces commandes
+\emph{localement} \CAD{} dans le groupe où a lieu la définition.
+
+Ici, contrairement à ma devise\footnote{À savoir: \og ceinture et
+ bretelles\fg.}, je coure le risque que ces deux \glspl{booleen}
+existent déjà, risque dont je pense qu'il est faible. On verra plus
+bas ce que j'aurais pu faire pour sécuriser la définition.
+
+Ces deux \glspl{booleen} ne sont pas des \glspl{fonction} mais des
+\glspl{variable} \CAD{} des macros \TO au sens de \TeX{}\TF dont le
+seul objet est de contenir une valeur et non pas de \emph{faire}
+quelque chose. C'est pour cela que leurs noms n'ont pas de
+\gls{signature} et ne se termine pas par~|:| qui signalerait une
+\gls{fonction} sans argument.
+
+Dernière étape de l'initialisation, avec \Macro{int_set:Nn} je donne
+à la variable entière \textbf{l}ocale temporaire \Macro{l_tmpa_int}
+la valeur~\(1\). Plusieurs \glspl{module} du noyau de \LaTeX3
+fournissent deux variables locales dont les noms comportent |tmpa|
+et~|tmpb| respectivement et deux variables \textbf{g}lobales \TO avec
+les noms équivalents\TF.
+
+Suivant la convention générale qui veut que le nom d'une
+\gls{variable} se termine par son type \TO c'est le cas des deux
+\glspl{booleen} que j'ai définis\TF, les variables temporaires
+fournies par un \gls{module} du noyau ont une finale qui donne le type
+comme \Macro{l_tmpa_int}. Cependant, contrairement à cette même
+convention de nommage, les variables temporaires n'ont pas, en tête de
+nom, le nom du module. On aura voulu éviter quelque chose comme
+\Macro*{int_l_tmpa_int} dont on peut penser que c'est légèrement
+redondant.
+
+En ligne~\(12\), je commence une boucle \TANTQUE avec
+\Macro{bool_do_while:Nn} qui attend un premier argument constitué d'un
+seul lexème \TO ici \Macro{yh_continue_bool} qui est~\VRAI à l'entrée
+dans la boucle\TF et un deuxième argument entre accolades: le corps de
+la boucle.
+
+Le corps de cette boucle commence avec l'accolade ouvrante du bout de
+la ligne~\(12\) et s'achève avec la 2\ieme accolade fermante de la
+ligne~\(24\).
+
+Je commence par ajouter~\(2\) à la valeur courante de
+\Macro{l_tmpa_int} à l'aide de la \gls{fonction} \Macro{int_add:Nn};
+\Macro{l_tmpa_int} est ici le candidat diviseur.
+
+\Macro{bool_if:nTF} est une forme de~\SIALORSSINON: on a bien les deux
+branches de l'alternative puisque la signature se termine en~|TF|. Il
+s'agit de savoir si le candidat est bien un diviseur de l'entier
+représenté par~|#2|. Pour ce faire, j'utilise la \gls{fonction}
+\Macro{int_compare_p:nNn} dont le 2\ieme argument est un opérateur de
+comparaison \CAD |>|, |<| ou~|=|. Le 3\ieme argument est
+simplement~\(0\). Le premier, lui, est le reste de la division de~|#2|
+par \Macro{l_tmpa_int} que l'on obtient à l'aide de la \gls{fonction}
+\Macro{int_mod:nn}.
+
+Si le reste est nul, on exécute le code du 2\ieme argument de
+\Macro{bool_if:nTF}. On positionne les deux \glspl{booleen} à~\FAUX{}
+puisque |#2|, divisible par \Macro{l_tmpa_int}, n'est pas premier et
+qu'il n'est donc pas nécessaire de reprendre la boucle.
+
+Si le reste n'est pas nul, je compare l'entier~|#2| et le carré du
+candidat \TO on peut utiliser les opérateurs \emph{classiques}
+d'opérations: |+|, |-|, |*|, |/| car, derrière ce code, c'est le
+mécanisme de la macro \Macro{numexpr} de \hologo{eTeX} qui est à
+l'œuvre\TF. Si le carré est plus grand, c'est que |#2|~est premier et
+qu'il est temps de s'arrêter d'où les valeurs données aux deux
+\glspl{booleen}. Le 3\ieme argument du \Macro{bool_if:nTF} s'arrête
+avec la 1\iere accolade fermante de la ligne~\(24\).
+
+À la sortie de la boucle, si |#2| n'est pas premier il n'y a rien à
+faire, s'il est premier, on le retourne. Cela est accompli à l'aide
+de la \gls{fonction} \Macro{bool_if:nT} qui réalise un saut
+conditionnel \SIALORS.
+
+\subsubsection{Compléments}
+\label{sec:complementbouclesaut}
+
+Outre les deux \glspl{fonction} \Macro{bool_if:nTF} et
+\Macro{bool_if:nT}, \Expliii fournit également la \gls{fonction}
+\Macro{bool_if:nF} qui réalise un saut conditionnel \SISINON. Dans le
+manuel, on verra que la signature se termine
+par~\underline{\texttt{\emph{TF}}} pour signaler la présence des trois
+signatures~|T|, |F| et~|TF|.
+
+Par ailleurs, \Expliii fournit essentiellement quatre boucles:
+\begin{itemize}
+\item \Macro{bool_do_while:Nn}, déjà rencontrée. C'est un \TANTQUE
+ dont le corps est exécuté puis le test effectué \CAD qu'en toutes
+ circonstances, le corps est exécuté au moins une fois;
+
+\item \Macro{bool_do_until:Nn}, qui inverse le sens du test. C'est un
+ \JUSQUA dont le corps est exécuté au moins une fois;\label{booldountilNn}
+
+\item \Macro{bool_while_do:Nn}, \TANTQUE qui commence par le
+ test. Il se peut donc que le corps ne soit pas exécuté;
+
+\item \Macro{bool_until_do:Nn}, \JUSQUA commençant par le
+ test.
+\end{itemize}
+
+Ces quatres \glspl{fonction} ont des variantes de signatures~|cn|
+et~|nn|. Avec~|cn|, le 1\ier argument est le nom d'un \gls{booleen};
+avec~|n|, c'est une expression booléenne comme \TO exemple tiré de
+\autocite{l3interfaces}\TF
+%
+\begin{Verbatim}[frame=lines, framesep=0.75\baselineskip]
+\int_compare_p:n { 1 = 1 } &&
+ (
+ \int_compare_p:n { 2 = 3 } ||
+ \int_compare_p:n { 4 <= 4 } ||
+ \str_if_eq_p:nn { abc } { def }
+ ) &&
+! \int_compare_p:n { 2 = 4 }
+\end{Verbatim}
+%
+qui permet de mesurer la complexité acceptée.
+
+\subsection{Écrire la liste des nombres premiers}
+\label{sec:ecrirelistepremiers}
+
+Avant d'aborder la commande destinée à l'utilisateur \TO dont je dirai
+que c'est une \emph{commande de document}, comme le suggère le nom de
+la macro qui permettra de la créer tout à l'heure. L'extension
+\Pkg{xparse}~\autocite{xparse} parle de \English{document-level
+ command}\TF, je présente deux nouvelles macros utilitaires \TO
+qui elles aussi auraient pu être \emph{privées}\TF à savoir
+\Macro{yh_ecrire_separateur:n} et \Macro{yh_ecrire_si_premier:n}.
+
+\subsubsection{Deux macros utilitaires}
+
+\Fragment{27}{32}{./codes/henel-def}
+
+On voit dans le code ci-dessus, en ligne~\(27\), une pré-déclaration
+de \Macro{yh_ecrire_separateur:n} qui permet juste de s'assurer que ce
+nom est bien disponible.
+
+La macro suivante \Macro{yh_ecrire_si_premier:n} fait exactement ce
+que son nom suggère.
+
+Passons maintenant à la commande principale.
+
+\subsubsection{La commande de document}
+\label{sec:commandededocument}
+
+\Fragment{34}{59}{./codes/henel-def}
+
+Le code permettant de définir cette commande utilise l'extension
+\Pkg{xparse}~\autocite{xparse} et sa macro \Macro{NewDocumentCommand}.
+
+La syntaxe de déclaration d'argument change quelque peu! Le |m|,
+2\ieme argument de la macro, indique que l'on définit une commande
+requérant un unique argument obligatoire fourni entre accolades \TO
+|m| pour \English{mandatory} \CAD \og obligatoire\fg\TF.
+% Le 1\ier argument est attendu \textsb{entre accolades} \TO pas de
+% fantaisie à la \LaTeXe{}, du genre |\new|\0|com|\0|mand|
+% |\truc|\dots{}, ici\TF. FAUX!
+Le 1\ier argument est, comme on s'y attend, le nom de la commande
+créée.
+
+Le corps de la définition commence en ligne~\(35\) en ouvrant un
+groupe avec \Macro{group_begin:} et finit en ligne~\(59\) en fermant
+le groupe avec \Macro{group_end:}.
+
+\paragraph{Initialisation}
+
+Dans le groupe, je crée en lignes~\(37\) et~\(38\) deux \glspl{entier}
+locaux \TO d'où le |l| initial\TF mais qui seront créés
+\emph{globalement}, car il n'y a pas moyen de faire autrement. Leur
+caractère local est donc conventionnel mais signale que l'on ne doit
+pas s'attendre à ce qu'ils aient une valeur pertinente à l'extérieur
+du groupe.
+
+Pour respecter ce caractère local, je donne à ces \glspl{entier}, une
+valeur avec \Macro{int_set:Nn} et pas avec \Macro{int_gset:Nn} qui, de
+fait, n'est qu'un alias de la première, à moins que ce soit
+l'inverse\footnote{Je ne suis pas allé vérifier dans le
+ source~\autocite{source3}.}.
+
+Afin que, en sortie de commande, ces deux \glspl{entier} ne soient
+plus accessibles \TO \textsl{Vous êtes priés de laisser ces lieux dans l'état
+où vous auriez aimé les trouver en entrant!} \TF, je les annihile en
+lignes~\(57\) et~\(58\) à l'aide de \Macro{cs_undefine:N}.
+
+Il est temps à présent de définir, localement, avec \Macro{cs_set:Nn},
+la fonction \Macro{yh_ecrire_separateur:n}, ce que je fais en
+ligne~\(41\) et~\(42\). Comme la définition est faite dans une
+définition, on doit, bien entendu, recourir au doublement des
+\emph{dièses} d'où le |##1| dans le code de cette fonction.
+
+Dans les 1\ier et 3\ieme arguments de \Macro{int_compare:nNnTF} on
+peut écrire \emph{naturellement} des opérations sur les entiers. Je ne
+m'en prive pas.
+
+Les tildes~|~| que l'on voit apparaitre en ligne~\(42\) permettent de
+coder un espace qui apparaitra dans le document final. Par contre, il
+faut utiliser autre chose pour coder un espace insécable \TO la
+solution est la macro \Macro{nobreakspace}\TF.
+
+Je suis obligé de regarder si le séparateur est le dernier car, en
+français\footnote{Encore que, si j'ai bien compris un article récent
+ paru dans la presse britanique, même à Oxford on a fini par
+ renoncer à la virgule devant le \emph{and} précédant le dernier mot
+ d'une énumération. \textsl{Tout fout l'camp, ma bonne dame!}} il ne
+doit pas y avoir de virgule devant le \emph{et}.
+
+Comme l'annonce la ligne~\(43\) je ne calcule pas les deux premiers
+nombres premiers \TO Donald \textsc{Knuth} ne le faisait pas\TF et je
+ne vérifie pas que l'utilisateur demande au moins trois nombres \TO
+même remarque\TF; pour faire comme dans les livres sérieux, je laisse
+cette amélioration comme exercice pour le lecteur.
+
+Je prépare maintenant la boucle en initialisant, localement, le
+\emph{candidat premier} à~\(3\). On a déjà vu \Macro{int_set:Nn}.
+Et je rentre dans la boucle en ligne~\(50\) pour en sortir en
+ligne~\(55\). La seule nouveauté de ce fragment de code est l'emploi
+de \Macro{int_incr:N} qui permet d'incrémenter localement le compteur
+\Macro{l_compteur_int}.
+
+J'ai déjà expliqué ci-dessus l'utilité des lignes~\(57\) à~\(59\).
+
+\subsection{Utilisation de la commande de document}
+\label{sec:utilisation}
+
+Il me reste à utiliser cette commande dans ce document:
+|\ListePremiers{15}| produit \og \ListePremiers{15}\fg.
+
+Au passage, on notera avec satisfaction que |\primes| et
+|\ListePremiers| sont d'accord quant aux quinze premiers nombres
+premiers. C'est rassurant.
+
+\subsection{Quelques commentaires subjectifs}
+\label{sec:commentairessubjectifs}
+
+J'accorde sans peine qu'avec \Expliii le code est plus verbeux qu'avec
+\TeX{} tout seul. Je ne peux, cependant, m'empêcher de penser qu'il
+est plus clair. Pour ma part, le gain énorme que je vois en passant
+cette fois de \LaTeXe{} à \Expliii{} c'est le systématisme du nommage
+des macros, \glspl{fonction} ou \glspl{variable}. L'équipe du projet
+\LaTeX3 en fait d'ailleurs, elle-même, un ``\emph{argument de
+ vente}''.
+
+La puissance de \Macro{NewDocumentCommand} \TO que l'on a à peine
+effleuré ci-dessus\TF, à elle seule, peut inciter à passer à
+\Expliii{} pour créer ses propres macros.
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "dun19expl3"
+%%% End:
diff --git a/info/expose-expl3-dunkerque-2019/dk19eratosthene.tex b/info/expose-expl3-dunkerque-2019/dk19eratosthene.tex
new file mode 100644
index 0000000000..269efbcb46
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/dk19eratosthene.tex
@@ -0,0 +1,234 @@
+% Time-stamp: <2019-09-24 10:45:10 administrateur>
+% Création : 2019-08-24T14:40:52+0200
+
+Il s'agit maintenant de fournir quelques commandes de document permettant de
+créer un exemple du crible d'Eratosthène comme ceci:
+\begin{center}\label{lecrible100}
+ \eratosthene{100}
+ \EcrireCribleEratosthene{100}
+\end{center}
+
+Ce sera l'occasion d'évoquer un des \og objets de haut niveau\fg
+fourni par \Expliii. Non, je ne parle pas de programmation objet!
+
+Une fois encore, je place le code dans un ``bête''
+fichier~\texttt{.tex} d'où les bien connus désormais
+\Macro{ExplSyntaxOn} et \Macro{ExplSyntaxOff} en début et fin de
+fichier.
+
+\section{Buts et algorithmes}
+\label{sec:butsalgo}
+
+L'objet dont il est question est appelé \English{intarray}. Il est
+global et, une fois créé, ne peut être détruit\footnote{C'est du moins
+ ce que je comprends à la lecture \TO que j'ai voulu rapide\TF du
+ source. En tout cas \Expliii ne fournit pas d'outil pour ce
+ faire.}. Dans certains langages on parle de \emph{vecteurs} mais il
+s'agit ici d'un vecteur d'\glspl{entier} (relatifs) et d'entiers
+seulement. Sa taille doit être donnée à la création et ne peut pas
+être changée.
+
+Avec la commande \Macro{eratosthene}, on crée deux \emph{vecteurs
+ d'entiers}. Le premier, \Macro{__ERA_dv_ia}, contient en \(n\)\ieme
+place le plus petit diviseur premier de~\(n\). Le second,
+\Macro{__ERA_qt_ia}, contient en \(n\)\ieme place le quotient de~\(n\)
+et de ce diviseur premier dont je viens de parler.
+
+La commande \Macro{eratosthene} ne prend qu'un argument, un entier
+naturel, qui est la taille des deux vecteurs sus-définis.
+
+Une fois les vecteurs créés, on pourra les utiliser pour écrire le
+crible d'Eratosthène comme vu précédemment ou, pour donner un autre
+exemple, obtenir la décomposition d'un entier comme produit de ses
+diviseurs premiers.
+
+\section{Création des vecteurs}
+\label{sec:creationvecteurs}
+
+\Fragment[commande \texttt{eratosthene},
+initialisation]{5}{10}{./codes/erato-def}
+
+En \Ligne{6} j'ouvre un groupe avec \Macro{group_begin+} qui sera
+fermé juste avant l'accolade fermante marquant la fin de la définition
+de \Macro{eratosthene} en \Ligne{45}.
+
+Dans ce groupe je vais créer un \emph{entier} avec
+\Macro{int_new+N}. Il est créé globalement mais je le détruis en
+\Ligne{44} avec \Macro{cs_undefine+N}. Il ne survivra donc pas à la
+macro.
+
+Je crée également les deux vecteurs en lignes~\(9\) et~\(10\) à l'aide
+de \Macro{intarray_new+Nn} qui prend en 2\ieme argument la taille du
+vecteur qui est l'argument passé à \Macro{eratosthene}. Initialement
+ces vecteurs ne contiennent que des zéros.
+
+Les noms des vecteurs devraient se terminer par \texttt{_intarray}
+mais je me suis permis un raccourci en \texttt{_ia}. Leurs noms
+commencent avec le double souligné puisque ce sont des
+\glspl{variable} \emph{privées}. \texttt{ERA} est le sigle de ce
+pseudo-module.
+
+En \Ligne{8} je donne à la \gls{variable}
+\Macro{l_ERA_diviseur_max_int} la partie entière de la racine carrée
+de la taille des vecteurs \TO valeur donnée par~|#1|\TF en
+\emph{transtypant} le résultat de l'opération |floor(| |sqrt (| |#1|
+|))| qui est un \gls{flottant} en un \gls{entier}.
+
+\subsection{Une commande auxiliaire}
+
+Je crée maintenant, à l'intérieur de la définition de
+\Macro{eratosthene} la commande \Macro{ERA_marquer_de_a_par+nnn} que,
+de fait, je n'utiliserai qu'une fois, en \Ligne{33}, et dont, par
+conséquent, j'aurais pu faire l'économie, au risque d'embrouiller
+considérablement le code suivant.
+
+\Fragment[commande \texttt{eratosthene},
+auxiliaire]{12}{20}{./codes/erato-def}
+
+Je crée cette commande localement grâce à \Macro{cs_set+Nn}, elle ne
+survivra donc pas au groupe. Je commence, dans la définition de
+\Macro{ERA_marquer_de_a_par+nnn}, par donner comme valeur à la
+\gls{variable} \emph{locale} \Macro{l_tmpa_int} le quotient entier des
+1\ier et 3\ieme arguments de la commande.
+
+Puis, lignes~\(15\) à~\(19\), j'utilise \Macro{int_step_inline+nnnn}
+pour accomplir le travail. C'est une boucle \POUR. L'index \TO
+implicite et anonyme\TF parcourt les entiers en partant du premier
+argument de cette dernière macro jusqu'au troisième argument avec un
+pas donné par le deuxième. Le 4\ieme argument est le code \emph{en
+ ligne} dans lequel |#1| est l'indice de la boucle. Enfin, |#1|
+serait l'indice de la boucle si on utilisait directement la macro
+\Macro{int_step_inline+nnnn} au niveau du document. Ici comme je
+l'utilise dans une définition incluse elle-même dans une définition,
+je dois doubler les dièses deux fois d'où le |####1| que l'on voit
+dans le code.
+
+En \Ligne{19}, j'incrémente \Macro{l_tmpa_int}. De la \Ligne{16} à la
+\Ligne{18}, j'ai un test \SIALORS avec \Macro{int_compare+nNnT}:
+les actions des lignes~\(17\) et~\(18\) ne seront accomplies que s'il
+est vrai que la |####1|-ième composante du vecteur \Macro{__ERA_dv_ia}
+est nulle \CAD que ce nombre n'a pas encore été traité. Dans ce cas,
+je place la valeur du pas~|##3| \TO c'est le plus petit diviseur
+premier du nombre considéré\TF à la bonne place dans le vecteur des
+diviseurs et je place le quotient à la place idoine dans le vecteur
+des quotients. L'incrémentation faite en-dessous me dispense de
+calculer ce quotient à l'aide d'une division entière.
+
+Comme le nom l'indique la macro \Macro{intarray_gset+Nnn} réalise une
+affectation \textbf{g}lobale dans le vecteur donné en 1\ier argument. C'est
+bien ce que je veux. Le 2\ieme argument donne l'indice, le 3\ieme la
+valeur à y placer.
+
+\subsection{Traitement des entiers pairs}
+\label{sec:lespairs}
+
+Je retourne maintenant au niveau de la définition de la commande
+\Macro{eratosthene} et je commence par traiter les nombres pairs.
+
+\Fragment[commande \texttt{eratosthene},
+nombres pairs]{23}{28}{./codes/erato-def}
+
+À ce moment de l'action, les deux vecteurs ne contiennent que des
+zéros, cela nous dispense du test tel qu'il apparaît dans la macro
+auxiliaire vue ci-dessus. De plus, le premier quotient (\(2/2\)) est
+clairement~\(1\) d'où la \Ligne{23}.
+
+On retrouve ensuite \Macro{int_step_inline+nnnn} pour traiter les
+nombres pairs en partant de~\(2\), avec un pas de~\(2\), et en
+finissant à la taille des vecteurs~|#1|.
+
+\subsection{Traitement des entiers impairs}
+\label{sec:lesimpairs}
+
+Le traitement des entiers impairs se fera en deux étapes, la deuxième
+étant d'une simplicité déconcertante.
+
+\Fragment[commande \texttt{eratosthene},
+impairs]{31}{36}{./codes/erato-def}
+
+Nous avons déjà vu tout ce que j'utilise ici. On notera, lignes~\(35\)
+et~\(36\), la boucle permettant, en avançant de~\(2\) en~\(2\), de
+trouver le prochain nombre impair non traité avec
+\Macro{int_do_until+nNnn} analogue, pour réaliser une boucle sur les
+entiers, de \Macro{bool_do_until+Nn} présentée page~\pageref{booldountilNn}.
+
+La dernière boucle traite les nombres impairs qui n'ont pas encore été
+vus. On pourrait améliorer la chose en commençant avec le premier
+impair non-vu, une fois encore je laisse ça en exercice!
+
+\Fragment[commande \texttt{eratosthene}]{39}{42}{./codes/erato-def}
+
+\section{Deux exemples d'utilisation}
+\label{sec:utilisationcrible}
+
+Les deux vecteurs ayant été créés, on peut les utiliser. Je donne deux
+exemples: l'écriture du \og crible\fg, l'écriture d'un nombre comme
+produit de ses facteurs premiers \TO version améliorable\TF.
+
+\subsection{Écriture du crible}
+\label{sec:ecriturecrible}
+
+Je présente maintenant la commande permettant de créer le tableau
+présenté en page~\pageref{lecrible100}.
+
+\Fragment[écriture du crible, commande de
+document]{69}{70}{./codes/erato-def}
+
+L'unique argument de \Macro{EcrireCribleEratosthene} doit être un
+entier positif plus petit que la taille des deux vecteurs créés
+auparavant sinon on aura une erreur d'accès aux vecteurs dû à un
+indice hors bornes.
+
+Bien entendu, cette commande se contente de refiler le boulot à la
+commande interne \Macro{ERA_presenter_nieme+n} par l'intermédiaire de
+la boucle \Macro{int_step_inline+nn}.
+
+Soulevons le capot.
+
+\Fragment[écriture du crible, commande interne]{50}{67}{./codes/erato-def}
+
+Pour la création du tableau, je copie servilement le code que fourni
+Christian \textsc{Tellechea} dans~\autocite{tellechea}. J'utilise
+quand même la macro \Macro{framebox} fournie par \LaTeXe{} car
+personne n'est obligé de réinventer la roue chaque matin!
+
+\subsection{Décomposition d'un nombre en facteurs premiers}
+\label{sec:facteurspremiers}
+
+Regardons à présent la commande permettant d'obtenir:
+\EcrireDiviseurs{78} \qquad \EcrireDiviseurs*{75} \qquad
+\EcrireDiviseurs*{64}
+\par\noindent
+avec le code
+\par\noindent
+|\EcrireDiviseurs{78}| |\qquad| |\EcrireDiviseurs*{75}| |\qquad| |\EcrireDiviseurs*{64}|.
+
+Voici le code:
+\Fragment[facteurs premiers]{73}{96}{./codes/erato-def}
+
+Comme on l'aura remarqué, la commande \Macro{EcrireDiviseurs} admet
+une variante étoilée. On l'obtient facilement avec
+\Macro{NewDocumentCommand} en donnant comme descriptif de 1\ier
+argument le~|s| que l'on voit en \Ligne{73}.
+
+Avec \Macro{IfBooleanF} de la \Ligne{82}, on ne place un saut de
+paragraphe \TO avec \Macro{par}\TF que s'il n'y a \textsb{pas}
+d'étoile.
+
+Pour réagir à la présence ou l'absence d'un lexème \TO une étoile~|*|
+avec le descripteur d'argument~|s|, n'importe quel lexème avec~|t| \TF
+on dispose également de \Macro{IfBooleanT} et de \Macro{IfBooleanTF}.
+
+On retrouve les mêmes techniques de création d'\glspl{entier} dans un
+groupe et leur destruction en sortie du corps de la définition de la
+commande. J'évite les entiers de brouillon fournis par \Expliii{} car
+je préfère, pour ne pas me perdre, des noms plus explicites. De toute
+façon, j'ai besoin d'au moins trois entiers locaux. On devrait pouvoir
+écrire la décomposition de \(75\) sous la forme \(75=3\times5^{2}\) à
+l'aide d'un \gls{entier} supplémentaire. Là encore, l'exercice etc.
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "dun19expl3"
+%%% End:
diff --git a/info/expose-expl3-dunkerque-2019/dk19intro.tex b/info/expose-expl3-dunkerque-2019/dk19intro.tex
new file mode 100644
index 0000000000..c9f84b41b5
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/dk19intro.tex
@@ -0,0 +1,25 @@
+% Time-stamp: <2020-03-21 12:02:52 administrateur>
+% Création : 2019-08-24T14:27:10+0200
+\section{Introduction}
+\label{sec:introduction}
+
+À l'occasion du stage de Dunkerque 2019, j'ai eu envie, pour présenter
+\Expliii{}, de revenir sur un code donné par \textsc{Knuth} dans le
+\TeX book et que Denis \textsc{Roegel} avait décortiqué dans
+l'article \og Anatomie d’une macro\fg paru dans les \emph{Cahiers
+ Gutenberg}, \no 31 (1998), p. 19-28.
+
+Cette macro, bien évidemment écrite en \TeX{}, calcule les
+\(n\)~nombres premiers pour \(n\)~entier supérieur à~\(3\).
+
+J'ai décidé de réécrire une macro produisant le même résultat à l'aide
+de \Expliii{} pour utiliser le code comme base de mon exposé. Une fois
+lancé, j'ai écrit d'autres petits morceaux de code pour présenter
+quelques fonctionalités du langage que le premier exemple ne m'avait
+pas permis d'exposer. C'est tout cela que je vais présenter dans ce
+qui suit.
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "dun19expl3"
+%%% End:
diff --git a/info/expose-expl3-dunkerque-2019/dk19kaprekar.tex b/info/expose-expl3-dunkerque-2019/dk19kaprekar.tex
new file mode 100644
index 0000000000..ad374490a4
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/dk19kaprekar.tex
@@ -0,0 +1,244 @@
+% Time-stamp: <2019-09-22 16:32:18 administrateur>
+% Création : 2019-08-26T12:37:33+0200
+
+\section{Suites de \textsc{Kaprekar}}
+\label{sec:suiteskaprekar}
+
+Une suite de \textsc{Kaprekar} est définie par la donnée d'un nombre
+entier, p.~ex. \(125\), d'une base \TO je prendrai systématiquement et
+uniquement~\(10\) comme base de l'écriture des nombres entiers\TF et
+d'un nombre~\(N\) de chiffres que j'appellerai la \emph{taille} du
+nombre. On obtient un terme~\(u\sb{n+1}\) à partir du terme
+précédent~\(u\sb{n}\) en appliquant l'algorithme suivant:
+\begin{enumerate}\label{algokap}
+\item on écrit \(u\sb{n}\) avec \(N\) chiffres dans la base choisie
+ quitte à compléter avec des zéros;
+\item on range les \(N\) chiffres ainsi obtenus dans l'ordre
+ décroissant pour obtenir \(v\sb{n}\);
+\item on range les \(N\) chiffres dans l'ordre croissant pour obtenir
+ \(w\sb{n}\);
+\item enfin, \(u\sb{n+1} = v\sb{n} - w\sb{n}\).
+\end{enumerate}
+
+Une telle suite est évidemment finie. La commande que nous allons
+détailler s'arrête sur le dernier nombre déjà obtenu.
+
+En voici deux exemples.
+
+On obtient \og \Kaprekar{125}\fg avec |\Kaprekar{125}| qui, par
+défaut, travaille avec \(N=4\), et \og \Kaprekar[6]{125}\fg pour
+lequel on a pris \(N=6\).
+
+L'objet qui va nous servir à créer ces suites est la \gls{sequence}
+\TO dont le sigle est \texttt{seq} \TF que fournit l'extension
+\Pkg{l3seq}.
+
+
+\section{Le code}
+\label{sec:kaprekarcode}
+
+Je rappelle que tout le code est placé entre \Macro{ExplSyntaxOn}
+et \Macro{ExplSyntaxOff} pour les raisons déjà exposées.
+
+La commande de document est \Macro{Kaprekar} dont voici le code.
+
+\Fragment[Kaprekar, commande de
+document]{73}{74}{./codes/kaprekar-def}
+
+On y retrouve l'habituelle \Macro{NewDocumentCommand} mais un nouveau
+descripteur d'argument, à savoir |O{4}|: le premier argument est
+optionnel et sa valeur par défaut est~\(4\). Si on veut en fournir une
+autre, on le placera entre crochet comme d'habitude.
+
+La commande n'est, de fait et à part le truc de l'argument optionnel,
+qu'un alias de \Macro{KAP_ecrire_tous_les_suivants+nn} que je vais
+maintenant détailler. Mais commençons par la phase d'initialisation.
+
+\subsection{Initialisation}
+\label{sec:kaprinit}
+
+\Fragment[Kaprekar, initialisation]{4}{6}{./codes/kaprekar-def}
+
+Avec \Macro{seq_new+N} je crée deux \glspl{sequence}: \Macro{kaprun_seq}
+et \Macro{kaprekar_seq}. La première \gls{variable} a vocation à
+recevoir la suite des chiffres du nombre traité. La seconde contiendra
+la suite de \textsc{Kaprekar}.
+
+Je crée ensuite un \gls{entier} \emph{local} en suivant le modèle
+de l'extension \Pkg{int}.
+
+\subsection{De l'entier à la suite et retour}
+\label{sec:entiersuiteretour}
+
+J'ai besoin de commandes internes \TO qui pourraient être privées\TF
+pour \emph{découper} un entier en la suite de ses chiffres et pour
+créer un entier à partir d'une suite de chiffres. Le fait de
+travailler en base fixée \TO et en base~\(10\) qui plus est\TF
+facilite largement le travail. Là encore, si le cœur vous en dit,
+exercice!
+
+\Fragment[Kaprekar, de l'entier à la
+suite]{9}{15}{./codes/kaprekar-def}
+
+Le premier argument de \Macro{KAP_int_to_seq+NN} est le nombre à
+découper, le second la suite qui contiendra ses chiffres. Dans les
+deux cas, la commande attend une \gls{variable}.
+
+Nous avons déjà rencontré la majorité des commandes utilisées dans la
+définition. Avec \Macro{seq_put_left+NV} je place en première place
+\TO à gauche \InEnglish{left}\TF la valeur contenue dans la
+\gls{variable} \Macro{l_tmpb_int}. Le~|V| dans la signature assure que
+la commande \Macro{l_tmpb_int} sera traitée de telle sorte que l'on
+récupère bien son contenu.
+
+Dans la boucle, on trouve \Macro{int_div_truncate+nn} qui permet de
+récupérer le quotient entier de~|#1| par~|#2|.
+
+\medbreak
+
+\Fragment[Kaprekar, de la suite à
+l'entier]{17}{22}{./codes/kaprekar-def}
+
+Cette commande transforme une suite de chiffres en un \gls{entier}. On
+trouve, en~\Ligne{18}, la commande \Macro{seq_pop_right+NNT} qui
+prend la valeur la plus à droite dans la suite passée en 1\ier
+argument pour la placer dans la \gls{variable} donnée en 2\ieme
+argument. Si cette opération est possible \TO \CAD si la pile n'était
+pas vide\TF le 3\ieme argument est développé.
+
+La suite, après cette opération, est amputée de sa dernière
+valeur. J'utilise ici la suite comme une pile \TO c'est le fameux
+\textsc{lifo} pour \English{Last In First Out} \TF. \Expliii{} fournit
+aussi des commandes qui permettent d'utiliser la suite comme une queue
+\TO \textsc{fifo} pour \English{First In First Out}\TF.
+
+Dans la boucle, j'utilise \Macro{seq_if_empty_p+N} qui prend la valeur
+\VRAI{} si la \gls{sequence} est vide. Tant qu'elle n'est pas vide, je
+multiplie par~\(10\) la valeur conservée dans la \gls{variable} donnée
+en~|#2| et j'y ajoute la dernière valeur extraite de la pile.
+
+De fait, le chiffre le plus à droite est celui de \emph{poids} le plus
+grand.
+
+\medbreak
+
+\Fragment[Kaprekar, remplissage]{24}{26}{./codes/kaprekar-def}
+
+Cette commande assure que la suite contient le bon nombre de chiffres
+en ajoutant des zéros si nécessaire. La seule nouveauté est
+\Macro{seq_count+N} qui donne le nombre de valeurs contenues dans la
+suite.
+
+\medbreak
+
+\Fragment[Kaprekar, tri]{28}{32}{./codes/kaprekar-def}
+
+\Macro{seq_sort+Nn} trie la \gls{sequence} donnée \TO par son \og
+nom\fg\TF en 1\ier argument à l'aide du code donnée en 2\ieme
+argument. Ici, j'échange |##1| et |##2| si le premier est strictement
+supérieur au second, autrement dit, je trie les éléments de la suite du
+plus petit au plus grand. Les commandes \Macro{sort_return_swapped+}
+\TO retourner en échangeant\TF et \Macro{sort_return_same+} \TO
+retourner le même\TF assurent le tri.
+
+\medbreak
+
+\Fragment[Kaprekar, calcul du terme
+suivant]{34}{44}{./codes/kaprekar-def}
+
+Le terme courant est donné par une \gls{variable} comme 2\ieme
+argument, le 1\ier est la taille, le 3\ieme doit être la
+\gls{variable} qui recevra le terme suivant.
+
+\Macro{kaprun_seq} prend en~\Ligne{35} les chiffres du terme courant
+puis on remplit puis on range dans l'ordre croissant.
+
+Avec \Macro{seq_set_eq:NN}, en~\Ligne{39}, on crée, localement et sans
+contrôle, \Macro{kaprdx_seq} comme copie de \Macro{kaprun_seq} puis,
+en ligne suivante, on la range dans l'ordre décroissant.
+
+Les trois dernières lignes traduisent l'algorithme de \textsc{Kaprekar}
+tel qu'exposé en~\pageref{algokap}.
+
+Il ne reste plus qu'à utiliser tout cela.
+
+\subsection{Commande interne}
+
+\Fragment[Kaprekar, commande interne]{46}{71}{./codes/kaprekar-def}
+
+La commande \Macro{KAP_ecrire_tous_les_suivants+nn} prend la valeur
+de~\(N\) \TO la \emph{taille}\TF en premier argument et le premier
+terme de la suite comme 2\ieme argument.
+
+Une fois de plus, tout se passe dans un groupe, ouvert en~\Ligne{47}
+et fermé en~\Ligne{71}.
+
+J'utilise la \gls{variable} booléenne locale \Macro{l_tmpa_bool}
+fournie par \Expliii{}. Je lui donne la valeur \VRAI{}
+en~\Ligne{48}. Quand elle prendra la valeur \FAUX{} il sera temps de
+sortir de la boucle \TO lignes~\(54\) à~\(57\)\TF qui remplit la
+\gls{sequence} \Macro{kaprekar_seq}.
+
+Avec \Macro{seq_clear+N}, en~\Ligne{49}, je vide la suite
+\Macro{kaprekar_seq}.
+
+En \Ligne{51} je place le 1\ier terme de la suite dans la
+\gls{sequence} \Macro{kaprekar_seq}. Cette fois je remplis par la
+droite avec \Macro{seq_put_right+NV} \TO j'utilise la suite comme une
+\emph{queue}\TF.
+
+C'est parce que j'ai besoin que cette valeur soit placée dans la
+\gls{variable} \Macro{l_tmpc_int} que j'utilise
+\Macro{seq_put_right+NV}. S'il suffisait de placer la valeur
+directement dans la suite, on pourrait utiliser
+\Macro{seq_put_right+Nn} avec le code
+\vspace{-\baselineskip}
+\begin{Verbatim}[frame=lines,framesep=0.75\baselineskip]
+\seq_put_right:Nn \kaprekar_seq {#2}
+\end{Verbatim}
+
+Je place dans \Macro{l_tmpc_int} le terme suivant calculé avec
+\Macro{KAP_suivant+nNN} en~\Ligne{52} et si ce terme est déjà présent
+dans la suite \TO cas ou \(u\sb{1} = u\sb{0}\)\TF je donne à
+\Macro{l_tmpa_bool} la valeur \FAUX. C'est \Macro{seq_if_in+NVT} qui
+permet de vérifier que la valeur~|#2| est présente dans la suite~|#1|
+et de développer, si besoin le code placé dans~|#3|.
+
+À la fin de la \Ligne{57} la suite a été créée.
+
+J'ai laissé, commentée, la \Ligne{58} que j'ai utilisée à titre de
+diagnostic: la commande \Macro{seq_show+N} permet d'écrire le
+contenu de la \gls{sequence} dans le fichier~|.log|.
+
+À la ligne suivante, la commande \Macro{seq_use+Nnnn} permet d'écrire
+le contenu de la \gls{sequence}, donnée en 1\ier argument. Les trois
+arguments suivants donnent, dans l'ordre, le séparateur du premier et
+deuxième élément quand il n'y a que deux éléments; ce qui précède
+chaque élément, sauf le dernier, quand il y plus de deux éléments;
+enfin, ce qui sépare l'avant-dernier du dernier élément. Comme je veux
+que les nombres soient écrits à l'aide de \Macro{np} je ne peux pas me
+contenter de cette ligne d'où ce qui suit.
+
+Après avoir placé dans un compteur le nombre d'éléments de la suite,
+j'utilise \Macro{seq_map_inline+Nn} pour appliquer à chaque élément de
+la suite passée en 1\ier argument le code contenu dans le 2\ieme
+argument \TO \Ligne{62} à~\(70\)\TF.
+
+Dans ce code, j'écris l'élément en en donnant la valeur à \Macro{np}
+en mode mathématique en ligne puis je décrémente le compteur à l'aide
+de \Macro{int_decr+N}.
+
+Avec \Macro{int_case+nnF}, je sélectionne le séparateur à placer: si
+le compteur vaut~\(1\) j'écris \og |~et~|\fg, s'il vaut~\(0\), je n'écris
+rien \TO \Ligne{67}\TF et, dans tous les autres cas \TO \Ligne{69}\TF,
+j'écris \og |~;~|\fg.
+
+% \subsection{\texorpdfstring{\Kaprekar[2]{12}}{kaprekar 2-12}}
+
+% \Fragment[Kaprekar]{4}{45}{./codes/kaprekar-def}
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "dun19expl3"
+%%% End:
diff --git a/info/expose-expl3-dunkerque-2019/dun19expl3.pdf b/info/expose-expl3-dunkerque-2019/dun19expl3.pdf
new file mode 100644
index 0000000000..f8e8f8d91f
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/dun19expl3.pdf
Binary files differ
diff --git a/info/expose-expl3-dunkerque-2019/dun19expl3.tex b/info/expose-expl3-dunkerque-2019/dun19expl3.tex
new file mode 100644
index 0000000000..1a81dda907
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/dun19expl3.tex
@@ -0,0 +1,152 @@
+% Time-stamp: <2020-03-21 18:06:46 administrateur>
+% Création : 2019-08-04T17:42:03+0200
+
+\documentclass[french]{article}
+\usepackage[T1]{fontenc}
+\usepackage[a4paper]{geometry}
+\usepackage{xspace}
+\usepackage{array}
+\usepackage{csquotes}
+\usepackage[expert,oldstyle]{fourier}
+\usepackage[CharPoCal=false,suite=false,taupe=false]{tdsfrmath}
+
+\usepackage{fancybox}
+\usepackage{etaremune}
+
+\usepackage{fvextra}
+\usepackage{xparse}
+\usepackage{dun19codepres}
+
+\usepackage[xindy]{imakeidx}
+\makeindex
+
+\usepackage[main=french]{babel}
+\usepackage[np,autolanguage]{numprint}
+
+\usepackage[hidelinks]{hyperref} % options à définir !
+
+\usepackage[backend=biber]{biblatex}
+\addbibresource{./bibliographie/dun19expl3.bib}
+
+\usepackage[xindy,nogroupskip]{glossaries-extra}
+\newglossary[klg]{cs}{kls}{klo}{Commandes, fonctions et variables}
+\makeglossaries
+
+\loadglsentries{./glosaires/termes-techniques}
+\loadglsentries{./glosaires/les-macros}
+\loadglsentries{./glosaires/erato-supp-glo}
+\loadglsentries{./glosaires/kaprekar-sup-glo}
+
+\title{%
+ Quelques aspects de la programmation avec
+ \Expliii{}\footnote{Version 1.2}}
+\author{Yvon \textsc{Henel}}
+
+\begin{document}
+\input{./codes/knuth-def}
+\input{./codes/henel-def}
+\input{./codes/erato-def}
+\input{./codes/kaprekar-def}
+
+\makeunderlineletter
+\DefineShortVerb{\|}
+\maketitle{}
+
+\begin{abstract}
+ Quelques aspects de la programmation avec \Expliii{} présentés au
+ travers de code calculant sur les entiers: écriture des \(n\)
+ premiers entiers premiers; crible d'\textsc{Ératosthène}; suites de
+ \textsc{Kaprekar}.
+\end{abstract}
+
+\vspace{4\baselineskip}
+
+\begin{center}
+ \shadowbox{%
+ \begin{minipage}{0.8\linewidth}
+ \centering \large \textbf{Remerciements}\par
+
+ \vspace{\baselineskip}
+
+ \normalsize
+ Je remercie François \textsc{Pantigny} pour sa lecture attentive
+ de la version~1.
+
+ \vspace*{\baselineskip}
+ \end{minipage}}
+\end{center}
+
+
+\newpage{}
+
+\tableofcontents{}
+
+\newpage{}
+
+\input{dk19intro}
+
+\part{Écrire les premiers nombres premiers}
+\label{part:premierspremiers}
+
+\input{dk19ecrireprem}
+
+\part{Le crible d'Eratosthène}
+\label{part:cribleerato}
+
+\input{dk19eratosthene}
+
+\part{Les suites de Kaprekar}
+\label{part:kaprekar}
+
+\input{dk19kaprekar}
+
+\newpage{}
+
+\part{Annexes}
+\label{part:annexes}
+
+\printbibliography{}
+
+\printindex{}
+
+\printglossaries
+
+\newpage{}
+
+\section*{Remarques sur le document et historique des corrections}
+\label{sec:historique}
+
+\subsection*{Remarques}
+\label{sec:remarques}
+
+Je tente \TO comme chacun sait il y a souvent loin de la coupe aux
+lèvres\TF de respecter l'orthographe dite \emph{nouvelle}. On ne verra
+donc plus d'accent circonflexe sur certains i! Il m'arrive, dans mon
+ardeur de jeune révolutionnaire, de priver dudit accent certains o ou
+autres a. On devra à quelque lectrice ou lecteur leur rétablissement.
+
+Je tiens à remercier, d'avance, tout ceux qui prendront la peine de me
+signaler erreur, omission, impropriété, obscurité et autres
+maladresses.
+
+\subsection*{Historique des corrections}
+\label{sec:histocorr}
+
+\begin{etaremune}
+\item
+ Seule une correction orthographique motive la version~\(1.2\),
+ première version déposée sur le CTAN.
+
+\item
+ La version~\(1.1\) intègre les corrections proposées par François
+ \textsc{Pantigny} \TO courriel du 21 septembre 2019\TF même si je
+ persiste à dépouiller les i de leurs si surannés chapeaux.
+\end{etaremune}
+\end{document}
+
+%%% Local Variables:
+%%% coding: utf-8
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
+
diff --git a/info/expose-expl3-dunkerque-2019/extensions/dun19codepres.sty b/info/expose-expl3-dunkerque-2019/extensions/dun19codepres.sty
new file mode 100644
index 0000000000..988999d60b
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/extensions/dun19codepres.sty
@@ -0,0 +1,321 @@
+% Time-stamp: <2019-08-28 08:02:26 administrateur>
+% Création : 2019-08-05T10:18:51+0200
+%%%%% ---------------------------------------------------------------------
+%%%%% © Yvon Henel, 2019
+%%%%% ---------------------------------------------------------------------
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\RequirePackage{l3keys2e,xparse}
+\ProvidesExplPackage
+{dun19codepres} {2019/08/05} {1} {pour article dun19expl3}
+
+\RequirePackage{xspace}
+\RequirePackage{hologo}
+\RequirePackage[dvipsnames]{xcolor}
+
+%%%%% ---------------------------------------------------------------------
+%%%%% outils
+%%%%% ---------------------------------------------------------------------
+
+\def\makeunderlineletter{\catcode`\_=11\relax}
+
+\makeatletter
+
+\newcommand\TdSfrCP@CODE{\texttt}
+
+\let\CODE=\TdSfrCP@CODE
+
+\newcommand\TdSfrCP@ENCODE{\ttfamily}
+
+\newcommand\TdSfrCP@PRESENTATIONMETA{\TdSfrCP@ENCODE\itshape}
+
+\DeclareRobustCommand\0{\discretionary{}{}{}}
+
+\DeclareRobustCommand\1{\0\TdSfrCP@CODE{\_}\0}
+
+\DeclareRobustCommand\2{\TdSfrCP@CODE{:}\0}
+
+\DeclareRobustCommand\3{\discretionary{.}{}{.}}
+
+\DeclareRobustCommand\6{\0\TdSfrCP@CODE{@}\0}
+
+\DeclareRobustCommand\7{\0\TdSfrCP@CODE{/}\0}
+
+\DeclareRobustCommand\9{%
+ \hspace{0pt plus 1pt}\discretionary{}{}{}\hspace{0pt plus 1pt}}
+
+\DeclareRobustCommand\8{\0\TdSfrCP@CODE{-}\0}
+
+\newcommand{\Meta}[1]{%
+ \ensuremath{\langle}{\TdSfrCP@PRESENTATIONMETA #1\/}\ensuremath{\rangle}}
+
+\let\M=\Meta
+
+%%%%% ---------------------------------------------------------------------
+%%%%% Présentation extensions, etc.
+%%%%% ---------------------------------------------------------------------
+
+\newcommand{\Pkg}[1]{\texttt{#1}}
+
+\newcommand{\Mdl}[1]{\textsf{#1}}
+
+\newcommand*{\Expliii}{Expl3\xspace}
+
+\newcommand*{\TdS}{TdS\xspace}
+
+%%%%% ---------------------------------------------------------------------
+%%%%% Présentation macros et arguments
+%%%%% ---------------------------------------------------------------------
+
+\DeclareRobustCommand\Cs[1]{\TdSfrCP@CODE{\char`\\#1}}
+
+\newcommand\Accolades[1]{\TdSfrCP@CODE{\{\0#1\}}}
+
+\newcommand{\Crochets}[1]{\TdSfrCP@CODE{[\0#1]}}
+
+\newcommand{\Parentheses}[1]{\TdSfrCP@CODE{(\0#1)}}
+
+\newcommand{\Inegalites}[1]{\TdSfrCP@CODE{\string<\0#1\string>}}
+
+\DeclareRobustCommand\MargAux[1]{\TdSfrCP@CODE{\{\0\M{#1}\}}}
+\DeclareRobustCommand\OargAux[1]{\TdSfrCP@CODE{[\0\M{#1}]}}
+\DeclareRobustCommand\ParargAux[1]{\TdSfrCP@CODE{(\0\M{#1})}}
+\DeclareRobustCommand\INEGargAux[1]{\TdSfrCP@CODE{\string<\0\M{#1}\string>}}
+
+\newcounter{codefragment}[section]
+
+\makeatother
+
+% -------------------------------------------------------------------------
+% Déclaration et présentation des macros et de leurs arguments
+% -------------------------------------------------------------------------
+
+\str_new:N \__CMD_vedette_str
+
+\NewDocumentCommand{\MacroPresentation}{ m }{
+ \textcolor{MidnightBlue}{\Cs{#1}}
+}
+
+\NewDocumentCommand{\FausseMacroPresentation}{ m }{
+ \textcolor{RedOrange}{\Cs{#1}}
+}
+
+\NewDocumentCommand{\Macro}{s o v}{
+ \IfBooleanTF{#1}
+ {\FausseMacroPresentation{#3}}
+ {
+ \str_set:Nn \__CMD_vedette_str {#3}
+ \str_replace_all:Nnn \__CMD_vedette_str {:} {+}
+ \gls{\str_use:N \__CMD_vedette_str}
+ }
+}
+
+
+\NewDocumentCommand{\Code}{s t+ v}{
+ \IfBooleanTF{#1}
+ { \Crochets{#3} }
+ { \IfBooleanTF{#2}
+ { \Parentheses{#3} }
+ { \Accolades{#3} }
+ }
+}
+
+\NewDocumentCommand{\Marg}{ s }{
+ \IfBooleanTF{#1}
+ { \Accolades }
+ { \MargAux }
+}
+
+\NewDocumentCommand{\Oarg}{ s }{
+ \IfBooleanTF{#1}
+ { \Crochets }
+ { \OargAux }
+}
+
+\NewDocumentCommand{\Parg}{ s }{
+ \IfBooleanTF{#1}
+ { \Parentheses }
+ { \ParargAux }
+}
+
+\NewDocumentCommand{\Iarg}{ s }{
+ \IfBooleanTF{#1}
+ { \Inegalites }
+ { \INEGargAux }
+}
+
+\NewDocumentCommand{\SyntaxeMacro}{ s o }{
+ \IfBooleanF{#1}{\par}
+ \IfNoValueTF{#2}
+ { \SyntaxeMacro_Package_Courant }
+ { \SyntaxeMacro_Autre_Package {#2} }
+}
+
+\NewDocumentCommand{\SyntaxeMacro_Package_Courant}{ m m }
+{
+ \Macro{#1} \TraiterListeArguments{#2}
+}
+
+\NewDocumentCommand{\SyntaxeMacro_Autre_Package}{ m m m }
+{
+ \Macro[#1]{#2} \TraiterListeArguments{#3}
+}
+
+\NewDocumentCommand {\TraiterListeArguments}
+{ > { \SplitList{ , } } m } {
+ \ProcessList {#1} { \Traiter_un_argument }
+}
+
+\NewDocumentCommand {\Traiter_un_argument} { >{ \SplitArgument{1}{/} } m }
+{
+ \Traiter_un_argument_aux #1
+}
+
+\NewDocumentCommand {\Traiter_un_argument_aux} { m m }{
+ \use:c {#1arg}{#2}\9
+}
+
+%%%%% ---------------------------------------------------------------------
+%%%%% Termes techniques, etc.
+%%%%% ---------------------------------------------------------------------
+
+\NewDocumentCommand{\VRAI}{ }{ \textsc{vrai}\xspace }
+
+\NewDocumentCommand{\FAUX}{ }{ \textsc{faux}\xspace }
+
+\NewDocumentCommand{\TANTQUE}{ }{
+ \index{tant~que}\index{boucle}\index{boucle!tant~que}
+ \textsc{tant~que}\xspace
+}
+
+\NewDocumentCommand{\JUSQUA}{}{
+ \index{jusqu'à}\index{boucle}\index{boucle!jusqu'à}
+ \textsc{jusqu'à}\xspace
+}
+
+\NewDocumentCommand{\POUR}{}{
+ \index{pour}\index{boucle}\index{boucle!pour}
+ \textsc{pour}\xspace
+}
+
+\NewDocumentCommand{\SIALORSSINON}{}{
+ \index{si}\index{saut}\index{si!si~alors~sinon}
+ \textsc{si}\dots{}~\textsc{alors}\dots{}~\textsc{sinon}\xspace
+}
+
+\NewDocumentCommand{\SIALORS}{}{
+ \index{si}\index{saut}\index{si!si~alors}
+ \textsc{si}\dots{}~\textsc{alors}\xspace
+}
+
+\NewDocumentCommand{\SISINON}{}{
+ \index{si}\index{saut}\index{si!si~sinon}
+ \textsc{si}\dots{}~\textsc{sinon}\xspace
+}
+
+\NewDocumentCommand{\Ligne}{m}{
+ ligne\nobreakspace\(#1\)
+}
+
+%%%%% ---------------------------------------------------------------------
+%%%%% Traduction, francisation
+%%%%% ---------------------------------------------------------------------
+
+%%% -----------------------------------------------------------------------
+%%% tirets ouvrant et fermant:
+%%% -----------------------------------------------------------------------
+
+\cs_new:Nn \TDS_tiret: { \textemdash }
+
+\cs_new:Nn \TDS_tiret_espace_int: { \ }
+
+\NewDocumentCommand {\TO} { } {
+ \TDS_tiret: \TDS_tiret_espace_int: \ignorespaces }
+
+\NewDocumentCommand {\TF} {t.} {
+ \IfBooleanTF {#1} {
+ \string.} {
+ \unskip \TDS_tiret_espace_int: \TDS_tiret:\xspace}
+}
+
+%%% -----------------------------------------------------------------------
+%%% abbréviations: c'est-à-dire, par exemple,
+%%% -----------------------------------------------------------------------
+
+\cs_new:Nn \TDS_pex_abrev: { p.\nobreakspace ex.\xspace }
+
+\cs_new:Nn \TDS_Pex_abrev: { P.\nobreakspace ex.\xspace }
+
+\NewDocumentCommand {\PX} { s } {
+ \IfBooleanTF{#1}{\TDS_Pex_abrev:}{\TdS_PX_auxi}
+}
+
+\NewDocumentCommand {\TdS_PX_auxi} { t. } {
+ \IfBooleanTF{#1}{\TDS_pex_abrev:}{\TdS_PX_auxii}
+}
+
+\NewDocumentCommand {\TdS_PX_auxii} { t+ } {
+ \IfBooleanTF{#1}{par~exemple\xspace}{\TDS_pex_abrev:}
+}
+
+\NewDocumentCommand {\CAD} { t+ } {
+ \IfBooleanTF{#1}{c'est-\`a-dire}{c.-\`a-d.}\xspace
+}
+
+%%% -----------------------------------------------------------------------
+%%% traduction
+%%% -----------------------------------------------------------------------
+
+\NewDocumentCommand { \English } { m }{
+ \emph{\foreignlanguage{english}{#1}}
+}
+
+\NewDocumentCommand { \InEnglish } { m }{
+ \emph{\foreignlanguage{english}{#1}}
+}
+
+\NewDocumentCommand { \TdSTrad } { m m }{
+ \emph{#1}~\TO anglais~\InEnglish{#2}\TF
+}
+
+%%% -----------------------------------------------------------------------
+%%% notes et remarques
+%%% -----------------------------------------------------------------------
+
+\NewDocumentCommand { \NdT } { m }{
+ \footnote{NdTdS~:~#1}
+}
+
+\NewDocumentEnvironment { TdSrem } { }
+{
+ \par\sffamily\footnotesize
+}
+{
+ \par\bigbreak
+}
+
+\NewDocumentCommand{\Fragment}{O{\TdS{} \textemdash{} \emph{définitions}} m m m}
+{
+ \refstepcounter{codefragment}
+ \VerbatimInput[frame=lines,
+ framesep=0.75\baselineskip,
+ numbers=left,
+ firstline=#2,
+ lastline=#3,
+ label={[#1]fragment
+ \arabic{codefragment}},
+ ]{#4.tex}
+}
+
+% \NewDocumentCommand { \Macro } { s o v } {
+% \IfBooleanTF{#1}
+% {\textcolor{RedOrange}}
+% {\textcolor{MidnightBlue}}
+% {\CODE{#3}}
+% }
+
+% \NewDocumentCommand{\Macro}{s o v}{
+% \IfBooleanTF{#1}
+% {\FausseMacroPresentation{#3}}
+% {\gls{#3}}
+% }
+
diff --git a/info/expose-expl3-dunkerque-2019/glosaires/erato-supp-glo.tex b/info/expose-expl3-dunkerque-2019/glosaires/erato-supp-glo.tex
new file mode 100644
index 0000000000..b14e386180
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/glosaires/erato-supp-glo.tex
@@ -0,0 +1,75 @@
+% Time-stamp: <2019-08-24 17:31:03 administrateur>
+% Création : 2019-08-24T16:24:29+0200
+\newglossaryentry{EcrireDiviseurs}{
+ type=cs,
+ name={\MacroPresentation{Ecri\0re\0Di\0vi\0seurs}},
+ description={PERSO}
+}
+
+\newglossaryentry{int_do_until+nNnn}{
+ type=cs,
+ name={\MacroPresentation{int\1do\1un\0til\2nNnn}},
+ description={}
+}
+
+\newglossaryentry{ERA_presenter_nieme+n}{
+ type=cs,
+ name={\MacroPresentation{ERA\1pre\0sen\0ter\1nieme\2n}},
+ description={PERSO}
+}
+
+\newglossaryentry{ERA_marquer_de_a_par+nnn}{
+ type=cs,
+ name={\MacroPresentation{ERA\1mar\0quer\1de\1a\1par\2nnn}},
+ description={PERSO}
+}
+
+\newglossaryentry{times}{
+ type=cs,
+ name={\MacroPresentation{ti\0mes}},
+ description={}
+}
+
+\newglossaryentry{__ERA_qt_ia}{
+ type=cs,
+ name={\MacroPresentation{\1\1ERA\1qt\1ia}},
+ description={PERSO}
+}
+
+\newglossaryentry{__ERA_dv_ia}{
+ type=cs,
+ name={\MacroPresentation{\1\1ERA\1dv\1ia}},
+ description={PERSO}
+}
+
+\newglossaryentry{l_ERA_vx_dv_int}{
+ type=cs,
+ name={\MacroPresentation{l\1ERA\1vx\1dv\1int}},
+ description={PERSO}
+}
+
+\newglossaryentry{eratosthene}{
+ type=cs,
+ name={\MacroPresentation{era\0to\0sthe\0ne}},
+ description={PERSO}
+}
+
+\newglossaryentry{l_ERA_diviseur_max_int}{
+ type=cs,
+ name={\MacroPresentation{l\1ERA\1di\0vi\0seur\1max\1int}},
+ description={PERSO}
+}
+
+\newglossaryentry{l_ERA_nv_qt_int}{
+ type=cs,
+ name={\MacroPresentation{l\1ERA\1nv\1qt\1int}},
+ description={PERSO}
+}
+
+\newglossaryentry{l_ERA_nv_dv_int}{
+ type=cs,
+ name={\MacroPresentation{l\1ERA\1nv\1dv\1int}},
+ description={PERSO}
+}
+
+
diff --git a/info/expose-expl3-dunkerque-2019/glosaires/kaprekar-sup-glo.tex b/info/expose-expl3-dunkerque-2019/glosaires/kaprekar-sup-glo.tex
new file mode 100644
index 0000000000..9a053376bd
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/glosaires/kaprekar-sup-glo.tex
@@ -0,0 +1,229 @@
+% Time-stamp: <2019-08-28 15:59:41 administrateur>
+% Création : 2019-08-27T10:28:42+0200
+\newglossaryentry{seq_pop_right+NNT}{
+ type=cs,
+ name={\MacroPresentation{seq\1pop\1right\2NNT}},
+ description={e3}
+}
+
+\newglossaryentry{cs_new_protected+Nn}{
+ type=cs,
+ name={\MacroPresentation{cs\1new\1pro\0tec\0ted\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{seq_reverse+N}{
+ type=cs,
+ name={\MacroPresentation{seq\1re\0ver\0se\2N}},
+ description={e3}
+}
+
+\newglossaryentry{l_tmpa_tl}{
+ type=cs,
+ name={\MacroPresentation{l\1tmpa\1tl}},
+ description={e3}
+}
+
+\newglossaryentry{seq_set_eq+NN}{
+ type=cs,
+ name={\MacroPresentation{seq\1set\1eq\2NN}},
+ description={e3}
+}
+
+\newglossaryentry{seq_map_inline+Nn}{
+ type=cs,
+ name={\MacroPresentation{seq\1map\1in\0line\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{l_tmpc_int}{
+ type=cs,
+ name={\MacroPresentation{l\1tmpc\1int}},
+ description={PERSO}
+}
+
+\newglossaryentry{l_tmpa_bool}{
+ type=cs,
+ name={\MacroPresentation{l\1tmpa\1bool}},
+ description={e3}
+}
+
+\newglossaryentry{seq_if_in+NVT}{
+ type=cs,
+ name={\MacroPresentation{seq\1if\1in\2NVT}},
+ description={e3}
+}
+
+\newglossaryentry{l_tmpd_int}{
+ type=cs,
+ name={\MacroPresentation{l\1tmpd\1int}},
+ description={PERSO}
+}
+
+\newglossaryentry{seq_sort+Nn}{
+ type=cs,
+ name={\MacroPresentation{seq\1sort\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{KAP_suivant+nNN}{
+ type=cs,
+ name={\MacroPresentation{KAP\1sui\0vant\2nNN}},
+ description={PERSO}
+}
+
+\newglossaryentry{seq_new+N}{
+ type=cs,
+ name={\MacroPresentation{seq\1new\2N}},
+ description={e3}
+}
+
+\newglossaryentry{bool_while_do+nn}{
+ type=cs,
+ name={\MacroPresentation{bool\1whi\0le\1do\2nn}},
+ description={e3}
+}
+
+\newglossaryentry{sort_return_same+}{
+ type=cs,
+ name={\MacroPresentation{sort\1re\0turn\1same\2}},
+ description={e3}
+}
+
+\newglossaryentry{KAP_seq_to_int+NN}{
+ type=cs,
+ name={\MacroPresentation{KAP\1seq\1to\1int\2NN}},
+ description={PERSO}
+}
+
+\newglossaryentry{KAP_remplir_seq+Nn}{
+ type=cs,
+ name={\MacroPresentation{KAP\1rem\0plir\1seq\2Nn}},
+ description={PERSO}
+}
+
+\newglossaryentry{Kaprekar}{
+ type=cs,
+ name={\MacroPresentation{Ka\0pre\0kar}},
+ description={PERSO}
+}
+
+\newglossaryentry{seq_put_left+NV}{
+ type=cs,
+ name={\MacroPresentation{seq\1put\1left\2NV}},
+ description={e3}
+}
+
+\newglossaryentry{KAP_ranger_seq+N}{
+ type=cs,
+ name={\MacroPresentation{KAP\1ran\0ger\1seq\2N}},
+ description={PERSO}
+}
+
+\newglossaryentry{kaprdx_seq}{
+ type=cs,
+ name={\MacroPresentation{kaprdx\1seq}},
+ description={PERSO}
+}
+
+\newglossaryentry{KAP_ecrire_tous_les_suivants+nn}{
+ type=cs,
+ name={\MacroPresentation{KAP\1ecri\0re\1tous\1les\1sui\0vants\2nn}},
+ description={PERSO}
+}
+
+\newglossaryentry{int_div_truncate+nn}{
+ type=cs,
+ name={\MacroPresentation{int\1div\1trun\0ca\0te\2nn}},
+ description={e3}
+}
+
+\newglossaryentry{kaprun_seq}{
+ type=cs,
+ name={\MacroPresentation{kaprun\1seq}},
+ description={PERSO}
+}
+
+\newglossaryentry{seq_put_right+NV}{
+ type=cs,
+ name={\MacroPresentation{seq\1put\1right\2NV}},
+ description={e3}
+}
+
+\newglossaryentry{seq_put_right+Nn}{
+ type=cs,
+ name={\MacroPresentation{seq\1put\1right\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{seq_put_left+Nn}{
+ type=cs,
+ name={\MacroPresentation{seq\1put\1left\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{seq_clear+N}{
+ type=cs,
+ name={\MacroPresentation{seq\1clear\2N}},
+ description={e3}
+}
+
+\newglossaryentry{seq_if_empty_p+N}{
+ type=cs,
+ name={\MacroPresentation{seq\1if\1em\0pty\1p\2N}},
+ description={e3}
+}
+
+\newglossaryentry{sort_return_swapped+}{
+ type=cs,
+ name={\MacroPresentation{sort\1re\0turn\1swap\0ped\2}},
+ description={e3}
+}
+
+\newglossaryentry{int_decr+N}{
+ type=cs,
+ name={\MacroPresentation{int\1decr\2N}},
+ description={e3}
+}
+
+\newglossaryentry{int_case+nnF}{
+ type=cs,
+ name={\MacroPresentation{int\1case\2nnF}},
+ description={e3}
+}
+
+\newglossaryentry{seq_count+N}{
+ type=cs,
+ name={\MacroPresentation{seq\1count\2N}},
+ description={e3}
+}
+
+\newglossaryentry{bool_do_until+nn}{
+ type=cs,
+ name={\MacroPresentation{bool\1do\1un\0til\2nn}},
+ description={e3}
+}
+
+\newglossaryentry{kaprekar_seq}{
+ type=cs,
+ name={\MacroPresentation{ka\0pre\0kar\1seq}},
+ description={PERSO}
+}
+
+\newglossaryentry{KAP_int_to_seq+NN}{
+ type=cs,
+ name={\MacroPresentation{KAP\1int\1to\1seq\2NN}},
+ description={PERSO}
+}
+
+\newglossaryentry{seq_show+N}{
+ type=cs,
+ name={\MacroPresentation{seq\1show\2N}},
+ description={e3}
+}
+
+\newglossaryentry{seq_use+Nnnn}{
+ type=cs,
+ name={\MacroPresentation{seq\1use\2Nnnn}},
+ description={e3}
+}
diff --git a/info/expose-expl3-dunkerque-2019/glosaires/les-macros.tex b/info/expose-expl3-dunkerque-2019/glosaires/les-macros.tex
new file mode 100644
index 0000000000..79a535ece1
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/glosaires/les-macros.tex
@@ -0,0 +1,511 @@
+% Time-stamp: <2019-08-27 20:15:00 administrateur>
+% Création : 2019-08-06T09:32:09+0200
+\newglossaryentry{(}{
+ type=cs,
+ name={\MacroPresentation{(}},
+ description={l2e}
+}
+
+\newglossaryentry{)}{
+ type=cs,
+ name={\MacroPresentation{)}},
+ description={l2e}
+}
+
+\newglossaryentry{bool_do_while+Nn}{
+ type=cs,
+ name={\MacroPresentation{bool\1do\1whi\0le\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{bool_do_until+Nn}{
+ type=cs,
+ name={\MacroPresentation{bool\1do\1un\0til\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{bool_while_do+Nn}{
+ type=cs,
+ name={\MacroPresentation{bool\1whi\0le\1do\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{bool_until_do+Nn}{
+ type=cs,
+ name={\MacroPresentation{bool\1un\0til\1do\2Nn}},
+ description={e3}
+}
+
+
+\newglossaryentry{bool_gset_false+N}{
+ type=cs,
+ name={\MacroPresentation{bool\1gset\1fal\0se\2N}},
+ description={e3}
+}
+
+\newglossaryentry{bool_if+nT}{
+ type=cs,
+ name={\MacroPresentation{bool\1if\2nT}},
+ description={e3}
+}
+
+\newglossaryentry{bool_if+nF}{
+ type=cs,
+ name={\MacroPresentation{bool\1if\2nF}},
+ description={e3}
+}
+
+\newglossaryentry{bool_if+nTF}{
+ type=cs,
+ name={\MacroPresentation{bool\1if\2nTF}},
+ description={e3}
+}
+
+\newglossaryentry{bool_set_false+N}{
+ type=cs,
+ name={\MacroPresentation{bool\1set\1fal\0se\2N}},
+ description={e3}
+}
+
+\newglossaryentry{bool_set_true+N}{
+ type=cs,
+ name={\MacroPresentation{bool\1set\1true\2N}},
+ description={e3}
+}
+
+\newglossaryentry{cs_new+Nn}{
+ type=cs,
+ name={\MacroPresentation{cs\1new\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{cs_new+cn}{
+ type=cs,
+ name={\MacroPresentation{cs\1new\2cn}},
+ description={e3}
+}
+
+
+\newglossaryentry{cs_set+Nn}{
+ type=cs,
+ name={\MacroPresentation{cs\1set\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{cs_undefine+N}{
+ type=cs,
+ name={\MacroPresentation{cs\1un\0de\0fi\0ne\2N}},
+ description={e3}
+}
+
+\newglossaryentry{ExplSyntaxOff}{
+ type=cs,
+ name={\MacroPresentation{Exp\0lSyn\0tax\0Off}},
+ description={e3}
+}
+
+\newglossaryentry{ExplSyntaxOn}{
+ type=cs,
+ name={\MacroPresentation{Expl\0Syn\0tax\0On}},
+ description={e3}
+}
+
+\newglossaryentry{group_begin+}{
+ type=cs,
+ name={\MacroPresentation{group\1be\0gin\2}},
+ description={e3}
+}
+
+\newglossaryentry{group_end+}{
+ type=cs,
+ name={\MacroPresentation{group\1end\2}},
+ description={e3}
+}
+
+\newglossaryentry{int_add+Nn}{
+ type=cs,
+ name={\MacroPresentation{int\1add\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{int_compare+nNnT}{
+ type=cs,
+ name={\MacroPresentation{int\1com\0pa\0re\2nNnT}},
+ description={e3}
+}
+
+\newglossaryentry{int_compare+nNnTF}{
+ type=cs,
+ name={\MacroPresentation{int\1com\0pa\0re\2nNnTF}},
+ description={e3}
+}
+
+\newglossaryentry{int_compare_p+nNn}{
+ type=cs,
+ name={\MacroPresentation{int\1com\0pa\0re\1p\2nNn}},
+ description={e3}
+}
+
+\newglossaryentry{int_incr+N}{
+ type=cs,
+ name={\MacroPresentation{int\1incr\2N}},
+ description={e3}
+}
+
+\newglossaryentry{int_mod+nn}{
+ type=cs,
+ name={\MacroPresentation{int\1mod\2nn}},
+ description={e3}
+}
+
+\newglossaryentry{int_new+N}{
+ type=cs,
+ name={\MacroPresentation{int\1new\2N}},
+ description={e3}
+}
+
+\newglossaryentry{int_set+Nn}{
+ type=cs,
+ name={\MacroPresentation{int\1set\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{int_gset+Nn}{
+ type=cs,
+ name={\MacroPresentation{int\1gset\2Nn}},
+ description={e3}
+}
+
+
+\newglossaryentry{int_to_arabic+n}{
+ type=cs,
+ name={\MacroPresentation{int\1to\1a\0ra\0bic\2n}},
+ description={e3}
+}
+
+\newglossaryentry{int_while_do+nNnn}{
+ type=cs,
+ name={\MacroPresentation{int\1whi\0le\1do\2nNnn}},
+ description={e3}
+}
+
+\newglossaryentry{l_compteur_int}{
+ type=cs,
+ name={\MacroPresentation{l\1comp\0teur\1int}},
+ description={PERSO}
+}
+
+\newglossaryentry{ListePremiers}{
+ type=cs,
+ name={\MacroPresentation{ListePremiers}},
+ description={PERSO}
+}
+
+\newglossaryentry{l_nombre_requis}{
+ type=cs,
+ name={\MacroPresentation{l\1nom\0bre\1re\0quis}},
+ description={PERSO}
+}
+
+\newglossaryentry{l_tmpa_int}{
+ type=cs,
+ name={\MacroPresentation{l\1tmpa\1int}},
+ description={e3}
+}
+
+\newglossaryentry{l_tmpb_int}{
+ type=cs,
+ name={\MacroPresentation{l\1tmpb\1int}},
+ description={e3}
+}
+
+\newglossaryentry{l_tmpb_int est le candidat à tester}{
+ type=cs,
+ name={\MacroPresentation{l\1tmpb\1int est le candidat à tester}},
+ description={PERSO}
+}
+
+\newglossaryentry{NewDocumentCommand}{
+ type=cs,
+ name={\MacroPresentation{New\0Do\0cu\0mentCom\0mand}},
+ description={xparse}
+}
+
+\newglossaryentry{np}{
+ type=cs,
+ name={\MacroPresentation{np}},
+ description={numprint}
+}
+
+\newglossaryentry{yh_continue_bool}{
+ type=cs,
+ name={\MacroPresentation{yh\1con\0ti\0nue\1bool}},
+ description={PERSO}
+}
+
+\newglossaryentry{__yh_ecrire_nombre+n}{
+ type=cs,
+ name={\MacroPresentation{\1\1yh\1ecri\0re\1nom\0bre\2n}},
+ description={PERSO}
+}
+
+\newglossaryentry{yh_ecrire_separateur+n}{
+ type=cs,
+ name={\MacroPresentation{yh\1ecrire\1se\0pa\0ra\0teur\2n}},
+ description={PERSO}
+}
+
+\newglossaryentry{yh_ecrire_si_premier+n}{
+ type=cs,
+ name={\MacroPresentation{yh\1ecrire\1si\1pre\0mier\2n}},
+ description={PERSO}
+}
+
+\newglossaryentry{yh_est_premier_bool}{
+ type=cs,
+ name={\MacroPresentation{yh\1est\1premier\1bool}},
+ description={PERSO}
+}
+
+\newglossaryentry{yh_impair_est_premier+nT}{
+ type=cs,
+ name={\MacroPresentation{yh\1impair\1est\1pre\0mier\2nT}},
+ description={PERSO}
+}
+
+\newglossaryentry{newcommand}{
+ type=cs,
+ name={\MacroPresentation{new\0com\0mand}},
+ description={L2e}
+}
+
+\newglossaryentry{gdef}{
+ type=cs,
+ name={\MacroPresentation{gdef}},
+ description={TK}
+}
+
+\newglossaryentry{numexpr}{
+ type=cs,
+ name={\MacroPresentation{num\0expr}},
+ description={eTeX}
+}
+
+%%%% macros supplémentaires de eratosthene
+
+\newglossaryentry{AppliquerCribleEratosthene}{
+ type=cs,
+ name={\MacroPresentation{Ap\0pli\0quer\0Cri\0ble\0Era\0to\0sthene}},
+ description={}
+}
+
+\newglossaryentry{cs_generate_variant+Nn}{
+ type=cs,
+ name={\MacroPresentation{cs\1ge\0ne\0ra\0te\1va\0riant\2Nn}},
+ description={el3}
+}
+
+\newglossaryentry{cs_gset_eq+cN}{
+ type=cs,
+ name={\MacroPresentation{cs\1gset\1eq\2cN}},
+ description={el3}
+}
+
+\newglossaryentry{cs_set_eq+Nc}{
+ type=cs,
+ name={\MacroPresentation{cs\1set\1eq\2Nc}},
+ description={el3}
+}
+
+\newglossaryentry{EcrireCribleEratosthene}{
+ type=cs,
+ name={\MacroPresentation{Ecri\0re\0Cri\0ble\0Era\0to\0sthene}},
+ description={}
+}
+
+\newglossaryentry{__ERA_ia}{
+ type=cs,
+ name={\MacroPresentation{\1\1ERA\1ia}},
+ description={}
+}
+
+\newglossaryentry{ERA_presenter_nieme+nn}{
+ type=cs,
+ name={\MacroPresentation{ERA\1pre\0sen\0ter\1nieme\2nn}},
+ description={}
+}
+
+\newglossaryentry{fboxrule}{
+ type=cs,
+ name={\MacroPresentation{fbox\0ru\0le}},
+ description={}
+}
+
+\newglossaryentry{footnotesize}{
+ type=cs,
+ name={\MacroPresentation{foot\0no\0te\0si\0ze}},
+ description={}
+}
+
+\newglossaryentry{fp_to_int+n}{
+ type=cs,
+ name={\MacroPresentation{fp\1to\1int\2n}},
+ description={el3}
+}
+
+\newglossaryentry{framebox}{
+ type=cs,
+ name={\MacroPresentation{fra\0me\0box}},
+ description={}
+}
+
+\newglossaryentry{intarray_count+c}{
+ type=cs,
+ name={\MacroPresentation{int\0ar\0ray\1count\2c}},
+ description={el3}
+}
+
+\newglossaryentry{intarray_count+N}{
+ type=cs,
+ name={\MacroPresentation{int\0ar\0ray\1count\2N}},
+ description={el3}
+}
+
+\newglossaryentry{intarray_gset+Nnn}{
+ type=cs,
+ name={\MacroPresentation{int\0ar\0ray\1gset\2Nnn}},
+ description={el3}
+}
+
+\newglossaryentry{intarray_item+cn}{
+ type=cs,
+ name={\MacroPresentation{int\0ar\0ray\1item\2cn}},
+ description={el3}
+}
+
+\newglossaryentry{intarray_item+Nn}{
+ type=cs,
+ name={\MacroPresentation{int\0ar\0ray\1item\2Nn}},
+ description={el3}
+}
+
+\newglossaryentry{intarray_new+cn}{
+ type=cs,
+ name={\MacroPresentation{int\0ar\0ray\1new\2cn}},
+ description={el3}
+}
+
+\newglossaryentry{intarray_new+Nn}{
+ type=cs,
+ name={\MacroPresentation{int\0ar\0ray\1new\2Nn}},
+ description={el3}
+}
+
+\newglossaryentry{int_compare+nNnF}{
+ type=cs,
+ name={\MacroPresentation{int\1com\0pa\0re\2nNnF}},
+ description={el3}
+}
+
+\newglossaryentry{int_step_inline+nn}{
+ type=cs,
+ name={\MacroPresentation{int\1step\1in\0line\2nn}},
+ description={el3}
+}
+
+\newglossaryentry{int_step_inline+nnnn}{
+ type=cs,
+ name={\MacroPresentation{int\1step\1in\0line\2nnnn}},
+ description={el3}
+}
+
+\newglossaryentry{kern}{
+ type=cs,
+ name={\MacroPresentation{kern}},
+ description={}
+}
+
+\newglossaryentry{langle}{
+ type=cs,
+ name={\MacroPresentation{lan\0gle}},
+ description={}
+}
+
+\newglossaryentry{l_ERA_borne_int}{
+ type=cs,
+ name={\MacroPresentation{l\1ERA\1bor\0ne\1int}},
+ description={}
+}
+
+\newglossaryentry{noindent}{
+ type=cs,
+ name={\MacroPresentation{no\0in\0dent}},
+ description={}
+}
+
+\newglossaryentry{nointerlineskip}{
+ type=cs,
+ name={\MacroPresentation{no\0in\0ter\0li\0ne\0skip}},
+ description={}
+}
+
+\newglossaryentry{par}{
+ type=cs,
+ name={\MacroPresentation{par}},
+ description={}
+}
+
+\newglossaryentry{rangle}{
+ type=cs,
+ name={\MacroPresentation{ran\0gle}},
+ description={}
+}
+
+\newglossaryentry{strut}{
+ type=cs,
+ name={\MacroPresentation{strut}},
+ description={}
+}
+
+\newglossaryentry{textbf}{
+ type=cs,
+ name={\MacroPresentation{text\0bf}},
+ description={}
+}
+
+\newglossaryentry{textcolor}{
+ type=cs,
+ name={\MacroPresentation{text\0co\0lor}},
+ description={}
+}
+
+\newglossaryentry{IfBooleanF}{
+ type=cs,
+ name={\MacroPresentation{If\0Boo\0leanF}},
+ description={xparse}
+}
+
+\newglossaryentry{IfBooleanT}{
+ type=cs,
+ name={\MacroPresentation{If\0Boo\0leanT}},
+ description={xparse}
+}
+
+\newglossaryentry{IfBooleanTF}{
+ type=cs,
+ name={\MacroPresentation{If\0Boo\0leanTF}},
+ description={xparse}
+}
+
+\newglossaryentry{nobreakspace}{
+ type=cs,
+ name={\MacroPresentation{no\0break\0spa\0ce}},
+ description={e3}
+}
+
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "dun19expl3"
+%%% End:
diff --git a/info/expose-expl3-dunkerque-2019/glosaires/termes-techniques.tex b/info/expose-expl3-dunkerque-2019/glosaires/termes-techniques.tex
new file mode 100644
index 0000000000..c570a56e62
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/glosaires/termes-techniques.tex
@@ -0,0 +1,73 @@
+% Time-stamp: <2019-08-28 11:50:49 administrateur>
+% Création : 2019-08-05T13:55:03+0200
+\newglossaryentry{signature}{%
+ name={signature},
+ first={\emph{signature}},
+ description={\InEnglish{signature}}
+}
+
+
+\newglossaryentry{module}{
+ name={module},
+ first={\emph{module}},
+ description={\InEnglish{module}}
+}
+
+\newglossaryentry{fonction}{
+ name={fonction},
+ first={\emph{fonction}},
+ description={\InEnglish{function}}
+}
+
+\newglossaryentry{extension}{
+ name={extension},
+ first={\emph{extension}},
+ description={\InEnglish{package}}
+}
+
+\newglossaryentry{entier}{
+ name={entier},
+ first={\emph{entier}},
+ firstplural={\emph{entiers}},
+ description={\CAD entier relatif, \InEnglish{integer}}
+}
+
+\newglossaryentry{booleen}{
+ name={booléen},
+ first={\emph{booléen}},
+ description={\InEnglish{boolean}}
+}
+
+\newglossaryentry{variable}{
+ name={variable},
+ first={\emph{variable}},
+ firstplural={\emph{variables}},
+ description={\InEnglish{variable}}
+}
+
+\newglossaryentry{flottant}{
+ name={flottant},
+ first={\emph{flottant} \TO pour \og nombre réel codé \emph{en virgule flottante}\fg\TF},
+ description={\InEnglish{floating point number}, nombre \emph{réel}
+ représenté en \emph{virgule flottante}}
+}
+
+\newglossaryentry{sequence}{%
+ name={\emph{sequence}},
+ plural={\emph{sequences}},
+ first={\emph{sequence}, en français \og suite\fg},
+ description={\InEnglish{sequence}, en français \og suite\fg}
+}
+
+\endinput
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "dun19expl3-macros"
+%%% End:
+
+
+\newglossaryentry{}{
+ name={},
+ first={\emph{}},
+ description={\InEnglish{}}
+}
diff --git a/info/expose-expl3-dunkerque-2019/latexmkrc b/info/expose-expl3-dunkerque-2019/latexmkrc
new file mode 100644
index 0000000000..91e227978b
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/latexmkrc
@@ -0,0 +1,12 @@
+add_cus_dep('glo', 'gls', 0, 'run_makeglossaries');
+add_cus_dep('acn', 'acr', 0, 'run_makeglossaries');
+add_cus_dep('klo', 'kls', 0, 'run_makeglossaries');
+
+sub run_makeglossaries {
+ if ( $silent ) {
+ system "makeglossaries -q '$_[0]'";
+ }
+ else {
+ system "makeglossaries '$_[0]'";
+ };
+} \ No newline at end of file
diff --git a/info/ptex-manual/LICENSE b/info/ptex-manual/LICENSE
index fb5ba97512..e10e83ffe8 100644
--- a/info/ptex-manual/LICENSE
+++ b/info/ptex-manual/LICENSE
@@ -1,4 +1,4 @@
-Copyright (C) 2017-2019 Japanese TeX Development Community
+Copyright (C) 2017-2020 Japanese TeX Development Community
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/info/ptex-manual/README.md b/info/ptex-manual/README.md
index 7a4f165607..37291ae17a 100644
--- a/info/ptex-manual/README.md
+++ b/info/ptex-manual/README.md
@@ -36,6 +36,6 @@ the 3-clause BSD license (see [LICENSE](./LICENSE)).
## Release Date
-2019-11-26
+2020-03-21
Japanese TeX Development Community
diff --git a/info/ptex-manual/eptexdoc.pdf b/info/ptex-manual/eptexdoc.pdf
index 4836488c05..34de3a3c6d 100644
--- a/info/ptex-manual/eptexdoc.pdf
+++ b/info/ptex-manual/eptexdoc.pdf
Binary files differ
diff --git a/info/ptex-manual/eptexdoc.tex b/info/ptex-manual/eptexdoc.tex
index e4e7650324..9c22097875 100644
--- a/info/ptex-manual/eptexdoc.tex
+++ b/info/ptex-manual/eptexdoc.tex
@@ -1,17 +1,17 @@
%#!make eptexdoc.pdf
\documentclass[a4paper,11pt,nomag]{jsarticle}
\usepackage[bold,deluxe]{otf}
+
\input fam256p.tex
\usepackage[textwidth=42zw,lines=40,truedimen,centering]{geometry}
-
%%%%%%%%%%%%%%%%
% additional packages
\usepackage{amsmath}
\usepackage{mathtools,amssymb,comment}
\usepackage[dvipdfmx]{graphicx}
+\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{booktabs,enumitem,multicol}
-\usepackage{lmodern}
\usepackage[dvipdfmx,hyperfootnotes=false]{hyperref}
\usepackage{pxjahyper}
\usepackage{hologo}
@@ -242,11 +242,10 @@ tracing機能やæ¡ä»¶åˆ¤æ–­æ–‡ã®å¼·åŒ–ãªã©ã‚ã‚‹ãŒï¼Œãã“ら辺ã¯ãƒ‘ッã
\end{multilist}}
\csitem[\.{currentiftype} (read-only integer)]
-\ifnum\epTeXversion>190131 %%%%% TL2019-hack
æ¡ä»¶åˆ¤æ–­æ–‡ã¨ãれを表ã™æ•°å­—ã¨ã®å¯¾å¿œã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã£ã¦ã„ã‚‹
(\epTeX~190709以é™ï¼‰ï¼Ž
21,~22ã¯\hologo{pdfTeX}ç”±æ¥ã®æ¡ä»¶åˆ¤æ–­æ–‡ï¼ˆå¾Œè¿°ï¼‰ï¼Œ
- 23--30ãŒï¼Œ\pTeX æ‹¡å¼µã§è¿½åŠ ã•ã‚ŒãŸæ¡ä»¶åˆ¤æ–­æ–‡ã«å¯¾å¿œã™ã‚‹ï¼Ž\\
+ 23--32ãŒ\pTeX æ‹¡å¼µã§è¿½åŠ ã•ã‚ŒãŸæ¡ä»¶åˆ¤æ–­æ–‡ã«å¯¾å¿œã™ã‚‹ï¼Ž\\
\parbox{.9\linewidth}{%
\begin{multilist}{3}{\hfil\hskip1.5zw#:&\quad#\qquad\hfil}
\item 1&\.{if}\cr\item 2&\.{ifcat}\cr\item 3&\.{ifnum}\cr\item 4&\.{ifdim}\cr
@@ -259,46 +258,28 @@ tracing機能やæ¡ä»¶åˆ¤æ–­æ–‡ã®å¼·åŒ–ãªã©ã‚ã‚‹ãŒï¼Œãã“ら辺ã¯ãƒ‘ッã
\item \bf 23&\.{iftdir}\cr\item \bf 24&\.{ifydir}\cr
\item \bf 25&\.{ifddir}\cr\item \bf 26&\.{ifmdir}\cr\item \bf 27&\.{iftbox}\cr
\item \bf 28&\.{ifybox}\cr\item \bf 29&\.{ifdbox}\cr\item \bf 30&\.{ifmbox}\cr
+ \item \bf 31&\.{ifjfont}\cr\item \bf 32&\.{iftfont}\cr
\end{multilist}}
-\else %%%%% TL2019-hack
- æ¡ä»¶åˆ¤æ–­æ–‡ã¨ãれを表ã™æ•°å­—ã¨ã®å¯¾å¿œã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã£ã¦ã„ã‚‹
- (\epTeX~190131ã¾ã§ï¼›\epTeX~190709以é™ã¯\.{ifincsname}プリミティブ追加ã«ã‚ˆã‚Šå¤‰åŒ–ã™ã‚‹ã®ã§æ³¨æ„).
- 21--28ãŒï¼Œ\pTeX æ‹¡å¼µã§è¿½åŠ ã•ã‚ŒãŸæ¡ä»¶åˆ¤æ–­æ–‡ã«å¯¾å¿œã™ã‚‹ï¼Ž
- 29ã®\.{ifpdfprimitive}ã¯\hologo{pdfTeX}ç”±æ¥ã®ãƒ—リミティブ(後述)ã§ã‚る.\\
- \parbox{.9\linewidth}{%
- \begin{multilist}{3}{\hfil\hskip1.5zw#:&\quad#\qquad\hfil}
- \item 1&\.{if}\cr\item 2&\.{ifcat}\cr\item 3&\.{ifnum}\cr\item 4&\.{ifdim}\cr
- \item 5&\.{ifodd}\cr\item 6&\.{ifvmode}\cr\item 7&\.{ifhmode}\cr
- \item 8&\.{ifmmode}\cr\item 9&\.{ifinner}\cr\item 10&\.{ifvoid}\cr
- \item 11&\.{ifhbox}\cr\item 12&\.{ifvbox}\cr\item 13&\.{ifx}\cr
- \item 14&\.{ifeof}\cr\item 15&\.{iftrue}\cr\item 16&\.{iffalse}\cr
- \item 17&\.{ifcase}\cr\item 18&\.{ifdefined}\cr\item 19&\.{ifcsname}\cr
- \item 20&\.{iffontchar}\cr\item \bf 21&\.{iftdir}\cr\item \bf 22&\.{ifydir}\cr
- \item \bf 23&\.{ifddir}\cr\item \bf 24&\.{ifmdir}\cr\item \bf 25&\.{iftbox}\cr
- \item \bf 26&\.{ifybox}\cr\item \bf 27&\.{ifdbox}\cr\item \bf 28&\.{ifmbox}\cr
- \item \bf 29&\.{ifpdfprimtive}\cr
- \end{multilist}}
-\fi %%%%% TL2019-hack
-\ifnum\epTeXversion>190131 %%%%% TL2019-hack
- \csitem[\.{fontcharwd}, \.{fontcharht}, \.{fontchardp}, \.{fontcharic}]
+ \csitem[\.{fontcharwd}, \.{fontcharht}, \.{fontchardp}, \.{fontcharic} (dimension)]
+ 基本的ã«ãƒ•ã‚©ãƒ³ãƒˆå†…ã®æ–‡å­—ã®å¯¸æ³•ã‚’内部長ã•ã¨ã—ã¦è¿”ã™å‘½ä»¤ã§ã‚ã‚‹ãŒï¼Œ
欧文フォントã¨å’Œæ–‡ãƒ•ã‚©ãƒ³ãƒˆã‚’判別ã—,ãã‚Œã«å¿œã˜ã¦å‡¦ç†ãŒåˆ†ã‹ã‚Œã‚‹ï¼Ž
ãã‚Œã«ä¼´ã„,許容ã•ã‚Œã‚‹å¼•æ•°ç¯„囲ã¨æ„味ãŒç•°ãªã‚‹ã“ã¨ã«æ³¨æ„
(\epTeX~190709以é™ï¼‰ï¼Ž
以下,|??|ã¯|wd|, |ht|, |dp|, |ic|ã®ã„ãšã‚Œã‹ã‚’表ã™ï¼Ž
\begin{itemize}
- \item 和文フォントã®å ´åˆï¼š \.{fontchar??} <Japanese font> <number>\\
+ \item 和文フォントã®å ´åˆï¼š\.{fontchar??} <Japanese font> <number>\\
<Japanese font>ã‚’$f$,<number>ã‚’$c$ã¨ãŠãã¨ï¼Œ
\begin{itemize}
\item $c \geq 0$ã®å ´åˆã¯ï¼Œ$c$ã‚’\emph{文字コード}ã¨ã¿ãªã™ï¼Ž
$c$ãŒå’Œæ–‡æ–‡å­—コードã¨ã—ã¦æœ‰åŠ¹ã§ã‚ã‚Œã°ï¼Œ
和文フォント$f$ã«ãŠã‘る文字コード$c$ã®å’Œæ–‡æ–‡å­—ã®å¯¸æ³•å€¤ã‚’è¿”ã™ï¼Ž
- 和文文字コードã¨ã—ã¦ç„¡åŠ¹ã§ã‚ã‚Œã°|0pt|ã‚’è¿”ã™ï¼Ž
+ 和文文字コードã¨ã—ã¦ç„¡åŠ¹ã§ã‚ã‚Œã°0\,ptã‚’è¿”ã™ï¼Ž
\item $c < 0$ã®å ´åˆã¯ï¼Œ$-(c+1)$ã‚’\emph{文字タイプ}ã¨ã¿ãªã™ï¼Ž
和文フォント$f$ã«æ–‡å­—タイプ$-(c+1)$ãŒå®šç¾©ã•ã‚Œã¦ã„ã‚Œã°ãã®å¯¸æ³•å€¤ã‚’è¿”ã—,
- 未定義ã§ã‚ã‚Œã°|0pt|ã‚’è¿”ã™ï¼Ž
+ 未定義ã§ã‚ã‚Œã°0\,ptã‚’è¿”ã™ï¼Ž
\end{itemize}
- \item 欧文フォントã®å ´åˆï¼š \.{fontchar??} <font> <8-bit number>\\
+ \item 欧文フォントã®å ´åˆï¼š\.{fontchar??} <font> <8-bit number>\\
オリジナルã®\eTeX ã¨åŒã˜æŒ™å‹•ã§ã‚る.ã™ãªã‚ã¡ï¼Œ
引数ã«$c \geq 256$ã‚„$c < 0$を与ãˆã‚‹ã¨
\verb+! Bad character code (256).+
@@ -323,10 +304,8 @@ tracing機能やæ¡ä»¶åˆ¤æ–­æ–‡ã®å¼·åŒ–ãªã©ã‚ã‚‹ãŒï¼Œãã“ら辺ã¯ãƒ‘ッã
\verb+! Bad character code (256).+
ã®ã‚ˆã†ã«ã‚¨ãƒ©ãƒ¼ãŒå‡ºã‚‹ï¼Ž
\end{itemize}
-\fi %%%%% TL2019-hack
\end{cslist}
-\ifnum\epTeXversion>190131 %%%%% TL2019-hack
\begin{dangerous}
上記ã§ã€Œå’Œæ–‡æ–‡å­—コードã¨ã—ã¦æœ‰åŠ¹ã‹ã©ã†ã‹ã€ã¯ï¼Œé–¢æ•°|is_char_kanji|ã‚’å‚照.
ã“ã®é–¢æ•°ã¯å†…部コードã«ã‚ˆã£ã¦ç•°ãªã‚‹ãŸã‚,マクロã§å®Ÿè£…ã™ã‚‹ã®ã¯é¢å€’ã§ã‚ã‚‹ãŒï¼Œ
@@ -334,7 +313,6 @@ tracing機能やæ¡ä»¶åˆ¤æ–­æ–‡ã®å¼·åŒ–ãªã©ã‚ã‚‹ãŒï¼Œãã“ら辺ã¯ãƒ‘ッã
ãªãŠï¼Œ\upTeX ã§ã¯ä»»æ„ã®éžè² ã®å€¤ãŒå’Œæ–‡æ–‡å­—コードã¨ã—ã¦æœ‰åŠ¹ãªãŸã‚,
|is_char_kanji|ã¯éžè² ã‹ã©ã†ã‹ã®åˆ¤å®šã«ãªã£ã¦ã„る.
\end{dangerous}
-\fi %%%%% TL2019-hack
\section{\OMEGA ç”±æ¥ã®æ©Ÿèƒ½ï¼ˆæ—§å称:\texttt{FAM256}パッãƒï¼‰}
\epTeX ã«ã¯ï¼ŒæŽ²ç¤ºæ¿\TeX\ Q\ \&\ Aã®å±±æœ¬æ°ã®æ›¸ãè¾¼ã¿
@@ -471,7 +449,15 @@ delimiter codeã«ã¤ã„ã¦ã‚‚åŒæ§˜ã§ã‚る.
\end{cases}
\]
ã¨ãªã£ã¦ã„る.内部ã§ã¯\texttt{fi}レベルãŒ1,\texttt{fil}レベルãŒ2,……ã¨ã—ã¦
- 処ç†ã—ã¦ã„る.
+ 処ç†ã—ã¦ã„ã‚‹\footnote{%
+ \hologo{LuaTeX}ã«ã‚‚ç„¡é™ã®ãƒ¬ãƒ™ãƒ«\texttt{fi}ãŒå­˜åœ¨ã™ã‚‹ãŒï¼Œ
+ |\gluestretchorder|, |\glueshrinkorder|ã¯\eTeX ã‚„\epTeX ã¨ç•°ãªã‚Šï¼Œ
+ 有é™/\texttt{fi}/\texttt{fil}/\texttt{fill}/\texttt{filll}ã§0/1/2/3/4ã§ã‚る.
+ ã¾ãŸï¼Œr52360ã§\eTeX 互æ›ã‚’æ„図ã—ãŸ
+ |\eTeXgluestretchorder|, |\eTeXglueshrinkorder|も追加ã•ã‚Œã¦ãŠã‚Šï¼Œ
+ ãã¡ã‚‰ã¯æœ‰é™/\texttt{fil}/\texttt{fill}/\texttt{filll}ã§0/1/2/3ã¨ã—,
+ \texttt{fi}ã¯$-1$ã§ã‚る.
+ }.
\end{itemize}
\paragraph{レジスタã«ã¤ã„ã¦}
@@ -494,7 +480,12 @@ delimiter codeã«ã¤ã„ã¦ã‚‚åŒæ§˜ã§ã‚る.
ãŒå¿…è¦ã¨ãªã£ã¦ãŠã‚Šï¼Œã‚‚ã¯ã‚„純粋ãª\eTeX ã§ã™ã‚‰
\LaTeX 3を利用ã™ã‚‹ã“ã¨ã¯ã§ããªã„状æ³ã§ã‚ã‚‹ (\cite{expl31,expl32,expl33}).
ãã®ä»–ã«ã‚‚,\hologo{pdfTeX}ç”±æ¥ã®ã„ãã¤ã‹ã®ãƒ—リミティブ(\cite{pdftexman})ã®å®Ÿè£…ãŒ
-日本ã®\TeX ユーザã‹ã‚‰ã‚り,
+日本ã®\TeX ユーザ,ãŠã‚ˆã³\LaTeX3~team%
+\footnote{%
+ ç¾åœ¨ã§ã¯ã•ã‚‰ã«çŠ¶æ³ãŒå‹•ã,
+ 2021年以é™ã¯ï¼Œ\LaTeXe 自体ãŒæœ¬ç¯€ã§è¿°ã¹ãŸï¼ˆ\.{readpapersizespecial}以外ã®ï¼‰ãƒ—リミティブを
+ è¦æ±‚ã™ã‚‹äºˆå®šã§ã‚ã‚‹(\cite{l2e31}).
+}ãªã©ã‹ã‚‰ã‚り,
ã»ã¨ã‚“ã©\hologo{pdfTeX}ã«ãŠã‘る実装をãã®ã¾ã¾çœŸä¼¼ã™ã‚‹å½¢ã§å®Ÿè£…ã—ã¦ã„る.
ç¾åœ¨ã®\epTeX ã§åˆ©ç”¨ã§ãã‚‹\hologo{pdfTeX}ç”±æ¥ã®ãƒ—リミティブã®ä¸€è¦§ã‚’以下ã«ç¤ºã™ï¼Ž
@@ -526,9 +517,10 @@ delimiter codeã«ã¤ã„ã¦ã‚‚åŒæ§˜ã§ã‚る.
ã“ã®2ã¤ã®å†…部長ã•ã‚’設定ã™ã‚‹ã ã‘ã§ã¯dviã«ä½•ã®å½±éŸ¿ã‚‚与ãˆãªã„.
後ã§è¿°ã¹ã‚‹\.{pdflastxpos}, \.{pdflastypos}ã«ã‚ˆã‚‹å‡ºåŠ›ä½ç½®ã®å–å¾—
- ã®éš›ã®åŽŸç‚¹ä½ç½®ã‚’設定ã™ã‚‹ãŸã‚ã ã‘ã«ä½¿ã‚れ,åˆæœŸå€¤ã¯0ã§ã‚る.
+ ã®éš›ã®åŽŸç‚¹ä½ç½®ã‚’設定ã™ã‚‹ãŸã‚ã ã‘ã«ä½¿ã‚れ,åˆæœŸå€¤ã¯0\,ptã§ã‚ã‚‹
+ (\hologo{pdfTeX}ã®dviモードã¨åŒã˜æŒ™å‹•ï¼‰ï¼Ž
- \csitem[\.{readpapersizespecial} (integer)]
+ \csitem[\.{readpapersizespecial}(integer,\emph{\epTeX 独自拡張ã§ï¼Œ\hologo{pdfTeX}ã«ã¯ãªã„})]
\pTeX 系列ã§ã¯ï¼Œ
用紙サイズã®æŒ‡å®šã«ã¯ä¼çµ±çš„ã«papersize specialãŒåˆ©ç”¨ã•ã‚Œã¦ããŸï¼Žãれを考慮ã—ã¦ï¼Œ
本内部整数\.{readpapersizespecial}(既定値ã¯1)ãŒæ­£ã®å ´åˆã¯
@@ -562,7 +554,7 @@ delimiter codeã«ã¤ã„ã¦ã‚‚åŒæ§˜ã§ã‚る.
原点ã¯ãƒšãƒ¼ã‚¸ã®ï¼ˆç‰©ç†çš„ãªæ„味ã®ï¼‰å·¦ä¸‹éš…ã§ã‚り,$y$軸ã¯ï¼ˆç‰©ç†çš„ãªï¼‰ä¸Šæ–¹å‘ã«å‘ã‹ã£ã¦å¢—加ã™ã‚‹ï¼Ž
\begin{itemize}
\item ページã®ç‰©ç†çš„ãªå¹…ã¨é«˜ã•ã¯ã™ã上ã®\.{pdfpagewidth}, \.{pdfpageheight}ã§è¨­å®šã™ã‚‹ï¼Ž
- ã“れらã®å†…部長ã•ãŒ0ã§ã‚ã£ãŸå ´åˆã¯ï¼Œ\.{shipout}ã•ã‚ŒãŸãƒœãƒƒã‚¯ã‚¹ã®å¯¸æ³•ã¨
+ ã“れらã®å†…部長ã•ãŒ0\,ptã§ã‚ã£ãŸå ´åˆã¯ï¼Œ\.{shipout}ã•ã‚ŒãŸãƒœãƒƒã‚¯ã‚¹ã®å¯¸æ³•ã¨
\.{hoffset}(ã¾ãŸã¯\.{voffset})ã®å€¤ã‹ã‚‰è‡ªå‹•çš„ã«è¨ˆç®—ã•ã‚Œã‚‹ï¼Ž
\item \pTeX ã§ã¯æ¨ªçµ„・縦組ã¨çµ„æ–¹å‘ãŒè¤‡æ•°ã‚ã‚‹ã®ã§ï¼Œ\.{pdflastxpos}, \.{pdflastypos}ã®å€¤ã®åº§æ¨™ç³»ã‚’
「物ç†çš„ãªã€å‘ãã¨ã™ã¹ãã‹ï¼Œãã‚Œã¨ã‚‚「組方å‘ã«å¿œã˜ãŸã€å‘ãã¨ã™ã¹ãã‹ã¯æ‚©ã¿ã©ã“ã‚ã§ã‚る.
@@ -575,7 +567,7 @@ delimiter codeã«ã¤ã„ã¦ã‚‚åŒæ§˜ã§ã‚る.
\end{itemize}
\csitem[\.{pdfcreationdate}]
- エンジン起動時ã®æ™‚刻を,\texttt{\pdfcreationdate}ã®å½¢å¼ã§è¡¨ã—ãŸæ–‡å­—列ã«å±•é–‹ã™ã‚‹ï¼Ž
+ エンジン起動時ã®æ™‚刻を\texttt{\pdfcreationdate}ã®å½¢å¼ã§è¡¨ã—ãŸæ–‡å­—列ã«å±•é–‹ã•ã‚Œã‚‹ï¼Ž
末尾ã«|+09'00'|ãªã©ã¨è¡¨ç¤ºã•ã‚Œã‚‹ã®ã¯ãƒ­ãƒ¼ã‚«ãƒ«ã®ã‚¿ã‚¤ãƒ ã‚¾ãƒ¼ãƒ³ã§ã‚ã‚‹ãŒï¼Œ
例ãˆã°|SOURCE_DATE_EPOCH=1000000000|ã®ã‚ˆã†ã«ç’°å¢ƒå¤‰æ•°ã‚’設定ã™ã‚‹ã¨
|D:20010909014640Z|ã®ã‚ˆã†ã«ã‚¿ã‚¤ãƒ ã‚¾ãƒ¼ãƒ³ã¯|Z|ã¨è¡¨ç¤ºã•ã‚Œã‚‹ï¼Ž
@@ -590,13 +582,13 @@ delimiter codeã«ã¤ã„ã¦ã‚‚åŒæ§˜ã§ã‚る.
\csitem[\.{pdffilemoddate} <filename>, \.{pdffilesize} <filename>]
ãã‚Œãžã‚Œ<filename>ã®æ›´æ–°æ™‚刻(\.{pdfcreationdate}ã¨åŒã˜å½¢å¼ï¼‰ã¨
- ファイルサイズを表ã™æ–‡å­—列ã«å±•é–‹ã™ã‚‹ï¼Ž
+ ファイルサイズを表ã™æ–‡å­—列ã«å±•é–‹ã•ã‚Œã‚‹ï¼Ž
ã“れらも\Pkg{standalone}パッケージã®ãŸã‚ã«\epTeX ã«å®Ÿè£…ã•ã‚ŒãŸãƒ—リミティブã§ã‚る.
\csitem[\.{pdffiledump} \textrm{[}\texttt{offset} <offset>\textrm{]}%
\ \texttt{length} <length> <filename>]
<filename>ã§ä¸Žãˆã‚‰ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«åã®<offset>ãƒã‚¤ãƒˆç›®ï¼ˆå…ˆé ­ã¯0)ã‹ã‚‰<length>ãƒã‚¤ãƒˆã‚’読ã¿è¾¼ã¿ï¼Œ
- 16進表記(大文字)ã—ãŸã‚‚ã®ã«å±•é–‹ã•ã‚Œã‚‹ï¼Ž
+ 16進表記(大文字)ã—ãŸæ–‡å­—列ã«å±•é–‹ã•ã‚Œã‚‹ï¼Ž
本プリミティブã¯Heiko Oberdiekæ°ã«ã‚ˆã‚‹\Pkg{bmpsize}パッケージを\epTeX ã§ã‚‚使ã†ãŸã‚ã«
角藤ã•ã‚“ãŒå®Ÿè£…ã—ãŸã‚‚ã®ã§ã‚ã‚‹(2014/05/06).
@@ -611,11 +603,17 @@ delimiter codeã«ã¤ã„ã¦ã‚‚åŒæ§˜ã§ã‚る.
本プリミティブã¯\TeX ユーザã®é›†ã„2014ã§ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’å—ã‘ã¦å®Ÿè£…ã•ã‚ŒãŸ(\cite{pdfse}).
\csitem[\.{pdfmdfivesum} {[\texttt{file}]} <general text>]
- 引数<general text>ã®MD5ãƒãƒƒã‚·ãƒ¥å€¤ã‹ï¼Œã‚ã‚‹ã„ã¯\texttt{file}ãŒæŒ‡å®šã•ã‚ŒãŸå ´åˆã¯
- ファイルåãŒ<general text>ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®MD5ãƒãƒƒã‚·ãƒ¥å€¤ã‚’計算ã™ã‚‹ï¼Ž
+ \texttt{file}ãŒæŒ‡å®šã•ã‚ŒãŸå ´åˆã¯ï¼Œãƒ•ã‚¡ã‚¤ãƒ«åãŒ<general text>ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®MD5ãƒãƒƒã‚·ãƒ¥å€¤ã«å±•é–‹ã•ã‚Œã‚‹ï¼Ž
+ ã‚‚ã—ファイルãŒå­˜åœ¨ã—ãªã‹ã£ãŸå ´åˆã¯ä½•ã‚‚è¿”ã•ãªã„.
- å‰è€…ã®ã€Œå¼•æ•°ã®MD5ãƒãƒƒã‚·ãƒ¥å€¤ã‚’計算ã™ã‚‹ã€å ´åˆã«ã¯ï¼Œ\.{pdfstrcmp}ã¨åŒã˜ã‚ˆã†ã«
- 和文文字をUTF-8ã§ç¬¦å·åŒ–ã—ã¦ã‹ã‚‰è¨ˆç®—ã™ã‚‹ï¼Ž
+ \texttt{file}ãŒæŒ‡å®šã•ã‚Œãªã‹ã£ãŸå ´åˆã¯ï¼Œå¼•æ•°<general text>ã®MD5ãƒãƒƒã‚·ãƒ¥å€¤ã«å±•é–‹ã•ã‚Œã‚‹ï¼Ž
+ ãã®éš›ï¼Œ\.{pdfstrcmp}ã¨åŒã˜ã‚ˆã†ã«å’Œæ–‡æ–‡å­—ã¯UTF-8ã§ç¬¦å·åŒ–ã—ã¦ã‹ã‚‰è¨ˆç®—ã•ã‚Œã‚‹ï¼Ž
+ 例ãˆã°
+\begin{verbatim}
+\pdfmdfivesum{ã‚}
+\pdfmdfivesum{^^e3^^81^^82}
+\end{verbatim}
+ ã®çµæžœã¯ã„ãšã‚Œã‚‚\texttt{\pdfmdfivesum{ã‚}}ã§ã‚る.
ã“ã®ãƒ—リミティブã¯\cite{xe5}以é™ã®è­°è«–ã‚’å…ƒã«ï¼Œè§’è—¤ã•ã‚“ãŒãƒªã‚¯ã‚¨ã‚¹ãƒˆã—ãŸã‚‚ã®ã§ï¼Œ
2015/07/04ã«\epTeX ã«å®Ÿè£…ã•ã‚Œã¦ã„る.
@@ -635,11 +633,18 @@ delimiter codeã«ã¤ã„ã¦ã‚‚åŒæ§˜ã§ã‚る.
ç¾åœ¨ã§ã¯\Pkg{expl3}パッケージã§ã¯ã“れらã®ãƒ—リミティブã¯è¦æ±‚ã—ã¦ã„ãªã„.
\csitem[\.{pdfuniformdeviate} <number>, \.{pdfnormaldeviate}]
- \.{pdfuniformdeviate}ã¯ï¼Œ0以上<number>未満ã®ä¸€æ§˜åˆ†å¸ƒã«å¾“ã†ä¹±æ•°ï¼ˆæ•´æ•°å€¤ï¼‰ã‚’生æˆã™ã‚‹ï¼Ž
- \.{pdfnormaldeviate}ã¯ï¼Œå¹³å‡å€¤0,標準åå·®65536ã®æ­£è¦åˆ†å¸ƒã«å¾“ã†ä¹±æ•°ï¼ˆæ•´æ•°å€¤ï¼‰ã‚’生æˆã™ã‚‹ï¼Ž
+ \.{pdfuniformdeviate}ã¯ï¼Œ0以上<number>未満ã®ä¸€æ§˜åˆ†å¸ƒã«å¾“ã†ä¹±æ•°
+ \footnote{%
+ 乱数ã¨ã¯ã„ã£ã¦ã‚‚,例ãˆã°\texttt{\.{pdfuniformdeviate}~536870912}ã¯å¸¸ã«å¶æ•°ã‚’生æˆã™ã‚‹ã“ã¨ãŒçŸ¥ã‚‰ã‚Œã¦ã„ã‚‹
+ (\cite{xe4}).ã—ã‹ã—ã‚‚ã¨ã‚‚ã¨ã®\hologo{pdfTeX}ã®å®Ÿè£…ãŒãã†ãªã£ã¦ãŠã‚Šï¼Œä»–ã®ã‚¨ãƒ³ã‚¸ãƒ³ã§ã‚‚ç›´ã•ã‚Œã¦ã„ãªã„ãŸã‚
+ \epTeX ã§ã‚‚ã“ã®ç—‡çŠ¶ã«ã¯ç‹¬è‡ªå¯¾å‡¦ã¯ã—ãªã„.
+ }(整数値)を生æˆã—,
+ ãれを10進表記ã—ãŸæ–‡å­—列ã«å±•é–‹ã•ã‚Œã‚‹ï¼Ž
+ \.{pdfnormaldeviate}ã¯ï¼Œå¹³å‡å€¤0,標準åå·®65536ã®æ­£è¦åˆ†å¸ƒã«å¾“ã†ä¹±æ•°ï¼ˆæ•´æ•°å€¤ï¼‰ã‚’生æˆã—,
+ ãれを10進表記ã—ãŸæ–‡å­—列ã«å±•é–‹ã•ã‚Œã‚‹ï¼Ž
\csitem[\.{pdfrandomseed} (read-only integer), \.{pdfsetrandomseed} <number>]
- 乱数生æˆã®ç¨®ã®å€¤ã¯ï¼Œ\.{pdfrandomseed}ã§å–å¾—ã§ãる.
+ 乱数生æˆã®ç¨®ã®å€¤ã¯ï¼Œå†…部整数\.{pdfrandomseed}ã§å–å¾—ã§ãる.
種ã®åˆæœŸåŒ–ã«ã¯ã‚·ã‚¹ãƒ†ãƒ ã®ãƒžã‚¤ã‚¯ãƒ­ç§’å˜ä½ã§ã®ç¾åœ¨æ™‚刻情報ãŒä½¿ã‚れる.ã¾ãŸï¼Œç¨®ã®å€¤ã‚’
設定ã™ã‚‹ã«ã¯\.{pdfsetrandomseed}ã«å¼•æ•°ã¨ã—ã¦æ¸¡ã›ã°è‰¯ã„.
@@ -660,12 +665,10 @@ delimiter codeã«ã¤ã„ã¦ã‚‚åŒæ§˜ã§ã‚る.
\hologo{pdfTeX}, \epTeX, \hologo{XeTeX}ã§ä¸€æ–‰ã«å®Ÿè£…ã•ã‚ŒãŸï¼Ž
\epTeX~180518以é™ã§åˆ©ç”¨å¯èƒ½ã§ã‚る.
-\ifnum\epTeXversion>190131 %%%%% TL2019-hack
\csitem[\.{ifincsname}]
\texttt{\.{csname}~...~\.{endcsname}}内ã§è©•ä¾¡ã•ã‚ŒãŸã¡ã‚‡ã†ã©ãã®æ™‚ã«çœŸã¨ãªã‚‹ï¼Ž
\LaTeX~2019-10-01ã§è¡Œã‚れる変更(\cite{latex95,tjb83})ã§å¿…è¦ã«ãªã£ãŸãŸã‚ã«
\epTeX~190709ã§å°Žå…¥ã•ã‚ŒãŸï¼Ž
-\fi %%%%% TL2019
\end{cslist}
@@ -912,7 +915,6 @@ abcfi\the\lastnodechar, abc\char"1C \the\lastnodechar
% (\uccode, \lccode ã¯å‚ç…§ã—ãªã„)
\end{cslist}
-\ifnum\epTeXversion>190131 %%%%% TL2019-hack
\section{\.{current[x]spacingmode}プリミティブ}
ã‚‚ã¨ã‚‚ã¨\pTeX 系列ã§ã¯ï¼Œ\.{kanjiskip},~\.{xkanjiskip}ã®æŒ¿å…¥ãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹ã‹
直接的ã«çŸ¥ã‚‹æ–¹æ³•ãŒ\.{showmode}プリミティブã—ã‹ãªã‹ã£ãŸï¼Ž
@@ -939,9 +941,8 @@ abcfi\the\lastnodechar, abc\char"1C \the\lastnodechar
\.{disablecjktoken}ã®çŠ¶æ…‹ãªã‚‰ã°1,
\.{forcecjktoken}ã®çŠ¶æ…‹ãªã‚‰ã°2ã‚’è¿”ã™ï¼Ž
\end{cslist}
-\fi %%%%% TL2019
-\ifnum\epTeXversion>190131 %%%%% TL2019-hack
+
\section{\.{Uchar}, \.{Ucharcat}プリミティブ}
\hologo{XeTeX}, \hologo{LuaTeX}ã«ã¯ï¼Œå¼•æ•°<character code>を文字コードã¨ã™ã‚‹
\emph{文字トークン}ã«å±•é–‹ã•ã‚Œã‚‹ã€Œ\.{Uchar} <character code>ã€ã¨ã„ã†ãƒ—リミティブãŒå­˜åœ¨ã™ã‚‹
@@ -1025,7 +1026,6 @@ abcfi\the\lastnodechar, abc\char"1C \the\lastnodechar
\verb+\Ucharcat\numexpr\jis"3441\relax 17 % エラー回é¿+
\end{quote}
\end{dangerous}
-\fi %%%%% TL2019
@@ -1131,6 +1131,9 @@ $3$\,sp)ã ãŒï¼Œã©ã“ã‹æ°—ã«ãªã‚‹ã¨ã“ã‚ã§ã‚る.
\bibitem{random} Joseph Wright, ``[tex-live] Random number primitives'',
2016/11/12,\\
\url{http://tug.org/pipermail/tex-live/2016-November/039436.html}
+ \bibitem{xe4} Bruno Le Floch, ``[XeTeX] Random number primitives'',
+ 2016/12/06,\\
+ \url{http://tug.org/pipermail/pipermail/xetex/2016-December/026920.html}
\bibitem{eptexinputenc} 阿部 紀行,「2016å¹´2月2æ—¥ã€ï¼Œ2016/02/02.\\
\url{http://abenori.blogspot.jp/2016/02/e-ptexeptexinputencoding.html}.
\bibitem{etexman} The \NTS\!\ Team. \textit{The \eTeX\ manual} (v2.0). \\
@@ -1163,7 +1166,6 @@ $3$\,sp)ã ãŒï¼Œã©ã“ã‹æ°—ã«ãªã‚‹ã¨ã“ã‚ã§ã‚る.
non-ASCII symbols in labels.'',
2018/12/03.\\
\url{https://github.com/latex3/latex2e/issues/95}
-\ifnum\epTeXversion>190131 %%%%% TL2019-hack
\bibitem{tjb81} åŒ—å· å¼˜å…¸ï¼Œã€Œãƒã‚¤ãƒˆåˆ—ã¨å’Œæ–‡æ–‡å­—トークンã®åŒºåˆ¥ã€ï¼Œ2019/06/08.\\
\url{https://github.com/texjporg/tex-jp-build/issues/81}.
\bibitem{tjb83} aminophen,「[e-pTeX] |\ifincsname|ã€ï¼Œ2019/07/09.\\
@@ -1173,7 +1175,10 @@ $3$\,sp)ã ãŒï¼Œã©ã“ã‹æ°—ã«ãªã‚‹ã¨ã“ã‚ã§ã‚る.
\url{https://github.com/texjporg/tex-jp-build/pull/94}.
\bibitem{tjb95} åŒ—å· å¼˜å…¸ï¼Œã€Œ[eptex] |\Uchar| and |\Ucharcat|ã€ï¼Œ2019/10/30.\\
\url{https://github.com/texjporg/tex-jp-build/issues/95}.
-\fi %%%%% TL2019
+ \bibitem{l2e31}
+ The \LaTeX3 Project Team, \textit{\LaTeX\ News Issue 31}, 2020.\\
+ |$TEXMFDIST/source/latex/base/ltnews31.tex|, \\
+ \url{https://www.latex-project.org/news/latex2e-news/ltnews31.pdf}.
\end{thebibliography}
\newpage
diff --git a/info/ptex-manual/fam256p.tex b/info/ptex-manual/fam256p.tex
index d05847ab6d..6424224994 100644
--- a/info/ptex-manual/fam256p.tex
+++ b/info/ptex-manual/fam256p.tex
@@ -15,52 +15,52 @@
-\DeclareMathAlphabet{\mbfa}{OT1}{cmr}{m}{n}
-\DeclareMathAlphabet{\mbfb}{OT1}{cmr}{bx}{n}
-\DeclareMathAlphabet{\mbfc}{OT1}{cmr}{bx}{n}
-\DeclareMathAlphabet{\mbfd}{OT1}{cmr}{bx}{n}
-\DeclareMathAlphabet{\mbfe}{OT1}{cmr}{bx}{n}
-\DeclareMathAlphabet{\mbff}{OT1}{cmr}{bx}{n}
-\DeclareMathAlphabet{\mbfg}{OT1}{cmr}{bx}{n}
-\DeclareMathAlphabet{\mbfh}{OT1}{cmr}{bx}{n}
-\DeclareMathAlphabet{\mbfi}{OT1}{cmr}{bx}{n}
-\DeclareMathAlphabet{\mbfj}{OT1}{cmr}{bx}{n}
-\DeclareMathAlphabet{\mbfk}{OT1}{cmr}{bx}{n}
-\DeclareMathAlphabet{\mbfl}{OT1}{cmr}{bx}{n}% ã“ã“ã§15番
+\DeclareMathAlphabet{\mbfa}{OT1}{lmr}{m}{n}
+\DeclareMathAlphabet{\mbfb}{OT1}{lmr}{bx}{n}
+\DeclareMathAlphabet{\mbfc}{OT1}{lmr}{bx}{n}
+\DeclareMathAlphabet{\mbfd}{OT1}{lmr}{bx}{n}
+\DeclareMathAlphabet{\mbfe}{OT1}{lmr}{bx}{n}
+\DeclareMathAlphabet{\mbff}{OT1}{lmr}{bx}{n}
+\DeclareMathAlphabet{\mbfg}{OT1}{lmr}{bx}{n}
+\DeclareMathAlphabet{\mbfh}{OT1}{lmr}{bx}{n}
+\DeclareMathAlphabet{\mbfi}{OT1}{lmr}{bx}{n}
+\DeclareMathAlphabet{\mbfj}{OT1}{lmr}{bx}{n}
+\DeclareMathAlphabet{\mbfk}{OT1}{lmr}{bx}{n}
+\DeclareMathAlphabet{\mbfl}{OT1}{lmr}{bx}{n}% ã“ã“ã§15番
-\DeclareMathAlphabet{\mbfaa}{OT1}{cmtt}{m}{n} % 16
-\DeclareMathAlphabet{\mbfab}{OT1}{cmtt}{m}{n}
-\DeclareMathAlphabet{\mbfac}{OT1}{cmtt}{m}{n}
-\DeclareMathAlphabet{\mbfad}{OT1}{cmtt}{m}{n}
-\DeclareMathAlphabet{\mbfae}{OT1}{cmtt}{m}{n}
-\DeclareMathAlphabet{\mbfaf}{OT1}{cmtt}{m}{n}
-\DeclareMathAlphabet{\mbfag}{OT1}{cmtt}{m}{n}
-\DeclareMathAlphabet{\mbfah}{OT1}{cmtt}{m}{n}
-\DeclareMathAlphabet{\mbfai}{OT1}{cmtt}{m}{n}
-\DeclareMathAlphabet{\mbfaj}{OT1}{cmtt}{m}{n}
-\DeclareMathAlphabet{\mbfak}{OT1}{cmtt}{m}{n}
-\DeclareMathAlphabet{\mbfal}{OT1}{cmtt}{m}{n}
-\DeclareMathAlphabet{\mbfam}{OT1}{cmtt}{m}{n}
-\DeclareMathAlphabet{\mbfan}{OT1}{cmtt}{m}{n}
-\DeclareMathAlphabet{\mbfao}{OT1}{cmtt}{m}{n}
-\DeclareMathAlphabet{\mbfap}{OT1}{cmtt}{m}{n}
+\DeclareMathAlphabet{\mbfaa}{OT1}{lmtt}{m}{n} % 16
+\DeclareMathAlphabet{\mbfab}{OT1}{lmtt}{m}{n}
+\DeclareMathAlphabet{\mbfac}{OT1}{lmtt}{m}{n}
+\DeclareMathAlphabet{\mbfad}{OT1}{lmtt}{m}{n}
+\DeclareMathAlphabet{\mbfae}{OT1}{lmtt}{m}{n}
+\DeclareMathAlphabet{\mbfaf}{OT1}{lmtt}{m}{n}
+\DeclareMathAlphabet{\mbfag}{OT1}{lmtt}{m}{n}
+\DeclareMathAlphabet{\mbfah}{OT1}{lmtt}{m}{n}
+\DeclareMathAlphabet{\mbfai}{OT1}{lmtt}{m}{n}
+\DeclareMathAlphabet{\mbfaj}{OT1}{lmtt}{m}{n}
+\DeclareMathAlphabet{\mbfak}{OT1}{lmtt}{m}{n}
+\DeclareMathAlphabet{\mbfal}{OT1}{lmtt}{m}{n}
+\DeclareMathAlphabet{\mbfam}{OT1}{lmtt}{m}{n}
+\DeclareMathAlphabet{\mbfan}{OT1}{lmtt}{m}{n}
+\DeclareMathAlphabet{\mbfao}{OT1}{lmtt}{m}{n}
+\DeclareMathAlphabet{\mbfap}{OT1}{lmtt}{m}{n}
-\DeclareMathAlphabet{\mbfba}{OT1}{cmss}{m}{it} % 32
-\DeclareMathAlphabet{\mbfbb}{OT1}{cmss}{m}{it}
-\DeclareMathAlphabet{\mbfbc}{OT1}{cmss}{m}{it}
-\DeclareMathAlphabet{\mbfbd}{OT1}{cmss}{m}{it}
-\DeclareMathAlphabet{\mbfbe}{OT1}{cmss}{m}{it}
-\DeclareMathAlphabet{\mbfbf}{OT1}{cmss}{m}{it}
-\DeclareMathAlphabet{\mbfbg}{OT1}{cmss}{m}{it}
-\DeclareMathAlphabet{\mbfbh}{OT1}{cmss}{m}{it}
-\DeclareMathAlphabet{\mbfbi}{OT1}{cmss}{m}{it}
-\DeclareMathAlphabet{\mbfbj}{OT1}{cmss}{m}{it}
-\DeclareMathAlphabet{\mbfbk}{OT1}{cmss}{m}{it}
-\DeclareMathAlphabet{\mbfbl}{OT1}{cmss}{m}{it}
-\DeclareMathAlphabet{\mbfbm}{OT1}{cmss}{m}{it}
-\DeclareMathAlphabet{\mbfbn}{OT1}{cmss}{m}{it}
-\DeclareMathAlphabet{\mbfbo}{OT1}{cmss}{m}{it}
-\DeclareMathAlphabet{\mbfbp}{OT1}{cmss}{m}{it}
+\DeclareMathAlphabet{\mbfba}{OT1}{lmss}{m}{it} % 32
+\DeclareMathAlphabet{\mbfbb}{OT1}{lmss}{m}{it}
+\DeclareMathAlphabet{\mbfbc}{OT1}{lmss}{m}{it}
+\DeclareMathAlphabet{\mbfbd}{OT1}{lmss}{m}{it}
+\DeclareMathAlphabet{\mbfbe}{OT1}{lmss}{m}{it}
+\DeclareMathAlphabet{\mbfbf}{OT1}{lmss}{m}{it}
+\DeclareMathAlphabet{\mbfbg}{OT1}{lmss}{m}{it}
+\DeclareMathAlphabet{\mbfbh}{OT1}{lmss}{m}{it}
+\DeclareMathAlphabet{\mbfbi}{OT1}{lmss}{m}{it}
+\DeclareMathAlphabet{\mbfbj}{OT1}{lmss}{m}{it}
+\DeclareMathAlphabet{\mbfbk}{OT1}{lmss}{m}{it}
+\DeclareMathAlphabet{\mbfbl}{OT1}{lmss}{m}{it}
+\DeclareMathAlphabet{\mbfbm}{OT1}{lmss}{m}{it}
+\DeclareMathAlphabet{\mbfbn}{OT1}{lmss}{m}{it}
+\DeclareMathAlphabet{\mbfbo}{OT1}{lmss}{m}{it}
+\DeclareMathAlphabet{\mbfbp}{OT1}{lmss}{m}{it}
\DeclareMathAlphabet{\mbfca}{OT1}{ptm}{m}{n} % 48
\DeclareMathAlphabet{\mbfcb}{OT1}{ptm}{m}{n}
@@ -77,7 +77,7 @@
\DeclareMathAlphabet{\mbfcm}{OT1}{ptm}{m}{n}
\DeclareMathAlphabet{\mbfcn}{OT1}{ptm}{m}{n}
\DeclareMathAlphabet{\mbfco}{OT1}{ptm}{m}{n}
-\DeclareMathAlphabet{\mbfcp}{OT1}{cmr}{bx}{n}
+\DeclareMathAlphabet{\mbfcp}{OT1}{lmr}{bx}{n}
\DeclareMathAlphabet{\mbfda}{OT1}{phv}{m}{n} % 64
\DeclareMathAlphabet{\mbfdb}{OT1}{pcr}{m}{n}
diff --git a/info/ptex-manual/jfm.pdf b/info/ptex-manual/jfm.pdf
index 440180a3f3..3654a86ba3 100644
--- a/info/ptex-manual/jfm.pdf
+++ b/info/ptex-manual/jfm.pdf
Binary files differ
diff --git a/info/ptex-manual/jfm.tex b/info/ptex-manual/jfm.tex
index 128ba4399a..4aef0812e7 100644
--- a/info/ptex-manual/jfm.tex
+++ b/info/ptex-manual/jfm.tex
@@ -16,6 +16,7 @@
% logos
\def\pTeX{p\kern-.10em\TeX}\def\upTeX{u\pTeX}
+\def\OMEGA{$\Omega$}
\title{\emph{JFMファイルフォーマット}}
\author{ASCII Corporation \& Japanese \TeX\ Development Community}
@@ -36,7 +37,10 @@ JFMフォーマットã®ä»•æ§˜ã¯å…¨ãåŒã˜ã§ã‚り,ãŸã 
JISコードを用ã„る(\pTeX ã®å ´åˆï¼‰ã‹ï¼Œ
UCS-4ã®ä¸‹ä½3ãƒã‚¤ãƒˆã‚’用ã„る(\upTeX ã®å ´åˆï¼‰ã‹ã ã‘ãŒç•°ãªã‚‹ï¼Ž
-\section{JFMファイルã®æ§‹æˆ}
+\tableofcontents
+\clearpage
+
+\section{JFMファイルã®æ§‹æˆ}\label{jfm-format}
JFMファイルã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã¯ï¼Œ
基本的ã«ã¯TFMファイルã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã«æº–æ‹ ã—ã¦ãŠã‚Šï¼Œ
@@ -92,20 +96,10 @@ JFMファイルã§ã‚‚TFMファイルã¨åŒã˜ã,拡張å­ã¯\code{.tfm}ãŒç”¨
ã“ã®ãƒ†ãƒ¼ãƒ–ルã®å„エントリーã¯1ワード(ï¼4ãƒã‚¤ãƒˆï¼‰ã§æ§‹æˆã•ã‚Œï¼Œ
上ä½3ãƒã‚¤ãƒˆã«æ–‡å­—コード(符åˆä½ç½®ï¼‰ï¼Œä¸‹ä½1ãƒã‚¤ãƒˆã«æ–‡å­—タイプをæŒã¤
-\footnote{ã“ã‚ŒãŒæ—¥æœ¬èªž\TeX{}開発コミュニティã«ã‚ˆã£ã¦2018å¹´1月ã«å°Žå…¥ã•ã‚ŒãŸ
-新仕様ã§ã‚る;オリジナルã®ã‚¢ã‚¹ã‚­ãƒ¼ã«ã‚ˆã‚‹ä»•æ§˜ã§ã¯ï¼Œã€Œä¸Šä½åŠãƒ¯ãƒ¼ãƒ‰ã«
-文字コード,下ä½åŠãƒ¯ãƒ¼ãƒ‰ã«æ–‡å­—タイプをæŒã¤ã€ã¨ã„ã†ã‚‚ã®ã§ã‚ã£ãŸï¼Ž
-\pTeX{}ã§ã¯å†…部処ç†ã«JISãŒç”¨ã„られ,JFMã§æ‰±ã†æ–‡å­—コードã¯2ãƒã‚¤ãƒˆãŒ
-上é™ã ã£ãŸãŸã‚å分ã§ã‚ã£ãŸãŒï¼Œ\upTeX{}ã§BMP超ãˆã®3ãƒã‚¤ãƒˆã®æ–‡å­—ã‚’
-JFMã§æ‰±ã†ã“ã¨ã‚’目的ã«ä»•æ§˜æ‹¡å¼µã—ãŸï¼Ž}.
+\footnote{日本語\TeX{}開発コミュニティã«ã‚ˆã‚‹æ–°ä»•æ§˜ï¼›
+詳細ã¯ç¬¬\ref{jfm-new}節をå‚照.}.
文字コードã¯ï¼Œãã‚ŒãŒ16進数24bit(3ãƒã‚¤ãƒˆï¼‰ã§\code{0xABcdef}ã¨è¡¨ã•ã‚Œã‚‹ã¨ã,
-\node{char\_type}テーブルã«ã¯\code{cd ef AB}ã¨ã—ã¦æ ¼ç´ã•ã‚Œã‚‹
-\footnote{オリジナルã®ä»•æ§˜ã§ã¯ï¼Œä¸‹ä½åŠãƒ¯ãƒ¼ãƒ‰ã«æ–‡å­—タイプを
-æ ¼ç´ã—ã¦ã„ãŸãŒï¼Œæ–‡å­—タイプã®ä¸Šé™ã¯255ãªã®ã§ï¼Œå®Ÿã¯ãã®ä¸Šä½ãƒã‚¤ãƒˆã¯
-常ã«\code{00}ã§ã‚ã£ãŸï¼Žã“ã®ã“ã¨ã‚’利用ã—,日本語\TeX{}開発コミュニティã®
-新仕様ã§ã¯ã€Œã“ã®\code{00}ãŒå®Ÿã¯æ–‡å­—コードã®ä¸Šä½ã ã£ãŸã€ã¨ã„ã†ã“ã¨ã«
-ã—ã¦ï¼Œ3ãƒã‚¤ãƒˆï¼ˆU+10000以上)ã®æ–‡å­—コードã§ä¸è¶³ã™ã‚‹1ãƒã‚¤ãƒˆã‚’確ä¿ã—ãŸï¼Ž
-ã“ã‚Œã«ã‚ˆã‚Šï¼Œæ–°ä»•æ§˜ã¯ã‚ªãƒªã‚¸ãƒŠãƒ«ã®ä»•æ§˜ã®ä¸Šä½äº’æ›ã§ã‚ã‚‹ã“ã¨ãŒä¿è¨¼ã•ã‚Œã¦ã„る.}.
+\node{char\_type}テーブルã«ã¯\code{cd ef AB}ã¨ã—ã¦æ ¼ç´ã•ã‚Œã‚‹ï¼Ž
テーブル内ã«ã¯ã‚³ãƒ¼ãƒ‰ã®å€¤ã®é †ç•ªã«åŽã‚られã¦ã„ãªã‘ã‚Œã°ãªã‚‰ãªã„.
ã¾ãŸã“ã®ãƒ†ãƒ¼ãƒ–ルã®å…ˆé ­ã«ã¯ï¼Œãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã¨ã—ã¦
文字コードåŠã³æ–‡å­—タイプã®é …ãŒ0ã®ã‚‚ã®ãŒï¼Œ
@@ -162,11 +156,8 @@ JFMã§ã¯$\size{bc}$ã¯å¿…ãšã‚¼ãƒ­\footnote{å‰ç¯€ã«ã‚る通り,文字コãƒ
ã§ã‚ã‚‹å ´åˆã¯ï¼Œå®Ÿéš›ã®\node{glue\_kern}プログラムãŒ
\node{glue\_kern}[$256\times\size{op\_byte}+\size{remainder}$]ã‹ã‚‰
åŽã‚られã¦ã„る(ã™ãªã‚ã¡ï¼Œå†é…ç½®ã•ã‚Œã¦ã„る)ã“ã¨ã‚’示ã™
- \footnote{「å†é…ç½®ã€ã¯ï¼Œã‚µã‚¤ã‚ºãŒ256を超ãˆã‚‹å¤§ããª
- \node{glue\_kern}テーブルを格ç´ã™ã‚‹ãŸã‚ã®æ–¹ç­–ã§ã‚り,
- 欧文TFMã®\node{lig\_kern}テーブルã«ãŠã‘ã‚‹ãã‚Œã¨åŒæ§˜ã§ã‚る.
- 2018å¹´2月ã«æ—¥æœ¬èªž\TeX{}開発コミュニティã«ã‚ˆã£ã¦ï¼Œ
- \pTeX{}åŠã³pPLtoTFã§æ–°ãŸã«ã‚µãƒãƒ¼ãƒˆã•ã‚ŒãŸï¼Ž}.
+ \footnote{日本語\TeX{}開発コミュニティã«ã‚ˆã£ã¦æ–°ãŸã«ã‚µãƒãƒ¼ãƒˆï¼›
+ 詳細ã¯ç¬¬\ref{jfm-new}節をå‚照.}.
最åˆã®ãƒ¯ãƒ¼ãƒ‰ã§ãªã„å ´åˆï¼ˆã™ãªã‚ã¡ï¼Œæ—¢ã«å†é…置先ã‚ã‚‹ã„ã¯
プログラムã®ã‚¹ãƒ†ãƒƒãƒ—を開始ã—ãŸå¾Œã®ãƒ¯ãƒ¼ãƒ‰ã§ã‚ã‚‹å ´åˆï¼‰ã¯ï¼Œ
ãã®å ´ã§ãƒ—ログラムを終了ã™ã‚‹ï¼Ž
@@ -175,13 +166,8 @@ JFMã§ã¯$\size{bc}$ã¯å¿…ãšã‚¼ãƒ­\footnote{å‰ç¯€ã«ã‚る通り,文字コãƒ
\item 128よりå°ã•ã„ã¨ã\\
ã“ã®ãƒ¯ãƒ¼ãƒ‰ã‚’実行ã—ãŸå¾Œï¼Œæ¬¡ã®ã‚¹ãƒ†ãƒƒãƒ—ã¾ã§ã‚¹ã‚­ãƒƒãƒ—ã™ã‚‹
ワード数を示ã™
- \footnote{「スキップã€(SKIP)ã¯ï¼Œå…ƒã€…アスキーã®å…¬å¼ãƒšãƒ¼ã‚¸
- \texttt{http://ascii.asciimw.jp/pb/ptex/tfm/jfm.html}ã«æ–‡æ›¸åŒ–
- ã•ã‚Œã¦ã¯ã„ãŸãŒï¼Œå®Ÿéš›ã«ã¯(p)PLtoTFã®\node{glue\_kern}テーブル内ã§
- SKIP命令を使用ã™ã‚‹ã“ã¨ãŒã§ããšï¼Œ\pTeX{}ã‚‚ã‚„ã¯ã‚ŠSKIP命令を
- サãƒãƒ¼ãƒˆã—ã¦ã„ãªã‹ã£ãŸï¼Ž
- 2018å¹´2月ã®æ—¥æœ¬èªž\TeX{}開発コミュニティã®æ”¹ä¿®ã«ã‚ˆã‚Šï¼Œ
- æ–°ãŸã«ã‚µãƒãƒ¼ãƒˆãŒé–‹å§‹ã•ã‚ŒãŸï¼Ž}.
+ \footnote{日本語\TeX{}開発コミュニティã«ã‚ˆã£ã¦æ–°ãŸã«ã‚µãƒãƒ¼ãƒˆï¼›
+ 詳細ã¯ç¬¬\ref{jfm-new}節をå‚照.}.
\end{itemize}
\item[第2ãƒã‚¤ãƒˆ] (\node{char\_type})
\begin{itemize}
@@ -238,6 +224,67 @@ JFMã§ã¯$\size{bc}$ã¯å¿…ãšã‚¼ãƒ­\footnote{å‰ç¯€ã«ã‚る通り,文字コãƒ
% 上下ä½ç½®è£œæ­£ã« \fontdimen5 ã®å€¤ãŒç”¨ã„られるらã—ã„.他ã«ã¯ï¼Ÿ
\end{dangerous}
+\subsection{日本語\TeX{}開発コミュニティã«ã‚ˆã‚‹æ–°ä»•æ§˜}\label{jfm-new}
+長らãJFMフォーマットã¯æ ªå¼ä¼šç¤¾ã‚¢ã‚¹ã‚­ãƒ¼ãŒé–‹ç™ºã—ãŸå½“åˆä»•æ§˜ã®ã¾ã¾ã§ã‚ã£ãŸãŒï¼Œ
+2018å¹´1月ã‹ã‚‰2月ã«ã‹ã‘,日本語\TeX{}開発コミュニティã¯ä¸‹è¨˜ã®3点ã«ã¤ã
+JFMフォーマットã®ä»•æ§˜ã‚’æ‹¡å¼µã—ãŸï¼Ž
+\begin{enumerate}
+ \item \node{char\_type}テーブルã¸ã®3ãƒã‚¤ãƒˆã®æ–‡å­—コード格ç´
+ \item \node{glue\_kern}テーブルã§ã®ã‚¹ã‚­ãƒƒãƒ—(SKIP)コマンド使用
+ \item \node{glue\_kern}テーブルã§ã®å†é…ç½®(rearrangement)
+\end{enumerate}
+和文JFMã§ã“れらã®æ‹¡å¼µæ©Ÿèƒ½ãŒä½¿ã‚ã‚Œã¦ã„ã‚‹å ´åˆã¯\pTeX~p3.8.0以上ãŒå¿…è¦ã§ã‚る.
+
+\subsubsection{\node{char\_type}テーブルã¸ã®3ãƒã‚¤ãƒˆã®æ–‡å­—コード格ç´}
+\node{char\_type}テーブルã®å„エントリーã¯1ワード(ï¼4ãƒã‚¤ãƒˆï¼‰ã§
+構æˆã•ã‚Œã‚‹ãŒï¼Œã‚ªãƒªã‚¸ãƒŠãƒ«ã®ä»•æ§˜ã§ã¯
+\begin{itemize}
+ \item 上ä½åŠãƒ¯ãƒ¼ãƒ‰ã«æ–‡å­—コード(符åˆä½ç½®ï¼‰ï¼Œä¸‹ä½åŠãƒ¯ãƒ¼ãƒ‰ã«æ–‡å­—タイプをæŒã¤
+\end{itemize}
+ã§ã‚ã£ãŸï¼Ž
+\pTeX{}ã§ã¯å†…部処ç†ã«JISãŒç”¨ã„られ,JFMã§æ‰±ã†æ–‡å­—コードã¯2ãƒã‚¤ãƒˆãŒ
+上é™ã ã£ãŸãŸã‚å分ã§ã‚ã£ãŸãŒï¼Œ\upTeX{}ã§BMP超ãˆã®3ãƒã‚¤ãƒˆã®æ–‡å­—ã‚’
+JFMã§æ‰±ã†ã“ã¨ãŒã§ããªã‹ã£ãŸï¼Žã¾ãŸï¼Œã‚ªãƒªã‚¸ãƒŠãƒ«ã®ä»•æ§˜ã§ã¯æ–‡å­—タイプ用ã«
+下ä½åŠãƒ¯ãƒ¼ãƒ‰ãŒç¢ºä¿ã•ã‚Œã¦ã„る一方ã§ï¼Œæ–‡å­—タイプã®ä¸Šé™ã¯255ãªã®ã§
+実ã¯ãã®ä¸Šä½ãƒã‚¤ãƒˆã¯å¸¸ã«\code{00}ã§ã‚り,勿体ãªã‹ã£ãŸï¼Ž
+
+ãã“ã§ï¼Œæ—¥æœ¬èªž\TeX{}開発コミュニティã®æ–°ä»•æ§˜ï¼ˆ2018å¹´1月)ã§ã¯
+\begin{itemize}
+ \item 上ä½3ãƒã‚¤ãƒˆã«æ–‡å­—コード(符åˆä½ç½®ï¼‰ï¼Œä¸‹ä½1ãƒã‚¤ãƒˆã«æ–‡å­—タイプをæŒã¤
+ \item 文字コードã¯ï¼Œãã‚ŒãŒ16進数24bit(3ãƒã‚¤ãƒˆï¼‰ã§\code{0xABcdef}ã¨
+ 表ã•ã‚Œã‚‹ã¨ã,テーブルã«ã¯\code{cd ef AB}ã¨ã—ã¦æ ¼ç´ã•ã‚Œã‚‹
+\end{itemize}
+ã¨ã—ãŸï¼Žã‚ªãƒªã‚¸ãƒŠãƒ«ã®ä»•æ§˜ã§å¸¸ã«\code{00}ã ã£ãŸãƒã‚¤ãƒˆãŒ
+「実ã¯æ–‡å­—コードã®ä¸Šä½ã ã£ãŸã€ã¨è§£é‡ˆã™ã‚‹ã“ã¨ã«ã—ã¦ï¼Œ
+3ãƒã‚¤ãƒˆï¼ˆU+10000以上)ã®æ–‡å­—コードã§ä¸è¶³ã™ã‚‹1ãƒã‚¤ãƒˆã‚’確ä¿ã—ãŸã®ã§ã‚る.
+ã“ã‚Œã«ã‚ˆã‚Šï¼Œæ–°ä»•æ§˜ã¯ã‚ªãƒªã‚¸ãƒŠãƒ«ã®ä»•æ§˜ã®ä¸Šä½äº’æ›ã§ã‚ã‚‹ã“ã¨ãŒä¿è¨¼ã•ã‚Œã¦ã„る.
+
+\subsubsection{\node{glue\_kern}テーブルã§ã®ã‚¹ã‚­ãƒƒãƒ—(SKIP)コマンド使用}
+「スキップã€(\code{SKIP})ã¯ï¼Œå…ƒã€…アスキーã®å…¬å¼ãƒšãƒ¼ã‚¸
+\footnote{\texttt{https://asciidwango.github.io/ptex/tfm/jfm.html}}
+% æ—§: http://ascii.asciimw.jp/pb/ptex/tfm/jfm.html
+ã«æ–‡æ›¸åŒ–ã•ã‚Œã¦ã¯ã„ãŸãŒï¼Œå®Ÿéš›ã«ã¯(p)PLtoTFã¯\code{GLUEKERN}プロパティ内ã§
+\code{SKIP}命令をå—ã‘付ã‘ãšï¼Œ\pTeX{}ã‚‚ã‚„ã¯ã‚ŠJFMã®\code{SKIP}命令を
+サãƒãƒ¼ãƒˆã—ã¦ã„ãªã‹ã£ãŸï¼Ž2018å¹´2月ã®æ—¥æœ¬èªž\TeX{}開発コミュニティã®æ”¹ä¿®ã«ã‚ˆã‚Šï¼Œ
+æ–°ãŸã«ã‚µãƒãƒ¼ãƒˆãŒé–‹å§‹ã•ã‚ŒãŸï¼Ž
+
+\subsubsection{\node{glue\_kern}テーブルã§ã®å†é…ç½®(rearrangement)}
+「å†é…ç½®ã€ã¯ï¼Œã‚µã‚¤ã‚ºãŒ256を超ãˆã‚‹å¤§ããª\node{glue\_kern}テーブルを
+æ ¼ç´ã™ã‚‹ãŸã‚ã®æ–¹ç­–ã§ã‚り,欧文TFMã®\node{lig\_kern}テーブルã«ãŠã‘ã‚‹
+ãã‚Œã¨åŒæ§˜ã§ã‚る.2018å¹´2月ã«æ—¥æœ¬èªž\TeX{}開発コミュニティã«ã‚ˆã£ã¦ï¼Œ
+\pTeX{}åŠã³pPLtoTFã§æ–°ãŸã«ã‚µãƒãƒ¼ãƒˆã•ã‚ŒãŸï¼Ž
+
+
+\section{JPLファイル}\label{jpl-format}
+
+TFMã¯ãƒã‚¤ãƒŠãƒªå½¢å¼ã§ã‚ã‚‹ãŒï¼Œã“れをプロパティ(特性)ã¨ã„ã†æ¦‚念を使ã£ã¦
+テキスト形å¼ã§è¦–覚化ã—ãŸã‚‚ã®ãŒPL (Property List)ファイルã§ã‚る.
+åŒæ§˜ã«ï¼ŒJFMをテキスト形å¼ã§è¦–覚化ã—ãŸã‚‚ã®ãŒ
+\emph{JPL (Japanese Property List)}ファイルã§ã‚る.
+JPLファイルã§ã‚‚PLファイルã¨åŒã˜ã,拡張å­ã¯\code{.pl}ãŒç”¨ã„られる.
+
+
+% -- tables begin
\DeleteShortVerb{|}
\begin{table}[tbp]\small
\caption{JFMファイルã®æ§‹æˆ\label{構æˆ}}
@@ -307,31 +354,151 @@ $\size{ng}$ & $\size{np}$ \\ \hline
\end{minipage}
\end{table}
\MakeShortVerb*{|}
+% -- tables end
+\clearpage
-\section{JPLファイル}
-
-TFMã¯ãƒã‚¤ãƒŠãƒªå½¢å¼ã§ã‚ã‚‹ãŒï¼Œã“れをプロパティ(特性)ã¨ã„ã†æ¦‚念を使ã£ã¦
-テキスト形å¼ã§è¦–覚化ã—ãŸã‚‚ã®ãŒPL (Property List)ファイルã§ã‚る.
-åŒæ§˜ã«ï¼ŒJFMをテキスト形å¼ã§è¦–覚化ã—ãŸã‚‚ã®ãŒ
-\emph{JPL (Japanese Property List)}ファイルã§ã‚る.
-JPLファイルã§ã‚‚PLファイルã¨åŒã˜ã,拡張å­ã¯\code{.pl}ãŒç”¨ã„られる.
-
-
-\section{JFMを扱ã†ãƒ—ログラム}
+\section{JFMを扱ã†ãƒ—ログラム}\label{jfm-program}
\pTeX ã¨\upTeX ,ã‚ã‚‹ã„ã¯ãれらãŒç”Ÿæˆã—ãŸDVIを扱ã†ãƒ—ログラムãŒ
JFMを扱ã†ã®ã¯å½“然ã§ã‚ã‚‹ãŒï¼Œã“ã“ã§ã¯JFMãŠã‚ˆã³é–¢é€£ã™ã‚‹ãƒ•ã‚©ãƒ³ãƒˆãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã‚’
扱ã†ã“ã¨ã«ç‰¹åŒ–ã—ãŸãƒ—ログラムã®ä¸»ãªã‚‚ã®ã‚’挙ã’る.
-%\subsection{pPLtoTF, upPLtoTF}
-
-%\subsection{pTFtoPL, upTFtoPL}
-
-%\subsection{chkdvifont}
-
-%\subsection{jfmutil}
-
-%\subsection{makejvf}
+\subsection{pPLtoTF, upPLtoTF}
+
+テキスト形å¼ã®JPLファイルをãƒã‚¤ãƒŠãƒªå½¢å¼ã®JFMファイルã«å¤‰æ›ã™ã‚‹ï¼Žã„ãšã‚Œã‚‚
+欧文\TeX 用ã®\code{pltotf}ã®ä¸Šä½äº’æ›ã§ã‚り,入力ファイルãŒæ¬§æ–‡ç”¨ã®PLファイルã§
+ã‚ã‚Œã°æ¬§æ–‡ç”¨ã®TFMを生æˆã—,和文用ã®JPLファイルã§ã‚ã‚Œã°å’Œæ–‡ç”¨ã®JFMを生æˆã™ã‚‹ï¼Ž
+
+\code{ppltotf}ã¨\code{uppltotf}ã®é•ã„ã¯ï¼Œã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã§ã‚る.
+\begin{itemize}
+ \item \code{ppltotf}: 常ã«\textbf{JIS}コードã§ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•ã‚ŒãŸJFMを生æˆã™ã‚‹ãŸã‚,
+ \pTeX 用ã®JFM生æˆã«ã¯å¤šãã®å ´åˆ\code{ppltotf}コマンドãŒç”¨ã„られる.
+ \item \code{uppltotf}: デフォルトã§ã¯\textbf{Unicode}(UCS-4ã®ä¸‹ä½3ãƒã‚¤ãƒˆï¼‰ã§
+ エンコードã•ã‚ŒãŸJFMを生æˆã™ã‚‹ãŸã‚,主ã«\upTeX 用ã®JFM生æˆã«ç”¨ã„られる.
+\end{itemize}
+
+\code{ppltotf}ã«ãŠã„ã¦ã¯ï¼Œ\code{-kanji}オプションã§
+入力JPLファイルã®æ–‡å­—コードを指定ã§ãã‚‹
+(有効ãªå€¤ã¯\code{euc}, \code{jis}, \code{sjis}, \code{utf8}).
+\code{uppltotf}ã§ã‚‚\code{-kanji}オプションãŒåŒã˜ã使ãˆã‚‹ãŒï¼Œ
+åŒæ™‚ã«JFMã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã‚‚JISã«ãªã‚‹ï¼ˆå¾“ã£ã¦\code{ppltotf}ã¨åŒã˜æŒ™å‹•ã‚’示ã™ï¼‰ã“ã¨ã«æ³¨æ„
+\footnote{\code{uppltotf}ã«ãŠã‘ã‚‹è¦å®šå€¤ã¯\code{uptex}ã§ã‚り,
+ã“ã®å ´åˆã¯JFMãŒUnicodeã§ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•ã‚Œã‚‹ï¼Ž}.
+
+\subsection{pTFtoPL, upTFtoPL}
+
+ãƒã‚¤ãƒŠãƒªå½¢å¼ã®JFMファイルをテキスト形å¼ã®JPLファイルã«å¤‰æ›ã™ã‚‹ï¼Žã„ãšã‚Œã‚‚
+欧文\TeX 用ã®\code{tftopl}ã®ä¸Šä½äº’æ›ã§ã‚り,入力ファイルãŒæ¬§æ–‡ç”¨ã®TFMã§ã‚ã‚Œã°
+欧文用ã®PLファイルを生æˆã—,和文用ã®JFMã§ã‚ã‚Œã°å’Œæ–‡ç”¨ã®JPLファイルを生æˆã™ã‚‹ï¼Ž
+
+\code{ptftopl}ã¨\code{uptftopl}ã®é•ã„ã¯ï¼Œã‚„ã¯ã‚Šã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã§ã‚る.
+\begin{itemize}
+ \item \code{ptftopl}: 入力JFMファイルを常ã«\textbf{JIS}コードã§è§£é‡ˆã™ã‚‹ãŸã‚,
+ \pTeX 用ã®JFMデコードã«ã¯å¤šãã®å ´åˆ\code{ptftopl}コマンドãŒç”¨ã„られる.
+ \item \code{uptftopl}: 入力JFMファイルをデフォルトã§ã¯\textbf{Unicode}ã§è§£é‡ˆã™ã‚‹ãŸã‚,
+ 主ã«\upTeX 用ã®JFMデコードã«ç”¨ã„られる.
+\end{itemize}
+
+\code{ptftopl}ã«ãŠã„ã¦ã¯ï¼Œ\code{-kanji}オプションã§
+出力JPLファイルã®æ–‡å­—コードを指定ã§ãã‚‹
+(有効ãªå€¤ã¯\code{euc}, \code{jis}, \code{sjis}, \code{utf8}).
+\code{uptftopl}ã§ã‚‚\code{-kanji}オプションãŒåŒã˜ã使ãˆã‚‹ãŒï¼Œ
+åŒæ™‚ã«JFMã‚‚JISコードã§è§£é‡ˆã•ã‚Œã‚‹ï¼ˆå¾“ã£ã¦\code{ptftopl}ã¨åŒã˜æŒ™å‹•ã‚’示ã™ï¼‰ã“ã¨ã«æ³¨æ„
+\footnote{\code{uptftopl}ã«ãŠã‘ã‚‹è¦å®šå€¤ã¯\code{uptex}ã§ã‚り,
+ã“ã®å ´åˆã¯JFMãŒUnicodeã§è§£é‡ˆã•ã‚Œã‚‹ï¼Ž}.
+
+\subsection{chkdvifont}
+
+\TeX\ Live 2019ã§è¿½åŠ ã•ã‚ŒãŸæ¯”較的新ã—ã„コマンドã§ã‚り,
+TFM/JFMファイルã®ç°¡å˜ãªæƒ…報を表示ã™ã‚‹æ©Ÿèƒ½ã‚’æŒã¤ï¼ˆ\OMEGA 用ã®OFMファイルã«ã‚‚対応).
+
+実行例を示ã™ï¼ˆæ³¨æ„:ファイルåã®æ‹¡å¼µå­ã¯çœç•¥ä¸å¯ï¼Žã¾ãŸï¼Œãƒ•ã‚¡ã‚¤ãƒ«ãŒ
+ç¾åœ¨ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ãªã„å ´åˆã¯ï¼Œãƒ•ãƒ«ãƒ‘スã®æŒ‡å®šãŒå¿…è¦ï¼‰ï¼Ž
+
+\paragraph{欧文TFMã®å ´åˆ}
+\begin{verbatim}
+$ chkdvifont cmr10.tfm
+ "cmr10" is a tfm file : 0 -> 127
+ checksum = 4BF16079
+ design size = 10485760 2^{-20} points = 10 points
+\end{verbatim}
+一行目ã®è¡¨ç¤ºã‹ã‚‰ï¼Œ
+欧文TFMã§ã‚ã‚‹ã“ã¨ã¨$\size{bc}=0$,$\size{ec}=127$ã§ã‚ã‚‹ã“ã¨ãŒèª­ã¿å–れる.
+
+\paragraph{和文横組用JFMã®å ´åˆ}
+\begin{verbatim}
+$ chkdvifont jis.tfm
+ "jis" is a jfm file : 0 -> 5
+ checksum = 00000000
+ design size = 10485760 2^{-20} points = 10 points
+\end{verbatim}
+和文(横組用)JFMã§ã‚ã‚‹ã“ã¨ã¨$\size{bc}=0$,$\size{ec}=5$ã§ã‚ã‚‹ã“ã¨ãŒèª­ã¿å–れる.
+
+\paragraph{和文縦組用JFMã®å ´åˆ}
+\begin{verbatim}
+$ chkdvifont upjisr-v.tfm
+ "upjisr-v" is a jfm(tate) file : 0 -> 5
+ checksum = 00000000
+ design size = 10485760 2^{-20} points = 10 points
+\end{verbatim}
+和文縦組用JFMã§ã‚ã‚‹ã“ã¨ã¨$\size{bc}=0$,$\size{ec}=5$ã§ã‚ã‚‹ã“ã¨ãŒèª­ã¿å–れる
+\footnote{\code{upjisr-v.tfm}ã¯\upTeX 用JFMã§ã‚ã‚‹ãŒï¼Œ
+原ç†çš„ã«\pTeX 用ã¨\upTeX 用ã®JFMã¯åŒºåˆ¥ã§ããªã„.}.
+
+\paragraph{和文JFMã®æ‹¡å¼µæ©Ÿèƒ½ãŒä½¿ã‚ã‚Œã¦ã„ã‚‹å ´åˆ}
+第\ref{jfm-new}節ã§è¿°ã¹ãŸã¨ãŠã‚Šï¼Œæ—¥æœ¬èªž\TeX 開発コミュニティã«ã‚ˆã£ã¦
+下記ã®3点ã«ã¤ãJFMフォーマットã®ä»•æ§˜ãŒæ‹¡å¼µã•ã‚Œã¦ã„る.
+\begin{enumerate}
+ \item \node{char\_type}テーブルã¸ã®3ãƒã‚¤ãƒˆã®æ–‡å­—コード格ç´
+ \item \node{glue\_kern}テーブルã§ã®ã‚¹ã‚­ãƒƒãƒ—(SKIP)コマンド使用
+ \item \node{glue\_kern}テーブルã§ã®å†é…ç½®(rearrangement)
+\end{enumerate}
+和文JFMã§ã“れらã®æ‹¡å¼µæ©Ÿèƒ½ãŒä½¿ã‚ã‚Œã¦ã„ã‚‹å ´åˆã¯\pTeX~p3.8.0以上ãŒå¿…è¦ã§ã‚ã‚‹ãŒï¼Œ
+ã“ã®æƒ…報も表示ã•ã‚Œã‚‹ï¼ˆä¸‹ã®ä¾‹ã¯å†é…ç½®ã‚り):
+\begin{verbatim}
+$ chkdvifont upphiraminw3-h.tfm
+ "upphiraminw3-h" is a jfm file : 0 -> 146
+ New features in pTeX p3.8.0 / JFM 2.0:
+ + rearrangement in glue_kern
+ checksum = 00000000
+ design size = 10485760 2^{-20} points = 10 points
+\end{verbatim}
+
+\subsection{makejvf}
+
+JFMファイルを基ã«ã—ã¦ï¼ŒVF (virtual font)を生æˆã™ã‚‹ãƒ—ログラムã§ã‚る.
+\code{makejvf}ãŒç”Ÿæˆã™ã‚‹å’Œæ–‡VFã®ç›®çš„ã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã‚る:
+\begin{itemize}
+ \item \pTeX ã‚„\upTeX ã§ä½¿ã‚れる多ãã®JFMã§ã¯ï¼Œç´„物類(ã‹ã£ã“,å¥èª­ç‚¹ãªã©ï¼‰ã®æ–‡å­—å¹…ã‚’
+ åŠè§’å¹…ã¨ã—ã¦å®šç¾©ã—,見ãŸç›®ã®ç©ºç™½ã‚’グルーやカーンã®æŒ¿å…¥ã«ã‚ˆã£ã¦å®Ÿç¾ã—ã¦ã„る.
+ 例ãˆã°``(''ã®ã‚ˆã†ãªå·¦ã«ç©ºããŒã‚る括弧類ã¯ï¼Œå·¦åŠåˆ†ã¯æ–‡å­—ã®ä¸€éƒ¨ã¨ã—ã¦æ‰±ã‚ãšï¼Œ
+ 「グルーã«ã‚ˆã‚‹åŠè§’分ã®å³ã‚·ãƒ•ãƒˆã€ã¨ã€ŒåŠè§’å¹…ã®\inhibitglue (ã€ã¨ã—ã¦æ‰±ã£ã¦ã„る.
+ \item 一方,DVIã‹ã‚‰PostScriptã‚„PDFã¸å¤‰æ›æ™‚ã«ä½¿ã‚れる実際ã®ãƒ•ã‚©ãƒ³ãƒˆã§ã¯ï¼Œ
+ 約物類も全角幅ã§ãƒ‡ã‚¶ã‚¤ãƒ³ã•ã‚Œã¦ã„る.ãã®ãŸã‚,DVIã«é…ç½®ã•ã‚ŒãŸ
+ ``(''を実際ã®ãƒ•ã‚©ãƒ³ãƒˆã®``(''ã«å®‰ç›´ã«ç½®ãæ›ãˆã‚‹ã¨ï¼Œæƒ³å®šã‚ˆã‚Šã‚‚å³ã«ãšã‚ŒãŸ
+ ä½ç½®ã«å‡ºåŠ›ã•ã‚Œã¦ã—ã¾ã†ï¼Ž
+ \item ã“ã®ä½ç½®ãšã‚Œã‚’補正ã™ã‚‹ãŸã‚,欧文フォントã®åˆæˆã‚„ç½®æ›ã«å®Ÿç”¨ã•ã‚Œã¦ã„ã‚‹
+ VF(仮想フォント)ã¨ã„ã†ä»•çµ„ã¿ã‚’和文フォントã«ã‚‚応用ã™ã‚‹ï¼Ž
+ 例ãˆã°VF中ã«ã€Œ``(''ã¯å·¦ã«åŠè§’分ãšã‚‰ã—ã¦ç½®ãæ›ãˆã‚‹ã€ã¨ã„ã†è¨˜è¿°ã‚’追加ã™ã‚‹ã“ã¨ã§ï¼Œ
+ DVIドライãƒãŒãれを解釈ã—ã¦ä½ç½®è£œæ­£ã§ãるよã†ã«ã™ã‚‹ï¼Ž
+\end{itemize}
+詳細ã¯ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«|makejvf.1|(英語版)をå‚ç…§ã—ã¦ã»ã—ã„.
+
+\subsection{jfmutil}
+
+JFMãŠã‚ˆã³å’Œæ–‡VFã‚’æ“作ã™ã‚‹ç¨®ã€…ã®æ©Ÿèƒ½ã‚’æä¾›ã™ã‚‹Perlスクリプトã§ã‚る.
+主ãªæ©Ÿèƒ½ã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šï¼š
+\begin{itemize}
+ \item 和文ã®ä»®æƒ³ãƒ•ã‚©ãƒ³ãƒˆï¼ˆVFã¨JFMã®çµ„)ã«å¯¾å¿œã™ã‚‹ç‹¬è‡ªä»•æ§˜ã®
+ テキスト形å¼ï¼ˆZVPå½¢å¼ï¼‰ã¨ï¼Œä»®æƒ³ãƒ•ã‚©ãƒ³ãƒˆã¨ã®é–“ã®ç›¸äº’変æ›ï¼Ž
+ 欧文ã®ä»®æƒ³ãƒ•ã‚©ãƒ³ãƒˆï¼ˆVFã¨TFMã®çµ„)ã¨ãƒ†ã‚­ã‚¹ãƒˆå½¢å¼ï¼ˆVPLå½¢å¼ï¼‰ã¨ã®é–“ã‚’
+ 相互変æ›ã™ã‚‹|vftovp|/|vptovf|ã®å’Œæ–‡ç‰ˆã«ç›¸å½“ã™ã‚‹ï¼Ž
+ \item 和文・欧文å•ã‚ãšï¼ŒVFãã‚Œå˜ç‹¬ã«å¯¾å¿œã™ã‚‹ç‹¬è‡ªä»•æ§˜ã®
+ テキスト形å¼ï¼ˆZVP0å½¢å¼ï¼›ZVPå½¢å¼ã®ã‚µãƒ–セット)ã¨ï¼ŒVFã¨ã®é–“ã®ç›¸äº’変æ›ï¼Ž
+ \item 和文ã®ä»®æƒ³ãƒ•ã‚©ãƒ³ãƒˆï¼ˆVFã¨JFMã®çµ„)を別ã®åå‰ã§è¤‡è£½ã™ã‚‹æ©Ÿèƒ½ï¼Ž
+ VF中ã«è¨˜éŒ²ã•ã‚ŒãŸå‚照先ã®JFMåã‚‚é©åˆ‡ã«å¤‰æ›´ã•ã‚Œã‚‹ï¼Žå¤šæ›¸ä½“化ãªã©ã«æœ‰ç”¨ï¼Ž
+\end{itemize}
+詳細ã¯å…¬å¼ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ã»ã—ã„.
\end{document}
diff --git a/info/ptex-manual/ptex-guide-en.pdf b/info/ptex-manual/ptex-guide-en.pdf
index 6228a3f4b5..eec4e67a3a 100644
--- a/info/ptex-manual/ptex-guide-en.pdf
+++ b/info/ptex-manual/ptex-guide-en.pdf
Binary files differ
diff --git a/info/ptex-manual/ptex-guide-en.tex b/info/ptex-manual/ptex-guide-en.tex
index 7e7eab90ba..66c651cc76 100644
--- a/info/ptex-manual/ptex-guide-en.tex
+++ b/info/ptex-manual/ptex-guide-en.tex
@@ -270,7 +270,10 @@ but may also apply to other countries:
they do without driver options unless really needed.
For example, the convention of having a global driver option
does no harm even when no driver-dependent package is used, but
- some users choose to omit a driver option to avoid a warning:
+ some users choose to omit a driver option to avoid a warning\footnote{%
+ Since \LaTeXe~2020-02-02, this warning is effectively gone. This is due
+ to preloading of \Pkg{expl3} into the format, and the driver-dependent
+ code of \Pkg{expl3} interprets the global driver option.}:
\begin{verbatim}
LaTeX Warning: Unused global option(s):
[dvipdfmx].
@@ -332,19 +335,25 @@ both two drivers.
A DVI file which is output by \pTeX\ can be converted directly to a PDF file
using dvipdfmx.
-% [TODO] Mention kanji-config-updmap for font setup
+For Japanese fonts to be used in the output PDF, dvipdfmx refers to
+|kanjix.map| generated by the command |updmap|.
+You can use the script |kanji-config-updmap| to change font settings;
+please refer to its help message or documentation.
\subsubsection{Using \emph{dvips}}
A DVI file which is output by \pTeX\ can be converted to a PostScript file
using dvips.
-% [TODO] Mention kanji-config-updmap again
+For Japanese fonts to be used in the output PostScript, dvips refers to
+\code{psfonts.map} generated by the command \code{updmap}.
+You can use the script |kanji-config-updmap| to change font settings;
+please refer to its help message or documentation.
The resulting PostScript file can then be converted to
a PDF file using Ghostscript (ps2pdf) or Adobe Distiller.
When using Ghostscript, a proper setup of Japanese font must be done
before converting PostScript into PDF.
-An easy solution for the setup is a script |cjk-gs-integrate|
+An easy solution for the setup is to run a script |cjk-gs-integrate|
developed by Japanese \TeX\ Development Community.
\section{Programming on \pTeX\ family}
@@ -448,10 +457,12 @@ Knuthian \TeX; however, it is enabled in \pTeX\ family.
\csitem[\.{euc}]
\csitem[\.{ifdbox} \New{p3.2 (\TL2011)}]
\csitem[\.{ifddir} \New{p3.2 (\TL2011)}]
+ \csitem[\.{ifjfont} \New{p3.8.3 (\TL2020)}]
\csitem[\.{ifmbox} \New{p3.7.1 (\TL2017)}]
\csitem[\.{ifmdir}]
\csitem[\.{iftbox}]
\csitem[\.{iftdir}]
+ \csitem[\.{iftfont} \New{p3.8.3 (\TL2020)}]
\csitem[\.{ifybox}]
\csitem[\.{ifydir}]
\csitem[\.{inhibitglue}]
@@ -754,7 +765,7 @@ is as follows:
Short version:
\begin{itemize}
\item With \epTeX~191112 or later (\TL2020),
- you can use expandable primitives \.{Uchar} and \.{Ucharcat}
+ you can use expandable primitives \.{Uchar} and \.{Ucharcat}.
\item Otherwise, use the ``\.{kansuji} trick''.
\end{itemize}
@@ -803,10 +814,15 @@ the ``\.{kansuji} trick'' and the ``\.{lowercase} trick'' should be
used complementarily.
\paragraph{\.{Uchar}, \.{Ucharcat}}
-The ``\.{kansuji} trick'' above include an assignment of \.{kansujichar}
+The ``\.{kansuji} trick'' above includes an assignment of \.{kansujichar}
which is unexpandable.
\epTeX~191112 or later (\TL2020) provides expandable primitives
\.{Uchar} and \.{Ucharcat}, which are derived from \hologo{XeTeX}.
+Regardless of their names, and unlike \hologo{XeTeX} or \hologo{LuaTeX},
+these primitives do \emph{not} necessarily take
+a Unicode value as an argument.
+These primitives in \epTeX\ and \eupTeX\ take a valid character code
+(see \ref{kanji-internal}) based on the internal kanji encoding.
\begin{simplelist}
\csitem[\.{Uchar} <character code>]
diff --git a/info/ptex-manual/ptex-manual.pdf b/info/ptex-manual/ptex-manual.pdf
index 6c35fa4654..681ba5f40a 100644
--- a/info/ptex-manual/ptex-manual.pdf
+++ b/info/ptex-manual/ptex-manual.pdf
Binary files differ
diff --git a/info/ptex-manual/ptex-manual.tex b/info/ptex-manual/ptex-manual.tex
index f298c03870..1c69ab24a0 100644
--- a/info/ptex-manual/ptex-manual.tex
+++ b/info/ptex-manual/ptex-manual.tex
@@ -64,15 +64,31 @@
\date{version p\the\ptexversion.\the\ptexminorversion\ptexrevision,\today}
\maketitle
-本ドキュメントã¯ï¼Œæ—¥æœ¬èªž\TeX 開発コミュニティ版ã®\pTeX%
-~p\the\ptexversion.\the\ptexminorversion\ptexrevision
-ã«ã¤ã„ã¦ã¾ã¨ã‚ãŸã‚‚ã®ã§ã‚る.
-オリジナルã®ASCII~\pTeX\footnote{最新版ã¯p3.1.11 (2009/08/17).
- \url{https://asciidwango.github.io/ptex/}}ã¨ã¯
+本ドキュメントã¯ï¼Œæ—¥æœ¬èªž\TeX 開発コミュニティ版ã®
+\pTeX~p\the\ptexversion.\the\ptexminorversion\ptexrevision
+(以下,「コミュニティ版\pTeX ã€ï¼‰ã«ã¤ã„ã¦ã¾ã¨ã‚ãŸã‚‚ã®ã§ã‚る.
+\pTeX ã¯ã‚‚ã¨ã‚‚ã¨ã‚¢ã‚¹ã‚­ãƒ¼æ ªå¼ä¼šç¤¾ã«ã‚ˆã£ã¦é–‹ç™ºã•ã‚ŒãŸ\footnote{最新版ã¯
+p3.1.11 (2009/08/17).\url{https://asciidwango.github.io/ptex/}}ã®ã§ï¼Œ
+ã—ã°ã—ã°ã€ŒASCII \pTeX ã€ã¨å‘¼ã°ã‚Œã‚‹ï¼Ž
+コミュニティ版\pTeX ã¯ï¼ŒASCII \pTeX ã«å¹¾ã¤ã‹ã®æ”¹è‰¯ã‚’加ãˆãŸ
+「ptexenc版\pTeX\footnote{2004å¹´ã‹ã‚‰2011å¹´ã¾ã§é–‹ç™ºã•ã‚Œã¦ã„ãŸï¼Œ
+UNIXå‘ã‘日本語\TeX ディストリビューションptetexや後継ã®ptexliveã®
+一部ã§ã‚ã£ãŸï¼ŽãªãŠï¼Œãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã¯ASCII~\pTeX ã¨åŒã˜ã¨ã•ã‚ŒãŸï¼Ž}ã€ã‚’
+基ã«ã—ã¦ã„る.ãã®ãŸã‚,オリジナルã®ASCII~\pTeX ã¨ã¯
動作ãŒç•°ãªã‚‹ç‚¹ã‚‚ã‚ã‚‹ã®ã§æ³¨æ„ã•ã‚ŒãŸã„.
+\begin{itemize}
+ \item コミュニティ版\pTeX ã®é–‹ç™ºå…ƒï¼š\\
+ \url{https://github.com/texjporg/tex-jp-build/}
+ \item 本ドキュメントã®é–‹ç™ºå…ƒï¼š\\
+ \url{https://github.com/texjporg/ptex-manual/}
+\end{itemize}
-\emph{\large 本ドキュメントã¯ã¾ã ã¾ã æœªå®Œæˆã§ã™ï¼Ž}
+ãªãŠï¼Œæœ¬ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§è¿°ã¹ã‚‹\pTeX ã®ãƒ—リミティブや拡張機能ã¯ï¼Œ
+一般ã«ã€Œ\pTeX 系列ã€ã¨å‘¼ã°ã‚Œã‚‹\epTeX, \upTeX, \eupTeX ã§ã‚‚
+ãã®ã¾ã¾åˆ©ç”¨å¯èƒ½ã§ã‚る.\upTeX, \eupTeX ã«ã¤ã„ã¦ã¯
+文字コードや和文文字トークンã®æ‰±ã„ãŒç•°ãªã‚‹ã®ã§ï¼Œç°¡å˜ã«æ³¨è¨˜ã—ã¦ã‚る.
+\newpage
\tableofcontents
\newpage
@@ -86,49 +102,70 @@
\section{\pTeX ã§åˆ©ç”¨å¯èƒ½ãªæ–‡å­—}
\label{sec:ptexchar}
-\TeX82ã§æ‰±ãˆã‚‹æ–‡å­—コードã®ç¯„囲ã¯0--255ã§ã‚ã£ãŸï¼Ž
-\pTeX ã§ã¯ã“ã‚Œã«åŠ ãˆã¦JIS X 0208ã®æ–‡å­—も利用å¯èƒ½ã§ã‚り,
-以上ã®æ–‡å­—集åˆãŒæ¬§æ–‡æ–‡å­—ã¨å’Œæ–‡æ–‡å­—ã«åŒºåˆ¥ã•ã‚Œã¦æ‰±ã‚れる.
+% ã“ã®ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‚’英語化ã™ã‚‹éš›ã¯ä»¥ä¸‹ã‚‚å‚照.
+% http://tutimura.ath.cx/ptexlive/?ptexenc%2FDetails
+% http://ajt.ktug.org/assets/2008/5/1/0201tsuchimura_kuroki.pdf
+% https://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=460
-[TODO] 欧文文字ã¨ã¯ä½•ã‹ï¼Œå’Œæ–‡æ–‡å­—ã¨ã¯ä½•ã‹
+\TeX82ã§æ‰±ãˆã‚‹æ–‡å­—コードã®ç¯„囲ã¯0--255ã§ã‚ã£ãŸï¼Ž
+\pTeX ã§ã¯ã“ã‚Œã«åŠ ãˆã¦JIS~X~0208ã®æ–‡å­—も利用å¯èƒ½ã«ãªã£ã¦ã„る.
-% https://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=460#p2422
-% ã‚ãŸã‚Šã«ã‚ˆã‚‹ã¨ï¼Œä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚‹ãŒï¼Œä»Šã‚‚æ­£ã—ã„ã®ã‹ï¼Ÿ
-%
-% \pTeX ã¸ã®å…¥åŠ›ã¯ï¼Œã€Œ7ビットASCII文字集åˆã€ã«ã€ŒISO-2022-JP (jis),EUC-JP (euc),
-% Shift-JIS (sjis)ã¾ãŸã¯UTF-8 (utf8)ã®ã„ãšã‚Œã‹ã§ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•ã‚ŒãŸ
-% JIS X 0208ã®æ–‡å­—集åˆã€ã‚’加ãˆãŸã‚‚ã®ã¨ã—ã¦è§£é‡ˆã•ã‚Œã‚‹ï¼Ž
+\pTeX ã¸ã®å…¥åŠ›ã¯\emph{「7ビットASCII文字集åˆã€ã«
+「ISO-2022-JP (jis),EUC-JP (euc),Shift-JIS (sjis)ã¾ãŸã¯
+UTF-8 (utf8)ã®ã„ãšã‚Œã‹ã§ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•ã‚ŒãŸJIS~X~0208ã®æ–‡å­—集åˆã€ã‚’
+加ãˆãŸã‚‚ã®}ã¨ã—ã¦è§£é‡ˆã•ã‚Œã‚‹ï¼Ž
+ãªãŠï¼Œå…¥å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã®æ–‡å­—コードã¯ï¼Œèµ·å‹•æ™‚ã®ã‚ªãƒ—ション|-kanji=|<encoding>ã«
+よã£ã¦æŒ‡å®šã§ãる(å¯èƒ½ãª<encoding>ã®å€¤ã¯|utf8|,|euc|,|sjis|,|jis|).
-\pTeX ã¯ï¼Œå…¥åŠ›ã‚’EUC-JPã¾ãŸã¯Shift-JISã®ã„ãšã‚Œã‹ï¼ˆå¾Œè¿°ï¼‰ã®
-内部コードã«å¤‰æ›ã—ã¦å–り扱ã†ï¼Žå’Œæ–‡æ–‡å­—ã®å†…部コードã¨ã—ã¦
-許ã•ã‚Œã‚‹æ•´æ•°ã¯$256c_1+c_2$,但ã—$c_i\in C_i$ã§ã‚り,ã“ã“ã§
-\begin{description}
- \item[内部コードãŒEUC-JPã®ã¨ã]
+ãã—ã¦ï¼Œä»¥ä¸‹ã®è¦å‰‡ã«ã‚ˆã‚Šæ¬§æ–‡æ–‡å­—ã¨å’Œæ–‡æ–‡å­—ã«åŒºåˆ¥ã—ã¦å–り扱ã‚れる.
+ãªãŠï¼Œå†…部コードã¯|-kanji-internal=|<encoding>ã«ã‚ˆã£ã¦å¤‰æ›´ã§ãã‚‹
+(å¯èƒ½ãªå€¤ã¯|euc|,|sjis|)ãŒï¼Œã“ã¡ã‚‰ã¯ini modeã§ã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆä½œæˆæ™‚
+ã«é™ã‚‰ã‚Œï¼Œvirtual modeã§ã¯ä¸å¯ã§ã‚る(フォーマットã®å†…部コードã¨å®Ÿéš›ã®
+処ç†ã®æ•´åˆæ€§ã‚’ã¨ã‚‹ãŸã‚,\pTeX\ p3.8.2以é™ã®ä»•æ§˜ï¼‰ï¼Ž
+\begin{itemize}
+ \item 7ビットASCII文字集åˆã¯æ¬§æ–‡æ–‡å­—ã¨ã—ã¦æ‰±ã‚れる.
+ \item 最上ä½ãƒ“ットãŒ1ã®å ´åˆï¼Œ\pTeX ã¯ãã®ãƒã‚¤ãƒˆã§å§‹ã¾ã‚‹åˆ—ã«ã¤ã„ã¦
+ EUC-JPã¾ãŸã¯Shift-JISã®ã„ãšã‚Œã‹ã®å†…部コードã¸ã®å¤‰æ›ã‚’試ã¿ã‚‹ï¼Ž
+ 和文文字ã®å†…部コードã¨ã—ã¦è¨±ã•ã‚Œã‚‹æ•´æ•°ã¯
+ $256c_1+c_2$,但ã—$c_i\in C_i$ã§ã‚り,ã“ã“ã§
+ \begin{description}
+ \item[内部コードãŒEUC-JPã®ã¨ã]
$C_1=C_2=\{\hex{a1},\dots,\hex{fe}\}$.
- \item[内部コードãŒShift-JISã®ã¨ã]
+ \item[内部コードãŒShift-JISã®ã¨ã]
$C_1=\{\hex{81},\dots,\hex{9f}\}\cup\{\hex{e0},\dots,\hex{fc}\}$,\\
$C_2=\{\hex{40},\dots,\hex{7e}\}\cup\{\hex{80},\dots,\hex{fc}\}$.
-\end{description}
-ã§ã‚る.ã“ã®å†…部コードã®ãƒ‘ターンã«åˆãˆã°å’Œæ–‡æ–‡å­—ã¨ã—ã¦æ‰±ã‚れ,
-åˆã‚ãªã‘ã‚Œã°æ¬§æ–‡æ–‡å­—ã¨ã—ã¦æ‰±ã‚れる.
+ \end{description}
+ ã§ã‚る.ã“ã®å†…部コードã®ãƒ‘ターンã«åˆãˆã°å’Œæ–‡æ–‡å­—ã¨ã—ã¦æ‰±ã‚れ,
+ åˆã‚ãªã‘ã‚Œã°8ビット欧文文字ã®ãƒã‚¤ãƒˆåˆ—ã¨ã—ã¦æ‰±ã‚れる.\footnote{例ãˆã°ï¼Œ
+ 入力ファイルã®æ–‡å­—コードãŒUTF-8ã®å ´åˆï¼ŒJIS~X~0208ã«ãªã„文字ã¯
+ UTF-8ã®ãƒã‚¤ãƒˆåˆ—ã¨ã—ã¦èª­ã¿è¾¼ã¾ã‚Œã‚‹ï¼Ž}
+\end{itemize}
% å‚考:kanji.c ã® |is_char_kanji| ã®å®Ÿè£…
-入力ファイルã®æ–‡å­—コードãŒUTF-8ã®å ´åˆï¼ŒJIS X 0208ã«ãªã„文字ã¯
-UTF-8ã®ãƒã‚¤ãƒˆåˆ—ã¨ã—ã¦èª­ã¿è¾¼ã¾ã‚Œã‚‹ï¼Ž
+% [TODO] 8ビット欧文文字㮠^^ab å½¢å¼ã¸ã®å¤‰æ›ã«ã¤ã„ã¦
-% ã“ã®ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‚’英語化ã™ã‚‹éš›ã¯ä»¥ä¸‹ã‚‚å‚照.
-% http://tutimura.ath.cx/ptexlive/?ptexenc%2FDetails
-% http://ajt.ktug.org/assets/2008/5/1/0201tsuchimura_kuroki.pdf
-% https://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=460
+\begin{dangerous}
+ 以上ã§è¿°ã¹ãŸã€Œå†…部コードã®ç¯„囲ã€ã¯JIS~X~0213ã®æ¼¢å­—集åˆ1é¢ï¼ˆShift-JISã®å ´åˆã¯2é¢ã‚‚)を
+ ã¾ã‚‹ã¾ã‚‹å«ã‚“ã§ã„ã‚‹ãŒï¼Œ\emph{\pTeX ã¯JIS~X~0213ã«ã¯å¯¾å¿œã—ã¦ã„ãªã„.}
-\pTeX ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã®æ–‡å­—コードã¯ï¼Œèµ·å‹•æ™‚ã®ã‚ªãƒ—ション|-kanji|ã«ã‚ˆã£ã¦
-変更ã§ãる(å¯èƒ½ãªå€¤ã¯|utf8|,|euc|,|sjis|,|jis|).
-åŒæ§˜ã«ï¼Œå†…部コードã¯|-kanji-internal|オプションã«ã‚ˆã£ã¦å¤‰æ›´ã§ãã‚‹
-(å¯èƒ½ãªå€¤ã¯|euc|,|sjis|)ãŒï¼Œã“ã¡ã‚‰ã¯ini modeã§ã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆä½œæˆæ™‚
-ã«é™ã‚‰ã‚Œï¼Œvirtual modeã§ã¯ä¸å¯ã§ã‚る(フォーマットã®å†…部コードã¨å®Ÿéš›ã®
-処ç†ã®æ•´åˆæ€§ã‚’ã¨ã‚‹ãŸã‚,\pTeX\ p3.8.2以é™ã®ä»•æ§˜ï¼‰ï¼Ž
+ JIS~X~0213ã§è¦å®šã•ã‚ŒãŸã€Œ85区1点ã€ã®ä½ç½®ã®æ–‡å­—を入力ファイル中ã«æ›¸ã„ãŸå ´åˆï¼Œ
+ \begin{description}
+ \item[文字コードãŒEUC,~Shift-JISã®å ´åˆ] DVIã«ã¯29985~(\texttt{"7521})%"
+ 番ã®æ–‡å­—ã¨ã—ã¦å‡ºåŠ›ã•ã‚Œã‚‹ï¼Ž
+ \item[文字コードãŒJISã®å ´åˆ] 「\verb+! Missing $ inserted.+ã€ã¨ã„ã†ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹ï¼Ž
+ ã“ã‚Œã¯ï¼Œ\pTeX ãŒJIS~X~0213ã®1é¢ã‚’指示ã™ã‚‹ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—シーケンス
+ \texttt{1B 24 28 4F} (JIS2000), \texttt{1B 24 28 51} (JIS2004)ã‚’èªè­˜ã›ãšï¼Œ
+ \texttt{24}~(\texttt{\$})ã‚’æ•°å¼ãƒ¢ãƒ¼ãƒ‰åŒºåˆ‡ã‚Šã¨è§£é‡ˆã—ã¦ã—ã¾ã†ãŸã‚ã§ã‚る.
+ \item[文字コードãŒUTF-8ã®å ´åˆ] UTF-8ã®ãƒã‚¤ãƒˆåˆ—\texttt{E6 93 84}ã¨ã—ã¦èª­ã¿è¾¼ã¾ã‚Œã‚‹ï¼Ž
+ \end{description}
+ ãªãŠï¼Œ\.{char}ã«ã‚ˆã‚Šã€Œ\verb+\char\kuten"5521+ã€%"
+ ã®ã‚ˆã†ã«ã—ã¦åŒºç‚¹ã‚³ãƒ¼ãƒ‰ã‚’指定ã—ãŸå ´åˆã¯ï¼ŒDVIã«ã¯29985~(\texttt{"7521})%"
+ 番ã®æ–‡å­—ã¨ã—ã¦å‡ºåŠ›ã•ã‚Œã‚‹ï¼Ž
+ ã¾ãŸï¼ŒDVIã«æ–‡å­—ã¨ã—ã¦å‡ºåŠ›ã•ã‚ŒãŸã‹ã‚‰ã¨ã„ã£ã¦ï¼ŒãれをPostScriptã‚„PDFã«å¤‰æ›ã—ãŸã¨ãã«
+ æ„図通りã«å‡ºåŠ›ã•ã‚Œã‚‹ã‹ã¯å…¨ãã®åˆ¥å•é¡Œã§ã‚る.
+\end{dangerous}
-\pTeX ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã®æ–‡å­—コードã¨å†…部コードã¯èµ·å‹•æ™‚ã®ãƒãƒŠãƒ¼ã‹ã‚‰åˆ†ã‹ã‚‹ï¼Ž
+\pTeX ã®å…¥å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã®æ–‡å­—コードã¨å†…部コードã¯èµ·å‹•æ™‚ã®ãƒãƒŠãƒ¼ã‹ã‚‰åˆ†ã‹ã‚‹ï¼Ž
例ãˆã°
\begin{verbatim}
This is pTeX, Version 3.14159265-p3.8.0 (utf8.euc) (TeX Live 2018)
@@ -136,15 +173,15 @@ This is pTeX, Version 3.14159265-p3.8.0 (utf8.euc) (TeX Live 2018)
\end{verbatim}
ã¨ã„ã†ãƒãƒŠãƒ¼ã®å ´åˆã¯ï¼Œ|(utf8.euc)| ã‹ã‚‰
\begin{itemize}
- \item 入力ファイルã®ï¼ˆæ—¢å®šï¼‰æ–‡å­—コードã¯UTF-8(但ã—,JIS X 0208ã®ç¯„囲内)
+ \item 入出力ファイルã®ï¼ˆæ—¢å®šï¼‰æ–‡å­—コードã¯UTF-8(但ã—,JIS~X~0208ã®ç¯„囲内)
\item \pTeX ã®å†…部コードã¯EUC-JP
\end{itemize}
-ã¨ã„ã†æƒ…å ±ãŒè¦‹ã¦å–れる.入力ファイルã®æ–‡å­—コードã¨å†…部コードãŒåŒã˜å ´åˆã¯ï¼Œ
+ã¨ã„ã†æƒ…å ±ãŒè¦‹ã¦å–れる.入出力ファイルã®æ–‡å­—コードã¨å†…部コードãŒåŒã˜å ´åˆã¯ï¼Œ
\begin{verbatim}
This is pTeX, Version 3.14159265-p3.8.0 (sjis) (TeX Live 2018)
(preloaded format=ptex)
\end{verbatim}
-ã®ã‚ˆã†ã«è¡¨ç¤ºã•ã‚Œã‚‹ï¼ˆã“ã®ä¾‹ã¯ï¼Œå…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã®æ–‡å­—コードã¨å†…部コードãŒ
+ã®ã‚ˆã†ã«è¡¨ç¤ºã•ã‚Œã‚‹ï¼ˆã“ã®ä¾‹ã¯ï¼Œå…¥å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã®æ–‡å­—コードã¨å†…部コードãŒ
ã¨ã‚‚ã«Shift-JISã®å ´åˆï¼‰ï¼Ž
\begin{dangerous}
@@ -162,31 +199,9 @@ virtual modeã§ã¯ï¼Œèµ·å‹•ç›´å¾Œã«ãƒãƒŠãƒ¼ã‚’表示ã—ã¦ã‹ã‚‰ï¼Œãƒ•ã‚©ãƒ¼ãƒ
ã“ã®ã‚ˆã†ãªã‚¦ã‚½ã¯ï¼Œ\pTeX ã«é™ã‚‰ãš|(preloaded format=***)|ã§ã‚‚見られる.
\end{dangerous}
-[TODO] \pTeX ã®å†…部コードã¯EUC-JPã‹Shift-JISã®ã„ãšã‚Œã‹ã§ã‚ã‚‹ãŒï¼Œ
-DVIファイル内ã®å’Œæ–‡æ–‡å­—コードã¨ã—ã¦ã¯JISコードを出力ã™ã‚‹ï¼Ž
+ãªãŠï¼Œ\pTeX ã¯DVIファイル内ã®å’Œæ–‡æ–‡å­—コードã¨ã—ã¦ã¯JISコードを出力ã™ã‚‹ï¼Ž
ãŸã ã—,|\special|命令ã®æ–‡å­—列ã¯å†…部コードã§ç¬¦å·åŒ–ã•ã‚ŒãŸãƒã‚¤ãƒˆåˆ—ã¨ã—ã¦æ›¸ã出ã•ã‚Œã‚‹ï¼Ž
-\begin{dangerous}
- 以上ã§è¿°ã¹ãŸã€Œå†…部コードã®ç¯„囲ã€ã¯JIS~X~0213ã®æ¼¢å­—集åˆ1é¢ï¼ˆShift-JISã®å ´åˆã¯2é¢ã‚‚)を
- ã¾ã‚‹ã¾ã‚‹å«ã‚“ã§ã„ã‚‹ãŒï¼Œ\emph{\pTeX ã¯JIS~X~0213ã«ã¯å¯¾å¿œã—ã¦ã„ãªã„.}
-
- JIS~X~0213ã§è¦å®šã•ã‚ŒãŸã€Œ85区1点ã€ã®ä½ç½®ã®æ–‡å­—を入力ファイル中ã«æ›¸ã„ãŸå ´åˆï¼Œ
- \begin{description}
- \item[文字コードãŒEUC,~Shift-JISã®å ´åˆ] DVIã«ã¯29985~(\texttt{"7521})%"
- 番ã®æ–‡å­—ã¨ã—ã¦å‡ºåŠ›ã•ã‚Œã‚‹ï¼Ž
- \item[文字コードãŒJISã®å ´åˆ] 「\verb+! Missing $ inserted.+ã€ã¨ã„ã†ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹ï¼Ž
- ã“ã‚Œã¯ï¼Œ\pTeX ãŒJIS~X~0213ã®1é¢ã‚’指示ã™ã‚‹ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—シーケンス
- \texttt{1B 24 28 4F} (JIS2000), \texttt{1B 24 28 51} (JIS2004)ã‚’èªè­˜ã›ãšï¼Œ
- \texttt{24}~(\texttt{\$})ã‚’æ•°å¼ãƒ¢ãƒ¼ãƒ‰åŒºåˆ‡ã‚Šã¨è§£é‡ˆã—ã¦ã—ã¾ã†ãŸã‚ã§ã‚る.
- \item[文字コードãŒUTF-8ã®å ´åˆ] UTF-8ã®ãƒã‚¤ãƒˆåˆ—\texttt{E6 93 84}ã¨ã—ã¦èª­ã¿è¾¼ã¾ã‚Œã‚‹ï¼Ž
- \end{description}
- ãªãŠï¼Œ\.{char}ã«ã‚ˆã‚Šã€Œ\verb+\char\kuten"5521+ã€%"
- ã®ã‚ˆã†ã«ã—ã¦åŒºç‚¹ã‚³ãƒ¼ãƒ‰ã‚’指定ã—ãŸå ´åˆã¯ï¼ŒDVIã«ã¯29985~(\texttt{"7521})%"
- 番ã®æ–‡å­—ã¨ã—ã¦å‡ºåŠ›ã•ã‚Œã‚‹ï¼Ž
- ã¾ãŸï¼ŒDVIã«æ–‡å­—ã¨ã—ã¦å‡ºåŠ›ã•ã‚ŒãŸã‹ã‚‰ã¨ã„ã£ã¦ï¼ŒãれをPostScriptã‚„PDFã«å¤‰æ›ã—ãŸã¨ãã«
- æ„図通りã«å‡ºåŠ›ã•ã‚Œã‚‹ã‹ã¯å…¨ãã®åˆ¥å•é¡Œã§ã‚る.
-\end{dangerous}
-
\section{文字コードã®å–å¾—ã¨æŒ‡å®š}
\pTeX ã§ã‚‚\TeX82ã¨åŒæ§˜ã«ï¼Œ
@@ -1016,8 +1031,9 @@ JFMファイルもTFMファイルã¨åŒæ§˜ã®æƒ…報をæŒã¤ãŒï¼Œ
用ã„る命令ã§ã‚る.
\begin{itemize}
\item フォントを定義ã™ã‚‹éš›ã¯ï¼Œæ¬§æ–‡ãƒ•ã‚©ãƒ³ãƒˆãƒ»å’Œæ–‡ã®æ¨ªçµ„用フォント・
- 和文ã®ç¸¦çµ„用ã®ãƒ•ã‚©ãƒ³ãƒˆã®ã„ãšã‚Œã‚‚
- |\font|, |\jfont|, |\tfont|ã®ã©ã‚Œã‚’用ã„ã¦ã‚‚定義ã§ãる.
+ 和文ã®ç¸¦çµ„用フォントã®ã„ãšã‚Œã‚‚
+ |\font|, |\jfont|, |\tfont|ã®ã©ã‚Œã‚’用ã„ã¦ã‚‚定義ã§ãã‚‹
+ (è¦æ±‚ã•ã‚ŒãŸå®Ÿéš›ã®TFM/JFMã«å¿œã˜ã¦ï¼Œè‡ªå‹•çš„ã«ã‚¢ã‚µã‚¤ãƒ³ã•ã‚Œã‚‹ï¼‰ï¼Ž
\item |\the|ç­‰ã§ã€Œç¾åœ¨ã®ãƒ•ã‚©ãƒ³ãƒˆã€ã‚’å–å¾—ã™ã‚‹éš›ã«ã¯ï¼Œ
|\jfont|ã§ã€Œå’Œæ–‡ã®æ¨ªçµ„用フォントã€ã‚’,
|\tfont|ã§ã€Œå’Œæ–‡ã®ç¸¦çµ„用フォントã€ã‚’è¿”ã™ï¼Ž
@@ -1043,6 +1059,43 @@ JFMファイルもTFMファイルã¨åŒæ§˜ã®æƒ…報をæŒã¤ãŒï¼Œ
\end{dangerous}
\begin{cslist}
+\csitem[\.{ifjfont} <\,font>, \.{iftfont} <\,font>]
+ |\ifjfont|ã¯<font>ãŒå’Œæ–‡ã®æ¨ªçµ„用フォントã‹ã©ã†ã‹ï¼Œ
+ |\iftfont|ã¯å’Œæ–‡ã®ç¸¦çµ„用フォントã‹ã©ã†ã‹ã‚’判定ã™ã‚‹ï¼Ž
+ 2020-02-05ã®ã‚³ãƒŸãƒƒãƒˆ(r53681)ã§è¿½åŠ ã•ã‚Œï¼Œ
+ \TeX~Live 2020ã®\pTeX~(p3.8.3)ã§åˆ©ç”¨å¯èƒ½ã§ã‚る.
+
+ ã“ã‚Œã«ã‚ˆã‚Šï¼Œä¾‹ãˆã°\.{HOGE}ãŒå’Œæ–‡ãƒ•ã‚©ãƒ³ãƒˆã‹å¦ã‹ã¯
+\begin{verbatim}
+\ifjfont\HOGE
+ (和文ã®æ¨ªçµ„用フォント)
+\else\iftfont\HOGE
+ (和文ã®ç¸¦çµ„用フォント)
+\else
+ (欧文フォント)
+\fi
+\end{verbatim}
+ ã¨ã—ã¦åˆ¤å®šã§ãる.
+\end{cslist}
+
+\begin{dangerous}
+ 上述ã®ã¨ãŠã‚Šï¼Œæ¬§æ–‡ãƒ•ã‚©ãƒ³ãƒˆãƒ»å’Œæ–‡ã®æ¨ªçµ„用フォント・
+ 和文ã®ç¸¦çµ„用フォントã®ã„ãšã‚Œã‚‚|\font|一ã¤ã§å®šç¾©å¯èƒ½ã ãŒï¼Œ
+ 定義ã—ãŸãƒ•ã‚©ãƒ³ãƒˆãŒå®Ÿéš›ã«ã©ã®ç¨®é¡žã ã£ãŸã‹ã‚’知る手段ã¯
+ ãƒãƒ¼ã‚¸ãƒ§ãƒ³p3.8.2ã¾ã§ã®\pTeX ã«ã¯å­˜åœ¨ã—ãªã‹ã£ãŸï¼Ž
+ % https://github.com/texjporg/tex-jp-build/pull/97
+\end{dangerous}
+
+\begin{dangerous}
+ ã¡ãªã¿ã«ï¼Œ\epTeX, \eupTeX ã«ã¯\.{iffontchar}プリミティブãŒå­˜åœ¨ã™ã‚‹ï¼Ž
+ ã—ã‹ã—,<\,font>ãŒå’Œæ–‡ãƒ•ã‚©ãƒ³ãƒˆã‹å¦ã‹ã‚’判定ã™ã‚‹ãŸã‚ã«
+ \texttt{\.{iffontchar}~<\,font>~256}ãªã©ã¨ç¬¬äºŒå¼•æ•°ã«256以上ã®å€¤ã‚’指定ã™ã‚‹ã“ã¨ã¯ã§ããªã„.
+ ãªãœãªã‚‰ï¼Œæ¬§æ–‡ãƒ•ã‚©ãƒ³ãƒˆã«å¯¾ã—第二引数ã«0--255以外ã®å€¤ã‚’指定ã™ã‚‹ã¨
+ 「\verb+! Bad character code (...).+ã€ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹ã‹ã‚‰ã§ã‚る.
+\end{dangerous}
+
+
+\begin{cslist}
\csitem[\.{jfam}=<number>]
ç¾åœ¨ã®å’Œæ–‡æ•°å¼ãƒ•ã‚©ãƒ³ãƒˆãƒ•ã‚¡ãƒŸãƒªã®ç•ªå·ã‚’æ ¼ç´ã™ã‚‹
\footnote{\pTeX,~\upTeX ã§ã¯0--15ã®ç¯„囲ãŒè¨±ã•ã‚Œã‚‹ï¼Ž
@@ -1087,7 +1140,7 @@ p3.1.2ã§å¾©æ´»ã—ãŸã¨ã„ã†çµŒç·¯ãŒã‚る.}.
\begin{dangerous}
\ref{sec:ptexchar}節ã§ã‚‚è¿°ã¹ãŸã‚ˆã†ã«ï¼Œ
- \emph{\pTeX ã¯JIS X 0213ã«ã¯å¯¾å¿œã›ãšï¼ŒJIS X 0208ã®ç¯„囲ã®ã¿æ‰±ãˆã‚‹}.
+ \emph{\pTeX ã¯JIS~X~0213ã«ã¯å¯¾å¿œã›ãšï¼ŒJIS~X~0208ã®ç¯„囲ã®ã¿æ‰±ãˆã‚‹}.
[TODO] \.{kuten}, \.{jis}, \.{sjis}, \.{euc}ãŒ$-1$ã¨ãªã‚‰ãªã„範囲ã¯ã©ã“?
\end{dangerous}
@@ -1113,26 +1166,39 @@ p3.1.2ã§å¾©æ´»ã—ãŸã¨ã„ã†çµŒç·¯ãŒã‚る.}.
(ã¡ã‚‡ã†ã©|\romannumeral|ã«ã‚¼ãƒ­ã¾ãŸã¯è² ã®å€¤ã‚’与ãˆãŸå ´åˆã¨åŒæ§˜ï¼‰ï¼Ž
|\kansujichar|ã§æŒ‡å®šã§ãã‚‹ã®ã¯ã€Œå’Œæ–‡æ–‡å­—ã®å†…部コードã¨ã—ã¦æœ‰åŠ¹ãªå€¤ã€ã§ã‚り,
- 無効ãªå€¤ï¼ˆä¾‹ãˆã°\pTeX ã§ã¯ï¼Œ|`A|ã¯æ¬§æ–‡æ–‡å­—コードã§ã‚り,和文文字コードã§ã¯ãªã„)
- を指定ã™ã‚‹ã¨
+ 例ãˆã°\pTeX ã§|\kansujichar1=`A|ã®ã‚ˆã†ã«ç„¡åŠ¹ãªå€¤ï¼ˆ\pTeX ã«ãŠã„ã¦|`A|ã¯
+ 欧文文字コードã§ã‚り,和文文字コードã§ã¯ãªã„)を指定ã™ã‚‹ã¨
\begin{verbatim}
-! Invalid KANSUJI char ("41)
+! Invalid KANSUJI char ("41).
\end{verbatim}
ã¨ã„ã†ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹\footnote{\upTeX ã§ã¯0--127ã‚‚å«ã‚,
Unicodeã®æ–‡å­—コードã™ã¹ã¦ãŒå’Œæ–‡æ–‡å­—コードã¨ã—ã¦æœ‰åŠ¹ã§ã‚ã‚Š
(|\kchar|ã§ä»»æ„ã®æ–‡å­—コードを和文文字ノードã«å¤‰æ›ã—ã¦å‡ºåŠ›ã§ãる),
基本的ã«ã“ã®ã‚¨ãƒ©ãƒ¼ã¯ç™ºç”Ÿã—ãªã„.}.
+ ã¾ãŸï¼Œ|\kansujichar|ã®å¼•æ•°ã«è¨±ã•ã‚Œã‚‹å€¤ã¯0--9ã«é™ã‚‰ã‚Œï¼Œ
+ 例ãˆã°|\kansujichar10=`拾|ã¨ã™ã‚‹ã¨
+\begin{verbatim}
+! Invalid KANSUJI number (10).
+\end{verbatim}
+ ã¨ã„ã†ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹ï¼Ž
+ % エラーã‹ã‚‰ã®ãƒªã‚«ãƒãƒªã§ï¼Œä»–ã® TeX82 プリミティブãŒ
+ % I changed this one to zero.
+ % ã¨ã™ã‚‹ã®ã«å¯¾ã—,\kansujichar ã§ã¯
+ % I'm skipping this control sequences.
+ % ã¨ã‚¹ã‚­ãƒƒãƒ—ã•ã‚Œï¼Œå€¤ã®ä»£å…¥ã¯è¡Œã‚ã‚Œãªã„.
\end{cslist}
\begin{dangerous}
|\kansujichar|ã¯æ•´æ•°å€¤ãƒ‘ラメータã§ã‚ã‚‹ãŒï¼Œp3.8.2ã¾ã§ã¯
「代入ã§ãã‚‹ãŒå–å¾—ã¯ã§ããªã„ã€ã¨ã„ã†æŒ™å‹•ã§ã‚ã£ãŸ
(例ãˆã°|\count255=\kansujichar1|ã¯ã‚¨ãƒ©ãƒ¼ï¼‰ï¼Ž
-\iffalse %%%%% TL2019-hack
\pTeX~p3.8.3ã§å–å¾—ã‚‚ã§ãるよã†ã«ä¿®æ­£ã•ã‚ŒãŸ(\cite{build93})ãŒï¼Œ
以å‰ã®\pTeX も考慮ã™ã‚‹ã¨ï¼Œå€¤ã®å–å¾—ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ã™ã‚‹ã®ãŒå®‰å…¨ã§ã‚る:
|\count255=\expandafter`\kansuji1|
-\fi %%%%% TL2019-hack
+ % \count123=\kansujichar45 ã®ã‚ˆã†ã« \kansujichar ã®å¼•æ•°ãŒä¸æ­£ãªå ´åˆã¯ï¼Œ
+ % ! Invalid KANSUJI number (45).
+ % ã®ã‚¨ãƒ©ãƒ¼ã‚’出ã—,リカãƒãƒªã¯ \kansujichar を無視ã—㟠\count123=45 ã¨åŒç¾©ã«ãªã‚‹ï¼Ž
+ % ã“れ㯠\kansujichar ã®ä»£å…¥æ™‚ã®æŒ™å‹•ã«åˆã‚ã›ãŸã‚‚ã®ã§ã‚る.
\end{dangerous}
% luatexja.dtx より pTeX 用ã«ç§»æ¤
@@ -1377,11 +1443,9 @@ has been |\let| equal to a non-active character token.
\bibitem{build36} aminophen, 「欧文文字ã®|\kansujichar|,|\inhibitxspcode|ã€ï¼Œ
2017/11/26,\\
\url{https://github.com/texjporg/tex-jp-build/issues/36}
-\iffalse %%%%% TL2019-hack
\bibitem{build93} aminophen, 「[ptex] reading |\kansujichar|ã€ï¼Œ
2019/10/14,\\
\url{https://github.com/texjporg/tex-jp-build/issues/93}
-\fi %%%%% TL2019-hack
\bibitem{build37} aminophen, 「和文ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã‚·ãƒ³ãƒœãƒ«ã€ï¼Œ
2017/11/29,\\
\url{https://github.com/texjporg/tex-jp-build/issues/37}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/Changes b/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/Changes
new file mode 100644
index 0000000000..8385d17ac3
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/Changes
@@ -0,0 +1,32 @@
+
+0.2 2020-03-17 - updated all macros for using with biblatex 3.7 (hv)
+0.1g 2013-02-28 - Aktualisierung der readme wg. Einstellung der weiteren Entwicklung
+
+0.1f 2011-09-30 - singletitle-Funktion kommt nur zum Einsatz, wenn notwendig, also bei book und online
+ - shortitle wird bei online stets angezeigt, falls vorhanden
+ - Darstellung von jurisdiction bei juris als Fundstelle korrigiert
+
+0.1e 2011-09-21 - Dokumentation beigefuegt
+
+0.1d 2011-09-11 - Weitere Regressions von 0.1b fixed
+ - Fehler in README korrigiert
+ - Neuer Zitierstil für Zeitungsartikel (entrysubtype=newspaper)
+
+0.1c 2011-09-10 - Regression von 0.1b fixed
+0.1b 2011-09-09 - Umstellung des Eintragstyps von Kommentaren von customa auf commentary
+ - Umstellung des Eintragstyps von Urteilen von customb auf jurisdiction
+ - Einfuehrung des Zitationsstils fuer offizielle Dokumente,
+ wie Bundestagsdrucksachen: legal
+ - statt "besucht am" steht nun vor dem urldate "abgerufen am"
+ - Querverweis-Befehl wurde ueberarbeitet (\qverweis)
+ - Code bereinigt
+ - custom-fields fuer jurisdiction mit biber implementiert
+ - Begr. oder aehnliches ist nun auch beim Feld author moeglich,
+ nicht nur bei editor
+ - Statt "besucht am" steht nun vor dem Datum des letzten Abrufs
+ bei Onlinedokumenten im LitVerz "abgerufen am"
+ - Eigener Stil fuer inbook wieder entfernt, neben incollection unnoetig
+0.1a 2011-07-27 - Ueberarbeitung der README
+ - Kleinere Bugfixes
+ - Hinzufuegen des Stils inbook
+0.1 2011/07/23 - Erstveroeffentlichung
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/README b/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/README
index aec32d33f1..c7ae626e1b 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/README
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/README
@@ -1,6 +1,6 @@
-biblatex-juradiss 2012/07/17 v0.1f
-Copyright (c) 2012 Dr. Tobias Schwan <tobias.schwan(aat)gmx.de>
-
+biblatex-juradiss 2020/03/17 v0.2
+Copyright (c) 2012 Tobias Schwan <tobias.schwan(aat)gmx.de>
+ 2020 Hebrert Voß hvoss@tug.org
****************************************************************
This is biblatex-juradiss,
@@ -27,8 +27,6 @@ See
http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
for the details of that license.
-This work has the LPPL maintenance status 'unmaintained'.
-
The former Maintainer of this work was Tobias Schwan.
-----------------------------------------------------------------
@@ -43,117 +41,3 @@ Es benoetigt zum Funktionieren die LaTeX-Pakete biblatex und
biblatex-dw. Empfehlenswert ist ausserdem die Verwendung von
jurabook als Dokumentenklasse, sowie biber zum Verarbeiten der
Literaturdatenbank.
-
-Eine Dokumentation ist ebenfalls vorhanden (biblatex-juradiss.pdf
-bzw. als Quellcode biblatex-juradiss.tex).
-
-Hier die wichtigsten Infos zur Verwendung des Stils:
-
-1. Installation
-Die Dateien biblatex-juradiss.cbx und biblatex-juradiss.bbx in
-<TEXMFLOCAL>/tex/latex/biblatex-juradiss kopieren, wobei
-<TEXMFLOCAL> der Wurzelpfad der TeX-Installation ist. Danach den
-Datei-hash aktualisieren.
-Die biber.conf-Datei einfach in den gleichen Ordner, wie die
-tex-Datei legen.
-
-2. Einbindung im Dokument
-biblatex-juradiss setzt auf biblatex auf. Das Paket wird von LaTeX
-durch die Paketoption style=biblatex-juradiss des Pakets biblatex
-zu Beginn des Dokuments eingebunden, z.B.:
-\usepackage[%
-uniquename=true,% <----Beispiel
-sorting=nyvt,% <----Beispiel
-style=biblatex-juradiss,% <--- notwendig
-backend=biber,% <--- empfohlen
-]{biblatex}
-
-3. Enthaltene Zitierstile
-Der Stil beinhaltet derzeit die angepassten Stile
-- article fuer juristische Zeitschriftenaufsaetze (zB aus der NJW)
-- article:newspaper fuer Zeitungsartikel (zB FAZ oder SZ)
-- book fuer Monografien (zB Lehrbuecher, Dissertationen usw.)
-- commentary fuer Gesetzeskommentare (zB Palandt)
-- jurisdiction fuer Gerichtsentscheidungen (zB Urteile des BGH)
-- legal fuer staatliche Dokumente (zB BT-Drs, BMF-Schreiben)
-- incollection fuer Festschriften
-- online fuer Online-Dokumente
-- periodical fuer Archivzeitschriften, zB die AcP
-
-
-4. Bei Problemen:
-Dieser Stil baut auf biblatex, biblatex-dw und biber auf, es
-empfiehlt sich daher die Dokus dieser Pakete zu lesen, um deren
-Funktionsweise zu verstehen, so ist auch dieses Paket entstanden.
-Ansonsten freue ich mich stets ueber Rueckmeldungen.
-
-5. (Alte) Plaene fuer die Entwicklung:
-Alle wesentlichen Funktionen, die das Paket fuer meine Beduernisse
-haben soll, sind nun integriert. Allein die idem-Unterstuetzung
-fuer juristische Kommentare ist noch nicht perfekt, in der
-Umsetzung aber auch sehr schwierig. Fuer die naehere Zukunft ist
-auf jeden Fall noch die Erstellung einer ausfuehrlichen Doku
-geplant, sowie das Finden und Beseitigen von Bugs.
-
-Falls sich Mitstreiter finden koennte auch eine Erweiterung fuer
-andere Dokumentenarten (zB. Hausarbeiten, Zeitschriftenartikel,
-Urteile, usw.) ins Auge gefasst werden.
-
-6. Ich habe nun meine Doktorarbeit fertig gestellt und derzeit
-leider keine Zeit mehr, mich dem Projekt weiter zu widmen,
-insbesondere bugfixes einzupflegen oder aehnliches. Soweit jemand
-an der Fortsetzung dieses Projekts Interesse hat wuerde ich mich
-sehr freuen.
-
-Viel Spass
-Tobias
-
-Version: 0.1f
-Stand: 2013-02-28
-
-Versionsgeschichte:
-2013-02-28
-- Aktualisierung der readme wg. Einstellung der weiteren Entwicklung
-
-Ver. 0.1f (2011-09-30)
-- singletitle-Funktion kommt nur zum Einsatz, wenn notwendig, also bei book und online
-- shortitle wird bei online stets angezeigt, falls vorhanden
-- Darstellung von jurisdiction bei juris als Fundstelle korrigiert
-
-Ver. 0.1e (2011-09-21)
-- Dokumentation beigefuegt
-
-Ver. 0.1d (2011-09-11)
-- Weitere Regressions von 0.1b fixed
-- Fehler in README korrigiert
-- Neuer Zitierstil für Zeitungsartikel (entrysubtype=newspaper)
-
-Ver. 0.1c (2011-09-10)
-- Regression von 0.1b fixed
-
-Ver. 0.1b (2011-09-09)
-- Umstellung des Eintragstyps von Kommentaren von customa auf
-commentary
-- Umstellung des Eintragstyps von Urteilen von customb auf
-jurisdiction
-- Einfuehrung des Zitationsstils fuer offizielle Dokumente,
-wie Bundestagsdrucksachen: legal
-- statt "besucht am" steht nun vor dem urldate "abgerufen am"
-- Querverweis-Befehl wurde ueberarbeitet (\qverweis)
-- Code bereinigt
-- custom-fields fuer jurisdiction mit biber implementiert
-- Begr. oder aehnliches ist nun auch beim Feld author moeglich,
-nicht nur bei editor
-- Statt "besucht am" steht nun vor dem Datum des letzten Abrufs
-bei Onlinedokumenten im LitVerz "abgerufen am"
-- Eigener Stil fuer inbook wieder entfernt, neben incollection
-unnoetig
-
-Ver. 0.1a (2011-07-27)
-- Ueberarbeitung der README
-- Kleinere Bugfixes
-- Hinzufuegen des Stils inbook
-
-
-Ver. 0.1 (2011/07/23)
-Erstveroeffentlichung
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biblatex-juradiss.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biblatex-juradiss.pdf
deleted file mode 100644
index 1ec013deb1..0000000000
--- a/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biblatex-juradiss.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biblatex-juradiss.tex b/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biblatex-juradiss.tex
deleted file mode 100644
index c6b4f27d58..0000000000
--- a/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biblatex-juradiss.tex
+++ /dev/null
@@ -1,711 +0,0 @@
-% biblatex-juradiss documentation 2012/07/17 v0.1f
-%
-% Copyright (c) 2012 Dr. Tobias Schwan <tobias.schwan(aat)gmx.de>
-
-\begin{filecontents*}{Literaturbeispiele.bib}
-
-@ARTICLE{Mustermann1999,
- author = {Mustermann, Michael},
- title = {Gestaltungsmöglichkeiten bei Anreizsystemen},
- journal = {NZG},
- year = {1999},
- pages = {797-900},
- gender = {sm},
-}
-
-@BOOK{Bruemmerhoff2007,
- author = {Br"ummerhoff, Dieter},
- gender = {sm},
- title = {Finanzwissenschaft},
- edition = {9},
- location = {München u.a.},
- year = {2007},
- stand = {ok},
- version = {1}
-}
-
-@BOOK{Birk2008,
- author = {Birk, Dieter},
- gender = {sm},
- title = {Steuerrecht},
- edition = {12},
- location = {Heidelberg},
- year = {2009},
- stand = {ok},
- version = {1}
-}
-
-@BOOK{birk1994,
- author = {Birk, Dieter},
- gender = {sm},
- title = {Allgemeines Steuerrecht},
- shorttitle = {Allg. Steuerrecht},
- edition = {2},
- location = {München},
- year = {1994},
- version = {1}
-}
-
-@BOOK{Hausmann1998,
- author = {Hausmann, Benedikt},
- gender = {sm},
- title = {Notwendige Erwerbsaufwendungen},
- location = {Berlin},
- year = {1998},
- addendum = {zugl.: Diss. jur. Univ. Münster 1997},
-}
-
-@COMMENTARY{Duck2009,
- editor = {Duck, Dietmar},
- gender = {sm},
- title = {Spannendesgesetz, Kommentar},
- edition = {2},
- location = {München},
- year = {2009},
-}
-
-@COMMENTARY{Gans2002,
- editor = {Gans, Dietmar},
- editora = {Pantoffel, Frank},
- editoratype = {founder},
- gender = {pm},
- title = {Handbuch des Rechts, des sonstigen Rechts und übriger Gesetze, Kommentar},
- shorthand = {Handbuch des Rechts},
- edition = {2},
- location = {München},
- year = {2002},
-}
-
-@INCOLLECTION{Schwaiger2004,
- author = {Schwaiger, Gregor},
- editor = {Grundmann, Stefanie and Haar, Brigitte and Merkt, Hans and Mülbert,
- Peter and Wellenhof, Marina},
- title = {Aufsichtsrat und Autonomie},
- pages = {337},
- booktitle = {Unternehmen und Verantwortung, Festschrift für Klaus J. Hauptmann},
- location = {Berlin},
- year = {2004},
- stand = {ok},
- shorttitle = {FS Hauptmann},
-}
-
-@PERIODICAL{Lutz1995,
- author = {Lutz, Martin},
- gender = {sm},
- title = {Möglichkeiten der Verbesserung},
- journal = {ZHR},
- year = {1995},
- volume = {159},
- pages = {287},
-}
-
-@ARTICLE{Oldag2011,
- author = {Oldag, Andreas},
- title = {Wenn Teenies Banker spielen},
- journal = {SZ},
- pages = {30},
- gender = {sm},
- entrysubtype = {newspaper},
- volume = {208},
- date = {2011-09-09},
-}
-
-@ONLINE{Hirte2009,
- author = {Hirte, Heribert},
- title = {Stellungnahme zum Fraktionsentwurf eines Gesetzes zur Angemessenheit
- der Vorstandsvergütung (VorstAG) für den Deutschen Bundestag},
- url = {http://www.jura.uni-augsburg.de/fakultaet/lehrstuehle/moellers/materialien/materialdateien/040_deutsche_gesetzgebungsgeschichte/gesetz_angemessenheit_vorstandsverguetung/pdf/stellungnahme_3.pdf},
- urldate = {2011-04-03}
-}
-
-@JURISDICTION{bverfg:jubilaeum,
- author = {BVerfG},
- gender = {sn},
- title = {Jubiläumsrückstellung},
- decision = {Beschluss},
- date = {2009-05-12},
- sign = {2 BvL 1/00},
- officialvolume = {BVerfGE 123},
- officialpages = {111},
- journaltitle = {FR},
- journalyear = {2009},
- pages = {873},
- decisionname = {Jubiläumsrückstellung},
-}
-
-@LEGAL{bt16-12278,
- journalsubtitle = {16/12278},
- journaltitle = {BT-Drs.},
- title = {BT-Drucksache 16/12278}
-}
-
-@ARTICLE{Kirchhof2000,
- author = {Kirchhof, Ferdinand},
- title = {Die Tauglichkeit von Abgaben zur Lenkung des Verhaltens},
- journal = {DVBl},
- year = {2000},
- pages = {1166},
- gender = {sm},
-}
-
-@ARTICLE{Kirchhof2006,
- author = {Kirchhof, Paul},
- title = {Die freiheitsrechtliche Struktur der Steuerrechtsordnung},
- journal = {StuW},
- year = {2006},
- pages = {3},
- gender = {sm},
-}
-
-
-\end{filecontents*}
-
-
-\documentclass[ngerman,toc=graduated]{scrartcl}
-
-%
-%
-% Laden der benoetigten Klassen:
-%
-%
-\usepackage{listings}
-\usepackage[T1]{fontenc} % Damit LaTex Umlaute usw. erkennt
-\usepackage[latin1]{inputenc} % Damit klappt die wechselnde Bearbeitung unter
-\usepackage{eurosym} % Damit das Euro-Symbol dargestellt werden kann
-\usepackage[german]{babel}
-%\usepackage[usenames]{color}
-\usepackage{ifthen}
-\clubpenalty10000 % gegen Hurenkinder und Schusterjungen, http://de.wikipedia.org/wiki/Hurenkind_und_Schusterjunge
-\widowpenalty10000
-\raggedbottom % Abstaende zwischen Absaetzen nicht zu gross werden lassen
-
-% vbox/hbox-Warnungen reduzieren
-\emergencystretch20pt
-\tolerance2000
-
-%%%
-%%% Hier werden die package-Optionen fuer biblatex gesetzt:
-%%%
-\usepackage[%
-backend=biber,
-uniquename=true,% Kommt ein Nachname eines Autors mehrfach vor, so wird dieser mit Initialen zitiert.
-singletitle=true,%
-sorting=nyvt,% Sortierreihenfolge im LitVerz: Zuerst nach Name, beim gleichen Autor nach Jahr, Volume und Titel
-sortcites=true,%
-maxnames=3,%
-idemtracker=constrict,%
-style=biblatex-juradiss,% Nutzung des biblatex-Stils biblatex-juradiss
-ibidtracker=false,% Kein ebenda
-datezeros=false,% Keine führende Null vor Datumsziffern: 9. 2. 1982 statt 09.02.1988
-date=short,% Datum als Ziffern, keine ausgeschriebenen Monatsnamen
-]{biblatex}
-
-
-\bibliography{Literaturbeispiele}
-
-\usepackage[babel,german=guillemets]{csquotes}
-
-
-% Setzt den Erstzeileneinzug im gesamten Dokument auf Null.
-\setlength{\parindent}{0pt}
-
-%%% Kategorien für die einzelnen Literaturverzeichnisbeispiele
-%%% zum Darstellen der LitVerz-Ausgabe beim jew. Beispiel
-\DeclareBibliographyCategory{1}
-\addtocategory{1}{Mustermann1999}
-
-\DeclareBibliographyCategory{2}
-\addtocategory{2}{Bruemmerhoff2007}
-
-\DeclareBibliographyCategory{3}
-\addtocategory{3}{Hausmann1998}
-
-\DeclareBibliographyCategory{4}
-\addtocategory{4}{Birk2008,Birk1994}
-
-\DeclareBibliographyCategory{5}
-\addtocategory{5}{Duck2009}
-
-\DeclareBibliographyCategory{6}
-\addtocategory{6}{Gans2002}
-
-\DeclareBibliographyCategory{7}
-\addtocategory{7}{Schwaiger2004}
-
-\DeclareBibliographyCategory{8}
-\addtocategory{8}{Lutz1995}
-
-\DeclareBibliographyCategory{9}
-\addtocategory{9}{Oldag2011}
-
-\DeclareBibliographyCategory{10}
-\addtocategory{10}{Hirte2009}
-
-
-\begin{document}
-
-%%%%%
-% Frontmatter
-%%%%%
-
-\title{biblatex-juradiss}
-\subtitle{Ver. 0.1f}
-\author{Dr. Tobias Schwan}
-\date{17. 7. 2012}
-
-\maketitle
-
-\tableofcontents
-
-%%%%%
-% Mainmatter - der Text
-%%%%%
-
-
-\section{Einleitung}
-
-
-Diese Dokumentation erklärt in kurzen Worten die Anpassungen des Stils biblatex-juradiss und wie man sie nutzen kann. Indirekt werden dabei auch einige Funktionen von biblatex erläutert, auf das biblatex-juradiss aufsetzt. Grundsätzlich sollte man bei Fragen zu den Funktionen von biblatex die sehr gute und ausführliche Dokumentation von biblatex konsultieren. Ohne zumindest das Überfliegen des User-Guide in der biblatex-Dokumentation lässt sich biblatex und biblatex-juradiss nicht sinnvoll verwenden. Inzwischen gibt es auch eine deutsche Fassung.
-
-Zum Schnelleinstieg werden im Kapitel Kurzanleitung die Voraussetzungen zur Verwendung von biblatex-juradiss kurz erläutert. Danach erfolgt die Darstellung der Zitierstile der unterschiedlichen Dokumentenarten mit Beispielen.
-
-Diese Doku füge ich meinem Paket auch als .tex-Datei an, damit die Funktionsweise des Stils anhand eines konkreten Beispiels besser nachvollzogen werden kann.
-
-
-\section{Kurzanleitung}
-
-
-Anleitung zur Installation von biblatex-juradiss (unter Windows)
-
-1. Installation von MikTex\\
-\\
-2. Installation von packages über den Package Manager:
-\begin{itemize}
-\item biblatex
-\item biblatex-dw
-\item etoolbox
-\item logreq
-\item csquotes
-\\
-\item juramisc (wenn man die Dokumentenklasse hiervon benutzen möchte)
-\end{itemize}
-
-
-\section{Installation}
-
-
-biblatex-juradiss setzt auf den Paketen biblatex und biblatex-dw auf. Grund hierfür ist, dass biblatex alle Funktionen erst bereitstellt, die es ermöglichen individuelle Zitierstile zu entwickeln. Die Zitierweise deutscher Juristen ist allerdings so speziell im Vergleich zu dem sonst üblichen, dass es noch zusätzlich weiterer Funktionen bedarf, diese vollständig abzubilden. Diese finden sich in biblatex-dw. Zwar hätte man diese auch aus dem Paket herausnehmen und in biblatex-juradiss integrieren können, aber der Aufwand hierfür erschien mir zu groß. Zudem ist mit dem gut gepflegten Paket biblatex-dw sichergestellt, dass die von diesem bereitgestellten Funktionen auch trotz der sehr schnellen Entwicklung von biblatex zuverlässig erhalten und kompatibel bleiben.
-
-Dies führt dazu, dass zur Verwendung von biblatex-juradiss auch das Paket biblatex-dw vorhanden sein muss. Dessen Funktionen werden über biblatex-juradiss direkt eingebunden, es muss nicht erst per Paketoption über biblatex geladen werden.
-
-Um biblatex-juradiss zu verwenden muss dieses als Paketoption von biblatex eingebunden werden. Dies geschieht durch die Option \textbackslash usepackage[style=biblatex-juradiss]\{biblatex\}.
-
-Sofern man die Dateien nicht über eine TeX-Distribution, wie TeX Live oder MikTeX installiert, kopiert man sie die Dateien biblatex-juradiss.cbx und biblatex-juradiss.bbx in <TEXMFLOCAL>/tex/latex/biblatex-juradiss, wobei
-
-<TEXMFLOCAL> der Wurzelpfad der TeX-Installation ist. Danach muss man den Datei-hash aktualisieren.
-
-Die biber.conf-Datei legt man einfach in den gleichen Ordner, wie die tex-Datei.
-
-
-\section{Dokumentenklasse}
-
-
-Ich habe für die Erstellung meiner Doktorarbeit die Dokumentenklasse jurabook aus dem Paket juramisc verwendet. Das Paket bietet viele nützliche Optionen und integriert bereits die von Juristen verwendete Bezeichnung der Gliederungsebenen (A., I., 1., a), aa), aaa), (1), (a)).
-
-Leider wird das Paket seit einiger Zeit nicht mehr gepflegt, weshalb es inzwischen vielleicht nicht mehr uneingeschränkt zu empfehlen ist.
-
-Eine Alternative ist die Verwendung der Dokumentenklasse book und die individuelle Anpassung des Inhaltsverzeichnisses. Gerade mit dem Paket titletoc ist das keine große Kunst. Will man seine Doktorarbeit später in einem Verlag veröffentlichen empfielt sich das ohnehin. Denn dieser hat oftmals seine eigene LaTeX-Vorlage, die Fragen wie Fußnotenumbruch und Formatierung der Kopfzeilen selbst regelt. Hier kann die Umstellung von jurabook auf die verlagsspezifische Vorlage umständlicher sein, als wenn man das zuvor selbst angepasst hat (so war es jedenfalls bei mir), denn dann kann man die eigenen Anpassungen durch die des Verlags ersetzen, bei jurabook wusste ich im Nachhinein nicht mehr, welche Anpassung auf jurabook abzielte und welche auf generelle Dinge, wie den Fußnotenumbruch.
-
-
-\section{Verhältnis zu biblatex-jura}
-
-
-biblatex-jura hat ebenso wie dieses Paket das Ziel das Schreiben juristischer Texte mit \LaTeX{} zu ermöglichen. Dementsprechend hatte ich zu Beginn auch dieses Paket verwendet und versucht, es für meine Bedürfnisse anzupassen. Mit der Zeit musste ich allerdings feststellen, dass es mit der weiteren Entwicklung von biblatex nicht Schritt hält. Irgendwann hatte ich es soweit modifziert, dass es sinnvoller wurde, die eigenen Anpassungen direkt auf Basis von biblatex zu schreiben.
-
-Eine Mithilfe bei biblatex-jura schien ebenfalls nicht sinnvoll, da dieses sich an den Zitiervorgaben des Nomos-Verlags orientiert, mein Stil aber meinen Vorstellungen einer Doktorarbeit entsprechen sollte. Außerdem verwendet biblatex-jura teilweise interne Funktionen von biblatex, die nicht dafür da sind, durch externe Pakete verwendet oder geändert zu werden. Das führte in der Vergangenheit zu Inkompatibilitäten von biblatex-jura zu neueren Versionen von biblatex. Bei meinem Stil setze ich (nahezu) ausschließlich auf Funktionen von biblatex auf, die dieses hierfür anbietet, was die Kompatibilität langfristig erhalten sollte.
-
-
-\section{Einzelne Eintragstypen}
-
-
-Hier stelle ich anhand von Beispielen die einzelnen Eintragstypen vor, die ich für meinen Stil angepasst habe:
-
-
-\subsection{Eintragstyp article}
-
-
-Zeitschriftenartikel werden in der Fußnote so ausgegeben:\footcite[800]{Mustermann1999}\\
-\\
-\cite[800]{Mustermann1999}\\
-\\
-Es gibt zwar auch die Möglichkeit die konkrete Fundstelle (hier in runden Klammern) einfach nur durch ein Komma zu trennen, aber gerade wenn man mehrere Zitate hintereinander setzt, helfen die runden Klammern m.E. beim Trennen der einzelnen Zitate. Die kursive Schrift von Personen fördert bei Fußnoten mit vielen Belegen zudem die Lesbarkeit.\\
-\\
-Der Literaturverzeichniseintrag sieht so aus:
-\printbibliography[category=1]
-
-Teilweise wird inzwischen empfohlen im Literaturverzeichnis nicht nur die Anfangs-, sondern auch die Endseite eines Beitrags anzugeben, um zu zeigen, dass man nicht lediglich blind zitiert hat, sondern den Beitrag zumindest mal selbst in der Hand hatte. Im naturwissenschaftlichen Bereich ist das wohl üblicher. Ich finde die Idee nicht schlecht, jedenfalls unterstützt biblatex-juradiss das auch seit Version 0.1f.
-
-
-\subsection{Eintragssubtyp newsletter}
-
-
-Nicht oft, aber manchmal kommt es durchaus vor, dass man in juristischen Texten auch Tageszeitungen zitiert (zB die SZ oder die FAZ, in Disserationen kommt auch schon mal die TAZ vor..)
-
-Für Tageszeitungen sieht biblatex keinen eigenen Stil vor. Es besteht aber die Möglichkeit eigene Stile für Unterarten von Eintragstypen zu definieren. Ein Eintrag wird einem bestimmten entrysubtitle zugeordnet, indem man dem jeweiligen Eintrag in der Literaturdatenbank das Feld entrysubtype hinzufügt und in diesem den entsprechenden Subtyp angibt.
-
-Für Tageszeitungen habe ich das über den Typ newsletter gemacht. In diesem gibt man bei Tageszeitungen neben dem Autor und dem Namen der Zeitschrift das Datum der Ausgabe (Feld date, Format: JJJJ-MM-TT), sowie deren Nummer (Feld volume) an.\\
-\\
-Beispielseintrag:
-
-\begin{lstlisting}
-@ARTICLE{Oldag2011,
- author = {Oldag, Andreas},
- gender = {sm},
- title = {Wenn Teenies Banker spielen},
- journal = {SZ},
- pages = {30},
- entrysubtype = {newspaper},
- volume = {208},
- date = {2011-09-09},
-}
-\end{lstlisting}
-
-Fußnote:\footcite{Oldag2011}
-\\
-\cite{Oldag2011}\\
-\\
-Literaturverzeichniseintrag:
-\printbibliography[category=9]
-
-
-\subsection{Eintragstyp book}
-
-
-Monografien, also beispielsweise Lehrbücher oder Dissertationen werden in der Fußnote so ausgegeben:\footcite[55]{Bruemmerhoff2007} \\
-\cite[55]{Bruemmerhoff2007}
-\\
-Der Literaturverzeichniseintrag sieht so aus:
-\printbibliography[category=2]
-
-Disserationen sehen in der Fußnote wie normale Bücher aus:\footcite[231]{Hausmann1998}
-\\
-\cite[231]{Hausmann1998}\\
-\\
-Nur im Literaturverzeichnis füge ich die Universität der Dissertation usw. in das Feld addendum ein:
-
-\begin{lstlisting}
-@BOOK{Hausmann1998,
- author = {Hausmann, Benedikt},
- gender = {sm},
- title = {Notwendige Erwerbsaufwendungen},
- location = {Berlin},
- year = {1998},
- addendum = {zugl.: Diss. jur. Univ. Münster 1997},
-}
-\end{lstlisting}
-
-Das wird dann im LitVerz-Eintrag einfach hinten angefügt:
-\printbibliography[category=3]
-
-
-Gibt es vom gleichen Autor mehrere Einträge, wird in die Fußnote zur Unterscheidung der Titel des Buchs geschrieben, wenn die Fußnote sonst nicht eindeutig ist.
-
-Ist bei Monografien das Feld shorttitle definiert, so wird dessen Inhalt genommen, was idR besser aussieht.
-
-Keine Zuordnungsprobleme bestehen, wenn der weitere Eintrag ein Zeitschriften- oder Festschriftenbeitrag ist, denn diese sind über den Namen der Zeitschrift oder der Festschrift, der in der Fußnote stets mit zitiert wird, bereits eindeutig unterscheidbar.\\
-\\
-Beispiel für zwei Fußnoten von zwei Monografien eines Autors:\footcites[231]{Birk2008}[34]{Birk1994}\\
-\\
-\cites[231]{Birk2008}[34]{Birk1994}\\
-\\
-Im Literaturverzeichnis wird entsprechend angegeben, wie das jeweilige Werk zitiert wird, der Zusatz \glqq{}zitiert als\grqq{} erscheint bei Zeitschrifen nie, bei Festschriften immer: \printbibliography[category=4]
-
-
-\subsection{Eintragstyp commentary}
-
-
-Die Zitation von juristischen Kommentaren ist die größte Herausforderung für meinen Stil gewesen.
-
-Zitiert wird ein Kommentar, indem das prenote-Feld genutzt wird. Der cite-Befehl von biblatex kennt ein pre- und ein postnote-Feld. Bei dem Befehl \textbackslash cite[50]\{bibtexkey\} wird das postnote-Feld mit dem Inhalt der eckigen Klammer gefüllt (hier die 50). Dessen Inhalt kommt an das Ende des jeweiligen Zitats (deshalb POSTnote-Feld). Das prenote-Feld wird mit dem Inhalt der ersten eckigen Klammer gefüllt, wenn man dem bibtex-Schlüssel im \textbackslash cite-Befehl zwei eckige Klammern voranstellt: \textbackslash cite[\emph{Bearbeiter}][50]\{bibtexkey\}.\footnote{Mehr zu der Funktionsweise von pre- und postnote-Feldern ist in der Dokumentation von biblatex zu finden.}
-
-Wird bei Kommentaren die Auflagenzahl angegeben, so wird diese als kleine hochgestellte Zahl hinter den Herausgeber, oder den Kommentarnamen geschrieben. So lassen sich Zitate von Kommentar-Bearbeitern aus unterschiedlichen Auflagen recht einfach voneinander unterscheiden.\\
-\\
-Das Zitat eines juristischen Kommentars sieht dann folgendermaßen aus:\footcite[Donald][§~4 Rn.~443]{Duck2009}\\
-\\
-% Hier habe ich den Code manuell eingegeben, da die Darstellung des Stils danach differenziert, ob er sich in einer Fußnote befindet oder nicht, das ist hier bei der Doku halt nicht der Fall. Für diesen Sonderfall wollte ich aber nicht den Stil nochmal umbasteln...
-\emph{Donald}, in: \emph{Duck\textsuperscript{\tiny{2}}}, §~4 Rn.~443\\
-\\
-Im Literaturverzeichnis sieht dieser wie folgt aus:
-\printbibliography[category=5]
-
-Kommentare werden üblicherweise mit den Namen der Herausgeber zitiert, genauso üblich ist es aber auch, den Namen eines alten Herausgebers als Zitat zu verwenden, oder einen Eigennamen. Hierfür ist das Feld shorthand da. Ist es nicht leer, so wird dessen Inhalt statt die Namen der Herausgeber für das Fußnotenzitat verwendet. Will man einem oder mehreren Herausgebern oder Autoren eine bestimmte Eigenschaft zuordnen z.B. Begründer oder Fortführer, so kann man dies, indem man dem Eintrag in der Literaturdatenbank das Feld editortype hinzufügt und in dieses beispielsweise founder schreibt. Unterschiedliche Arten kann man unterscheiden, indem man diese dann in das Feld editora (mit editoratype) usw. einträgt.\footnote{Mehr hierzu ist in der Dokumentation von biblatex zu finden.} Bei Autoren geht das genauso, nur dass es hier kein authora gibt, sondern stattdessen namea usw.\\
-\\
-Hier ein Kommentar, bei dem ein Herausgeber zugleich Begründer des Werks war. Außerdem ist es bei diesem üblich, ihn mit einem Eigennamen, statt den Herausgebern zu zitieren.
-
-Der Beispielseintrag sieht dann so aus:
-
-\begin{lstlisting}
-@COMMENTARY{Gans2002,
- editor = {Gans, Dietmar},
- editora = {Pantoffel, Frank},
- editoratype = {founder},
- gender = {pm},
- title = {Handbuch des Rechts, des sonstigen Rechts und übriger
- Gesetze, Kommentar},
- shorthand = {Handbuch des Rechts},
- edition = {2},
- location = {München},
- year = {2002},
-}
-\end{lstlisting}
-
-In der Fußnote sieht der Eintrag dann so aus:\footcite[Schneider][§~4 Rn.~443]{Gans2002}
-\\
-% Hier habe ich den Code manuell eingegeben, da die Darstellung des Stils danach differenziert, ob er sich in einer Fußnote befindet oder nicht, das ist hier bei der Doku halt nicht der Fall. Für diesen Sonderfall wollte ich aber nicht den Stil nochmal umbasteln...
-\emph{Schneider}, in: \emph{Handbuch des Rechts\textsuperscript{\tiny{2}}}, §~4 Rn.~443.\\
-\\
-Im Literaturverzeichnis sieht dieser wie folgt aus:
-\printbibliography[category=6]
-
-
-\subsection{Eintragstyp incollection}
-
-
-Festschriften haben folgende notwendige Felder im Literaturdatenbank-Eintrag:\\
-author = Name des Festschriftautors\\
-title = Titel der Festschrift\\
-pages = Seitenzahl, an der der Beitrag beginnt\\
-editor = Name des Herausgebers der Festschrift\\
-booktitle = Name der Festschrift\\
-shorttitle = Abkürzung für die Fußnote (zB FS Lutter)\\
-\\
-Optional (wie bei allen Monografien), zB:\\
-location = Erscheinungsort der Festschrift\\
-year = Erscheinungsjahr\\
-
-Hat eine Festschrift viele Herausgeber, kann man einstellen, dass im Literaturverzeichnis nur der erste mit dem Zusatz u.a. genannt wird. Die Anzahl, bis zu der alle Herausgeber genannt werden sollen definiert man über die Paketoption von biblatex maxnames (ich verwende maxnames=3).\\
-\\
-So sieht die Fußnote aus:\footcite{Schwaiger2004}\\
-\\
-\cite{Schwaiger2004}\\
-\\
-Im Literaturverzeichnis sieht der Eintrag einer Festschrift mit 5 Herausgebern wie folgt aus:
-\printbibliography[category=7]
-
-
-\subsection{Eintragstyp periodical}
-
-
-Der Eintragstyp periodical ist an sich eine Abwandlung des Eintragstyps article. Er ist gedacht für Archivzeitschriften, die neben dem Jahrgang auch zusätzlich eine laufende Nummer für das jeweilige Jahr verwenden (zB AöR, AcP, ZHR, und für den Steuerrechtler: DStJG). Die Jahrgangsnummer wird in das Feld Volume eingetragen.\\
-\\
-Fußnote:\footcite{Lutz1995}
-\\
-\cite{Lutz1995}\\
-\\
-Literaturverzeichniseintrag:
-\printbibliography[category=8]
-
-
-\subsection{Eintragstyp online}
-
-
-Dieser Eintragstyp ist für Dokumente, die nur online zugänglich sind, z.B. Pressemitteilungen oder Stellungnahmen von Verbänden oder Professoren zu Gesetzesvorhaben etc.
-
-Derzeit sieht dieser Eintragstyp lediglich die Felder author, title, shorttitle, sowie url und urldate vor. Die URL wird nur im LitVerz angezeigt, zusammen mit dem Datum des letzten Abrufs (urldate, Format: JJJJ-MM-TT). Wenn ein Shorttitle eingetragen wird, so wird dieser auch in der Fußnote aufgeführt.
-
-Die Ausgabe als Fußnote erfolgt so:\footcite[3]{Hirte2009}
-\\
-\cite[3]{Hirte2009}\\
-\\
-Der Eintrag im Literaturverzeichnis sieht so aus:
-\printbibliography[category=10]
-
-
-\subsection{Eintragstyp jurisdiction}
-
-
-Ein kleines Alleinstellungsmerkmal dieses Stils ist die Unterstützung eines Zitationsstils für juristische Literatur UND für Gerichtsurteile, sowie offizielle Dokumente. Hierfür gibt es zwar auch das Paket jurarsp. Es wurde aber in den letzten Jahren nicht mehr weiterentwickelt. In seiner Funktionsvielfalt ist es meinem Stil zwar in vielen Bereichen überlegen und auch den ein oder anderen Darstellungsfehler wegen inzwischen eingetretener Inkompatibilität konnte ich durch Änderung der Paketdateien erreichen. Aber biblatex und jurarsp arbeiten nicht zusammen. So sieht biblatex nicht, dass zwischen zwei Literaturzitaten ein Rechtsprechungszitat ist und wendet die idem-Funktion an. Auch in die \textbackslash cite-Befehle kann man die Rechtsprechungszitate nicht integrieren. Außerdem musste man bibtex immer einmal separat über die Rechtsprechungs-Bib-Datei laufen lassen. Diese Nachteile haben mich veranlasst einen eigenen Stil für Rechtsprechungszitate zu schreiben. Dafür dient der Eintragstyp jurisdiction. Genauso wie der Eintragstyp legal ist er von biblatex zwar vorgesehen, enthält aber keine Zitiervorgaben.
-
-Der Eintragstyp jurisdiction hat folgende Felder:
-
-\begin{itemize}
-
-\item author = Name des Gerichts (zB BFH, BVerfG, BGH etc.)
-
-\item gender = Für die idem-Funktion (zB dass. bei Eintrag: "'sn"', zB für das BVerfG, oder ders., dann Eintrag: "'sm"', zB für den BGH)\footnote{Ausführliche Erklärung zu gender in der biblatex-Dokumentation.}
-
-\item date = Urteilsdatum in der Form JJJJ-MM-TT
-
-\item decision = für Art der Entscheidung, zB Urteil oder Beschluss
-
-\item sign = Aktenzeichen
-
-\item officialvolume = Name der Entscheidungssammlung oder der Zeitschrift der primären Fundstelle inkl. Band oder Jahrgang (zB BGHZ 31 oder BVerfGE 13, aber auch NJW 2011 oder juris (nv)) Die primäre Fundstelle ist oftmals eine Entscheidungssammlung. Hier ist es dann manchmal üblich, eine weitere Fundstelle in einer juristischen Zeitschrift anzugeben. Zu diesem Zweck gibt es die Möglichkeit die zweite Fundstelle als sekundäre Fundstelle anzugeben. Das ist aber optional.
-
-\item officialpages = Erste Seite der Entscheidung in der primären Fundstelle
-
-\item pages = Erste Seite des Urteils in der sekundären Fundstelle
-
-\item journaltitle = Zeitschriftenname in der sekundären Fundstelle
-
-\item journalyear = Zeitschriftenjahrgang in der sekundären Fundstelle
-
-\item decisionname = Entscheidungsname (zB. Centros oder Herrenreiter)
-
-\end{itemize}
-
-Will man die obigen Feldnamen (also decision und sign usw.) in seiner Literaturdatenbank verwenden, so muss man biblatex zwingend mit biber benutzen und nicht mit bibtex. Denn biblatex bringt zwar von Hause aus den Eintragstyp jurisdiction mit, aber keine Felder die speziell für diesen Eintragstyp benötigt werden, also Felder für das Aktenzeichen, die primäre und sekundäre Fundstelle usw. Um benutzerdefinierte Felder verwenden zu können bietet biblatex nur die Möglichkeit die Felder user[a-f] zu verwenden. Da der Typ jurisdiction fast nur aus benutzerdefinierten Feldern besteht, würde das die Eingabe von Einträgen in die Literaturdatenbank schwierig machen. biber bietet dafür die Möglichkeit in der Literaturdatenbank eigene Feldnamen zu verwenden, die dann bei Erstellung des LaTeX-Dokuments in die internen Feldnamen von biblatex umbenannt werden. Intern arbeitet mein Stil daher mit user[a-f], in der Literaturdatenbank können aber die aussagekräftigen Namen verwendet werden.
-
-Damit das klappt, muss man biber aktivieren:
-
-\begin{lstlisting}
-
-\usepackage[%
-backend=biber, %
-
-[...]
-
-]{biblatex}
-
-\end{lstlisting}
-
-Zudem muss man die Datei biber.conf in dem Ordner anlegen, in dem die .tex-Datei liegt. Diese hat dann folgenden Inhalt:
-
-\begin{lstlisting}
-
-<map>
- <bibtex>
- <globalfield>
- decision usera
- sign userb
- officialvolume userc
- officialpages userd
- journalyear usere
- decisionname userf
- </globalfield>
- </bibtex>
-</map>
-
-\end{lstlisting}
-
-Will man stattdessen bibtex verwenden, so ist dies ebenfalls möglich, statt der genannten Feldnamen, die biblatex nicht kennt muss man dann die Felder user[a-f] verwenden. Die Zuordnung kann man einfach aus dem Inhalt der biber.conf entnehmen (beispielsweise heißt das Feld decision für biblatex intern usera).
-\\
-Die Ausgabe als Fußnote erfolgt so:\footcite[3]{bverfg:jubilaeum}\\
-\\
-\cite[3]{bverfg:jubilaeum}\\
-\\
-Einen Eintrag für das Literaturverzeichnis kann ich derzeit noch nicht präsentieren. Bisher habe ich nicht vor, ein eigenes Rechtsprechungsverzeichnis in meiner Promotion anzugeben. Daher habe ich bisher auch noch keine Energie in die Erstellung eines solchen Verzeichnisses investiert.
-
-\label{nichtinslitverz}
-Damit die Rechtsprechungszitate nicht doch in komischer Form im Literaturverzeichnis auftauchen sollte man diese beim Aufruf des Literaturverzeichnisses durch die Option nottype=jurisdiction außen vor lassen. Das gleiche gilt für den Eintragstyp legal:
-
-Beispiel:
-\begin{lstlisting}
-\printbibliography[nottype=jurisdiction,nottype=legal]
-\end{lstlisting}
-
-
-\subsection{Eintragstyp legal}
-
-
-Zuletzt soll noch der Eintragstyp legal vorgestellt werden. Für diesen gilt das gleiche, wie zum Eintragstyp jurisdiction. Nur eigene Feldnamen müssen hier nicht konvertiert werden, da ich hier in -- wie ich finde gerade noch vertretbarer Weise -- bestehende Felder verwende.
-
-Das Feld journaltitle enthält dabei die Bezeichnung der jeweiligen Veröffentlichung, zB BT-Drs., oder BMF-Schreiben. Das Feld journalsubtitle enthält dann die Bezeichnung des konkreten Dokuments, zB 16/12278 oder v.~5.~5.~2011.
-
-Ein Eintrag in der Literaturdatenbank sieht dann beispielsweise so aus:
-
-\begin{lstlisting}
-
-@LEGAL{bt16-12278,
- journalsubtitle = {16/12278},
- journaltitle = {BT-Drs.},
- title = {BT-Drucksache 16/12278}
-}
-
-\end{lstlisting}
-
-Da es das besondere von offiziellen Dokumenten ist, dass man keinen Autor angibt (denn dieser ergibt sich aus dem Namen des Dokuments) ist dieser auch nicht vorgesehen.
-\\
-Die Ausgabe als Fußnote erfolgt dann so:\footcite[3]{bt16-12278}\\
-\\
-\cite[3]{bt16-12278}\\
-\\
-Ein Verzeichnis der offiziellen Dokumente habe ich derzeit ebenfalls nicht für meine Promotion geplant, dementsprechend gibt es hierfür auch noch keinen Stil.
-
-Auch hier ist zu beachten, dass der Eintragstyp beim Darstellen des Literaturverzeichnisses außen vor gelassen werden sollte.\footnote{Vgl. oben \qverweis{nichtinslitverz}.}
-
-
-\section{Anleitung zur Anpassung der Stilvorgaben}
-
-
-Nun ist der Stil der Zitate sehr an meinen Vorstellungen orientiert. Hier spielt der individuelle Geschmack auch immer eine Rolle. Dieser Stil soll damit zunächst alles mitbringen, um \LaTeX{} für juristische Texte verwenden zu können und der konkrete Stil soll hierfür als Beispiel dienen, was man damit machen kann. Gerade die Optik der Zitate und der Darstellung des Literaturverzeichnisses lässt sich aber mit sehr einfachen Mitteln anpassen.
-
-Hier ein kleines Beispiel:
-
-Möchte man beispielsweise, dass auch bei Zeitschriften stets ein in: zwischen Autor und Zeitschriftenname steht, so kopiert man den bisherigen Code für die Darstellung von Zeitschriftenartikeln in die Präambel des eigenen Dokuments und passt diesen den eigenen Vorstellungen an:\\
-\\
-Schritt 1: Kopieren des entsprechenden Codes aus der biblatex-juradiss.cbx (die cbx-Dateien enthalten Code für Zitate, die bbx-Dateien enthalten Code für das Literaturverzeichnis)\\
-\\
-Schritt 2: Einfügen des Codes zwischen \textbackslash documentclass und \textbackslash begin\{document\}:
-
-\begin{lstlisting}
-
-\DeclareBibliographyDriver{cite:article}{%
- \printfield{journaltitle}
- \printfield{year}%
- \iffieldundef{postnote}%
- {\addcomma\space%
- \printfield{pages}}%
- {}%
-}
-
-\end{lstlisting}
-
-Schritt 3: Anpassen des Codes. Hier fügen wir einfach nur das in: vor dem Zeitschriftennamen ein. Da es hierfür bereits ein Bibmacro von biblatex gibt, verwenden wir dieses:
-
-\begin{lstlisting}
-
-\DeclareBibliographyDriver{cite:article}{%
- \usebibmacro{in:}% <---
- \printfield{journaltitle}
- \printfield{year}%
- \iffieldundef{postnote}%
- {\addcomma\space%
- \printfield{pages}}%
- {}%
-}
-
-\end{lstlisting}
-
-Das war es auch schon. Um Näheres über die Möglichkeiten zu erfahren, wie man die Darstellung von Zitaten und des Literaturverzeichnisses anpassen kann, empfehle ich die Dokumentation von biblatex.
-
-Weitere Beispiele werde ich möglicherweise in einer weiteren Version dieser Doku zeigen. Wenn sich Mitstreiter für dieses Projekt finden, sollte es in späteren Versionen möglich sein, Optionen in das Paket einzubauen, mit denen man die Darstellung steuern kann, ohne den Code händisch anpassen zu müssen.
-
-
-\section{Weitere Anpassungen}
-
-
-Neben der Anpassung und Neuentwicklung von Zitierstilen habe ich einige weitere Anpassungen vorgenommen. Die ich hier nun kurz darstellen will.
-
-
-\subsection{Darstellung mehrerer Personen mit gleichem Nachnamen}
-
-
-Zitiert man verschiedene Personen mit gleichem Nachnamen, so wird derjenige automatisch mit Initialien zitiert. Diese sind, wie alle Eigennamen kursiv gedruckt. Außerdem habe ich den Abstand zwischen den Initialen und dem Nachnamen ein wenig verkleinert.\\
-\\
-Beispiel: Wenn man Werke von Ferdinand und Paul Kirchhof zitiert, sieht das wie folgt aus:\footcites[1167]{Kirchhof2000}[5]{Kirchhof2006}\\
-\\
-\cites[1167]{Kirchhof2000}[5]{Kirchhof2006}\\
-\\
-Die Darstellung im Literaturverzeichnis ändert sich nicht.
-
-
-\subsection{Querverweis}
-\label{querverweis}
-
-
-Zudem habe ich einen Kurzbefehl eingeführt, den ich recht nützlich finde. Mit \textbackslash qverweis\{\} kann man auf eine andere Stelle im Dokument verweisen. Die Stelle wird mit \textbackslash label\{Name\} markiert. Der Befehl \textbackslash qverweis\{Name\} fügt an der Stelle dann stets den jeweiligen Gliederungspunkt und die Seite ein, auf der sich die Markierung befindet.\footnote{Z.B. vgl. hierzu die das derzeitige Kapitel Querverweis, unter \qverweis{querverweis}.}
-
-
-\end{document}
-
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/doc/biblatex-juradiss.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/doc/biblatex-juradiss.pdf
new file mode 100644
index 0000000000..502f27eb70
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/doc/biblatex-juradiss.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/doc/biblatex-juradiss.tex b/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/doc/biblatex-juradiss.tex
new file mode 100644
index 0000000000..8807f75128
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/doc/biblatex-juradiss.tex
@@ -0,0 +1,910 @@
+% biblatex-juradiss documentation 2012/07/17 v0.1f
+%
+% Copyright (c) 2012 Tobias Schwan <tobias.schwan(aat)gmx.de>
+% 2020 Herbert Voß hvoss@tug.org
+\begin{filecontents}[force,noheader]{\jobname.bib}
+@ARTICLE{Mustermann1999,
+ author = {Mustermann, Michael},
+ title = {Gestaltungsmöglichkeiten bei Anreizsystemen},
+ journal = {NZG},
+ year = {1999},
+ pages = {797-900},
+ gender = {sm},
+}
+
+@BOOK{Bruemmerhoff2007,
+ author = {Brümmerhoff, Dieter},
+ gender = {sm},
+ title = {Finanzwissenschaft},
+ edition = {9},
+ location = {München u.a.},
+ year = {2007},
+ stand = {ok},
+ version = {1}
+}
+
+@BOOK{Birk2008,
+ author = {Birk, Dieter},
+ gender = {sm},
+ title = {Steuerrecht},
+ edition = {12},
+ location = {Heidelberg},
+ year = {2009},
+ stand = {ok},
+ version = {1}
+}
+
+@BOOK{Birk1994,
+ author = {Birk, Dieter},
+ gender = {sm},
+ title = {Allgemeines Steuerrecht},
+ shorttitle = {Allg. Steuerrecht},
+ edition = {2},
+ location = {München},
+ year = {1994},
+ version = {1}
+}
+
+@BOOK{Hausmann1998,
+ author = {Hausmann, Benedikt},
+ gender = {sm},
+ title = {Notwendige Erwerbsaufwendungen},
+ location = {Berlin},
+ year = {1998},
+ addendum = {zugl.: Diss. jur. Univ. Münster 1997},
+}
+
+@COMMENTARY{Duck2009,
+ editor = {Duck, Dietmar},
+ gender = {sm},
+ title = {Spannendesgesetz, Kommentar},
+ edition = {2},
+ location = {München},
+ year = {2009},
+}
+
+@COMMENTARY{Gans2002,
+ editor = {Gans, Dietmar},
+ editora = {Pantoffel, Frank},
+ editoratype = {founder},
+ gender = {pm},
+ title = {Handbuch des Rechts, des sonstigen Rechts und übriger Gesetze, Kommentar},
+ shorthand = {Handbuch des Rechts},
+ edition = {2},
+ location = {München},
+ year = {2002},
+}
+
+@INCOLLECTION{Schwaiger2004,
+ author = {Schwaiger, Gregor},
+ editor = {Grundmann, Stefanie and Haar, Brigitte and Merkt, Hans and Mülbert,
+ Peter and Wellenhof, Marina},
+ title = {Aufsichtsrat und Autonomie},
+ pages = {337},
+ booktitle = {Unternehmen und Verantwortung, Festschrift für Klaus J. Hauptmann},
+ location = {Berlin},
+ year = {2004},
+ stand = {ok},
+ shorttitle = {FS Hauptmann},
+}
+
+@PERIODICAL{Lutz1995,
+ author = {Lutz, Martin},
+ gender = {sm},
+ title = {Möglichkeiten der Verbesserung},
+ journal = {ZHR},
+ year = {1995},
+ volume = {159},
+ pages = {287},
+}
+
+@ARTICLE{Oldag2011,
+ author = {Oldag, Andreas},
+ title = {Wenn Teenies Banker spielen},
+ journal = {SZ},
+ pages = {30},
+ gender = {sm},
+ entrysubtype = {newspaper},
+ volume = {208},
+ date = {2011-09-09},
+}
+
+@ONLINE{Hirte2009,
+ author = {Hirte, Heribert},
+ title = {Stellungnahme zum Fraktionsentwurf eines Gesetzes zur Angemessenheit
+ der Vorstandsvergütung (VorstAG) für den Deutschen Bundestag},
+ url = {http://www.jura.uni-augsburg.de/fakultaet/lehrstuehle/moellers/materialien/materialdateien/040_deutsche_gesetzgebungsgeschichte/gesetz_angemessenheit_vorstandsverguetung/pdf/stellungnahme_3.pdf},
+ urldate = {2011-04-03}
+}
+
+@JURISDICTION{bverfg:jubilaeum,
+ author = {BVerfG},
+ gender = {sn},
+ title = {Jubiläumsrückstellung},
+ decision = {Beschluss},
+ date = {2009-05-12},
+ sign = {2 BvL 1/00},
+ officialvolume = {BVerfGE 123},
+ officialpages = {111},
+ journaltitle = {FR},
+ journalyear = {2009},
+ pages = {873},
+ decisionname = {Jubiläumsrückstellung},
+}
+
+@LEGAL{bt16-12278,
+ journalsubtitle = {16/12278},
+ journaltitle = {BT-Drs.},
+ title = {BT-Drucksache 16/12278}
+}
+
+@ARTICLE{Kirchhof2000,
+ author = {Kirchhof, Ferdinand},
+ title = {Die Tauglichkeit von Abgaben zur Lenkung des Verhaltens},
+ journal = {DVBl},
+ year = {2000},
+ pages = {1166},
+ gender = {sm},
+}
+
+@ARTICLE{Kirchhof2006,
+ author = {Kirchhof, Paul},
+ title = {Die freiheitsrechtliche Struktur der Steuerrechtsordnung},
+ journal = {StuW},
+ year = {2006},
+ pages = {3},
+ gender = {sm},
+}
+\end{filecontents}
+
+
+\documentclass[toc=graduated,parskip=half-,DIV=13,fontsize=11pt,paper=a4]{scrartcl}
+
+\usepackage{eurosym} % Damit das Euro-Symbol dargestellt werden kann
+\usepackage{libertinus-otf} % Damit LaTex Umlaute usw. erkennt
+\setmonofont[Scale=MatchLowercase,FakeStretch=0.9]{AnonymousPro}
+\usepackage[ngerman]{babel}
+\usepackage{xurl}
+\usepackage{listings}
+\lstset{basicstyle=\ttfamily}
+\usepackage{dtk-logos}
+\usepackage{enumitem}
+\setlist{nosep}
+%\raggedbottom % Abstaende zwischen Absaetzen nicht zu gross werden lassen
+
+\usepackage[babel,german=guillemets]{csquotes}
+%%%
+%%% Hier werden die package-Optionen fuer biblatex gesetzt:
+%%%
+\usepackage[%
+ uniquename=true,% Kommt ein Nachname eines Autors mehrfach vor, so wird dieser mit Initialen zitiert.
+ singletitle=true,
+ sorting=nyvt,% Sortierreihenfolge im LitVerz: Zuerst nach Name, beim gleichen Autor nach Jahr, Volume und Titel
+ sortcites=true,
+ maxnames=3,
+ idemtracker=constrict,%
+ style=biblatex-juradiss,% Nutzung des biblatex-Stils biblatex-juradiss
+ ibidtracker=false,% Kein ebenda
+ datezeros=false,% Keine führende Null vor Datumsziffern: 9. 2. 1982 statt 09.02.1988
+ date=short,% Datum als Ziffern, keine ausgeschriebenen Monatsnamen
+]{biblatex}
+
+\usepackage{xspace}
+\addbibresource{\jobname.bib}
+
+%%% Kategorien für die einzelnen Literaturverzeichnisbeispiele
+%%% zum Darstellen der LitVerz-Ausgabe beim jew. Beispiel
+\DeclareBibliographyCategory{1}
+\addtocategory{1}{Mustermann1999}
+
+\DeclareBibliographyCategory{2}
+\addtocategory{2}{Bruemmerhoff2007}
+
+\DeclareBibliographyCategory{3}
+\addtocategory{3}{Hausmann1998}
+
+\DeclareBibliographyCategory{4}
+\addtocategory{4}{Birk2008,Birk1994}
+
+\DeclareBibliographyCategory{5}
+\addtocategory{5}{Duck2009}
+
+\DeclareBibliographyCategory{6}
+\addtocategory{6}{Gans2002}
+
+\DeclareBibliographyCategory{7}
+\addtocategory{7}{Schwaiger2004}
+
+\DeclareBibliographyCategory{8}
+\addtocategory{8}{Lutz1995}
+
+\DeclareBibliographyCategory{9}
+\addtocategory{9}{Oldag2011}
+
+\DeclareBibliographyCategory{10}
+\addtocategory{10}{Hirte2009}
+
+\def\b-j{\texttt{biblatex-juradiss}\xspace}
+\def\bib{\texttt{biblatex}\xspace}
+\def\cs#1{\texttt{\textbackslash#1}}
+
+\usepackage{mdframed,xcolor}
+\def\showbib#1{%
+\begin{mdframed}[
+ leftmargin=0pt,
+ rightmargin=0pt,
+ linecolor=black,
+ backgroundcolor=black!10]
+\vspace{-\normalbaselineskip}
+\printbibliography[category=#1]
+\end{mdframed}}
+
+\usepackage[colorlinks,linktocpage,draft]{hyperref}
+
+
+\begin{document}
+
+%%%%%
+% Frontmatter
+%%%%%
+
+\title{biblatex-juradiss}
+\subtitle{Ver. 0.2}
+\author{Tobias Schwan \and Herbert Voß}
+
+\maketitle
+
+\tableofcontents
+
+\newpage
+\section{Einleitung}
+
+
+Diese Dokumentation erklärt in kurzen Worten die Anpassungen des Stils \b-j und wie man sie
+nutzen kann. Indirekt werden dabei auch einige Funktionen von \bib erläutert, auf das
+aufsetzt. Grundsätzlich sollte man bei Fragen zu den Funktionen von \bib die sehr gute und
+ausführliche Dokumentation von \bib konsultieren. Ohne zumindest das Überfliegen des
+User-Guide in der \bib"=Dokumentation lässt sich \bib und \b-j nicht sinnvoll verwenden.
+Inzwischen gibt es auch eine deutsche Fassung.
+
+Zum Schnelleinstieg werden im folgenden Abschnitt »Kurzanleitung« die Voraussetzungen zur Verwendung von \b-j
+kurz erläutert. Danach erfolgt die Darstellung der Zitierstile der unterschiedlichen Dokumentenarten
+mit Beispielen.
+
+Dieser Dokumentation füge ich meinem Paket auch als \texttt{.tex}-Datei an, damit die Funktionsweise des Stils
+anhand eines konkreten Beispiels besser nachvollzogen werden kann.
+
+
+\section{Kurzanleitung}
+
+
+Anleitung zur Installation von \texttt{biblatex-juradiss} (unter Windows), falls man keine offizielle
+Installation von \MiKTeX oder \TeXLive hat; dann wäre ohnehin alles vorhanden:
+
+1. Installation von Mik\TeX/\TeX Live
+
+2. Installation von packages über den PackageManager:
+\begin{itemize}
+\item \texttt{biblatex}
+\item \texttt{biblatex-dw}
+\item \texttt{etoolbox}
+\item \texttt{logreq}
+\item \texttt{csquotes}
+\item \texttt{juramisc} (wenn man die Dokumentenklasse hiervon benutzen möchte)
+\end{itemize}
+
+
+\section{Installation}
+
+\b-j setzt auf den Paketen \bib und biblatex-dw auf. Grund hierfür ist, dass \bib alle
+Funktionen erst bereitstellt, die es ermöglichen individuelle Zitierstile zu entwickeln. Die Zitierweise
+deutscher Juristen ist allerdings so speziell im Vergleich zu dem sonst üblichen, dass es noch
+zusätzlich weiterer Funktionen bedarf, diese vollständig abzubilden. Diese finden sich in
+\texttt{biblatex-dw}.
+Zwar hätte man diese auch aus dem Paket herausnehmen und in \b-j integrieren können, aber der
+Aufwand hierfür erschien mir zu groß. Zudem ist mit dem gut gepflegten Paket \texttt{biblatex-dw}
+sichergestellt, dass die von diesem bereitgestellten Funktionen auch trotz der sehr schnellen
+Entwicklung von \bib zuverlässig erhalten und kompatibel bleiben.
+
+Dies führt dazu, dass zur Verwendung von \b-j auch das Paket \texttt{biblatex-dw} vorhanden sein
+muss.
+Dessen Funktionen werden über \b-j direkt eingebunden, es muss nicht erst per Paketoption über
+\bib geladen werden.
+
+Um \b-j zu verwenden muss dieses als Paketoption von \bib eingebunden werden. Dies geschieht
+durch die Anweisung
+
+\cs{usepackage[style=biblatex-juradiss]\{biblatex\}}
+
+Sofern man die Dateien nicht über eine \TeX"=Distribution, wie \TeXLive oder Mik\TeX\ installiert,
+kopiert man die Dateien \texttt{biblatex-juradiss.cbx} und \texttt{biblatex-juradiss.bbx} in das
+Verzeichnis
+
+\texttt{<TEXMFLOCAL>/tex/latex/biblatex-juradiss}
+
+wobei
+\texttt{<TEXMFLOCAL>} der Wurzelpfad der \TeX"=Installation ist. Danach muss man die Dateiliste
+bei \MiKTeX über das Menü oder allgemein durch Ausführen von \texttt{texhash}
+aktualisieren.
+
+Die \texttt{biber.conf}-Datei legt man einfach in den gleichen Ordner, wie die \TeX-Datei.
+
+
+\section{Dokumentenklasse}
+
+
+Ich habe für die Erstellung meiner Doktorarbeit die Dokumentenklasse \texttt{jurabook} aus dem
+Paket \texttt{juramisc} verwendet. Das Paket bietet viele nützliche Optionen und integriert bereits die
+von Juristen verwendete Bezeichnung der Gliederungsebenen (A., I., 1., a), aa), aaa), (1), (a)).
+
+Leider wird das Paket seit einiger Zeit nicht mehr gepflegt, weshalb es inzwischen vielleicht nicht mehr uneingeschränkt zu empfehlen ist.
+
+Eine Alternative ist die Verwendung der Dokumentenklasse \texttt{book} und die individuelle
+Anpassung des Inhaltsverzeichnisses. Gerade mit dem Paket \texttt{titletoc} ist das keine große
+Kunst. Will man seine Doktorarbeit später in einem Verlag veröffentlichen empfielt sich das ohnehin.
+Denn dieser hat oftmals seine eigene LaTeX-Vorlage, die Fragen wie Fußnotenumbruch und
+Formatierung der Kopfzeilen selbst regelt. Hier kann die Umstellung von \texttt{jurabook} auf die
+verlagsspezifische Vorlage umständlicher sein, als wenn man das zuvor selbst angepasst hat (so war
+es jedenfalls bei mir), denn dann kann man die eigenen Anpassungen durch die des Verlags ersetzen,
+bei \texttt{jurabook} wusste ich im Nachhinein nicht mehr, welche Anpassung auf \texttt{jurabook}
+abzielte und welche auf generelle Dinge, wie den Fußnotenumbruch.
+
+
+\section{Verhältnis zu \texttt{biblatex-jura}}
+
+
+\texttt{biblatex-jura} hat ebenso wie dieses Paket das Ziel das Schreiben juristischer Texte mit
+\LaTeX{} zu
+ermöglichen. Dementsprechend hatte ich zu Beginn auch dieses Paket verwendet und versucht, es für
+meine Bedürfnisse anzupassen. Mit der Zeit musste ich allerdings feststellen, dass es mit der
+weiteren Entwicklung von \bib nicht Schritt hält. Irgendwann hatte ich es soweit modifiziert, dass es
+sinnvoller wurde, die eigenen Anpassungen direkt auf Basis von \bib zu schreiben.
+
+Eine Mithilfe bei \texttt{biblatex-jura} schien ebenfalls nicht sinnvoll, da dieses sich an den
+Zitiervorgaben
+des Nomos-Verlags orientiert, mein Stil aber meinen Vorstellungen einer Doktorarbeit entsprechen
+sollte. Außerdem verwendet \texttt{biblatex-jura} teilweise interne Funktionen von \bib, die nicht
+dafür
+da sind, durch externe Pakete verwendet oder geändert zu werden. Das führte in der Vergangenheit
+zu Inkompatibilitäten von \texttt{biblatex-jura} zu neueren Versionen von \bib. Bei meinem Stil setze
+ich
+(nahezu) ausschließlich auf Funktionen von \bib auf, die dieses hierfür anbietet, was die
+Kompatibilität langfristig erhalten sollte.
+
+
+\section{Einzelne Eintragstypen}
+
+
+Hier stelle ich anhand von Beispielen die einzelnen Eintragstypen vor, die ich für meinen Stil angepasst habe:
+
+
+\subsection{Eintragstyp \texttt{article}}
+
+
+Zeitschriftenartikel werden als Fußnote\footcite[800]{Mustermann1999}, im laufenden Text als
+\cite[800]{Mustermann1999} oder am Ende so ausgegeben.~\parencite[800]{Mustermann1999}
+
+\begin{lstlisting}[frame=single,xleftmargin=\fboxsep,xrightmargin=\fboxsep]
+Zeitschriftenartikel werden als Fußnote\footcite[800]{Mustermann1999}, im
+laufenden Text als \cite[800]{Mustermann1999} oder am Ende so
+ausgegeben.~\parencite[800]{Mustermann1999}
+\end{lstlisting}
+
+Es gibt zwar auch die Möglichkeit die konkrete Fundstelle (hier in runden Klammern) einfach nur
+durch ein Komma zu trennen, aber gerade wenn man mehrere Zitate hintereinander setzt, helfen die
+runden Klammern m.E. beim Trennen der einzelnen Zitate. Die kursive Schrift von Personen fördert
+bei Fußnoten mit vielen Belegen zudem die Lesbarkeit.
+
+Der Literaturverzeichniseintrag sieht so aus:
+
+%\hrulefill\vspace{-\normalbaselineskip}
+%\printbibliography[category=1]
+%\hrulefill
+\showbib{1}
+
+Teilweise wird inzwischen empfohlen im Literaturverzeichnis nicht nur die Anfangs-, sondern auch
+die Endseite eines Beitrags anzugeben, um zu zeigen, dass man nicht lediglich blind zitiert hat,
+sondern den Beitrag zumindest mal selbst in der Hand hatte. Im naturwissenschaftlichen Bereich ist
+das wohl üblicher. Ich finde die Idee nicht schlecht, jedenfalls unterstützt \b-j das auch seit Version
+0.1f.
+
+
+\subsection{Eintragssubtyp \texttt{newsletter}}
+
+
+Nicht oft, aber manchmal kommt es durchaus vor, dass man in juristischen Texten auch
+Tageszeitungen zitiert (zB die SZ oder die FAZ, in Dissertationen kommt auch schon mal die TAZ vor..)
+
+Für Tageszeitungen sieht \bib keinen eigenen Stil vor. Es besteht aber die Möglichkeit eigene Stile für
+Unterarten von Eintragstypen zu definieren. Ein Eintrag wird einem bestimmten \texttt{entrysubtitle}
+zugeordnet, indem man dem jeweiligen Eintrag in der Literaturdatenbank das Feld
+\texttt{entrysubtype}
+hinzufügt und in diesem den entsprechenden Subtyp angibt.
+
+Für Tageszeitungen habe ich das über den Typ \texttt{newsletter} gemacht. In diesem gibt man bei
+Tageszeitungen neben dem Autor und dem Namen der Zeitschrift das Datum der Ausgabe (Feld
+\texttt{date}, Format: \texttt{JJJJ-MM-TT}), sowie deren Nummer (Feld \texttt{volume}) an.
+
+\clearpage
+
+
+Beispielseintrag:
+
+\begin{lstlisting}
+@ARTICLE{Oldag2011,
+ author = {Oldag, Andreas},
+ gender = {sm},
+ title = {Wenn Teenies Banker spielen},
+ journal = {SZ},
+ pages = {30},
+ entrysubtype = {newspaper},
+ volume = {208},
+ date = {2011-09-09},
+}
+\end{lstlisting}
+
+Ausgabe als Fußnote\footcite{Oldag2011}, im laufenden Text als
+\cite{Oldag2011} oder am Ende so ausgegeben.~\parencite{Oldag2011}
+
+Literaturverzeichniseintrag:
+
+%\hrulefill\vspace{-\normalbaselineskip}
+%\printbibliography[category=9]
+%\hrulefill
+\showbib{9}
+
+
+\subsection{Eintragstyp \texttt{book}}
+
+
+Monografien, also beispielsweise Lehrbücher oder Dissertationen
+als Fußnote\footcite[55]{Bruemmerhoff2007}, im laufenden Text als
+\cite[55]{Bruemmerhoff2007} oder am Ende so ausgegeben.~\parencite[55]{Bruemmerhoff2007}
+
+Der Literaturverzeichniseintrag sieht so aus:
+
+%\hrulefill\vspace{-\normalbaselineskip}
+%\printbibliography[category=2]
+%\hrulefill
+
+\showbib{2}
+
+Disserationen sehen in der Fußnote\footcite[231]{Hausmann1998}, im laufenden Text
+\cite[231]{Hausmann1998} und am Ende wie normale Bücher aus.~\parencite[231]{Hausmann1998}
+
+Nur im Literaturverzeichnis füge ich die Universität der Dissertation usw. in das Feld
+\texttt{addendum} ein:
+
+\begin{lstlisting}
+@BOOK{Hausmann1998,
+ author = {Hausmann, Benedikt},
+ gender = {sm},
+ title = {Notwendige Erwerbsaufwendungen},
+ location = {Berlin},
+ year = {1998},
+ addendum = {zugl.: Diss. jur. Univ. Münster 1997},
+}
+\end{lstlisting}
+
+Das wird dann im LitVerz-Eintrag einfach hinten angefügt:
+
+%\hrulefill\vspace{-\normalbaselineskip}
+%\printbibliography[category=3]
+%\hrulefill
+\showbib{3}
+
+
+Gibt es vom gleichen Autor mehrere Einträge, wird in die Fußnote zur Unterscheidung der Titel des Buchs
+geschrieben, wenn die Fußnote sonst nicht eindeutig ist.
+
+Ist bei Monografien das Feld \texttt{shorttitle} definiert, so wird dessen Inhalt genommen, was in der
+Regel besser aussieht.
+
+Keine Zuordnungsprobleme bestehen, wenn der weitere Eintrag ein Zeitschriften- oder
+Festschriftenbeitrag ist, denn diese sind über den Namen der Zeitschrift oder der Festschrift, der in
+der Fußnote stets mit zitiert wird, bereits eindeutig unterscheidbar.
+
+Beispiel für eine Fußnote von zwei Monografien eines
+Autors\footcites[231]{Birk2008}[34]{Birk1994}, im laufenden Text als \cites[231]{Birk2008}[34]{Birk1994}
+und am Ende.~\parencites[231]{Birk2008}[34]{Birk1994}
+
+\begin{lstlisting}[frame=single,xleftmargin=\fboxsep,xrightmargin=\fboxsep]
+Beispiel für eine Fußnote von zwei Monografien eines
+Autors\footcites[231]{Birk2008}[34]{Birk1994}, im laufenden Text als
+\cites[231]{Birk2008}[34]{Birk1994} und am
+Ende.~\parencites[231]{Birk2008}[34]{Birk1994}
+\end{lstlisting}
+Im Literaturverzeichnis wird entsprechend angegeben, wie das jeweilige Werk zitiert wird, der Zusatz
+»zitiert als« erscheint bei Zeitschriften nie, bei Festschriften immer:
+
+%\hrulefill\vspace{-\normalbaselineskip}
+%\printbibliography[category=4]
+%\hrulefill
+\showbib{4}
+
+
+\subsection{Eintragstyp \texttt{commentary}}
+
+
+Die Zitation von juristischen Kommentaren ist die größte Herausforderung für meinen Stil gewesen.
+Zitiert wird ein Kommentar, indem das \texttt{prenote}-Feld genutzt wird. Der \cs{cite}-Befehl von
+\bib kennt ein
+\texttt{prenote} und ein \texttt{postnote}-Feld. Bei dem Befehl \cs{cite[50]\{bibtexkey\}} wird das
+\texttt{postnote}-Feld mit dem Inhalt der eckigen Klammer gefüllt (hier die 50). Dessen Inhalt kommt
+an das
+Ende des jeweiligen Zitats (deshalb POSTnote-Feld). Das \texttt{prenote}-Feld wird mit dem Inhalt
+der ersten
+eckigen Klammer gefüllt, wenn man dem \texttt{bibtex}-Schlüssel im \cs{cite}-Befehl zwei eckige
+Klammern voranstellt: \cs{cite[\emph{Bearbeiter}][50]\{bibtexkey\}}.\footnote{Mehr zu der
+Funktionsweise von \texttt{prenote} und \texttt{postnote}-Feldern ist in der Dokumentation von \bib
+zu finden.}
+
+Wird bei Kommentaren die Auflagenzahl angegeben, so wird diese als kleine hochgestellte Zahl
+hinter den Herausgeber, oder den Kommentarnamen geschrieben. So lassen sich Zitate von
+Kommentar"=Bearbeitern aus unterschiedlichen Auflagen recht einfach voneinander unterscheiden.
+
+Das Zitat eines juristischen Kommentars als Fußnote\footcite[Donald][§~4 Rn.~443]{Duck2009},
+im laufenden Text als \cite[Donald][§~4 Rn.~443]{Duck2009} oder am Ende.~\parencite[Donald][§~4 Rn.~443]{Duck2009}
+
+% Hier habe ich den Code manuell eingegeben, da die Darstellung des Stils danach differenziert,
+%ob er sich in einer Fußnote befindet oder nicht, das ist hier bei der Doku halt nicht der Fall.
+%Für diesen Sonderfall wollte ich aber nicht den Stil nochmal umbasteln...
+%\emph{Donald}, in: \emph{Duck\textsuperscript{\tiny{2}}}, §~4 Rn.~443
+
+Im Literaturverzeichnis sieht dieser wie folgt aus:
+
+%\hrulefill\vspace{-\normalbaselineskip}
+%\printbibliography[category=5]
+%\hrulefill
+\showbib{5}
+
+Kommentare werden üblicherweise mit den Namen der Herausgeber zitiert, genauso üblich ist es
+aber auch, den Namen eines alten Herausgebers als Zitat zu verwenden, oder einen Eigennamen.
+Hierfür ist das Feld \texttt{shorthand} da. Ist es nicht leer, so wird dessen Inhalt statt die Namen der
+Herausgeber für das Fußnotenzitat verwendet. Will man einem oder mehreren Herausgebern oder
+Autoren eine bestimmte Eigenschaft zuordnen z.\,B. Begründer oder Fortführer, so kann man dies,
+indem man dem Eintrag in der Literaturdatenbank das Feld \texttt{editortype} hinzufügt und in
+dieses
+beispielsweise \texttt{founder} schreibt. Unterschiedliche Arten kann man unterscheiden, indem man
+diese
+dann in das Feld \texttt{editora} (mit \texttt{editoratype}) usw. einträgt.\footnote{Mehr hierzu ist in
+der
+Dokumentation von \bib zu finden.} Bei Autoren geht das genauso, nur dass es hier kein
+\texttt{authora} gibt,
+sondern stattdessen \texttt{namea} usw.
+
+Hier ein Kommentar, bei dem ein Herausgeber zugleich Begründer des Werks war. Außerdem ist es bei
+diesem üblich, ihn mit einem Eigennamen, statt den Herausgebern zu zitieren.
+
+Der Beispieleintrag sieht dann so aus:
+
+\begin{lstlisting}
+@COMMENTARY{Gans2002,
+ editor = {Gans, Dietmar},
+ editora = {Pantoffel, Frank},
+ editoratype = {founder},
+ gender = {pm},
+ title = {Handbuch des Rechts, des sonstigen Rechts und übriger
+ Gesetze, Kommentar},
+ shorthand = {Handbuch des Rechts},
+ edition = {2},
+ location = {München},
+ year = {2002},
+}
+\end{lstlisting}
+
+Der Eintrag als Fußnote\footcite[Schneider][§~4 Rn.~443]{Gans2002}, oder im laufenden
+Text als \cite[Schneider][§~4 Rn.~443]{Gans2002}, beziehungsweise ganz am Ende.~\parencite[Schneider][§~4 Rn.~443]{Gans2002}
+
+% Hier habe ich den Code manuell eingegeben, da die Darstellung des Stils danach differenziert,
+%ob er sich in einer Fußnote befindet oder nicht, das ist hier bei der Doku halt nicht der Fall.
+%Für diesen Sonderfall wollte ich aber nicht den Stil nochmal umbasteln...
+%\emph{Schneider}, in: \emph{Handbuch des Rechts\textsuperscript{\tiny{2}}}, §~4 Rn.~443.
+
+Im Literaturverzeichnis sieht dieser wie folgt aus:
+
+%\hrulefill\vspace{-\normalbaselineskip}
+%\printbibliography[category=6]
+%\hrulefill
+\showbib{6}
+
+
+\subsection{Eintragstyp \texttt{incollection}}
+
+
+Festschriften haben folgende notwendige Felder im Literaturdatenbank-Eintrag:
+
+\texttt{author} = Name des Festschriftautors\\
+\texttt{title} = Titel der Festschrift\\
+\texttt{pages} = Seitenzahl, an der der Beitrag beginnt\\
+\texttt{editor} = Name des Herausgebers der Festschrift\\
+\texttt{booktitle} = Name der Festschrift\\
+\texttt{shorttitle} = Abkürzung für die Fußnote (zB FS Lutter)
+
+Optional (wie bei allen Monografien), zB:\\
+\texttt{location} = Erscheinungsort der Festschrift\\
+\texttt{year} = Erscheinungsjahr
+
+Hat eine Festschrift viele Herausgeber, kann man einstellen, dass im Literaturverzeichnis nur der
+erste mit dem Zusatz u.a. genannt wird. Die Anzahl, bis zu der alle Herausgeber genannt werden
+sollen definiert man über die Paketoption von \bib maxnames (ich verwende \texttt{maxnames=3}).
+
+So sieht es als Fußnote\footcite{Schwaiger2004}, so im laufenden Text \cite{Schwaiger2004} und
+so am Ende eines Satzes.~\parencite{Schwaiger2004}
+
+%\cite{Schwaiger2004}
+
+Im Literaturverzeichnis sieht der Eintrag einer Festschrift mit fünf Herausgebern wie folgt aus:
+
+%\hrulefill\vspace{-\normalbaselineskip}
+%\printbibliography[category=7]
+%\hrulefill
+\showbib{7}
+
+
+\subsection{Eintragstyp \texttt{periodical}}
+
+
+Der Eintragstyp \texttt{periodical} ist an sich eine Abwandlung des Eintragstyps \texttt{article}. Er ist
+gedacht für Archivzeitschriften, die neben dem Jahrgang auch zusätzlich eine laufende Nummer für
+das jeweilige Jahr verwenden (zB AöR, AcP, ZHR, und für den Steuerrechtler: DStJG). Die
+Jahrgangsnummer wird in das Feld \texttt{volume} eingetragen.
+
+Als Fußnote\footcite{Lutz1995}, im laufenden Text als \cite{Lutz1995} und am Ende eines Satzes.~\parencite{Lutz1995}
+
+Literaturverzeichniseintrag:
+
+%\hrulefill\vspace{-\normalbaselineskip}
+%\printbibliography[category=8]
+%\hrulefill
+\showbib{8}
+
+
+\subsection{Eintragstyp \texttt{online}}
+
+
+Dieser Eintragstyp ist für Dokumente, die nur online zugänglich sind, z.\,B. Pressemitteilungen oder
+Stellungnahmen von Verbänden oder Professoren zu Gesetzesvorhaben etc.
+
+Derzeit sieht dieser Eintragstyp lediglich die Felder \texttt{author}, \texttt{title}, \texttt{shorttitle},
+sowie \texttt{url} und \texttt{urldate} vor. Die URL wird nur im LitVerz angezeigt, zusammen mit dem
+Datum des letzten Abrufs (\texttt{urldate}, Format: \texttt{JJJJ-MM-TT}). Wenn ein \texttt{shorttitle}
+eingetragen wird, so wird dieser auch in der Fußnote aufgeführt.
+
+Ausgabe als Fußnote\footcite[3]{Hirte2009}, im laufenden Text als \cite[3]{Hirte2009} oder am Ende
+eines Satzes.~\parencite[3]{Hirte2009}
+
+%\cite[3]{Hirte2009}
+
+Der Eintrag im Literaturverzeichnis sieht so aus:
+
+%\hrulefill\vspace{-\normalbaselineskip}
+%\printbibliography[category=10]
+%\hrulefill
+\showbib{10}
+
+
+\subsection{Eintragstyp \texttt{jurisdiction}}
+
+
+Ein kleines Alleinstellungsmerkmal dieses Stils ist die Unterstützung eines Verweisstils für
+juristische Literatur UND für Gerichtsurteile, sowie offizielle Dokumente. Hierfür gibt es zwar auch
+das Paket \texttt{jurarsp}. Es wurde aber in den letzten Jahren nicht mehr weiterentwickelt. In seiner
+Funktionsvielfalt ist es meinem Stil zwar in vielen Bereichen überlegen und auch den ein oder
+anderen Darstellungsfehler wegen inzwischen eingetretener Inkompatibilität konnte ich durch
+Änderung der Paketdateien erreichen. Aber \bib und \texttt{jurarsp} arbeiten nicht zusammen. So
+sieht \bib
+nicht, dass zwischen zwei Literaturzitaten ein Rechtsprechungszitat ist und wendet die
+idem-Funktion an. Auch in die \cs{cite}-Befehle kann man die Rechtsprechungszitate nicht
+integrieren. Außerdem musste man \texttt{bibtex} immer einmal separat über die
+Rechtsprechungs"=Bibdatei laufen lassen. Diese Nachteile haben mich veranlasst einen eigenen Stil
+für Rechtsprechungszitate zu schreiben. Dafür dient der Eintragstyp \texttt{jurisdiction}. Genauso wie
+der
+Eintragstyp legal ist er von \bib zwar vorgesehen, enthält aber keine Zitiervorgaben.
+
+Der Eintragstyp jurisdiction hat folgende Felder:
+
+\begin{itemize}
+
+\item \texttt{author} = Name des Gerichts (zB BFH, BVerfG, BGH etc.)
+\item \texttt{gender} = Für die idem-Funktion (zB dass. bei Eintrag: "'sn"', zB für das BVerfG, oder
+ders., dann Eintrag: "'sm"', zB für den BGH)\footnote{Ausführliche Erklärung zu \texttt{gender} in der
+\bib"=Dokumentation.}
+\item \texttt{date} = Urteilsdatum in der Form JJJJ-MM-TT
+\item \texttt{decision} = für Art der Entscheidung, zB Urteil oder Beschluss
+\item \texttt{sign} = Aktenzeichen
+\item \texttt{officialvolume} = Name der Entscheidungssammlung oder der Zeitschrift der primären
+Fundstelle inkl. Band oder Jahrgang (zB BGHZ 31 oder BVerfGE 13, aber auch NJW 2011 oder juris
+(nv)) Die primäre Fundstelle ist oftmals eine Entscheidungssammlung. Hier ist es dann manchmal
+üblich, eine weitere Fundstelle in einer juristischen Zeitschrift anzugeben. Zu diesem Zweck gibt es
+die Möglichkeit die zweite Fundstelle als sekundäre Fundstelle anzugeben. Das ist aber optional.
+\item \texttt{officialpages} = Erste Seite der Entscheidung in der primären Fundstelle
+\item \texttt{pages} = Erste Seite des Urteils in der sekundären Fundstelle
+\item \texttt{journaltitle} = Zeitschriftenname in der sekundären Fundstelle
+\item \texttt{journalyear} = Zeitschriftenjahrgang in der sekundären Fundstelle
+\item \texttt{decisionname} = Entscheidungsname (zB. Centros oder Herrenreiter)
+\end{itemize}
+
+Will man die obigen Feldnamen (also \texttt{decision} und \texttt{sign} usw.) in seiner
+Literaturdatenbank verwenden,
+so muss man \bib zwingend mit \texttt{biber} benutzen und nicht mit \texttt{bibtex}. Denn \bib
+bringt zwar von
+Hause aus den Eintragstyp \texttt{jurisdiction} mit, aber keine Felder die speziell für diesen
+Eintragstyp
+benötigt werden, also Felder für das Aktenzeichen, die primäre und sekundäre Fundstelle usw. Um
+benutzerdefinierte Felder verwenden zu können bietet \bib nur die Möglichkeit die Felder user[a-f]
+zu verwenden. Da der Typ \texttt{jurisdiction} fast nur aus benutzerdefinierten Feldern besteht,
+würde das
+die Eingabe von Einträgen in die Literaturdatenbank schwierig machen. \texttt{biber} bietet dafür die
+Möglichkeit in der Literaturdatenbank eigene Feldnamen zu verwenden, die dann bei Erstellung des
+\LaTeX"=Dokuments in die internen Feldnamen von \bib umbenannt werden. Intern arbeitet mein Stil
+daher mit user[a-f], in der Literaturdatenbank können aber die aussagekräftigen Namen verwendet
+werden.
+
+Zudem muss man die Datei \texttt{biber.conf} in dem Ordner anlegen, in dem die \texttt{.tex}-Datei
+liegt. Diese hat dann folgenden Inhalt:
+
+\begin{lstlisting}
+<map>
+ <bibtex>
+ <globalfield>
+ decision usera
+ sign userb
+ officialvolume userc
+ officialpages userd
+ journalyear usere
+ decisionname userf
+ </globalfield>
+ </bibtex>
+</map>
+\end{lstlisting}
+
+Ausgabe als Fußnote\footcite[3]{bverfg:jubilaeum}, im laufenden Text als \cite[3]{bverfg:jubilaeum}
+oder am Ende eines Satzes.~\parencite[3]{bverfg:jubilaeum}
+
+Einen Eintrag für das Literaturverzeichnis kann ich derzeit noch nicht präsentieren. Bisher habe ich nicht vor, ein eigenes Rechtsprechungsverzeichnis in meiner Promotion anzugeben. Daher habe ich bisher auch noch keine Energie in die Erstellung eines solchen Verzeichnisses investiert.
+
+\label{nichtinslitverz}
+Damit die Rechtsprechungszitate nicht doch in komischer Form im Literaturverzeichnis auftauchen
+sollte man diese beim Aufruf des Literaturverzeichnisses durch die Option
+\texttt{nottype=jurisdiction} außen vor lassen. Das gleiche gilt für den Eintragstyp \texttt{legal}:
+
+Beispiel:
+\begin{lstlisting}
+\printbibliography[nottype=jurisdiction,nottype=legal]
+\end{lstlisting}
+
+\begin{mdframed}[
+ leftmargin=0pt,
+ rightmargin=0pt,
+ linecolor=black,
+ backgroundcolor=black!10]
+\vspace{-\normalbaselineskip}
+\printbibliography[nottype=jurisdiction,nottype=legal]
+\end{mdframed}
+
+\subsection{Eintragstyp \texttt{legal}}
+
+
+Zuletzt soll noch der Eintragstyp \texttt{legal} vorgestellt werden. Für diesen gilt das gleiche, wie
+zum Eintragstyp \texttt{jurisdiction}. Nur eigene Feldnamen müssen hier nicht konvertiert werden, da
+ich hier in -- wie ich finde gerade noch vertretbarer Weise -- bestehende Felder verwende.
+
+Das Feld \texttt{journaltitle} enthält dabei die Bezeichnung der jeweiligen Veröffentlichung, zB
+BT-Drs., oder BMF-Schreiben. Das Feld \texttt{journalsubtitle} enthält dann die Bezeichnung des
+konkreten Dokuments, zB 16/12278 oder v.~5.~5.~2011.
+
+Ein Eintrag in der Literaturdatenbank sieht dann beispielsweise so aus:
+
+\begin{lstlisting}
+@LEGAL{bt16-12278,
+ journalsubtitle = {16/12278},
+ journaltitle = {BT-Drs.},
+ title = {BT-Drucksache 16/12278}
+}
+\end{lstlisting}
+
+Da es das besondere von offiziellen Dokumenten ist, dass man keinen Autor angibt (denn dieser ergibt sich aus dem Namen des
+Dokuments) ist dieser auch nicht vorgesehen.
+
+Ausgabe als Fußnote\footcite[3]{bt16-12278}, im laufenden Text als \cite[3]{bt16-12278} oder
+am Ende eines Satzes.~\parencite[3]{bt16-12278}
+
+Ein Verzeichnis der offiziellen Dokumente habe ich derzeit ebenfalls nicht für meine Promotion geplant, dementsprechend gibt
+es hierfür auch noch keinen Stil.
+
+Auch hier ist zu beachten, dass der Eintragstyp beim Darstellen des Literaturverzeichnisses außen vor gelassen werden
+sollte.\footnote{Vgl. oben \qverweis{nichtinslitverz}.}
+
+
+\section{Anleitung zur Anpassung der Stilvorgaben}
+
+
+Nun ist der Stil der Zitate sehr an meinen Vorstellungen orientiert. Hier spielt der individuelle Geschmack auch immer eine Rolle. Dieser Stil soll damit zunächst alles mitbringen, um \LaTeX{} für juristische Texte verwenden zu können und der konkrete Stil soll hierfür als Beispiel dienen, was man damit machen kann. Gerade die Optik der Zitate und der Darstellung des Literaturverzeichnisses lässt sich aber mit sehr einfachen Mitteln anpassen.
+
+Hier ein kleines Beispiel:
+
+Möchte man beispielsweise, dass auch bei Zeitschriften stets ein in: zwischen Autor und
+Zeitschriftenname steht, so kopiert man den bisherigen Code für die Darstellung von
+Zeitschriftenartikeln in die Präambel des eigenen Dokuments und passt diesen den eigenen
+Vorstellungen an:
+
+Schritt 1: Kopieren des entsprechenden Codes aus der biblatex-juradiss.cbx (die cbx-Dateien
+enthalten Code für Zitate, die bbx-Dateien enthalten Code für das Literaturverzeichnis)
+
+Schritt 2: Einfügen des Codes zwischen \cs{documentclass} und \cs{begin\{document\}}:
+
+\begin{lstlisting}
+\DeclareBibliographyDriver{cite:article}{%
+ \printfield{journaltitle}
+ \printfield{year}%
+ \iffieldundef{postnote}%
+ {\addcomma\space%
+ \printfield{pages}}%
+ {}%
+}
+\end{lstlisting}
+
+Schritt 3: Anpassen des Codes. Hier fügen wir einfach nur das in: vor dem Zeitschriftennamen ein. Da
+es hierfür bereits ein Bibmacro von \bib gibt, verwenden wir dieses:
+
+\begin{lstlisting}
+\DeclareBibliographyDriver{cite:article}{%
+ \usebibmacro{in:}% <---
+ \printfield{journaltitle}
+ \printfield{year}%
+ \iffieldundef{postnote}%
+ {\addcomma\space%
+ \printfield{pages}}%
+ {}%
+}
+\end{lstlisting}
+
+Das war es auch schon. Um Näheres über die Möglichkeiten zu erfahren, wie man die Darstellung von
+Zitaten und des Literaturverzeichnisses anpassen kann, empfehle ich die Dokumentation von \bib.
+
+Weitere Beispiele werde ich möglicherweise in einer weiteren Version dieser Doku zeigen. Wenn sich
+Mitstreiter für dieses Projekt finden, sollte es in späteren Versionen möglich sein, Optionen in das
+Paket einzubauen, mit denen man die Darstellung steuern kann, ohne den Code händisch anpassen zu müssen.
+
+
+\section{Weitere Anpassungen}
+
+
+Neben der Anpassung und Neuentwicklung von Zitierstilen habe ich einige weitere Anpassungen vorgenommen.
+Die ich hier nun kurz darstellen will.
+
+
+\subsection{Darstellung mehrerer Personen mit gleichem Nachnamen}
+
+Zitiert man verschiedene Personen mit gleichem Nachnamen, so wird derjenige automatisch mit Initialien zitiert.
+Diese sind, wie alle Eigennamen kursiv gedruckt. Außerdem habe ich den Abstand zwischen den Initialen und dem Nachnamen ein wenig verkleinert.
+
+Beispiel: Wenn man Werke von Ferdinand und Paul Kirchhof zitiert, geht das als Fußnote\footcites[1167]{Kirchhof2000}[5]{Kirchhof2006},
+im laufenden Text als \cites[1167]{Kirchhof2000}[5]{Kirchhof2006} oder am Ende eines Satzes.~\parencites[1167]{Kirchhof2000}[5]{Kirchhof2006}
+
+\begin{lstlisting}[frame=single,xleftmargin=\fboxsep,xrightmargin=\fboxsep]
+Wenn man Werke von Ferdinand und Paul Kirchhof zitiert, geht das als
+Fußnote\footcites[1167]{Kirchhof2000}[5]{Kirchhof2006}, im laufenden Text als
+\cites[1167]{Kirchhof2000}[5]{Kirchhof2006} oder am Ende eines
+Satzes.~\parencites[1167]{Kirchhof2000}[5]{Kirchhof2006}
+\end{lstlisting}
+
+
+
+Die Darstellung im Literaturverzeichnis ändert sich nicht.
+
+
+\subsection{Querverweis}
+\label{querverweis}
+
+
+Zudem habe ich einen Kurzbefehl eingeführt, den ich recht nützlich finde. Mit \cs{qverweis\{\}} kann
+man auf eine andere Stelle im Dokument verweisen. Die Stelle wird mit \cs{label\{Name\}} markiert.
+Der Befehl \cs{qverweis\{Name\}} fügt an der Stelle dann stets den jeweiligen Gliederungspunkt und
+die Seite ein, auf der sich die Markierung befindet.\footnote{Z.B. vgl. hierzu die das derzeitige Kapitel
+Querverweis, unter \qverweis{querverweis}.}
+
+
+\end{document}
+
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biber.conf b/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/latex/biber.conf
index c6f706e3ed..0d8ddc7581 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biber.conf
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/latex/biber.conf
@@ -1,7 +1,3 @@
-% biber.conf [2011/07/17 v0.1f biblatex-juradiss]
-% Release Notes can be found in the README.txt
-
-
<map>
<bibtex>
<globalfield>
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biblatex-juradiss.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/latex/biblatex-juradiss.bbx
index 0ff788d135..d5c30968c1 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biblatex-juradiss.bbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/latex/biblatex-juradiss.bbx
@@ -1,7 +1,7 @@
-% biblatex-juradiss.bbx, Dr. Tobias Schwan 2012
-
-\ProvidesFile{biblatex-juradiss.bbx}[2012/07/17 v0.1f biblatex bibliography style]
-% Release Notes can be found in the README.txt
+% biblatex-juradiss.bbx, Tobias Schwan 2012
+% Änderungen von Herbert Voß -- 2020-03-17
+\ProvidesFile{biblatex-juradiss.bbx}[2020/03/17 v0.2 biblatex bibliography style]
+% Release Notes can be found in the README
\RequireBibliographyStyle{authortitle-dw}%
@@ -12,7 +12,7 @@
% wg. Zusatz wie NJW oder FS X. Benoetigt backend=biber
\ExecuteBibliographyOptions[online,book]{singletitle=true}
-% Zusätzlicher Abstand zwischen den LitVerz-Einträgen
+% Zusätzlicher Abstand zwischen den LitVerz-Einträgen
\setlength{\bibitemsep}{3pt}%
% Trennzeichen hinter dem Namen im LitVerz
@@ -21,9 +21,9 @@
% Reihenfolge der Namen im LitVerz: Nachname, Vorname und Nachname, Vorname usw.
\DeclareNameFormat{sortname}{% Bibliographie
\mkbibemph{%
- \iffirstinits%
- {\usebibmacro{name:last-first}{#1}{#4}{#5}{#7}}%
- {\usebibmacro{name:last-first}{#1}{#3}{#5}{#7}}%
+ \ifgiveninits
+ {\usebibmacro{name:family-given}{\namepartfamily}{\namepartgiveni}{\namepartprefix}{\namepartsuffix}}%
+ {\usebibmacro{name:family-given}{\namepartfamily}{\namepartgiven}{\namepartprefix}{\namepartsuffix}}%
\usebibmacro{name:andothers}%
}
}
@@ -111,6 +111,106 @@
{\printfield{shorthand}}%
\usebibmacro{finentry}}%
+% LitVerz-Format von Rechtsprechungszitaten
+\DeclareBibliographyDriver{jurisdiction}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author/editor}%
+ \newunit
+ \usebibmacro{namex}% <-- Begr. uä als Autoren
+ \usebibmacro{editorx}% <-- Begr. uä als Hrsg.
+ \setunit{\labelnamepunct}\newblock
+ \usebibmacro{maintitle+title}%
+ \newunit
+% \printlist{language}%
+% \newunit\newblock
+ \usebibmacro{volumes+volume+part}%
+ \setunit{\addspace}%
+ \usebibmacro{series+number}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit\newblock
+ \printfield{edition}%
+ \newunit\newblock
+ \usebibmacro{publisher+location+date}%
+ \newunit\newblock
+ \usebibmacro{chapter+pages}%
+ \newunit
+% \printfield{pagetotal}
+% \newunit\newblock
+% \printfield{isbn}%
+% \newunit\newblock
+% \printfield{doi}%
+% \newunit\newblock
+ \usebibmacro{url+urldate}%
+ \newunit\newblock
+ \printfield{addendum}%
+ \newunit\newblock
+ \addcomma\addspace% <-- 'zitiert als: Bearbeiter in XYZ'
+ \mkbibemph{%
+ zitiert\addnbspace% <--
+ als\addcolon\addspace% <--
+ Bearbeiter\addcomma}% <--
+ \usebibmacro{in:}%
+ \iffieldundef{shorthand}%
+ {%
+ \setboolean{zitiertals}{true}%
+ \printnames{labelname}%
+ \setboolean{zitiertals}{false}%
+ }%
+ {\printfield{shorthand}}%
+ \usebibmacro{finentry}}%
+
+
+% LitVerz-Format von Parlaments- und Verwaltungsvorschriften
+\DeclareBibliographyDriver{legal}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author/editor}%
+ \newunit
+ \usebibmacro{namex}% <-- Begr. uä als Autoren
+ \usebibmacro{editorx}% <-- Begr. uä als Hrsg.
+ \setunit{\labelnamepunct}\newblock
+ \usebibmacro{maintitle+title}%
+ \newunit
+% \printlist{language}%
+% \newunit\newblock
+ \usebibmacro{volumes+volume+part}%
+ \setunit{\addspace}%
+ \usebibmacro{series+number}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit\newblock
+ \printfield{edition}%
+ \newunit\newblock
+ \usebibmacro{publisher+location+date}%
+ \newunit\newblock
+ \usebibmacro{chapter+pages}%
+ \newunit
+% \printfield{pagetotal}
+% \newunit\newblock
+% \printfield{isbn}%
+% \newunit\newblock
+% \printfield{doi}%
+% \newunit\newblock
+ \usebibmacro{url+urldate}%
+ \newunit\newblock
+ \printfield{addendum}%
+ \newunit\newblock
+ \addcomma\addspace% <-- 'zitiert als: Bearbeiter in XYZ'
+ \mkbibemph{%
+ zitiert\addnbspace% <--
+ als\addcolon\addspace% <--
+ Bearbeiter\addcomma}% <--
+ \usebibmacro{in:}%
+ \iffieldundef{shorthand}%
+ {%
+ \setboolean{zitiertals}{true}%
+ \printnames{labelname}%
+ \setboolean{zitiertals}{false}%
+ }%
+ {\printfield{shorthand}}%
+ \usebibmacro{finentry}}%
+
+
% LitVerz-Format von Büchern
% Ein 'zitiert als:' bei Büchern, wenn vom gleichen Autor mehrere Werke zitiert werden
\DeclareBibliographyDriver{book}{%
@@ -346,16 +446,16 @@
\renewcommand*{\bibmultinamedelim}{%
\ifbool{zitiertals}%
{\ifnum\value{liststop}>2 \finalandcomma\fi
- \unspace\rm{\slash}\unspace}%
+ \unspace\rmfamily{\slash}\unspace}%
{\ifnum\value{liststop}>2 \finalandcomma\fi
- \addspace\rm{\slash}\addspace}}%
+ \addspace\rmfamily{\slash}\addspace}}%
\renewcommand*{\bibfinalnamedelim}{%
\ifbool{zitiertals}%
{\ifnum\value{liststop}>2 \finalandcomma\fi
- \unspace\rm{\slash}\unspace}%
+ \unspace\rmfamily{\slash}\unspace}%
{\ifnum\value{liststop}>2 \finalandcomma\fi
- \addspace\rm{\slash}\addspace}}%
+ \addspace\rmfamily{\slash}\addspace}}%
% Verschiedene Hrsg. u. Begr. etc für einen Titel
\newbibmacro*{editorx}{%
@@ -397,7 +497,7 @@
\global\undef\bbx@lasthash}%
}%
-% Verschiedene Hrsg. u. Begr. etc für ein Werk
+% Verschiedene Hrsg. u. Begr. etc füür ein Werk
\newbibmacro*{editorxstrg}[1]{%
\iffieldundef{#1type}
{\ifthenelse{\value{#1}>1\OR\ifandothers{#1}}
@@ -484,13 +584,6 @@
% Statt "besucht am" soll "abgerufen am" vor dem Datum des letzten Abrufs stehen
\DefineBibliographyStrings{german}{urlseen = {abgerufen am}}%
-% LitVerz-Format von Rechtsprechungszitaten
-% Bisher mangels Bedürfnis nicht erstellt
-\DeclareBibliographyDriver{jurisdiction}{}
-
-% LitVerz-Format von Parlaments- und Verwaltungsvorschriften
-% Bisher mangels Bedürfnis nicht erstellt
-\DeclareBibliographyDriver{legal}{}
\endinput
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biblatex-juradiss.cbx b/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/latex/biblatex-juradiss.cbx
index 1477886a07..e3ec331cce 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/biblatex-juradiss.cbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-juradiss/latex/biblatex-juradiss.cbx
@@ -1,88 +1,79 @@
-% biblatex-juradiss.cbx, Dr. Tobias Schwan 2012
+% biblatex-juradiss.cbx, Tobias Schwan 2012
+% Änderungen von Herbert Voß -- 2020-03-17
-\ProvidesFile{biblatex-juradiss.cbx}[2012/07/17 v0.1f biblatex citation style]
+\ProvidesFile{biblatex-juradiss.cbx}[2020/03/17 v0.2 biblatex citation style]
% Release Notes can be found in the README.txt
-\RequireCitationStyle{authortitle-dw}%
+\RequireCitationStyle{authortitle-dw}
\ExecuteBibliographyOptions{%
-%nopublisher=false,
-namefont=italic,% Format für Nachnamen (biblatex-dw)
-firstnamefont=italic,% Format für Vornamen (biblatex-dw)
-edstringincitations=false,% Kein (Hrsg) im Fußnoten-Zitat (biblatex-dw)
+ %nopublisher=false,
+ namefont=italic,% Format für Nachnamen (biblatex-dw)
+ firstnamefont=italic,% Format für Vornamen (biblatex-dw)
+ edstringincitations=false,% Kein (Hrsg) im Fußnoten-Zitat (biblatex-dw)
}%
-% Befehl für Querverweise
-\newcommand{\qverweis}[1]{%
-\ref{#1}, %
-S.\ppspace\pageref{#1}}%
+% Befehl für Querverweise
+\newcommand{\qverweis}[1]{\ref{#1}, S.\ppspace\pageref{#1}}
-% Kein S. für die konkrete Fundstelle, dafür in Klammern:
+% Kein S. für die konkrete Fundstelle, dafür in Klammern:
%\DeclareFieldFormat[article]{postnote}{\printfield{\mkfirstpage{pages}} \mkbibparens{#1}}
\DeclareFieldFormat[article]{postnote}{\printfield{pages} \mkbibparens{#1}}
\DeclareFieldFormat[periodical]{postnote}{\printfield{pages} \mkbibparens{#1}}
\DeclareFieldFormat[incollection]{postnote}{\printfield{pages} \mkbibparens{#1}}
-% Kein S. für die konkrete Fundstelle
+% Kein S. für die konkrete Fundstelle
\DeclareFieldFormat[legal]{postnote}{#1}
\DeclareFieldFormat[jurisdiction]{postnote}{#1}
% Trennzeichen zwischen Autor und Titel in Zitaten
\renewcommand*{\nametitledelim}{\addcomma\space}%
-% Weiche für die unterschiedlichen Entrytypes
+% Weiche für die unterschiedlichen Entrytypes
\renewbibmacro*{cite:title}{%
\iffieldundef{entrysubtype}%
- {%
- \usedriver
- {}%
- {cite:\thefield{entrytype}}%
- }%
- {\usedriver
- {}%
- {cite:\thefield{entrytype}:\thefield{entrysubtype}}%
- }%
+ {\usedriver{}{cite:\thefield{entrytype}}}%
+ {\usedriver{}{cite:\thefield{entrytype}:\thefield{entrysubtype}}}%
}
-
% Schmaler Abstand zwischen Initialen des Vor- und Nachnamens
\DeclareNameFormat{labelname}{%
\ifcase\value{uniquename}%
- {\usebibmacro{name:first-last}{#1}{#6}{}{#7}}%
+ \usebibmacro{name:given-family}{\namepartfamily}{\namepartprefixi}{\relax}{\namepartsuffix}%
\or
\ifuseprefix
- {\usebibmacro{name:first-last}{#1}{#4}{#5}{#8}}
- {\usebibmacro{name:first-last-init}{#1}{#4}{#6}{#8}}% <--- schmaler Abstand
+ {\usebibmacro{name:given-family}{\namepartfamily}{\namepartgiveni}{\namepartprefix}{\namepartsuffixi}}%
+ {\usebibmacro{name:given-family-init}{\namepartfamily}{\namepartgiveni}{\namepartprefixi}{\namepartsuffixi}}%
\or
- \usebibmacro{name:first-last-init}{#1}{#3}{#5}{#7}%
- \fi%
+ \usebibmacro{name:given-family-init}{\namepartfamily}{\namepartgiven}{\namepartprefix}{\namepartsuffix}%
+ \fi
\usebibmacro{name:andothers}%
}%
% Schmaler Abstand zwischen Initialen des Vornamens und Nachnamens
-\newbibmacro*{name:first-last-init}[4]{%
+\newbibmacro*{name:given-family-init}[4]{%
\usebibmacro{name:delim}{#2#3#1}%
\usebibmacro{name:hook}{#2#3#1}%
- \ifblank{#2}{}{\mkbibnamefirst{#2}\isdot\addnbthinspace}% <--- schmaler Abstand
+ \ifblank{#2}{}{\mkbibnamegiven{#2}\isdot\addnbthinspace}% <--- schmaler Abstand
\ifblank{#3}{}{%
\mkbibnameprefix{#3}\isdot
- \ifpunctmark{'}
- {}
+ \ifpunctmark{'}%
+ {}%
{\ifuseprefix{\bibnamedelimc}{\bibnamedelimd}}}%
- \mkbibnamelast{#1}\isdot
- \ifblank{#4}{}{\bibnamedelimd\mkbibnameaffix{#4}\isdot}%
+ \mkbibnamefamily{#1}\isdot
+ \ifblank{#4}{}{\bibnamedelimd\mkbibnamesuffix{#4}\isdot}%
}%
% Schmaler Abstand zwischen Initialen des Vor- und Nachnamens
% Kursive Schrift inkl. hochgestellter Auflagenzahl bei Kommentaren
\DeclareNameFormat[commentary]{editor}{%
\iffootnote{%
- \ifcase\value{uniquename}%
- {\usebibmacro{name:first-last}{#1}{#6}{}{#7}}%
+ \ifcase\value{uniquename}
+ \usebibmacro{name:given-family}{\namepartfamily}{\namepartprefixi}{\relax}{\namepartsuffix}%
\or
\ifuseprefix
- {\usebibmacro{name:first-last}{#1}{#4}{#5}{#8}}
- {\usebibmacro{name:first-last-init}{#1}{#4}{#6}{#8}}% <--- schmaler Abstand
+ {\usebibmacro{name:given-family}{\namepartfamily}{\namepartgiveni}{\namepartprefix}{\namepartsuffixi}}%
+ {\usebibmacro{name:given-family-init}{\namepartfamily}{\namepartgiveni}{\namepartprefixi}{\namepartsuffixi}}%<--- schmaler Abstand
\or
- \usebibmacro{name:first-last-init}{#1}{#3}{#5}{#7}%
+ \usebibmacro{name:given-family-init}{\namepartfamily}{\namepartgiven}{\namepartprefix}{\namepartsuffix}%
\fi%
\usebibmacro{name:andothers}%
\ifnumequal{\value{listcount}}{\value{listtotal}}% <--- nur nach dem letzten Namen
@@ -90,11 +81,11 @@ S.\ppspace\pageref{#1}}%
{\mkbibemph{\printfield[edition:super]{edition}}}% <--- Auflagenzahl hinzufügen
{}}%
{}%
- }
+ }%
{\mkbibemph{%
- \iffirstinits%
- {\usebibmacro{name:last-first}{#1}{#4}{#5}{#7}}%
- {\usebibmacro{name:last-first}{#1}{#3}{#5}{#7}}%
+ \ifgiveninits
+ {\usebibmacro{name:family-given}{\namepartfamily}{\namepartgiveni}{\namepartprefix}{\namepartsuffix}}%
+ {\usebibmacro{name:family-given}{\namepartfamily}{\namepartgiven}{\namepartprefix}{\namepartsuffix}}%
\usebibmacro{name:andothers}%
}}%
}%
@@ -110,39 +101,39 @@ S.\ppspace\pageref{#1}}%
}%
}%
-% Shorthand ersetzt bei Kommentaren nicht den Autor, sondern
-% den Herausgeber
+% Shorthand ersetzt bei Kommentaren nicht den Autor, sondern den Herausgeber
\renewbibmacro*{cite:normal}{%
- \iffieldequalstr{entrytype}{commentary}{% <---
- {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
- {\usebibmacro{cite:ibid}}
- {\usebibmacro{cite:title}%
- \usebibmacro{cite:save}}}}%
- {\iffieldundef{shorthand}%
- {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
- {\usebibmacro{cite:ibid}}
+ \iffieldequalstr{entrytype}{commentary}
+ {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}%
+ {\usebibmacro{cite:ibid}}%
+ {\usebibmacro{cite:title}\usebibmacro{cite:save}}%
+ }%
+ {\iffieldundef{shorthand}%
+ {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}%
+ {\usebibmacro{cite:ibid}}%
{\ifthenelse{\ifciteidem\AND\NOT\boolean{cbx:noidem}%
\AND\NOT\iffirstonpage}%
{\usebibmacro{cite:idem}%
\usebibmacro{cite:title}%
- \usebibmacro{cite:save}}
- {\ifnameundef{labelname}
- {}
+ \usebibmacro{cite:save}}%
+ {\ifnameundef{labelname}%
+ {}%
{\usebibmacro{cite:name}}%
\usebibmacro{cite:title}}%
- \ifbool{cbx:omiteditor}
- {}
- {\ifnameundef{labelname}
+ \ifbool{cbx:omiteditor}%
+ {}%
+ {\ifnameundef{labelname}%
{\newunit
- \usebibmacro{cite:byeditor}}
+ \usebibmacro{cite:byeditor}}%
{}}%
- \usebibmacro{cite:save}}}
- {\ifbool{cbx:shorthandibid}%
+ \usebibmacro{cite:save}}%
+ }%
+ {\ifbool{cbx:shorthandibid}%
{\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}%
- {\usebibmacro{cite:ibid}}
+ {\usebibmacro{cite:ibid}}%
{\usebibmacro{cite:shorthand}}}%
{\usebibmacro{cite:shorthand}}}%
- }%
+ }%
}%
% Das Feld, in dem sich die Anfangsseite befindet, ohne führendes S.~
@@ -168,7 +159,7 @@ S.\ppspace\pageref{#1}}%
% Fußnotenformat für Artikel:
\DeclareBibliographyDriver{cite:article}{%
\printfield{journaltitle}%
- \addspace%
+ \addspace
\printfield{year}%
\iffieldundef{postnote}%
{\iffieldundef{pages}{}%
@@ -188,14 +179,14 @@ S.\ppspace\pageref{#1}}%
{}%
}
-\DeclareBibliographyDriver{cite:article:newspaper}{
+\DeclareBibliographyDriver{cite:article:newspaper}{%
\printfield{journaltitle}%
- \addspace%
+ \addspace
v.\addspace
- \printdate%
+ \printdate
\addcomma\space
\iffieldundef{postnote}%
- {\addcomma\space%
+ {\addcomma\space
\printfield{pages}}%
{}%
}
@@ -220,14 +211,14 @@ S.\ppspace\pageref{#1}}%
% Darstellung der Kommentar-Herausgeber in den Fußnoten
\DeclareNameFormat[commentary]{labelname}{%
\ifcase\value{uniquename}%
- {\usebibmacro{name:first-last}{#1}{#6}{}{#7}}%
+ \usebibmacro{name:given-family}{\namepartfamily}{\namepartprefixi}{\relax}{\namepartsuffix}%
\or
\ifuseprefix
- {\usebibmacro{name:first-last}{#1}{#4}{#5}{#8}}
- {\usebibmacro{name:first-last-init}{#1}{#4}{#6}{#8}}% <--- schmaler Abstand
+ {\usebibmacro{name:given-family}{\namepartfamily}{\namepartgiveni}{\namepartprefix}{\namepartsuffixi}}%
+ {\usebibmacro{name:given-family-init}{\namepartfamily}{\namepartgiveni}{\namepartprefixi}{\namepartsuffixi}}% <--- schmaler Abstand
\or
- \usebibmacro{name:first-last-init}{#1}{#3}{#5}{#7}%
- \fi%
+ \usebibmacro{name:given-family-init}{\namepartfamily}{\namepartgiven}{\namepartprefix}{\namepartsuffix}%
+ \fi
\usebibmacro{name:andothers}%
\ifnumequal{\value{listcount}}{\value{listtotal}}% <--- nur nach dem letzten Namen
{\mkbibemph{\printfield[edition:super]{edition}}}% <--- Auflagenzahl hinzufügen
@@ -302,12 +293,12 @@ S.\ppspace\pageref{#1}}%
\DeclareBibliographyDriver{cite:jurisdiction}{%
\printfield{usera}\space%Urteil oder Beschluss
- v\adddot\addspace%
- \printdate\addspace%
+ v\adddot\addspace
+ \printdate\addspace
\printfield{userb}% Aktenzeichen
\iffieldundef{userc}%Primaere Fundstelle (Name und Jahr) vorhanden?
{\nopunct}%
- {\space%
+ {\space
\printfield{userc}}%
\iffieldundef{postnote}{%Angabe einer konkreten Fundstelle?
\iffieldundef{userc}{}{%
@@ -316,7 +307,7 @@ S.\ppspace\pageref{#1}}%
\printfield{userd}}}% Erste Seite der primären Fundstelle
\iffieldundef{journaltitle}{}{%Sekundäre Fundstelle vorhanden?
\addspace\mkbibparens{%
- =\space%
+ =\space
\printfield{journaltitle}\space%Zeitschriftentitel
\printfield{usere}\addcomma\space%Zeitschriftenjahrgang
\printfield{pages}}%Erste Seite der Zeitschriftenfundstelle
@@ -327,15 +318,15 @@ S.\ppspace\pageref{#1}}%
}
\DeclareFieldFormat[jurisdiction]{postnote}{%
- \iffieldundef{userd}
+ \iffieldundef{userd}%
{#1}%Bei fehlender erster Seite, zB juris, keine Klammern um konkrete Fundstelle
{\printfield{userd}\addspace% Erste Seite des Urteils in der Entscheidungssammlung
\mkbibparens{#1}}%Seitenzahl der konkreten Fundstelle in Klammern
\iffieldundef{journaltitle}{}{%
\addspace\mkbibparens{%
- =\space%
- \printfield{journaltitle}\space%
- \printfield{usere}\addcomma\space%
+ =\space
+ \printfield{journaltitle}\space
+ \printfield{usere}\addcomma\space
\printfield{pages}%
}%
}%
@@ -347,11 +338,10 @@ S.\ppspace\pageref{#1}}%
\DeclareBibliographyDriver{cite:legal}{%
\unspace% Nötig, da sonst wegen des fehlenden Autors ein verwaistes Leerzeichen verbleibt
\printfield{journaltitle}%
- \addspace%
+ \addspace
\printfield{journalsubtitle}%
- \addcomma%
+ \addcomma
}%
\endinput
-
diff --git a/macros/latex/contrib/glosmathtools/sample_glosmathtools.pdf b/macros/latex/contrib/glosmathtools/sample_glosmathtools.pdf
index ee8409daeb..69c126e041 100644
--- a/macros/latex/contrib/glosmathtools/sample_glosmathtools.pdf
+++ b/macros/latex/contrib/glosmathtools/sample_glosmathtools.pdf
Binary files differ
diff --git a/macros/latex/contrib/media9/ChangeLog b/macros/latex/contrib/media9/ChangeLog
index 7f0efbbb69..9174c425f6 100644
--- a/macros/latex/contrib/media9/ChangeLog
+++ b/macros/latex/contrib/media9/ChangeLog
@@ -1,3 +1,8 @@
+2020-03-20
+ * v1.07 : media9.sty
+ * v0.38 : pdfbase.sty
+ * fix : pdfbase.sty, dvisvgm driver: transform attr in \pbs_pdfxform:nnnnn
+
2020-03-04
* v1.06 : media9.sty
* v0.37 : pdfbase.sty
diff --git a/macros/latex/contrib/media9/doc/media9.pdf b/macros/latex/contrib/media9/doc/media9.pdf
index 9750cd8a7d..83893419db 100644
--- a/macros/latex/contrib/media9/doc/media9.pdf
+++ b/macros/latex/contrib/media9/doc/media9.pdf
Binary files differ
diff --git a/macros/latex/contrib/media9/media9.sty b/macros/latex/contrib/media9/media9.sty
index 0126bcbc21..d179c794f9 100644
--- a/macros/latex/contrib/media9/media9.sty
+++ b/macros/latex/contrib/media9/media9.sty
@@ -37,8 +37,8 @@
\RequirePackage{xparse}
\RequirePackage{atbegshi}
-\def\g@mix@date@tl{2020/03/04}
-\def\g@mix@version@tl{1.06}
+\def\g@mix@date@tl{2020/03/20}
+\def\g@mix@version@tl{1.07}
\ProvidesExplPackage{media9}{\g@mix@date@tl}{\g@mix@version@tl}
{acrobat-9/X compatible media}
diff --git a/macros/latex/contrib/media9/pdfbase.sty b/macros/latex/contrib/media9/pdfbase.sty
index f03a11ac24..6281a190c4 100644
--- a/macros/latex/contrib/media9/pdfbase.sty
+++ b/macros/latex/contrib/media9/pdfbase.sty
@@ -159,8 +159,8 @@
\RequirePackage{expl3}
\RequirePackage{l3keys2e}
-\def\g@pbs@date@tl{2020/03/04}
-\def\g@pbs@version@tl{0.37}
+\def\g@pbs@date@tl{2020/03/20}
+\def\g@pbs@version@tl{0.38}
\ProvidesExplPackage{pdfbase}{\g@pbs@date@tl}{\g@pbs@version@tl}
{driver independent access to low-level PDF features}
@@ -334,8 +334,8 @@
\cs_new_nopar:Npn\_pbs_reftonum:w #1~0~R{#1}
%literal PDF code into content stream, no saving of graphics state
- \cs_new_protected_nopar:Nn\pbs_literal:nn{ % #1: empty (`'), `direct' or `page'
- \str_case:nnF{#1}{ % #2: raw PDF
+ \cs_new_protected_nopar:Nn\pbs_literal:nn{ % #1: empty (`'), `direct' or
+ \str_case:nnF{#1}{ % #2: raw PDF `page'
% `direct' inserts raw pdf code without translating origin (0,0) to
% current position: origin is lower left page corner
{direct}{\pdfliteral~direct~{#2}}
@@ -539,16 +539,20 @@
}
%literal PDF code into content stream; open text objects are always closed
- \cs_new_protected_nopar:Nn\pbs_literal:nn{ % #1: empty (`'), `direct' or `page'
- \str_if_eq:nnTF{#1}{}{ % #2: raw PDF
- % set current location's coordinates to (0,0), while saving graphics
+ \cs_new_protected_nopar:Nn\pbs_literal:nn{ % #1: empty (`'), `direct' or
+ \str_case:nnF{#1}{ % #2: raw PDF `page'
+ % `pdf:code' inserts raw pdf code without translating origin (0,0) to
+ % the current position. Unlike pdftex, origin is (+72bp,-72bp) from the
+ % upper left page corner. In analogy to pdftex, newer dvipdfmx versions
+ % also provide `pdf:direct:' and `pdf:page:', but actually, both are
+ % just aliases for `pdf:code'.
+ {direct}{\special{pdf:code~#2}}
+ {page}{\special{pdf:code~#2}}
+ }{
+ % sets current location's coordinates to (0,0), while saving graphics
% state before and re-instating after insertion (this is different from
% \pdfliteral{...}
\special{pdf:content~#2}
- }{
- % `direct' works the same as `page': no origin translation,
- % no gs saving, but closing open text objects
- \special{pdf:code~#2}
}
}
@@ -708,8 +712,8 @@
\bool_if:NTF\g_pbs_dvisvgm_bool{
\tl_gset:Nx\g_pbs_hash_tl{\token_to_str:N#}
%insert literal Postscript code
- \cs_new_protected_nopar:Nn\pbs_literal:nn{ % #1: empty (`'), `direct' or `page'
- \str_if_eq:nnTF{#1}{}{ % #2: raw Postscript
+ \cs_new_protected_nopar:Nn\pbs_literal:nn{ % #1: empty (`'), `direct' or
+ \str_if_eq:nnTF{#1}{}{ % #2: raw Postscript `page'
% set current location's coordinates to (0,0) and set unit vectors to
% 1bp right and 1bp upwards; graphics state is saved before and
% re-instated after insertion
@@ -747,7 +751,7 @@
\raisebox{\c_zero_dim}[\c_zero_dim][\c_zero_dim]{
\special{dvisvgm:raw~{?nl}<defs>{?nl}
<
- g~transform='translate(-{?x},-{?y})'~#4~
+ g~transform='scale(-1)translate({?x},{?y})scale(-1)'~#4~
id='pbs@obj\int_use:N\g_pbs_obj_int'~class='xform'
>
}
@@ -796,6 +800,7 @@
\special{!~
%keeping track of xform nesting level
true~setglobal~globaldict~/pbs@xform@level~0~put~false~setglobal
+ %
%back-transforms user coords to page coords (bigpoints with reference
%point [0,0] in the bottom-left page corner)
% user_x user_y pbs@user2page --> page_x page_y
@@ -835,8 +840,8 @@
}
%insert literal Postscript code
- \cs_new_protected_nopar:Nn\pbs_literal:nn{ % #1: empty (`'), `direct' or `page'
- \str_if_eq:nnTF{#1}{}{ % #2: raw Postscript
+ \cs_new_protected_nopar:Nn\pbs_literal:nn{ % #1: empty (`'), `direct' or
+ \str_if_eq:nnTF{#1}{}{ % #2: raw Postscript `page'
% set current location's coordinates to (0,0) and set unit vectors to
% 1bp right and 1bp upwards; graphics state is saved before and
% re-instated after insertion
diff --git a/macros/latex/contrib/tasks/README b/macros/latex/contrib/tasks/README
index aa177739fa..76abb73d31 100644
--- a/macros/latex/contrib/tasks/README
+++ b/macros/latex/contrib/tasks/README
@@ -1,7 +1,7 @@
--------------------------------------------------------------------------
-the TASKS package v1.1a 2020/01/11
+the TASKS package v1.2 2020/03/21
- horizontally columned lists
+ lists with columns filled horizontally
--------------------------------------------------------------------------
Clemens Niederberger
diff --git a/macros/latex/contrib/tasks/tasks-manual.pdf b/macros/latex/contrib/tasks/tasks-manual.pdf
new file mode 100644
index 0000000000..e16f2d755b
--- /dev/null
+++ b/macros/latex/contrib/tasks/tasks-manual.pdf
Binary files differ
diff --git a/macros/latex/contrib/tasks/tasks_en.tex b/macros/latex/contrib/tasks/tasks-manual.tex
index 8821283a82..2bcfb18d3e 100644
--- a/macros/latex/contrib/tasks/tasks_en.tex
+++ b/macros/latex/contrib/tasks/tasks-manual.tex
@@ -1,7 +1,7 @@
% --------------------------------------------------------------------------
% the TASKS package
%
-% horizontally columned lists
+% lists with columns filled horizontally
%
% --------------------------------------------------------------------------
% Clemens Niederberger
@@ -25,76 +25,27 @@
% If you have any ideas, questions, suggestions or bugs to report, please
% feel free to contact me.
% --------------------------------------------------------------------------
-\documentclass[load-preamble+]{cnltx-doc}
-\usepackage{tasks}
-
-\setcnltx{
- package = {tasks} ,
- authors = Clemens Niederberger ,
- email = {contact@mychemistry.eu} ,
- url = {https://github.com/cgnieder/tasks/} ,
- info = {horizontally columned lists} ,
- add-cmds = {
- NewTasksEnvironment,
- RenewTasksEnvironment,
- settasks,
- startnewitemline ,
- task
- } ,
- add-silent-cmds = {
- DeclareInstance, DeclareTemplateInterface,
- leftthumbsup,
- sample, Sample , theexercise
- }
-}
-
-\newpackagename\ExSheets{ExSheets}
-\newpackagename\xsim{xsim}
-\newpackagename\Tasks{tasks}
-
-% ----------------------------------------------------------------------------
-% other packages, bibliography, index
-\usepackage{xcoffins,tikz,wasysym,enumitem,booktabs,siunitx}
-\usepackage[accsupp]{acro}
-\DeclareAcronym{id}{
- short = id ,
- long = Identifier ,
- format = \scshape ,
- pdfstring = ID ,
- accsupp = ID
-}
-
-\usepackage{filecontents}
-\usepackage{csquotes}
-
-% ----------------------------------------------------------------------------
-% example definitions that have to be done in the preamble:
-\usepackage{xsim}
-\usepackage{dingbat}
-
-\newcommand*\sample{This is some sample text we will use to create a somewhat
- longer text spanning a few lines.}
-\newcommand*\Sample{\sample\ \sample\par\sample}
+\documentclass{tasks-manual}
\begin{document}
\section{Preface}
-\subsection{Motivation}
+\subsection{Motivation \& History}
Originally \Tasks\ has been an integral part of the
-\ExSheets\changedversion{0.7} package. However, users told me that it indeed
-could be useful to have it as a stand-alone package not having to load the
-whole \ExSheets\ beast just for having the \env{tasks} environment available.
-Since I agree with this the environment has been extracted into a package if
-its own, \Tasks. Since then \Tasks{} has been distributed as a package of its
-own but as part of the \ExSheets{} bundle\changedversion{0.10}. With v0.10 I
-decided to make it a completely independent package. So the relation to
-\ExSheets{} only is a historical one.
+\ExSheets\changedversion{0.7} package~\cite{pkg:exsheets}. However, users
+told me that it indeed could be useful to have it as a stand-alone package not
+having to load the whole \ExSheets\ beast just for having the \env{tasks}
+environment available. Since I agree with this the environment has been
+extracted into a package if its own, \Tasks. Since then \Tasks\ has been
+distributed as a package of its own but as part of the \ExSheets\
+bundle\changedversion{0.10}. With v0.10 I decided to make it a completely
+independent package. So the relation to \ExSheets\ only is a historical one.
The reason for the \env{tasks} environment is an unwritten agreement in German
maths textbooks (exspecially in (junior) high school textbooks) to organize
exercises in columns counting horizontally rather than vertically. That is
what \code{tasks} primarily is for. If you don't need this feature you're
-better off using traditional \LaTeX{} lists and the \pkg{enumitem} package for
+better off using traditional \LaTeX\ lists and the \pkg{enumitem} package for
customization.
\subsection{Changes}
@@ -117,26 +68,33 @@ The \sinceversion{1.0} step to version~1.0 brought some significant changes:
\needpackage{xparse} and \pkg{xtemplate}.
\section{How it works}
-\subsection{The Basics}
+\subsection{Background}
The \env{tasks} environment is similar to a list like \env{enumerate} but not
the same. Here are some of the differences:
-\begin{itemize}
- \item A first difference: there is no pagebreak possible inside an item but
- only between items.
- \item A second difference: the enumeration default is a), b), c) \ldots
- \item A third difference: the body of the \env{tasks} environment is split
- at \emph{every} occurrence of the item separator. For this reason the
- default separator is not \cs*{item} but \cs{task} so it is unique to this
- environment only. This directly leads to\ldots
- \item \ldots{} a fourth difference: the \env{tasks} environment cannot be
- nested. You can, however, use an \env*{itemize} environment or another
+\begin{tasks}[style=enumerate]
+ \task there is no pagebreak possible inside an item but only between items.
+ \task the enumeration default is a), b), c) \ldots
+ \task the body of the \env{tasks} environment is split at \emph{every}
+ occurrence of the item separator. For this reason the default separator
+ is not \cs*{item} but \cs{task} so it is unique to this environment only.
+ This directly leads to\ldots
+ \task \ldots\ the fact that the \env{tasks} environment cannot be nested.
+ You can, however, use an \env*{itemize} environment or another
\enquote{real} list in it.
- \item A fifth difference: verbatim material cannot be used in it. You'll
+ \task A fifth difference: verbatim material cannot be used in it. You'll
have to use \cs*{string}, \cs*{texttt} or \cs*{detokenize}. If this
won't suffice then don't use \env{tasks}.
-% \item A sixth difference: %footnotes
-\end{itemize}
+\end{tasks}
+
+\begin{bewareofthedog}
+ The environments of \Tasks\ are what I like to call
+ \enquote{pseudo-environments}. This means like environments defined by the
+ package \pkg{environ}~\cite{pkg:environ} the body of the environment is read
+ as argument before it is processed. This is why verbatim material cannot be
+ used in \Tasks' lists.
+\end{bewareofthedog}
+\subsection{The Basics}
\begin{environments}
\environment{tasks}[\oarg{options}\darg{num of columns}]
List like environment where the single items are introduced with
@@ -234,6 +192,11 @@ following command:
\command{startnewitemline}
Introduce a new line in a \env{tasks} environment.
\end{commands}
+While this works it also needs a bit of care since the width of the items
+doesn't change which means in order to use the full width you'd have to use
+trickery like \cs*{rlap} which then means the danger of the item text sticking
+into the margin.
+
\begin{example}
\begin{tasks}(4)
\task the first
@@ -250,14 +213,9 @@ following command:
\end{tasks}
\end{example}
-While this works it also needs a bit of care since the width of the items
-doesn't change which means in order to use the full width you'd have to use
-trickery like \cs*{rlap} which then means the danger of the item text sticking
-into the margin\ldots
-
\section{Available Options}\label{sec:tasks:options}
-The \Tasks{} package does not have any package options\changedversion{0.10}.
+The \Tasks\ package does not have any package options\changedversion{0.10}.
The environment \env{tasks} has a number of options, though, namely the
following ones that can be set using a setup command:
@@ -315,6 +273,8 @@ following ones that can be set using a setup command:
\keyval{start}{integer}\Default{1}
\sinceversion{1.1}Set the starting value with which the list starts
counting.
+ \keyval{counter}{counter}\Default{task}
+ \sinceversion{1.2}The counter to be used to count the items.
\keybool{debug}\Default{false}
\sinceversion{0.10}If set to true \cs*{fboxsep} is set to \code{0pt}
inside the \env{tasks} environment and \cs*{fbox} is used to draw a frame
@@ -359,8 +319,8 @@ Now the same list as above but with three columns and a different label:
\end{tasks}
\end{example}
-Let's use it inside a question, \ie, inside \xsim's \env{exercise}
-environment:
+Let's use it inside a question, \ie, inside \pkg{xsim}'s \env{exercise}
+environment~\cite{pkg:xsim}:
\begin{example}
% since settings are local the following ones will be lost
% outside this example;
@@ -431,6 +391,14 @@ argument of \cs{task}. This will temporarily overwrite the default label.
\end{tasks}
\end{example}
+\begin{commands}
+ \command{tasksifmeasuringTF}[\marg{true}\marg{false}]
+ \sinceversion{1.2}This command used inside a label checks if the label is
+ typeset for measuring its width or if it is typeset \enquote{for
+ real}. Might be useful sometimes. There are also the variants
+ \cs{tasksifmeasuringT} and \cs{tasksifmeasuringF}.
+\end{commands}
+
\section{New \code{tasks}-like Environments}
It is possible to add custom environments that work like the \code{tasks}
environment.
@@ -451,8 +419,8 @@ The \env{tasks} environment is defined as follows:
The separator does not have to be a control sequence:
\begin{example}
% preamble:
- % \usepackage{dingbat}
- \NewTasksEnvironment[label=\footnotesize\leftthumbsup,label-width=15pt]{done}[*]
+ % \usepackage{fontawesome}
+ \NewTasksEnvironment[label=\faThumbsOUp,label-width=15pt]{done}[*]
\begin{done}
* First task
* Second task
@@ -472,8 +440,8 @@ argument.
\begin{example}
% preamble:
- % \usepackage{dingbat}
- \NewTasksEnvironment[label=\footnotesize\leftthumbsup,label-width=15pt]{done}[*]
+ % \usepackage{fontawesome}
+ \NewTasksEnvironment[label=\faThumbsOUp,label-width=15pt]{done}[*]
\begin{done}(3)
* First task
* Second task
@@ -524,4 +492,7 @@ This is rather brief this time:
{ label = \arabic*. }
\end{sourcecode}
+\clearpage
+\printbibliography
+
\end{document}
diff --git a/macros/latex/contrib/tasks/tasks.cfg b/macros/latex/contrib/tasks/tasks.cfg
index 127d78f273..c04ea4dabe 100644
--- a/macros/latex/contrib/tasks/tasks.cfg
+++ b/macros/latex/contrib/tasks/tasks.cfg
@@ -1,7 +1,7 @@
% --------------------------------------------------------------------------
% the TASKS package
%
-% horizontally columned lists
+% lists with columns filled horizontally
%
% --------------------------------------------------------------------------
% Clemens Niederberger
diff --git a/macros/latex/contrib/tasks/tasks.sty b/macros/latex/contrib/tasks/tasks.sty
index e9332a378c..3a0e23cb7a 100644
--- a/macros/latex/contrib/tasks/tasks.sty
+++ b/macros/latex/contrib/tasks/tasks.sty
@@ -1,7 +1,7 @@
% --------------------------------------------------------------------------
% the TASKS package
%
-% horizontally columned lists
+% lists with columns filled horizontally
%
% --------------------------------------------------------------------------
% Clemens Niederberger
@@ -28,10 +28,10 @@
\RequirePackage {expl3,xparse,xtemplate}
\ExplSyntaxOn
-\tl_const:Nn \c_tasks_date_tl {2020/01/11}
+\tl_const:Nn \c_tasks_date_tl {2020/03/21}
\tl_const:Nn \c_tasks_version_major_number_tl {1}
-\tl_const:Nn \c_tasks_version_minor_number_tl {1}
-\tl_const:Nn \c_tasks_version_subrelease_tl {a}
+\tl_const:Nn \c_tasks_version_minor_number_tl {2}
+\tl_const:Nn \c_tasks_version_subrelease_tl {}
\tl_const:Nx \c_tasks_version_number_tl
{
\c_tasks_version_major_number_tl .
@@ -42,7 +42,7 @@
\c_tasks_version_number_tl
\c_tasks_version_subrelease_tl
}
-\tl_const:Nn \c_tasks_info_tl {horizontally ~ columned ~ lists}
+\tl_const:Nn \c_tasks_info_tl {lists~ with~ columns~ filled~ horizontally}
\ProvidesExplPackage
{tasks}
@@ -56,8 +56,10 @@
\cs_generate_variant:Nn \tl_if_eq:nnT {V}
\cs_generate_variant:Nn \coffin_attach:NnnNnnnn {NnnNx}
\cs_generate_variant:Nn \tl_set_rescan:Nnn {NnV}
+\cs_generate_variant:Nn \tl_set:Nn {cV}
\cs_generate_variant:Nn \hbox_set:Nn {NV}
\cs_generate_variant:Nn \msg_warning:nnnn {nnV,nnnx}
+\cs_generate_variant:Nn \tl_replace_once:Nnn {Nne}
% --------------------------------------------------------------------------
\msg_new:nnn {tasks} {width-too-small}
@@ -68,9 +70,10 @@
\msg_new:nnn {tasks} {no-item}
{
- You've~ placed~ `#1'~ before~ the~ first~ #2~ \msg_line_context: .~
- I~ will~ throw~ it~ away~ and~ ignore~ it~ for~ the~ rest~ of~ the~
- list.
+ You've~ placed \\ \\
+ #1 \\ \\
+ before~ the~ first~ #2~ \msg_line_context: .~ I~ will~ throw~ it~ away~
+ and~ ignore~ it~ for~ the~ rest~ of~ the~ list.
}
\msg_new:nnn {tasks} {deprecated}
@@ -113,12 +116,14 @@
\bool_new:N \l__tasks_debug_bool
\bool_new:N \l__tasks_item_full_line_bool
\bool_new:N \l__tasks_item_rest_of_line_bool
+\bool_new:N \l__tasks_measuring_bool
\tl_new:N \l__tasks_instance_tl
\tl_new:N \l__tasks_label_tl
\tl_new:N \l__tasks_custom_label_tl
\tl_new:N \l__tasks_label_format_tl
\tl_new:N \l__tasks_custom_label_format_tl
+\tl_new:N \l__tasks_counter_tl
\tl_new:N \l__tasks_item_format_tl
\tl_new:N \l__tasks_custom_item_format_tl
\tl_new:N \l__tasks_item_fill_left_tl
@@ -164,6 +169,22 @@
{ \use:n {#1} }
}
+\prg_new_conditional:Npnn \tasks_if_measuring: {p,T,F,TF}
+ {
+ \bool_if:NTF \l__tasks_measuring_bool
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+\DeclareExpandableDocumentCommand \tasksifmeasuringTF {+m+m}
+ { \tasks_if_measuring:TF {#1} {#2} }
+
+\DeclareExpandableDocumentCommand \tasksifmeasuringT {+m}
+ { \tasks_if_measuring:T {#1} }
+
+\DeclareExpandableDocumentCommand \tasksifmeasuringF {+m}
+ { \tasks_if_measuring:F {#1} }
+
% --------------------------------------------------------------------------
% #1: instance
% #2: number of columns
@@ -256,11 +277,9 @@
{ \l__tasks_tmpa_int } > { \l__tasks_item_columns_int }
{ \int_set_eq:NN \l__tasks_tmpa_int \l__tasks_item_columns_int }
{ \int_zero:N \l__tasks_item_columns_int }
- \bool_if:nT
- {
- \l__tasks_item_rest_of_line_bool &&
- !\int_compare_p:nNn { \l__tasks_item_columns_int } = {0}
- }
+ \bool_lazy_and:nnT
+ { \l__tasks_item_rest_of_line_bool }
+ { !\int_compare_p:nNn { \l__tasks_item_columns_int } = {0} }
{
\int_gadd:Nn \g__tasks_current_col_num_int
{ \l__tasks_item_columns_int -1 }
@@ -283,7 +302,10 @@
{
\vcoffin_set:Nnn \l__tasks_tmpa_coffin
{ \l__tasks_item_width_dim }
- { \__tasks_setup: #2 {#3} \mode_if_horizontal:T { \strut } }
+ {
+ \__tasks_setup:
+ #2 { #3 \mode_if_horizontal:T { \strut } }
+ }
\__tasks_debug:n
{
\coffin_typeset:Nnnnn \l__tasks_tmpa_coffin
@@ -338,18 +360,13 @@
\noindent
\skip_horizontal:N \l__tasks_item_indent_dim
% typeset the item (with the attached label protruding to the left):
- \coffin_typeset:Nnnnn \l__tasks_item_coffin
- {l}
- {T}
- {0pt}
- {0pt}
- \bool_if:nT
+ \coffin_typeset:Nnnnn \l__tasks_item_coffin {l} {T} {0pt} {0pt}
+ \bool_lazy_or:nnT
+ { \l__tasks_item_full_line_bool }
{
- \l__tasks_item_full_line_bool ||
- (
- \l__tasks_item_rest_of_line_bool &&
- \int_compare_p:nNn { \l__tasks_item_columns_int } = {0}
- )
+ \bool_lazy_and_p:nn
+ { \l__tasks_item_rest_of_line_bool }
+ { \int_compare_p:nNn { \l__tasks_item_columns_int } = {0} }
}
{ \tasks_new_row: }
% are we between items in a row? Then skip by \l__tasks_column_sep_dim :
@@ -358,12 +375,9 @@
{ \skip_horizontal:N \l__tasks_column_sep_dim }
% if we ended a row and a new row is still to come skip vertically by
% \l__tasks_after_item_skip :
- \bool_if:nT
- {
- ( \int_compare_p:nNn { \g__tasks_current_col_num_int } = { \l__tasks_columns_int } )
- &&
- ( \int_compare_p:n { \g__tasks_current_row_num_int != \g__tasks_rows_int } )
- }
+ \bool_lazy_and:nnT
+ { \int_compare_p:nNn { \g__tasks_current_col_num_int } = { \l__tasks_columns_int } }
+ { \int_compare_p:n { \g__tasks_current_row_num_int != \g__tasks_rows_int } }
{ \skip_vertical:N \l__tasks_after_item_skip }
% clean up:
\coffin_clear:N \l__tasks_item_coffin
@@ -429,10 +443,10 @@
{
label : tokenlist = \alph*) ,
indent : length = 2.5em ,
- label-format : tokenlist ,
+ label-format : tokenlist ,
label-width : length = 11pt ,
label-offset : length = .3333em ,
- item-format : tokenlist ,
+ item-format : tokenlist ,
after-item-skip : skip = 1ex plus 1ex minus 1ex
}
@@ -482,7 +496,11 @@
\__tasks_label_align:V \l__tasks_label_align_tl
% need this for enumerate list:
\bool_if:NF \l__tasks_resume_bool
- { \setcounter {task} { \int_eval:n { \l__tasks_start_int -1 } } }
+ {
+ \setcounter
+ { \l__tasks_counter_tl }
+ { \int_eval:n { \l__tasks_start_int -1 } }
+ }
\int_set:Nn \l__tasks_columns_int {#2}
% set all the items in their own coffins and join with the ground:
\int_gzero:N \g__tasks_current_col_num_int
@@ -509,12 +527,12 @@
\bool_set_false:N \l__tasks_tmpa_bool
\tl_if_in:NnT \l__tasks_tmpa_tl {*}
{
- \tl_replace_once:Nnn \l__tasks_tmpa_tl {*} {{task}}
+ \tl_replace_once:Nne \l__tasks_tmpa_tl {*} {{ \l__tasks_counter_tl }}
\bool_set_true:N \l__tasks_tmpa_bool
}
\tl_set_rescan:NnV \l__tasks_tmpa_tl {} \l__tasks_tmpa_tl
\bool_if:NT \l__tasks_tmpa_bool
- { \tl_set:NV \thetask \l__tasks_tmpa_tl }
+ { \tl_set:cV { the \l__tasks_counter_tl } \l__tasks_tmpa_tl }
\dim_compare:nNnT
{ \l__tasks_item_indent_dim }
<
@@ -529,12 +547,13 @@
\seq_map_inline:Nn \l__tasks_seq
{
\__tasks_read_item:www ##1 \q_stop
- \refstepcounter {task}
+ \refstepcounter { \l__tasks_counter_tl }
\tl_set:Nx \l__tasks_label_tl { { \exp_not:V \l__tasks_tmpa_tl } }
\bool_if:NTF \l__tasks_custom_label_format_bool
{ \tl_put_left:NV \l__tasks_label_tl \l__tasks_custom_label_format_tl }
{ \tl_put_left:NV \l__tasks_label_tl \l__tasks_label_format_tl }
% check if the label width is big enough:
+ \bool_set_true:N \l__tasks_measuring_bool
\hbox_set:NV \l__tasks_tmpa_box \l__tasks_label_tl
\dim_compare:nNnT
{ \box_wd:N \l__tasks_tmpa_box }
@@ -546,6 +565,7 @@
{label-width}
{ \dim_to_decimal:n { \box_wd:N \l__tasks_tmpa_box } }
}
+ \bool_set_false:N \l__tasks_measuring_bool
\tl_if_eq:VnTF \l__tasks_tmp_label_tl { $tasks$default$label$ }
{
\__tasks_task:VVV
@@ -624,6 +644,8 @@
counter-format .code:n =
\msg_warning:nnnnn {tasks} {deprecated} {option} {counter-format} {label}
\keys_set:nn {tasks/list} { label = #1 } ,
+ counter .tl_set:N = \l__tasks_counter_tl ,
+ counter .initial:n = task ,
label .code:n =
\bool_set_true:N \l__tasks_custom_label_bool
\tl_set:Nn \l__tasks_custom_label_tl {#1} ,
@@ -828,5 +850,9 @@
2019/11/03 v1.1 - fix typo
- make \settasks' argument long
- new option `start'
-2020/01/11 v1.2 - allow `label-format' to end with command that needs an
+2020/01/11 v1.1a - allow `label-format' to end with command that needs an
argument
+2020/03/21 v1.2 - prefer lazy boolean evaluation
+ - \tasksifmeasuringTF
+ - new option `counter'
+ - rename manual files
diff --git a/macros/latex/contrib/tasks/tasks_en.pdf b/macros/latex/contrib/tasks/tasks_en.pdf
deleted file mode 100644
index 27389741a3..0000000000
--- a/macros/latex/contrib/tasks/tasks_en.pdf
+++ /dev/null
Binary files differ
diff --git a/obsolete/graphics/pstricks/contrib/README b/obsolete/graphics/pstricks/contrib/palette/README
index 86ca603526..86ca603526 100644
--- a/obsolete/graphics/pstricks/contrib/README
+++ b/obsolete/graphics/pstricks/contrib/palette/README
diff --git a/obsolete/graphics/pstricks/contrib/palette.sty b/obsolete/graphics/pstricks/contrib/palette/palette.sty
index 352b31e734..352b31e734 100644
--- a/obsolete/graphics/pstricks/contrib/palette.sty
+++ b/obsolete/graphics/pstricks/contrib/palette/palette.sty
diff --git a/obsolete/graphics/pstricks/contrib/palette.tex b/obsolete/graphics/pstricks/contrib/palette/palette.tex
index 6c96c02f03..6c96c02f03 100644
--- a/obsolete/graphics/pstricks/contrib/palette.tex
+++ b/obsolete/graphics/pstricks/contrib/palette/palette.tex
diff --git a/graphics/pstricks/contrib/pst-vue3d/Changes b/obsolete/graphics/pstricks/contrib/pst-vue3d/Changes
index e4bb5d2241..e4bb5d2241 100644
--- a/graphics/pstricks/contrib/pst-vue3d/Changes
+++ b/obsolete/graphics/pstricks/contrib/pst-vue3d/Changes
diff --git a/graphics/pstricks/contrib/pst-vue3d/Makefile b/obsolete/graphics/pstricks/contrib/pst-vue3d/Makefile
index 1eac89064a..1eac89064a 100644
--- a/graphics/pstricks/contrib/pst-vue3d/Makefile
+++ b/obsolete/graphics/pstricks/contrib/pst-vue3d/Makefile
diff --git a/graphics/pstricks/contrib/pst-vue3d/README b/obsolete/graphics/pstricks/contrib/pst-vue3d/README
index 12ea4dd201..12ea4dd201 100644
--- a/graphics/pstricks/contrib/pst-vue3d/README
+++ b/obsolete/graphics/pstricks/contrib/pst-vue3d/README
diff --git a/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.bib b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.bib
index 3b785845e2..3b785845e2 100644
--- a/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.bib
+++ b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.bib
diff --git a/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.pdf b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.pdf
index 8f43cdafea..8f43cdafea 100644
--- a/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.pdf
+++ b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.pdf
Binary files differ
diff --git a/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.tex b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.tex
index e0808473fc..e0808473fc 100644
--- a/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.tex
+++ b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d-doc.tex
diff --git a/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.pro b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.pro
index b6e8d1289a..b6e8d1289a 100644
--- a/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.pro
+++ b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.pro
diff --git a/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.sty b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.sty
index 3895513e2a..3895513e2a 100644
--- a/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.sty
+++ b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.sty
diff --git a/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.tex b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.tex
index e6ffa14446..e6ffa14446 100644
--- a/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.tex
+++ b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.tex
diff --git a/support/latexindent/LatexIndent/AlignmentAtAmpersand.pm b/support/latexindent/LatexIndent/AlignmentAtAmpersand.pm
index 8b8e387d09..95f2389e80 100644
--- a/support/latexindent/LatexIndent/AlignmentAtAmpersand.pm
+++ b/support/latexindent/LatexIndent/AlignmentAtAmpersand.pm
@@ -20,15 +20,20 @@ use utf8;
use Unicode::GCString;
use Data::Dumper;
use Exporter qw/import/;
-use List::Util qw(max);
+use List::Util qw/max min sum/;
use LatexIndent::TrailingComments qw/$trailingCommentRegExp/;
use LatexIndent::Switches qw/$is_t_switch_active $is_tt_switch_active/;
use LatexIndent::GetYamlSettings qw/%masterSettings/;
use LatexIndent::Tokens qw/%tokens/;
use LatexIndent::LogFile qw/$logger/;
our @ISA = "LatexIndent::Document"; # class inheritance, Programming Perl, pg 321
-our @EXPORT_OK = qw/align_at_ampersand find_aligned_block double_back_slash_else/;
+our @EXPORT_OK = qw/align_at_ampersand find_aligned_block double_back_slash_else main_formatting individual_padding multicolumn_padding multicolumn_pre_check multicolumn_post_check dont_measure/;
our $alignmentBlockCounter;
+our @cellStorage; # two-dimensional storage array containing the cell information
+our @formattedBody; # array for the new body
+our @minMultiColSpan;
+our @maxColumnWidth;
+our @maxDelimiterWidth;
sub find_aligned_block{
my $self = shift;
@@ -127,27 +132,60 @@ sub align_at_ampersand{
my $self = shift;
return if(${$self}{bodyLineBreaks}==0);
- # calculate the maximum number of ampersands in a row in the body
my $maximumNumberOfAmpersands = 0;
- foreach(split("\n",${$self}{body})){
- my $numberOfAmpersands = () = $_ =~ /(?<!\\)&/g;
- $maximumNumberOfAmpersands = $numberOfAmpersands if($numberOfAmpersands>$maximumNumberOfAmpersands);
- }
- # create an array of zeros
- my @maximumColumnWidth = (0) x ($maximumNumberOfAmpersands+1);
- my @maximumColumnWidthMC = (0) x ($maximumNumberOfAmpersands+1);
+ # clear the global arrays
+ @formattedBody = ();
+ @cellStorage = ();
+ @minMultiColSpan = ();
+ @maxColumnWidth = ();
+ @maxDelimiterWidth = ();
+
+ # maximum column widths
+ my @maximumColumnWidths;
- # array for the new body
- my @formattedBody;
+ my $rowCounter = -1;
+ my $columnCounter = -1;
- # now loop back through the body, and store the maximum column size
+ $logger->trace("*dontMeasure routine, row mode") if(${$self}{dontMeasure} and $is_t_switch_active);
+
+ # initial loop for column storage and measuring
+ # initial loop for column storage and measuring
+ # initial loop for column storage and measuring
foreach(split("\n",${$self}{body})){
+ $rowCounter++;
+
+ # default is to measure this row, but it can be switched off by the dont_measure routine
+ ${$self}{measureRow} = 1;
+
+ # call the dont_measure routine
+ $self->dont_measure(mode=>"row",row=>$_) if ${$self}{dontMeasure};
+
# remove \\ and anything following it
- my $endPiece;
+ my $endPiece = q();
if($_ =~ m/(\\\\.*)/){
- $_ =~ s/(\\\\.*)//;
- $endPiece = $1;
+ if(${$self}{alignFinalDoubleBackSlash} ){
+ # for example, if we want:
+ #
+ # Name & \shortstack{Hi \\ Lo} \\ <!--- Note this row!
+ # Foo & Bar \\
+ #
+ # in the first row, note that the first \\
+ # needs to be ignored, and we align by
+ # the final double back slash
+
+ $_ =~ s/(\\\\
+ (?:
+ (?!
+ (?:\\\\)
+ ). # any character, but not \\
+ )*?$ # non-greedy
+ )//sx;
+ $endPiece = $1;
+ } else {
+ $_ =~ s/(\\\\.*)//;
+ $endPiece = $1;
+ }
}
# remove any trailing comments
@@ -157,318 +195,172 @@ sub align_at_ampersand{
$trailingComments = $1;
}
- # count the number of ampersands in the current row
- my $numberOfAmpersands = () = $_ =~ /(?<!\\)&/g;
-
- # switch for multiColumGrouping
- my $multiColumnGrouping = ($_ =~ m/\\multicolumn/ and ${$self}{multiColumnGrouping});
- my $alignRowsWithoutMaxDelims = ${$self}{alignRowsWithoutMaxDelims};
-
- # by default, the stripped row is simply the current row
- my $strippedRow = $_;
-
- # loop through the columns
- my $columnCount = 0;
-
- # format switch off by default
- my $formatRow = 0;
-
- # store the column sizes for measuring and comparison purposes
- my @columnSizes = ();
-
- # we will store the columns in each row
- my @columns;
-
- # need to have at least one ampersand, or contain a \multicolumn command
- if( ($_ =~ m/(?<!\\)&/ and ( ($numberOfAmpersands == $maximumNumberOfAmpersands)||$multiColumnGrouping||$alignRowsWithoutMaxDelims ) )
- or
- ($multiColumnGrouping and $alignRowsWithoutMaxDelims) ){
- # remove space at the beginning of a row, surrounding &, and at the end of the row
- $_ =~ s/(?<!\\)\h*(?<!\\)&\h*/&/g;
- $_ =~ s/^\h*//g;
- $_ =~ s/\h*$//g;
-
- # if the line finishes with an &, then add an empty space,
- # otherwise the column count is off
- $_ .= ($_ =~ m/(?<!\\)&$/ ? " ":q());
-
- # store the columns, which are either split by &
- # or otherwise simply the current line, if for example, the current line simply
- # contains \multicolumn{8}... \\ (see test-cases/texexchange/366841-zarko.tex, for example)
- @columns = ($_ =~ m/(?<!\\)&/ ? split(/(?<!\\)&/,$_) : $_);
-
- # empty the white-space-stripped row
- $strippedRow = '';
- foreach my $column (@columns){
- # if a column has finished with a \ then we need to add a trailing space,
- # otherwise the \ can be put next to &. See test-cases/texexchange/112343-gonzalo for example
- $column .= ($column =~ m/\\$/ ? " ": q());
-
- # store the column size
- # reference: http://www.perl.com/pub/2012/05/perlunicook-unicode-column-width-for-printing.html
- my $gcs = Unicode::GCString->new($column);
- my $columnWidth = $gcs->columns();
-
- # multicolumn cells need a bit of special care
- if($multiColumnGrouping and $column =~ m/\\multicolumn\{(\d+)\}/ and $1>1){
- $maximumColumnWidthMC[$columnCount] = $columnWidth if( defined $maximumColumnWidthMC[$columnCount] and ($columnWidth > $maximumColumnWidthMC[$columnCount]) );
- $columnWidth = 1 if($multiColumnGrouping and ($column =~ m/\\multicolumn\{(\d+)\}/));
- }
+ # some rows shouldn't be formatted
+ my $unformattedRow = $_;
+
+ # delimiters regex, default is:
+ #
+ # (?<!\\)&
+ #
+ # which is set in GetYamlSettings.pm, but can be set
+ # by the user using, for example
+ #
+ # lookForAlignDelims:
+ # tabular:
+ # delimiter: '\<'
+ #
+ my $delimiterRegEx = qr/${$self}{delimiterRegEx}/;
+
+ my $numberOfAmpersands = () = $_ =~ /$delimiterRegEx/g;
+ $maximumNumberOfAmpersands = $numberOfAmpersands if($numberOfAmpersands>$maximumNumberOfAmpersands);
+
+ # remove space at the beginning of a row, surrounding &, and at the end of the row
+ $_ =~ s/(?<!\\)\h*($delimiterRegEx)\h*/$1/g;
+ $_ =~ s/^\h*//g;
+ $_ =~ s/\h*$//g;
+
+ # if the line finishes with an &, then add an empty space,
+ # otherwise the column count is off
+ $_ .= ($_ =~ m/$delimiterRegEx$/ ? " ":q());
+
+ # store the columns, which are either split by &
+ # or otherwise simply the current line, if for example, the current line simply
+ # contains \multicolumn{8}... \\ (see test-cases/texexchange/366841-zarko.tex, for example)
+ my @columns = ($_ =~ m/$delimiterRegEx/ ? split(/($delimiterRegEx)/,$_) : $_);
+
+ $columnCounter = -1;
+ my $spanning = 0;
+
+ foreach my $column (@columns){
+ # if a column contains only the delimiter, then we need to
+ # - measure it
+ # - add it and its length to the previous cell
+ # - remove it from the columns array
+ #
+ if($column =~ m/$delimiterRegEx/) {
+ # update the delimiter to be used, and its associated length
+ # for the *previous* cell
+ my $spanningOffSet = ($spanning > 0 ? $spanning - 1 : 0);
+ ${$cellStorage[$rowCounter][$columnCounter - $spanningOffSet]}{delimiter} = $1;
+ ${$cellStorage[$rowCounter][$columnCounter - $spanningOffSet]}{delimiterLength} = Unicode::GCString->new($1)->columns();
+
+ # keep track of maximum delimiter width
+ $maxDelimiterWidth[$columnCounter - $spanningOffSet] =
+ (defined $maxDelimiterWidth[$columnCounter - $spanningOffSet]
+ ?
+ max($maxDelimiterWidth[$columnCounter-$spanningOffSet],
+ ${$cellStorage[$rowCounter][$columnCounter-$spanningOffSet]}{delimiterLength})
+ :
+ ${$cellStorage[$rowCounter][$columnCounter - $spanningOffSet]}{delimiterLength});
+
+ # importantly, move on to the next column!
+ next;
+ }
- # store the maximum column width
- $maximumColumnWidth[$columnCount] = $columnWidth if( defined $maximumColumnWidth[$columnCount] and ($columnWidth > $maximumColumnWidth[$columnCount]) );
-
- # put the row back together, using " " if the column is empty
- $strippedRow .= ($columnCount>0 ? "&" : q() ).($columnWidth > 0 ? $column: " ");
-
- # store the column width
- $columnSizes[$columnCount] = $columnWidth;
-
- # move on to the next column
- if($multiColumnGrouping and ($column =~ m/\\multicolumn\{(\d+)\}/)){
- # columns that are within the multiCol statement receive a width of -1
- for my $i (($columnCount+1)..($columnCount+$1)){
- $columnSizes[$i] = -1;
- }
- # update the columnCount to account for the multiColSpan
- $columnCount += $1;
- } else {
- $columnCount++;
+ # otherwise increment the column counter, and proceed
+ $columnCounter++;
+
+ # reset spanning (only applicable if multiColumnGrouping)
+ $spanning = 0;
+
+ # if a column has finished with a \ then we need to add a trailing space,
+ # otherwise the \ can be put next to &. See test-cases/texexchange/112343-gonzalo for example
+ $column .= ($column =~ m/\\$/ ? " ": q());
+
+ # basic cell storage
+ $cellStorage[$rowCounter][$columnCounter]
+ = ({width=>Unicode::GCString->new($column)->columns(),
+ entry=>$column,
+ type=>($numberOfAmpersands>0 ? "X" : "*"),
+ groupPadding=>0,
+ colSpan=>".",
+ delimiter=>"",
+ delimiterLength=>0,
+ measureThis=> ($numberOfAmpersands>0 ? ${$self}{measureRow} : 0) });
+
+ # store the maximum column width
+ $maxColumnWidth[$columnCounter] = (defined $maxColumnWidth[$columnCounter]
+ ?
+ max($maxColumnWidth[$columnCounter],${$cellStorage[$rowCounter][$columnCounter]}{width})
+ :
+ ${$cellStorage[$rowCounter][$columnCounter]}{width} ) if ${$cellStorage[$rowCounter][$columnCounter]}{type} eq "X";
+
+ # \multicolumn cell
+ if(${$self}{multiColumnGrouping} and $column =~ m/\\multicolumn\{(\d+)\}/ and $1>1){
+ $spanning = $1;
+
+ # adjust the type
+ ${$cellStorage[$rowCounter][$columnCounter]}{type} = "$spanning";
+
+ # some \multicol cells can have their spanning information removed from type
+ # so we store it in colSpan as well
+ ${$cellStorage[$rowCounter][$columnCounter]}{colSpan} = $spanning;
+
+ # and don't measure it
+ ${$cellStorage[$rowCounter][$columnCounter]}{measureThis} = 0;
+
+ # create 'gap' columns
+ for(my $j=$columnCounter+1; $j<=$columnCounter+($spanning-1);$j++){
+ $cellStorage[$rowCounter][$j] = ({type=>"-",
+ entry=>'',
+ width=>0,
+ individualPadding=>0,
+ groupPadding=>0,
+ colSpan=>".",
+ delimiter=>"",
+ delimiterLength=>0,
+ measureThis=>0});
}
- }
+
+ # store the minimum spanning value
+ $minMultiColSpan[$columnCounter] = (defined $minMultiColSpan[$columnCounter] ? min($minMultiColSpan[$columnCounter],$spanning) : $spanning );
- # toggle the formatting switch
- $formatRow = 1;
- } elsif($endPiece and ${$self}{alignDoubleBackSlash}){
- # otherwise a row could contain no ampersands, but would still desire
- # the \\ to be aligned, see test-cases/alignment/multicol-no-ampersands.tex
- @columns = $_;
- $formatRow = 1;
+ # adjust the column counter
+ $columnCounter += $spanning - 1;
+ }
}
# store the information
- push(@formattedBody,{
- row=>$strippedRow,
- format=>$formatRow,
- multiColumnGrouping=>$multiColumnGrouping,
- columnSizes=>\@columnSizes,
- columns=>\@columns,
- endPiece=>($endPiece ? $endPiece :q() ),
- trailingComment=>($trailingComments ? $trailingComments :q() )});
+ push(@formattedBody,{row=>$_,
+ endPiece=>$endPiece,
+ trailingComment=>$trailingComments,
+ numberOfAmpersands=>$numberOfAmpersands,
+ unformattedRow=>$unformattedRow });
+
}
- # output some of the info so far to the log file
- $logger->trace("*Alignment at ampersand routine for ${$self}{name} (see lookForAlignDelims)") if $is_t_switch_active;
- $logger->trace("Maximum column sizes of horizontally stripped formatted block (${$self}{name}): @maximumColumnWidth") if $is_t_switch_active;
- $logger->trace("align at ampersand: ${$self}{lookForAlignDelims}") if $is_t_switch_active;
- $logger->trace("align at \\\\: ${$self}{alignDoubleBackSlash}") if $is_t_switch_active;
- $logger->trace("spaces before \\\\: ${$self}{spacesBeforeDoubleBackSlash}") if $is_t_switch_active;
- $logger->trace("multi column grouping: ${$self}{multiColumnGrouping}") if $is_t_switch_active;
- $logger->trace("align rows without maximum delimeters: ${$self}{alignRowsWithoutMaxDelims}") if $is_t_switch_active;
- $logger->trace("spaces before ampersand: ${$self}{spacesBeforeAmpersand}") if $is_t_switch_active;
- $logger->trace("spaces after ampersand: ${$self}{spacesAfterAmpersand}") if $is_t_switch_active;
- $logger->trace("justification: ${$self}{justification}") if $is_t_switch_active;
-
- # acount for multicolumn grouping, if the appropriate switch is set
- if(${$self}{multiColumnGrouping}){
- foreach(@formattedBody){
- if(${$_}{format} and ${$_}{row} !~ m/^\h*$/){
-
- # set a columnCount, which will vary depending on multiColumnGrouping settings or not
- my $columnCount=0;
-
- # loop through the columns
- foreach my $column (@{${$_}{columns}}){
- # calculate the width of the current column
- my $gcs = Unicode::GCString->new($column);
- my $columnWidth = $gcs->columns();
-
- # check for multiColumnGrouping
- if(${$_}{multiColumnGrouping} and $column =~ m/\\multicolumn\{(\d+)\}/ and $1>1){
- my $multiColSpan = $1;
-
- # for example, \multicolumn{3}{c}{<stuff>} spans 3 columns, so
- # the maximum column needs to account for this (subtract 1 because of 0 index in perl arrays)
- my $columnMax = $columnCount+$multiColSpan-1;
-
- # groupingWidth contains the total width of column sizes grouped
- # underneath the \multicolumn{} statement
- my $groupingWidth = 0;
- my $maxGroupingWidth = 0;
- foreach (@formattedBody){
- $groupingWidth = 0;
-
- # loop through the columns covered by the multicolumn statement
- foreach my $j ($columnCount..$columnMax){
- if( defined @{${$_}{columnSizes}}[$j]
- and
- @{${$_}{columnSizes}}[$j] >= 0
- and
- ${$_}{format}
- ){
- $groupingWidth += (defined $maximumColumnWidth[$j] ? $maximumColumnWidth[$j] : 0);
- } else {
- $groupingWidth = 0;
- }
- }
-
- # update the maximum grouping width
- $maxGroupingWidth = $groupingWidth if($groupingWidth > $maxGroupingWidth);
-
- # the cells that receive multicolumn grouping need extra padding; in particular
- # if the justification is *left*:
- # the *last* cell of the multicol group receives the padding
- # if the justification is *right*:
- # the *first* cell of the multicol group receives the padding
- #
- # this motivates the introduction of $columnOffset, which is
- # 0 if justification is left
- # $multiColSpan if justification is right
- my $columnOffset = (${$self}{justification} eq "left") ? $columnMax : $columnCount;
- if(defined @{${$_}{columnSizes}}[$columnMax] and ($columnWidth > ($groupingWidth+(${$self}{spacesBeforeAmpersand}+1+${$self}{spacesAfterAmpersand})*($multiColSpan-1)) ) and @{${$_}{columnSizes}}[$columnMax] >= 0){
- my $multiColPadding = $columnWidth-$groupingWidth-(${$self}{spacesBeforeAmpersand}+1+${$self}{spacesAfterAmpersand})*($multiColSpan-1);
-
- # it's possible that multiColPadding might already be assigned; in which case,
- # we need to check that the current value of $multiColPadding is greater than the existing one
- if(defined @{${$_}{multiColPadding}}[$columnOffset]){
- @{${$_}{multiColPadding}}[$columnOffset] = max($multiColPadding,@{${$_}{multiColPadding}}[$columnOffset]);
- } else {
- @{${$_}{multiColPadding}}[$columnOffset] = $multiColPadding;
- }
-
- # also need to account for maximum column width *including* other multicolumn statements
- if($maximumColumnWidthMC[$columnCount]>$columnWidth and $column !~ m/\\multicolumn\{(\d+)\}/){
- @{${$_}{multiColPadding}}[$columnOffset] += ($maximumColumnWidthMC[$columnCount]-$columnWidth);
- }
- }
- }
- # update it to account for the ampersands and the spacing either side of ampersands
- $maxGroupingWidth += ($multiColSpan-1)*(${$self}{spacesBeforeAmpersand}+1+${$self}{spacesAfterAmpersand});
-
- # store the maxGroupingWidth for use in the next loop
- @{${$_}{maxGroupingWidth}}[$columnCount] = $maxGroupingWidth;
-
- # update the columnCount to account for the multiColSpan
- $columnCount += $multiColSpan - 1;
- }
-
- # increase the column count
- $columnCount++;
- }
- }
- }
- }
+ # store the maximum number of ampersands
+ ${$self}{maximumNumberOfAmpersands} = $maximumNumberOfAmpersands;
- # the maximum row width will be used in aligning (or not) the \\
- my $maximumRowWidth = 0;
-
- # now that the multicolumn widths have been accounted for, loop through the body
- foreach(@formattedBody){
- if(${$_}{format} and ${$_}{row} !~ m/^\h*$/){
-
- # set a columnCount, which will vary depending on multiColumnGrouping settings or not
- my $columnCount=0;
- my $tmpRow = q();
-
- # loop through the columns
- foreach my $column (@{${$_}{columns}}){
- # calculate the width of the current column
- my $gcs = Unicode::GCString->new($column);
- my $columnWidth = $gcs->columns();
-
- # reset the column padding
- my $padding = q();
-
- # check for multiColumnGrouping
- if(${$_}{multiColumnGrouping} and $column =~ m/\\multicolumn\{(\d+)\}/ and $1>1){
- my $multiColSpan = $1;
-
- # groupingWidth contains the total width of column sizes grouped
- # underneath the \multicolumn{} statement
- my $maxGroupingWidth = ${${$_}{maxGroupingWidth}}[$columnCount];
-
- # it's possible to have situations such as
- #
- # \multicolumn{3}{l}{one} & \multicolumn{3}{l}{two} & \\
- # \multicolumn{6}{l}{one} & \\
- #
- # in which case we need to loop through the @maximumColumnWidthMC
- my $groupingWidthMC = 0;
- my $multicolsEncountered =0;
- for ($columnCount..($columnCount + ($multiColSpan-1))){
- if(defined $maximumColumnWidthMC[$_]){
- $groupingWidthMC += $maximumColumnWidthMC[$_];
- $multicolsEncountered++ if $maximumColumnWidthMC[$_]>0;
- }
- }
-
- # need to account for (spacesBeforeAmpersands) + length of ampersands (which is 1) + (spacesAfterAmpersands)
- $groupingWidthMC += ($multicolsEncountered-1)*(${$self}{spacesBeforeAmpersand}+1+${$self}{spacesAfterAmpersand});
-
- # set the padding; we need
- # maximum( $maxGroupingWidth, $maximumColumnWidthMC[$columnCount] )
- my $maxValueToUse = 0;
- if(defined $maximumColumnWidthMC[$columnCount]){
- $maxValueToUse = max($maxGroupingWidth,$maximumColumnWidthMC[$columnCount],$groupingWidthMC);
- } else {
- $maxValueToUse = $maxGroupingWidth;
- }
-
- # calculate the padding
- $padding = " " x ( $maxValueToUse >= $columnWidth ? $maxValueToUse - $columnWidth : 0 );
-
- # to the log file
- if($is_tt_switch_active){
- $logger->trace("*---------column-------------");
- $logger->trace($column);
- $logger->trace("multiColSpan: $multiColSpan");
- $logger->trace("groupingWidthMC: $groupingWidthMC");
- $logger->trace("padding length: ",$maxValueToUse - $columnWidth);
- $logger->trace("multicolsEncountered: $multicolsEncountered");
- $logger->trace("maxValueToUse: $maxValueToUse");
- $logger->trace("maximumColumnWidth: ",join(",",@maximumColumnWidth));
- $logger->trace("maximumColumnWidthMC: ",join(",",@maximumColumnWidthMC));
- }
-
- # update the columnCount to account for the multiColSpan
- $columnCount += $multiColSpan - 1;
- } else {
- # compare the *current* column width with the *maximum* column width
- $padding = " " x (defined $maximumColumnWidth[$columnCount] and $maximumColumnWidth[$columnCount] >= $columnWidth ? $maximumColumnWidth[$columnCount] - $columnWidth : 0);
- }
+ # blocks with nested multicolumns need some pre checking
+ $self->multicolumn_pre_check if ${$self}{multiColumnGrouping};
+
+ # maximum column width loop, and individual padding
+ $self->individual_padding;
- # either way, the row is formed of "COLUMN + PADDING"
- if(${$self}{justification} eq "left"){
- $tmpRow .= $column.$padding.(defined @{${$_}{multiColPadding}}[$columnCount] ? " " x @{${$_}{multiColPadding}}[$columnCount]: q()).(" " x ${$self}{spacesBeforeAmpersand})."&".(" " x ${$self}{spacesAfterAmpersand});
- } else {
- $tmpRow .= $padding.(defined @{${$_}{multiColPadding}}[$columnCount] ? " " x @{${$_}{multiColPadding}}[$columnCount]: q()).$column.(" " x ${$self}{spacesBeforeAmpersand})."&".(" " x ${$self}{spacesAfterAmpersand});
- }
- $columnCount++;
- }
+ # multi column rearrangement and multicolumn padding
+ $self->multicolumn_padding if ${$self}{multiColumnGrouping};
- # remove the final &
- $tmpRow =~ s/\h*&\h*$/ /;
- my $finalSpacing = q();
- $finalSpacing = " " x (${$self}{spacesBeforeDoubleBackSlash}) if ${$self}{spacesBeforeDoubleBackSlash}>=1;
- $tmpRow =~ s/\h*$/$finalSpacing/;
+ # multi column post check to ensure that multicolumn commands have received appropriate padding
+ $self->multicolumn_post_check if ${$self}{multiColumnGrouping};
- # replace the row with the formatted row
- ${$_}{row} = $tmpRow;
-
- # update the maximum row width
- my $gcs = Unicode::GCString->new($tmpRow);
- ${$_}{rowWidth} = $gcs->columns();
- $maximumRowWidth = ${$_}{rowWidth} if(${$_}{rowWidth} > $maximumRowWidth);
- }
+ # output to log file
+ if( $is_t_switch_active ){
+ &pretty_print_cell_info($_) for ("entry","type","colSpan","width","measureThis","maximumColumnWidth","individualPadding","groupPadding","delimiter","delimiterLength");
}
- # final loop through to get \\ aligned
+ # main formatting loop
+ $self->main_formatting;
+
+ # final \\ loop
+ # final \\ loop
+ # final \\ loop
foreach (@formattedBody){
# reset the padding
my $padding = q();
# possibly adjust the padding
- if(${$_}{format} and ${$_}{row} !~ m/^\h*$/){
+ if(${$_}{row} !~ m/^\h*$/){
# remove trailing horizontal space if ${$self}{alignDoubleBackSlash} is set to 0
${$_}{row} =~ s/\h*$// if (!${$self}{alignDoubleBackSlash});
@@ -481,17 +373,22 @@ sub align_at_ampersand{
$padding = " " x (${$self}{spacesBeforeDoubleBackSlash});
} else {
# aligned \\
- $padding = " " x ($maximumRowWidth - ${$_}{rowWidth});
+ $padding = " " x max(0,(${$self}{maximumRowWidth} - ${$_}{rowWidth}));
}
}
# format the row, and put the trailing \\ and trailing comments back into the row
${$_}{row} .= $padding.(${$_}{endPiece} ? ${$_}{endPiece} :q() ).(${$_}{trailingComment}? ${$_}{trailingComment} : q() );
- }
- # to the log file
- if($is_tt_switch_active){
- $logger->trace(${$_}{row}) for @formattedBody;
+ # some rows shouldn't be formatted, and may only have trailing comments;
+ # see test-cases/alignment/table4.tex for example
+ if( (${$_}{numberOfAmpersands} == 0 and !${$_}{endPiece})
+ or
+ (${$_}{numberOfAmpersands} < ${$self}{maximumNumberOfAmpersands} and !${$self}{alignRowsWithoutMaxDelims} and !${$_}{endPiece})
+ ){
+ ${$_}{row} = (${$_}{unformattedRow}?${$_}{unformattedRow}:q()).(${$_}{trailingComment}?${$_}{trailingComment}:q());
+ }
+
}
# delete the original body
@@ -503,6 +400,882 @@ sub align_at_ampersand{
# if the \end{} statement didn't originally have a line break before it, we need to remove the final
# line break added by the above
${$self}{body} =~ s/\h*\R$//s if !${$self}{linebreaksAtEnd}{body};
+ }
+
+sub main_formatting {
+ # PURPOSE:
+ # (1) perform the *padding* operations
+ # by adding
+ #
+ # <spacesBeforeAmpersand>
+ # &
+ # <spacesEndAmpersand>
+ #
+ # to the cell entries, accounting for
+ # the justification being LEFT or RIGHT
+ #
+ # (2) measure the row width and store
+ # the maximum row width for use with
+ # the (possible) alignment of the \\
+ #
+ my $self = shift;
+
+ ${$self}{maximumRowWidth} = 0;
+
+ # objective (1): padding
+ # objective (1): padding
+ # objective (1): padding
+
+ $logger->trace("*formatted rows for: ${$self}{name}") if($is_t_switch_active);
+
+ my $rowCount = -1;
+ # row loop
+ foreach my $row (@cellStorage) {
+ $rowCount++;
+
+ # clear the temporary row
+ my $tmpRow = q();
+
+ # column loop
+ foreach my $cell (@$row) {
+ if (${$cell}{type} eq "*" or ${$cell}{type} eq "-"){
+ $tmpRow .= ${$cell}{entry};
+ next;
+ }
+
+ # the placement of the padding is dependent on the value of justification
+ if(${$self}{justification} eq "left"){
+ # LEFT:
+ # LEFT:
+ # LEFT:
+ # <cell entry> <individual padding> <group padding> ...
+ $tmpRow .= ${$cell}{entry};
+ $tmpRow .= " " x ${$cell}{individualPadding};
+ $tmpRow .= " " x ${$cell}{groupPadding};
+ } else {
+ # RIGHT:
+ # RIGHT:
+ # RIGHT:
+ # <group padding> <individual padding> <cell entry> ...
+ $tmpRow .= " " x ${$cell}{groupPadding};
+ $tmpRow .= " " x ${$cell}{individualPadding};
+ $tmpRow .= ${$cell}{entry};
+ }
+
+ # either way, finish with: <spacesBeforeAmpersand> & <spacesAfterAmpersand>
+ $tmpRow .= " " x ${$self}{spacesBeforeAmpersand};
+ $tmpRow .= ${$cell}{delimiter};
+ $tmpRow .= " " x ${$self}{spacesAfterAmpersand};
+ }
+
+ # if alignRowsWithoutMaxDelims = 0
+ # and there are *less than* the maximum number of ampersands, then
+ # we undo all of the work above!
+ if( !${$self}{alignRowsWithoutMaxDelims}
+ and
+ ${$formattedBody[$rowCount]}{numberOfAmpersands} < ${$self}{maximumNumberOfAmpersands} ){
+ $tmpRow = ${$formattedBody[$rowCount]}{unformattedRow};
+ }
+
+ # spacing before \\
+ my $finalSpacing = q();
+ $finalSpacing = " " x (${$self}{spacesBeforeDoubleBackSlash}) if ${$self}{spacesBeforeDoubleBackSlash}>=1;
+ $tmpRow =~ s/\h*$/$finalSpacing/;
+
+ # if $tmpRow is made up of only horizontal space, then empty it
+ $tmpRow = q() if($tmpRow =~ m/^\h*$/);
+
+ # to the log file
+ $logger->trace($tmpRow) if($is_t_switch_active);
+
+ # store this formatted row
+ ${$formattedBody[$rowCount]}{row} = $tmpRow;
+
+ # objective (2): calculate row width and update maximumRowWidth
+ # objective (2): calculate row width and update maximumRowWidth
+ # objective (2): calculate row width and update maximumRowWidth
+ my $rowWidth = Unicode::GCString->new($tmpRow)->columns();
+ ${$formattedBody[$rowCount]}{rowWidth} = $rowWidth;
+
+ # update the maximum row width
+ if( $rowWidth > ${$self}{maximumRowWidth}
+ and !(${$formattedBody[$rowCount]}{numberOfAmpersands} == 0 and !${$formattedBody[$rowCount]}{endPiece}) ){
+ ${$self}{maximumRowWidth} = $rowWidth;
+ }
+ }
+}
+
+sub dont_measure{
+
+ my $self = shift;
+ my %input = @_;
+
+ if( $input{mode} eq "cell"
+ and ref(\${$self}{dontMeasure}) eq "SCALAR"
+ and ${$self}{dontMeasure} eq "largest"
+ and ${$cellStorage[$input{row}][$input{column}]}{width} == $maxColumnWidth[$input{column}]){
+ # dontMeasure stored as largest, for example
+ #
+ # lookForAlignDelims:
+ # tabular:
+ # dontMeasure: largest
+ $logger->trace("CELL FOUND with maximum column width, $maxColumnWidth[$input{column}], and will not be measured (largest mode)") if($is_t_switch_active);
+ $logger->trace("column: ", $input{column}," width: ",${$cellStorage[$input{row}][$input{column}]}{width}) if($is_t_switch_active);
+ $logger->trace("entry: ", ${$cellStorage[$input{row}][$input{column}]}{entry}) if($is_t_switch_active);
+ $logger->trace("--------------------------") if($is_t_switch_active);
+ ${$cellStorage[$input{row}][$input{column}]}{measureThis} = 0;
+ ${$cellStorage[$input{row}][$input{column}]}{type} = "X";
+ } elsif($input{mode} eq "cell" and (ref(${$self}{dontMeasure}) eq "ARRAY")){
+
+ # loop through the entries in dontMeasure
+ foreach(@{${$self}{dontMeasure}}){
+ if(ref(\$_) eq "SCALAR" and ${$cellStorage[$input{row}][$input{column}]}{entry} eq $_){
+ # dontMeasure stored as *strings*, for example:
+ #
+ # lookForAlignDelims:
+ # tabular:
+ # dontMeasure:
+ # - \multicolumn{1}{c}{Expiry}
+ # - Tenor
+ # - \multicolumn{1}{c}{$\Delta_{\text{call},10}$}
+
+ $logger->trace("CELL FOUND (this): $_ and will not be measured") if($is_t_switch_active);
+ ${$cellStorage[$input{row}][$input{column}]}{measureThis} = 0;
+ ${$cellStorage[$input{row}][$input{column}]}{type} = "X";
+ } elsif (ref($_) eq "HASH" and ${$_}{this} and ${$cellStorage[$input{row}][$input{column}]}{entry} eq ${$_}{this}){
+ # for example:
+ #
+ # lookForAlignDelims:
+ # tabular:
+ # dontMeasure:
+ # -
+ # this: \multicolumn{1}{c}{Expiry}
+ # applyTo: cell
+ #
+ # OR (note that applyTo is optional):
+ #
+ # lookForAlignDelims:
+ # tabular:
+ # dontMeasure:
+ # -
+ # this: \multicolumn{1}{c}{Expiry}
+ next if(defined ${$_}{applyTo} and !${$_}{applyTo} eq "cell" );
+ $logger->trace("CELL FOUND (this): ${$_}{this} and will not be measured") if($is_t_switch_active);
+ ${$cellStorage[$input{row}][$input{column}]}{measureThis} = 0;
+ ${$cellStorage[$input{row}][$input{column}]}{type} = "X";
+ } elsif (ref($_) eq "HASH" and ${$_}{regex} ){
+ # for example:
+ #
+ # lookForAlignDelims:
+ # tabular:
+ # dontMeasure:
+ # -
+ # regex: \multicolumn{1}{c}{Expiry}
+ # applyTo: cell
+ #
+ # OR (note that applyTo is optional):
+ #
+ # lookForAlignDelims:
+ # tabular:
+ # dontMeasure:
+ # -
+ # regex: \multicolumn{1}{c}{Expiry}
+ next if(defined ${$_}{applyTo} and !${$_}{applyTo} eq "cell" );
+ my $regex = qr/${$_}{regex}/;
+ next unless ${$cellStorage[$input{row}][$input{column}]}{entry} =~ m/${$_}{regex}/;
+ $logger->trace("CELL FOUND (regex): ${$_}{regex} and will not be measured") if($is_t_switch_active);
+ ${$cellStorage[$input{row}][$input{column}]}{measureThis} = 0;
+ ${$cellStorage[$input{row}][$input{column}]}{type} = "X";
+ }
+ }
+ } elsif($input{mode} eq "row" and (ref(${$self}{dontMeasure}) eq "ARRAY")){
+ foreach(@{${$self}{dontMeasure}}){
+ # move on, unless we have specified applyTo as row:
+ #
+ # lookForAlignDelims:
+ # tabular:
+ # dontMeasure:
+ # -
+ # this: \multicolumn{1}{c}{Expiry}
+ # applyTo: row
+ #
+ # note: *default value* of applyTo is cell
+ next unless (ref($_) eq "HASH" and defined ${$_}{applyTo} and ${$_}{applyTo} eq "row");
+ if(${$_}{this} and $input{row} eq ${$_}{this}){
+ $logger->trace("ROW FOUND (this): ${$_}{this}") if($is_t_switch_active);
+ $logger->trace("and will not be measured") if($is_t_switch_active);
+ ${$self}{measureRow} = 0;
+ } elsif(${$_}{regex} and $input{row} =~ ${$_}{regex}){
+ $logger->trace("ROW FOUND (regex): ${$_}{regex}") if($is_t_switch_active);
+ $logger->trace("and will not be measured") if($is_t_switch_active);
+ ${$self}{measureRow} = 0;
+ }
+ }
+ }
+}
+
+sub individual_padding{
+ # PURPOSE
+ # (1) the *primary* purpose of this routine is to
+ # measure the *individual padding* of
+ # each cell.
+ #
+ # for example, for
+ #
+ # 111 & 2 & 33333 \\
+ # 4 & 55 & 66\\
+ #
+ # then the individual padding will be
+ #
+ # 0 1 0
+ # 2 0 3
+ #
+ # this is calculated by looping
+ # through the rows & columns
+ # and finding the maximum column widths
+ #
+ # (2) the *secondary* purpose of this routine is to
+ # fill in any gaps in the @cellStorage array
+ # for any entries that don't yet exist;
+ #
+ # for example,
+ # 111 & 2 & 33333 \\
+ # 4 & 55 & 66\\
+ # 77 & 8 <------ GAP HERE
+ #
+ # there is a gap in @cellStorage in the final row,
+ # which is completed by the second loop in the below
+
+ my $self = shift;
+
+ # array to store maximum column widths
+ my @maximumColumnWidths;
+
+ # we count the maximum number of columns
+ my $maximumNumberOfColumns = 0;
+
+ # maximum column width loop
+ # maximum column width loop
+ # maximum column width loop
+
+ $logger->trace("*dontMeasure routine, cell mode") if(${$self}{dontMeasure} and $is_t_switch_active);
+
+ # row loop
+ my $rowCount = -1;
+ foreach my $row (@cellStorage) {
+ $rowCount++;
+
+ # column loop
+ my $j = -1;
+ foreach my $cell (@$row) {
+ $j++;
+
+ # if alignRowsWithoutMaxDelims = 0
+ # and there are *less than* the maximum number of ampersands, then
+ # don't measure this column
+ if( !${$self}{alignRowsWithoutMaxDelims}
+ and
+ ${$formattedBody[$rowCount]}{numberOfAmpersands} < ${$self}{maximumNumberOfAmpersands} ){
+ ${$cell}{measureThis} = 0;
+ ${$cell}{type} = "*";
+ }
+
+ # check if the cell shouldn't be measured
+ $self->dont_measure(mode=>"cell",row=>$rowCount,column=>$j) if ${$self}{dontMeasure};
+
+ # it's possible to have delimiters of different lengths, for example
+ #
+ # \begin{tabbing}
+ # 1 # 22 \> 333 # 4444 \\
+ # xxx # aaa # yyyyy # zzzzzzzz \\
+ # . # # & # \\
+ #
+ # ^^
+ # ||
+ # \end{tabbing}
+ #
+ # note that this has a delimiter of \> (length 2) and # (length 1)
+ #
+ # furthermore, it's possible to specify the delimiter justification as "left" or "right"
+ if(${$cell}{delimiterLength}>0 and ${$cell}{delimiterLength} < $maxDelimiterWidth[$j]){
+ if(${$self}{delimiterJustification} eq "left"){
+ ${$cell}{delimiter} .= " " x ($maxDelimiterWidth[$j] - ${$cell}{delimiterLength});
+ } elsif(${$self}{delimiterJustification} eq "right") {
+ ${$cell}{delimiter} = " " x ($maxDelimiterWidth[$j] - ${$cell}{delimiterLength}).${$cell}{delimiter} ;
+ }
+
+ # update the delimiterLength
+ ${$cell}{delimiterLength} = $maxDelimiterWidth[$j];
+ }
+
+ # there are some cells that shouldn't be accounted for in measuring,
+ # for example {ccc}
+ next if !${$cell}{measureThis};
+
+ # otherwise, make the measurement
+ $maximumColumnWidths[$j] = (defined $maximumColumnWidths[$j]
+ ?
+ max($maximumColumnWidths[$j],${$cell}{width})
+ :
+ ${$cell}{width});
+ }
+
+ # update the maximum number of columns
+ $maximumNumberOfColumns = $j if ( $j > $maximumNumberOfColumns );
+ }
+
+ # individual padding and gap filling loop
+ # individual padding and gap filling loop
+ # individual padding and gap filling loop
+
+ # row loop
+ foreach my $row (@cellStorage) {
+ # column loop
+ foreach (my $j=0; $j <= $maximumNumberOfColumns; $j++){
+ if( defined ${$row}[$j]){
+ # individual padding
+ my $maximum = (defined $maximumColumnWidths[$j] ? $maximumColumnWidths[$j]: 0);
+ my $cellWidth = ${$row}[$j]{width};
+ ${$row}[$j]{individualPadding} += ($maximum > $cellWidth ? $maximum - $cellWidth : 0);
+ } else {
+ # gap filling
+ ${$row}[$j] = ({type=>"-",
+ entry=>'',
+ width=>0,
+ individualPadding=>0,
+ groupPadding=>0,
+ measureThis=>0,
+ colSpan=>".",
+ delimiter=>"",
+ delimiterLength=>0,
+ });
+ }
+
+ # now the gaps have been filled, store the maximumColumnWidth for future reference
+ ${$row}[$j]{maximumColumnWidth} = (defined $maximumColumnWidths[$j] ? $maximumColumnWidths[$j] : 0);
+ }
+ }
+}
+
+sub multicolumn_pre_check {
+ # PURPOSE:
+ # ensure that multiple multicolumn commands are
+ # handled appropriately
+ #
+ # example 1
+ #
+ # \multicolumn{2}{c}{thing} & \\
+ # 111 & 2 & 33333 \\
+ # 4 & 55 & 66 \\
+ # \multicolumn{2}{c}{a} & \\
+ #
+ # ^^^^^^^^
+ # ||||||||
+ #
+ # the second multicolumn command should not be measured, but
+ # *should* receive individual padding
+ my $self = shift;
+
+ # loop through minMultiColSpan and add empty entries as necessary
+ foreach(@minMultiColSpan){
+ $_ = "." if !(defined $_);
+ }
+
+ # ensure that only the *MINIMUM* multicolumn commands are designated
+ # to be measured; for example:
+ #
+ # \multicolumn{2}{c|}{Ótimo humano} & Abuso da pontuação & Recompensas densas \\
+ # \multicolumn{3}{c||}{Exploração Fácil} & second \\
+ # Assault & Asterix & Beam Rider & Alien \\
+ #
+ # the \multicolumn{2}{c|}{Ótimo humano} *is* the minimum multicolumn command
+ # for the first column, and the \multicolumn{3}{c||}{Exploração Fácil} *is not*
+ # to be measured
+
+ # row loop
+ my $rowCount = -1;
+ foreach my $row (@cellStorage) {
+ $rowCount++;
+
+ # column loop
+ my $j = -1;
+ foreach my $cell (@$row) {
+ $j++;
+ if( ${$cell}{type} =~ m/(\d)/ and ($1 >$minMultiColSpan[$j])){
+ ${$cell}{type} = "X";
+ ${$cell}{measureThis} = 0;
+ }
+ }
+ }
+
+ # now loop back through and ensure that each of the \multicolumn commands
+ # are measured correctly
+ #
+ # row loop
+ $rowCount = -1;
+ foreach my $row (@cellStorage) {
+ $rowCount++;
+
+ # column loop
+ my $j = -1;
+ foreach my $cell (@$row) {
+ $j++;
+
+ # multicolumn entry
+ if(${$cell}{type} =~ m/(\d)/) {
+
+ my $multiColumnSpan = $1;
+
+ # *inner* row loop
+ my $innerRowCount = -1;
+ foreach my $innerRow (@cellStorage) {
+ $innerRowCount++;
+
+ # we only want to measure the *other* rows
+ next if($innerRowCount == $rowCount);
+
+ # column loop
+ my $innerJ = -1;
+ foreach my $innerCell (@$innerRow) {
+ $innerJ++;
+
+ if( $innerJ == $j and ${$innerCell}{type} =~ m/(\d)/ and $1 >= $multiColumnSpan){
+ if(${$cell}{width} < ${$innerCell}{width}){
+ ${$cell}{type} = "X";
+ ${$cell}{measureThis} = 0;
+ ${$cell}{individualPadding} = (${$innerCell}{width} - ${$cell}{width} );
+ } else {
+ ${$innerCell}{type} = "X";
+ ${$innerCell}{measureThis} = 0;
+ ${$innerCell}{individualPadding} = (${$cell}{width} - ${$innerCell}{width});
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+sub multicolumn_padding{
+ # PURPOSE:
+ # assign multi column padding, for example:
+ #
+ # \multicolumn{2}{c}{thing}&\\
+ # 111 &2&33333 \\
+ # 4& 55&66\\
+ #
+ # needs to be transformed into
+ #
+ # \multicolumn{2}{c}{thing} & \\
+ # 111 & 2 & 33333 \\
+ # 4 & 55 & 66 \\
+ #
+ # ^^^^^^^^^^^^^^^
+ # |||||||||||||||
+ #
+ # and we need to compute the multi column padding,
+ # illustrated by the up arrows in the above
+ #
+ # Approach:
+ # (1) measure the "grouping widths" under/above each of the
+ # \multicolumn entries; these are stored within
+ #
+ # groupingWidth
+ #
+ # for the relevant column entries; in the
+ # above example, they would be stored in the
+ #
+ # 2
+ # 55
+ #
+ # entries when justification is LEFT, and in the
+ #
+ # 111
+ # 4
+ #
+ # entries when justification is RIGHT. We also calculate
+ # maximum grouping width and store it within $maxGroupingWidth
+ #
+ # (2) loop back through and update
+ #
+ # groupPadding
+ #
+ # for each of the relevant column entries; in the
+ # above example, they would be stored in the
+ #
+ # 2
+ # 55
+ #
+ # entries when justification is LEFT, and in the
+ #
+ # 111
+ # 4
+ #
+ # (3) finally, account for the \multicolumn command itself;
+ # ensuring that we account for it being wider or narrower
+ # than its spanning columns
+ my $self = shift;
+
+ # row loop
+ my $rowCount = -1;
+ foreach my $row (@cellStorage) {
+ $rowCount++;
+
+ # column loop
+ my $j = -1;
+ foreach my $cell (@$row) {
+ $j++;
+
+ # multicolumn entry
+ next unless (${$cell}{type} =~ m/(\d)/);
+
+ my $multiColumnSpan = $1;
+
+ my $maxGroupingWidth = 0;
+
+ # depending on the
+ #
+ # justification
+ #
+ # setting (left or right), we store the
+ #
+ # groupingWidth
+ #
+ # and groupPadding accordingly
+ my $justificationOffset = (${$self}{justification} eq "left" ? $j+$multiColumnSpan-1 : $j);
+
+ # phase (1)
+ # phase (1)
+ # phase (1)
+
+ # *inner* row loop
+ my $innerRowCount = -1;
+ foreach my $innerRow (@cellStorage) {
+ $innerRowCount++;
+
+ # we only want to measure the *other* rows
+ next if($innerRowCount == $rowCount);
+
+ # we will store the width of columns spanned by the multicolumn command
+ my $groupingWidth = 0;
+
+ # *inner* column loop
+ for (my $innerJ = 0; $innerJ < $multiColumnSpan; $innerJ++) {
+
+ # some entries should not be measured in the grouping width,
+ # for example
+ #
+ # \multicolumn{2}{c}{thing} & \\
+ # 111 & 2 & 33333 \\
+ # 4 & 55 & 66 \\
+ # \multicolumn{2}{c}{a} & \\
+ #
+ # ^^^^^^^^
+ # ||||||||
+ #
+ # the second \multicolumn entry shouldn't be measured, and it will
+ # have had
+ #
+ # measureThis
+ #
+ # switched off during multicolumn_pre_check
+
+ next if !${$cellStorage[$innerRowCount][$j+$innerJ]}{measureThis};
+
+ $groupingWidth += ${$cellStorage[$innerRowCount][$j+$innerJ]}{width};
+ $groupingWidth += ${$cellStorage[$innerRowCount][$j+$innerJ]}{individualPadding};
+ $groupingWidth += ${$cellStorage[$innerRowCount][$j+$innerJ]}{delimiterLength} if ($innerJ < $multiColumnSpan - 1);
+ }
+
+ # adjust for
+ # <spacesBeforeAmpersand>
+ # &
+ # <spacesEndAmpersand>
+ # note:
+ # we need to multiply this by the appropriate multicolumn
+ # spanning; in the above example:
+ #
+ # \multicolumn{2}{c}{thing} & \\
+ # 111 & 2 & 33333 \\
+ # 4 & 55 & 66 \\
+ #
+ # we multiply by (2-1) = 1 because there is *1* ampersand
+ # underneath the multicolumn command
+ #
+ # note:
+ # the & will have been accounted for in the above section using delimiterLength
+
+ $groupingWidth += ($multiColumnSpan-1)
+ *
+ (${$self}{spacesBeforeAmpersand} + ${$self}{spacesAfterAmpersand});
+
+ # store the grouping width for the next phase
+ ${$cellStorage[$innerRowCount][$justificationOffset]}{groupingWidth} = $groupingWidth;
+
+ # update the maximum grouping width
+ $maxGroupingWidth = max($maxGroupingWidth, $groupingWidth);
+
+ }
+
+ # phase (2)
+ # phase (2)
+ # phase (2)
+
+ # now that the maxGroupingWidth has been established, loop back
+ # through and update groupingWidth for the appropriate cells
+
+ # *inner* row loop
+ $innerRowCount = -1;
+ foreach my $innerRow (@cellStorage) {
+ $innerRowCount++;
+
+ # we only want to make adjustment on the *other* rows
+ next if($innerRowCount == $rowCount);
+
+ # it's possible that we have multicolumn commands that were *not* measured,
+ # and are *narrower* than the maxGroupingWidth, for example:
+ #
+ # \multicolumn{3}{l}{aaaa} & \\ <------ this entry won't have been measured!
+ # $S_N$ & $=$ & $\SI{1000}{\kV\A}$ & $U_0$ & \\
+ # \multicolumn{3}{l}{bbbbbbb} & \\
+ #
+ if( ${$cellStorage[$innerRowCount][$j]}{colSpan} ne "."
+ and ${$cellStorage[$innerRowCount][$j]}{colSpan} == $multiColumnSpan
+ and !${$cellStorage[$innerRowCount][$j]}{measureThis}
+ and $maxGroupingWidth > ${$cellStorage[$innerRowCount][$j]}{width}
+ and ${$cellStorage[$innerRowCount][$j]}{width} >= ${$cell}{width}) {
+ ${$cellStorage[$innerRowCount][$j]}{individualPadding} = 0;
+ ${$cellStorage[$innerRowCount][$j]}{groupPadding} = ($maxGroupingWidth - ${$cellStorage[$innerRowCount][$j]}{width});
+ }
+
+ my $groupingWidth = ${$cellStorage[$innerRowCount][$justificationOffset]}{groupingWidth};
+
+ # phase (3)
+ # phase (3)
+ # phase (3)
+
+ # there are two possible cases:
+ #
+ # (1) the \multicolumn statement is *WIDER* than its grouped columns, e.g.:
+ #
+ # \multicolumn{2}{c}{thing} & \\
+ # 111 & 2 & 33333 \\
+ # 4 & 55 & 66 \\
+ # ^^^^^^^^^^^^^^^
+ # |||||||||||||||
+ #
+ # in this situation, we need to adjust each of the group paddings for the cells
+ # marked with an up arrow
+ #
+ # (2) the \multicolumn statement is *NARROWER* than its grouped columns, e.g.:
+ #
+ # ||
+ # **
+ # \multicolumn{2}{c}{thing} & \\
+ # 111 & bbbbbbbbbbbbbbbbbbbbbb & 33333 \\
+ # 4 & 55 & 66 \\
+ #
+ # in this situation, we need to adjust the groupPadding of the multicolumn
+ # entry, which happens ***once the row loop has finished***
+ #
+ if(${$cell}{width} > $maxGroupingWidth ){
+ ${$cellStorage[$innerRowCount][$justificationOffset]}{groupPadding} = (${$cell}{width} - $maxGroupingWidth );
+ }
+ }
+
+ # case (2) from above when \multicolumn statement is *NARROWER* than its grouped columns
+ if(${$cell}{width} < $maxGroupingWidth ){
+ ${$cell}{groupPadding} += ($maxGroupingWidth - ${$cell}{width});
+ ${$cell}{individualPadding} = 0;
+ }
+ }
+
+ }
+
+}
+
+sub multicolumn_post_check {
+ # PURPOSE:
+ # ensure that multiple multicolumn commands are
+ # handled appropriately
+ #
+ # example 1
+ #
+ # \multicolumn{2}{c}{thing} & aaa & bbb \\
+ # 111 & 2 & 33333 & \\
+ # 4 & 55 & 66 & \\
+ # \multicolumn{3}{c}{a} & \\
+ #
+ # ^^^^^^^^
+ # ||||||||
+ #
+ # the second multicolumn command needs to have its group padding
+ # accounted for.
+ #
+ # *Note* this will not have been done previously, as
+ # this second multicolumn command will have had its type changed to
+ # X, because it spans 3 columns, and there is a cell within its
+ # column that spans *less than 3 columns*
+ my $self = shift;
+
+ # row loop
+ my $rowCount = -1;
+ foreach my $row (@cellStorage) {
+ $rowCount++;
+
+ # column loop
+ my $j = -1;
+ foreach my $cell (@$row) {
+ $j++;
+
+ # we only need to account for X-type columns, with an integer colSpan
+ next unless (${$cell}{type} eq "X" and ${$cell}{colSpan} =~ m/(\d+)/);
+
+ # multicolumn entry
+ my $multiColumnSpan = $1;
+
+ # we store the maximum grouping width
+ my $maxGroupingWidth = 0;
+
+ # *inner* row loop
+ my $innerRowCount = -1;
+ foreach my $innerRow (@cellStorage) {
+ $innerRowCount++;
+
+ # we only want to measure the *other* rows
+ next if($innerRowCount == $rowCount);
+
+ # we will store the width of columns spanned by the multicolumn command
+ my $groupingWidth = 0;
+
+ # we need to keep track of the number of ampersands encountered;
+ #
+ # for example:
+ #
+ # \multicolumn{2}{c}{thing} & aaa & bbb \\
+ # 111 & 2 & 33333 & \\
+ # 4 & 55 & 66 & \\
+ # \multicolumn{3}{c}{a} & \\ <!----- focus on the multicolumn entry in this row
+ #
+ # focusing on the final multicolumn entry (spanning 3 columns),
+ # when we loop back through the rows, we will encounter:
+ #
+ # row 1: one ampersand
+ #
+ # \multicolumn{2}{c}{thing} & aaa ...
+ #
+ # row 2: two ampersands
+ #
+ # 111 & 2 & 33333 ...
+ #
+ # row 3: two ampersands
+ #
+ # 4 & 55 & 66 ...
+ #
+ # note: we start the counter at -1, because the count of ampersands
+ # is always one behind the cell count; for example, looking
+ # at row 3 in the above, in the above, in cell 1 (entry: 4)
+ # we have 0 ampersands, in cell 2 (entry: 55) we now have 1 ampersands, etc
+ my $ampersandsEncountered = -1;
+
+ # column loop
+ my @dumRow = @$innerRow;
+ foreach (my $innerJ = 0; $innerJ <= $#dumRow; $innerJ++){
+
+ # exit the loop if we've reached the multiColumn spanning width
+ last if($innerJ >= ($multiColumnSpan));
+
+ # don't include '*' or '-' cell types in the calculations
+ my $type = ${$cellStorage[$innerRowCount][$j+$innerJ]}{type};
+ next if($type eq "*" or $type eq "-");
+
+ # update the grouping width
+ $groupingWidth += ${$cellStorage[$innerRowCount][$j+$innerJ]}{width};
+ $groupingWidth += ${$cellStorage[$innerRowCount][$j+$innerJ]}{individualPadding};
+
+ # update the number of & encountered
+ $ampersandsEncountered++;
+ $groupingWidth += ${$cellStorage[$innerRowCount][$j+$innerJ]}{delimiterLength} if ($ampersandsEncountered>0);
+
+ # and adjust the column count, if necessary; in the above example
+ #
+ # \multicolumn{2}{c}{thing} & aaa & bbb \\
+ # 111 & 2 & 33333 & \\
+ # 4 & 55 & 66 & \\
+ # \multicolumn{3}{c}{a} & \\ <!----- focus on the multicolumn entry in this row
+ #
+ # the *first entry* \multicolumn{2}{c}{thing} spans 2 columns, so
+ # we need to move the column count along accordingly
+
+ if(${$cellStorage[$innerRowCount][$j+$innerJ]}{colSpan} =~ m/(\d+)/){
+ $innerJ += $1-1;
+ }
+
+ }
+
+ # adjust for
+ # <spacesBeforeAmpersand>
+ # &
+ # <spacesEndAmpersand>
+ # note:
+ # we need to multiply this by the appropriate
+ # number of *ampersandsEncountered*
+ #
+ # \multicolumn{2}{c}{thing} & \\
+ # 111 & 2 & 33333 \\
+ # 4 & 55 & 66 \\
+
+ $groupingWidth += $ampersandsEncountered
+ *
+ (${$self}{spacesBeforeAmpersand} + ${$self}{spacesAfterAmpersand});
+
+ # update the maximum grouping width
+ $maxGroupingWidth = max($maxGroupingWidth, $groupingWidth);
+ }
+
+ ${$cell}{individualPadding} = 0;
+
+ # there are cases where the
+ #
+ # maxGroupingWidth
+ #
+ # is *less than* the cell width, for example:
+ #
+ # \multicolumn{4}{|c|}{\textbf{Search Results}} \\ <!------ the width of this multicolumn entry
+ # 1 & D7 & R & \\ is larger than maxGroupingWidth
+ # 2 & D2 & R & \\
+ # \multicolumn{3}{|c|}{\textbf{Avg}} & \\
+ #
+ ${$cell}{groupPadding} = max(0,$maxGroupingWidth - ${$cell}{width});
+ }
+ }
+}
+
+sub pretty_print_cell_info{
+
+ my $thingToPrint = (defined $_[0] ? $_[0] : "entry");
+
+ $logger->trace("*cell information: $thingToPrint");
+
+ $logger->trace("minimum multi col span: ",join(",",@minMultiColSpan)) if(@minMultiColSpan);
+
+ foreach my $row (@cellStorage) {
+ my $tmpLogFileLine = q();
+ foreach my $cell (@$row) {
+ $tmpLogFileLine .= ${$cell}{$thingToPrint}."\t";
+ }
+ $logger->trace(' ', $tmpLogFileLine) if($is_t_switch_active);
+ }
+
+ if($thingToPrint eq "type"){
+ $logger->trace("*key to types:");
+ $logger->trace("\tX\tbasic cell, will be measured and aligned");
+ $logger->trace("\t*\t will not be measured, and no ampersand");
+ $logger->trace("\t-\t phantom/blank cell for gaps");
+ $logger->trace("\t[0-9]\tmulticolumn cell, spanning multiple columns");
+ }
+
}
sub double_back_slash_else{
diff --git a/support/latexindent/LatexIndent/Document.pm b/support/latexindent/LatexIndent/Document.pm
index 7f6694d049..027597b9ef 100644
--- a/support/latexindent/LatexIndent/Document.pm
+++ b/support/latexindent/LatexIndent/Document.pm
@@ -35,7 +35,7 @@ use LatexIndent::HorizontalWhiteSpace qw/remove_trailing_whitespace remove_leadi
use LatexIndent::Indent qw/indent wrap_up_statement determine_total_indentation indent_begin indent_body indent_end_statement final_indentation_check get_surrounding_indentation indent_children_recursively check_for_blank_lines_at_beginning put_blank_lines_back_in_at_beginning add_surrounding_indentation_to_begin_statement post_indentation_check/;
use LatexIndent::Tokens qw/token_check %tokens/;
use LatexIndent::HiddenChildren qw/find_surrounding_indentation_for_children update_family_tree get_family_tree check_for_hidden_children/;
-use LatexIndent::AlignmentAtAmpersand qw/align_at_ampersand find_aligned_block double_back_slash_else/;
+use LatexIndent::AlignmentAtAmpersand qw/align_at_ampersand find_aligned_block double_back_slash_else main_formatting individual_padding multicolumn_padding multicolumn_pre_check multicolumn_post_check dont_measure/;
use LatexIndent::DoubleBackSlash qw/dodge_double_backslash un_dodge_double_backslash/;
# code blocks
diff --git a/support/latexindent/LatexIndent/GetYamlSettings.pm b/support/latexindent/LatexIndent/GetYamlSettings.pm
index 3029043f23..addcdaf3f1 100644
--- a/support/latexindent/LatexIndent/GetYamlSettings.pm
+++ b/support/latexindent/LatexIndent/GetYamlSettings.pm
@@ -42,6 +42,10 @@ our @alignAtAmpersandInformation = ( {name=>"lookForAlignDelims",yamlname=>"de
{name=>"spacesBeforeAmpersand",default=>1},
{name=>"spacesAfterAmpersand",default=>1},
{name=>"justification",default=>"left"},
+ {name=>"alignFinalDoubleBackSlash",default=>0},
+ {name=>"dontMeasure",default=>0},
+ {name=>"delimiterRegEx",default=>"(?<!\\\\)(&)"},
+ {name=>"delimiterJustification",default=>"left"},
);
sub yaml_read_settings{
diff --git a/support/latexindent/LatexIndent/LogFile.pm b/support/latexindent/LatexIndent/LogFile.pm
index 75ebe0b2ea..763ca6e39e 100644
--- a/support/latexindent/LatexIndent/LogFile.pm
+++ b/support/latexindent/LatexIndent/LogFile.pm
@@ -103,7 +103,7 @@ ENDQUOTE
${$self}{cruftDirectory} = $switches{cruftDirectory}||(dirname ${$self}{fileName});
die "Could not find directory ${$self}{cruftDirectory}\nExiting, no indentation done." if(!(-d ${$self}{cruftDirectory}));
- my $logfileName = ($switches{cruftDirectory} ? ${$self}{cruftDirectory} : '').($switches{logFileName}||"indent.log");
+ my $logfileName = ($switches{cruftDirectory} ? ${$self}{cruftDirectory}."/" : '').($switches{logFileName}||"indent.log");
# layout of the logfile information, for example
#
@@ -168,8 +168,10 @@ ENDQUOTE
$logger->info("Filename: ${$self}{fileName}");
} else {
$logger->info("Reading input from STDIN");
- my $buttonText = ($FindBin::Script eq 'latexindent.exe') ? 'CTRL+Z followed by ENTER':'CTRL+D';
- print STDERR "Please enter text to be indented: (press $buttonText when finished)\n";
+ if (-t STDIN) {
+ my $buttonText = ($FindBin::Script eq 'latexindent.exe') ? 'CTRL+Z followed by ENTER':'CTRL+D';
+ print STDERR "Please enter text to be indented: (press $buttonText when finished)\n";
+ }
}
# log the switches from the user
diff --git a/support/latexindent/LatexIndent/Sentence.pm b/support/latexindent/LatexIndent/Sentence.pm
index cc11997e36..c8534681f0 100644
--- a/support/latexindent/LatexIndent/Sentence.pm
+++ b/support/latexindent/LatexIndent/Sentence.pm
@@ -25,7 +25,6 @@ use LatexIndent::Environment qw/$environmentBasicRegExp/;
use LatexIndent::IfElseFi qw/$ifElseFiBasicRegExp/;
use LatexIndent::Heading qw/$allHeadingsRegexp/;
use LatexIndent::Special qw/$specialBeginAndBracesBracketsBasicRegExp/;
-use Data::Dumper;
use Exporter qw/import/;
our @ISA = "LatexIndent::Document"; # class inheritance, Programming Perl, pg 321
our @EXPORT_OK = qw/one_sentence_per_line/;
@@ -253,7 +252,15 @@ sub one_sentence_per_line{
# text wrapping
$sentenceObj->yaml_get_columns;
- $sentenceObj->text_wrap;
+ if(${$sentenceObj}{columns}<=0){
+ $logger->warn("*Sentence text wrap warning:");
+ $logger->info("You have specified oneSentencePerLine:textWrapSentences, but columns is set to 0");
+ $logger->info("You might wish to specify, for example: modifyLineBreaks: textWrapOptions: columns: 80");
+ $logger->info("The value of oneSentencePerLine:textWrapSentences will now be set to 0, so you won't see this message again");
+ ${$masterSettings{modifyLineBreaks}{oneSentencePerLine}}{textWrapSentences} = 0;
+ } else {
+ $sentenceObj->text_wrap;
+ }
# indentation of sentences
if(${$sentenceObj}{body} =~ m/
diff --git a/support/latexindent/LatexIndent/Version.pm b/support/latexindent/LatexIndent/Version.pm
index b21b3beb8a..8ec1dc71ba 100644
--- a/support/latexindent/LatexIndent/Version.pm
+++ b/support/latexindent/LatexIndent/Version.pm
@@ -19,6 +19,6 @@ use warnings;
use Exporter qw/import/;
our @EXPORT_OK = qw/$versionNumber $versionDate/;
-our $versionNumber = '3.7.1';
-our $versionDate = '2019-09-07';
+our $versionNumber = '3.8';
+our $versionDate = '2020-03-21';
1
diff --git a/support/latexindent/README b/support/latexindent/README
index 1c1451c2cd..e0b469f3b3 100644
--- a/support/latexindent/README
+++ b/support/latexindent/README
@@ -1,5 +1,5 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- latexindent.pl, version 3.7.1, 2019-09-07
+ latexindent.pl, version 3.8, 2020-03-21
PERL script to indent code within environments, and align delimited
environments in .tex files.
diff --git a/support/latexindent/defaultSettings.yaml b/support/latexindent/defaultSettings.yaml
index e45d27d195..2406809d62 100644
--- a/support/latexindent/defaultSettings.yaml
+++ b/support/latexindent/defaultSettings.yaml
@@ -1,4 +1,4 @@
-# defaultSettings.yaml for latexindent.pl, version 3.7.1, 2019-09-07
+# defaultSettings.yaml for latexindent.pl, version 3.8, 2020-03-21
# a script that aims to
# beautify .tex, .sty, .cls files
#
@@ -154,7 +154,11 @@ lookForAlignDelims:
alignRowsWithoutMaxDelims: 1
spacesBeforeAmpersand: 1
spacesAfterAmpersand: 1
- justification: "left"
+ justification: left
+ alignFinalDoubleBackSlash: 0
+ dontMeasure: 0
+ delimiterRegEx: '(?<!\\)(&)'
+ delimiterJustification: left
tabularx:
delims: 1
longtable: 1
diff --git a/support/latexindent/documentation/latexindent.pdf b/support/latexindent/documentation/latexindent.pdf
index 6597dba12d..9eaf86fe5f 100644
--- a/support/latexindent/documentation/latexindent.pdf
+++ b/support/latexindent/documentation/latexindent.pdf
Binary files differ
diff --git a/support/latexindent/documentation/latexindent.tex b/support/latexindent/documentation/latexindent.tex
index 775bd6a7d9..5ecfce6268 100644
--- a/support/latexindent/documentation/latexindent.tex
+++ b/support/latexindent/documentation/latexindent.tex
@@ -1,8 +1,8 @@
% arara: pdflatex: {shell: yes}
% arara: bibtex
-% arara: pdflatex: {shell: yes}
-% arara: pdflatex: {shell: yes}
-% arara: pdflatex: {shell: yes}
+% arara: pdflatex: {shell: yes} if changed (toFile('latexindent.aux'))
+% arara: pdflatex: {shell: yes} if changed (toFile('latexindent.aux'))
+% arara: pdflatex: {shell: yes} if changed (toFile('latexindent.aux'))
\documentclass[10pt]{article}
% This program is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
@@ -360,129 +360,135 @@
numbers=left,
}
+\lstdefinestyle{lookForAlignDelims}{
+ style=yaml-LST,
+ firstnumber=148,linerange={148-164},
+ numbers=left,
+}
+
\lstdefinestyle{indentAfterItems}{
style=yaml-LST,
- firstnumber=187,linerange={187-191},
+ firstnumber=191,linerange={191-195},
numbers=left,
}
\lstdefinestyle{itemNames}{
style=yaml-LST,
- firstnumber=197,linerange={197-199},
+ firstnumber=201,linerange={201-203},
numbers=left,
}
\lstdefinestyle{specialBeginEnd}{
style=yaml-LST,
- firstnumber=203,linerange={203-216},
+ firstnumber=207,linerange={207-220},
numbers=left,
}
\lstdefinestyle{indentAfterHeadings}{
style=yaml-LST,
- firstnumber=226,linerange={226-235},
+ firstnumber=230,linerange={230-239},
numbers=left,
}
\lstdefinestyle{noAdditionalIndentGlobalEnv}{
style=yaml-LST,
- firstnumber=284,linerange={284-285},
+ firstnumber=288,linerange={288-289},
numbers=left,
}
\lstdefinestyle{noAdditionalIndentGlobal}{
style=yaml-LST,
- firstnumber=284,linerange={284-296},
+ firstnumber=288,linerange={288-300},
numbers=left,
}
\lstdefinestyle{indentRulesGlobalEnv}{
style=yaml-LST,
- firstnumber=300,linerange={300-301},
+ firstnumber=304,linerange={304-305},
numbers=left,
}
\lstdefinestyle{indentRulesGlobal}{
style=yaml-LST,
- firstnumber=300,linerange={300-312},
+ firstnumber=304,linerange={304-316},
numbers=left,
}
\lstdefinestyle{commandCodeBlocks}{
style=yaml-LST,
- firstnumber=315,linerange={315-329},
+ firstnumber=319,linerange={319-333},
numbers=left,
}
\lstdefinestyle{modifylinebreaks}{
style=yaml-LST,
- firstnumber=441,linerange={441-443},
+ firstnumber=445,linerange={445-447},
numbers=left,
}
\lstdefinestyle{textWrapOptions}{
style=yaml-LST,
- firstnumber=468,linerange={468-469},
+ firstnumber=472,linerange={472-473},
numbers=left,
}
\lstdefinestyle{textWrapOptionsAll}{
style=yaml-LST,
- firstnumber=468,linerange={468-484},
+ firstnumber=472,linerange={472-488},
numbers=left,
}
\lstdefinestyle{removeParagraphLineBreaks}{
style=yaml-LST,
- firstnumber=485,linerange={485-499},
+ firstnumber=489,linerange={489-503},
numbers=left,
}
\lstdefinestyle{paragraphsStopAt}{
style=yaml-LST,
- firstnumber=500,linerange={500-509},
+ firstnumber=504,linerange={504-513},
numbers=left,
}
\lstdefinestyle{oneSentencePerLine}{
style=yaml-LST,
- firstnumber=444,linerange={444-467},
+ firstnumber=448,linerange={448-471},
numbers=left,
}
\lstdefinestyle{sentencesFollow}{
style=yaml-LST,
- firstnumber=449,linerange={449-457},
+ firstnumber=453,linerange={453-461},
numbers=left,
}
\lstdefinestyle{sentencesBeginWith}{
style=yaml-LST,
- firstnumber=458,linerange={458-461},
+ firstnumber=462,linerange={462-465},
numbers=left,
}
\lstdefinestyle{sentencesEndWith}{
style=yaml-LST,
- firstnumber=462,linerange={462-467},
+ firstnumber=466,linerange={466-471},
numbers=left,
}
\lstdefinestyle{modifylinebreaksEnv}{
style=yaml-LST,
- firstnumber=510,linerange={510-519},
+ firstnumber=514,linerange={514-523},
numbers=left,
}
\lstdefinestyle{replacements}{
style=yaml-LST,
- firstnumber=571,linerange={571-579},
+ firstnumber=575,linerange={575-583},
numbers=left,
}
\lstdefinestyle{fineTuning}{
style=yaml-LST,
- firstnumber=582,linerange={582-603},
+ firstnumber=586,linerange={586-607},
numbers=left,
}
diff --git a/support/latexindent/documentation/sec-conclusions-know-limitations.tex b/support/latexindent/documentation/sec-conclusions-know-limitations.tex
index 1e865c9c84..ddd4e6c8ad 100644
--- a/support/latexindent/documentation/sec-conclusions-know-limitations.tex
+++ b/support/latexindent/documentation/sec-conclusions-know-limitations.tex
@@ -28,7 +28,7 @@
that this will improve the efficiency of the script.
You can run \texttt{latexindent} on any file;%
- \announce*{2019-07-13}*{ability to call latexindent on any file} if you don't specify an extension, then the extensions that you
+ \announce{2019-07-13}*{ability to call latexindent on any file} if you don't specify an extension, then the extensions that you
specify in \lstinline[breaklines=true]!fileExtensionPreference! (see \vref{lst:fileExtensionPreference}) will be consulted. If you
find a case in which the script struggles, please feel free to report it at
\cite{latexindent-home}, and in the meantime, consider using a \texttt{noIndentBlock} (see \cpageref{lst:noIndentBlockdemo}).
diff --git a/support/latexindent/documentation/sec-default-user-local.tex b/support/latexindent/documentation/sec-default-user-local.tex
index 2a657fae8a..e47115486b 100644
--- a/support/latexindent/documentation/sec-default-user-local.tex
+++ b/support/latexindent/documentation/sec-default-user-local.tex
@@ -18,15 +18,13 @@
\begin{commandshell}
latexindent.pl myfile
\end{commandshell}
- \begin{wrapfigure}[8]{r}[0pt]{6cm}
- \cmhlistingsfromfile[style=fileExtensionPreference]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{fileExtensionPreference}}{lst:fileExtensionPreference}
- \end{wrapfigure}
-
in which case the script will look for \texttt{myfile} with the extensions
specified in \texttt{fileExtensionPreference} in their numeric order. If no match is found, the
script will exit. As with all of the fields, you should change and/or add to this as
necessary.
+ \cmhlistingsfromfile[style=fileExtensionPreference]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{fileExtensionPreference}}{lst:fileExtensionPreference}
+
Calling \texttt{latexindent.pl myfile} with the (default) settings specified in
\cref{lst:fileExtensionPreference} means that the script will first look for
\texttt{myfile.tex}, then \texttt{myfile.sty}, \texttt{myfile.cls}, and
@@ -128,14 +126,13 @@ copy myfile.bak4 to myfile.bak3
\yamltitle{noIndentBlock}*{fields}
- \begin{wrapfigure}[8]{r}[0pt]{6cm}
- \cmhlistingsfromfile[style=noIndentBlock]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{noIndentBlock}}{lst:noIndentBlock}
- \end{wrapfigure}
If you have a block of code that you don't want \texttt{latexindent.pl} to touch (even if
it is \emph{not} a verbatim-like environment) then you can wrap it in an
environment from \texttt{noIndentBlock}; you can use any name you like for this,
provided you populate it as demonstrate in \cref{lst:noIndentBlock}.
+ \cmhlistingsfromfile[style=noIndentBlock]*{../defaultSettings.yaml}[width=.4\linewidth,before=\centering,yaml-TCB]{\texttt{noIndentBlock}}{lst:noIndentBlock}
+
Of course, you don't want to have to specify these as null environments in your code, so
you use them with a comment symbol, \lstinline!%!, followed by as many spaces
(possibly none) as you like; see \cref{lst:noIndentBlockdemo} for example.
@@ -152,35 +149,36 @@ copy myfile.bak4 to myfile.bak3
\yamltitle{removeTrailingWhitespace}*{fields}\label{yaml:removeTrailingWhitespace}
- \begin{wrapfigure}[10]{r}[0pt]{7cm}
- \cmhlistingsfromfile[style=removeTrailingWhitespace]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{removeTrailingWhitespace}{lst:removeTrailingWhitespace}
-
- \vspace{.1cm}
- \begin{yaml}[numbers=none]{removeTrailingWhitespace (alt)}[width=.8\linewidth,before=\centering]{lst:removeTrailingWhitespace-alt}
-removeTrailingWhitespace: 1
-\end{yaml}
- \end{wrapfigure}
Trailing white space can be removed both \emph{before} and
\emph{after} processing the document, as detailed in \cref{lst:removeTrailingWhitespace};
each of the fields can take the values \texttt{0} or
\texttt{1}. See \vref{lst:removeTWS-before,lst:env-mlb5-modAll,lst:env-mlb5-modAll-remove-WS} for before and after results. Thanks
to \cite{vosskuhle} for providing this feature.
+ \begin{minipage}{.4\textwidth}
+ \cmhlistingsfromfile[style=removeTrailingWhitespace]*{../defaultSettings.yaml}[before=\centering,yaml-TCB]{removeTrailingWhitespace}{lst:removeTrailingWhitespace}
+ \end{minipage}%
+ \hfill
+ \begin{minipage}{.5\textwidth}
+ \begin{yaml}[numbers=none]{removeTrailingWhitespace (alt)}[before=\centering]{lst:removeTrailingWhitespace-alt}
+removeTrailingWhitespace: 1
+\end{yaml}
+ \end{minipage}%
+
You can specify \texttt{removeTrailingWhitespace} simply as \texttt{0} or
\texttt{1}, if you wish; in this case,%
\announce{2017-06-28}{removeTrailingWhitespace} \texttt{latexindent.pl} will set both \texttt{beforeProcessing} and
\texttt{afterProcessing} to the value you specify; see \cref{lst:removeTrailingWhitespace-alt}.
\yamltitle{fileContentsEnvironments}*{field}
- \begin{wrapfigure}[6]{r}[0pt]{6cm}
- \cmhlistingsfromfile[style=fileContentsEnvironments]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{fileContentsEnvironments}}{lst:fileContentsEnvironments}
- \end{wrapfigure}
Before \texttt{latexindent.pl} determines the difference between preamble (if any) and
the main document, it first searches for any of the environments specified in
\texttt{fileContentsEnvironments}, see \cref{lst:fileContentsEnvironments}. The behaviour of
\texttt{latexindent.pl} on these environments is determined by their location (preamble
or not), and the value \texttt{indentPreamble}, discussed next.
+ \cmhlistingsfromfile[style=fileContentsEnvironments]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{fileContentsEnvironments}}{lst:fileContentsEnvironments}
+
\yamltitle{indentPreamble}{0|1}
The preamble of a document can sometimes contain some trickier code for
@@ -191,15 +189,14 @@ removeTrailingWhitespace: 1
\yamltitle{lookForPreamble}*{fields}
- \begin{wrapfigure}[8]{r}[0pt]{5cm}
- \cmhlistingsfromfile[style=lookForPreamble]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{lookForPreamble}{lst:lookForPreamble}
- \end{wrapfigure}
Not all files contain preamble; for example, \texttt{sty},
\texttt{cls} and \texttt{bib} files typically do
\emph{not}. Referencing \cref{lst:lookForPreamble}, if you set, for example,
\texttt{.tex} to \texttt{0}, then regardless of the setting of the
value of \texttt{indentPreamble}, preamble will not be assumed when operating upon
\texttt{.tex} files.
+
+ \cmhlistingsfromfile[style=lookForPreamble]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{lookForPreamble}{lst:lookForPreamble}
\yamltitle{preambleCommandsBeforeEnvironments}{0|1}
Assuming that \texttt{latexindent.pl} is asked to operate upon the preamble of a
document, when this switch is set to \texttt{0} then environment code blocks
@@ -223,8 +220,13 @@ postfoothook=\end{mdframed},
\emph{remove} all indentation by setting \texttt{defaultIndent: ""}.
\yamltitle{lookForAlignDelims}*{fields}\label{yaml:lookforaligndelims}
- \begin{wrapfigure}[12]{r}[0pt]{5cm}
- \begin{yaml}[numbers=none]{\texttt{lookForAlignDelims} (basic)}[width=.8\linewidth,before=\centering]{lst:aligndelims:basic}
+ This contains a list of environments and/or commands that are operated upon in a special
+ way by \texttt{latexindent.pl} (see \cref{lst:aligndelims:basic}). In fact, the fields in \texttt{lookForAlignDelims} can
+ actually take two different forms: the \emph{basic} version is shown in
+ \cref{lst:aligndelims:basic} and the \emph{advanced} version in
+ \cref{lst:aligndelims:advanced}; we will discuss each in turn.
+
+ \begin{yaml}[numbers=none]{\texttt{lookForAlignDelims} (basic)}[width=.8\linewidth,before=\centering]{lst:aligndelims:basic}
lookForAlignDelims:
tabular: 1
tabularx: 1
@@ -233,12 +235,6 @@ lookForAlignDelims:
matrix: 1
...
\end{yaml}
- \end{wrapfigure}
- This contains a list of environments and/or commands that are operated upon in a special
- way by \texttt{latexindent.pl} (see \cref{lst:aligndelims:basic}). In fact, the fields in \texttt{lookForAlignDelims} can
- actually take two different forms: the \emph{basic} version is shown in
- \cref{lst:aligndelims:basic} and the \emph{advanced} version in
- \cref{lst:aligndelims:advanced}; we will discuss each in turn.
The environments specified in this field will be operated on in a special way by
\texttt{latexindent.pl}. In particular, it will try and align each column by its
@@ -261,7 +257,7 @@ lookForAlignDelims:
delimiter-aligned block, then the advanced form of \texttt{lookForAlignDelims} shown in
\cref{lst:aligndelims:advanced} is for you.
- \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/tabular.yaml}[yaml-TCB]{\texttt{tabular.yaml}}{lst:aligndelims:advanced}
+ \cmhlistingsfromfile*[style=lookForAlignDelims]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{lookForAlignDelims} (advanced)}{lst:aligndelims:advanced}
Note that you can use a mixture of the basic and advanced form: in
\cref{lst:aligndelims:advanced} \texttt{tabular} and \texttt{tabularx} are advanced
@@ -292,11 +288,25 @@ lookForAlignDelims:
$\geq$ 0) of
spaces to be placed \emph{After} ampersands (default: 1);
\item \announce{2018-01-13}{justification of cells in ampersand alignment}\texttt{justification}: optionally specifies the justification of
- each cell as either \emph{left} or \emph{right} (default: left).
+ each cell as either \emph{left} or \emph{right} (default: left);
+ \item \announce*{2020-03-21}{align final double back slash}{alignFinalDoubleBackSlash} optionally specifies if the
+ \emph{final} double back slash should be used for alignment (default: 0);
+ \item \announce*{2020-03-21}{don't measure feature}{dontMeasure} optionally specifies if
+ user-specified cells, rows or the largest entries should \emph{not} be
+ measured (default: 0);
+ \item \announce*{2020-03-21}{delimiter RegEx feature}{delimiterRegEx} optionally specifies the pattern
+ matching to be used for the alignment delimeter (default: \lstinline3 '(?<!\\)(&)'3);
+ \item \announce*{2020-03-21}{delimiter justification}{delimiterJustification} optionally specifies the justification
+ for the alignment delimeters (default: left); note that this feature is only useful if
+ you have delimiters of different lengths in the same column, discussed in
+ \cref{sec:delimiter-reg-ex}.
\end{itemize}
- We will explore each of these features using the file \texttt{tabular2.tex} in
- \cref{lst:tabular2} (which contains a \lstinline!\multicolumn! command), and the YAML files in \crefrange{lst:tabular2YAML}{lst:tabular8YAML}.
+ We will explore most of these features using the file \texttt{tabular2.tex} in
+ \cref{lst:tabular2} (which contains a \lstinline!\multicolumn! command), and the YAML files in \crefrange{lst:tabular2YAML}{lst:tabular8YAML}; we will explore
+ \texttt{alignFinalDoubleBackSlash} in \cref{lst:tabular4}; the \texttt{dontMeasure} feature
+ will be described in \cref{sec:dontMeasure}, and \texttt{delimiterRegEx} in
+ \cref{sec:delimiter-reg-ex}.
\cmhlistingsfromfile{demonstrations/tabular2.tex}{\texttt{tabular2.tex}}{lst:tabular2}
\begin{minipage}{.45\textwidth}
@@ -384,6 +394,34 @@ latexindent.pl tabular2.tex -l tabular2.yaml,tabular8.yaml
correctly, because of the settings in \cref{lst:tabular2YAML}.
\end{itemize}
+ We explore%
+ \announce*{2020-03-21}{alignFinalDoubleBackSlash demonstration} the
+ \texttt{alignFinalDoubleBackSlash} feature by using the file in \cref{lst:tabular4}. Upon
+ running the following commands
+ \begin{commandshell}
+latexindent.pl tabular4.tex -o=+-default
+latexindent.pl tabular4.tex -o=+-FDBS -y="lookForAlignDelims:tabular:alignFinalDoubleBackSlash:1"
+\end{commandshell}
+ then we receive the respective outputs given in \cref{lst:tabular4-default} and
+ \cref{lst:tabular4-FDBS}.
+
+ \begin{cmhtcbraster}[raster columns=3,
+ raster left skip=-3.75cm,
+ raster right skip=-2cm,]
+ \cmhlistingsfromfile*{demonstrations/tabular4.tex}{\texttt{tabular4.tex}}{lst:tabular4}
+ \cmhlistingsfromfile*{demonstrations/tabular4-default.tex}{\texttt{tabular4-default.tex}}{lst:tabular4-default}
+ \cmhlistingsfromfile*{demonstrations/tabular4-FDBS.tex}{\texttt{tabular4-FDBS.tex}}{lst:tabular4-FDBS}
+ \end{cmhtcbraster}
+
+ We note that in:
+ \begin{itemize}
+ \item \cref{lst:tabular4-default}, by default, the \emph{first} set of double back
+ slashes in the first row of the \texttt{tabular} environment have been used for
+ alignment;
+ \item \cref{lst:tabular4-FDBS}, the \emph{final} set of double back slashes in the
+ first row have been used, because we specified \texttt{alignFinalDoubleBackSlash} as 1.
+ \end{itemize}
+
As of Version 3.0, the alignment routine works on mandatory and optional arguments within
commands, and also within `special' code blocks (see \texttt{specialBeginEnd} on
\cpageref{yaml:specialBeginEnd}); for example, assuming that you have a command called
@@ -419,6 +457,207 @@ latexindent.pl matrix1.tex
(see \vref{sec:noadd-indent-rules}), these comment-marked blocks are
considered \texttt{environments}.
+\subsection{lookForAlignDelims: the dontMeasure feature}\label{sec:dontMeasure}
+ The%
+ \announce*{2020-03-21}{don't measure feature} \texttt{lookForAlignDelims}
+ field can, optionally, receive the \texttt{dontMeasure} option which can be specified
+ in a few different ways. We will explore this feature in relation to the code given in
+ \cref{lst:tabular-DM}; the default output is shown in \cref{lst:tabular-DM-default}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile*{demonstrations/tabular-DM.tex}{\texttt{tabular-DM.tex}}{lst:tabular-DM}
+ \cmhlistingsfromfile*{demonstrations/tabular-DM-default.tex}{\texttt{tabular-DM.tex} default output}{lst:tabular-DM-default}
+ \end{cmhtcbraster}
+
+ The \texttt{dontMeasure} field can be specified as \texttt{largest}, and in
+ which case, the largest element will not be measured; with reference to the YAML file
+ given in \cref{lst:dontMeasure1}, we can run the command
+ \begin{commandshell}
+latexindent.pl tabular-DM.tex -l=dontMeasure1.yaml
+\end{commandshell}
+ and receive the output given in \cref{lst:tabular-DM-mod1}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile*{demonstrations/tabular-DM-mod1.tex}{\texttt{tabular-DM.tex} using \cref{lst:dontMeasure1}}{lst:tabular-DM-mod1}
+ \cmhlistingsfromfile*{demonstrations/dontMeasure1.yaml}[yaml-TCB]{\texttt{dontMeasure1.yaml}}{lst:dontMeasure1}
+ \end{cmhtcbraster}
+
+ We note that the \emph{largest} column entries have not contributed to the
+ measuring routine.
+
+ The \texttt{dontMeasure} field can also be specified in the form demonstrated in
+ \cref{lst:dontMeasure2}. On running the following commands,
+ \begin{commandshell}
+latexindent.pl tabular-DM.tex -l=dontMeasure2.yaml
+\end{commandshell}
+ we receive the output in \cref{lst:tabular-DM-mod2}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile*{demonstrations/tabular-DM-mod2.tex}{\texttt{tabular-DM.tex} using \cref{lst:dontMeasure2} or \cref{lst:dontMeasure3}}{lst:tabular-DM-mod2}
+ \cmhlistingsfromfile*{demonstrations/dontMeasure2.yaml}[yaml-TCB]{\texttt{dontMeasure2.yaml}}{lst:dontMeasure2}
+ \end{cmhtcbraster}
+
+ We note that in \cref{lst:dontMeasure2} we have specified entries not to be measured, one
+ entry per line.
+
+ The \texttt{dontMeasure} field can also be specified in the forms demonstrated in
+ \cref{lst:dontMeasure3} and \cref{lst:dontMeasure4}. Upon running the commands
+ \begin{commandshell}
+latexindent.pl tabular-DM.tex -l=dontMeasure3.yaml
+latexindent.pl tabular-DM.tex -l=dontMeasure4.yaml
+\end{commandshell}
+ we receive the output given in \cref{lst:tabular-DM-mod3}
+ \begin{cmhtcbraster}[raster columns=3,
+ raster left skip=-3.5cm,
+ raster right skip=-2cm,
+ raster column skip=.03\linewidth]
+ \cmhlistingsfromfile*{demonstrations/tabular-DM-mod3.tex}{\texttt{tabular-DM.tex} using \cref{lst:dontMeasure3} or \cref{lst:dontMeasure3}}{lst:tabular-DM-mod3}
+ \cmhlistingsfromfile*{demonstrations/dontMeasure3.yaml}[yaml-TCB]{\texttt{dontMeasure3.yaml}}{lst:dontMeasure3}
+ \cmhlistingsfromfile*{demonstrations/dontMeasure4.yaml}[yaml-TCB]{\texttt{dontMeasure4.yaml}}{lst:dontMeasure4}
+ \end{cmhtcbraster}
+ We note that in:
+ \begin{itemize}
+ \item \cref{lst:dontMeasure3} we have specified entries not to be measured, each one has a
+ \emph{string} in the \texttt{this}
+ field, together with an optional specification of \texttt{applyTo} as
+ \texttt{cell};
+ \item \cref{lst:dontMeasure4} we have specified entries not to be measured as a
+ \emph{regular expression} using
+ the \texttt{regex} field, together with an optional specification of
+ \texttt{applyTo} as \texttt{cell} field, together with an optional
+ specification of \texttt{applyTo} as \texttt{cell}.
+ \end{itemize}
+ In both cases, the default value of \texttt{applyTo} is \texttt{cell},
+ and does not need to be specified.
+
+ We may also specify the \texttt{applyTo} field as \texttt{row}, a
+ demonstration of which is given in \cref{lst:dontMeasure5}; upon running
+ \begin{commandshell}
+latexindent.pl tabular-DM.tex -l=dontMeasure5.yaml
+\end{commandshell}
+ we receive the output in \cref{lst:tabular-DM-mod5}.
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile*{demonstrations/tabular-DM-mod5.tex}{\texttt{tabular-DM.tex} using \cref{lst:dontMeasure5}}{lst:tabular-DM-mod5}
+ \cmhlistingsfromfile*{demonstrations/dontMeasure5.yaml}[yaml-TCB]{\texttt{dontMeasure5.yaml}}{lst:dontMeasure5}
+ \end{cmhtcbraster}
+
+ Finally, the \texttt{applyTo} field can be specified as \texttt{row},
+ together with a \texttt{regex} expression. For example, for the settings given
+ in \cref{lst:dontMeasure6}, upon running
+ \begin{commandshell}
+latexindent.pl tabular-DM.tex -l=dontMeasure6.yaml
+\end{commandshell}
+ we receive the output in \cref{lst:tabular-DM-mod6}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile*{demonstrations/tabular-DM-mod6.tex}{\texttt{tabular-DM.tex} using \cref{lst:dontMeasure6}}{lst:tabular-DM-mod6}
+ \cmhlistingsfromfile*{demonstrations/dontMeasure6.yaml}[yaml-TCB]{\texttt{dontMeasure6.yaml}}{lst:dontMeasure6}
+ \end{cmhtcbraster}
+
+\subsection{lookForAlignDelims: the delimiterRegEx and delimiterJustification feature}\label{sec:delimiter-reg-ex}
+ The delimiter alignment%
+ \announce*{2020-03-21}{delimiterRegEx feature} will, by
+ default, align code blocks at the ampersand character. The behaviour is controlled by the
+ \texttt{delimiterRegEx} field within \texttt{lookForAlignDelims}; the default value is
+ \lstinline3'(?<!\\)(&)'3, which can be read as: \emph{an ampersand, as long as it is not immediately preceeded by a backslash}.
+
+ \begin{warning}
+ Important: note the `capturing' parenthesis in the \lstinline!(&)! which are necessary; if you
+ intend to customise this field, then be sure to include them appropriately.
+ \end{warning}
+
+ We demonstrate how to customise this with respect to the code given in
+ \cref{lst:tabbing}; the default output from \lstinline!latexindent.pl! is given in
+ \cref{lst:tabbing-default}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile*{demonstrations/tabbing.tex}{\texttt{tabbing.tex}}{lst:tabbing}
+ \cmhlistingsfromfile*{demonstrations/tabbing-default.tex}{\texttt{tabbing.tex} default output}{lst:tabbing-default}
+ \end{cmhtcbraster}
+
+ Let's say that we wish to align the code at either the \lstinline!\=! or
+ \lstinline!\>!. We employ the settings given in \cref{lst:delimiterRegEx1} and run
+ the command
+ \begin{commandshell}
+latexindent.pl tabbing.tex -l=delimiterRegEx1.yaml
+\end{commandshell}
+ to receive the output given in \cref{lst:tabbing-mod1}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile*{demonstrations/tabbing-mod1.tex}{\texttt{tabbing.tex} using \cref{lst:delimiterRegEx1}}{lst:tabbing-mod1}
+ \cmhlistingsfromfile*{demonstrations/delimiterRegEx1.yaml}[yaml-TCB]{\texttt{delimiterRegEx1.yaml}}{lst:delimiterRegEx1}
+ \end{cmhtcbraster}
+ We note that:
+ \begin{itemize}
+ \item in \cref{lst:tabbing-mod1} the code has been aligned, as intended, at both the
+ \lstinline!\=! and \lstinline!\>!;
+ \item in \cref{lst:delimiterRegEx1} we have heeded the warning and captured the expression using
+ grouping parenthesis, specified a backslash using \lstinline!\\! and said that
+ it must be followed by either \lstinline!=! or \lstinline!>!.
+ \end{itemize}
+ We can explore \texttt{delimiterRegEx} a little further using the settings in
+ \cref{lst:delimiterRegEx2} and run the command
+ \begin{commandshell}
+latexindent.pl tabbing.tex -l=delimiterRegEx2.yaml
+\end{commandshell}
+ to receive the output given in \cref{lst:tabbing-mod2}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile*{demonstrations/tabbing-mod2.tex}{\texttt{tabbing.tex} using \cref{lst:delimiterRegEx2}}{lst:tabbing-mod2}
+ \cmhlistingsfromfile*{demonstrations/delimiterRegEx2.yaml}[yaml-TCB]{\texttt{delimiterRegEx2.yaml}}{lst:delimiterRegEx2}
+ \end{cmhtcbraster}
+ We note that only the \lstinline!\>! have been aligned.
+
+ Of course, the other lookForAlignDelims options can be used alongside the
+ \texttt{delimiterRegEx}; regardless of the type of delimiter being used (ampersand or
+ anything else), the fields from \vref{lst:aligndelims:advanced} remain the same; for example,
+ using the settings in \cref{lst:delimiterRegEx3}, and running
+ \begin{commandshell}
+latexindent.pl tabbing.tex -l=delimiterRegEx3.yaml
+\end{commandshell}
+ to receive the output given in \cref{lst:tabbing-mod3}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile*{demonstrations/tabbing-mod3.tex}{\texttt{tabbing.tex} using \cref{lst:delimiterRegEx3}}{lst:tabbing-mod3}
+ \cmhlistingsfromfile*{demonstrations/delimiterRegEx3.yaml}[yaml-TCB]{\texttt{delimiterRegEx3.yaml}}{lst:delimiterRegEx3}
+ \end{cmhtcbraster}
+
+ It is possible that delimiters specified within \texttt{delimiterRegEx} can be of
+ different lengths. Consider the file in \cref{lst:tabbing1}, and associated YAML in
+ \cref{lst:delimiterRegEx4}. Note that the \cref{lst:delimiterRegEx4} specifies the
+ option for the delimiter to be either \lstinline!#! or \lstinline!\>!,
+ \emph{which are different lengths}. Upon running the command
+ \begin{commandshell}
+latexindent.pl tabbing1.tex -l=delimiterRegEx4.yaml -o=+-mod4
+\end{commandshell}
+ we receive the output in \cref{lst:tabbing1-mod4}.
+
+ \begin{cmhtcbraster}[raster columns=3,
+ raster left skip=-3.5cm,
+ raster right skip=-2cm,
+ raster column skip=.03\linewidth]
+ \cmhlistingsfromfile*{demonstrations/tabbing1.tex}{\texttt{tabbing1.tex}}{lst:tabbing1}
+ \cmhlistingsfromfile*{demonstrations/tabbing1-mod4.tex}{\texttt{tabbing1-mod4.tex}}{lst:tabbing1-mod4}
+ \cmhlistingsfromfile*{demonstrations/delimiterRegEx4.yaml}[yaml-TCB]{\texttt{delimiterRegEx4.yaml}}{lst:delimiterRegEx4}
+ \end{cmhtcbraster}
+
+ You can set the \emph{delimiter} justification as either \texttt{left} (default)
+ or \texttt{right}, which will only have effect when delimiters in the same
+ column have different lengths. Using the settings in \cref{lst:delimiterRegEx5} and running
+ the command
+ \begin{commandshell}
+latexindent.pl tabbing1.tex -l=delimiterRegEx5.yaml -o=+-mod5
+\end{commandshell}
+ gives the output in \cref{lst:tabbing1-mod5}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile*{demonstrations/tabbing1-mod5.tex}{\texttt{tabbing1-mod5.tex}}{lst:tabbing1-mod5}
+ \cmhlistingsfromfile*{demonstrations/delimiterRegEx5.yaml}[yaml-TCB]{\texttt{delimiterRegEx5.yaml}}{lst:delimiterRegEx5}
+ \end{cmhtcbraster}
+
+ Note that in \cref{lst:tabbing1-mod5} the second set of delimiters have been
+ \emph{right aligned} -- it is quite subtle!
+
\yamltitle{indentAfterItems}*{fields}
The environment names specified in \texttt{indentAfterItems} tell \texttt{latexindent.pl}
to look for \lstinline!\item! commands; if these switches are set to
@@ -435,9 +674,6 @@ latexindent.pl matrix1.tex
\end{cmhtcbraster}
\yamltitle{itemNames}*{fields}
- \begin{wrapfigure}[5]{r}[0pt]{5cm}
- \cmhlistingsfromfile[style=itemNames]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{itemNames}}{lst:itemNames}
- \end{wrapfigure}
If you have your own \texttt{item} commands (perhaps you prefer to use
\texttt{myitem}, for example) then you can put populate them in
\texttt{itemNames}. For example, users of the \texttt{exam} document class
@@ -446,6 +682,8 @@ latexindent.pl matrix1.tex
\vref{sec:indentconfig} for details of how to configure user settings, and
\vref{lst:mysettings} \\ in particular \label{page:examsettings}.)
+ \cmhlistingsfromfile[style=itemNames]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{itemNames}}{lst:itemNames}
+
\yamltitle{specialBeginEnd}*{fields}\label{yaml:specialBeginEnd}
The fields specified%
\announce{2017-08-21}*{specialBeginEnd} in
@@ -568,21 +806,20 @@ latexindent.pl special3.tex -l=special-verb1
\end{cmhtcbraster}
\yamltitle{indentAfterHeadings}*{fields}
- \begin{wrapfigure}[17]{r}[0pt]{8cm}
- \cmhlistingsfromfile[style=indentAfterHeadings]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{indentAfterHeadings}}{lst:indentAfterHeadings}
- \end{wrapfigure}
This field enables the user to specify indentation rules that take effect after heading
commands such as \lstinline!\part!, \lstinline!\chapter!,
\lstinline!\section!, \lstinline!\subsection*!, or indeed any user-specified command
written in this field.\footnote{There is a slight
difference in interface for this field when comparing Version 2.2 to Version 3.0; see \vref{app:differences} for details.}
+ \cmhlistingsfromfile[style=indentAfterHeadings]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{indentAfterHeadings}}{lst:indentAfterHeadings}
+
The default settings do \emph{not} place indentation after a heading, but
- you can easily switch them on by changing \\ \texttt{indentAfterThisHeading: 0} to \\
- \texttt{indentAfterThisHeading: 1}. The \texttt{level} field tells \texttt{latexindent.pl}
- the hierarchy of the heading structure in your document. You might, for example, like to
- have both \texttt{section} and \texttt{subsection} set with
- \texttt{level: 3} because you do not want the indentation to go too deep.
+ you can easily switch them on by changing \texttt{indentAfterThisHeading} from 0 to 1. The
+ \texttt{level} field tells \texttt{latexindent.pl} the hierarchy of the heading
+ structure in your document. You might, for example, like to have both
+ \texttt{section} and \texttt{subsection} set with \texttt{level: 3}
+ because you do not want the indentation to go too deep.
You can add any of your own custom heading commands to this field, specifying the
\texttt{level} as appropriate. You can also specify your own indentation in
@@ -733,5 +970,5 @@ mand arg text
\end{table}
We will refer to these code blocks in what follows.%
- \announce*{2019-07-13}{fine tuning of code blocks} Note that the fine tuning of the definition of the code blocks
+ \announce{2019-07-13}{fine tuning of code blocks} Note that the fine tuning of the definition of the code blocks
detailed in \cref{tab:code-blocks} is discussed in \vref{sec:finetuning}.
diff --git a/support/latexindent/documentation/sec-fine-tuning.tex b/support/latexindent/documentation/sec-fine-tuning.tex
index 9a2cbbb5c8..f026a17623 100644
--- a/support/latexindent/documentation/sec-fine-tuning.tex
+++ b/support/latexindent/documentation/sec-fine-tuning.tex
@@ -2,7 +2,7 @@
\section{Fine tuning}\label{sec:finetuning}
\texttt{latexindent.pl} operates by looking for the code blocks detailed in
\vref{tab:code-blocks}.
- \announce*{2019-07-13}{details of fine tuning of code blocks} The fine tuning of the details of such code blocks
+ \announce{2019-07-13}{details of fine tuning of code blocks} The fine tuning of the details of such code blocks
is controlled by the \texttt{fineTuning} field, detailed in \cref{lst:fineTuning}.
This field is for those that would like to peek under the bonnet/hood and make some fine
@@ -14,7 +14,7 @@
\end{warning}
\begin{widepage}
- \cmhlistingsfromfile*[style=fineTuning]*{../defaultSettings.yaml}[width=0.95\linewidth,before=\centering,yaml-TCB]{\texttt{fineTuning}}{lst:fineTuning}
+ \cmhlistingsfromfile[style=fineTuning]*{../defaultSettings.yaml}[width=0.95\linewidth,before=\centering,yaml-TCB]{\texttt{fineTuning}}{lst:fineTuning}
\end{widepage}
The fields given in \cref{lst:fineTuning} are all \emph{regular expressions}. This manual is
@@ -83,27 +83,63 @@
\texttt{before} and \texttt{between} fields allow trailing comments, line
breaks, and horizontal spaces between each character.
- As a demonstration, consider the file given in \cref{lst:finetuning1}, together with its
- default output using the command
- \begin{commandshell}
+ \begin{example}
+ As a demonstration, consider the file given in \cref{lst:finetuning1}, together with its
+ default output using the command
+ \begin{commandshell}
latexindent.pl finetuning1.tex
\end{commandshell}
- is given in \cref{lst:finetuning1-default}.
+ is given in \cref{lst:finetuning1-default}.
- \begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile*{demonstrations/finetuning1.tex}{\texttt{finetuning1.tex}}{lst:finetuning1}
- \cmhlistingsfromfile*{demonstrations/finetuning1-default.tex}{\texttt{finetuning1.tex} default}{lst:finetuning1-default}
- \end{cmhtcbraster}
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth]
+ \cmhlistingsfromfile{demonstrations/finetuning1.tex}{\texttt{finetuning1.tex}}{lst:finetuning1}
+ \cmhlistingsfromfile{demonstrations/finetuning1-default.tex}{\texttt{finetuning1.tex} default}{lst:finetuning1-default}
+ \end{cmhtcbraster}
- It's clear from \cref{lst:finetuning1-default} that the indentation scheme has not worked as
- expected. We can \emph{fine tune} the indentation scheme by employing the settings
- given in \cref{lst:fine-tuning1} and running the command
- \begin{commandshell}
+ It's clear from \cref{lst:finetuning1-default} that the indentation scheme has not worked as
+ expected. We can \emph{fine tune} the indentation scheme by employing the settings
+ given in \cref{lst:fine-tuning1} and running the command
+ \begin{commandshell}
latexindent.pl finetuning1.tex -l=fine-tuning1.yaml
\end{commandshell}
- and the associated (desired) output is given in \cref{lst:finetuning1-mod1}.
+ and the associated (desired) output is given in \cref{lst:finetuning1-mod1}.
- \begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile*{demonstrations/finetuning1-mod1.tex}{\texttt{finetuning1.tex} using \cref{lst:fine-tuning1}}{lst:finetuning1-mod1}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/fine-tuning1.yaml}[yaml-TCB]{\texttt{finetuning1.yaml}}{lst:fine-tuning1}
- \end{cmhtcbraster}
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth]
+ \cmhlistingsfromfile{demonstrations/finetuning1-mod1.tex}{\texttt{finetuning1.tex} using \cref{lst:fine-tuning1}}{lst:finetuning1-mod1}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/fine-tuning1.yaml}[yaml-TCB]{\texttt{finetuning1.yaml}}{lst:fine-tuning1}
+ \end{cmhtcbraster}
+ \end{example}
+
+ \begin{example}
+ Let's have another demonstration; consider the file given in \cref{lst:finetuning2}, together with its
+ default output using the command
+ \begin{commandshell}
+latexindent.pl finetuning2.tex
+\end{commandshell}
+ is given in \cref{lst:finetuning2-default}.
+
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth,
+ raster left skip=-3.75cm,
+ raster right skip=0cm,]
+ \cmhlistingsfromfile*{demonstrations/finetuning2.tex}{\texttt{finetuning2.tex}}{lst:finetuning2}
+ \cmhlistingsfromfile*{demonstrations/finetuning2-default.tex}{\texttt{finetuning2.tex} default}{lst:finetuning2-default}
+ \end{cmhtcbraster}
+
+ It's clear from \cref{lst:finetuning2-default} that the indentation scheme has not worked as
+ expected. We can \emph{fine tune} the indentation scheme by employing the settings
+ given in \cref{lst:fine-tuning2} and running the command
+ \begin{commandshell}
+latexindent.pl finetuning2.tex -l=fine-tuning2.yaml
+\end{commandshell}
+ and the associated (desired) output is given in \cref{lst:finetuning2-mod1}.
+
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth,
+ raster left skip=-3.75cm,
+ raster right skip=0cm,]
+ \cmhlistingsfromfile*{demonstrations/finetuning2-mod1.tex}{\texttt{finetuning2.tex} using \cref{lst:fine-tuning2}}{lst:finetuning2-mod1}
+ \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/fine-tuning2.yaml}[yaml-TCB]{\texttt{finetuning2.yaml}}{lst:fine-tuning2}
+ \end{cmhtcbraster}
+
+ In particular, note that the settings in \cref{lst:fine-tuning2} specify that \texttt{NamedGroupingBracesBrackets}
+ and \texttt{UnNamedGroupingBracesBrackets} can follow \texttt{"} and that we allow \lstinline!---! between arguments.
+ \end{example}
diff --git a/support/latexindent/documentation/sec-how-to-use.tex b/support/latexindent/documentation/sec-how-to-use.tex
index bdae2b428e..4735cb34a5 100644
--- a/support/latexindent/documentation/sec-how-to-use.tex
+++ b/support/latexindent/documentation/sec-how-to-use.tex
@@ -286,7 +286,7 @@ latexindent.pl -c=/path/to/directory/ myfile.tex
If you wish to have backup files and \texttt{indent.log} written to a directory other
than the current working directory, then you can send these `cruft' files to another
- directory. % this switch was made as a result of http://tex.stackexchange.com/questions/142652/output-latexindent-auxiliary-files-to-a-different-directory
+ directory. Note the use of a trailing forward slash. % this switch was made as a result of http://tex.stackexchange.com/questions/142652/output-latexindent-auxiliary-files-to-a-different-directory
\flagbox{-g, --logfile=<name of log file>}
\begin{commandshell}
@@ -329,12 +329,19 @@ latexindent.pl myfile
\flagbox{STDIN}
\begin{commandshell}
cat myfile.tex | latexindent.pl
+cat myfile.tex | latexindent.pl -
\end{commandshell}
\texttt{latexindent.pl} will%
\announce{2018-01-13}{STDIN allowed} allow input from STDIN, which means that you can pipe output from
other commands directly into the script. For example assuming that you have content in
\texttt{myfile.tex}, then the above command will output the results of operating upon
- \texttt{myfile.tex}
+ \texttt{myfile.tex}.
+
+ If you wish to use this feature with your own local settings, via the \texttt{-l} switch,
+ then you should finish your call to \texttt{latexindent.pl} with a \texttt{-} sign:
+ \begin{commandshell}
+cat myfile.tex | latexindent.pl -l=mysettings.yaml -
+\end{commandshell}
Similarly, if you%
\announce{2018-01-13}*{no options/filename updated} simply type
@@ -357,7 +364,7 @@ latexindent.pl -r myfile.tex
latexindent.pl -replacement myfile.tex
\end{commandshell}
You can%
- \announce*{2019-07-13}{replacement mode switch} call
+ \announce{2019-07-13}{replacement mode switch} call
\texttt{latexindent.pl} with the \texttt{-r} switch to instruct it to perform
replacements/substitutions on your file; full details and examples are given in
\vref{sec:replacements}.
@@ -368,7 +375,7 @@ latexindent.pl -rv myfile.tex
latexindent.pl -replacementrespectverb myfile.tex
\end{commandshell}
You can%
- \announce*{2019-07-13}{replacement mode switch, respecting verbatim} instruct
+ \announce{2019-07-13}{replacement mode switch, respecting verbatim} instruct
\texttt{latexindent.pl} to perform replacements/substitutions by using the
\texttt{-rv} switch, but will \emph{respect verbatim code blocks}; full details and
examples are given in \vref{sec:replacements}.
@@ -379,7 +386,7 @@ latexindent.pl -rr myfile.tex
latexindent.pl -onlyreplacement myfile.tex
\end{commandshell}
You can%
- \announce*{2019-07-13}{replacement (only) mode switch} instruct
+ \announce{2019-07-13}{replacement (only) mode switch} instruct
\texttt{latexindent.pl} to skip all of its other indentation operations and
\emph{only} perform replacements/substitutions by using the
\texttt{-rr} switch; full details and examples are given in
diff --git a/support/latexindent/documentation/sec-introduction.tex b/support/latexindent/documentation/sec-introduction.tex
index c6fafd9269..a6a2627309 100644
--- a/support/latexindent/documentation/sec-introduction.tex
+++ b/support/latexindent/documentation/sec-introduction.tex
@@ -87,7 +87,7 @@
\end{minipage}%
\begin{minipage}{.55\textwidth}
- \cmhlistingsfromfile*[style=replacements]*{../defaultSettings.yaml}[replace-TCB,width=.85\linewidth,before=\centering]{\texttt{replacements}}{lst:replacements-demo}
+ \cmhlistingsfromfile[style=replacements]*{../defaultSettings.yaml}[replace-TCB,width=.85\linewidth,before=\centering]{\texttt{replacements}}{lst:replacements-demo}
\end{minipage}%
\hfill
\begin{minipage}{.4\textwidth}
@@ -128,3 +128,9 @@ perl latexindent-module-installer.pl
\end{commandshell}
You might also like to see \href{https://stackoverflow.com/questions/19590042/error-cant-locate-file-homedir-pm-in-inc}{https://stackoverflow.com/questions/19590042/error-cant-locate-file-homedir-pm-in-inc}, for example, as well as
\vref{sec:requiredmodules}.
+
+\subsection{A word about regular expressions}
+ As you read this documentation, you may encounter the term \emph{regular expressions}. I've
+ tried to write this documentation in such a way so as to allow you to engage with them or
+ not, as you prefer. This documentation is not designed to be a guide to regular
+ expressions, and if you'd like to read about them, I recommend \cite{masteringregexp}.
diff --git a/support/latexindent/documentation/sec-replacements.tex b/support/latexindent/documentation/sec-replacements.tex
index 6bc7223d4d..aa575f269f 100644
--- a/support/latexindent/documentation/sec-replacements.tex
+++ b/support/latexindent/documentation/sec-replacements.tex
@@ -6,9 +6,8 @@
}
You can instruct \texttt{latexindent.pl} to perform replacements/substitutions on your
- \announce*{2019-07-13}{replacement mode switches}
- file by using any of the \texttt{-r}, \texttt{-rv} or
- \texttt{-rr} switches:
+ \announce{2019-07-13}{replacement mode switches} file by using any of the \texttt{-r},
+ \texttt{-rv} or \texttt{-rr} switches:
\begin{itemize}
\item the \texttt{-r} switch will perform indentation and replacements, not
respecting verbatim code blocks;
@@ -42,7 +41,7 @@
\texttt{-rr} switches are active; when discussing YAML settings related to the
replacement-mode switches, we will use the style given in \cref{lst:replacements}.
- \cmhlistingsfromfile*[style=replacements]*{../defaultSettings.yaml}[width=0.95\linewidth,before=\centering,replace-TCB]{\texttt{replacements}}{lst:replacements}
+ \cmhlistingsfromfile[style=replacements]*{../defaultSettings.yaml}[width=0.95\linewidth,before=\centering,replace-TCB]{\texttt{replacements}}{lst:replacements}
The first entry within the \texttt{replacements} field is \texttt{amalgamate}, and
is \emph{optional}; by default it is set to 1, so that replacements will be
@@ -65,8 +64,8 @@ latexindent.pl -r replace1.tex
gives the output given in \cref{lst:replace1-r1}.
\begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile*{demonstrations/replace1.tex}{\texttt{replace1.tex}}{lst:replace1}
- \cmhlistingsfromfile*{demonstrations/replace1-r1.tex}{\texttt{replace1.tex} default}{lst:replace1-r1}
+ \cmhlistingsfromfile{demonstrations/replace1.tex}{\texttt{replace1.tex}}{lst:replace1}
+ \cmhlistingsfromfile{demonstrations/replace1-r1.tex}{\texttt{replace1.tex} default}{lst:replace1-r1}
\end{cmhtcbraster}
If we don't wish to perform this replacement, then we can tweak the default settings of
@@ -78,8 +77,8 @@ latexindent.pl -r replace1.tex -l=replace1.yaml
which gives the output in \cref{lst:replace1-mod1}.
\begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile*{demonstrations/replace1-mod1.tex}{\texttt{replace1.tex} using \cref{lst:replace1-yaml}}{lst:replace1-mod1}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/replace1.yaml}[replace-TCB]{\texttt{replace1.yaml}}{lst:replace1-yaml}
+ \cmhlistingsfromfile{demonstrations/replace1-mod1.tex}{\texttt{replace1.tex} using \cref{lst:replace1-yaml}}{lst:replace1-mod1}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/replace1.yaml}[replace-TCB]{\texttt{replace1.yaml}}{lst:replace1-yaml}
\end{cmhtcbraster}
Note that in \cref{lst:replace1-yaml} we have specified \texttt{amalgamate} as 0 so
@@ -108,7 +107,7 @@ latexindent.pl -r replace1.tex -l=replace1.yaml
\begin{example}
We begin with code given in \cref{lst:colsep}
- \cmhlistingsfromfile*{demonstrations/colsep.tex}{\texttt{colsep.tex}}{lst:colsep}
+ \cmhlistingsfromfile{demonstrations/colsep.tex}{\texttt{colsep.tex}}{lst:colsep}
Let's assume that our goal is to remove both of the \texttt{arraycolsep} statements; we can achieve this in
a few different ways.
@@ -119,8 +118,8 @@ latexindent.pl -r colsep.tex -l=colsep.yaml
\end{commandshell}
then we achieve the output in \cref{lst:colsep-mod0}.
\begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile*{demonstrations/colsep-mod0.tex}{\texttt{colsep.tex} using \cref{lst:colsep}}{lst:colsep-mod0}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/colsep.yaml}[replace-TCB]{\texttt{colsep.yaml}}{lst:colsep-yaml}
+ \cmhlistingsfromfile{demonstrations/colsep-mod0.tex}{\texttt{colsep.tex} using \cref{lst:colsep}}{lst:colsep-mod0}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/colsep.yaml}[replace-TCB]{\texttt{colsep.yaml}}{lst:colsep-yaml}
\end{cmhtcbraster}
Note that in \cref{lst:colsep-yaml}, we have specified \emph{two} separate fields, each with their own `\emph{this}' field;
furthermore, for both of the separate fields, we have not specified `\texttt{that}', so the \texttt{that} field
@@ -135,8 +134,8 @@ latexindent.pl -r colsep.tex -l=colsep1.yaml
\begin{cmhtcbraster}[raster column skip=.01\linewidth,
raster force size=false,
raster column 1/.style={add to width=-.1\textwidth}]
- \cmhlistingsfromfile*{demonstrations/colsep-mod1.tex}{\texttt{colsep.tex} using \cref{lst:colsep1}}{lst:colsep-mod1}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/colsep1.yaml}[replace-TCB,width=0.6\textwidth]{\texttt{colsep1.yaml}}{lst:colsep1}
+ \cmhlistingsfromfile{demonstrations/colsep-mod1.tex}{\texttt{colsep.tex} using \cref{lst:colsep1}}{lst:colsep-mod1}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/colsep1.yaml}[replace-TCB,width=0.6\textwidth]{\texttt{colsep1.yaml}}{lst:colsep1}
\end{cmhtcbraster}
The code given in \cref{lst:colsep1} is an example of a \emph{regular expression}, which we may abbreviate to \emph{regex}
@@ -168,8 +167,8 @@ latexindent.pl -r colsep.tex -l=multi-line.yaml
\end{commandshell}
then we achieve the output in \cref{lst:colsep-mod2}.
\begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile*{demonstrations/colsep-mod2.tex}{\texttt{colsep.tex} using \cref{lst:multi-line}}{lst:colsep-mod2}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/multi-line.yaml}[replace-TCB]{\texttt{multi-line.yaml}}{lst:multi-line}
+ \cmhlistingsfromfile{demonstrations/colsep-mod2.tex}{\texttt{colsep.tex} using \cref{lst:multi-line}}{lst:colsep-mod2}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/multi-line.yaml}[replace-TCB]{\texttt{multi-line.yaml}}{lst:multi-line}
\end{cmhtcbraster}
With reference to \cref{lst:multi-line}, we have specified a \emph{multi-line} version of \texttt{this} by employing the \emph{literal}
YAML style \lstinline!|-!. See, for example, \href{https://stackoverflow.com/questions/3790454/in-yaml-how-do-i-break-a-string-over-multiple-lines}{https://stackoverflow.com/questions/3790454/in-yaml-how-do-i-break-a-string-over-multiple-lines}
@@ -185,8 +184,8 @@ latexindent.pl -r colsep.tex -l=multi-line1.yaml
\end{commandshell}
then we achieve the output in \cref{lst:colsep-mod3}.
\begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile*{demonstrations/colsep-mod3.tex}{\texttt{colsep.tex} using \cref{lst:multi-line1}}{lst:colsep-mod3}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/multi-line1.yaml}[replace-TCB]{\texttt{multi-line1.yaml}}{lst:multi-line1}
+ \cmhlistingsfromfile{demonstrations/colsep-mod3.tex}{\texttt{colsep.tex} using \cref{lst:multi-line1}}{lst:colsep-mod3}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/multi-line1.yaml}[replace-TCB]{\texttt{multi-line1.yaml}}{lst:multi-line1}
\end{cmhtcbraster}
We note that, because we have specified \texttt{when: after}, that \texttt{latexindent.pl} has not found the string specified
in \cref{lst:multi-line1} within the file in \vref{lst:colsep}. As it has looked for the string within \cref{lst:multi-line1} \emph{after} the indentation has been performed. After
@@ -206,7 +205,7 @@ latexindent.pl -rr colsep.tex -l=multi-line1.yaml
the code in \cref{lst:displaymath}, let's assume that our goal is to replace each occurrence of \lstinline!$$...$$!
with \lstinline!\begin{equation*}...\end{equation*}!. This example is partly motivated by \href{https://tex.stackexchange.com/questions/242150/good-looking-latex-code}{tex stackexchange question 242150}.
- \cmhlistingsfromfile*{demonstrations/displaymath.tex}{\texttt{displaymath.tex}}{lst:displaymath}
+ \cmhlistingsfromfile{demonstrations/displaymath.tex}{\texttt{displaymath.tex}}{lst:displaymath}
We use the settings in \cref{lst:displaymath1} and run the command
\begin{commandshell}
@@ -216,8 +215,8 @@ latexindent.pl -r displaymath.tex -l=displaymath1.yaml
\begin{cmhtcbraster}[raster left skip=-3.75cm,
raster right skip=-2cm,]
- \cmhlistingsfromfile*{demonstrations/displaymath-mod1.tex}{\texttt{displaymath.tex} using \cref{lst:displaymath1}}{lst:displaymath-mod1}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/displaymath1.yaml}[replace-TCB]{\texttt{displaymath1.yaml}}{lst:displaymath1}
+ \cmhlistingsfromfile{demonstrations/displaymath-mod1.tex}{\texttt{displaymath.tex} using \cref{lst:displaymath1}}{lst:displaymath-mod1}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/displaymath1.yaml}[replace-TCB]{\texttt{displaymath1.yaml}}{lst:displaymath1}
\end{cmhtcbraster}
A few notes about \cref{lst:displaymath1}:
@@ -243,8 +242,8 @@ latexindent.pl -r -m displaymath.tex -l=displaymath1.yaml,equation.yaml
raster force size=false,
raster column 1/.style={add to width=-.1\textwidth},
raster column skip=.06\linewidth]
- \cmhlistingsfromfile*{demonstrations/displaymath-mod2.tex}{\texttt{displaymath.tex} using \cref{lst:displaymath1,lst:equation}}{lst:displaymath-mod2}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/equation.yaml}[MLB-TCB,width=0.55\textwidth]{\texttt{equation.yaml}}{lst:equation}
+ \cmhlistingsfromfile{demonstrations/displaymath-mod2.tex}{\texttt{displaymath.tex} using \cref{lst:displaymath1,lst:equation}}{lst:displaymath-mod2}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/equation.yaml}[MLB-TCB,width=0.55\textwidth]{\texttt{equation.yaml}}{lst:equation}
\end{cmhtcbraster}
\end{example}
@@ -252,7 +251,7 @@ latexindent.pl -r -m displaymath.tex -l=displaymath1.yaml,equation.yaml
This example is motivated by \href{https://tex.stackexchange.com/questions/490086/bring-several-lines-together-to-fill-blank-spaces-in-texmaker}{tex stackexchange question 490086}.
We begin with the code in \cref{lst:phrase}.
- \cmhlistingsfromfile*{demonstrations/phrase.tex}{\texttt{phrase.tex}}{lst:phrase}
+ \cmhlistingsfromfile{demonstrations/phrase.tex}{\texttt{phrase.tex}}{lst:phrase}
Our goal is to make the spacing uniform between the phrases. To achieve this, we employ the settings in \cref{lst:hspace},
and run the command
@@ -262,8 +261,8 @@ latexindent.pl -r phrase.tex -l=hspace.yaml
which gives the output in \cref{lst:phrase-mod1}.
\begin{cmhtcbraster}
- \cmhlistingsfromfile*{demonstrations/phrase-mod1.tex}{\texttt{phrase.tex} using \cref{lst:hspace}}{lst:phrase-mod1}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/hspace.yaml}[replace-TCB]{\texttt{hspace.yaml}}{lst:hspace}
+ \cmhlistingsfromfile{demonstrations/phrase-mod1.tex}{\texttt{phrase.tex} using \cref{lst:hspace}}{lst:phrase-mod1}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/hspace.yaml}[replace-TCB]{\texttt{hspace.yaml}}{lst:hspace}
\end{cmhtcbraster}
The \lstinline!\h+! setting in \cref{lst:hspace} say to replace \emph{at least one horizontal space} with a single space.
@@ -272,7 +271,7 @@ latexindent.pl -r phrase.tex -l=hspace.yaml
\begin{example}
We begin with the code in \cref{lst:references}.
- \cmhlistingsfromfile*{demonstrations/references.tex}{\texttt{references.tex}}{lst:references}
+ \cmhlistingsfromfile{demonstrations/references.tex}{\texttt{references.tex}}{lst:references}
Our goal is to change each reference so that both the text and the reference are contained within one hyperlink. We
achieve this by employing \cref{lst:reference} and running the command
@@ -281,9 +280,9 @@ latexindent.pl -r references.tex -l=reference.yaml
\end{commandshell}
which gives the output in \cref{lst:references-mod1}.
- \cmhlistingsfromfile*{demonstrations/references-mod1.tex}{\texttt{references.tex} using \cref{lst:reference}}{lst:references-mod1}
+ \cmhlistingsfromfile{demonstrations/references-mod1.tex}{\texttt{references.tex} using \cref{lst:reference}}{lst:references-mod1}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/reference.yaml}[replace-TCB]{\texttt{reference.yaml}}{lst:reference}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/reference.yaml}[replace-TCB]{\texttt{reference.yaml}}{lst:reference}
Referencing \cref{lst:reference}, the \lstinline!|! means \emph{or}, we have used \emph{capture groups}, together with an example
of an \emph{optional} pattern, \lstinline!(?:eq)?!.
@@ -294,8 +293,8 @@ latexindent.pl -r references.tex -l=reference.yaml
an example that contains a verbatim code block, \cref{lst:verb1}; we will use the settings in \cref{lst:verbatim1-yaml}.
\begin{cmhtcbraster}
- \cmhlistingsfromfile*{demonstrations/verb1.tex}{\texttt{verb1.tex}}{lst:verb1}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/verbatim1.yaml}[replace-TCB]{\texttt{verbatim1.yaml}}{lst:verbatim1-yaml}
+ \cmhlistingsfromfile{demonstrations/verb1.tex}{\texttt{verb1.tex}}{lst:verb1}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/verbatim1.yaml}[replace-TCB]{\texttt{verbatim1.yaml}}{lst:verbatim1-yaml}
\end{cmhtcbraster}
Upon running the following commands,
@@ -309,9 +308,9 @@ latexindent.pl -rr verb1.tex -l=verbatim1.yaml -o=+-rr-mod1
\begin{cmhtcbraster}[raster columns=3,
raster left skip=-3.75cm,
raster right skip=-2cm,]
- \cmhlistingsfromfile*{demonstrations/verb1-mod1.tex}{\texttt{verb1-mod1.tex}}{lst:verb1-mod1}
- \cmhlistingsfromfile*{demonstrations/verb1-rv-mod1.tex}{\texttt{verb1-rv-mod1.tex}}{lst:verb1-rv-mod1}
- \cmhlistingsfromfile*{demonstrations/verb1-rr-mod1.tex}{\texttt{verb1-rr-mod1.tex}}{lst:verb1-rr-mod1}
+ \cmhlistingsfromfile{demonstrations/verb1-mod1.tex}{\texttt{verb1-mod1.tex}}{lst:verb1-mod1}
+ \cmhlistingsfromfile{demonstrations/verb1-rv-mod1.tex}{\texttt{verb1-rv-mod1.tex}}{lst:verb1-rv-mod1}
+ \cmhlistingsfromfile{demonstrations/verb1-rr-mod1.tex}{\texttt{verb1-rr-mod1.tex}}{lst:verb1-rr-mod1}
\end{cmhtcbraster}
\end{example}
@@ -332,16 +331,16 @@ latexindent.pl -rr verb1.tex -l=verbatim1.yaml -o=+-rr-mod1
Let's explore the \texttt{amalgamate} field from \vref{lst:replacements} in the context of the file specified
in \cref{lst:amalg1}.
- \cmhlistingsfromfile*{demonstrations/amalg1.tex}{\texttt{amalg1.tex}}{lst:amalg1}
+ \cmhlistingsfromfile{demonstrations/amalg1.tex}{\texttt{amalg1.tex}}{lst:amalg1}
Let's consider the YAML files given in \crefrange{lst:amalg1-yaml}{lst:amalg3-yaml}.
\begin{cmhtcbraster}[raster columns=3,
raster left skip=-3.75cm,
raster right skip=-2cm,]
- \cmhlistingsfromfile*[style=yaml-LST]{demonstrations/amalg1-yaml.yaml}[replace-TCB]{\texttt{amalg1-yaml.yaml}}{lst:amalg1-yaml}
- \cmhlistingsfromfile*[style=yaml-LST]{demonstrations/amalg2-yaml.yaml}[replace-TCB]{\texttt{amalg2-yaml.yaml}}{lst:amalg2-yaml}
- \cmhlistingsfromfile*[style=yaml-LST]{demonstrations/amalg3-yaml.yaml}[replace-TCB]{\texttt{amalg3-yaml.yaml}}{lst:amalg3-yaml}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/amalg1-yaml.yaml}[replace-TCB]{\texttt{amalg1-yaml.yaml}}{lst:amalg1-yaml}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/amalg2-yaml.yaml}[replace-TCB]{\texttt{amalg2-yaml.yaml}}{lst:amalg2-yaml}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/amalg3-yaml.yaml}[replace-TCB]{\texttt{amalg3-yaml.yaml}}{lst:amalg3-yaml}
\end{cmhtcbraster}
Upon running the following commands,
@@ -355,9 +354,9 @@ latexindent.pl -r amalg1.tex -l=amalg1-yaml,amalg2-yaml,amalg3-yaml
\begin{cmhtcbraster}[raster columns=3,
raster left skip=-3.75cm,
raster right skip=-2cm,]
- \cmhlistingsfromfile*{demonstrations/amalg1-mod1.tex}{\texttt{amalg1.tex} using \cref{lst:amalg1-yaml}}{lst:amalg1-mod1}
- \cmhlistingsfromfile*{demonstrations/amalg1-mod12.tex}{\texttt{amalg1.tex} using \cref{lst:amalg1-yaml,lst:amalg2-yaml}}{lst:amalg1-mod12}
- \cmhlistingsfromfile*{demonstrations/amalg1-mod123.tex}{\texttt{amalg1.tex} using \cref{lst:amalg1-yaml,lst:amalg2-yaml,lst:amalg3-yaml}}{lst:amalg1-mod123}
+ \cmhlistingsfromfile{demonstrations/amalg1-mod1.tex}{\texttt{amalg1.tex} using \cref{lst:amalg1-yaml}}{lst:amalg1-mod1}
+ \cmhlistingsfromfile{demonstrations/amalg1-mod12.tex}{\texttt{amalg1.tex} using \cref{lst:amalg1-yaml,lst:amalg2-yaml}}{lst:amalg1-mod12}
+ \cmhlistingsfromfile{demonstrations/amalg1-mod123.tex}{\texttt{amalg1.tex} using \cref{lst:amalg1-yaml,lst:amalg2-yaml,lst:amalg3-yaml}}{lst:amalg1-mod123}
\end{cmhtcbraster}
We note that:
\begin{enumerate}
diff --git a/support/latexindent/documentation/sec-the-m-switch.tex b/support/latexindent/documentation/sec-the-m-switch.tex
index c7cb62a41f..7d8f72ed7c 100644
--- a/support/latexindent/documentation/sec-the-m-switch.tex
+++ b/support/latexindent/documentation/sec-the-m-switch.tex
@@ -146,7 +146,7 @@ latexindent.pl -m textwrap4.tex -o textwrap4-mod2.tex -l textwrap2.yaml
There are options to specify the \texttt{huge} option for the
\texttt{Text::Wrap} module \cite{textwrap}
- \announce*{2019-09-07}{huge option for text wrap module}. This can be helpful if you would like to forbid the
+ \announce{2019-09-07}{huge option for text wrap module}. This can be helpful if you would like to forbid the
\texttt{Text::Wrap} routine from breaking words. For example, using the settings
in \cref{lst:textwrap2A-yaml,lst:textwrap2B-yaml} and running the commands
\begin{commandshell}
@@ -158,11 +158,11 @@ latexindent.pl -m textwrap4.tex -o=+-mod2B -l textwrap2B.yaml
this; see \cite{textwrap} for more details.
\begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile*{demonstrations/textwrap4-mod2A.tex}{\texttt{textwrap4-mod2A.tex}}{lst:textwrap4-mod2A}
- \cmhlistingsfromfile*{demonstrations/textwrap2A.yaml}[MLB-TCB]{\texttt{textwrap2A.yaml}}{lst:textwrap2A-yaml}
+ \cmhlistingsfromfile{demonstrations/textwrap4-mod2A.tex}{\texttt{textwrap4-mod2A.tex}}{lst:textwrap4-mod2A}
+ \cmhlistingsfromfile{demonstrations/textwrap2A.yaml}[MLB-TCB]{\texttt{textwrap2A.yaml}}{lst:textwrap2A-yaml}
- \cmhlistingsfromfile*{demonstrations/textwrap4-mod2B.tex}{\texttt{textwrap4-mod2B.tex}}{lst:textwrap4-mod2B}
- \cmhlistingsfromfile*{demonstrations/textwrap2B.yaml}[MLB-TCB]{\texttt{textwrap2B.yaml}}{lst:textwrap2B-yaml}
+ \cmhlistingsfromfile{demonstrations/textwrap4-mod2B.tex}{\texttt{textwrap4-mod2B.tex}}{lst:textwrap4-mod2B}
+ \cmhlistingsfromfile{demonstrations/textwrap2B.yaml}[MLB-TCB]{\texttt{textwrap2B.yaml}}{lst:textwrap2B-yaml}
\end{cmhtcbraster}
\subsubsection{text wrapping on a per-code-block basis}
@@ -576,7 +576,7 @@ latexindent.pl url -m -l=manipulate-sentences.yaml
you can switch it off by setting it to \texttt{0}, and you can
experiment with the \texttt{other}
field.%
- \announce*{2019-07-13}{fine tuning the betterFullStop} You can also seek
+ \announce{2019-07-13}{fine tuning the betterFullStop} You can also seek
to customise the \texttt{betterFullStop} routine by using the
\emph{fine tuning}, detailed in \vref{lst:fineTuning}.
@@ -669,6 +669,11 @@ latexindent.pl multiple-sentences5 -m -l=sentence-wrap1.yaml
\vref{lst:textwrap9-yaml}, for example, you would replace/append
\texttt{environments} with, for example, \texttt{sentence: 50}.
+ If you specify \texttt{textWrapSentences} as 1, but do \emph{not}
+ specify a value for \texttt{columns} then the text wrapping will
+ \emph{not} operate on sentences, and you will see a warning in
+ \texttt{indent.log}.
+
The indentation of sentences requires that sentences are stored as code blocks. This
means that you may need to tweak \vref{lst:sentencesEndWith}. Let's explore this in
relation to \cref{lst:multiple-sentences6}.
@@ -969,7 +974,7 @@ latexindent.pl -m textwrap7.tex -l=textwrap12.yaml -o=+-mod12
there is not already a line break before or after the \emph{<part of thing>},
followed by a blank line;
\item[4] \emph{add blank line mode}%
- \announce*{2019-07-13}{blank line poly-switch}; a blank line will
+ \announce{2019-07-13}{blank line poly-switch}; a blank line will
be added before or after the \emph{<part of thing>} under consideration, even if the
\emph{<part of thing>} is already on its own line.
\end{itemize}
@@ -1099,22 +1104,22 @@ latexindent.pl -m env-mlb.tex -l env-mlb2.yaml
\emph{blank line} has been added after adding the line break.
Let's now change%
- \announce*{2019-07-13}{demonstration of new blank line poly-switch} each of
+ \announce{2019-07-13}{demonstration of new blank line poly-switch} each of
the \texttt{1} values in \cref{lst:env-mlb5,lst:env-mlb6} so that they are
$4$ and save them into \texttt{env-beg4.yaml} and
\texttt{env-body4.yaml} respectively (see \cref{lst:env-beg4,lst:env-body4}).
\begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/env-beg4.yaml}[MLB-TCB]{\texttt{env-beg4.yaml}}{lst:env-beg4}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-beg4.yaml}[MLB-TCB]{\texttt{env-beg4.yaml}}{lst:env-beg4}
\end{minipage}
\hfill
\begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/env-body4.yaml}[MLB-TCB]{\texttt{env-body4.yaml}}{lst:env-body4}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-body4.yaml}[MLB-TCB]{\texttt{env-body4.yaml}}{lst:env-body4}
\end{minipage}
We will demonstrate this poly-switch value using the code in \cref{lst:env-mlb1-text}.
- \cmhlistingsfromfile*{demonstrations/env-mlb1.tex}{\texttt{env-mlb1.tex}}{lst:env-mlb1-text}
+ \cmhlistingsfromfile{demonstrations/env-mlb1.tex}{\texttt{env-mlb1.tex}}{lst:env-mlb1-text}
Upon running the commands
\begin{commandshell}
@@ -1125,8 +1130,8 @@ latexindent.pl -m env-mlb.1tex -l env-body4.yaml
then we receive the respective outputs in \cref{lst:env-mlb1-beg4,lst:env-mlb1-body4}.
\begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile*{demonstrations/env-mlb1-beg4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-beg4}}{lst:env-mlb1-beg4}
- \cmhlistingsfromfile*{demonstrations/env-mlb1-body4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-body4}}{lst:env-mlb1-body4}
+ \cmhlistingsfromfile{demonstrations/env-mlb1-beg4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-beg4}}{lst:env-mlb1-beg4}
+ \cmhlistingsfromfile{demonstrations/env-mlb1-body4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-body4}}{lst:env-mlb1-body4}
\end{cmhtcbraster}
We note in particular that, by design, for this value of the poly-switches:
@@ -1237,17 +1242,17 @@ latexindent.pl -m env-mlb.tex -l env-mlb8.yaml
\emph{blank line} has been added after the line break.
Let's now change%
- \announce*{2019-07-13}{demonstration of new blank line poly-switch} each
+ \announce{2019-07-13}{demonstration of new blank line poly-switch} each
of the \texttt{1} values in \cref{lst:env-mlb11,lst:env-mlb12} so that they
are $4$ and save them into \texttt{env-end4.yaml} and
\texttt{env-end-f4.yaml} respectively (see \cref{lst:env-end4,lst:env-end-f4}).
\begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/env-end4.yaml}[MLB-TCB]{\texttt{env-end4.yaml}}{lst:env-end4}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-end4.yaml}[MLB-TCB]{\texttt{env-end4.yaml}}{lst:env-end4}
\end{minipage}
\hfill
\begin{minipage}{.5\textwidth}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/env-end-f4.yaml}[MLB-TCB]{\texttt{env-end-f4.yaml}}{lst:env-end-f4}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-end-f4.yaml}[MLB-TCB]{\texttt{env-end-f4.yaml}}{lst:env-end-f4}
\end{minipage}
We will demonstrate this poly-switch value using the code from
@@ -1262,8 +1267,8 @@ latexindent.pl -m env-mlb.1tex -l env-end-f4.yaml
then we receive the respective outputs in \cref{lst:env-mlb1-end4,lst:env-mlb1-end-f4}.
\begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile*{demonstrations/env-mlb1-end4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-end4}}{lst:env-mlb1-end4}
- \cmhlistingsfromfile*{demonstrations/env-mlb1-end-f4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-end-f4}}{lst:env-mlb1-end-f4}
+ \cmhlistingsfromfile{demonstrations/env-mlb1-end4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-end4}}{lst:env-mlb1-end4}
+ \cmhlistingsfromfile{demonstrations/env-mlb1-end-f4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-end-f4}}{lst:env-mlb1-end-f4}
\end{cmhtcbraster}
We note in particular that, by design, for this value of the poly-switches:
@@ -1504,7 +1509,7 @@ latexindent.pl -m env-mlb7.tex -l env-mlb13.yaml,env-mlb14.yaml,UnpreserveBlankL
\subsection{Poly-switches for double back slash}\label{subsec:dbs}
With reference to \texttt{lookForAlignDelims} (see \vref{lst:aligndelims:basic})%
- \announce*{2019-07-13}{poly-switch for double back slash} you can
+ \announce{2019-07-13}{poly-switch for double back slash} you can
specify poly-switches to dictate the line-break behaviour of double back slashes in
environments (\vref{lst:tabularafter:basic}), commands (\vref{lst:matrixafter}), or
special code blocks (\vref{lst:specialafter}). Note that for these poly-switches to
@@ -1512,7 +1517,7 @@ latexindent.pl -m env-mlb7.tex -l env-mlb13.yaml,env-mlb14.yaml,UnpreserveBlankL
\texttt{lookForAlignDelims} (\vref{lst:aligndelims:basic}); we will demonstrate this in what follows.
Consider the code given in \cref{lst:dbs-demo}.
- \begin{cmhlistings}*[style=tcblatex,escapeinside={(*@}{@*)}]{\texttt{tabular3.tex}}{lst:dbs-demo}
+ \begin{cmhlistings}[style=tcblatex,escapeinside={(*@}{@*)}]{\texttt{tabular3.tex}}{lst:dbs-demo}
\begin{tabular}{cc}
1 & 2 (*@$\ElseStartsOnOwnLine$@*)\\(*@$\ElseFinishesWithLineBreak$@*) 3 & 4 (*@$\ElseStartsOnOwnLine$@*)\\(*@$\ElseFinishesWithLineBreak$@*)
\end{tabular}
@@ -1541,13 +1546,13 @@ latexindent.pl -m tabular3.tex -l DBS2.yaml
\cref{lst:tabular3-DBS2}.
\begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile*{demonstrations/tabular3-mod1.tex}{\texttt{tabular3.tex} using \cref{lst:DBS1}}{lst:tabular3-DBS1}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/DBS1.yaml}[MLB-TCB]{\texttt{DBS1.yaml}}{lst:DBS1}
+ \cmhlistingsfromfile{demonstrations/tabular3-mod1.tex}{\texttt{tabular3.tex} using \cref{lst:DBS1}}{lst:tabular3-DBS1}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/DBS1.yaml}[MLB-TCB]{\texttt{DBS1.yaml}}{lst:DBS1}
\end{cmhtcbraster}
\begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile*{demonstrations/tabular3-mod2.tex}{\texttt{tabular3.tex} using \cref{lst:DBS2}}{lst:tabular3-DBS2}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/DBS2.yaml}[MLB-TCB]{\texttt{DBS2.yaml}}{lst:DBS2}
+ \cmhlistingsfromfile{demonstrations/tabular3-mod2.tex}{\texttt{tabular3.tex} using \cref{lst:DBS2}}{lst:tabular3-DBS2}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/DBS2.yaml}[MLB-TCB]{\texttt{DBS2.yaml}}{lst:DBS2}
\end{cmhtcbraster}
We note that
@@ -1576,13 +1581,13 @@ latexindent.pl -m tabular3.tex -l DBS4.yaml
\cref{lst:tabular3-DBS4}.
\begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile*{demonstrations/tabular3-mod3.tex}{\texttt{tabular3.tex} using \cref{lst:DBS3}}{lst:tabular3-DBS3}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/DBS3.yaml}[MLB-TCB]{\texttt{DBS3.yaml}}{lst:DBS3}
+ \cmhlistingsfromfile{demonstrations/tabular3-mod3.tex}{\texttt{tabular3.tex} using \cref{lst:DBS3}}{lst:tabular3-DBS3}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/DBS3.yaml}[MLB-TCB]{\texttt{DBS3.yaml}}{lst:DBS3}
\end{cmhtcbraster}
\begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile*{demonstrations/tabular3-mod4.tex}{\texttt{tabular3.tex} using \cref{lst:DBS4}}{lst:tabular3-DBS4}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/DBS4.yaml}[MLB-TCB]{\texttt{DBS4.yaml}}{lst:DBS4}
+ \cmhlistingsfromfile{demonstrations/tabular3-mod4.tex}{\texttt{tabular3.tex} using \cref{lst:DBS4}}{lst:tabular3-DBS4}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/DBS4.yaml}[MLB-TCB]{\texttt{DBS4.yaml}}{lst:DBS4}
\end{cmhtcbraster}
We note that
@@ -1605,7 +1610,7 @@ latexindent.pl -m tabular3.tex -l DBS4.yaml
\texttt{specialBeginEnd} code blocks (\vref{lst:specialBeginEnd}); we begin with
the code within \cref{lst:special4}.
- \cmhlistingsfromfile*{demonstrations/special4.tex}{\texttt{special4.tex}}{lst:special4}
+ \cmhlistingsfromfile{demonstrations/special4.tex}{\texttt{special4.tex}}{lst:special4}
Upon using the YAML settings in \cref{lst:DBS5}, and running the command
\begin{commandshell}
@@ -1617,8 +1622,8 @@ latexindent.pl -m special4.tex -l DBS5.yaml
raster force size=false,
raster column 1/.style={add to width=-.1\textwidth},
raster column skip=.06\linewidth]
- \cmhlistingsfromfile*{demonstrations/special4-mod5.tex}{\texttt{special4.tex} using \cref{lst:DBS5}}{lst:special4-DBS5}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/DBS5.yaml}[MLB-TCB,width=0.6\textwidth]{\texttt{DBS5.yaml}}{lst:DBS5}
+ \cmhlistingsfromfile{demonstrations/special4-mod5.tex}{\texttt{special4.tex} using \cref{lst:DBS5}}{lst:special4-DBS5}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/DBS5.yaml}[MLB-TCB,width=0.6\textwidth]{\texttt{DBS5.yaml}}{lst:DBS5}
\end{cmhtcbraster}
There are a few things to note:
@@ -1637,7 +1642,7 @@ latexindent.pl -m special4.tex -l DBS5.yaml
poly-switches for optional and mandatory arguments. We begin with the code in
\cref{lst:mycommand2}.
- \cmhlistingsfromfile*{demonstrations/mycommand2.tex}{\texttt{mycommand2.tex}}{lst:mycommand2}
+ \cmhlistingsfromfile{demonstrations/mycommand2.tex}{\texttt{mycommand2.tex}}{lst:mycommand2}
Upon using the YAML settings in \cref{lst:DBS6,lst:DBS7}, and running the command
\begin{commandshell}
@@ -1650,16 +1655,16 @@ latexindent.pl -m mycommand2.tex -l DBS7.yaml
raster force size=false,
raster column 1/.style={add to width=-.1\textwidth},
raster column skip=.03\linewidth]
- \cmhlistingsfromfile*{demonstrations/mycommand2-mod6.tex}{\texttt{mycommand2.tex} using \cref{lst:DBS6}}{lst:mycommand2-DBS6}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/DBS6.yaml}[MLB-TCB,width=0.6\textwidth]{\texttt{DBS6.yaml}}{lst:DBS6}
+ \cmhlistingsfromfile{demonstrations/mycommand2-mod6.tex}{\texttt{mycommand2.tex} using \cref{lst:DBS6}}{lst:mycommand2-DBS6}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/DBS6.yaml}[MLB-TCB,width=0.6\textwidth]{\texttt{DBS6.yaml}}{lst:DBS6}
\end{cmhtcbraster}
\begin{cmhtcbraster}[
raster force size=false,
raster column 1/.style={add to width=-.1\textwidth},
raster column skip=.03\linewidth]
- \cmhlistingsfromfile*{demonstrations/mycommand2-mod7.tex}{\texttt{mycommand2.tex} using \cref{lst:DBS7}}{lst:mycommand2-DBS7}
- \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/DBS7.yaml}[MLB-TCB,width=0.6\textwidth]{\texttt{DBS7.yaml}}{lst:DBS7}
+ \cmhlistingsfromfile{demonstrations/mycommand2-mod7.tex}{\texttt{mycommand2.tex} using \cref{lst:DBS7}}{lst:mycommand2-DBS7}
+ \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/DBS7.yaml}[MLB-TCB,width=0.6\textwidth]{\texttt{DBS7.yaml}}{lst:DBS7}
\end{cmhtcbraster}
\subsubsection{Double back slash optional square brackets}
@@ -1669,7 +1674,7 @@ latexindent.pl -m mycommand2.tex -l DBS7.yaml
For example, beginning with the code in \cref{lst:pmatrix3}
- \cmhlistingsfromfile*{demonstrations/pmatrix3.tex}{\texttt{pmatrix3.tex}}{lst:pmatrix3}
+ \cmhlistingsfromfile{demonstrations/pmatrix3.tex}{\texttt{pmatrix3.tex}}{lst:pmatrix3}
and running the following command, using \cref{lst:DBS3},
\begin{commandshell}
@@ -1677,7 +1682,7 @@ latexindent.pl -m pmatrix3.tex -l DBS3.yaml
\end{commandshell}
then we receive the output given in \cref{lst:pmatrix3-DBS3}.
- \cmhlistingsfromfile*{demonstrations/pmatrix3-mod3.tex}{\texttt{pmatrix3.tex} using \cref{lst:DBS3}}{lst:pmatrix3-DBS3}
+ \cmhlistingsfromfile{demonstrations/pmatrix3-mod3.tex}{\texttt{pmatrix3.tex} using \cref{lst:DBS3}}{lst:pmatrix3-DBS3}
You can customise the pattern for the double back slash by exploring the
\emph{fine tuning} field detailed in \vref{lst:fineTuning}.
@@ -1698,70 +1703,70 @@ latexindent.pl -m pmatrix3.tex -l DBS3.yaml
\clearpage
\begin{longtable}{llll}
- \caption{Poly-switch mappings for all code-block types}\label{tab:poly-switch-mapping} \\
+ \caption{Poly-switch mappings for all code-block types}\label{tab:poly-switch-mapping} \\
\toprule
- Code block & Sample & \multicolumn{2}{c}{Poly-switch mapping} \\
+ Code block & Sample & \multicolumn{2}{c}{Poly-switch mapping} \\
\midrule
- environment & \verb!before words!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & BeginStartsOnOwnLine \\
- & \verb!\begin{myenv}!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & BodyStartsOnOwnLine \\
- & \verb!body of myenv!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & EndStartsOnOwnLine \\
- & \verb!\end{myenv}!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & EndFinishesWithLineBreak \\
- & \verb!after words! & & \\
+ environment & \verb!before words!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & BeginStartsOnOwnLine \\
+ & \verb!\begin{myenv}!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & BodyStartsOnOwnLine \\
+ & \verb!body of myenv!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & EndStartsOnOwnLine \\
+ & \verb!\end{myenv}!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & EndFinishesWithLineBreak \\
+ & \verb!after words! & & \\
\cmidrule{2-4}
- ifelsefi & \verb!before words!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & IfStartsOnOwnLine \\
- & \verb!\if...!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & BodyStartsOnOwnLine \\
- & \verb!body of if/or statement!$\OrStartsOnOwnLine$ & $\OrStartsOnOwnLine$ & OrStartsOnOwnLine %
- \announce{2018-04-27}{new ifElseFi code block poly-switches} \\
- & \verb!\or!$\OrFinishesWithLineBreak$ & $\OrFinishesWithLineBreak$ & OrFinishesWithLineBreak \\
- & \verb!body of if/or statement!$\ElseStartsOnOwnLine$ & $\ElseStartsOnOwnLine$ & ElseStartsOnOwnLine \\
- & \verb!\else!$\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & ElseFinishesWithLineBreak \\
- & \verb!body of else statement!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & FiStartsOnOwnLine \\
- & \verb!\fi!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & FiFinishesWithLineBreak \\
- & \verb!after words! & & \\
+ ifelsefi & \verb!before words!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & IfStartsOnOwnLine \\
+ & \verb!\if...!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & BodyStartsOnOwnLine \\
+ & \verb!body of if/or statement!$\OrStartsOnOwnLine$ & $\OrStartsOnOwnLine$ & OrStartsOnOwnLine %
+ \announce{2018-04-27}{new ifElseFi code block poly-switches} \\
+ & \verb!\or!$\OrFinishesWithLineBreak$ & $\OrFinishesWithLineBreak$ & OrFinishesWithLineBreak \\
+ & \verb!body of if/or statement!$\ElseStartsOnOwnLine$ & $\ElseStartsOnOwnLine$ & ElseStartsOnOwnLine \\
+ & \verb!\else!$\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & ElseFinishesWithLineBreak \\
+ & \verb!body of else statement!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & FiStartsOnOwnLine \\
+ & \verb!\fi!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & FiFinishesWithLineBreak \\
+ & \verb!after words! & & \\
\cmidrule{2-4}
- optionalArguments & \verb!...!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & LSqBStartsOnOwnLine\footnote{LSqB stands for Left Square Bracket} \\
- & \verb![!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & OptArgBodyStartsOnOwnLine \\
- \announce*{2019-07-13}{new comma-related poly-switches} & \verb!value before comma!$\ElseStartsOnOwnLine$, & $\ElseStartsOnOwnLine$ & CommaStartsOnOwnLine \\
- & $\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & CommaFinishesWithLineBreak \\
- & \verb!end of body of opt arg!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & RSqBStartsOnOwnLine \\
- & \verb!]!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & RSqBFinishesWithLineBreak \\
- & \verb!...! & & \\
+ optionalArguments & \verb!...!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & LSqBStartsOnOwnLine\footnote{LSqB stands for Left Square Bracket} \\
+ & \verb![!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & OptArgBodyStartsOnOwnLine \\
+ \announce{2019-07-13}{new comma-related poly-switches} & \verb!value before comma!$\ElseStartsOnOwnLine$, & $\ElseStartsOnOwnLine$ & CommaStartsOnOwnLine \\
+ & $\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & CommaFinishesWithLineBreak \\
+ & \verb!end of body of opt arg!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & RSqBStartsOnOwnLine \\
+ & \verb!]!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & RSqBFinishesWithLineBreak \\
+ & \verb!...! & & \\
\cmidrule{2-4}
- mandatoryArguments & \verb!...!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & LCuBStartsOnOwnLine\footnote{LCuB stands for Left Curly Brace} \\
- & \verb!{!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & MandArgBodyStartsOnOwnLine \\
- \announce*{2019-07-13}{new comma-related poly-switches} & \verb!value before comma!$\ElseStartsOnOwnLine$, & $\ElseStartsOnOwnLine$ & CommaStartsOnOwnLine \\
- & $\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & CommaFinishesWithLineBreak \\
- & \verb!end of body of mand arg!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & RCuBStartsOnOwnLine \\
- & \verb!}!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & RCuBFinishesWithLineBreak \\
- & \verb!...! & & \\
+ mandatoryArguments & \verb!...!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & LCuBStartsOnOwnLine\footnote{LCuB stands for Left Curly Brace} \\
+ & \verb!{!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & MandArgBodyStartsOnOwnLine \\
+ \announce{2019-07-13}{new comma-related poly-switches} & \verb!value before comma!$\ElseStartsOnOwnLine$, & $\ElseStartsOnOwnLine$ & CommaStartsOnOwnLine \\
+ & $\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & CommaFinishesWithLineBreak \\
+ & \verb!end of body of mand arg!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & RCuBStartsOnOwnLine \\
+ & \verb!}!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & RCuBFinishesWithLineBreak \\
+ & \verb!...! & & \\
\cmidrule{2-4}
- commands & \verb!before words!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & CommandStartsOnOwnLine \\
- & \verb!\mycommand!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & CommandNameFinishesWithLineBreak \\
- & $\langle$\itshape{arguments}$\rangle$ & & \\
+ commands & \verb!before words!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & CommandStartsOnOwnLine \\
+ & \verb!\mycommand!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & CommandNameFinishesWithLineBreak \\
+ & $\langle$\itshape{arguments}$\rangle$ & & \\
\cmidrule{2-4}
- namedGroupingBraces Brackets & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & NameStartsOnOwnLine \\
- & myname$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & NameFinishesWithLineBreak \\
- & $\langle$\itshape{braces/brackets}$\rangle$ & & \\
+ namedGroupingBraces Brackets & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & NameStartsOnOwnLine \\
+ & myname$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & NameFinishesWithLineBreak \\
+ & $\langle$\itshape{braces/brackets}$\rangle$ & & \\
\cmidrule{2-4}
- keyEqualsValuesBraces\newline Brackets & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & KeyStartsOnOwnLine \\
- & key$\EqualsStartsOnOwnLine$=$\BodyStartsOnOwnLine$ & $\EqualsStartsOnOwnLine$ & EqualsStartsOnOwnLine \\
- & $\langle$\itshape{braces/brackets}$\rangle$ & $\BodyStartsOnOwnLine$ & EqualsFinishesWithLineBreak \\
+ keyEqualsValuesBraces\newline Brackets & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & KeyStartsOnOwnLine \\
+ & key$\EqualsStartsOnOwnLine$=$\BodyStartsOnOwnLine$ & $\EqualsStartsOnOwnLine$ & EqualsStartsOnOwnLine \\
+ & $\langle$\itshape{braces/brackets}$\rangle$ & $\BodyStartsOnOwnLine$ & EqualsFinishesWithLineBreak \\
\cmidrule{2-4}
- items & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & ItemStartsOnOwnLine \\
- & \verb!\item!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & ItemFinishesWithLineBreak \\
- & \verb!...! & & \\
+ items & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & ItemStartsOnOwnLine \\
+ & \verb!\item!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & ItemFinishesWithLineBreak \\
+ & \verb!...! & & \\
\cmidrule{2-4}
- specialBeginEnd & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & SpecialBeginStartsOnOwnLine \\
- & \verb!\[!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & SpecialBodyStartsOnOwnLine \\
- & \verb!body of special/middle!$\ElseStartsOnOwnLine$ & $\ElseStartsOnOwnLine$ & SpecialMiddleStartsOnOwnLine %
- \announce{2018-04-27}{new special code block poly-switches} \\
- & \verb!\middle!$\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & SpecialMiddleFinishesWithLineBreak \\
- & body of special/middle $\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & SpecialEndStartsOnOwnLine \\
- & \verb!\]!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & SpecialEndFinishesWithLineBreak \\
- & after words & & \\
+ specialBeginEnd & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & SpecialBeginStartsOnOwnLine \\
+ & \verb!\[!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & SpecialBodyStartsOnOwnLine \\
+ & \verb!body of special/middle!$\ElseStartsOnOwnLine$ & $\ElseStartsOnOwnLine$ & SpecialMiddleStartsOnOwnLine %
+ \announce{2018-04-27}{new special code block poly-switches} \\
+ & \verb!\middle!$\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & SpecialMiddleFinishesWithLineBreak \\
+ & body of special/middle $\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & SpecialEndStartsOnOwnLine \\
+ & \verb!\]!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & SpecialEndFinishesWithLineBreak \\
+ & after words & & \\
\cmidrule{2-4}
- verbatim & before words$\BeginStartsOnOwnLine$\verb!\begin{verbatim}! & $\BeginStartsOnOwnLine$ & VerbatimBeginStartsOnOwnLine \\
- \announce{2019-05-05}{verbatim poly-switches} & body of verbatim \verb!\end{verbatim}!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & VerbatimEndFinishesWithLineBreak \\
- & after words & & \\
+ verbatim & before words$\BeginStartsOnOwnLine$\verb!\begin{verbatim}! & $\BeginStartsOnOwnLine$ & VerbatimBeginStartsOnOwnLine \\
+ \announce{2019-05-05}{verbatim poly-switches} & body of verbatim \verb!\end{verbatim}!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & VerbatimEndFinishesWithLineBreak \\
+ & after words & & \\
\bottomrule
\end{longtable}
diff --git a/support/latexindent/documentation/subsubsec-no-add-remaining-code-blocks.tex b/support/latexindent/documentation/subsubsec-no-add-remaining-code-blocks.tex
index a91b4b0c98..7068c5a873 100644
--- a/support/latexindent/documentation/subsubsec-no-add-remaining-code-blocks.tex
+++ b/support/latexindent/documentation/subsubsec-no-add-remaining-code-blocks.tex
@@ -17,7 +17,7 @@
\end{itemize}
See the \texttt{keyEqualsValuesBracesBrackets: follow} and \texttt{keyEqualsValuesBracesBrackets: name} fields of the fine tuning
section in \vref{lst:fineTuning}%
- \announce*{2019-07-13}{fine tuning: keyEqualsValuesBracesBrackets}
+ \announce{2019-07-13}{fine tuning: keyEqualsValuesBracesBrackets}
An example is shown in \cref{lst:pgfkeysbefore}, with the default output given in
\cref{lst:pgfkeys1:default}.
@@ -53,7 +53,7 @@
\end{itemize}
See the \texttt{NamedGroupingBracesBrackets: follow} and \texttt{NamedGroupingBracesBrackets: name} fields of the fine tuning
section in \vref{lst:fineTuning}%
- \announce*{2019-07-13}{fine tuning: namedGroupingBracesBrackets}
+ \announce{2019-07-13}{fine tuning: namedGroupingBracesBrackets}
A simple example is given in \cref{lst:child1}, with default output in
\cref{lst:child1:default}.
@@ -89,7 +89,7 @@
allowed throughout).
\end{itemize}
See the \texttt{UnNamedGroupingBracesBrackets: follow} field of the fine tuning section in \vref{lst:fineTuning}%
- \announce*{2019-07-13}{fine tuning: namedGroupingBracesBrackets}
+ \announce{2019-07-13}{fine tuning: namedGroupingBracesBrackets}
An example is shown in \cref{lst:psforeach1} with default output give in
\cref{lst:psforeach:default}.
diff --git a/support/latexindent/documentation/title.tex b/support/latexindent/documentation/title.tex
index 4dde532e63..b83f0c45e5 100644
--- a/support/latexindent/documentation/title.tex
+++ b/support/latexindent/documentation/title.tex
@@ -8,7 +8,7 @@
sharp corners,
enhanced,
overlay={\node[anchor=north east,outer sep=2pt] at ([xshift=3cm,yshift=4mm]frame.north east) {\includegraphics[width=3cm]{logo}}; }]
- \centering\ttfamily\bfseries latexindent.pl\\[1cm] Version 3.7.1
+ \centering\ttfamily\bfseries latexindent.pl\\[1cm] Version 3.8
\end{tcolorbox}
}
\author{Chris Hughes \thanks{and contributors!
diff --git a/support/latexindent/latexindent.pl b/support/latexindent/latexindent.pl
index 91e5f09ae8..cd07805cbe 100755
--- a/support/latexindent/latexindent.pl
+++ b/support/latexindent/latexindent.pl
@@ -1,5 +1,5 @@
#!/usr/bin/env perl
-# latexindent.pl, version 3.7.1, 2019-09-07
+# latexindent.pl, version 3.8, 2020-03-21
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
diff --git a/systems/win32/w32tex/ChangeLog b/systems/win32/w32tex/ChangeLog
index 5a196b3a73..36b39bc8ab 100644
--- a/systems/win32/w32tex/ChangeLog
+++ b/systems/win32/w32tex/ChangeLog
@@ -1,5 +1,19 @@
W32TeX (x86 & x64) ChangeLog
+[2020/03/20]
+(01) biblatex-biber.tar.xz
+ Update biblatex-ajc2020unofficial.
+(02) ltxpkgs.tar.xz
+ Update extarrows, glossaries, and latexgit.
+(03) pgfcontrib.tar.xz
+ Update dynkin-diagrams.
+(04) pmx.tar.xz
+ Update pmx.
+(05) web2c-w32.tar.xz
+ Update texloganalyser.
+(06) win64/pmx-w64.tar.xz
+ Update pmx.
+
[2020/03/19]
(01) ltxpkgdocs.tar.xz
Update documents for packages.
diff --git a/timestamp b/timestamp
index 67d76aac90..66eafca7cc 100644
--- a/timestamp
+++ b/timestamp
@@ -2,4 +2,4 @@
# The source CTAN of this site's material:
dante.ctan.org
# The year-month-day-hour-minute of this site's material:
-2020-03-21-02-02
+2020-03-22-02-02