diff options
Diffstat (limited to 'macros')
-rw-r--r-- | macros/generic/markdown/CHANGES.md | 22 | ||||
-rw-r--r-- | macros/generic/markdown/README.md | 37 | ||||
-rw-r--r-- | macros/generic/markdown/VERSION | 2 | ||||
-rw-r--r-- | macros/generic/markdown/examples/context-mkiv.tex | 13 | ||||
-rw-r--r-- | macros/generic/markdown/examples/latex-luatex.tex | 29 | ||||
-rw-r--r-- | macros/generic/markdown/examples/latex-pdftex.tex | 18 | ||||
-rw-r--r-- | macros/generic/markdown/markdown.dtx | 767 | ||||
-rw-r--r-- | macros/generic/markdown/markdown.html | 2 | ||||
-rw-r--r-- | macros/generic/markdown/markdown.pdf | bin | 1099548 -> 1116505 bytes | |||
-rw-r--r-- | macros/latex/contrib/nmbib/Makefile | 6 | ||||
-rw-r--r-- | macros/latex/contrib/nmbib/README | 2 | ||||
-rw-r--r-- | macros/latex/contrib/nmbib/nmbib-sample.pdf (renamed from macros/latex/contrib/nmbib/nmsample.pdf) | bin | 96763 -> 101693 bytes | |||
-rw-r--r-- | macros/latex/contrib/nmbib/nmbib-sample.tex (renamed from macros/latex/contrib/nmbib/nmsample.tex) | 0 | ||||
-rw-r--r-- | macros/latex/contrib/nmbib/nmbib.dtx | 4 | ||||
-rw-r--r-- | macros/latex/contrib/nmbib/nmbib.pdf | bin | 347244 -> 368243 bytes | |||
-rw-r--r-- | macros/latex/contrib/nmbib/nmbibtex.1 | 135 | ||||
-rw-r--r-- | macros/latex/required/l3backend/CHANGELOG.md (renamed from macros/latex/contrib/l3backend/CHANGELOG.md) | 11 | ||||
-rw-r--r-- | macros/latex/required/l3backend/README.md (renamed from macros/latex/contrib/l3backend/README.md) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3backend/l3backend-basics.dtx (renamed from macros/latex/contrib/l3backend/l3backend-basics.dtx) | 14 | ||||
-rw-r--r-- | macros/latex/required/l3backend/l3backend-box.dtx (renamed from macros/latex/contrib/l3backend/l3backend-box.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3backend/l3backend-code.pdf (renamed from macros/latex/contrib/l3backend/l3backend-code.pdf) | bin | 908163 -> 907780 bytes | |||
-rw-r--r-- | macros/latex/required/l3backend/l3backend-code.tex (renamed from macros/latex/contrib/l3backend/l3backend-code.tex) | 0 | ||||
-rw-r--r-- | macros/latex/required/l3backend/l3backend-color.dtx (renamed from macros/latex/contrib/l3backend/l3backend-color.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3backend/l3backend-draw.dtx (renamed from macros/latex/contrib/l3backend/l3backend-draw.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3backend/l3backend-graphics.dtx (renamed from macros/latex/contrib/l3backend/l3backend-graphics.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3backend/l3backend-header.dtx (renamed from macros/latex/contrib/l3backend/l3backend-header.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3backend/l3backend-opacity.dtx (renamed from macros/latex/contrib/l3backend/l3backend-opacity.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3backend/l3backend-pdf.dtx (renamed from macros/latex/contrib/l3backend/l3backend-pdf.dtx) | 106 | ||||
-rw-r--r-- | macros/latex/required/l3backend/l3backend.ins (renamed from macros/latex/contrib/l3backend/l3backend.ins) | 0 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/CHANGELOG.md (renamed from macros/latex/contrib/l3kernel/CHANGELOG.md) | 28 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/README.md (renamed from macros/latex/contrib/l3kernel/README.md) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/expl3.dtx (renamed from macros/latex/contrib/l3kernel/expl3.dtx) | 4 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/expl3.pdf (renamed from macros/latex/contrib/l3kernel/expl3.pdf) | bin | 610363 -> 610060 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/interface3.pdf (renamed from macros/latex/contrib/l3kernel/interface3.pdf) | bin | 1795605 -> 1801752 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/interface3.tex (renamed from macros/latex/contrib/l3kernel/interface3.tex) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3.ins (renamed from macros/latex/contrib/l3kernel/l3.ins) | 3 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3basics.dtx (renamed from macros/latex/contrib/l3kernel/l3basics.dtx) | 16 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3bitset.dtx (renamed from macros/latex/contrib/l3kernel/l3bitset.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3bootstrap.dtx (renamed from macros/latex/contrib/l3kernel/l3bootstrap.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3box.dtx (renamed from macros/latex/contrib/l3kernel/l3box.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3cctab.dtx (renamed from macros/latex/contrib/l3kernel/l3cctab.dtx) | 33 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3clist.dtx (renamed from macros/latex/contrib/l3kernel/l3clist.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3coffins.dtx (renamed from macros/latex/contrib/l3kernel/l3coffins.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3color.dtx (renamed from macros/latex/contrib/l3kernel/l3color.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3debug.dtx (renamed from macros/latex/contrib/l3kernel/l3debug.dtx) | 15 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3deprecation.dtx (renamed from macros/latex/contrib/l3kernel/l3deprecation.dtx) | 63 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3doc.dtx (renamed from macros/latex/contrib/l3kernel/l3doc.dtx) | 6 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3doc.pdf (renamed from macros/latex/contrib/l3kernel/l3doc.pdf) | bin | 565279 -> 565282 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/l3docstrip.dtx (renamed from macros/latex/contrib/l3kernel/l3docstrip.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3docstrip.pdf (renamed from macros/latex/contrib/l3kernel/l3docstrip.pdf) | bin | 151266 -> 150985 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/l3expan.dtx (renamed from macros/latex/contrib/l3kernel/l3expan.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3file.dtx (renamed from macros/latex/contrib/l3kernel/l3file.dtx) | 19 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3flag.dtx (renamed from macros/latex/contrib/l3kernel/l3flag.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3fp-assign.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-assign.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3fp-aux.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-aux.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3fp-basics.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-basics.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3fp-convert.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-convert.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3fp-expo.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-expo.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3fp-extended.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-extended.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3fp-functions.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-functions.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3fp-logic.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-logic.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3fp-parse.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-parse.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3fp-random.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-random.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3fp-round.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-round.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3fp-symbolic.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-symbolic.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3fp-traps.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-traps.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3fp-trig.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-trig.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3fp-types.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-types.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3fp.dtx (renamed from macros/latex/contrib/l3kernel/l3fp.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3fparray.dtx (renamed from macros/latex/contrib/l3kernel/l3fparray.dtx) | 57 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3int.dtx (renamed from macros/latex/contrib/l3kernel/l3int.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3intarray.dtx (renamed from macros/latex/contrib/l3kernel/l3intarray.dtx) | 75 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3kernel-functions.dtx (renamed from macros/latex/contrib/l3kernel/l3kernel-functions.dtx) | 29 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3keys.dtx (renamed from macros/latex/contrib/l3kernel/l3keys.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3legacy.dtx (renamed from macros/latex/contrib/l3kernel/l3legacy.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3luatex.dtx (renamed from macros/latex/contrib/l3kernel/l3luatex.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3msg.dtx (renamed from macros/latex/contrib/l3kernel/l3msg.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3names.dtx (renamed from macros/latex/contrib/l3kernel/l3names.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3news.pdf (renamed from macros/latex/contrib/l3kernel/l3news.pdf) | bin | 396222 -> 396222 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/l3news.tex (renamed from macros/latex/contrib/l3kernel/l3news.tex) | 0 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3news01.pdf (renamed from macros/latex/contrib/l3kernel/l3news01.pdf) | bin | 122959 -> 122959 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/l3news01.tex (renamed from macros/latex/contrib/l3kernel/l3news01.tex) | 0 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3news02.pdf (renamed from macros/latex/contrib/l3kernel/l3news02.pdf) | bin | 150919 -> 150919 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/l3news02.tex (renamed from macros/latex/contrib/l3kernel/l3news02.tex) | 0 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3news03.pdf (renamed from macros/latex/contrib/l3kernel/l3news03.pdf) | bin | 148747 -> 148747 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/l3news03.tex (renamed from macros/latex/contrib/l3kernel/l3news03.tex) | 0 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3news04.pdf (renamed from macros/latex/contrib/l3kernel/l3news04.pdf) | bin | 114754 -> 114754 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/l3news04.tex (renamed from macros/latex/contrib/l3kernel/l3news04.tex) | 0 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3news05.pdf (renamed from macros/latex/contrib/l3kernel/l3news05.pdf) | bin | 112524 -> 112524 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/l3news05.tex (renamed from macros/latex/contrib/l3kernel/l3news05.tex) | 0 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3news06.pdf (renamed from macros/latex/contrib/l3kernel/l3news06.pdf) | bin | 151591 -> 151591 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/l3news06.tex (renamed from macros/latex/contrib/l3kernel/l3news06.tex) | 0 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3news07.pdf (renamed from macros/latex/contrib/l3kernel/l3news07.pdf) | bin | 128344 -> 128344 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/l3news07.tex (renamed from macros/latex/contrib/l3kernel/l3news07.tex) | 0 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3news08.pdf (renamed from macros/latex/contrib/l3kernel/l3news08.pdf) | bin | 163484 -> 163484 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/l3news08.tex (renamed from macros/latex/contrib/l3kernel/l3news08.tex) | 0 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3news09.pdf (renamed from macros/latex/contrib/l3kernel/l3news09.pdf) | bin | 250159 -> 250159 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/l3news09.tex (renamed from macros/latex/contrib/l3kernel/l3news09.tex) | 0 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3news10.pdf (renamed from macros/latex/contrib/l3kernel/l3news10.pdf) | bin | 150302 -> 150302 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/l3news10.tex (renamed from macros/latex/contrib/l3kernel/l3news10.tex) | 0 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3news11.pdf (renamed from macros/latex/contrib/l3kernel/l3news11.pdf) | bin | 170102 -> 170102 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/l3news11.tex (renamed from macros/latex/contrib/l3kernel/l3news11.tex) | 0 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3news12.pdf (renamed from macros/latex/contrib/l3kernel/l3news12.pdf) | bin | 205020 -> 205020 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/l3news12.tex (renamed from macros/latex/contrib/l3kernel/l3news12.tex) | 0 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3pdf.dtx (renamed from macros/latex/contrib/l3kernel/l3pdf.dtx) | 362 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3prefixes.csv (renamed from macros/latex/contrib/l3kernel/l3prefixes.csv) | 0 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3prefixes.pdf (renamed from macros/latex/contrib/l3kernel/l3prefixes.pdf) | bin | 82720 -> 82720 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/l3prefixes.tex (renamed from macros/latex/contrib/l3kernel/l3prefixes.tex) | 0 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3prg.dtx (renamed from macros/latex/contrib/l3kernel/l3prg.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3prop.dtx (renamed from macros/latex/contrib/l3kernel/l3prop.dtx) | 40 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3quark.dtx (renamed from macros/latex/contrib/l3kernel/l3quark.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3regex.dtx (renamed from macros/latex/contrib/l3kernel/l3regex.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3seq.dtx (renamed from macros/latex/contrib/l3kernel/l3seq.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3skip.dtx (renamed from macros/latex/contrib/l3kernel/l3skip.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3sort.dtx (renamed from macros/latex/contrib/l3kernel/l3sort.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3str-convert.dtx (renamed from macros/latex/contrib/l3kernel/l3str-convert.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3str.dtx (renamed from macros/latex/contrib/l3kernel/l3str.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3styleguide.pdf (renamed from macros/latex/contrib/l3kernel/l3styleguide.pdf) | bin | 296553 -> 296259 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/l3styleguide.tex (renamed from macros/latex/contrib/l3kernel/l3styleguide.tex) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3syntax-changes.pdf (renamed from macros/latex/contrib/l3kernel/l3syntax-changes.pdf) | bin | 231402 -> 231103 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/l3syntax-changes.tex (renamed from macros/latex/contrib/l3kernel/l3syntax-changes.tex) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3sys.dtx (renamed from macros/latex/contrib/l3kernel/l3sys.dtx) | 21 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3term-glossary.pdf (renamed from macros/latex/contrib/l3kernel/l3term-glossary.pdf) | bin | 242191 -> 241893 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/l3term-glossary.tex (renamed from macros/latex/contrib/l3kernel/l3term-glossary.tex) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3text-case.dtx (renamed from macros/latex/contrib/l3kernel/l3text-case.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3text-map.dtx (renamed from macros/latex/contrib/l3kernel/l3text-map.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3text-purify.dtx (renamed from macros/latex/contrib/l3kernel/l3text-purify.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3text.dtx (renamed from macros/latex/contrib/l3kernel/l3text.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3tl-analysis.dtx (renamed from macros/latex/contrib/l3kernel/l3tl-analysis.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3tl-build.dtx (renamed from macros/latex/contrib/l3kernel/l3tl-build.dtx) | 5 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3tl.dtx (renamed from macros/latex/contrib/l3kernel/l3tl.dtx) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3token.dtx (renamed from macros/latex/contrib/l3kernel/l3token.dtx) | 10 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/l3unicode.dtx (renamed from macros/latex/contrib/l3kernel/l3unicode.dtx) | 4 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/source3.pdf (renamed from macros/latex/contrib/l3kernel/source3.pdf) | bin | 7574289 -> 7624172 bytes | |||
-rw-r--r-- | macros/latex/required/l3kernel/source3.tex (renamed from macros/latex/contrib/l3kernel/source3.tex) | 2 | ||||
-rw-r--r-- | macros/latex/required/l3kernel/source3body.tex (renamed from macros/latex/contrib/l3kernel/source3body.tex) | 0 |
136 files changed, 1469 insertions, 605 deletions
diff --git a/macros/generic/markdown/CHANGES.md b/macros/generic/markdown/CHANGES.md index 614cef6912..3ea1c8c837 100644 --- a/macros/generic/markdown/CHANGES.md +++ b/macros/generic/markdown/CHANGES.md @@ -1,8 +1,26 @@ # Changes -## 3.5.0 +## 3.5.0 (2024-04-29) -## 3.4.3 +Development: + +- Add `\markinline` plain TeX command. (#300, #439) +- Support incremental definitions of token renderers and renderer prototypes + in the `\markdownSetup` command. + (#232, #435, 540a83c0, [matrix.org][matrix-435], #437, #438, + contributed by @eg9, @gucci-on-fleek, and @Skillmon + [on TeX StackExchange][tse-716400]) + + [matrix-435]: https://matrix.to/#/!UeAwznpYwwsinVTetR:matrix.org/$k4ky6I-uvxdp8ipVlHvef5JXfIfPQvFtXOAD_ogF2uU?via=matrix.org&via=im.f3l.de + [tse-716400]: https://tex.stackexchange.com/questions/716362/convert-control-sequence-with-a-variable-number-of-parameters-into-a-token-list/716400#716400 + +Default Renderer Prototypes: + +- Add default renderers for unnumbered sections in LaTeX. + (#401, istqborg/istqb_product_base#23, #430, reported by @felinecrp, + sponsored by @istqborg) + +## 3.4.3 (2024-04-04) Fixes: diff --git a/macros/generic/markdown/README.md b/macros/generic/markdown/README.md index 76ad39d740..69fdc4ab30 100644 --- a/macros/generic/markdown/README.md +++ b/macros/generic/markdown/README.md @@ -193,14 +193,14 @@ For further information, consult one of the following: - [Markdown 2.17.1: What's New, What's Next?][tb135], - [Attributes in Markdown][tb136], - Markdown 3 at TUG 2023: Reflections from the Q&A session ([preprint][tb138]), and - - Fast Regression Testing of TeX Packages: The Unreasonable Effectiveness of Batching ([work in progress][tb139]). + - Fast Regression Testing of TeX Packages: The Unreasonable Effectiveness of Batching ([preprint][tb139]). 5. Journal articles published by [CSTUG Bulletin][csbul] (in Czech and Slovak): - [Rendering Markdown inside TeX Documents][10.5300/2016-1-4/78], - [Markdown 2.8.1: Boldly Unto the Throne of Lightweight Markup in TeX][10.5300/2020-1-2/48], - [Markdown 2.10.0: LaTeX Themes & Snippets][10.5300/2021-1-4/76], - [Direct Typesetting of Various Document Formats in TeX Using the Pandoc Utility][10.5300/2021-1-4/83], - [High-Level Languages for TeX][10.5300/2022-1-4/35], and - - Markdown 3: What's New, What's Next? ([preprint][10.5300/2023-?-?/??]). + - [Markdown 3: What's New, What's Next?][10.5300/2023-3-4/111]. 6. Talks: - [Five Years of Markdown in LaTeX: What, Why, How, and Whereto][pv212-fall2020] (in Czech), - [Markdown 2.10.0: LaTeX Themes & Snippets, Two Flavors of Comments, and LuaMetaTeX][tb131-video] ([slides][tb131-slides]), @@ -219,15 +219,15 @@ For further information, consult one of the following: [overleaf-5]: https://www.overleaf.com/latex/examples/writing-posters-with-markdown/jtbgmmgqrqmh "Writing Posters with Markdown" [overleaf-6]: https://www.overleaf.com/latex/examples/using-markdown-in-latex-documents/whdrnpcpnwrm "Using Markdown in LaTeX documents" - [tb119]: https://www.tug.org/TUGboat/tb38-2/tb119novotny.pdf "Using Markdown inside TeX documents" - [tb124]: https://www.tug.org/TUGboat/tb40-1/tb124novotny-markdown.pdf "Markdown 2.7.0: Towards lightweight markup in TeX" - [tb129]: https://www.tug.org/TUGboat/tb41-3/tb129novotny-frozen.pdf "Making Markdown into a Microwave Meal" - [tb131]: https://www.tug.org/TUGboat/tb42-2/tb131novotny-markdown.pdf "Markdown 2.10.0: LaTeX Themes & Snippets, Two Flavors of Comments, and LuaMetaTeX" - [tb133]: https://www.tug.org/TUGboat/tb43-1/tb133novotny-markdown.pdf "Markdown 2.15.0: What's New?" - [tb135]: https://www.tug.org/TUGboat/tb43-3/tb135novotny-markdown.pdf "Markdown 2.17.1: What's New, What's Next?" - [tb136]: https://www.tug.org/TUGboat/tb44-1/tb136novotny-markdown-attr.pdf "Attributes in Markdown" - [tb138]: https://www.overleaf.com/read/mjghwhrbgmfj "Markdown 3 at TUG 2023: Reflections from the Q&A session" - [tb139]: https://github.com/witiko/fast-regression-testing/releases/download/latest/main.pdf "Fast Regression Testing of TeX Packages: The Unreasonable Effectiveness of Batching" + [tb119]: https://www.tug.org/TUGboat/tb38-2/tb119novotny.pdf "Using Markdown inside TeX documents" + [tb124]: https://www.tug.org/TUGboat/tb40-1/tb124novotny-markdown.pdf "Markdown 2.7.0: Towards lightweight markup in TeX" + [tb129]: https://www.tug.org/TUGboat/tb41-3/tb129novotny-frozen.pdf "Making Markdown into a Microwave Meal" + [tb131]: https://www.tug.org/TUGboat/tb42-2/tb131novotny-markdown.pdf "Markdown 2.10.0: LaTeX Themes & Snippets, Two Flavors of Comments, and LuaMetaTeX" + [tb133]: https://www.tug.org/TUGboat/tb43-1/tb133novotny-markdown.pdf "Markdown 2.15.0: What's New?" + [tb135]: https://www.tug.org/TUGboat/tb43-3/tb135novotny-markdown.pdf "Markdown 2.17.1: What's New, What's Next?" + [tb136]: https://www.tug.org/TUGboat/tb44-1/tb136novotny-markdown-attr.pdf "Attributes in Markdown" + [tb138]: https://www.overleaf.com/read/mjghwhrbgmfj "Markdown 3 at TUG 2023: Reflections from the Q&A session" + [tb139]: https://github.com/Witiko/fast-regression-testing/releases/download/latest/tb139starynovotny-testing.pdf "Fast Regression Testing of TeX Packages: The Unreasonable Effectiveness of Batching" [tb131-slides]: https://tug.org/tug2021/assets/pdf/tug2021-novotny-slides.pdf "Markdown 2.10.0: LaTeX Themes & Snippets, Two Flavors of Comments, and LuaMetaTeX" [tb131-video]: https://youtu.be/i2GJMnLCZls "Markdown 2.10.0: LaTeX Themes & Snippets, Two Flavors of Comments, and LuaMetaTeX" @@ -239,13 +239,13 @@ For further information, consult one of the following: [tb137-slides]: https://tug.org/tug2023/files/sa-03-novotny-markdown3/novotny-markdown3-slides.pdf "Markdown 3: What's New, What's Next?" [tb137-video]: https://youtu.be/U8XjTOhJkg0 "Markdown 3: What's New, What's Next?" - [10.5300/2016-1-4/78]: https://www.doi.org/10.5300/2016-1-4/78 "Rendering Markdown inside TeX Documents" - [10.5300/2020-1-2/48]: https://www.doi.org/10.5300/2020-1-2/48 "Markdown 2.8.1: Boldly Unto the Throne of Lightweight Markup in TeX" - [10.5300/2021-1-4/76]: https://www.doi.org/10.5300/2021-1-4/76 "Markdown 2.10.0: LaTeX Themes & Snippets" - [10.5300/2021-1-4/83]: https://www.doi.org/10.5300/2021-1-4/83 "Direct Typesetting of Various Document Formats in TeX Using the Pandoc Utility" - [10.5300/2022-1-4/35]: https://www.doi.org/10.5300/2022-1-4/35 "High-Level Languages for TeX" + [10.5300/2016-1-4/78]: https://www.doi.org/10.5300/2016-1-4/78 "Rendering Markdown inside TeX Documents" + [10.5300/2020-1-2/48]: https://www.doi.org/10.5300/2020-1-2/48 "Markdown 2.8.1: Boldly Unto the Throne of Lightweight Markup in TeX" + [10.5300/2021-1-4/76]: https://www.doi.org/10.5300/2021-1-4/76 "Markdown 2.10.0: LaTeX Themes & Snippets" + [10.5300/2021-1-4/83]: https://www.doi.org/10.5300/2021-1-4/83 "Direct Typesetting of Various Document Formats in TeX Using the Pandoc Utility" + [10.5300/2022-1-4/35]: https://www.doi.org/10.5300/2022-1-4/35 "High-Level Languages for TeX" - [10.5300/2023-?-?/??]: https://github.com/witiko/markdown-3-whats-new-whats-next/releases/download/latest/main.pdf "Markdown 3: What's New, What's Next?" + [10.5300/2023-3-4/111]: https://www.doi.org/10.5300/2023-3-4/111 "Markdown 3: What's New, What's Next?" [pv212-fall2020]: https://is.muni.cz/elearning/io/?qurl=%2Fel%2Ffi%2Fpodzim2020%2FPV212%2Findex.qwarp;prejit=5595952 @@ -274,7 +274,7 @@ Acknowledgements | [<img width="150" src="https://www.fi.muni.cz/images/fi-logo.png">][fimu] | I gratefully acknowledge the funding from the [Faculty of Informatics][fimu] at the [Masaryk University][mu] in Brno, Czech Republic, for the development of the Markdown package in projects [MUNI/33/12/2015][], [MUNI/33/1784/2020][], [MUNI/33/0776/2021][], [MUNI/33/1654/2022][], and [MUNI/33/1658/2022][]. | | [<img width="150" src="https://cdn.overleaf.com/img/ol-brand/overleaf_og_logo.png">][overleaf] | Extensive user documentation for the Markdown package was kindly written by [Lian Tze Lim][liantze] and published by [Overleaf][]. | | [<img width="150" src="https://pbs.twimg.com/profile_images/1004769879319334912/6Bh1UthD.jpg">][omedym] | Support for content slicing (Lua options [`shiftHeadings`][option-shift-headings] and [`slice`][option-slice]) and pipe tables (Lua options [`pipeTables`][option-pipe-tables] and [`tableCaptions`][option-table-captions]) was graciously sponsored by [David Vins][dvins] and [Omedym][]. | -| [<img width="150" src="https://www.istqb.org/static/istqb-logo-1b043e800a580724ad223567f9ea57c0.png">][istqb] | Fixes for issues [#359][issue-359], [#368][issue-368], and [#424][issue-424] were graciously sponsored by the [International Software Testing Qualifications Board (ISTQB)][istqb]. | +| [<img width="150" src="https://www.istqb.org/static/istqb-logo-1b043e800a580724ad223567f9ea57c0.png">][istqb] | Fixes for issues [#359][issue-359], [#368][issue-368], [#401][issue-401], and [#424][issue-424] were graciously sponsored by the [International Software Testing Qualifications Board (ISTQB)][istqb]. | [dvins]: https://github.com/dvins "David Vins" [fimu]: https://www.fi.muni.cz/index.html.en "Faculty of Informatics, Masaryk University" @@ -284,6 +284,7 @@ Acknowledgements [issue-359]: https://github.com/witiko/markdown/issues/359 "First item of a fancy list forms a separate list" [issue-368]: https://github.com/witiko/markdown/issues/368 "Tables nested in list items have empty lines" + [issue-401]: https://github.com/witiko/markdown/issues/401 "Create an unnumbered section" [issue-424]: https://github.com/witiko/markdown/issues/424 "E-mail addresses are incorrectly interpreted as bracketed citations" [option-pipe-tables]: https://mirrors.ctan.org/macros/generic/markdown/markdown.html#pipe-tables "Markdown Package User Manual" diff --git a/macros/generic/markdown/VERSION b/macros/generic/markdown/VERSION index d13fdfa34f..e4e9a98451 100644 --- a/macros/generic/markdown/VERSION +++ b/macros/generic/markdown/VERSION @@ -1 +1 @@ -3.4.3-0-ge2c6be1a (2024-04-04) +3.5.0-0-gfd01a252 (2024-04-29) diff --git a/macros/generic/markdown/examples/context-mkiv.tex b/macros/generic/markdown/examples/context-mkiv.tex index 8b000e43ed..6cb185802a 100644 --- a/macros/generic/markdown/examples/context-mkiv.tex +++ b/macros/generic/markdown/examples/context-mkiv.tex @@ -72,16 +72,15 @@ kpse.set_program_name("luatex") \catcode`\%=14\relax \catcode`\#=6\relax -% Typeset some further examples with inline markdown text. +% Besides inputting external files, Markdown text can we written directly +% into a LaTeX document. Markdown text and LaTeX code can be freely combined. \startmarkdown -Here are some non-ASCII characters: *ěščřžýáíé* -and ConTeXt special characters: *|*. +This is a paragraph of *Markdown text* with inline `\LaTeX`{=tex} code. -Here is a hard line break that we inserted directly from the TeX source -by typing two spaces at the end of a line. -This is stretching TeX's abilities and is only supported in ConTeXt MkIV -and later. +``` {=tex} +This is a paragraph of \LaTeX{} code with inline \markinline{*Markdown text*}. +``` \stopmarkdown diff --git a/macros/generic/markdown/examples/latex-luatex.tex b/macros/generic/markdown/examples/latex-luatex.tex index 5aa7c85d7d..51be09c1f6 100644 --- a/macros/generic/markdown/examples/latex-luatex.tex +++ b/macros/generic/markdown/examples/latex-luatex.tex @@ -49,8 +49,33 @@ date: \today \catcode`\%=14\relax \catcode`\#=6\relax -% Typeset some further examples with inline markdown text. +% Besides inputting external files, Markdown text can we written directly +% into a LaTeX document. Markdown text and LaTeX code can be freely combined. \begin{markdown} -Here are some non-ASCII characters: *ěščřžýáíé*. +This is a paragraph of *Markdown text* with inline `\LaTeX`{=tex} code. + +``` {=tex} +This is a paragraph of \LaTeX{} code with inline \markinline{*Markdown text*}. +``` +\end{markdown} + +% Besides YAML, LaTeX, and Markdown, you can also type HTML in your documents. +\begin{markdown} +Here is some <b>HTML code</b> mixed *with Markdown*. In `\TeX`{=tex}, the HTML +code will be silently ignored, whereas in `\TeX`{=tex}4ht, the HTML code will +be passed through to the output: + +<table border="1"> + <tr> + <td>Emil</td> + <td>Tobias</td> + <td>Linus</td> + </tr> + <tr> + <td>16</td> + <td>14</td> + <td>10</td> + </tr> +</table> \end{markdown} \end{document} diff --git a/macros/generic/markdown/examples/latex-pdftex.tex b/macros/generic/markdown/examples/latex-pdftex.tex index 7d188d75f2..34f78707c3 100644 --- a/macros/generic/markdown/examples/latex-pdftex.tex +++ b/macros/generic/markdown/examples/latex-pdftex.tex @@ -50,15 +50,21 @@ date: \today \catcode`\%=14\relax \catcode`\#=6\relax -% Typeset some further examples with inline markdown text. +% Besides inputting external files, Markdown text can we written directly +% into a LaTeX document. Markdown text and LaTeX code can be freely combined. \begin{markdown} -Here are some non-ASCII characters: *ěščřžýáíé*. +This is a paragraph of *Markdown text* with inline `\LaTeX`{=tex} code. + +``` {=tex} +This is a paragraph of \LaTeX{} code with inline \markinline{*Markdown text*}. +``` \end{markdown} -\begin{markdown}[hybrid] -Here is some <b>HTML code</b> mixed *with Markdown*. In \TeX, the HTML code -will be silently ignored, whereas in \TeX 4ht, the HTML code will be passed -through to the output: +% Besides YAML, LaTeX, and Markdown, you can also type HTML in your documents. +\begin{markdown} +Here is some <b>HTML code</b> mixed *with Markdown*. In `\TeX`{=tex}, the HTML +code will be silently ignored, whereas in `\TeX`{=tex}4ht, the HTML code will +be passed through to the output: <table border="1"> <tr> diff --git a/macros/generic/markdown/markdown.dtx b/macros/generic/markdown/markdown.dtx index dd4c7367fb..bbbd06e8bb 100644 --- a/macros/generic/markdown/markdown.dtx +++ b/macros/generic/markdown/markdown.dtx @@ -683,6 +683,12 @@ abbr { \endgroup %</techdoc-block-diagram> %<*techdoc-bibliography> +@online{starynovotny24, + author = {Starý Novotný, Vít and Enrico Gregorio and Max Chernoff and P. Spratte, Jonathan}, + title = {Convert control sequence with a variable number of undelimited parameters into a token list}, + url = {https://tex.stackexchange.com/q/716362/70941}, + urldate = {2024-04-28}, +} @book{tantau21, author = {Till Tantau and Joseph Wright and Vedran Miletić}, title = {The Beamer class}, @@ -827,6 +833,8 @@ abbr { \seq_map_inline:Nn \l_@@_header_identifiers_seq { \label { sec:##1 } } + \seq_clear:N + \l_@@_header_identifiers_seq }, }, } @@ -11342,7 +11350,7 @@ pdftex --shell-escape document.tex %### Typesetting Markdown {#tex-typesetting} % % The interface exposes the \mdef{markdownBegin}, \mdef{markdownEnd}, -% \mdef{markdownInput}, and \mdef{markdownEscape} macros. +% \mdef{markinline}, \mdef{markdownInput}, and \mdef{markdownEscape} macros. % % The \mref{markdownBegin} macro marks the beginning of a markdown document % fragment and the \mref{markdownEnd} macro marks its end. @@ -11400,6 +11408,38 @@ pdftex --shell-escape document.tex % \bye % ``````` % +% You can use the \mref{markinline} macro to input inline markdown content. +% +% \end{markdown} +% \begin{macrocode} +\let\markinline\relax +% \end{macrocode} +% \par +% \begin{markdown} +% +% The following example plain \TeX{} code showcases the usage of the +% \mref{markinline} macro: +% +% ``` tex +% \input markdown +% \markinline{_Hello_ **world**} +% \bye +% ``````` +% +% The above code has the same effect as the below code: +% +% ``` tex +% \input markdown +% \markdownSetup{contentLevel=inline} +% \markdownBegin +% _Hello_ **world** ... +% \markdownEnd +% \bye +% ``````` +% +% The \mref{markinline} macro is subject to the same limitations as the +% \mref{markdownBegin} and \mref{markdownEnd} macros. +% % You can use the \mref{markdownInput} macro to include markdown documents, % similarly to how you might use the \mref{input} \TeX{} primitive to include % \TeX{} documents. The \mref{markdownInput} macro accepts a single parameter @@ -11413,7 +11453,7 @@ pdftex --shell-escape document.tex % \par % \begin{markdown} % -% This macro is not subject to the abovelisted limitations of the +% This macro is not subject to the limitations of the % \mref{markdownBegin} and \mref{markdownEnd} macros. % % The following example plain \TeX{} code showcases the usage of the @@ -11906,11 +11946,11 @@ macro after loading the package has no effect. % % The \mdef{markdownOptionStripPercentSigns} macro controls whether a percent % sign (`\%`) at the beginning of a line will be discarded when buffering -% Markdown input (see Section <#sec:buffering>) or not. Notably, this -% enables the use of markdown when writing \TeX{} package documentation using -% the \pkg{Doc} \LaTeX{}~package~[@mittelbach17] or similar. The recognized -% values of the macro are `true` (discard) and `false` (retain). It defaults -% to `false`. +% Markdown input (see sections <#sec:buffering-block> and +% <#sec:buffering-inline>) or not. Notably, this enables the use of markdown +% when writing \TeX{} package documentation using the \pkg{Doc} +% \LaTeX{}~package~[@mittelbach17] or similar. The recognized values of the +% macro are `true` (discard) and `false` (retain). It defaults to `false`. % % \end{markdown} % \begin{macrocode} @@ -20158,6 +20198,8 @@ following text: } \tl_new:N \l_@@_renderer_definition_tl +\bool_new:N + \g_@@_appending_renderer_bool \cs_new:Nn \@@_define_renderer:nNn { \keys_define:nn @@ -20171,6 +20213,17 @@ following text: { \cP\#0 } { #1 } \l_@@_renderer_definition_tl + \bool_if:NT + \g_@@_appending_renderer_bool + { + \@@_tl_set_from_cs:NNn + \l_tmpa_tl + #2 + { #3 } + \tl_put_left:NV + \l_@@_renderer_definition_tl + \l_tmpa_tl + } \cs_generate_from_arg_count:NNnV #2 \cs_set:Npn @@ -20179,12 +20232,61 @@ following text: }, } } +% \end{macrocode} +% \par +% \begin{markdown} +% +% We define the function \mdef{@@_tl_set_from_cs:NNn} +% [@starynovotny24]. The function takes a token list, a control sequence with +% undelimited parameters, and the number of parameters the control sequence +% accepts, and locally assigns the replacement text of the control sequence +% to the token list. +% +% \end{markdown} +% \begin{macrocode} +\cs_new_protected:Nn + \@@_tl_set_from_cs:NNn + { + \tl_set:Nn + \l_tmpa_tl + { #2 } + \int_step_inline:nn + { #3 } + { + \exp_args:NNc + \tl_put_right:Nn + \l_tmpa_tl + { @@_tl_set_from_cs_parameter_ ##1 } + } + \exp_args:NNV + \tl_set:No + \l_tmpb_tl + \l_tmpa_tl + \regex_replace_all:nnN + { \cP. } + { \0\0 } + \l_tmpb_tl + \int_step_inline:nn + { #3 } + { + \regex_replace_all:nnN + { \c { @@_tl_set_from_cs_parameter_ ##1 } } + { \cP\# ##1 } + \l_tmpb_tl + } + \tl_set:NV + #1 + \l_tmpb_tl + } \cs_generate_variant:Nn \@@_define_renderer:nNn { ncV } \cs_generate_variant:Nn \cs_generate_from_arg_count:NNnn { NNnV } +\cs_generate_variant:Nn + \tl_put_left:Nn + { Nv } \keys_define:nn { markdown/options } { @@ -20194,7 +20296,6 @@ following text: { #1 } }, } -\ExplSyntaxOff % \end{macrocode} % \par % \begin{markdown} @@ -20211,13 +20312,92 @@ following text: % } % ``````` % -% In addition to exact token renderer names, we also support wildcards -% and enumerations that match multiple token renderer names: +% \end{markdown} +% \begin{macrocode} +\tl_new:N + \l_@@_renderer_glob_definition_tl +\seq_new:N + \l_@@_renderer_glob_results_seq +\regex_const:Nn + \c_@@_appending_key_regex + { \s*+$ } +\keys_define:nn + { markdown/options/renderers } + { + unknown .code:n = { +% \end{macrocode} +% \par +% \begin{markdown} +% +% Besides defining renderers at once, we can also define them incrementally +% using the appending operator (`+=`). This can be especially useful in +% defining rules for processing different \acro{HTML} class names and +% identifiers: +% ``` tex +% \markdownSetup{ +% renderers = { +% \% Start with empty renderers. +% headerAttributeContextBegin = {}, +% attributeClassName = {}, +% attributeIdentifier = {}, +% \% Define the processing of a single specific HTML class name. +% headerAttributeContextBegin += { +% \markdownSetup{ +% renderers = { +% attributeClassName += {...}, +% }, +% } +% }, +% \% Define the processing of a single specific HTML identifier. +% headerAttributeContextBegin += { +% \markdownSetup{ +% renderers = { +% attributeIdentifier += {...}, +% }, +% } +% }, +% }, +% } +% ``````` +% +% \end{markdown} +% \begin{macrocode} + \regex_match:NVTF + \c_@@_appending_key_regex + \l_keys_key_str + { + \bool_gset_true:N + \g_@@_appending_renderer_bool + \tl_set:NV + \l_tmpa_tl + \l_keys_key_str + \regex_replace_once:NnN + \c_@@_appending_key_regex + { } + \l_tmpa_tl + \tl_set:Nx + \l_tmpb_tl + { { \l_tmpa_tl } = } + \tl_put_right:Nn + \l_tmpb_tl + { { #1 } } + \keys_set:nV + { markdown/options/renderers } + \l_tmpb_tl + \bool_gset_false:N + \g_@@_appending_renderer_bool + } +% \end{macrocode} +% \par +% \begin{markdown} +% +% In addition to exact token renderer names, we also support wildcards (`*`) +% and enumerations (`|`) that match multiple token renderer names: % ``` tex % \markdownSetup{ % renderers = { % heading* = {{\bf #1}}, \% Render headings using the bold face. -% jekyllData(String|Number) = { \% Render YAML string and numbers +% jekyllData(String|Number) = {\% \% Render YAML string and numbers % {\it #2}\% \% using italics. % }, % } @@ -20233,7 +20413,8 @@ following text: % } % ``````` % -% To determine the current token renderer, you can use the parameter `#0`: +% To determine the current token renderer, you can use the +% pseudo-parameter `#0`: % ``` tex % \markdownSetup{ % renderers = { @@ -20244,7 +20425,59 @@ following text: % % \end{markdown} % \begin{macrocode} -\ExplSyntaxOn + { + \@@_glob_seq:VnN + \l_keys_key_str + { g_@@_renderers_seq } + \l_@@_renderer_glob_results_seq + \seq_if_empty:NTF + \l_@@_renderer_glob_results_seq + { + \msg_error:nnV + { markdown } + { undefined-renderer } + \l_keys_key_str + } + { + \tl_set:Nn + \l_@@_renderer_glob_definition_tl + { \exp_not:n { #1 } } + \seq_map_inline:Nn + \l_@@_renderer_glob_results_seq + { + \tl_set:Nn + \l_tmpa_tl + { { ##1 } = } + \tl_put_right:Nx + \l_tmpa_tl + { { \l_@@_renderer_glob_definition_tl } } + \keys_set:nV + { markdown/options/renderers } + \l_tmpa_tl + } + } + } + }, + } +\msg_new:nnn + { markdown } + { undefined-renderer } + { + Renderer~#1~is~undefined. + } +\cs_generate_variant:Nn + \@@_glob_seq:nnN + { VnN } +\cs_generate_variant:Nn + \cs_generate_from_arg_count:NNnn + { cNVV } +\cs_generate_variant:Nn + \msg_error:nnn + { nnV } +\prg_generate_conditional_variant:Nnn + \regex_match:Nn + { NV } + { TF } \prop_new:N \g_@@_glob_cache_prop \tl_new:N @@ -20306,72 +20539,6 @@ following text: \cs_generate_variant:Nn \prop_gput:Nnn { NeV } -\seq_new:N - \l_@@_renderer_glob_results_seq -\keys_define:nn - { markdown/options/renderers } - { - unknown .code:n = { - \@@_glob_seq:VnN - \l_keys_key_str - { g_@@_renderers_seq } - \l_@@_renderer_glob_results_seq - \seq_if_empty:NTF - \l_@@_renderer_glob_results_seq - { - \msg_error:nnV - { markdown } - { undefined-renderer } - \l_keys_key_str - } - { - \tl_set:Nn - \l_@@_renderer_definition_tl - { #1 } - \seq_map_inline:Nn - \l_@@_renderer_glob_results_seq - { - \@@_renderer_tl_to_csname:nN - { ##1 } - \l_tmpa_tl - \prop_get:NnN - \g_@@_renderer_arities_prop - { ##1 } - \l_tmpb_tl - \int_set:Nn - \l_tmpa_int - \l_tmpb_tl - \tl_set:NV - \l_tmpb_tl - \l_@@_renderer_definition_tl - \regex_replace_all:nnN - { \cP\#0 } - { ##1 } - \l_tmpb_tl - \cs_generate_from_arg_count:cNVV - { \l_tmpa_tl } - \cs_set:Npn - \l_tmpa_int - \l_tmpb_tl - } - } - }, - } -\msg_new:nnn - { markdown } - { undefined-renderer } - { - Renderer~#1~is~undefined. - } -\cs_generate_variant:Nn - \@@_glob_seq:nnN - { VnN } -\cs_generate_variant:Nn - \cs_generate_from_arg_count:NNnn - { cNVV } -\cs_generate_variant:Nn - \msg_error:nnn - { nnV } % \end{macrocode} % \begin{markdown} % @@ -20750,6 +20917,8 @@ following text: } \tl_new:N \l_@@_renderer_prototype_definition_tl +\bool_new:N + \g_@@_appending_renderer_prototype_bool \cs_new:Nn \@@_define_renderer_prototype:nNn { \keys_define:nn @@ -20763,6 +20932,17 @@ following text: { \cP\#0 } { #1 } \l_@@_renderer_prototype_definition_tl + \bool_if:NT + \g_@@_appending_renderer_prototype_bool + { + \@@_tl_set_from_cs:NNn + \l_tmpa_tl + #2 + { #3 } + \tl_put_left:NV + \l_@@_renderer_prototype_definition_tl + \l_tmpa_tl + } \cs_generate_from_arg_count:NNnV #2 \cs_set:Npn @@ -20791,7 +20971,6 @@ following text: \cs_generate_variant:Nn \@@_define_renderer_prototype:nNn { ncV } -\ExplSyntaxOff % \end{macrocode} % \par % \begin{markdown} @@ -20808,8 +20987,81 @@ following text: % } % ``````` % -% In addition to exact token renderer names, we also support wildcards -% and enumerations that match multiple token renderer prototype names: +% \end{markdown} +% \begin{macrocode} +\keys_define:nn + { markdown/options/renderer-prototypes } + { + unknown .code:n = { +% \end{macrocode} +% \par +% \begin{markdown} +% +% Besides defining renderer prototypes at once, we can also define them +% incrementally using the appending operator (`+=`). This can be especially +% useful in defining rules for processing different \acro{HTML} class names +% and identifiers: +% ``` tex +% \markdownSetup{ +% rendererPrototypes = { +% \% Start with empty renderer prototypes. +% headerAttributeContextBegin = {}, +% attributeClassName = {}, +% attributeIdentifier = {}, +% \% Define the processing of a single specific HTML class name. +% headerAttributeContextBegin += { +% \markdownSetup{ +% rendererPrototypes = { +% attributeClassName += {...}, +% }, +% } +% }, +% \% Define the processing of a single specific HTML identifier. +% headerAttributeContextBegin += { +% \markdownSetup{ +% rendererPrototypes = { +% attributeIdentifier += {...}, +% }, +% } +% }, +% }, +% } +% ``````` +% +% \end{markdown} +% \begin{macrocode} + \regex_match:NVTF + \c_@@_appending_key_regex + \l_keys_key_str + { + \bool_gset_true:N + \g_@@_appending_renderer_prototype_bool + \tl_set:NV + \l_tmpa_tl + \l_keys_key_str + \regex_replace_once:NnN + \c_@@_appending_key_regex + { } + \l_tmpa_tl + \tl_set:Nx + \l_tmpb_tl + { { \l_tmpa_tl } = } + \tl_put_right:Nn + \l_tmpb_tl + { { #1 } } + \keys_set:nV + { markdown/options/renderer-prototypes } + \l_tmpb_tl + \bool_gset_false:N + \g_@@_appending_renderer_prototype_bool + } +% \end{macrocode} +% \par +% \begin{markdown} +% +% In addition to exact token renderer prototype names, we also support +% wildcards (`*`) and enumerations (`|`) that match multiple token renderer +% prototype names: % ``` tex % \markdownSetup{ % rendererPrototypes = { @@ -20831,7 +21083,7 @@ following text: % ``````` % % To determine the current token renderer prototype, you can use the -% parameter `#0`: +% pseudo-parameter `#0`: % ``` tex % \markdownSetup{ % rendererPrototypes = { @@ -20842,54 +21094,36 @@ following text: % % \end{markdown} % \begin{macrocode} -\ExplSyntaxOn -\seq_new:N - \l_@@_renderer_prototype_glob_results_seq -\keys_define:nn - { markdown/options/renderer-prototypes } - { - unknown .code:n = { - \@@_glob_seq:VnN - \l_keys_key_str - { g_@@_renderers_seq } - \l_@@_renderer_prototype_glob_results_seq - \seq_if_empty:NTF - \l_@@_renderer_prototype_glob_results_seq { - \msg_error:nnV - { markdown } - { undefined-renderer-prototype } + \@@_glob_seq:VnN \l_keys_key_str - } - { - \tl_set:Nn - \l_@@_renderer_prototype_definition_tl - { #1 } - \seq_map_inline:Nn - \l_@@_renderer_prototype_glob_results_seq + { g_@@_renderers_seq } + \l_@@_renderer_glob_results_seq + \seq_if_empty:NTF + \l_@@_renderer_glob_results_seq { - \@@_renderer_prototype_tl_to_csname:nN - { ##1 } - \l_tmpa_tl - \prop_get:NnN - \g_@@_renderer_arities_prop - { ##1 } - \l_tmpb_tl - \int_set:Nn - \l_tmpa_int - \l_tmpb_tl - \tl_set:NV - \l_tmpb_tl - \l_@@_renderer_prototype_definition_tl - \regex_replace_all:nnN - { \cP\#0 } - { ##1 } - \l_tmpb_tl - \cs_generate_from_arg_count:cNVV - { \l_tmpa_tl } - \cs_set:Npn - \l_tmpa_int - \l_tmpb_tl + \msg_error:nnV + { markdown } + { undefined-renderer-prototype } + \l_keys_key_str + } + { + \tl_set:Nn + \l_@@_renderer_glob_definition_tl + { \exp_not:n { #1 } } + \seq_map_inline:Nn + \l_@@_renderer_glob_results_seq + { + \tl_set:Nn + \l_tmpa_tl + { { ##1 } = } + \tl_put_right:Nx + \l_tmpa_tl + { { \l_@@_renderer_glob_definition_tl } } + \keys_set:nV + { markdown/options/renderer-prototypes } + \l_tmpa_tl + } } } }, @@ -21128,7 +21362,8 @@ pdflatex --shell-escape document.tex % %### Typesetting Markdown % The interface exposes the \envmdef{markdown} and \envmdef{markdown*} -% \LaTeX{} environments, and redefines the \mref{markdownInput} command. +% \LaTeX{} environments, and redefines the \mref{markinline} and +% \mref{markdownInput} commands. % % The \envmref{markdown} and \envmref{markdown*} \LaTeX{} environments are used % to typeset markdown document fragments. Both \LaTeX{} environments accept @@ -21169,6 +21404,13 @@ pdflatex --shell-escape document.tex % \end{document} \end{document} % ``````` % +% The \mref{markinline} macro accepts a single mandatory parameter containing +% inline markdown content and expands to the result of the conversion of the +% input markdown document to plain \TeX{}. Unlike the \mref{markinline} macro +% provided by the plain \TeX{} interface, this macro also accepts \LaTeX{} +% interface options (see Section <#sec:latex-options>) as its optional +% argument. These options will only influnce this markdown content. +% % The \mref{markdownInput} macro accepts a single mandatory parameter containing % the filename of a markdown document and expands to the result of the % conversion of the input markdown document to plain \TeX{}. Unlike the @@ -25155,7 +25397,7 @@ function M.writer.new(options) function self.blockquote(s) if not self.is_writing then return "" end return {"\\markdownRendererBlockQuoteBegin\n",s, - "\n\\markdownRendererBlockQuoteEnd "} + "\\markdownRendererBlockQuoteEnd "} end % \end{macrocode} % \par @@ -25645,7 +25887,7 @@ function M.writer.new(options) end if self.is_writing and #normalized_attributes > 0 then - table.insert(buf, "\\markdownRendererHeaderAttributeContextEnd ") + table.insert(buf, "\\markdownRendererHeaderAttributeContextEnd{}") end return buf @@ -30663,7 +30905,7 @@ M.extensions.fenced_code = function(blank_before_code_fence, table.insert(buf, {"\\markdownRendererInputFencedCode{", name,"}{",self.string(i),"}{",self.infostring(i),"}"}) if attr ~= nil then - table.insert(buf, "\\markdownRendererFencedCodeAttributeContextEnd") + table.insert(buf, "\\markdownRendererFencedCodeAttributeContextEnd{}") end return buf end @@ -30884,7 +31126,7 @@ M.extensions.fenced_divs = function(blank_before_div_fence) function self.div_begin(attributes) local start_output = {"\\markdownRendererFencedDivAttributeContextBegin\n", self.attributes(attributes)} - local end_output = {"\\markdownRendererFencedDivAttributeContextEnd "} + local end_output = {"\\markdownRendererFencedDivAttributeContextEnd{}"} return self.push_attributes("div", attributes, start_output, end_output) end % \end{macrocode} @@ -33453,7 +33695,7 @@ end % \par % \begin{markdown} % -%### Buffering Markdown Input {#buffering} +%### Buffering Block-Level Markdown Input {#buffering-block} % % The macros \mdef{markdownInputFileStream} and \mdef{markdownOutputFileStream} % contain the number of the input and output file streams that will be used for @@ -33512,7 +33754,8 @@ end |markdownIfOption{frozenCache}{}{@ |immediate|openout|markdownOutputFileStream@ |markdownOptionInputTempFileName|relax@ - |markdownInfo{Buffering markdown input into the temporary @ + |markdownInfo{@ + Buffering block-level markdown input into the temporary @ input file "|markdownOptionInputTempFileName" and scanning @ for the closing token sequence "#1"}@ }@ @@ -33694,6 +33937,125 @@ end % \end{macrocode} % \begin{markdown} % +%### Buffering Inline Markdown Input {#buffering-inline} +% +% This section describes the implementation of the macro \mref{markinline}. +% +% \end{markdown} +% \begin{macrocode} +\ExplSyntaxOn +\tl_new:N + \g_@@_after_markinline_tl +\tl_gset:Nn + \g_@@_after_markinline_tl + { \unskip } +\cs_new:Npn + \markinline + { +% \end{macrocode} +% \begin{markdown} +% +% Locally change the category of the special plain \TeX{} characters +% to *other* in order to prevent unwanted interpretation of the input +% markdown text as \TeX{} code. +% +% \end{markdown} +% \begin{macrocode} + \group_begin: + \cctab_select:N + \c_other_cctab +% \end{macrocode} +% \begin{markdown} +% +% Unless we are reading markdown documents from the frozen cache, +% open the file \Opt{inputTempFileName} for writing. +% +% \end{markdown} +% \begin{macrocode} + \@@_if_option:nF + { frozenCache } + { + \immediate + \openout + \markdownOutputFileStream + \markdownOptionInputTempFileName + \relax + \msg_info:nne + { markdown } + { buffering-markinline } + { \markdownOptionInputTempFileName } + } +% \end{macrocode} +% \begin{markdown} +% +% Peek ahead and extract the inline markdown text. +% +% \end{markdown} +% \begin{macrocode} + \peek_regex_replace_once:nnF + { { (.*?) } } + { +% \end{macrocode} +% \begin{markdown} +% +% Unless we are reading markdown documents from the frozen cache, +% store the text in the file \Opt{inputTempFileName} and close it. +% +% \end{markdown} +% \begin{macrocode} + \c { @@_if_option:nF } + \cB { frozenCache \cE } + \cB { + \c { immediate } + \c { write } + \c { markdownOutputFileStream } + \cB { \1 \cE } + \c { immediate } + \c { closeout } + \c { markdownOutputFileStream } + \cE } +% \end{macrocode} +% \begin{markdown} +% +% Reset the category codes and `\input` the result of the conversion. +% +% \end{markdown} +% \begin{macrocode} + \c { group_end: } + \c { group_begin: } + \c { @@_setup:n } + \cB { contentLevel = inline \cE } + \c { markdownInput } + \cB { + \c { markdownOptionOutputDir } / + \c { markdownOptionInputTempFileName } + \cE } + \c { group_end: } + \c { tl_use:N } + \c { g_@@_after_markinline_tl } + } + { + \msg_error:nn + { markdown } + { markinline-peek-failure } + \group_end: + \tl_use:N + \g_@@_after_markinline_tl + } + } +\msg_new:nnn + { markdown } + { buffering-markinline } + { Buffering~inline~markdown~input~into~the~temporary~input~file~"#1". } +\msg_new:nnnn + { markdown } + { markinline-peek-failure } + { Use~of~\iow_char:N \\ markinline~doesn't~match~its~definition } + { The~macro~should~be~followed~by~inline~markdown~text~in~curly~braces } +\ExplSyntaxOff +% \end{macrocode} +% \begin{markdown} +% %### Typesetting Markdown % % The \mref{markdownInput} macro uses an implementation of the @@ -33821,21 +34183,49 @@ end % \par % \begin{markdown} % -%### Logging Facilities -% The \LaTeX{} implementation redefines the plain \TeX{} logging macros (see -% Section <#sec:tex-interface-logging>) to use the \LaTeX{} `\PackageInfo`, -% `\PackageWarning`, and `\PackageError` macros. +%### Typesetting Markdown +% The \mdef{markinlinePlainTeX} macro is used to store the original plain +% \TeX{} implementation of the \mref{markinline} macro. The \mref{markinline} +% macro is then redefined to accept an optional argument with options +% recognized by the \LaTeX{} interface (see Section <#sec:latex-options>). % % \end{markdown} % \begin{macrocode} +\ExplSyntaxOn +\cs_gset_eq:NN + \markinlinePlainTeX + \markinline +\cs_gset:Npn + \markinline + { + \peek_regex_replace_once:nn + { ( \[ (.*?) \] ) ? } + { +% \end{macrocode} +% \par +% \begin{markdown} +% +% Apply the options locally. +% +% \end{markdown} +% \begin{macrocode} + \c { group_begin: } + \c { @@_setup:n } + \cB { \2 \cE } + \c { tl_put_right:Nn } + \c { g_@@_after_markinline_tl } + \cB { \c { group_end: } \cE } + \c { markinlinePlainTeX } + } + } +\ExplSyntaxOff % \end{macrocode} % \par % \begin{markdown} % -%### Typesetting Markdown % The \mdef{markdownInputPlainTeX} macro is used to store the original plain % \TeX{} implementation of the \mref{markdownInput} macro. The \mref{markdownInput} -% is then redefined to accept an optional argument with options recognized by +% macro is then redefined to accept an optional argument with options recognized by % the \LaTeX{} interface (see Section <#sec:latex-options>). % % \end{markdown} @@ -34718,35 +35108,86 @@ end % \par % \begin{markdown} % -% If identifier attributes appear at the beginning of a section, we make them -% produce the `\label` macro. +% If \acro{HTML} identifiers appear after a heading, we make them +% produce `\label` macros. % % \end{markdown} % \begin{macrocode} \ExplSyntaxOn -\seq_new:N \l_@@_header_identifiers_seq -\markdownSetup{ - rendererPrototypes = { - headerAttributeContextBegin = { - \seq_clear:N \l_@@_header_identifiers_seq - \markdownSetup - { - renderers = { - attributeIdentifier = { - \seq_put_right:Nn - \l_@@_header_identifiers_seq - { ##1 } +\seq_new:N + \l_@@_header_identifiers_seq +\markdownSetup + { + rendererPrototypes = { + headerAttributeContextBegin = { + \markdownSetup + { + rendererPrototypes = { + attributeIdentifier = { + \seq_put_right:Nn + \l_@@_header_identifiers_seq + { ##1 } + }, }, - }, - } + } + }, + headerAttributeContextEnd = { + \seq_map_inline:Nn + \l_@@_header_identifiers_seq + { \label { ##1 } } + \seq_clear:N + \l_@@_header_identifiers_seq + }, }, - headerAttributeContextEnd = { - \seq_map_inline:Nn - \l_@@_header_identifiers_seq - { \label { ##1 } } + } +% \end{macrocode} +% \begin{markdown} +% +% If the `unnumbered` \acro{HTML} class (or the `{-}` shorthand) appears after +% a heading the heading and all its subheadings will be unnumbered. +% +% \end{markdown} +% \begin{macrocode} +\bool_new:N + \l_@@_header_unnumbered_bool +\markdownSetup + { + rendererPrototypes = { + headerAttributeContextBegin += { + \markdownSetup + { + rendererPrototypes = { + attributeClassName = { + \bool_if:nT + { + \str_if_eq_p:nn + { ##1 } + { unnumbered } && + ! \l_@@_header_unnumbered_bool + } + { + \group_begin: + \bool_set_true:N + \l_@@_header_unnumbered_bool + \c@secnumdepth = 0 + \markdownSetup + { + rendererPrototypes = { + sectionBegin = { + \group_begin: + }, + sectionEnd = { + \group_end: + }, + }, + } + } + }, + }, + } + }, }, - }, -} + } \ExplSyntaxOff \markdownSetup{rendererPrototypes={ superscript = {\textsuperscript{#1}}, diff --git a/macros/generic/markdown/markdown.html b/macros/generic/markdown/markdown.html index 277f98bdeb..65f1de7d51 100644 --- a/macros/generic/markdown/markdown.html +++ b/macros/generic/markdown/markdown.html @@ -93,7 +93,7 @@ <header id="title-block-header"> <h1 class="title">Markdown Package User Manual</h1> <p class="author">Vít Starý Novotný</p> -<p class="date">3.4.3-0-ge2c6be1a 2024-04-04</p> +<p class="date">3.5.0-0-gfd01a252 2024-04-29</p> </header> <nav id="TOC" role="doc-toc"> <ul> diff --git a/macros/generic/markdown/markdown.pdf b/macros/generic/markdown/markdown.pdf Binary files differindex 8e42e32d0b..a4e313f081 100644 --- a/macros/generic/markdown/markdown.pdf +++ b/macros/generic/markdown/markdown.pdf diff --git a/macros/latex/contrib/nmbib/Makefile b/macros/latex/contrib/nmbib/Makefile index 4b59427e24..4f4135521a 100644 --- a/macros/latex/contrib/nmbib/Makefile +++ b/macros/latex/contrib/nmbib/Makefile @@ -7,7 +7,7 @@ # PACKAGE=nmbib -SAMPLES = nmsample.tex +SAMPLES = nmbib-sample.tex PERLSCRIPTS = nmbibtex.pl @@ -62,9 +62,9 @@ distclean: veryclean # Archive for the distribution. Includes typeset documentation # archive: all clean - tar -czvf $(PACKAGE).tgz -C .. --exclude '*~' --exclude '*.tgz' --exclude CVS $(PACKAGE) + COPYFILE_DISABLE=1 tar -C .. -czvf ../$(PACKAGE).tgz --exclude '*~' --exclude '*.tgz' --exclude '*.zip' --exclude CVS --exclude '.git*' $(PACKAGE); mv ../$(PACKAGE).tgz . zip: all clean ${MAKE} $(PACKAGE).sty $(RM) *.log - zip -r $(PACKAGE).zip * -x '*~' -x '*.tgz' -x '*.zip' -x CVS -x 'CVS/*'
\ No newline at end of file + zip -r $(PACKAGE).zip * -x '*~' -x '*.tgz' -x '*.zip' -x CVS -x 'CVS/*' diff --git a/macros/latex/contrib/nmbib/README b/macros/latex/contrib/nmbib/README index 833fa7992e..00a3fe6b5d 100644 --- a/macros/latex/contrib/nmbib/README +++ b/macros/latex/contrib/nmbib/README @@ -9,4 +9,6 @@ provides other improvments. Changes: + v1.05. nmsample is renamed to nmbib-sample to avoid TeXLive name clash + v1.04 An embarrassing typo corrected.
\ No newline at end of file diff --git a/macros/latex/contrib/nmbib/nmsample.pdf b/macros/latex/contrib/nmbib/nmbib-sample.pdf Binary files differindex bfcf4824b5..cb3c42b895 100644 --- a/macros/latex/contrib/nmbib/nmsample.pdf +++ b/macros/latex/contrib/nmbib/nmbib-sample.pdf diff --git a/macros/latex/contrib/nmbib/nmsample.tex b/macros/latex/contrib/nmbib/nmbib-sample.tex index 56ff2a807a..56ff2a807a 100644 --- a/macros/latex/contrib/nmbib/nmsample.tex +++ b/macros/latex/contrib/nmbib/nmbib-sample.tex diff --git a/macros/latex/contrib/nmbib/nmbib.dtx b/macros/latex/contrib/nmbib/nmbib.dtx index 24647ae06f..f84fc00877 100644 --- a/macros/latex/contrib/nmbib/nmbib.dtx +++ b/macros/latex/contrib/nmbib/nmbib.dtx @@ -1,7 +1,7 @@ % \iffalse % $Id: nmbib.dtx,v 1.21 2015/07/27 20:22:45 boris Exp $ % -%% Copyright 2015, Michael Cohen <mcohen@u-aizu.ac.jp> +%% Copyright 2015-2024, Michael Cohen <mcohen@u-aizu.ac.jp> %% and Boris Veytsman <borisv@lk.net> %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either @@ -59,7 +59,7 @@ % \changes{v1.00}{2014/01/23}{Preliminary release} % \changes{v1.03}{2015/07/25}{Added day field in the chrono bst} % -% \title{New Multibibliography Package\thanks{\copyright 2015 Michael +% \title{New Multibibliography Package\thanks{\copyright 2015--2024 Michael % Cohen and Boris Veytsman}} % \author{Boris Veytsman\thanks{borisv@lk.net} % \and Michael Cohen\thanks{mcohen@u-aizu.ac.jp}} diff --git a/macros/latex/contrib/nmbib/nmbib.pdf b/macros/latex/contrib/nmbib/nmbib.pdf Binary files differindex ba4aeed009..2258288207 100644 --- a/macros/latex/contrib/nmbib/nmbib.pdf +++ b/macros/latex/contrib/nmbib/nmbib.pdf diff --git a/macros/latex/contrib/nmbib/nmbibtex.1 b/macros/latex/contrib/nmbib/nmbibtex.1 index bb7bb38f4b..d96236dde8 100644 --- a/macros/latex/contrib/nmbib/nmbibtex.1 +++ b/macros/latex/contrib/nmbib/nmbibtex.1 @@ -1,4 +1,5 @@ -.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.07) +.\" -*- mode: troff; coding: utf-8 -*- +.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== @@ -15,141 +16,71 @@ .ft R .fi .. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. \*(C+ will -.\" give a nicer C++. Capital omega is used to do unbreakable dashes and -.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, -.\" nothing in troff, for use with C<>. -.tr \(*W- -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' +. ds C` +. ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" -.\" If the F register is turned on, we'll generate index entries on stderr for +.\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. -.ie \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX .. -. nr % 0 -. rr F -.\} -.el \{\ -. de IX +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" .. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} .\} -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C +.rr rF .\" ======================================================================== .\" .IX Title "NMBIBTEX 1" -.TH NMBIBTEX 1 "2015-04-25" "perl v5.10.1" "User Contributed Perl Documentation" +.TH NMBIBTEX 1 2015-04-26 "perl v5.38.2" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh -.SH "NAME" +.SH NAME nmbibtex \- a program to compile bibliographies for the package nmbib -.SH "SYNOPSIS" +.SH SYNOPSIS .IX Header "SYNOPSIS" -nmbibtex \fI\s-1OPTIONS\s0\fR \fI\s-1FILE\s0\fR -.SH "DESCRIPTION" +nmbibtex \fIOPTIONS\fR \fIFILE\fR +.SH DESCRIPTION .IX Header "DESCRIPTION" -nmbibtex calls \fIbibtex\fR\|(1) for all aux files produced by the package +nmbibtex calls \fBbibtex\fR\|(1) for all aux files produced by the package nmbib -.SH "OPTIONS" +.SH OPTIONS .IX Header "OPTIONS" -.IP "\fB\-h\fR" 4 +.IP \fB\-h\fR 4 .IX Item "-h" Print the help information and exit .IP "\fB\-min\-crossrefs\fR \fInumber\fR" 4 .IX Item "-min-crossrefs number" -Send the option \f(CW\*(C`\-min\-crossref=NUMBER\*(C'\fR to \fIbibtex\fR\|(1) -.IP "\fB\-terse\fR" 4 +Send the option \f(CW\*(C`\-min\-crossref=NUMBER\*(C'\fR to \fBbibtex\fR\|(1) +.IP \fB\-terse\fR 4 .IX Item "-terse" -Send the option \f(CW\*(C`\-terse\*(C'\fR to \fIbibtex\fR\|(1) -.IP "\fB\-v\fR" 4 +Send the option \f(CW\*(C`\-terse\*(C'\fR to \fBbibtex\fR\|(1) +.IP \fB\-v\fR 4 .IX Item "-v" Print the copyright information and exit .SH "AUTHORS AND LICENSE" diff --git a/macros/latex/contrib/l3backend/CHANGELOG.md b/macros/latex/required/l3backend/CHANGELOG.md index 66a69a3bb3..ecd8593881 100644 --- a/macros/latex/contrib/l3backend/CHANGELOG.md +++ b/macros/latex/required/l3backend/CHANGELOG.md @@ -6,6 +6,14 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2024-04-11] + +### Added +- Support for 'raw' PDF object IDs + +### Changed +- Update PDF object management code + ## [2024-03-14] ### Removed @@ -339,7 +347,8 @@ this project uses date-based 'snapshot' version identifiers. - Include `l3backend` in file names - Moved backend code to internal for each 'parent' module -[Unreleased]: https://github.com/latex3/latex3/compare/2024-03-14...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2024-04-11...HEAD +[2024-04-11]: https://github.com/latex3/latex3/compare/2024-03-14...2024-04-11 [2024-03-14]: https://github.com/latex3/latex3/compare/2024-02-20...2024-03-14 [2024-02-20]: https://github.com/latex3/latex3/compare/2024-01-04...2024-02-20 [2024-01-04]: https://github.com/latex3/latex3/compare/2023-11-09...2024-01-04 diff --git a/macros/latex/contrib/l3backend/README.md b/macros/latex/required/l3backend/README.md index 7be33df8b8..058fa63cc2 100644 --- a/macros/latex/contrib/l3backend/README.md +++ b/macros/latex/required/l3backend/README.md @@ -1,7 +1,7 @@ LaTeX3 Backend Drivers ====================== -Release 2024-03-14 +Release 2024-04-11 This package forms parts of `expl3`, and contains the code used to interface with backends (drivers) across the `expl3` codebase. The functions here are diff --git a/macros/latex/contrib/l3backend/l3backend-basics.dtx b/macros/latex/required/l3backend/l3backend-basics.dtx index 4d3b68225a..fbac503317 100644 --- a/macros/latex/contrib/l3backend/l3backend-basics.dtx +++ b/macros/latex/required/l3backend/l3backend-basics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % @@ -70,27 +70,27 @@ % \begin{macrocode} \ProvidesExplFile %<*dvipdfmx> - {l3backend-dvipdfmx.def}{2024-03-14}{} + {l3backend-dvipdfmx.def}{2024-04-11}{} {L3 backend support: dvipdfmx} %</dvipdfmx> %<*dvips> - {l3backend-dvips.def}{2024-03-14}{} + {l3backend-dvips.def}{2024-04-11}{} {L3 backend support: dvips} %</dvips> %<*dvisvgm> - {l3backend-dvisvgm.def}{2024-03-14}{} + {l3backend-dvisvgm.def}{2024-04-11}{} {L3 backend support: dvisvgm} %</dvisvgm> %<*luatex> - {l3backend-luatex.def}{2024-03-14}{} + {l3backend-luatex.def}{2024-04-11}{} {L3 backend support: PDF output (LuaTeX)} %</luatex> %<*pdftex> - {l3backend-pdftex.def}{2024-03-14}{} + {l3backend-pdftex.def}{2024-04-11}{} {L3 backend support: PDF output (pdfTeX)} %</pdftex> %<*xetex> - {l3backend-xetex.def}{2024-03-14}{} + {l3backend-xetex.def}{2024-04-11}{} {L3 backend support: XeTeX} %</xetex> % \end{macrocode} diff --git a/macros/latex/contrib/l3backend/l3backend-box.dtx b/macros/latex/required/l3backend/l3backend-box.dtx index 3fc3243c42..93d83293ef 100644 --- a/macros/latex/contrib/l3backend/l3backend-box.dtx +++ b/macros/latex/required/l3backend/l3backend-box.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3backend/l3backend-code.pdf b/macros/latex/required/l3backend/l3backend-code.pdf Binary files differindex 9affc7d856..d298479c42 100644 --- a/macros/latex/contrib/l3backend/l3backend-code.pdf +++ b/macros/latex/required/l3backend/l3backend-code.pdf diff --git a/macros/latex/contrib/l3backend/l3backend-code.tex b/macros/latex/required/l3backend/l3backend-code.tex index df0dd0ea8c..df0dd0ea8c 100644 --- a/macros/latex/contrib/l3backend/l3backend-code.tex +++ b/macros/latex/required/l3backend/l3backend-code.tex diff --git a/macros/latex/contrib/l3backend/l3backend-color.dtx b/macros/latex/required/l3backend/l3backend-color.dtx index eaa89add8c..307432d554 100644 --- a/macros/latex/contrib/l3backend/l3backend-color.dtx +++ b/macros/latex/required/l3backend/l3backend-color.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3backend/l3backend-draw.dtx b/macros/latex/required/l3backend/l3backend-draw.dtx index eef86886f5..c651ab92fe 100644 --- a/macros/latex/contrib/l3backend/l3backend-draw.dtx +++ b/macros/latex/required/l3backend/l3backend-draw.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3backend/l3backend-graphics.dtx b/macros/latex/required/l3backend/l3backend-graphics.dtx index 9360bffd2e..e20457368d 100644 --- a/macros/latex/contrib/l3backend/l3backend-graphics.dtx +++ b/macros/latex/required/l3backend/l3backend-graphics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3backend/l3backend-header.dtx b/macros/latex/required/l3backend/l3backend-header.dtx index 84f8ab53b7..486f564822 100644 --- a/macros/latex/contrib/l3backend/l3backend-header.dtx +++ b/macros/latex/required/l3backend/l3backend-header.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3backend/l3backend-opacity.dtx b/macros/latex/required/l3backend/l3backend-opacity.dtx index a5828bfd90..0c29574c37 100644 --- a/macros/latex/contrib/l3backend/l3backend-opacity.dtx +++ b/macros/latex/required/l3backend/l3backend-opacity.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3backend/l3backend-pdf.dtx b/macros/latex/required/l3backend/l3backend-pdf.dtx index 0a16a79f9e..cf09c0eec2 100644 --- a/macros/latex/contrib/l3backend/l3backend-pdf.dtx +++ b/macros/latex/required/l3backend/l3backend-pdf.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % @@ -113,25 +113,13 @@ % % \subsubsection{Objects} % -% \begin{variable}{\g_@@_backend_object_int} -% For tracking objects. +% \begin{macro}{\@@_backend_object_new:} +% \begin{macro}[EXP]{\@@_backend_object_ref:n, \@@_backend_object_id:n} % \begin{macrocode} -\int_new:N \g_@@_backend_object_int -% \end{macrocode} -% \end{variable} -% -% \begin{macro}{\@@_backend_object_new:n} -% \begin{macro}[EXP]{\@@_backend_object_ref:n} -% \begin{macrocode} -\cs_new_protected:Npn \@@_backend_object_new:n #1 - { - \int_gincr:N \g_@@_backend_object_int - \int_const:cn - { c_@@_object_ \tl_to_str:n {#1} _int } - { \g_@@_backend_object_int } - } -\cs_new:Npn \@@_backend_object_ref:n #1 - { { pdf.obj \int_use:c { c_@@_object_ \tl_to_str:n {#1} _int } } } +\cs_new_protected:Npn \@@_backend_object_new: + { \int_gincr:N \g_@@_backend_object_int } +\cs_new:Npn \@@_backend_object_ref:n #1 { { pdf.obj #1 } } +\cs_new_eq:NN \@@_backend_object_id:n \@@_backend_object_ref:n % \end{macrocode} % \end{macro} % \end{macro} @@ -958,12 +946,12 @@ % \end{macrocode} % \end{variable} % -% \begin{macro}{\@@_backend_object_new:n} -% \begin{macro}[EXP]{\@@_backend_object_ref:n} +% \begin{macro}{\@@_backend_object_new:} +% \begin{macro}[EXP]{\@@_backend_object_ref:n, \@@_backend_object_id:n} % Declaring objects means reserving at the PDF level plus starting % tracking. % \begin{macrocode} -\cs_new_protected:Npn \@@_backend_object_new:n #1 +\cs_new_protected:Npn \@@_backend_object_new: { %<*luatex> \tex_pdfextension:D obj ~ @@ -972,17 +960,16 @@ \tex_pdfobj:D %</pdftex> reserveobjnum ~ - \int_const:cn - { c_@@_object_ \tl_to_str:n {#1} _int } + \int_gset:Nn \g_@@_backend_object_int %<*luatex> - { \tex_pdffeedback:D lastobj } + { \tex_pdffeedback:D lastobj } %</luatex> %<*pdftex> - { \tex_pdflastobj:D } + { \tex_pdflastobj:D } %</pdftex> } -\cs_new:Npn \@@_backend_object_ref:n #1 - { \int_use:c { c_@@_object_ \tl_to_str:n {#1} _int } ~ 0 ~ R } +\cs_new:Npn \@@_backend_object_ref:n #1 { #1 ~ 0 ~ R } +\cs_new:Npn \@@_backend_object_id:n #1 {#1} % \end{macrocode} % \end{macro} % \end{macro} @@ -1001,28 +988,26 @@ %<*pdftex> \tex_immediate:D \tex_pdfobj:D %</pdftex> - useobjnum ~ - \int_use:c - { c_@@_object_ \tl_to_str:n {#1} _int } - \@@_backend_object_write:nn {#2} {#3} + useobjnum ~ #1 + \@@_backend_object_write:nn {#2} {#3} } \cs_new:Npn \@@_backend_object_write:nn #1#2 { - \str_case:nn {#1} - { - { array } { { [ ~ \exp_not:n {#2} ~ ] } } - { dict } { { << ~ \exp_not:n {#2} ~ >> } } - { fstream } - { - stream ~ attr ~ { \@@_exp_not_i:nn #2 } ~ - file ~ { \@@_exp_not_ii:nn #2 } - } - { stream } - { - stream ~ attr ~ { \@@_exp_not_i:nn #2 } ~ - { \@@_exp_not_ii:nn #2 } - } - } + \str_case:nn {#1} + { + { array } { { [ ~ \exp_not:n {#2} ~ ] } } + { dict } { { << ~ \exp_not:n {#2} ~ >> } } + { fstream } + { + stream ~ attr ~ { \@@_exp_not_i:nn #2 } ~ + file ~ { \@@_exp_not_ii:nn #2 } + } + { stream } + { + stream ~ attr ~ { \@@_exp_not_i:nn #2 } ~ + { \@@_exp_not_ii:nn #2 } + } + } } \cs_generate_variant:Nn \@@_backend_object_write:nnn { nne } \cs_new:Npn \@@_exp_not_i:nn #1#2 { \exp_not:n {#1} } @@ -1235,28 +1220,22 @@ % % \subsubsection{Objects} % -% \begin{variable}{\g_@@_backend_object_int, \g_@@_backend_object_prop} +% \begin{variable}{\g_@@_backend_object_prop} % For tracking objects to allow finalisation. % \begin{macrocode} -\int_new:N \g_@@_backend_object_int \prop_new:N \g_@@_backend_object_prop % \end{macrocode} % \end{variable} % -% \begin{macro}{\@@_backend_object_new:n} -% \begin{macro}[EXP]{\@@_backend_object_ref:n} +% \begin{macro}{\@@_backend_object_new:} +% \begin{macro}[EXP]{\@@_backend_object_ref:n, \@@_backend_object_id:n} % Objects are tracked at the macro level, but we don't have to do anything % at this stage. % \begin{macrocode} -\cs_new_protected:Npn \@@_backend_object_new:n #1 - { - \int_gincr:N \g_@@_backend_object_int - \int_const:cn - { c_@@_object_ \tl_to_str:n {#1} _int } - { \g_@@_backend_object_int } - } -\cs_new:Npn \@@_backend_object_ref:n #1 - { @pdf.obj \int_use:c { c_@@_object_ \tl_to_str:n {#1} _int } } +\cs_new_protected:Npn \@@_backend_object_new: + { \int_gincr:N \g_@@_backend_object_int } +\cs_new:Npn \@@_backend_object_ref:n #1 { @pdf.obj #1 } +\cs_new_eq:NN \@@_backend_object_id:n \@@_backend_object_ref:n % \end{macrocode} % \end{macro} % \end{macro} @@ -1627,16 +1606,17 @@ % % \subsubsection{Objects} % -% \begin{macro}{\@@_backend_object_new:n} -% \begin{macro}[EXP]{\@@_backend_object_ref:n} +% \begin{macro}{\@@_backend_object_new:} +% \begin{macro}[EXP]{\@@_backend_object_ref:n, \@@_backend_object_id:n} % \begin{macro}{\@@_backend_object_write:nnn, \@@_backend_object_write:ne} % \begin{macro}{\@@_backend_object_now:nn, , \@@_backend_object_now:ne} % \begin{macro}{\@@_backend_object_last:} % \begin{macro}[EXP]{\@@_backend_pageobject_ref:n} % All no-ops here. % \begin{macrocode} -\cs_new_protected:Npn \@@_backend_object_new:nn #1 { } +\cs_new_protected:Npn \@@_backend_object_new: { } \cs_new:Npn \@@_backend_object_ref:n #1 { } +\cs_new:Npn \@@_backend_object_id:n #1 { } \cs_new_protected:Npn \@@_backend_object_write:nnn #1#2#3 { } \cs_new_protected:Npn \@@_backend_object_write:nne #1#2#3 { } \cs_new_protected:Npn \@@_backend_object_now:nn #1#2 { } diff --git a/macros/latex/contrib/l3backend/l3backend.ins b/macros/latex/required/l3backend/l3backend.ins index e24c41d236..e24c41d236 100644 --- a/macros/latex/contrib/l3backend/l3backend.ins +++ b/macros/latex/required/l3backend/l3backend.ins diff --git a/macros/latex/contrib/l3kernel/CHANGELOG.md b/macros/latex/required/l3kernel/CHANGELOG.md index 9c8c4d506c..e770f3fe36 100644 --- a/macros/latex/contrib/l3kernel/CHANGELOG.md +++ b/macros/latex/required/l3kernel/CHANGELOG.md @@ -7,6 +7,30 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2024-04-11] + +### Added +- `\prop_(g)put_if_not_in:Nnn` (renamed from `\prop_(g)put_if_new:Nnn`) +- `\intarray_if_exist:N(TF)` +- `\fparray_if_exist:N(TF)` +- Support for 'indexed' PDF objects + +### Changed +- Expand object names in `\pdf_object_...` functions (issue \#1521) +- Adapt `l3doc` for `ltcmd` change to handling of newlines + (see latex3/latex2e\#1304) +- Return active spaces from `\sys_get_query:n(nn)N` (issue \#1529) + +### Fixed +- False `debug` error raised by `\cctab_const:Nn` (issue \#1508) +- Undefined `\__kernel_iwo_open:Nn` used in `\iow_shell_open:Nn` + (issue \#1515) +- Naming of register functions in LuaMetaTeX 2.11+ (issue \#1518) +- Catcode applied to letters by `\sys_get_query:n(nn)N` + +### Deprecated +- `\prop_(g)put_if_new:Nnn` (renamed to `\prop_(g)put_if_not_in:Nnn`) + ## [2024-03-14] ### Added @@ -20,6 +44,7 @@ this project uses date-based 'snapshot' version identifiers. ### Fixed - Typeset `TF` of internal conditionals in current color (issue \#730) - Some functions and variables were defined locally + ## [2024-02-20] ### Changed @@ -1700,7 +1725,8 @@ this project uses date-based 'snapshot' version identifiers. - Step functions have been added for dim variables, e.g. `\dim_step_inline:nnnn` -[Unreleased]: https://github.com/latex3/latex3/compare/2024-03-14...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2024-04-11...HEAD +[2024-04-11]: https://github.com/latex3/latex3/compare/2024-03-14...2024-04-11 [2024-03-14]: https://github.com/latex3/latex3/compare/2024-02-20...2024-03-14 [2024-02-20]: https://github.com/latex3/latex3/compare/2024-02-18...2024-02-20 [2024-02-18]: https://github.com/latex3/latex3/compare/2024-02-13...2024-02-18 diff --git a/macros/latex/contrib/l3kernel/README.md b/macros/latex/required/l3kernel/README.md index 8ef94a41ac..70d106b496 100644 --- a/macros/latex/contrib/l3kernel/README.md +++ b/macros/latex/required/l3kernel/README.md @@ -1,7 +1,7 @@ LaTeX3 Programming Conventions ============================== -Release 2024-03-14 +Release 2024-04-11 Overview -------- diff --git a/macros/latex/contrib/l3kernel/expl3.dtx b/macros/latex/required/l3kernel/expl3.dtx index 76ef8ec919..56a62010fa 100644 --- a/macros/latex/contrib/l3kernel/expl3.dtx +++ b/macros/latex/required/l3kernel/expl3.dtx @@ -24,7 +24,7 @@ % %<*driver|generic|package|2ekernel> %</driver|generic|package|2ekernel> -\def\ExplFileDate{2024-03-14}% +\def\ExplFileDate{2024-04-11}% %<*driver> \documentclass[full]{l3doc} \usepackage{graphicx} @@ -51,7 +51,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/expl3.pdf b/macros/latex/required/l3kernel/expl3.pdf Binary files differindex b36343153a..56a734d6bf 100644 --- a/macros/latex/contrib/l3kernel/expl3.pdf +++ b/macros/latex/required/l3kernel/expl3.pdf diff --git a/macros/latex/contrib/l3kernel/interface3.pdf b/macros/latex/required/l3kernel/interface3.pdf Binary files differindex 1df60adf1a..bf177baf39 100644 --- a/macros/latex/contrib/l3kernel/interface3.pdf +++ b/macros/latex/required/l3kernel/interface3.pdf diff --git a/macros/latex/contrib/l3kernel/interface3.tex b/macros/latex/required/l3kernel/interface3.tex index ff8114028e..1bf31032ee 100644 --- a/macros/latex/contrib/l3kernel/interface3.tex +++ b/macros/latex/required/l3kernel/interface3.tex @@ -58,7 +58,7 @@ for those people who are interested. {latex-team@latex-project.org}% }% } -\date{Released 2024-03-14} +\date{Released 2024-04-11} \pagenumbering{roman} \maketitle diff --git a/macros/latex/contrib/l3kernel/l3.ins b/macros/latex/required/l3kernel/l3.ins index 2940230505..bf7a75381d 100644 --- a/macros/latex/contrib/l3kernel/l3.ins +++ b/macros/latex/required/l3kernel/l3.ins @@ -105,7 +105,7 @@ and all files in that bundle must be distributed together. \from{l3regex.dtx} {package} \from{l3box.dtx} {package} \from{l3color.dtx} {package} - \from{l3pdf.dtx} {package} + \from{l3pdf.dtx} {package,tex} \from{l3coffins.dtx} {package} \from{l3luatex.dtx} {package,tex} \from{l3unicode.dtx} {package} @@ -176,6 +176,7 @@ and all files in that bundle must be distributed together. \from{l3sys.dtx}{package,lua} \from{l3token.dtx}{package,lua} \from{l3intarray.dtx}{package,lua} + \from{l3pdf.dtx}{package,lua} }} \endbatchfile diff --git a/macros/latex/contrib/l3kernel/l3basics.dtx b/macros/latex/required/l3kernel/l3basics.dtx index 66e999fe62..eabf678caa 100644 --- a/macros/latex/contrib/l3kernel/l3basics.dtx +++ b/macros/latex/required/l3kernel/l3basics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % @@ -1340,8 +1340,9 @@ % only locally/globally assigned; % \item \texttt{check-expressions} that checks integer, dimension, % skip, and muskip expressions are not terminated prematurely; -% \item \texttt{deprecation} that makes soon-to-be-deprecated commands produce errors; -% \item \texttt{log-functions} that logs function definitions; +% \item \texttt{deprecation} that makes deprecated commands produce errors; +% \item \texttt{log-functions} that logs function definitions and +% variable declarations; % \item \texttt{all} that does all of the above. % \end{itemize} % Providing these as switches rather than options allows testing code @@ -1355,10 +1356,10 @@ % \cs{debug_suspend:} \ldots{} \cs{debug_resume:} % \end{syntax} % Suppress (locally) errors and logging from \texttt{debug} commands, -% except for the \texttt{deprecation} errors or warnings. These pairs +% except for the \texttt{deprecation} errors. These pairs % of commands can be nested. This can be used around pieces of code % that are known to fail checks, if such failures should be ignored. -% See for instance \pkg{l3coffins}. +% See for instance \pkg{l3cctab} and \pkg{l3coffins}. % \end{function} % % \end{documentation} @@ -1871,9 +1872,8 @@ % % \begin{macro}{\__kernel_deprecation_code:nn} % \begin{variable}{\g_@@_deprecation_on_tl, \g_@@_deprecation_off_tl} -% Some commands were more recently deprecated and not yet removed; -% only make these into errors if the user requests it. This relies on -% two token lists, filled up in \pkg{l3deprecation}. +% Make deprecated commands throw errors if the user requests it. +% This relies on two token lists, filled up in \pkg{l3deprecation}. % \begin{macrocode} \cs_gset_nopar:Npn \g_@@_deprecation_on_tl { } \cs_gset_nopar:Npn \g_@@_deprecation_off_tl { } diff --git a/macros/latex/contrib/l3kernel/l3bitset.dtx b/macros/latex/required/l3kernel/l3bitset.dtx index 3100c28463..b0bd996d26 100644 --- a/macros/latex/contrib/l3kernel/l3bitset.dtx +++ b/macros/latex/required/l3kernel/l3bitset.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3bootstrap.dtx b/macros/latex/required/l3kernel/l3bootstrap.dtx index 5ff0c2e68d..2c51bf3bb0 100644 --- a/macros/latex/contrib/l3kernel/l3bootstrap.dtx +++ b/macros/latex/required/l3kernel/l3bootstrap.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3box.dtx b/macros/latex/required/l3kernel/l3box.dtx index 08463db56d..2d4902950f 100644 --- a/macros/latex/contrib/l3kernel/l3box.dtx +++ b/macros/latex/required/l3kernel/l3box.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3cctab.dtx b/macros/latex/required/l3kernel/l3cctab.dtx index 5cdaa3dc92..dd35fb00a3 100644 --- a/macros/latex/contrib/l3kernel/l3cctab.dtx +++ b/macros/latex/required/l3kernel/l3cctab.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % @@ -286,15 +286,23 @@ % \end{macrocode} % Now the case for other engines. Here, each table is an integer % array. Following the \LuaTeX{} pattern, a new table starts with -% \IniTeX{} codes. The index base is out-by-one, so we have an +% \IniTeX{} codes. The \cs{debug_suspend:} and \cs{debug_resume:} +% functions prevent errors and logging from \texttt{debug} commands +% which are either duplicate or false when \cs{@@_new:N} is used +% by \cs{cctab_new:N} or \cs{cctab_const:Nn}. +% The index base is out-by-one, so we have an % internal function to handle that. The \IniTeX{} \tn{endlinechar} is % $13$. % \begin{macrocode} { \cs_new_protected:Npn \@@_new:N #1 - { \intarray_new:Nn #1 { 257 } } + { + \debug_suspend: + \intarray_new:Nn #1 { 257 } + \debug_resume: + } \cs_new_protected:Npn \@@_gstore:Nnn #1#2#3 - { \intarray_gset:Nnn #1 { \int_eval:n { #2 + 1 } } {#3} } + { \intarray_gset:Nnn #1 { #2 + 1 } {#3} } \cs_new_protected:Npn \cctab_new:N #1 { \__kernel_chk_if_free_cs:N #1 @@ -796,13 +804,22 @@ % \subsection{Constant category code tables} % % \begin{macro}{\cctab_const:Nn,\cctab_const:cn} -% Creates a new \meta{cctab~var} then sets it with the current and -% user-supplied codes. +% Creates a new \meta{cctab~var} then sets it with the \IniTeX{} and +% user-supplied codes. To avoid false \texttt{debug} errors, we write +% out implementation of \cs{cctab_new:N} and \cs{cctab_gset:Nn} +% instead of directly using them here. The initialization part in +% \cs{cctab_new:N} in non-\LuaTeX{} is omitted as it's covered by +% the \IniTeX{} settings. % \begin{macrocode} \cs_new_protected:Npn \cctab_const:Nn #1#2 { - \cctab_new:N #1 - \cctab_gset:Nn #1 {#2} + \__kernel_chk_if_free_cs:N #1 + \@@_new:N #1 + \group_begin: + \cctab_select:N \c_initex_cctab + #2 \scan_stop: + \@@_gset:n {#1} + \group_end: } \cs_generate_variant:Nn \cctab_const:Nn { c } % \end{macrocode} diff --git a/macros/latex/contrib/l3kernel/l3clist.dtx b/macros/latex/required/l3kernel/l3clist.dtx index ad65a4b174..c67f70db2c 100644 --- a/macros/latex/contrib/l3kernel/l3clist.dtx +++ b/macros/latex/required/l3kernel/l3clist.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3coffins.dtx b/macros/latex/required/l3kernel/l3coffins.dtx index ad41224aa0..164d10019d 100644 --- a/macros/latex/contrib/l3kernel/l3coffins.dtx +++ b/macros/latex/required/l3kernel/l3coffins.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3color.dtx b/macros/latex/required/l3kernel/l3color.dtx index 514ff326a4..0edc225c52 100644 --- a/macros/latex/contrib/l3kernel/l3color.dtx +++ b/macros/latex/required/l3kernel/l3color.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3debug.dtx b/macros/latex/required/l3kernel/l3debug.dtx index 6654b6d4cd..6dbe13f96e 100644 --- a/macros/latex/contrib/l3kernel/l3debug.dtx +++ b/macros/latex/required/l3kernel/l3debug.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % @@ -69,7 +69,7 @@ % % Standard file identification. % \begin{macrocode} -\ProvidesExplFile{l3debug.def}{2024-03-14}{}{L3 Debugging support} +\ProvidesExplFile{l3debug.def}{2024-04-11}{}{L3 Debugging support} % \end{macrocode} % % \begin{variable}{\s_@@_stop} @@ -389,10 +389,9 @@ % \end{macro} % % \begin{macro}{\@@_deprecation_on:, \@@_deprecation_off:} -% Some commands were more recently deprecated and not yet removed; -% only make these into errors if the user requests it. This relies on -% two token lists, filled up in \pkg{l3deprecation} by calls to -% \cs{__kernel_deprecation_code:nn}. +% Make deprecated commands throw errors if the user requests it. +% This relies on two token lists, filled up in \pkg{l3deprecation} by +% calls to \cs{__kernel_deprecation_code:nn}. % \begin{macrocode} \cs_new_protected:Npn \@@_deprecation_on: { \g_@@_deprecation_on_tl } @@ -781,7 +780,7 @@ \prop_pop:NnNF \prop_pop:NnNTF \prop_put:Nnn - \prop_put_if_new:Nnn + \prop_put_if_not_in:Nnn \prop_put_from_keyval:Nn \prop_remove:Nn \prop_set_eq:NN @@ -862,7 +861,7 @@ \prop_gpop:NnNF \prop_gpop:NnNTF \prop_gput:Nnn - \prop_gput_if_new:Nnn + \prop_gput_if_not_in:Nnn \prop_gput_from_keyval:Nn \prop_gremove:Nn \prop_gset_eq:NN diff --git a/macros/latex/contrib/l3kernel/l3deprecation.dtx b/macros/latex/required/l3kernel/l3deprecation.dtx index 3906c6786e..7af8700df7 100644 --- a/macros/latex/contrib/l3kernel/l3deprecation.dtx +++ b/macros/latex/required/l3kernel/l3deprecation.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % @@ -51,8 +51,10 @@ % % \section{\pkg{l3deprecation} documentation} % -% A few commands have had to be deprecated over the years. This module -% defines deprecated and deleted commands to produce an error. +% A few commands have had to be deprecated over the years. +% All commands deprecated before release 2022-01-12 were already +% removed; commands deprecated since then will no longer be removed. +% Instead, this module defines them to produce errors. % % \end{documentation} % @@ -74,31 +76,12 @@ % \cs{__kernel_patch_deprecation:nnNNpn} \Arg{date} \Arg{replacement} % \meta{definition} \meta{function} \meta{parameters} \Arg{code} % \end{quote} -% defines the \meta{function} to produce a warning and run its -% \meta{code}, or to produce an error and not run any \meta{code}, -% depending on the \pkg{expl3} date. -% \begin{itemize} -% \item If the \pkg{expl3} date is less than the \meta{date} (plus -% $6$~months in case \texttt{undo-recent-deprecations} is used) then -% we define the \meta{function} to produce a warning and run its code. -% The warning is actually suppressed in two cases: -% \begin{itemize} -% \item if neither \texttt{undo-recent-deprecations} nor -% \texttt{enable-debug} are in effect we may be in an end-user's -% document so it is suppressed; -% \item if the command is expandable then we cannot produce a warning. -% \end{itemize} -% \item Otherwise, we define the \meta{function} to produce an error. -% \end{itemize} -% In both cases we additionally make \cs{debug_on:n} |{deprecation}| -% turn the \meta{function} into an \tn{outer} error, and -% \cs{debug_off:n} |{deprecation}| restore whatever the behaviour was -% without \cs{debug_on:n} |{deprecation}|. -% -% In later sections we use the \pkg{l3doc} key \texttt{deprecated} with -% a date equal to that \meta{date} plus $6$~months, so that \pkg{l3doc} -% will complain if we forget to remove the stale \meta{parameters} and -% \Arg{code}. +% defines the \meta{function} to produce an error and run its +% \meta{code}. +% +% We make \cs{debug_on:n} |{deprecation}| turn the \meta{function} into +% an \tn{outer} error, and \cs{debug_off:n} |{deprecation}| restore +% whatever the behaviour was without \cs{debug_on:n} |{deprecation}|. % % In the explanations below, \meta{definition} \meta{function} % \meta{parameters} \Arg{code} or assignments that only differ in the @@ -183,8 +166,7 @@ % % \begin{macro}{\__kernel_deprecation_error:Nnn} % The \tn{outer} definition here ensures the command cannot appear -% in an argument. Use this auxiliary on all commands that have been -% removed since 2015. +% in an argument. % \begin{macrocode} \cs_new_protected:Npn \__kernel_deprecation_error:Nnn #1#2#3 { @@ -679,6 +661,27 @@ % \end{macrocode} % \end{macro} % +% \subsection{Deprecated \pkg{l3prop} functions} +% +% \begin{macro}[deprecated] +% { +% \prop_put_if_new:Nnn, \prop_put_if_new:NVn, \prop_put_if_new:NnV, +% \prop_put_if_new:cnn, \prop_put_if_new:cVn, \prop_put_if_new:cnV, +% \prop_gput_if_new:Nnn, \prop_gput_if_new:NVn, \prop_gput_if_new:NnV, +% \prop_gput_if_new:cnn, \prop_gput_if_new:cVn, \prop_gput_if_new:cnV +% } +% \begin{macrocode} +%\__kernel_patch_deprecation:nnNNpn { 2024-03-30 } { \prop_put_if_not_in:Nnn } +\cs_new_protected:Npn \prop_put_if_new:Nnn { \prop_put_if_not_in:Nnn } +%\__kernel_patch_deprecation:nnNNpn { 2024-03-30 } { \prop_gput_if_not_in:Nnn } +\cs_new_protected:Npn \prop_gput_if_new:Nnn { \prop_gput_if_not_in:Nnn } +\cs_generate_variant:Nn \prop_put_if_new:Nnn + { NnV , NV , c , cnV , cV } +\cs_generate_variant:Nn \prop_gput_if_new:Nnn + { NnV , NV , c , cnV , cV } +% \end{macrocode} +% \end{macro} +% % \begin{macrocode} %</package> % \end{macrocode} diff --git a/macros/latex/contrib/l3kernel/l3doc.dtx b/macros/latex/required/l3kernel/l3doc.dtx index a48a24df23..9156bd385e 100644 --- a/macros/latex/contrib/l3kernel/l3doc.dtx +++ b/macros/latex/required/l3kernel/l3doc.dtx @@ -71,7 +71,7 @@ and all files in that bundle must be distributed together. % This isn't included in the typeset documentation because it's a bit % ugly: %<*class> -\ProvidesExplClass{l3doc}{2024-03-14}{} +\ProvidesExplClass{l3doc}{2024-04-11}{} {L3 Experimental documentation class} %</class> % \fi @@ -84,7 +84,7 @@ and all files in that bundle must be distributed together. % require you to do updates, if the class changes.}} % % \author{\Team} -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % \maketitle % \tableofcontents % @@ -2181,6 +2181,8 @@ and all files in that bundle must be distributed together. { \tl_remove_all:Ne \l_@@_tmpa_tl { \iow_char:N \^^M \c_percent_str } + \tl_remove_all:Ne \l_@@_tmpa_tl + { \token_to_str:N \obeyedline \c_space_tl \c_percent_str } \tl_remove_all:Ne \l_@@_tmpa_tl { \tl_to_str:n { ^ ^ A } } \tl_remove_all:Ne \l_@@_tmpa_tl { \iow_char:N \^^I } \tl_remove_all:Ne \l_@@_tmpa_tl { \iow_char:N \^^M } diff --git a/macros/latex/contrib/l3kernel/l3doc.pdf b/macros/latex/required/l3kernel/l3doc.pdf Binary files differindex 2f85329fdc..6ef4101a78 100644 --- a/macros/latex/contrib/l3kernel/l3doc.pdf +++ b/macros/latex/required/l3kernel/l3doc.pdf diff --git a/macros/latex/contrib/l3kernel/l3docstrip.dtx b/macros/latex/required/l3kernel/l3docstrip.dtx index c973d593c5..c2733e810e 100644 --- a/macros/latex/contrib/l3kernel/l3docstrip.dtx +++ b/macros/latex/required/l3kernel/l3docstrip.dtx @@ -63,7 +63,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3docstrip.pdf b/macros/latex/required/l3kernel/l3docstrip.pdf Binary files differindex f2e611b2c9..6ce1fc34e2 100644 --- a/macros/latex/contrib/l3kernel/l3docstrip.pdf +++ b/macros/latex/required/l3kernel/l3docstrip.pdf diff --git a/macros/latex/contrib/l3kernel/l3expan.dtx b/macros/latex/required/l3kernel/l3expan.dtx index 7e507b7598..e79b5f32b9 100644 --- a/macros/latex/contrib/l3kernel/l3expan.dtx +++ b/macros/latex/required/l3kernel/l3expan.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3file.dtx b/macros/latex/required/l3kernel/l3file.dtx index 3a4d1c06dc..6111d270ca 100644 --- a/macros/latex/contrib/l3kernel/l3file.dtx +++ b/macros/latex/required/l3kernel/l3file.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % @@ -107,7 +107,7 @@ % control sequence for file access. If the \meta{stream} was already % open it is closed before the new operation begins. The % \meta{stream} is available for access immediately and will remain -% allocated to \meta{file name} until a \cs{ior_close:N} instruction +% allocated to \meta{file name} until an \cs{ior_close:N} instruction % is given or the \TeX{} run ends. % If the file is not found, an error is raised. % \end{function} @@ -167,7 +167,7 @@ % control sequence for access. If the \meta{stream} was already % open it is closed before the new operation begins. The % \meta{stream} is available for access immediately and will remain -% allocated to \meta{shell command} until a \cs{iow_close:N} instruction +% allocated to \meta{shell command} until an \cs{iow_close:N} instruction % is given or the \TeX{} run ends. % If piped system calls are disabled an error is raised. % @@ -1679,6 +1679,7 @@ % \end{variable} % % \begin{macro}{\iow_open:Nn, \iow_open:NV, \iow_open:cn, \iow_open:cV} +% \begin{macro}{\__kernel_iow_open:Nn, \__kernel_iow_open:No} % \begin{macro}{\@@_open_stream:Nn, \@@_open_stream:NV} % The same idea as for reading, but without the path and without the need % to allow for a conditional version. @@ -1687,16 +1688,21 @@ { \__kernel_tl_set:Nx \l_@@_file_name_tl { \__kernel_file_name_sanitize:n {#2} } + \__kernel_iow_open:No #1 \l_@@_file_name_tl + } +\cs_generate_variant:Nn \iow_open:Nn { NV , c , cV } +\cs_new_protected:Npn \__kernel_iow_open:Nn #1#2 + { \iow_close:N #1 \seq_gpop:NNTF \g_@@_streams_seq \l_@@_stream_tl - { \@@_open_stream:NV #1 \l_@@_file_name_tl } + { \@@_open_stream:Nn #1 {#2} } { \@@_new:N #1 \__kernel_tl_set:Nx \l_@@_stream_tl { \int_eval:n {#1} } - \@@_open_stream:NV #1 \l_@@_file_name_tl + \@@_open_stream:Nn #1 {#2} } } -\cs_generate_variant:Nn \iow_open:Nn { NV , c , cV } +\cs_generate_variant:Nn \__kernel_iow_open:Nn { No } \cs_new_protected:Npn \@@_open_stream:Nn #1#2 { \tex_global:D \tex_chardef:D #1 = \l_@@_stream_tl \scan_stop: @@ -1708,6 +1714,7 @@ % \end{macrocode} % \end{macro} % \end{macro} +% \end{macro} % % \begin{macro}{\iow_shell_open:Nn} % \begin{macro}{\@@_shell_open:nN, \@@_shell_open:oN} diff --git a/macros/latex/contrib/l3kernel/l3flag.dtx b/macros/latex/required/l3kernel/l3flag.dtx index 40614c7348..c3bd4a5085 100644 --- a/macros/latex/contrib/l3kernel/l3flag.dtx +++ b/macros/latex/required/l3kernel/l3flag.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-assign.dtx b/macros/latex/required/l3kernel/l3fp-assign.dtx index 6d00047e4d..d54f092085 100644 --- a/macros/latex/contrib/l3kernel/l3fp-assign.dtx +++ b/macros/latex/required/l3kernel/l3fp-assign.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % \maketitle % % \begin{documentation} diff --git a/macros/latex/contrib/l3kernel/l3fp-aux.dtx b/macros/latex/required/l3kernel/l3fp-aux.dtx index 1f4ea5d34d..c9d0c228f5 100644 --- a/macros/latex/contrib/l3kernel/l3fp-aux.dtx +++ b/macros/latex/required/l3kernel/l3fp-aux.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-basics.dtx b/macros/latex/required/l3kernel/l3fp-basics.dtx index a7401407cd..d3dcb68dde 100644 --- a/macros/latex/contrib/l3kernel/l3fp-basics.dtx +++ b/macros/latex/required/l3kernel/l3fp-basics.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-convert.dtx b/macros/latex/required/l3kernel/l3fp-convert.dtx index 0459331326..a0536c1299 100644 --- a/macros/latex/contrib/l3kernel/l3fp-convert.dtx +++ b/macros/latex/required/l3kernel/l3fp-convert.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-expo.dtx b/macros/latex/required/l3kernel/l3fp-expo.dtx index 5b5f947c38..6fbc9de52c 100644 --- a/macros/latex/contrib/l3kernel/l3fp-expo.dtx +++ b/macros/latex/required/l3kernel/l3fp-expo.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-extended.dtx b/macros/latex/required/l3kernel/l3fp-extended.dtx index bcd16a4b68..356c32b232 100644 --- a/macros/latex/contrib/l3kernel/l3fp-extended.dtx +++ b/macros/latex/required/l3kernel/l3fp-extended.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-functions.dtx b/macros/latex/required/l3kernel/l3fp-functions.dtx index b26d8e7f26..f6c9ec346f 100644 --- a/macros/latex/contrib/l3kernel/l3fp-functions.dtx +++ b/macros/latex/required/l3kernel/l3fp-functions.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-logic.dtx b/macros/latex/required/l3kernel/l3fp-logic.dtx index c95704085c..9df6a4730a 100644 --- a/macros/latex/contrib/l3kernel/l3fp-logic.dtx +++ b/macros/latex/required/l3kernel/l3fp-logic.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-parse.dtx b/macros/latex/required/l3kernel/l3fp-parse.dtx index 53b85a7cc8..ee2eedbc22 100644 --- a/macros/latex/contrib/l3kernel/l3fp-parse.dtx +++ b/macros/latex/required/l3kernel/l3fp-parse.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-random.dtx b/macros/latex/required/l3kernel/l3fp-random.dtx index cdbdf38ee1..ce5a0c48f7 100644 --- a/macros/latex/contrib/l3kernel/l3fp-random.dtx +++ b/macros/latex/required/l3kernel/l3fp-random.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-round.dtx b/macros/latex/required/l3kernel/l3fp-round.dtx index bddb146be7..48ae82730c 100644 --- a/macros/latex/contrib/l3kernel/l3fp-round.dtx +++ b/macros/latex/required/l3kernel/l3fp-round.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-symbolic.dtx b/macros/latex/required/l3kernel/l3fp-symbolic.dtx index 26a084733d..901ce7a27c 100644 --- a/macros/latex/contrib/l3kernel/l3fp-symbolic.dtx +++ b/macros/latex/required/l3kernel/l3fp-symbolic.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-traps.dtx b/macros/latex/required/l3kernel/l3fp-traps.dtx index e1a3dd89a0..5a4a3b41f9 100644 --- a/macros/latex/contrib/l3kernel/l3fp-traps.dtx +++ b/macros/latex/required/l3kernel/l3fp-traps.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % \maketitle % % \begin{documentation} diff --git a/macros/latex/contrib/l3kernel/l3fp-trig.dtx b/macros/latex/required/l3kernel/l3fp-trig.dtx index 21cefc166c..d8585ebe66 100644 --- a/macros/latex/contrib/l3kernel/l3fp-trig.dtx +++ b/macros/latex/required/l3kernel/l3fp-trig.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-types.dtx b/macros/latex/required/l3kernel/l3fp-types.dtx index 0d589c9549..2c23c61393 100644 --- a/macros/latex/contrib/l3kernel/l3fp-types.dtx +++ b/macros/latex/required/l3kernel/l3fp-types.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp.dtx b/macros/latex/required/l3kernel/l3fp.dtx index 11dbcdceef..7cef573970 100644 --- a/macros/latex/contrib/l3kernel/l3fp.dtx +++ b/macros/latex/required/l3kernel/l3fp.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fparray.dtx b/macros/latex/required/l3kernel/l3fparray.dtx index 1517840431..24f4ac85f8 100644 --- a/macros/latex/contrib/l3kernel/l3fparray.dtx +++ b/macros/latex/required/l3kernel/l3fparray.dtx @@ -44,20 +44,20 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % % \begin{documentation} % -% \section{\pkg{l3fparray} documentation} -% % For applications requiring heavy use of floating points, this module % provides arrays which can be accessed in constant time (contrast % \pkg{l3seq}, where access time is linear). The interface is very % close to that of \pkg{l3intarray}. The size of the array is fixed and % must be given at point of initialisation % +% \section{Creating and initialising floating point array variables} +% % \begin{function}[added = 2018-05-05]{\fparray_new:Nn, \fparray_new:cn} % \begin{syntax} % \cs{fparray_new:Nn} \meta{fparray~var} \Arg{size} @@ -68,14 +68,16 @@ % assignments are always global. % \end{function} % -% \begin{function}[EXP, added = 2018-05-05]{\fparray_count:N, \fparray_count:c} +% \begin{function}[added = 2018-05-05]{\fparray_gzero:N, \fparray_gzero:c} % \begin{syntax} -% \cs{fparray_count:N} \meta{fparray~var} +% \cs{fparray_gzero:N} \meta{fparray~var} % \end{syntax} -% Expands to the number of entries in the \meta{floating point array -% variable}. This is performed in constant time. +% Sets all entries of the \meta{floating point array variable} to +% $+0$. Assignments are always global. % \end{function} % +% \section{Adding data to floating point arrays} +% % \begin{function}[added = 2018-05-05]{\fparray_gset:Nnn, \fparray_gset:cnn} % \begin{syntax} % \cs{fparray_gset:Nnn} \meta{fparray~var} \Arg{position} \Arg{value} @@ -87,17 +89,21 @@ % Assignments are always global. % \end{function} % -% \begin{function}[added = 2018-05-05]{\fparray_gzero:N, \fparray_gzero:c} +% \section{Couting entries in floating point arrays} +% +% \begin{function}[EXP, added = 2018-05-05]{\fparray_count:N, \fparray_count:c} % \begin{syntax} -% \cs{fparray_gzero:N} \meta{fparray~var} +% \cs{fparray_count:N} \meta{fparray~var} % \end{syntax} -% Sets all entries of the \meta{floating point array variable} to -% $+0$. Assignments are always global. +% Expands to the number of entries in the \meta{floating point array +% variable}. This is performed in constant time. % \end{function} % +% \section{Using a single entry} +% % \begin{function}[EXP, added = 2018-05-05] % { -% \fparray_item:Nn, \fparray_item:cn +% \fparray_item:Nn, \fparray_item:cn, % \fparray_item_to_tl:Nn, \fparray_item_to_tl:cn % } % \begin{syntax} @@ -106,8 +112,21 @@ % Applies \cs{fp_use:N} or \cs{fp_to_tl:N} (respectively) to the % floating point entry stored at the (integer expression) % \meta{position} in the \meta{floating point array variable}. If the -% \meta{position} is not between $1$ and the \cs{fparray_count:N}, an -% error occurs. +% \meta{position} is not between $1$ and the +% \cs{fparray_count:N} \meta{fparray~var}, an error occurs. +% \end{function} +% +% \section{Floating point array conditional} +% +% \begin{function}[pTF, added = 2024-03-31] +% {\fparray_if_exist:N, \fparray_if_exist:c} +% \begin{syntax} +% \cs{fparray_if_exist_p:N} \meta{fparray~var} +% \cs{fparray_if_exist:NTF} \meta{fparray~var} \Arg{true code} \Arg{false code} +% \end{syntax} +% Tests whether the \meta{fparray~var} is currently defined. This +% does not check that the \meta{fparray~var} really is a floating +% point array variable. % \end{function} % % \end{documentation} @@ -389,6 +408,16 @@ % \end{macro} % \end{macro} % +% \begin{macro}[pTF]{\fparray_if_exist:N, \fparray_if_exist:c} +% Copies of the \texttt{cs} functions defined in \pkg{l3basics}. +% \begin{macrocode} +\prg_new_eq_conditional:NNn \fparray_if_exist:N \cs_if_exist:N + { TF , T , F , p } +\prg_new_eq_conditional:NNn \fparray_if_exist:c \cs_if_exist:c + { TF , T , F , p } +% \end{macrocode} +% \end{macro} +% % \begin{macrocode} %</package> % \end{macrocode} diff --git a/macros/latex/contrib/l3kernel/l3int.dtx b/macros/latex/required/l3kernel/l3int.dtx index 9fa2a547ff..a1c9458436 100644 --- a/macros/latex/contrib/l3kernel/l3int.dtx +++ b/macros/latex/required/l3kernel/l3int.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3intarray.dtx b/macros/latex/required/l3kernel/l3intarray.dtx index 5704a2ab75..bbc41c0cdb 100644 --- a/macros/latex/contrib/l3kernel/l3intarray.dtx +++ b/macros/latex/required/l3kernel/l3intarray.dtx @@ -44,14 +44,12 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % % \begin{documentation} % -% \section{\pkg{l3intarray} documentation} -% % For applications requiring heavy use of integers, this module provides % arrays which can be accessed in constant time (contrast \pkg{l3seq}, % where access time is linear). These arrays have several important @@ -66,6 +64,8 @@ % The use of \texttt{intarray} data is therefore recommended for cases where % the need for fast access is of paramount importance. % +% \section{Creating and initialising integer array variables} +% % \begin{function}[added = 2018-03-29]{\intarray_new:Nn, \intarray_new:cn} % \begin{syntax} % \cs{intarray_new:Nn} \meta{intarray~var} \Arg{size} @@ -76,14 +76,27 @@ % always global. % \end{function} % -% \begin{function}[EXP, added = 2018-03-29]{\intarray_count:N, \intarray_count:c} +% \begin{function}[added = 2018-05-04] +% {\intarray_const_from_clist:Nn, \intarray_const_from_clist:cn} % \begin{syntax} -% \cs{intarray_count:N} \meta{intarray~var} +% \cs{intarray_const_from_clist:Nn} \meta{intarray~var} \meta{int expr clist} % \end{syntax} -% Expands to the number of entries in the \meta{integer array variable}. -% Contrarily to \cs{seq_count:N} this is performed in constant time. +% Creates a new constant \meta{integer array variable} or raises an +% error if the name is already taken. The \meta{integer array +% variable} is set (globally) to contain as its items the results of +% evaluating each \meta{integer expression} in the \meta{comma list}. % \end{function} % +% \begin{function}[added = 2018-05-04]{\intarray_gzero:N, \intarray_gzero:c} +% \begin{syntax} +% \cs{intarray_gzero:N} \meta{intarray~var} +% \end{syntax} +% Sets all entries of the \meta{integer array variable} to zero. +% Assignments are always global. +% \end{function} +% +% \section{Adding data to integer arrays} +% % \begin{function}[added = 2018-03-29]{\intarray_gset:Nnn, \intarray_gset:cnn} % \begin{syntax} % \cs{intarray_gset:Nnn} \meta{intarray~var} \Arg{position} \Arg{value} @@ -96,25 +109,18 @@ % global. % \end{function} % -% \begin{function}[added = 2018-05-04] -% {\intarray_const_from_clist:Nn, \intarray_const_from_clist:cn} -% \begin{syntax} -% \cs{intarray_const_from_clist:Nn} \meta{intarray~var} \meta{int expr clist} -% \end{syntax} -% Creates a new constant \meta{integer array variable} or raises an -% error if the name is already taken. The \meta{integer array -% variable} is set (globally) to contain as its items the results of -% evaluating each \meta{integer expression} in the \meta{comma list}. -% \end{function} +% \section{Couting entries in integer arrays} % -% \begin{function}[added = 2018-05-04]{\intarray_gzero:N, \intarray_gzero:c} +% \begin{function}[EXP, added = 2018-03-29]{\intarray_count:N, \intarray_count:c} % \begin{syntax} -% \cs{intarray_gzero:N} \meta{intarray~var} +% \cs{intarray_count:N} \meta{intarray~var} % \end{syntax} -% Sets all entries of the \meta{integer array variable} to zero. -% Assignments are always global. +% Expands to the number of entries in the \meta{integer array variable}. +% Contrarily to \cs{seq_count:N} this is performed in constant time. % \end{function} % +% \section{Using a single entry} +% % \begin{function}[EXP, added = 2018-03-29]{\intarray_item:Nn, \intarray_item:cn} % \begin{syntax} % \cs{intarray_item:Nn} \meta{intarray~var} \Arg{position} @@ -134,6 +140,21 @@ % \meta{integer array} is empty, produce an error. % \end{function} % +% \section{Integer array conditional} +% +% \begin{function}[pTF, added = 2024-03-31] +% {\intarray_if_exist:N, \intarray_if_exist:c} +% \begin{syntax} +% \cs{intarray_if_exist_p:N} \meta{intarray~var} +% \cs{intarray_if_exist:NTF} \meta{intarray~var} \Arg{true code} \Arg{false code} +% \end{syntax} +% Tests whether the \meta{intarray~var} is currently defined. This +% does not check that the \meta{intarray~var} really is an integer +% array variable. +% \end{function} +% +% \section{Viewing integer arrays} +% % \begin{function}[added = 2018-05-04] % {\intarray_show:N, \intarray_show:c, \intarray_log:N, \intarray_log:c} % \begin{syntax} @@ -144,7 +165,7 @@ % terminal or writes them in the log file. % \end{function} % -% \subsection{Implementation notes} +% \section{Implementation notes} % % It is a wrapper around the \tn{fontdimen} primitive, used to store % arrays of integers (with a restricted range: absolute value at most @@ -912,6 +933,16 @@ luacmd('@@_gset_range:w', function() % % \subsection{Common parts} % +% \begin{macro}[pTF]{\intarray_if_exist:N, \intarray_if_exist:c} +% Copies of the \texttt{cs} functions defined in \pkg{l3basics}. +% \begin{macrocode} +\prg_new_eq_conditional:NNn \intarray_if_exist:N \cs_if_exist:N + { TF , T , F , p } +\prg_new_eq_conditional:NNn \intarray_if_exist:c \cs_if_exist:c + { TF , T , F , p } +% \end{macrocode} +% \end{macro} +% % \begin{macro}{\intarray_show:N, \intarray_show:c, \intarray_log:N, \intarray_log:c} % Convert the list to a comma list (with spaces after each comma) % \begin{macrocode} diff --git a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx b/macros/latex/required/l3kernel/l3kernel-functions.dtx index 480425d730..1706bb594a 100644 --- a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx +++ b/macros/latex/required/l3kernel/l3kernel-functions.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % @@ -333,7 +333,21 @@ % higher-level % functions which have already fully expanded the \meta{file name} and which % need to perform multiple open or close operations. See for example the -% implementation of \cs{file_get_full_name:nN}, +% implementation of \cs{ior_shell_open:Nn}. +% \end{function} +% +% \begin{function}{\__kernel_iow_open:Nn, \__kernel_iow_open:No} +% \begin{syntax} +% \cs{__kernel_iow_open:Nn} \meta{stream} \Arg{file name} +% \end{syntax} +% This function has identical syntax to the public version. However, +% is does not take precautions against active characters in the +% \meta{file name}, and it does not attempt to add a \meta{path} to +% the \meta{file name}: it is therefore intended to be used by +% higher-level +% functions which have already fully expanded the \meta{file name} and which +% need to perform multiple open or close operations. See for example the +% implementation of \cs{iow_shell_open:Nn}. % \end{function} % % \begin{function}{\__kernel_iow_with:Nnn} @@ -367,6 +381,17 @@ % |1+2| then this logs |> 1+2=3.| % \end{function} % +% \begin{function}[EXP]{\__kernel_pdf_object_id:n, \__kernel_pdf_object_id_indexed:nn} +% \begin{syntax} +% \cs{__kernel_pdf_object_id:n} \Arg{object} +% \cs{__kernel_pdf_object_id_indexed:nn} \Arg{class} \Arg{number} +% \end{syntax} +% Expands to the ID of \meta{object} (or object of \meta{number} within +% the \meta{class}), in for example page resource allocation. Depending on +% the backend, the result may be the same as +% \cs{pdf_object_id:n}/\cs{pdf_object_id_indexed:nn}. +% \end{function} +% % \begin{variable}{\g__kernel_prg_map_int} % This integer is used by non-expandable mapping functions to track % the level of nesting in force. The functions diff --git a/macros/latex/contrib/l3kernel/l3keys.dtx b/macros/latex/required/l3kernel/l3keys.dtx index 5ea436176f..a1d2c01169 100644 --- a/macros/latex/contrib/l3kernel/l3keys.dtx +++ b/macros/latex/required/l3kernel/l3keys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3legacy.dtx b/macros/latex/required/l3kernel/l3legacy.dtx index bd56f1ed3a..ed7dadf222 100644 --- a/macros/latex/contrib/l3kernel/l3legacy.dtx +++ b/macros/latex/required/l3kernel/l3legacy.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3luatex.dtx b/macros/latex/required/l3kernel/l3luatex.dtx index 3d177f6345..f0107d465b 100644 --- a/macros/latex/contrib/l3kernel/l3luatex.dtx +++ b/macros/latex/required/l3kernel/l3luatex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3msg.dtx b/macros/latex/required/l3kernel/l3msg.dtx index 3acae8d111..ab4d882dcb 100644 --- a/macros/latex/contrib/l3kernel/l3msg.dtx +++ b/macros/latex/required/l3kernel/l3msg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3names.dtx b/macros/latex/required/l3kernel/l3names.dtx index 3e78d86acf..468481c28c 100644 --- a/macros/latex/contrib/l3kernel/l3names.dtx +++ b/macros/latex/required/l3kernel/l3names.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3news.pdf b/macros/latex/required/l3kernel/l3news.pdf Binary files differindex 87f01af5a7..aa26629126 100644 --- a/macros/latex/contrib/l3kernel/l3news.pdf +++ b/macros/latex/required/l3kernel/l3news.pdf diff --git a/macros/latex/contrib/l3kernel/l3news.tex b/macros/latex/required/l3kernel/l3news.tex index b8f0de5c72..b8f0de5c72 100644 --- a/macros/latex/contrib/l3kernel/l3news.tex +++ b/macros/latex/required/l3kernel/l3news.tex diff --git a/macros/latex/contrib/l3kernel/l3news01.pdf b/macros/latex/required/l3kernel/l3news01.pdf Binary files differindex 5a6d4af9e2..2eb7750066 100644 --- a/macros/latex/contrib/l3kernel/l3news01.pdf +++ b/macros/latex/required/l3kernel/l3news01.pdf diff --git a/macros/latex/contrib/l3kernel/l3news01.tex b/macros/latex/required/l3kernel/l3news01.tex index b4841ac24b..b4841ac24b 100644 --- a/macros/latex/contrib/l3kernel/l3news01.tex +++ b/macros/latex/required/l3kernel/l3news01.tex diff --git a/macros/latex/contrib/l3kernel/l3news02.pdf b/macros/latex/required/l3kernel/l3news02.pdf Binary files differindex 8cda69f971..832e6f583d 100644 --- a/macros/latex/contrib/l3kernel/l3news02.pdf +++ b/macros/latex/required/l3kernel/l3news02.pdf diff --git a/macros/latex/contrib/l3kernel/l3news02.tex b/macros/latex/required/l3kernel/l3news02.tex index a3d5467c8e..a3d5467c8e 100644 --- a/macros/latex/contrib/l3kernel/l3news02.tex +++ b/macros/latex/required/l3kernel/l3news02.tex diff --git a/macros/latex/contrib/l3kernel/l3news03.pdf b/macros/latex/required/l3kernel/l3news03.pdf Binary files differindex f16bb58750..dd6b7e7e9a 100644 --- a/macros/latex/contrib/l3kernel/l3news03.pdf +++ b/macros/latex/required/l3kernel/l3news03.pdf diff --git a/macros/latex/contrib/l3kernel/l3news03.tex b/macros/latex/required/l3kernel/l3news03.tex index e3e245f051..e3e245f051 100644 --- a/macros/latex/contrib/l3kernel/l3news03.tex +++ b/macros/latex/required/l3kernel/l3news03.tex diff --git a/macros/latex/contrib/l3kernel/l3news04.pdf b/macros/latex/required/l3kernel/l3news04.pdf Binary files differindex 52c33e516a..1d20917d2b 100644 --- a/macros/latex/contrib/l3kernel/l3news04.pdf +++ b/macros/latex/required/l3kernel/l3news04.pdf diff --git a/macros/latex/contrib/l3kernel/l3news04.tex b/macros/latex/required/l3kernel/l3news04.tex index a0fc82f3de..a0fc82f3de 100644 --- a/macros/latex/contrib/l3kernel/l3news04.tex +++ b/macros/latex/required/l3kernel/l3news04.tex diff --git a/macros/latex/contrib/l3kernel/l3news05.pdf b/macros/latex/required/l3kernel/l3news05.pdf Binary files differindex 1f6bda9687..36c813db4d 100644 --- a/macros/latex/contrib/l3kernel/l3news05.pdf +++ b/macros/latex/required/l3kernel/l3news05.pdf diff --git a/macros/latex/contrib/l3kernel/l3news05.tex b/macros/latex/required/l3kernel/l3news05.tex index 43ec2a8d19..43ec2a8d19 100644 --- a/macros/latex/contrib/l3kernel/l3news05.tex +++ b/macros/latex/required/l3kernel/l3news05.tex diff --git a/macros/latex/contrib/l3kernel/l3news06.pdf b/macros/latex/required/l3kernel/l3news06.pdf Binary files differindex cd65bce3a6..f0e99f4727 100644 --- a/macros/latex/contrib/l3kernel/l3news06.pdf +++ b/macros/latex/required/l3kernel/l3news06.pdf diff --git a/macros/latex/contrib/l3kernel/l3news06.tex b/macros/latex/required/l3kernel/l3news06.tex index 63ee6c7c75..63ee6c7c75 100644 --- a/macros/latex/contrib/l3kernel/l3news06.tex +++ b/macros/latex/required/l3kernel/l3news06.tex diff --git a/macros/latex/contrib/l3kernel/l3news07.pdf b/macros/latex/required/l3kernel/l3news07.pdf Binary files differindex 721252a9b0..b9cbba576a 100644 --- a/macros/latex/contrib/l3kernel/l3news07.pdf +++ b/macros/latex/required/l3kernel/l3news07.pdf diff --git a/macros/latex/contrib/l3kernel/l3news07.tex b/macros/latex/required/l3kernel/l3news07.tex index 2b433da4c4..2b433da4c4 100644 --- a/macros/latex/contrib/l3kernel/l3news07.tex +++ b/macros/latex/required/l3kernel/l3news07.tex diff --git a/macros/latex/contrib/l3kernel/l3news08.pdf b/macros/latex/required/l3kernel/l3news08.pdf Binary files differindex 855db5bdc5..c812ae5e67 100644 --- a/macros/latex/contrib/l3kernel/l3news08.pdf +++ b/macros/latex/required/l3kernel/l3news08.pdf diff --git a/macros/latex/contrib/l3kernel/l3news08.tex b/macros/latex/required/l3kernel/l3news08.tex index 17107f8360..17107f8360 100644 --- a/macros/latex/contrib/l3kernel/l3news08.tex +++ b/macros/latex/required/l3kernel/l3news08.tex diff --git a/macros/latex/contrib/l3kernel/l3news09.pdf b/macros/latex/required/l3kernel/l3news09.pdf Binary files differindex 5dc3a3b9ad..eff6e741fe 100644 --- a/macros/latex/contrib/l3kernel/l3news09.pdf +++ b/macros/latex/required/l3kernel/l3news09.pdf diff --git a/macros/latex/contrib/l3kernel/l3news09.tex b/macros/latex/required/l3kernel/l3news09.tex index 55ed700a2c..55ed700a2c 100644 --- a/macros/latex/contrib/l3kernel/l3news09.tex +++ b/macros/latex/required/l3kernel/l3news09.tex diff --git a/macros/latex/contrib/l3kernel/l3news10.pdf b/macros/latex/required/l3kernel/l3news10.pdf Binary files differindex e921d2c81b..4ac02d4684 100644 --- a/macros/latex/contrib/l3kernel/l3news10.pdf +++ b/macros/latex/required/l3kernel/l3news10.pdf diff --git a/macros/latex/contrib/l3kernel/l3news10.tex b/macros/latex/required/l3kernel/l3news10.tex index 88291e848f..88291e848f 100644 --- a/macros/latex/contrib/l3kernel/l3news10.tex +++ b/macros/latex/required/l3kernel/l3news10.tex diff --git a/macros/latex/contrib/l3kernel/l3news11.pdf b/macros/latex/required/l3kernel/l3news11.pdf Binary files differindex a4866d55e7..27011b2c4b 100644 --- a/macros/latex/contrib/l3kernel/l3news11.pdf +++ b/macros/latex/required/l3kernel/l3news11.pdf diff --git a/macros/latex/contrib/l3kernel/l3news11.tex b/macros/latex/required/l3kernel/l3news11.tex index a1fd8a129c..a1fd8a129c 100644 --- a/macros/latex/contrib/l3kernel/l3news11.tex +++ b/macros/latex/required/l3kernel/l3news11.tex diff --git a/macros/latex/contrib/l3kernel/l3news12.pdf b/macros/latex/required/l3kernel/l3news12.pdf Binary files differindex 4b6072bca1..86b5ffa063 100644 --- a/macros/latex/contrib/l3kernel/l3news12.pdf +++ b/macros/latex/required/l3kernel/l3news12.pdf diff --git a/macros/latex/contrib/l3kernel/l3news12.tex b/macros/latex/required/l3kernel/l3news12.tex index f41e4b3690..f41e4b3690 100644 --- a/macros/latex/contrib/l3kernel/l3news12.tex +++ b/macros/latex/required/l3kernel/l3news12.tex diff --git a/macros/latex/contrib/l3kernel/l3pdf.dtx b/macros/latex/required/l3kernel/l3pdf.dtx index 7ffd0c1c05..b0b17f2690 100644 --- a/macros/latex/contrib/l3kernel/l3pdf.dtx +++ b/macros/latex/required/l3kernel/l3pdf.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % @@ -51,6 +51,11 @@ % % \section{Objects} % +% \subsection{Named objects} +% +% An \meta{object} name should fully expand to tokens suitable for use in a +% label-like context. +% % \begin{function}[added = 2022-08-23]{\pdf_object_new:n} % \begin{syntax} % \cs{pdf_object_new:n} \Arg{object} @@ -62,7 +67,7 @@ % \begin{function}[added = 2022-08-23] % {\pdf_object_write:nnn, \pdf_object_write:nne} % \begin{syntax} -% \cs{pdf_object_write:nn} \Arg{object} \Arg{type} \Arg{content} +% \cs{pdf_object_write:nnn} \Arg{object} \Arg{type} \Arg{content} % \end{syntax} % Writes the \meta{content} as content of the \meta{object}. Depending on the % \meta{type} declared for the object, the format required for the @@ -83,9 +88,71 @@ % \cs{pdf_object_ref:n} \Arg{object} % \end{syntax} % Inserts the appropriate information to reference the \meta{object} -% in for example page resource allocation +% in for example page resource allocation. If the \meta{object} does +% not exist then the function expands to a reference to object zero; +% no PDF indirect object ever has this number, so this is a marker for +% error. +% \end{function} +% +% \begin{function}[EXP, pTF, added = 2020-05-15]{\pdf_object_if_exist:n} +% \begin{syntax} +% \cs{pdf_object_if_exist_p:n} \Arg{object} +% \cs{pdf_object_if_exist:nTF} \Arg{object} \Arg{true code} \Arg{false code} +% \end{syntax} +% Tests whether an object with name \Arg{object} has been defined. +% \end{function} +% +% \subsection{Indexed objects} +% +% Objects can also be created using a pair of \meta{class} and \emph{index}; +% the \meta{class} argument should expand to character tokens, whilst the +% \meta{index} is an \meta{int expr} and starts at $1$. For large +% families of objects, this approach is more efficient than using +% individual names. +% +% \begin{function}[added = 2024-04-01]{\pdf_object_new_indexed:nn} +% \begin{syntax} +% \cs{pdf_object_new_indexed:nn} \Arg{class} \Arg{index} +% \end{syntax} +% Declares a PDF object of \meta{class} and \meta{index}. The object may be +% referenced from this point on, and written later using +% \cs{pdf_object_write_indexed:nnnn}. % \end{function} % +% \begin{function}[added = 2024-04-01] +% {\pdf_object_write_indexed:nnnn, \pdf_object_write_indexed:nnne} +% \begin{syntax} +% \cs{pdf_object_write_indexed:nnnn} \Arg{class} \Arg{index} \Arg{type} \Arg{content} +% \end{syntax} +% Writes the \meta{content} as content of the object of \meta{class} and +% \meta{index}. Depending on the +% \meta{type} declared for the object, the format required for the +% \meta{content} will vary +% \begin{itemize} +% \item[\texttt{array}] A space-separated list of values +% \item[\texttt{dict}] Key--value pairs in the form +% \texttt{/\meta{key} \meta{value}} +% \item[\texttt{fstream}] Two brace groups: \meta{file name} and +% \meta{file content} +% \item[\texttt{stream}] Two brace groups: \meta{attributes (dictionary)} +% and \meta{stream contents} +% \end{itemize} +% \end{function} +% +% \begin{function}[EXP, added = 2024-04-01]{\pdf_object_ref_indexed:nn} +% \begin{syntax} +% \cs{pdf_object_ref_indexed:nn} \Arg{class} \Arg{index} +% \end{syntax} +% Inserts the appropriate information to reference the object of \meta{class} +% and \meta{index} in for example page resource allocation. If the +% \meta{class}/\meta{index} combination does +% not exist then the function expands to a reference to object zero; +% no PDF indirect object ever has this number, so this is a marker for +% error. +% \end{function} +% +% \subsection{General functions} +% % \begin{function}[added = 2021-02-10] % {\pdf_object_unnamed_write:nn, \pdf_object_unnamed_write:ne} % \begin{syntax} @@ -119,14 +186,6 @@ % Inserts the appropriate information to reference the \meta{pageobject}. % \end{function} % -% \begin{function}[EXP, pTF, added = 2020-05-15]{\pdf_object_if_exist:n} -% \begin{syntax} -% \cs{pdf_object_if_exist_p:n} \Arg{object} -% \cs{pdf_object_if_exist:nTF} \Arg{object} -% \end{syntax} -% Tests whether an object with name \Arg{object} has been defined. -% \end{function} -% % \section{Version} % % \begin{function}[pTF, EXP, added = 2021-02-10]{\pdf_version_compare:Nn} @@ -267,6 +326,10 @@ %<@@=pdf> % \end{macrocode} % +% \begin{macrocode} +%<*tex> +% \end{macrocode} +% % \begin{variable}{\s_@@_stop} % Internal scan marks. % \begin{macrocode} @@ -311,53 +374,286 @@ % % \subsection{Objects} % +% \begin{variable}{\g_@@_backend_object_int} +% For returning object numbers. +% \begin{macrocode} +\int_new:N \g_@@_backend_object_int +% \end{macrocode} +% \end{variable} +% % \begin{macro}{\pdf_object_new:n} % \begin{macro} % {\pdf_object_write:nnn, \pdf_object_write:nne, \pdf_object_write:nnx} % \begin{macro}{\pdf_object_ref:n} -% \begin{macro} -% { -% \pdf_object_unnamed_write:nn, \pdf_object_unnamed_write:ne, -% \pdf_object_unnamed_write:nx -% } -% \begin{macro}{\pdf_object_ref_last:} -% \begin{macro}[pTF]{\pdf_object_if_exist:n} +% \begin{macro}{\__kernel_pdf_object_id:n} % Simple to do: all objects create a constant |int| so it is not a % backend-specific name. % \begin{macrocode} \cs_new_protected:Npn \pdf_object_new:n #1 { - \@@_backend_object_new:n {#1} - \cs_new_eq:cc - { c_@@_backend_object_ \tl_to_str:n {#1} _int } - { c_@@_object_ \tl_to_str:n {#1} _int } + \@@_backend_object_new: + \@@_object_record:nN {#1} \g_@@_backend_object_int } \cs_new_protected:Npn \pdf_object_write:nnn #1#2#3 { - \@@_backend_object_write:nnn {#1} {#2} {#3} + \exp_args:Ne \@@_backend_object_write:nnn + { \@@_object_retrieve:n {#1} } {#2} {#3} \bool_gset_true:N \g_@@_init_bool } \cs_generate_variant:Nn \pdf_object_write:nnn { nne , nnx } -\cs_new:Npn \pdf_object_ref:n #1 { \@@_backend_object_ref:n {#1} } -\cs_new_protected:Npn \pdf_object_unnamed_write:nn #1#2 +\cs_new:Npn \pdf_object_ref:n #1 { - \@@_backend_object_now:nn {#1} {#2} - \bool_gset_true:N \g_@@_init_bool + \exp_args:Ne \@@_backend_object_ref:n + { \@@_object_retrieve:n {#1} } } -\cs_generate_variant:Nn \pdf_object_unnamed_write:nn { ne , nx } -\cs_new:Npn \pdf_object_ref_last: { \@@_backend_object_last: } +\cs_new:Npn \__kernel_pdf_object_id:n #1 + { + \exp_args:Ne \@@_backend_object_id:n + { \@@_object_retrieve:n {#1} } + } +%</tex> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\@@_object_record:nN} +% \begin{macro}[EXP]{\@@_object_retrieve:n} +% \begin{macro}{ltx.pdf.object_id} +% Object mappings are tracked in Lua for \LuaTeX{} as this makes retrieving +% them much easier; as a result, there is a split in approaches. In Lua we +% store values in a table indexed by name. The Lua function here is set up +% to deal with both named and indexed objects: fits the Lua idiom well. +% \begin{macrocode} +%<*lua> + +local scan_int = token.scan_int +local scan_string = token.scan_string +local cprint = tex.cprint + +local @@_objects_named = {} +local @@_objects_indexed = {} + +luacmd('@@_object_record:nN', function() + local name = scan_string() + local n = scan_int() + @@_objects_named[name] = n +end,'protected','global') + +local function object_id(name,index) + if index then + return @@_objects_indexed[name][index] or 0 + else + return @@_objects_named[name] or 0 + end +end + +luacmd('@@_object_retrieve:n', function() + local name = scan_string() + return cprint(12,tostring(object_id(name))) +end,'global') + +ltx.pdf = ltx.pdf or {} +ltx.pdf.object_id = object_id + +%</lua> +% \end{macrocode} +% Whereas in \TeX{} we use integer constants. +% \begin{macrocode} +%<*tex> +\sys_if_engine_luatex:F + { + \cs_new_protected:Npn \@@_object_record:nN #1#2 + { + \int_const:cn + { c_@@_object_ #1 _int } {#2} + } + \cs_new:Npn \@@_object_retrieve:n #1 + { + \int_if_exist:cTF { c_@@_object_ #1 _int } + { + \int_use:c + { c_@@_object_ #1 _int } + } + { 0 } + } + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}[pTF,EXP]{\pdf_object_if_exist:n} +% \begin{macrocode} \prg_new_conditional:Npnn \pdf_object_if_exist:n #1 { p , T , F , TF } { - \int_if_exist:cTF { c_@@_object_ \tl_to_str:n {#1} _int } - \prg_return_true: + \int_compare:nNnTF { \@@_object_retrieve:n {#1} } = 0 \prg_return_false: + \prg_return_true: } % \end{macrocode} % \end{macro} +% +% \begin{macro}{\pdf_object_new_indexed:nn} +% \begin{macro}{\pdf_object_write_indexed:nnnn, \pdf_object_write_indexed:nnne} +% \begin{macro}[EXP]{\pdf_object_ref_indexed:nn} +% \begin{macro}[EXP]{\__kernel_pdf_object_id_indexed:nn} +% Again we split between the common code and the macro- or Lua-based +% implementation. To make life easier for the Lua route, all of the +% potential expressions are expanded to braced numbers. +% \begin{macrocode} +\cs_new_protected:Npn \pdf_object_new_indexed:nn #1#2 + { + \@@_backend_object_new: + \@@_object_record:neN {#1} + { \int_eval:n {#2} } \g_@@_backend_object_int + } +\cs_new_protected:Npn \pdf_object_write_indexed:nnnn #1#2#3#4 + { + \exp_args:Ne \@@_backend_object_write:nnn + { \@@_object_retrieve:ne {#1} { \int_eval:n {#2} } } {#3} {#4} + \bool_gset_true:N \g_@@_init_bool + } +\cs_generate_variant:Nn \pdf_object_write_indexed:nnnn { nnne } +\cs_new:Npn \pdf_object_ref_indexed:nn #1#2 + { + \exp_args:Ne \@@_backend_object_ref:n + { \@@_object_retrieve:ne {#1} { \int_eval:n {#2} } } + } +\cs_new:Npn \__kernel_pdf_object_id_indexed:nn #1#2 + { + \exp_args:Ne \@@_backend_object_id:n + { \@@_object_retrieve:ne {#1} { \int_eval:n {#2} } } + } +%</tex> +% \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} +% \begin{macro}{\@@_object_record:nnN, \@@_object_record:neN} +% \begin{macro}[EXP]{\@@_object_retrieve:nn} +% \begin{macro}{\@@_object_record:NnN} +% \begin{macro}[EXP]{\@@_object_retrieve:Nn} +% Again we split for Lua: the same idea as above but with nested tables. +% As we've arranged above that the \TeX{} code passes a braced number, +% we can use |tonumber(scan_string())| rather than |scan_int()| +% for the index. +% \begin{macrocode} +%<*lua> + +luacmd('@@_object_record:nnN', function() + local name = scan_string() + local index = tonumber(scan_string()) + local n = scan_int() + @@_objects_indexed[name] = @@_objects_indexed[name] or {} + @@_objects_indexed[name][index] = n +end,'protected','global') + +luacmd('@@_object_retrieve:nn', function() + local name = scan_string() + local index = tonumber(scan_string()) + return cprint(12,tostring(object_id(name,index))) +end,'global') + +%</lua> +% \end{macrocode} +% The non-Lua approach is to divide the range into blocks, and store in integer +% arrays that can simulate dynamic assignment. +% \begin{macrocode} +%<*tex> +\sys_if_engine_luatex:F + { + \cs_new_protected:Npn \@@_object_record:nnN #1#2#3 + { + \use:e + { + \@@_object_record:NnN + \@@_object_index_split:nn {#1} {#2} + \exp_not:N #3 + } + } + \cs_new_protected:Npn \@@_object_record:NnN #1#2#3 + { + \intarray_if_exist:NF #1 + { \intarray_new:Nn #1 \c_@@_object_block_size_int } + \intarray_gset:Nnn #1 {#2} #3 + } + \cs_new:Npn \@@_object_retrieve:nn #1#2 + { + \use:e + { + \exp_not:N \@@_object_retrieve:Nn + \@@_object_index_split:nn {#1} {#2} + } + } + \cs_new:Npn \@@_object_retrieve:Nn #1#2 + { \intarray_item:Nn #1 {#2} } +% \end{macrocode} +% As we want blocks to start from one, and within the block for the top value +% to be \enquote{in} the block, we do a little bit of manipulation. By shifting +% down by one, we keep the values \enquote{in} the block, then we adjust the +% block/index number to get back on track. +% \begin{macrocode} + \cs_new:Npn \@@_object_index_split:nn #1#2 + { + \exp_not:c + { + g_@@_object_ #1 _ + \int_eval:n + { + \int_div_truncate:nn { #2 - 1 } + \c_@@_object_block_size_int + 1 + } + _intarray + } + { + \int_eval:n + { \int_mod:nn { #2 - 1 } \c_@@_object_block_size_int + 1 } + } + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{variable}{\c_@@_object_block_size_int} +% Sets the block size used for managing indexed objects. +% \begin{macrocode} + \int_const:Nn \c_@@_object_block_size_int { 10000 } + } +% \end{macrocode} +% \end{variable} +% \begin{macro}{\@@_object_record:neN} +% \begin{macro}[EXP]{\@@_object_retrieve:ne} +% Common variants. +% \begin{macrocode} +\cs_generate_variant:Nn \@@_object_record:nnN { ne } +\cs_generate_variant:Nn \@@_object_retrieve:nn { ne } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro} +% { +% \pdf_object_unnamed_write:nn, \pdf_object_unnamed_write:ne, +% \pdf_object_unnamed_write:nx +% } +% No tracking needed here. +% \begin{macrocode} +\cs_new_protected:Npn \pdf_object_unnamed_write:nn #1#2 + { + \exp_args:Ne \@@_backend_object_now:nn {#1} {#2} + \bool_gset_true:N \g_@@_init_bool + } +\cs_generate_variant:Nn \pdf_object_unnamed_write:nn { ne , nx } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\pdf_object_ref_last:} +% A one-step wrapper for consistency. +% \begin{macrocode} +\cs_new:Npn \pdf_object_ref_last: { \@@_backend_object_last: } +% \end{macrocode} % \end{macro} % % \begin{macro}{\pdf_pageobject_ref:n} @@ -523,6 +819,10 @@ % \end{macrocode} % % \begin{macrocode} +%</tex> +% \end{macrocode} +% +% \begin{macrocode} %</package> % \end{macrocode} % diff --git a/macros/latex/contrib/l3kernel/l3prefixes.csv b/macros/latex/required/l3kernel/l3prefixes.csv index 54fb41bdeb..54fb41bdeb 100644 --- a/macros/latex/contrib/l3kernel/l3prefixes.csv +++ b/macros/latex/required/l3kernel/l3prefixes.csv diff --git a/macros/latex/contrib/l3kernel/l3prefixes.pdf b/macros/latex/required/l3kernel/l3prefixes.pdf Binary files differindex 9b2e9b407e..0506709020 100644 --- a/macros/latex/contrib/l3kernel/l3prefixes.pdf +++ b/macros/latex/required/l3kernel/l3prefixes.pdf diff --git a/macros/latex/contrib/l3kernel/l3prefixes.tex b/macros/latex/required/l3kernel/l3prefixes.tex index 6c7cf24244..6c7cf24244 100644 --- a/macros/latex/contrib/l3kernel/l3prefixes.tex +++ b/macros/latex/required/l3kernel/l3prefixes.tex diff --git a/macros/latex/contrib/l3kernel/l3prg.dtx b/macros/latex/required/l3kernel/l3prg.dtx index 8bbdd6a587..ea76955d82 100644 --- a/macros/latex/contrib/l3kernel/l3prg.dtx +++ b/macros/latex/required/l3kernel/l3prg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3prop.dtx b/macros/latex/required/l3kernel/l3prop.dtx index 878b9eb758..6d8054e956 100644 --- a/macros/latex/contrib/l3kernel/l3prop.dtx +++ b/macros/latex/required/l3kernel/l3prop.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % @@ -299,15 +299,15 @@ % codes are ignored. % \end{function} % -% \begin{function} +% \begin{function}[added = 2024-03-30] % { -% \prop_put_if_new:Nnn, \prop_put_if_new:NVn, \prop_put_if_new:NnV, -% \prop_put_if_new:cnn, \prop_put_if_new:cVn, \prop_put_if_new:cnV, -% \prop_gput_if_new:Nnn, \prop_gput_if_new:NVn, \prop_gput_if_new:NnV, -% \prop_gput_if_new:cnn, \prop_gput_if_new:cVn, \prop_gput_if_new:cnV +% \prop_put_if_not_in:Nnn, \prop_put_if_not_in:NVn, \prop_put_if_not_in:NnV, +% \prop_put_if_not_in:cnn, \prop_put_if_not_in:cVn, \prop_put_if_not_in:cnV, +% \prop_gput_if_not_in:Nnn, \prop_gput_if_not_in:NVn, \prop_gput_if_not_in:NnV, +% \prop_gput_if_not_in:cnn, \prop_gput_if_not_in:cVn, \prop_gput_if_not_in:cnV % } % \begin{syntax} -% \cs{prop_put_if_new:Nnn} \meta{property list} \Arg{key} \Arg{value} +% \cs{prop_put_if_not_in:Nnn} \meta{property list} \Arg{key} \Arg{value} % \end{syntax} % If the \meta{key} is present in the \meta{property list} then no % action is taken. Otherwise, a new entry is added as described for @@ -1358,7 +1358,7 @@ % in the linked case. If |#5| is |#3| itself we have to be careful % not to lose the data, and we even take the opportunity to skip the % copying step completely. To keep the correct version of the -% duplicate keys we use the code underlying \cs{prop_put_if_new:Nnn}, +% duplicate keys we use the code underlying \cs{prop_put_if_not_in:Nnn}, % which involves passing \cs{use_none:nnn} to the auxiliary instead of % nothing. % There is no need to check for the case where |#3| is equal to~|#4| @@ -1940,10 +1940,10 @@ % } % \begin{macro}[tested = m3prop002] % { -% \prop_put_if_new:Nnn, \prop_put_if_new:NVn, \prop_put_if_new:NnV, -% \prop_put_if_new:cnn, \prop_put_if_new:cVn, \prop_put_if_new:cnV, -% \prop_gput_if_new:Nnn, \prop_gput_if_new:NVn, \prop_gput_if_new:NnV, -% \prop_gput_if_new:cnn, \prop_gput_if_new:cVn, \prop_gput_if_new:cnV +% \prop_put_if_not_in:Nnn, \prop_put_if_not_in:NVn, \prop_put_if_not_in:NnV, +% \prop_put_if_not_in:cnn, \prop_put_if_not_in:cVn, \prop_put_if_not_in:cnV, +% \prop_gput_if_not_in:Nnn, \prop_gput_if_not_in:NVn, \prop_gput_if_not_in:NnV, +% \prop_gput_if_not_in:cnn, \prop_gput_if_not_in:cVn, \prop_gput_if_not_in:cnV % } % \begin{macro}[tested = m3prop002] % { @@ -1965,17 +1965,17 @@ % auxiliary to skip this checking step and avoid getting multiple % error messages for the same error. % The \meta{code} (empty for |put| and \cs{use_none:nnn} for -% |put_if_new|) is placed before the assignment in cases where the key +% |put_if_not_in|) is placed before the assignment in cases where the key % is already present, in order to suppress the assignment in the -% |put_if_new| case. +% |put_if_not_in| case. % \begin{macrocode} \cs_new_protected:Npn \prop_put:Nnn { \@@_put:nNNnn { } \cs_set_nopar:Npe } \cs_new_protected:Npn \prop_gput:Nnn { \@@_put:nNNnn { } \cs_gset_nopar:Npe } -\cs_new_protected:Npn \prop_put_if_new:Nnn +\cs_new_protected:Npn \prop_put_if_not_in:Nnn { \@@_put:nNNnn \use_none:nnn \cs_set_nopar:Npe } -\cs_new_protected:Npn \prop_gput_if_new:Nnn +\cs_new_protected:Npn \prop_gput_if_not_in:Nnn { \@@_put:nNNnn \use_none:nnn \cs_gset_nopar:Npe } \cs_generate_variant:Nn \prop_put:Nnn { @@ -2005,10 +2005,10 @@ } \cs_generate_variant:Nn \prop_gput:Nnn { cno , co , coo , cnx , cVx , cxV , cxx } -\cs_generate_variant:Nn \prop_put_if_new:Nnn - { NnV , NV , cnV , cV } -\cs_generate_variant:Nn \prop_gput_if_new:Nnn - { NnV , NV , cnV , cV } +\cs_generate_variant:Nn \prop_put_if_not_in:Nnn + { NnV , NV , c , cnV , cV } +\cs_generate_variant:Nn \prop_gput_if_not_in:Nnn + { NnV , NV , c , cnV , cV } % \end{macrocode} % Since the true branch of \cs{@@_split:NnTFn} is used as the % replacement text of an internal macro, and since the \meta{key} and diff --git a/macros/latex/contrib/l3kernel/l3quark.dtx b/macros/latex/required/l3kernel/l3quark.dtx index 000063bc00..6dba950462 100644 --- a/macros/latex/contrib/l3kernel/l3quark.dtx +++ b/macros/latex/required/l3kernel/l3quark.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3regex.dtx b/macros/latex/required/l3kernel/l3regex.dtx index 395be76907..ce85b56262 100644 --- a/macros/latex/contrib/l3kernel/l3regex.dtx +++ b/macros/latex/required/l3kernel/l3regex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3seq.dtx b/macros/latex/required/l3kernel/l3seq.dtx index 5334e8fd88..6be32f7a83 100644 --- a/macros/latex/contrib/l3kernel/l3seq.dtx +++ b/macros/latex/required/l3kernel/l3seq.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3skip.dtx b/macros/latex/required/l3kernel/l3skip.dtx index 1839c8a2e5..a3d9256223 100644 --- a/macros/latex/contrib/l3kernel/l3skip.dtx +++ b/macros/latex/required/l3kernel/l3skip.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3sort.dtx b/macros/latex/required/l3kernel/l3sort.dtx index 818f605e07..81a025b474 100644 --- a/macros/latex/contrib/l3kernel/l3sort.dtx +++ b/macros/latex/required/l3kernel/l3sort.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3str-convert.dtx b/macros/latex/required/l3kernel/l3str-convert.dtx index be850b3109..75dbdd095b 100644 --- a/macros/latex/contrib/l3kernel/l3str-convert.dtx +++ b/macros/latex/required/l3kernel/l3str-convert.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3str.dtx b/macros/latex/required/l3kernel/l3str.dtx index 88ad33c74b..efc24fe8ea 100644 --- a/macros/latex/contrib/l3kernel/l3str.dtx +++ b/macros/latex/required/l3kernel/l3str.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3styleguide.pdf b/macros/latex/required/l3kernel/l3styleguide.pdf Binary files differindex 322b032a67..8b2f592339 100644 --- a/macros/latex/contrib/l3kernel/l3styleguide.pdf +++ b/macros/latex/required/l3kernel/l3styleguide.pdf diff --git a/macros/latex/contrib/l3kernel/l3styleguide.tex b/macros/latex/required/l3kernel/l3styleguide.tex index a2ffe8d770..da169cd8b1 100644 --- a/macros/latex/contrib/l3kernel/l3styleguide.tex +++ b/macros/latex/required/l3kernel/l3styleguide.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2024-03-14} +\date{Released 2024-04-11} \begin{document} diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf b/macros/latex/required/l3kernel/l3syntax-changes.pdf Binary files differindex 2a701d8ec5..1f2f4ca513 100644 --- a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf +++ b/macros/latex/required/l3kernel/l3syntax-changes.pdf diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.tex b/macros/latex/required/l3kernel/l3syntax-changes.tex index 7e124576c7..85f83bf0e3 100644 --- a/macros/latex/contrib/l3kernel/l3syntax-changes.tex +++ b/macros/latex/required/l3kernel/l3syntax-changes.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2024-03-14} +\date{Released 2024-04-11} \newcommand{\TF}{\textit{(TF)}} diff --git a/macros/latex/contrib/l3kernel/l3sys.dtx b/macros/latex/required/l3kernel/l3sys.dtx index feec1232fd..085b5f2c97 100644 --- a/macros/latex/contrib/l3kernel/l3sys.dtx +++ b/macros/latex/required/l3kernel/l3sys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % @@ -333,7 +333,7 @@ % not directly available within the \TeX{} run. Note that if restricted % shell escape is disabled, no results can be obtained. % -% \begin{function}[added = 2024-03-08] +% \begin{function}[added = 2024-03-08, updated = 2024-04-08] % {\sys_get_query:nN, \sys_get_query:nnN, \sys_get_query:nnnN} % \begin{syntax} % \cs{sys_get_query:nN} \Arg{cmd} \Arg{tl var} @@ -357,6 +357,14 @@ % The \meta{spec} and \meta{options}, if given, are expanded fully % before passing to the underlying script. % +% Spaces in the output are stored as active tokens, allowing them to be +% replaced by for example a visible space easily. Other non-letter +% characters in the ASCII range are set to category code~12. The category +% codes for characters out of the ASCII range are left unchanged: typically +% this will mean that with an 8-bit engine, accented values can be typeset +% directly whilst in Unicode engines, standard category code setup will +% apply. +% % If more than one line of text is returned by the \meta{cmd}, these will be % separated by character~13 (|^^M|) tokens of category code~12. In most % cases, \cs{sys_split_query:nnnN} should be preferred when multi-line @@ -1161,7 +1169,7 @@ end { \sys_get_query:nnnN {#1} { } {#2} #3 } \cs_new_protected:Npn \sys_get_query:nnnN #1#2#3#4 { - \str_clear:N #4 + \tl_clear:N #4 \@@_get_query_auxi:neeN {#1} {#2} {#3} #4 } \cs_new:Npn \@@_get_query_auxi:nnnN #1#2#3#4 @@ -1187,10 +1195,13 @@ end \sys_get_shell:nnN { l3sys-query~#1 #2 #3 } { - \int_step_inline:nnn { 0 } { `a - 1 } + \int_step_inline:nnn { 0 } { `A - 1 } + { \char_set_catcode_other:n {##1} } + \int_step_inline:nnn { `Z + 1 } { `a - 1 } { \char_set_catcode_other:n {##1} } - \int_step_inline:nnn { `Z + 1 } { 127 } + \int_step_inline:nnn { `z + 1 } { 127 } { \char_set_catcode_other:n {##1} } + \char_set_catcode_active:n { `\ } \tex_endlinechar:D 13 \scan_stop: } \l_@@_tmp_tl diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.pdf b/macros/latex/required/l3kernel/l3term-glossary.pdf Binary files differindex 93def3980b..721513e885 100644 --- a/macros/latex/contrib/l3kernel/l3term-glossary.pdf +++ b/macros/latex/required/l3kernel/l3term-glossary.pdf diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.tex b/macros/latex/required/l3kernel/l3term-glossary.tex index 5db9e83a45..d1b4b0082c 100644 --- a/macros/latex/contrib/l3kernel/l3term-glossary.tex +++ b/macros/latex/required/l3kernel/l3term-glossary.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2024-03-14} +\date{Released 2024-04-11} \newcommand{\TF}{\textit{(TF)}} diff --git a/macros/latex/contrib/l3kernel/l3text-case.dtx b/macros/latex/required/l3kernel/l3text-case.dtx index 0547db28b1..5010114fb4 100644 --- a/macros/latex/contrib/l3kernel/l3text-case.dtx +++ b/macros/latex/required/l3kernel/l3text-case.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3text-map.dtx b/macros/latex/required/l3kernel/l3text-map.dtx index d364c32199..213d8281a9 100644 --- a/macros/latex/contrib/l3kernel/l3text-map.dtx +++ b/macros/latex/required/l3kernel/l3text-map.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3text-purify.dtx b/macros/latex/required/l3kernel/l3text-purify.dtx index 8f92c1eae9..a713cd6e40 100644 --- a/macros/latex/contrib/l3kernel/l3text-purify.dtx +++ b/macros/latex/required/l3kernel/l3text-purify.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3text.dtx b/macros/latex/required/l3kernel/l3text.dtx index 5feff565b9..56c9a5533c 100644 --- a/macros/latex/contrib/l3kernel/l3text.dtx +++ b/macros/latex/required/l3kernel/l3text.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx b/macros/latex/required/l3kernel/l3tl-analysis.dtx index d965050c76..a4141dcfe4 100644 --- a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx +++ b/macros/latex/required/l3kernel/l3tl-analysis.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3tl-build.dtx b/macros/latex/required/l3kernel/l3tl-build.dtx index 175b7bc24f..859dd5025c 100644 --- a/macros/latex/contrib/l3kernel/l3tl-build.dtx +++ b/macros/latex/required/l3kernel/l3tl-build.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % @@ -73,7 +73,8 @@ % \end{syntax} % Clears the \meta{tl~var} and sets it up to support other % \cs[no-index]{tl_build_\ldots{}} functions. Until \cs{tl_build_end:N} -% \meta{tl~var} is called, applying any function from \pkg{l3tl} other +% \meta{tl~var} or \cs{tl_build_gend:N} \meta{tl~var} is called, +% applying any function from \pkg{l3tl} other % than \cs[no-index]{tl_build_\ldots{}} will lead to incorrect % results. The |begin| and |gbegin| functions must be used for local % and global \meta{tl~var} respectively. diff --git a/macros/latex/contrib/l3kernel/l3tl.dtx b/macros/latex/required/l3kernel/l3tl.dtx index 0938e7cd5e..30e16636e5 100644 --- a/macros/latex/contrib/l3kernel/l3tl.dtx +++ b/macros/latex/required/l3kernel/l3tl.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3token.dtx b/macros/latex/required/l3kernel/l3token.dtx index cd538ee6d0..a38860b548 100644 --- a/macros/latex/contrib/l3kernel/l3token.dtx +++ b/macros/latex/required/l3kernel/l3token.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % @@ -2298,7 +2298,7 @@ % is not a primitive. % % For \LuaTeX{} we use a different implementation which just looks at the -% command code for the token and compaes it to a list of non-primitives. +% command code for the token and compares it to a list of non-primitives. % Again, \tn{nullfont} is a special case because it is the only primitive % with the normally non-primitive |set_font| command code. % @@ -2345,11 +2345,11 @@ do [cmd'outer_call' or cmd'tolerant_call'] = true, [cmd'long_outer_call' or cmd'tolerant_protected_call'] = true, [cmd'assign_glue' or cmd'register_glue'] = index_not_nil, - [cmd'assign_mu_glue' or cmd'register_mu_glue'] = index_not_nil, + [cmd'assign_mu_glue' or cmd'register_mu_glue' or cmd'register_muglue'] = index_not_nil, [cmd'assign_toks' or cmd'register_toks'] = index_not_nil, - [cmd'assign_int' or cmd'register_int'] = index_not_nil, + [cmd'assign_int' or cmd'register_int' or cmd'register_integer'] = index_not_nil, [cmd'assign_attr' or cmd'register_attribute'] = true, - [cmd'assign_dimen' or cmd'register_dimen'] = index_not_nil, + [cmd'assign_dimen' or cmd'register_dimen' or cmd'register_dimension'] = index_not_nil, } luacmd("@@_if_primitive_lua:N", function() diff --git a/macros/latex/contrib/l3kernel/l3unicode.dtx b/macros/latex/required/l3kernel/l3unicode.dtx index cd552800b0..0ee6858f5b 100644 --- a/macros/latex/contrib/l3kernel/l3unicode.dtx +++ b/macros/latex/required/l3kernel/l3unicode.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-03-14} +% \date{Released 2024-04-11} % % \maketitle % @@ -82,7 +82,7 @@ % range, the generated character tokens will be active (category code % $13$); for codepoints in the ASCII range, the given \meta{catcode} % will be used. To allow the result of this function to be used -% inside a expansion context, the result is protected by \cs{exp_not:n}. +% inside an expansion context, the result is protected by \cs{exp_not:n}. % % \begin{texnote} % Users of (u)p\TeX{} note that these engines are treated as $8$-bit in diff --git a/macros/latex/contrib/l3kernel/source3.pdf b/macros/latex/required/l3kernel/source3.pdf Binary files differindex c6a6396503..9dda7182f4 100644 --- a/macros/latex/contrib/l3kernel/source3.pdf +++ b/macros/latex/required/l3kernel/source3.pdf diff --git a/macros/latex/contrib/l3kernel/source3.tex b/macros/latex/required/l3kernel/source3.tex index c09d75767b..f0aaeb20c8 100644 --- a/macros/latex/contrib/l3kernel/source3.tex +++ b/macros/latex/required/l3kernel/source3.tex @@ -57,7 +57,7 @@ for those people who are interested. {latex-team@latex-project.org}% }% } -\date{Released 2024-03-14} +\date{Released 2024-04-11} \pagenumbering{roman} \maketitle diff --git a/macros/latex/contrib/l3kernel/source3body.tex b/macros/latex/required/l3kernel/source3body.tex index 8471296227..8471296227 100644 --- a/macros/latex/contrib/l3kernel/source3body.tex +++ b/macros/latex/required/l3kernel/source3body.tex |