From f713ac513a897193c8b6ac8e34d55d8490fe270f Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Tue, 12 Apr 2022 03:04:20 +0000 Subject: CTAN sync 202204120304 --- .../latex/contrib/acmart/ACM-Reference-Format.bbx | 830 ------------------- .../latex/contrib/acmart/ACM-Reference-Format.cbx | 5 - .../latex/contrib/acmart/ACM-Reference-Format.dbx | 18 - macros/latex/contrib/acmart/Makefile | 37 +- macros/latex/contrib/acmart/README | 5 + macros/latex/contrib/acmart/acmart.dtx | 70 +- macros/latex/contrib/acmart/acmart.pdf | Bin 863525 -> 866366 bytes macros/latex/contrib/acmart/acmauthoryear.bbx | 900 +++++++++++++++++++++ macros/latex/contrib/acmart/acmauthoryear.cbx | 219 +++++ macros/latex/contrib/acmart/acmdatamodel.dbx | 33 + macros/latex/contrib/acmart/acmguide.pdf | Bin 420338 -> 424543 bytes macros/latex/contrib/acmart/acmnumeric.bbx | 885 ++++++++++++++++++++ macros/latex/contrib/acmart/acmnumeric.cbx | 5 + macros/latex/contrib/acmart/samples/abbrev.bib | 86 ++ .../contrib/acmart/samples/sample-acmlarge.pdf | Bin 610121 -> 606012 bytes .../acmart/samples/sample-acmsmall-biblatex.pdf | Bin 0 -> 628553 bytes .../acmart/samples/sample-acmsmall-conf.pdf | Bin 1054227 -> 1050052 bytes .../acmart/samples/sample-acmsmall-submission.pdf | Bin 622637 -> 618411 bytes .../contrib/acmart/samples/sample-acmsmall.pdf | Bin 620122 -> 615907 bytes .../latex/contrib/acmart/samples/sample-acmtog.pdf | Bin 567307 -> 563275 bytes .../contrib/acmart/samples/sample-authordraft.pdf | Bin 1047403 -> 1043258 bytes .../contrib/acmart/samples/sample-lualatex.pdf | Bin 781211 -> 780356 bytes .../contrib/acmart/samples/sample-manuscript.pdf | Bin 622255 -> 618058 bytes .../acmart/samples/sample-sigconf-biblatex.pdf | Bin 0 -> 615620 bytes .../contrib/acmart/samples/sample-sigconf-i13n.pdf | Bin 1059382 -> 1055507 bytes .../contrib/acmart/samples/sample-sigconf.pdf | Bin 1043594 -> 1039457 bytes .../contrib/acmart/samples/sample-sigplan.pdf | Bin 1052136 -> 1048146 bytes .../contrib/acmart/samples/sample-xelatex.pdf | Bin 659566 -> 659217 bytes macros/latex/contrib/acmart/samples/samples.dtx | 137 +++- macros/latex/contrib/acmart/samples/samples.ins | 2 + macros/latex/contrib/acmart/samples/software.bib | 145 ++++ macros/latex/contrib/l3backend/CHANGELOG.md | 16 +- macros/latex/contrib/l3backend/README.md | 2 +- .../latex/contrib/l3backend/l3backend-basics.dtx | 43 +- macros/latex/contrib/l3backend/l3backend-box.dtx | 2 +- macros/latex/contrib/l3backend/l3backend-code.pdf | Bin 896928 -> 896719 bytes macros/latex/contrib/l3backend/l3backend-color.dtx | 205 ++--- macros/latex/contrib/l3backend/l3backend-draw.dtx | 2 +- .../latex/contrib/l3backend/l3backend-graphics.dtx | 412 +++++++--- .../latex/contrib/l3backend/l3backend-header.dtx | 2 +- .../latex/contrib/l3backend/l3backend-opacity.dtx | 45 +- macros/latex/contrib/l3backend/l3backend-pdf.dtx | 26 +- macros/latex/contrib/l3experimental/CHANGELOG.md | 13 +- macros/latex/contrib/l3experimental/README.md | 2 +- .../latex/contrib/l3experimental/l3benchmark.dtx | 4 +- .../latex/contrib/l3experimental/l3benchmark.pdf | Bin 308229 -> 308189 bytes macros/latex/contrib/l3experimental/l3bitset.dtx | 4 +- macros/latex/contrib/l3experimental/l3bitset.pdf | Bin 404059 -> 404028 bytes .../latex/contrib/l3experimental/l3draw-boxes.dtx | 2 +- .../latex/contrib/l3experimental/l3draw-code.pdf | Bin 667718 -> 667715 bytes .../latex/contrib/l3experimental/l3draw-layers.dtx | 2 +- .../latex/contrib/l3experimental/l3draw-paths.dtx | 2 +- .../latex/contrib/l3experimental/l3draw-points.dtx | 2 +- .../latex/contrib/l3experimental/l3draw-scopes.dtx | 2 +- .../contrib/l3experimental/l3draw-softpath.dtx | 2 +- .../latex/contrib/l3experimental/l3draw-state.dtx | 2 +- .../contrib/l3experimental/l3draw-transforms.dtx | 2 +- macros/latex/contrib/l3experimental/l3draw.dtx | 4 +- macros/latex/contrib/l3experimental/l3draw.pdf | Bin 517401 -> 517374 bytes macros/latex/contrib/l3experimental/l3galley.dtx | 4 +- macros/latex/contrib/l3experimental/l3galley.pdf | Bin 408601 -> 408561 bytes macros/latex/contrib/l3experimental/l3graphics.dtx | 546 +++++++------ macros/latex/contrib/l3experimental/l3graphics.pdf | Bin 383689 -> 381794 bytes macros/latex/contrib/l3experimental/l3opacity.dtx | 4 +- macros/latex/contrib/l3experimental/l3opacity.pdf | Bin 334749 -> 334716 bytes .../latex/contrib/l3experimental/l3str-format.dtx | 4 +- .../latex/contrib/l3experimental/l3str-format.pdf | Bin 367684 -> 367649 bytes .../latex/contrib/l3experimental/l3sys-shell.dtx | 6 +- .../latex/contrib/l3experimental/l3sys-shell.pdf | Bin 347717 -> 347684 bytes macros/latex/contrib/l3experimental/xcoffins.dtx | 4 +- macros/latex/contrib/l3experimental/xcoffins.pdf | Bin 394161 -> 394120 bytes macros/latex/contrib/l3experimental/xgalley.dtx | 4 +- macros/latex/contrib/l3experimental/xgalley.pdf | Bin 299384 -> 299343 bytes macros/latex/contrib/l3kernel/CHANGELOG.md | 23 +- macros/latex/contrib/l3kernel/README.md | 2 +- macros/latex/contrib/l3kernel/expl3.dtx | 4 +- macros/latex/contrib/l3kernel/expl3.pdf | Bin 622328 -> 622447 bytes macros/latex/contrib/l3kernel/interface3.pdf | Bin 1766307 -> 1763985 bytes macros/latex/contrib/l3kernel/interface3.tex | 2 +- macros/latex/contrib/l3kernel/l3basics.dtx | 9 +- macros/latex/contrib/l3kernel/l3bootstrap.dtx | 2 +- macros/latex/contrib/l3kernel/l3box.dtx | 2 +- macros/latex/contrib/l3kernel/l3candidates.dtx | 6 +- macros/latex/contrib/l3kernel/l3cctab.dtx | 2 +- macros/latex/contrib/l3kernel/l3clist.dtx | 2 +- macros/latex/contrib/l3kernel/l3coffins.dtx | 2 +- macros/latex/contrib/l3kernel/l3color.dtx | 2 +- macros/latex/contrib/l3kernel/l3debug.dtx | 4 +- macros/latex/contrib/l3kernel/l3deprecation.dtx | 2 +- macros/latex/contrib/l3kernel/l3doc.dtx | 64 +- macros/latex/contrib/l3kernel/l3doc.pdf | Bin 551310 -> 554414 bytes macros/latex/contrib/l3kernel/l3docstrip.dtx | 2 +- macros/latex/contrib/l3kernel/l3docstrip.pdf | Bin 151420 -> 151536 bytes macros/latex/contrib/l3kernel/l3expan.dtx | 30 +- macros/latex/contrib/l3kernel/l3file.dtx | 2 +- macros/latex/contrib/l3kernel/l3flag.dtx | 2 +- macros/latex/contrib/l3kernel/l3fp-assign.dtx | 2 +- macros/latex/contrib/l3kernel/l3fp-aux.dtx | 2 +- macros/latex/contrib/l3kernel/l3fp-basics.dtx | 2 +- macros/latex/contrib/l3kernel/l3fp-convert.dtx | 2 +- macros/latex/contrib/l3kernel/l3fp-expo.dtx | 2 +- macros/latex/contrib/l3kernel/l3fp-extended.dtx | 2 +- macros/latex/contrib/l3kernel/l3fp-logic.dtx | 2 +- macros/latex/contrib/l3kernel/l3fp-parse.dtx | 2 +- macros/latex/contrib/l3kernel/l3fp-random.dtx | 2 +- macros/latex/contrib/l3kernel/l3fp-round.dtx | 2 +- macros/latex/contrib/l3kernel/l3fp-traps.dtx | 2 +- macros/latex/contrib/l3kernel/l3fp-trig.dtx | 2 +- macros/latex/contrib/l3kernel/l3fp.dtx | 2 +- macros/latex/contrib/l3kernel/l3fparray.dtx | 2 +- macros/latex/contrib/l3kernel/l3int.dtx | 2 +- macros/latex/contrib/l3kernel/l3intarray.dtx | 2 +- .../latex/contrib/l3kernel/l3kernel-functions.dtx | 2 +- macros/latex/contrib/l3kernel/l3keys.dtx | 125 ++- macros/latex/contrib/l3kernel/l3legacy.dtx | 16 +- macros/latex/contrib/l3kernel/l3luatex.dtx | 3 +- macros/latex/contrib/l3kernel/l3msg.dtx | 6 +- macros/latex/contrib/l3kernel/l3names.dtx | 25 +- macros/latex/contrib/l3kernel/l3news.pdf | Bin 395879 -> 395879 bytes macros/latex/contrib/l3kernel/l3news01.pdf | Bin 122710 -> 122710 bytes macros/latex/contrib/l3kernel/l3news02.pdf | Bin 150676 -> 150676 bytes macros/latex/contrib/l3kernel/l3news03.pdf | Bin 148702 -> 148702 bytes macros/latex/contrib/l3kernel/l3news04.pdf | Bin 114588 -> 114588 bytes macros/latex/contrib/l3kernel/l3news05.pdf | Bin 112487 -> 112487 bytes macros/latex/contrib/l3kernel/l3news06.pdf | Bin 151573 -> 151573 bytes macros/latex/contrib/l3kernel/l3news07.pdf | Bin 128309 -> 128309 bytes macros/latex/contrib/l3kernel/l3news08.pdf | Bin 163454 -> 163454 bytes macros/latex/contrib/l3kernel/l3news09.pdf | Bin 250139 -> 250139 bytes macros/latex/contrib/l3kernel/l3news10.pdf | Bin 150279 -> 150279 bytes macros/latex/contrib/l3kernel/l3news11.pdf | Bin 170063 -> 170063 bytes macros/latex/contrib/l3kernel/l3news12.pdf | Bin 204990 -> 204990 bytes macros/latex/contrib/l3kernel/l3pdf.dtx | 2 +- macros/latex/contrib/l3kernel/l3prefixes.csv | 5 + macros/latex/contrib/l3kernel/l3prefixes.pdf | Bin 80970 -> 81407 bytes macros/latex/contrib/l3kernel/l3prg.dtx | 2 +- macros/latex/contrib/l3kernel/l3prop.dtx | 2 +- macros/latex/contrib/l3kernel/l3quark.dtx | 2 +- macros/latex/contrib/l3kernel/l3regex.dtx | 2 +- macros/latex/contrib/l3kernel/l3seq.dtx | 2 +- macros/latex/contrib/l3kernel/l3skip.dtx | 2 +- macros/latex/contrib/l3kernel/l3sort.dtx | 2 +- macros/latex/contrib/l3kernel/l3str-convert.dtx | 2 +- macros/latex/contrib/l3kernel/l3str.dtx | 148 +++- macros/latex/contrib/l3kernel/l3styleguide.pdf | Bin 295811 -> 295942 bytes macros/latex/contrib/l3kernel/l3styleguide.tex | 2 +- macros/latex/contrib/l3kernel/l3syntax-changes.pdf | Bin 242479 -> 242612 bytes macros/latex/contrib/l3kernel/l3syntax-changes.tex | 2 +- macros/latex/contrib/l3kernel/l3sys.dtx | 2 +- macros/latex/contrib/l3kernel/l3term-glossary.pdf | Bin 230878 -> 230994 bytes macros/latex/contrib/l3kernel/l3term-glossary.tex | 2 +- macros/latex/contrib/l3kernel/l3text-case.dtx | 33 +- macros/latex/contrib/l3kernel/l3text-purify.dtx | 2 +- macros/latex/contrib/l3kernel/l3text.dtx | 68 +- macros/latex/contrib/l3kernel/l3tl-analysis.dtx | 55 +- macros/latex/contrib/l3kernel/l3tl.dtx | 2 +- macros/latex/contrib/l3kernel/l3token.dtx | 34 +- macros/latex/contrib/l3kernel/l3unicode.dtx | 2 +- macros/latex/contrib/l3kernel/source3.pdf | Bin 6939209 -> 6952124 bytes macros/latex/contrib/l3kernel/source3.tex | 2 +- macros/latex/contrib/l3kernel/source3body.tex | 4 +- 160 files changed, 3697 insertions(+), 1804 deletions(-) delete mode 100644 macros/latex/contrib/acmart/ACM-Reference-Format.bbx delete mode 100644 macros/latex/contrib/acmart/ACM-Reference-Format.cbx delete mode 100644 macros/latex/contrib/acmart/ACM-Reference-Format.dbx create mode 100644 macros/latex/contrib/acmart/acmauthoryear.bbx create mode 100644 macros/latex/contrib/acmart/acmauthoryear.cbx create mode 100644 macros/latex/contrib/acmart/acmdatamodel.dbx create mode 100644 macros/latex/contrib/acmart/acmnumeric.bbx create mode 100644 macros/latex/contrib/acmart/acmnumeric.cbx create mode 100644 macros/latex/contrib/acmart/samples/abbrev.bib create mode 100644 macros/latex/contrib/acmart/samples/sample-acmsmall-biblatex.pdf create mode 100644 macros/latex/contrib/acmart/samples/sample-sigconf-biblatex.pdf create mode 100644 macros/latex/contrib/acmart/samples/software.bib (limited to 'macros/latex/contrib') diff --git a/macros/latex/contrib/acmart/ACM-Reference-Format.bbx b/macros/latex/contrib/acmart/ACM-Reference-Format.bbx deleted file mode 100644 index e9cb545300..0000000000 --- a/macros/latex/contrib/acmart/ACM-Reference-Format.bbx +++ /dev/null @@ -1,830 +0,0 @@ -\ProvidesFile{ACM-Reference-Format.bbx}[2017-09-27 v0.1 biblatex bibliography style] - -% Inherit a default style -\RequireBibliographyStyle{trad-plain} - - - -%%% Localisation strings for ACM - -\DefineBibliographyStrings{american}{% - mathesis = {Master's thesis}, - phdthesis = {Ph\adddot{}D\adddotspace Dissertation}, - editor = {(Ed\adddot)}, - editors = {(Eds\adddot)}, - edition = {ed\adddot}, -} - - - -%%% Formatting for fields - -%\DeclareFieldFormat -% [article,inbook,incollection,inproceedings,patent,thesis,unpublished] -% {title}{#1} -\DeclareFieldFormat{pages}{#1} - -\DeclareFieldFormat{numpages}{#1 pages} - -\DeclareFieldFormat{number}{#1} - -\DeclareFieldFormat{articleno}{Article #1} - -\DeclareFieldFormat{key}{#1} - -\DeclareFieldFormat{urldate}{Retrieved\space{}#1\space{}from} -\DeclareFieldAlias{lastaccessed}{urldate} - -\DeclareFieldFormat{url}{\url{#1}} - -\DeclareFieldFormat{edition}{% - \printtext[parens]{\ifinteger{#1} - {\mkbibordedition{#1}~\bibstring{edition}} - {#1\isdot~\bibstring{edition}}}} - - -% Handle urls field containing 'and' separated list of URLs -% https://github.com/plk/biblatex/issues/229 -\DeclareListFormat{urls}{% - \url{#1}% - \ifthenelse{\value{listcount}<\value{liststop}} - {\addcomma\space} - {}} -\renewbibmacro*{url}{\iffieldundef{url}{\printlist{urls}}{\printfield{url}}} - - - -%%% Bibmacro definitions - -\renewbibmacro*{translator+others}{% - \ifboolexpr{ - test \ifusetranslator - and - not test {\ifnameundef{translator}} - } - {\printnames{translator}% - \setunit{\addcomma\space}% - \usebibmacro{translator+othersstrg}% - \clearname{translator}} - {\printfield{key}}} - -\newbibmacro*{year}{% - \iffieldundef{year}% - {\printtext{[n.\ d.]}}% - {\printfield{year}}% -} - -\renewbibmacro*{date}{\printtext[parens]{\printdate}} - - -\renewbibmacro*{url+urldate}{\iffieldundef{urlyear} - {} - {\usebibmacro{urldate}% - \setunit*{\addspace}}% - \usebibmacro{url}% - } - - -\renewbibmacro*{journal+issuetitle}{% - \usebibmacro{journal}% - \setunit*{\addcomma\space}% - \iffieldundef{series} - {} - {\newunit% - \printfield{series}% - \setunit{\addspace}}% - \usebibmacro{volume+number+date+pages+eid}% - \newcommaunit% -% \setunit{\addspace}% - \usebibmacro{issue-issue}% - \setunit*{\addcolon\space}% - \usebibmacro{issue}% - \newunit} - - - -\newbibmacro*{volume+number+date+pages+eid}{% - \printfield{volume}% - \setunit*{\addcomma\space}% - \printfield{number}% - \setunit*{\addcomma\space}% - \printfield{articleno} - \setunit{\addcomma\space} - \usebibmacro{date-ifmonth} - \setunit{\addcomma\space}% - \iffieldundef{pages}% - {\printfield{numpages}}% - {\printfield{pages}}% - \newcommaunit% - \printfield{eid}}% - -\renewbibmacro*{chapter+pages}{% - \printfield{chapter}% - \setunit{\bibpagespunct}% - \iffieldundef{pages}% - {\printfield{numpages}}% - {\printfield{pages}}% - \newunit} - -\renewbibmacro*{editor+others}{% - \ifboolexpr{ - test \ifuseeditor - and - not test {\ifnameundef{editor}} - } - {\printnames{editor}% - \setunit{\addcomma\space}% - \usebibmacro{editor+othersstrg}% - \clearname{editor}} - {\iflistundef{organization}{}{\printlist{organization}}}} - - -\newbibmacro*{issue-issue}{% - \iffieldundef{issue}% - {}% - {\printfield{issue}% - \setunit*{\addcomma\space}% - \usebibmacro{date-ifmonth}% - }% - \newunit} - - - - -\newbibmacro*{maintitle+booktitle+series+number}{% - \iffieldundef{maintitle} - {} - {\usebibmacro{maintitle}% - \newunit\newblock - \iffieldundef{volume} - {} - {\printfield{volume}% - \printfield{part}% - \setunit{\addcolon\space}}}% - \usebibmacro{booktitle}% - \setunit*{\addspace} - \printfield[parens]{series}% - \setunit*{\addspace}% - \printfield{number}% - \setunit*{\addcomma\space}% - \printfield{articleno} - \newunit - } - -\renewbibmacro*{booktitle}{% - \ifboolexpr{ - test {\iffieldundef{booktitle}} - and - test {\iffieldundef{booksubtitle}} - } - {} - {\printtext[booktitle]{% - \printfield[titlecase]{booktitle}% - \iffieldundef{booksubtitle}{}{ - \setunit{\subtitlepunct}% - \printfield[titlecase]{booksubtitle}}% - }% - }% - \printfield{booktitleaddon}} - -\renewbibmacro*{volume+number+eid}{% - \printfield{volume}% - \setunit*{\addcomma\space}% - \printfield{number}% - \setunit*{\addcomma\space}% - \printfield{articleno} - \setunit{\addcomma\space}% - \printfield{eid}} - - -\renewbibmacro*{publisher+location+date}{% - \printlist{publisher}% - \setunit*{\addcomma\space}% - \printlist{location}% - \setunit*{\addcomma\space}% - \usebibmacro{date-ifmonth}% - \newunit} - - -\newbibmacro{date-ifmonth}{% - \iffieldundef{month}{}{% - \usebibmacro{date} - }% -} - - -\renewbibmacro*{institution+location+date}{% - \printlist{school}% - \setunit*{\addcomma\space}% - \printlist{institution}% - \setunit*{\addcomma\space}% - \printlist{location}% - \setunit*{\addcomma\space}% - \usebibmacro{date-ifmonth}% - \newunit} - - -\renewbibmacro*{periodical}{% - \iffieldundef{title} - {} - {\printtext[title]{% - \printfield[titlecase]{title}% - \setunit{\subtitlepunct}% - \printfield[titlecase]{subtitle}}}% - \newunit% - \usebibmacro{journal}} - -\renewbibmacro*{issue+date}{% - \iffieldundef{issue} - {\usebibmacro{date}} - {\printfield{issue}% - \setunit*{\addspace}% - \usebibmacro{date}}% - \newunit} - -\renewbibmacro*{title+issuetitle}{% - \usebibmacro{periodical}% - \setunit*{\addspace}% - \iffieldundef{series} - {} - {\newunit - \printfield{series}% - \setunit{\addspace}}% - \printfield{volume}% - \setunit*{\addcomma\space}% - \printfield{number}% - \setunit*{\addcomma\space}% - \printfield{articleno} - \setunit{\addcomma\space}% - \printfield{eid}% - \setunit{\addspace}% - \usebibmacro{issue+date}% - \setunit{\addcolon\space}% - \usebibmacro{issue}% - \newunit} - -\renewbibmacro*{doi+eprint+url}{% - \iftoggle{bbx:url} - {\iffieldundef{doi}{\usebibmacro{url+urldate}}{}} - {}% - \newunit\newblock - \iftoggle{bbx:eprint} - {\usebibmacro{eprint}} - {}% - \newunit\newblock - \iftoggle{bbx:doi} - {\printfield{doi}} - {}} - - -%%% Definitions for drivers (alphabetical) - - - -\DeclareBibliographyDriver{article}{% - \usebibmacro{bibindex}% - \usebibmacro{begentry}% - \usebibmacro{author/translator+others}% - \setunit{\labelnamepunct}\newblock% - \usebibmacro{year}% - \newunit% - \usebibmacro{title}% - \newunit% - \printlist{language}% - \newunit\newblock% - \usebibmacro{byauthor}% - \newunit\newblock% - \usebibmacro{bytranslator+others}% - \newunit\newblock% - \printfield{version}% - \newunit\newblock% - \usebibmacro{journal+issuetitle}% - \newunit% - \usebibmacro{byeditor+others}% - \newunit% - \printfield{note}% - \newunit\newblock% - \iftoggle{bbx:isbn} - {\printfield{issn}} - {}% - \newunit\newblock% - \usebibmacro{doi+eprint+url}% - \newunit\newblock% - \usebibmacro{addendum+pubstate}% - \setunit{\bibpagerefpunct}\newblock - \usebibmacro{pageref}% - \newunit\newblock% - \usebibmacro{related}% - \usebibmacro{finentry}} - - - -\DeclareBibliographyDriver{book}{% - \usebibmacro{bibindex}% - \usebibmacro{begentry}% - \usebibmacro{author/editor+others/translator+others}% - \setunit{\labelnamepunct}\newblock - \usebibmacro{year}% - \newunit% - \usebibmacro{maintitle+title}% - \newunit% - \printlist{language}% - \newunit\newblock - \usebibmacro{byauthor}% - \newunit\newblock - \usebibmacro{byeditor+others}% - \newunit\newblock - \printfield{edition}% - \newunit - \usebibmacro{series+number}% - \iffieldundef{maintitle} - {\printfield{volume}% - \printfield{part}} - {}% - \newunit - \newunit\newblock - \printfield{volumes}% - \newunit\newblock - \printfield{note}% - \newunit\newblock - \usebibmacro{publisher+location+date}% - \newunit\newblock - \usebibmacro{chapter+pages}% - \newunit - \printfield{pagetotal}% - \newunit\newblock - \iftoggle{bbx:isbn} - {\printfield{isbn}} - {}% - \newunit\newblock - \usebibmacro{doi+eprint+url}% - \newunit\newblock - \usebibmacro{addendum+pubstate}% - \setunit{\bibpagerefpunct}\newblock - \usebibmacro{pageref}% - \newunit\newblock - \iftoggle{bbx:related} - {\usebibmacro{related:init}% - \usebibmacro{related}} - {}% - \usebibmacro{finentry}} - - - -\DeclareBibliographyDriver{inbook}{% - \usebibmacro{bibindex}% - \usebibmacro{begentry}% - \iffieldundef{author}% - {\usebibmacro{byeditor+others}}% - {\usebibmacro{author/translator+others}}% - \setunit{\labelnamepunct}\newblock - \usebibmacro{year} - \newunit\newblock - \usebibmacro{title}% - \newunit - \printlist{language}% - \newunit\newblock - \usebibmacro{byauthor}% - \newunit\newblock -% \usebibmacro{in:}% - \usebibmacro{bybookauthor}% - \newunit\newblock - \usebibmacro{maintitle+booktitle}% - \newunit\newblock - \iffieldundef{author}{}%if undef then we already printed editor - {\usebibmacro{byeditor+others}}% - \newunit\newblock - \printfield{edition}% - \newunit - \iffieldundef{maintitle} - {\printfield{volume}% - \printfield{part}} - {}% - \newunit - \printfield{volumes}% - \newunit\newblock - \usebibmacro{series+number}% - \newunit\newblock - \printfield{note}% - \newunit\newblock - \usebibmacro{publisher+location+date}% - \newunit\newblock - \usebibmacro{chapter+pages}% - \newunit\newblock - \iftoggle{bbx:isbn} - {\printfield{isbn}} - {}% - \newunit\newblock - \usebibmacro{doi+eprint+url}% - \newunit\newblock - \usebibmacro{addendum+pubstate}% - \setunit{\bibpagerefpunct}\newblock - \usebibmacro{pageref}% - \newunit\newblock - \iftoggle{bbx:related} - {\usebibmacro{related:init}% - \usebibmacro{related}} - {}% - \usebibmacro{finentry}} - - - -\DeclareBibliographyDriver{incollection}{% - \usebibmacro{bibindex}% - \usebibmacro{begentry}% - \usebibmacro{author/translator+others}% - \setunit{\labelnamepunct}\newblock - \usebibmacro{year} - \newunit\newblock - \usebibmacro{title}% - \newunit - \printlist{language}% - \newunit\newblock - \usebibmacro{byauthor}% - \newunit\newblock - \usebibmacro{in:}% - \usebibmacro{maintitle+booktitle}% - \newunit\newblock - \usebibmacro{series+number}% - \newunit\newblock - \printfield{edition}% - \newunit - \iffieldundef{maintitle} - {\printfield{volume}% - \printfield{part}} - {}% - \newunit - \printfield{volumes}% - \newunit\newblock - \usebibmacro{byeditor+others}% - \newunit\newblock - \printfield{note}% - \newunit\newblock - \usebibmacro{publisher+location+date}% - \newunit\newblock - \usebibmacro{chapter+pages}% - \newunit\newblock - \iftoggle{bbx:isbn} - {\printfield{isbn}} - {}% - \newunit\newblock - \usebibmacro{doi+eprint+url}% - \newunit\newblock - \usebibmacro{addendum+pubstate}% - \setunit{\bibpagerefpunct}\newblock - \usebibmacro{pageref}% - \newunit\newblock - \iftoggle{bbx:related} - {\usebibmacro{related:init}% - \usebibmacro{related}} - {}% - \usebibmacro{finentry}} - - - -\DeclareBibliographyDriver{inproceedings}{% - \usebibmacro{bibindex}% - \usebibmacro{begentry}% - \usebibmacro{author/translator+others}% - \setunit{\labelnamepunct}\newblock - \usebibmacro{year} - \newunit\newblock - \usebibmacro{title}% - \newunit - \printlist{language}% - \newunit\newblock - \usebibmacro{byauthor}% - \newunit\newblock - \usebibmacro{in:}% - \usebibmacro{maintitle+booktitle+series+number}% - \newunit\newblock - \usebibmacro{event+venue+date}% - \newunit\newblock - \usebibmacro{byeditor+others}% - \newunit\newblock - \iffieldundef{maintitle} - {\printfield{volume}% - \printfield{part}} - {}% - \newunit - \printfield{volumes}% - \newunit\newblock - \printfield{note}% - \newunit\newblock - \printlist{organization}% - \newunit - \usebibmacro{publisher+location+date}% - \newunit\newblock - \usebibmacro{chapter+pages}% - \newunit\newblock - \iftoggle{bbx:isbn} - {\printfield{isbn}} - {}% - \newunit\newblock - \usebibmacro{doi+eprint+url}% - \newunit\newblock - \usebibmacro{addendum+pubstate}% - \setunit{\bibpagerefpunct}\newblock - \usebibmacro{pageref}% - \newunit\newblock - \iftoggle{bbx:related} - {\usebibmacro{related:init}% - \usebibmacro{related}} - {}% - \usebibmacro{finentry}} - - - -\DeclareBibliographyDriver{manual}{% - \usebibmacro{bibindex}% - \usebibmacro{begentry}% - \usebibmacro{author/editor+others}% - \setunit{\labelnamepunct}\newblock - \usebibmacro{year} - \newunit\newblock - \usebibmacro{title}% - \newunit - \printlist{language}% - \newunit\newblock - \usebibmacro{byauthor}% - \newunit\newblock - \usebibmacro{byeditor}% - \newunit\newblock - \printfield{edition}% - \newunit\newblock - \usebibmacro{series+number}% - \newunit\newblock - \printfield{type}% - \newunit - \printfield{version}% - \newunit - \printfield{note}% - \newunit\newblock - \printlist{organization}% - \newunit - \usebibmacro{publisher+location+date}% - \newunit\newblock - \usebibmacro{chapter+pages}% - \newunit - \printfield{pagetotal}% - \newunit\newblock - \iftoggle{bbx:isbn} - {\printfield{isbn}} - {}% - \newunit\newblock - \usebibmacro{doi+eprint+url}% - \newunit\newblock - \usebibmacro{addendum+pubstate}% - \setunit{\bibpagerefpunct}\newblock - \usebibmacro{pageref}% - \newunit\newblock - \iftoggle{bbx:related} - {\usebibmacro{related:init}% - \usebibmacro{related}} - {}% - \usebibmacro{finentry}} - - - -\DeclareBibliographyDriver{misc}{% - \usebibmacro{bibindex}% - \usebibmacro{begentry}% - \usebibmacro{author/editor+others/translator+others}% - \setunit{\labelnamepunct}\newblock - \usebibmacro{year} - \newunit\newblock - \usebibmacro{title}% - \newunit - \printlist{language}% - \newunit\newblock - \usebibmacro{byauthor}% - \newunit\newblock - \usebibmacro{byeditor+others}% - \newunit\newblock - \printfield{howpublished}% - \newunit\newblock - \printfield{type}% - \newunit - \printfield{version}% - \newunit - \printfield{note}% - \newunit\newblock - \usebibmacro{organization+location+date}% - \newunit\newblock - \usebibmacro{doi+eprint+url}% - \newunit\newblock - \usebibmacro{addendum+pubstate}% - \setunit{\bibpagerefpunct}\newblock - \usebibmacro{pageref}% - \newunit\newblock - \iftoggle{bbx:related} - {\usebibmacro{related:init}% - \usebibmacro{related}} - {}% - \usebibmacro{finentry}} - - - -\DeclareBibliographyDriver{online}{% - \usebibmacro{bibindex}% - \usebibmacro{begentry}% - \usebibmacro{author/editor+others/translator+others}% - \setunit{\labelnamepunct}\newblock - \usebibmacro{year}% - \setunit{\labelnamepunct}\newblock - \usebibmacro{title}% - \newunit - \printlist{language}% - \newunit\newblock - \usebibmacro{byauthor}% - \newunit\newblock - \usebibmacro{byeditor+others}% - \newunit\newblock - \printfield{version}% - \newunit - \printfield{note}% - \newunit\newblock - \printlist{organization}% - \newunit\newblock - \usebibmacro{date-ifmonth}% - \newunit\newblock - \iftoggle{bbx:eprint} - {\usebibmacro{eprint}} - {}% - \newunit\newblock - \usebibmacro{url+urldate}% - \newunit\newblock - \usebibmacro{addendum+pubstate}% - \setunit{\bibpagerefpunct}\newblock - \usebibmacro{pageref}% - \newunit\newblock - \iftoggle{bbx:related} - {\usebibmacro{related:init}% - \usebibmacro{related}} - {}% - \usebibmacro{finentry}} - - - -\DeclareFieldFormat[patent]{number}{Patent No.~#1} - -\DeclareBibliographyDriver{patent}{% - \usebibmacro{bibindex}% - \usebibmacro{begentry}% - \usebibmacro{author}% - \setunit{\labelnamepunct}\newblock - \usebibmacro{year}% - \newunit - \usebibmacro{title}% - \newunit - \printlist{language}% - \newunit\newblock - \usebibmacro{byauthor}% - \newunit\newblock - \usebibmacro{date}% - \newunit\newblock - \printfield{type}% - \setunit*{\addspace}% - \printfield{number}% - \iflistundef{location} - {} - {\setunit*{\addspace}% - \printtext[parens]{% - \printlist[][-\value{listtotal}]{location}}}% - \newunit\newblock - \usebibmacro{byholder}% - \newunit\newblock - \printfield{note}% - \newunit\newblock - \usebibmacro{doi+eprint+url}% - \newunit\newblock - \usebibmacro{addendum+pubstate}% - \setunit{\bibpagerefpunct}\newblock - \usebibmacro{pageref}% - \newunit\newblock - \iftoggle{bbx:related} - {\usebibmacro{related:init}% - \usebibmacro{related}} - {}% - \usebibmacro{finentry}} - - - -\DeclareBibliographyDriver{periodical}{% - \usebibmacro{bibindex}% - \usebibmacro{begentry}% - \usebibmacro{editor}% - \setunit{\labelnamepunct}\newblock - \usebibmacro{year} - \newunit - \usebibmacro{title+issuetitle}% - \newunit - \printlist{language}% - \newunit\newblock - \usebibmacro{byeditor}% - \newunit\newblock - \printfield{note}% - \newunit\newblock - \iftoggle{bbx:isbn} - {\printfield{issn}} - {}% - \newunit\newblock - \usebibmacro{doi+eprint+url}% - \newunit\newblock - \usebibmacro{addendum+pubstate}% - \setunit{\bibpagerefpunct}\newblock - \usebibmacro{pageref}% - \newunit\newblock - \iftoggle{bbx:related} - {\usebibmacro{related:init}% - \usebibmacro{related}} - {}% - \usebibmacro{finentry}} - - - -\DeclareBibliographyDriver{report}{% - \usebibmacro{bibindex}% - \usebibmacro{begentry}% - \usebibmacro{author}% - \setunit{\labelnamepunct}\newblock - \usebibmacro{year} - \newunit - \usebibmacro{title}% - \newunit - \printlist{language}% - \newunit\newblock - \usebibmacro{byauthor}% - \newunit\newblock - \printfield{type}% - \setunit*{\addspace}% - \printfield{number}% - \newunit\newblock - \printfield{version}% - \newunit - \printfield{note}% - \newunit\newblock - \usebibmacro{institution+location+date}% - \newunit\newblock - \usebibmacro{chapter+pages}% - \newunit - \printfield{pagetotal}% - \newunit\newblock - \iftoggle{bbx:isbn} - {\printfield{isrn}} - {}% - \newunit\newblock - \usebibmacro{doi+eprint+url}% - \newunit\newblock - \usebibmacro{addendum+pubstate}% - \setunit{\bibpagerefpunct}\newblock - \usebibmacro{pageref}% - \newunit\newblock - \iftoggle{bbx:related} - {\usebibmacro{related:init}% - \usebibmacro{related}} - {}% - \usebibmacro{finentry}} - - - -\DeclareBibliographyDriver{thesis}{% - \usebibmacro{bibindex}% - \usebibmacro{begentry}% - \usebibmacro{author}% - \setunit{\labelnamepunct}\newblock - \usebibmacro{year} - \newunit - \usebibmacro{title}% - \newunit - \printlist{language}% - \newunit\newblock - \usebibmacro{byauthor}% - \newunit\newblock - \printfield{type}% - \newunit - \usebibmacro{institution+location+date}% - \newunit\newblock - \usebibmacro{chapter+pages}% - \newunit - \printfield{pagetotal}% - \newunit\newblock - \iftoggle{bbx:isbn} - {\printfield{isbn}} - {}% - \newunit\newblock - \usebibmacro{doi+eprint+url}% - \newunit\newblock - \usebibmacro{addendum+pubstate}% - \setunit{\bibpagerefpunct}\newblock - \usebibmacro{pageref}% - \newunit\newblock - \printfield{note}% - \newunit\newblock - \iftoggle{bbx:related} - {\usebibmacro{related:init}% - \usebibmacro{related}} - {}% - \usebibmacro{finentry}} - - diff --git a/macros/latex/contrib/acmart/ACM-Reference-Format.cbx b/macros/latex/contrib/acmart/ACM-Reference-Format.cbx deleted file mode 100644 index 7ec588b2cb..0000000000 --- a/macros/latex/contrib/acmart/ACM-Reference-Format.cbx +++ /dev/null @@ -1,5 +0,0 @@ -\ProvidesFile{ACM-Reference-Format.cbx}[2017-09-27 v0.1] - -\RequireCitationStyle{numeric} - -\endinput diff --git a/macros/latex/contrib/acmart/ACM-Reference-Format.dbx b/macros/latex/contrib/acmart/ACM-Reference-Format.dbx deleted file mode 100644 index 76ff1f1759..0000000000 --- a/macros/latex/contrib/acmart/ACM-Reference-Format.dbx +++ /dev/null @@ -1,18 +0,0 @@ -% Teach biblatex about numpages field -\DeclareDatamodelFields[type=field, datatype=literal]{numpages} -\DeclareDatamodelEntryfields{numpages} - -% Teach biblatex about articleno field -\DeclareDatamodelFields[type=field, datatype=literal]{articleno} -\DeclareDatamodelEntryfields{articleno} - -% Teach biblatex about urls field -\DeclareDatamodelFields[type=list, datatype=uri]{urls} -\DeclareDatamodelEntryfields{urls} - -% Teach biblatex about school field -\DeclareDatamodelFields[type=list, datatype=literal]{school} -\DeclareDatamodelEntryfields[thesis]{school} - -\DeclareDatamodelFields[type=field, datatype=literal]{key} -\DeclareDatamodelEntryfields{key} \ No newline at end of file diff --git a/macros/latex/contrib/acmart/Makefile b/macros/latex/contrib/acmart/Makefile index 916c87c9f1..44f80ef195 100644 --- a/macros/latex/contrib/acmart/Makefile +++ b/macros/latex/contrib/acmart/Makefile @@ -11,8 +11,10 @@ PACKAGE=acmart PDF = $(PACKAGE).pdf acmguide.pdf -all: ${PDF} ALLSAMPLES +BIBLATEXFILES= $(wildcard *.bbx) $(wildcard *.cbx) $(wildcard *.dbx) $(wildcard *.lbx) +SAMPLEBIBLATEXFILES=$(patsubst %,samples/%,$(BIBLATEXFILES)) +all: ${PDF} ALLSAMPLES %.pdf: %.dtx $(PACKAGE).cls pdflatex $< @@ -36,7 +38,7 @@ acmguide.pdf: $(PACKAGE).dtx $(PACKAGE).cls pdflatex $< -ALLSAMPLES: +ALLSAMPLES: $(SAMPLEBIBLATEXFILES) cd samples; pdflatex samples.ins; cd .. for texfile in samples/*.tex; do \ pdffile=$${texfile%.tex}.pdf; \ @@ -50,6 +52,17 @@ samples/%: % samples/$(PACKAGE).cls: $(PACKAGE).cls samples/ACM-Reference-Format.bst: ACM-Reference-Format.bst +samples/abbrev.bib: ACM-Reference-Format.bst + perl -pe 's/MACRO ({[^}]*}) *\n/MACRO \1/' ACM-Reference-Format.bst \ + | grep MACRO | sed 's/MACRO {/@STRING{/' \ + | sed 's/} *{/ = /' > samples/abbrev.bib + + +samples/%.bbx: %.bbx +samples/%.cbx: %.cbx +samples/%.dbx: %.dbx +samples/%.lbx: %.lbx + samples/%.pdf: samples/%.tex samples/$(PACKAGE).cls samples/ACM-Reference-Format.bst cd $(dir $@) && pdflatex-dev $(notdir $<) - cd $(dir $@) && bibtex $(notdir $(basename $<)) @@ -58,6 +71,22 @@ samples/%.pdf: samples/%.tex samples/$(PACKAGE).cls samples/ACM-Reference-For while ( grep -q '^LaTeX Warning: Label(s) may have changed' $(basename $<).log) \ do cd $(dir $@) && pdflatex-dev $(notdir $<); done +samples/sample-sigconf-biblatex.pdf: samples/sample-sigconf-biblatex.tex $(SAMPLEBIBLATEXFILES) + cd $(dir $@) && pdflatex-dev $(notdir $<) + - cd $(dir $@) && biber $(notdir $(basename $<)) + cd $(dir $@) && pdflatex-dev $(notdir $<) + cd $(dir $@) && pdflatex-dev $(notdir $<) + while ( grep -q '^LaTeX Warning: Label(s) may have changed' $(basename $<).log) \ + do cd $(dir $@) && pdflatex-dev $(notdir $<); done + +samples/sample-acmsmall-biblatex.pdf: samples/sample-acmsmall-biblatex.tex $(SAMPLEBIBLATEXFILES) + cd $(dir $@) && pdflatex-dev $(notdir $<) + - cd $(dir $@) && biber $(notdir $(basename $<)) + cd $(dir $@) && pdflatex-dev $(notdir $<) + cd $(dir $@) && pdflatex-dev $(notdir $<) + while ( grep -q '^LaTeX Warning: Label(s) may have changed' $(basename $<).log) \ + do cd $(dir $@) && pdflatex-dev $(notdir $<); done + samples/sample-xelatex.pdf: samples/sample-xelatex.tex samples/$(PACKAGE).cls samples/ACM-Reference-Format.bst cd $(dir $@) && xelatex-dev $(notdir $<) - cd $(dir $@) && bibtex $(notdir $(basename $<)) @@ -86,8 +115,8 @@ docclean: *.dvi *.ps *.thm *.tgz *.zip *.rpi \ samples/$(PACKAGE).cls samples/ACM-Reference-Format.bst \ samples/*.log samples/*.aux samples/*.out \ - samples/*.bbl samples/*.blg samples/*.cut - + samples/*.bbl samples/*.blg samples/*.cut \ + samples/*.run.xml samples/*.bcf $(SAMPLEBIBLATEXFILES) clean: docclean diff --git a/macros/latex/contrib/acmart/README b/macros/latex/contrib/acmart/README index 0e67fae461..fd58d1d82e 100644 --- a/macros/latex/contrib/acmart/README +++ b/macros/latex/contrib/acmart/README @@ -12,6 +12,11 @@ The production version is the one on CTAN and ACM sites. Changes +Version 1.84 Support for BibLaTeX rewritten (thanks to + Roberto Di Cosmo and Kartik Singhal) + Corrected German translation (thanks to Dirk Beyer) + New journals + Version 1.83 Support for multilanguage papers ISSN changes for some journals diff --git a/macros/latex/contrib/acmart/acmart.dtx b/macros/latex/contrib/acmart/acmart.dtx index 01f6c81eba..e33a089ce8 100644 --- a/macros/latex/contrib/acmart/acmart.dtx +++ b/macros/latex/contrib/acmart/acmart.dtx @@ -1,6 +1,6 @@ % \iffalse % -% Copyright 2016-2021, Association for Computing Machinery +% Copyright 2016-2022, Association for Computing Machinery % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either % version 1.3 of this license or (at your option) any @@ -57,7 +57,7 @@ % \ifx\currentjob\guide\OnlyDescription\fi % \GetFileInfo{acmart.dtx} % \title{\LaTeX{} Class for the \emph{Association for Computing -% Machinery}\thanks{\copyright 2016--2021, Association for Computing Machinery}} +% Machinery}\thanks{\copyright 2016--2022, Association for Computing Machinery}} % \author{Boris Veytsman\thanks{% % \href{mailto:borisv@lk.net}{\texttt{borisv@lk.net}}, % \href{mailto:boris@varphi.com}{\texttt{boris@varphi.com}}}} @@ -106,6 +106,7 @@ % Yegor Bugayenko, % Benjamin Byholm, % John Collins, +% Roberto Di Cosmo, % Nils Anders Danielsson, % Michael Ekstrand, % Matthew Fluet, @@ -301,7 +302,7 @@ % \midrule % manuscript & A manuscript. This is the default. \\ % acmsmall & Small single-column format. Used for CIE, CSUR, -% DLT, FAC, JACM, JDIQ, JEA, JERIC, +% DLT, FAC, GAMES, JACM, JDIQ, JDS, JEA, JERIC, % JETC, PACMCGIT, PACMHCI, PACMPL, TAAS, TACCESS, TACO, % TALG, TALLIP (formerly TALIP), TCPS, TDS, % TEAC, TECS, TELO, THRI, TIIS, TIOT, TISSEC, TIST, TKDD, TMIS, @@ -1506,7 +1507,11 @@ %\subsection{Bibliography} %\label{sec:ug_bibliography} % -% The ACM uses the |natbib| package for formatting references and +% The ACM lets you use either Bib\TeX\ or Bib\LaTeX\ to process your references: +% they require slightly different setup of your \LaTeX\ file, as detailed in +% the following subsections. +%\subsubsection{Processing using Bib\TeX} +% This uses the |natbib| package for formatting references and % the Bib\TeX\ style file \path{ACM-Reference-Format.bst} for Bib\TeX\ % processing. You can disable loading of |natbib| using the % option |natbib=false| in \cs{documentclass}. However, it is not @@ -1702,7 +1707,44 @@ % are includes, so you can use strings like |journal = taccess| for % \emph{ACM Transactions on Accessible Computing}. % +%\subsubsection{Processing using Bib\LaTeX} +% You will find in this package two sets of style files for Bib\LaTeX, +% \verb|acmnumeric| and \verb|acmauthoryear|, that mimic the behaviour +% of the ACM-Reference-Format.bst Bib\TeX\ sytle. They provide you +% access to all the power of Bib\LaTeX\ and already include +% support for advanced citation of software artefact from the +% \verb|biblatex-software| package, also separately available on CTAN. +% Look at the \verb|biblatex-software| documentation to learn more about +% what it offers. +% +% There are a few key differences in how the \LaTeX\ sources are set up +% when using Bib\LaTeX\ instead of Bib\TeX, that we summarize briefly +% here (please refer to the official Bib\LaTeX\ documentation for more details). % +% In the preamble of your document you need to load the Bib\LaTeX\ package +% and select the approriate bibliography style, as follows +% \begin{verbatim} +% \RequirePackage[ +% datamodel=acmdatamodel, +% style=acmnumeric, % use style=acmauthoryear for publications that require it +% ]{biblatex} +% \end{verbatim} +% +% Also in the preamble, you need to declare the bibliography sources files +% using the \verb|\addbibresouce| directe (one \verb|\addbibresource| +% command per source file), e.g.: +% \begin{verbatim} +% \addbibresource{software.bib} +% \addbibresource{sample-base.bib} +% \end{verbatim} +% +% At the end of the document, where you want the bibliography to appear, +% you need to place the command \verb|\printbibliography|. +% +% Look at the \verb|sample-*-biblatex.tex| files that can be found in the samples +% directory after running \verb|make| for templates showcasing +% these Bib\LaTeX\ styles. + %\subsection{Colors} %\label{sec:ug_colors} % @@ -1910,11 +1952,13 @@ % DGOV & Digital Government: Research and Practice \\ % DTRAP & Digital Threats: Research and Practice\\ % FAC & Formal Aspects of Computing \\ +% GAMES & ACM Games: Research and Practice\\ % HEALTH & ACM Transactions on Computing for Healthcare\\ % IMWUT & PACM on Interactive, Mobile, Wearable and Ubiquitous % Technologies\\ % JACM & Journal of the ACM \\ % JDIQ & ACM Journal of Data and Information Quality \\ +% JDS & ACM/IMS Journal of Data Science \\ % JEA & ACM Journal of Experimental Algorithmics \\ % JERIC & ACM Journal of Educational Resources in Computing\\ % JETC & ACM Journal on Emerging Technologies in Computing Systems \\ @@ -2043,7 +2087,7 @@ \ProvidesFile{acmart.dtx} % %\ProvidesClass{acmart} -[2022/02/19 v1.83 Typesetting articles for the Association for Computing Machinery] +[2022/04/09 v1.84 Typesetting articles for the Association for Computing Machinery] % \end{macrocode} % % \changes{v1.00}{2016/04/14}{First released version} @@ -2151,6 +2195,7 @@ % fonts} % \changes{1.75}{2020/10/29}{Documentation update} % \changes{1.78}{2021/05/01}{Documentation update: Word count} +% \changes{1.84}{2022/04/09}{New journals: JDS, GAMES} % % And the driver code: % \begin{macrocode} @@ -2821,9 +2866,9 @@ }% \addto\captionsgerman{% \if@ACM@journal - \renewcommand\keywordsname{Zusätzliche Schlüsselwörter und Phrasen}% + \renewcommand\keywordsname{Zusätzliche Schlagwörter und Phrasen}% \else - \renewcommand\keywordsname{Schlüsselwörter}% + \renewcommand\keywordsname{Schlagwörter}% \fi \renewcommand\acksname{Danksagungen}% }% @@ -4004,6 +4049,7 @@ % \changes{1.80}{2021/09/24}{Added DLT and FAC} % \changes{1.82}{2022/02/05}{Updated abbreviations and codes for % several journals} +% \changes{1.84}{2022/04/09}{New journals: JDS, GAMES} % % We use the |xkeyval| interface to define journal titles and the relevant % information @@ -4015,10 +4061,12 @@ DLT,% DTRAP,% FAC,% + GAMES,% HEALTH,% IMWUT,% JACM,% JDIQ,% + JDS,% JEA,% JERIC,% JETC,% @@ -4099,6 +4147,9 @@ \def\@journalNameShort{Form. Asp. Comput.}% \def\@permissionCodeOne{0934-5043}% \def\@permissionCodeTwo{1433-299X}% +\or % GAMES + \def\@journalName{ACM Games: Research and Practice}% + \def\@journalNameShort{ACM Games}% \or % HEALTH \def\@journalName{ACM Transactions on Computing for Healthcare}% \def\@journalNameShort{ACM Trans. Comput. Healthcare}% @@ -4118,6 +4169,11 @@ \def\@journalName{ACM Journal of Data and Information Quality}% \def\@journalNameShort{ACM J. Data Inform. Quality}% \def\@permissionCodeOne{1936-1955}% +\or % JDS + \def\@journalName{ACM/JMS Journal of Data Science}% + \def\@journalNameShort{ACM/IMS J. Data Sci.}% + \def\@permissionCodeOne{2831-3194}% + \def\@permissionCodeTwo{2831-3194}% \or % JEA \def\@journalName{ACM Journal of Experimental Algorithmics}% \def\@journalNameShort{ACM J. Exp. Algor.}% diff --git a/macros/latex/contrib/acmart/acmart.pdf b/macros/latex/contrib/acmart/acmart.pdf index cdeaf52e2f..eff9c12b4a 100644 Binary files a/macros/latex/contrib/acmart/acmart.pdf and b/macros/latex/contrib/acmart/acmart.pdf differ diff --git a/macros/latex/contrib/acmart/acmauthoryear.bbx b/macros/latex/contrib/acmart/acmauthoryear.bbx new file mode 100644 index 0000000000..de5e3c6c06 --- /dev/null +++ b/macros/latex/contrib/acmart/acmauthoryear.bbx @@ -0,0 +1,900 @@ +\ProvidesFile{acmauthoryear.bbx}[2022-02-14 v0.1 biblatex bibliography style] + +% Inherit a default style +\RequireBibliographyStyle{authoryear-comp} + +%%% New command definitions from trad-standard.bbx + +\newcommand*{\newcommaunit}{\@ifstar\newcommaunitStar\newcommaunitNoStar} +\newcommand*{\newcommaunitStar}{\setunit*{\addcomma\space}} +\newcommand*{\newcommaunitNoStar}{\setunit{\addcomma\space}} + +%%% Forward compatibility for date+extradate + +\ifcsundef{ifbibmacroundef}{ + \ifcsundef{abx@macro@date+extradate}{ %%% For really really old biblatex that miss \ifbibmacroundef + \blx@warning{bibmacro 'date+extradate' is missing.\MessageBreak + Please consider updating your version of biblatex.\MessageBreak + Using 'date+extrayear' instead}% + \providebibmacro*{date+extradate}{\usebibmacro{date+extrayear}} + }{} + } + { + \ifbibmacroundef{date+extradate}{ + \blx@warning{bibmacro 'date+extradate' is missing.\MessageBreak + Please consider updating your version of biblatex.\MessageBreak + Using 'date+extrayear' instead}% + \providebibmacro*{date+extradate}{\usebibmacro{date+extrayear}} + }{} + } + +%%% Localisation strings for ACM + +\DefineBibliographyStrings{american}{% + mathesis = {Master's thesis}, + phdthesis = {Ph\adddot{}D\adddotspace Dissertation}, + editor = {(Ed\adddot)}, + editors = {(Eds\adddot)}, + edition = {ed\adddot}, +} + + + +%%% Formatting for fields + +%\DeclareFieldFormat +% [article,inbook,incollection,inproceedings,patent,thesis,unpublished] +% {title}{#1} +\DeclareFieldFormat{pages}{#1} + +\DeclareFieldFormat{numpages}{#1 pages} + +\DeclareFieldFormat{number}{#1} + +\DeclareFieldFormat{articleno}{Article #1} + +\DeclareFieldFormat{key}{#1} + +\DeclareFieldFormat{urldate}{Retrieved\space{}#1\space{}from} +\DeclareFieldFormat{lastaccessed}{Retrieved\space{}#1\space{}from} + +\DeclareFieldFormat{url}{\url{#1}} + +\DeclareFieldFormat{edition}{% + \printtext[parens]{\ifinteger{#1} + {\mkbibordedition{#1}~\bibstring{edition}} + {#1\isdot~\bibstring{edition}}}} + + +% Handle urls field containing 'and' separated list of URLs +% https://github.com/plk/biblatex/issues/229 +\DeclareListFormat{urls}{% + \url{#1}% + \ifthenelse{\value{listcount}<\value{liststop}} + {\addcomma\space} + {}} +\renewbibmacro*{url}{\iffieldundef{url}{\printlist{urls}}{\printfield{url}}} + +%%% Bibmacro definitions + +\renewbibmacro*{translator+others}{% + \ifboolexpr{ + test \ifusetranslator + and + not test {\ifnameundef{translator}} + } + {\printnames{translator}% + \setunit{\addcomma\space}% + \usebibmacro{translator+othersstrg}% + \clearname{translator}} + {\printfield{key}}} + +\newbibmacro*{year}{% + \iffieldundef{year}% + {\printtext{[n.\ d.]}}% + {\printfield{year}}% +} + +\renewbibmacro*{date}{\printtext[parens]{\printdate}} + + +\renewbibmacro*{url+urldate}{\iffieldundef{urlyear} + {\iffieldundef{lastaccessed} + {} + {\printfield{lastaccessed}% + \setunit*{\addspace}}% + } + {\usebibmacro{urldate}% + \setunit*{\addspace}}% + \usebibmacro{url}% + } + +\renewbibmacro*{journal+issuetitle}{% + \usebibmacro{journal}% + \setunit*{\addcomma\space}% + \iffieldundef{series} + {} + {\newunit% + \printfield{series}% + \setunit{\addspace}}% + \usebibmacro{volume+number+date+pages+eid}% + \newcommaunit% +% \setunit{\addspace}% + \usebibmacro{issue-issue}% + \setunit*{\addcolon\space}% + \usebibmacro{issue}% + \newunit} + + + +\newbibmacro*{volume+number+date+pages+eid}{% + \printfield{volume}% + \setunit*{\addcomma\space}% + \printfield{number}% + \setunit*{\addcomma\space}% + \printfield{articleno} + \setunit{\addcomma\space} + \usebibmacro{date-ifmonth} + \setunit{\addcomma\space}% + \iffieldundef{pages}% + {\printfield{numpages}}% + {\printfield{pages}}% + \newcommaunit% + \printfield{eid}}% + +\renewbibmacro*{chapter+pages}{% + \printfield{chapter}% + \setunit{\bibpagespunct}% + \iffieldundef{pages}% + {\printfield{numpages}}% + {\printfield{pages}}% + \newunit} + +\renewbibmacro*{editor+others}{% + \ifboolexpr{ + test \ifuseeditor + and + not test {\ifnameundef{editor}} + } + {\printnames{editor}% + \setunit{\addcomma\space}% + \usebibmacro{editor+othersstrg}% + \clearname{editor}} + {\iflistundef{organization}{}{\printlist{organization}}} + \usebibmacro{date+extradate} + } + + +\newbibmacro*{issue-issue}{% + \iffieldundef{issue}% + {}% + {\printfield{issue}% + \setunit*{\addcomma\space}% + \usebibmacro{date-ifmonth}% + }% + \newunit} + + + + +\newbibmacro*{maintitle+booktitle+series+number}{% + \iffieldundef{maintitle} + {} + {\usebibmacro{maintitle}% + \newunit\newblock + \iffieldundef{volume} + {} + {\printfield{volume}% + \printfield{part}% + \setunit{\addcolon\space}}}% + \usebibmacro{booktitle}% + \setunit*{\addspace} + \printfield[parens]{series}% + \setunit*{\addspace}% + \printfield{number}% + \setunit*{\addcomma\space}% + \printfield{articleno} + \newunit + } + +\renewbibmacro*{booktitle}{% + \ifboolexpr{ + test {\iffieldundef{booktitle}} + and + test {\iffieldundef{booksubtitle}} + } + {} + {\printtext[booktitle]{% + \printfield[titlecase]{booktitle}% + \iffieldundef{booksubtitle}{}{ + \setunit{\subtitlepunct}% + \printfield[titlecase]{booksubtitle}}% + }% + }% + \printfield{booktitleaddon}} + +\renewbibmacro*{volume+number+eid}{% + \printfield{volume}% + \setunit*{\addcomma\space}% + \printfield{number}% + \setunit*{\addcomma\space}% + \printfield{articleno} + \setunit{\addcomma\space}% + \printfield{eid}} + + +\renewbibmacro*{publisher+location+date}{% + \printlist{publisher}% + \setunit*{\addcomma\space}% + \printlist{location}% + \setunit*{\addcomma\space}% + \usebibmacro{date-ifmonth}% + \newunit} + + +\newbibmacro{date-ifmonth}{% + \iffieldundef{month}{}{% + \usebibmacro{date} + }% +} + + +\renewbibmacro*{institution+location+date}{% + \printlist{school}% + \setunit*{\addcomma\space}% + \printlist{institution}% + \setunit*{\addcomma\space}% + \printlist{location}% + \setunit*{\addcomma\space}% + \usebibmacro{date-ifmonth}% + \newunit} + + +\renewbibmacro*{periodical}{% + \iffieldundef{title} + {} + {\printtext[title]{% + \printfield[titlecase]{title}% + \setunit{\subtitlepunct}% + \printfield[titlecase]{subtitle}}}% + \newunit% + \usebibmacro{journal}} + +\renewbibmacro*{issue+date}{% + \iffieldundef{issue} + {\usebibmacro{date}} + {\printfield{issue}% + \setunit*{\addspace}% + \usebibmacro{date}}% + \newunit} + +\renewbibmacro*{title+issuetitle}{% + \usebibmacro{periodical}% + \setunit*{\addspace}% + \iffieldundef{series} + {} + {\newunit + \printfield{series}% + \setunit{\addspace}}% + \printfield{volume}% + \setunit*{\addcomma\space}% + \printfield{number}% + \setunit*{\addcomma\space}% + \printfield{articleno} + \setunit{\addcomma\space}% + \printfield{eid}% + \setunit{\addspace}% + \usebibmacro{issue+date}% + \setunit{\addcolon\space}% + \usebibmacro{issue}% + \newunit} + +\renewbibmacro*{doi+eprint+url}{% + \iftoggle{bbx:url} + {\iffieldundef{doi}{ + \usebibmacro{url+urldate} + }{\iffieldundef{distinctURL} + {} + {\usebibmacro{url+urldate}} + } + }% + \newunit\newblock + \iftoggle{bbx:eprint} + {\usebibmacro{eprint}} + {}% + \newunit\newblock + \iftoggle{bbx:doi} + {\printfield{doi}} + {}} + + +%%% Definitions for drivers (alphabetical) + + + +\DeclareBibliographyDriver{article}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author/translator+others}% + \setunit{\labelnamepunct}\newblock% + \usebibmacro{title}% + \newunit% + \printlist{language}% + \newunit\newblock% + \usebibmacro{byauthor}% + \newunit\newblock% + \usebibmacro{bytranslator+others}% + \newunit\newblock% + \printfield{version}% + \newunit\newblock% + \usebibmacro{journal+issuetitle}% + \newunit% + \usebibmacro{byeditor+others}% + \newunit% + \printfield{note}% + \newunit\newblock% + \iftoggle{bbx:isbn} + {\printfield{isbn}} + {}% + \newunit\newblock% + \usebibmacro{doi+eprint+url}% + \newunit\newblock% + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock% + \usebibmacro{related}% + \usebibmacro{finentry}} + + + +\DeclareBibliographyDriver{book}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author/editor+others/translator+others}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{maintitle+title}% + \newunit% + \printlist{language}% + \newunit\newblock + \usebibmacro{byauthor}% + \newunit\newblock + \usebibmacro{byeditor+others}% + \newunit\newblock + \printfield{edition}% + \newunit + \usebibmacro{series+number}% + \iffieldundef{maintitle} + {\printfield{volume}% + \printfield{part}} + {}% + \newunit + \newunit\newblock + \printfield{volumes}% + \newunit\newblock + \printfield{note}% + \newunit\newblock + \usebibmacro{publisher+location+date}% + \newunit\newblock + \usebibmacro{chapter+pages}% + \newunit + \printfield{pagetotal}% + \newunit\newblock + \iftoggle{bbx:isbn} + {\printfield{isbn}} + {}% + \newunit\newblock + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + + + +\DeclareBibliographyDriver{inbook}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \iffieldundef{author}% + {\usebibmacro{byeditor+others}}% + {\usebibmacro{author/translator+others}}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{title}% + \newunit + \printlist{language}% + \newunit\newblock + \usebibmacro{byauthor}% + \newunit\newblock +% \usebibmacro{in:}% + \usebibmacro{bybookauthor}% + \newunit\newblock + \usebibmacro{maintitle+booktitle}% + \newunit\newblock + \iffieldundef{author}{}%if undef then we already printed editor + {\usebibmacro{byeditor+others}}% + \newunit\newblock + \printfield{edition}% + \newunit + \iffieldundef{maintitle} + {\printfield{volume}% + \printfield{part}} + {}% + \newunit + \printfield{volumes}% + \newunit\newblock + \usebibmacro{series+number}% + \newunit\newblock + \printfield{note}% + \newunit\newblock + \usebibmacro{publisher+location+date}% + \newunit\newblock + \usebibmacro{chapter+pages}% + \newunit\newblock + \iftoggle{bbx:isbn} + {\printfield{isbn}} + {}% + \newunit\newblock + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + + + +\DeclareBibliographyDriver{incollection}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author/translator+others}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{title}% + \newunit + \printlist{language}% + \newunit\newblock + \usebibmacro{byauthor}% + \newunit\newblock + \usebibmacro{in:}% + \usebibmacro{maintitle+booktitle}% + \newunit\newblock + \usebibmacro{series+number}% + \newunit\newblock + \printfield{edition}% + \newunit + \iffieldundef{maintitle} + {\printfield{volume}% + \printfield{part}} + {}% + \newunit + \printfield{volumes}% + \newunit\newblock + \usebibmacro{byeditor+others}% + \newunit\newblock + \printfield{note}% + \newunit\newblock + \usebibmacro{publisher+location+date}% + \newunit\newblock + \usebibmacro{chapter+pages}% + \newunit\newblock + \iftoggle{bbx:isbn} + {\printfield{isbn}} + {}% + \newunit\newblock + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + + + +\DeclareBibliographyDriver{inproceedings}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author/translator+others}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{title}% + \newunit + \printlist{language}% + \newunit\newblock + \usebibmacro{byauthor}% + \newunit\newblock + \usebibmacro{in:}% + \usebibmacro{maintitle+booktitle+series+number}% + \newunit\newblock + \usebibmacro{event+venue+date}% + \newunit\newblock + \usebibmacro{byeditor+others}% + \newunit\newblock + \iffieldundef{maintitle} + {\printfield{volume}% + \printfield{part}} + {}% + \newunit + \printfield{volumes}% + \newunit\newblock + \printfield{note}% + \newunit\newblock + \printlist{organization}% + \newunit + \usebibmacro{publisher+location+date}% + \newunit\newblock + \usebibmacro{chapter+pages}% + \newunit\newblock + \iftoggle{bbx:isbn} + {\printfield{isbn}} + {}% + \newunit\newblock + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + + + +\DeclareBibliographyDriver{manual}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author/editor+others}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{title}% + \newunit + \printlist{language}% + \newunit\newblock + \usebibmacro{byauthor}% + \newunit\newblock + \usebibmacro{byeditor}% + \newunit\newblock + \printfield{edition}% + \newunit\newblock + \usebibmacro{series+number}% + \newunit\newblock + \printfield{type}% + \newunit + \printfield{version}% + \newunit + \printfield{note}% + \newunit\newblock + \printlist{organization}% + \newunit + \usebibmacro{publisher+location+date}% + \newunit\newblock + \usebibmacro{chapter+pages}% + \newunit + \printfield{pagetotal}% + \newunit\newblock + \iftoggle{bbx:isbn} + {\printfield{isbn}} + {}% + \newunit\newblock + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + + + +\DeclareBibliographyDriver{misc}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author/editor+others/translator+others}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{title}% + \newunit + \printlist{language}% + \newunit\newblock + \usebibmacro{byauthor}% + \newunit\newblock + \usebibmacro{byeditor+others}% + \newunit\newblock + \printfield{howpublished}% + \newunit\newblock + \printfield{type}% + \newunit + \printfield{version}% + \newunit + \printfield{note}% + \newunit\newblock + \usebibmacro{organization+location+date}% + \newunit\newblock + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + + + +\DeclareBibliographyDriver{online}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author/editor+others/translator+others}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{title}% + \newunit + \printlist{language}% + \newunit\newblock + \usebibmacro{byauthor}% + \newunit\newblock + \usebibmacro{byeditor+others}% + \newunit\newblock + \printfield{version}% + \newunit + \printfield{note}% + \newunit\newblock + \printlist{organization}% + \newunit\newblock + \usebibmacro{date-ifmonth}% + \newunit\newblock + \iftoggle{bbx:eprint} + {\usebibmacro{eprint}} + {}% + \newunit\newblock + \usebibmacro{url+urldate}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + + + +\DeclareFieldFormat[patent]{number}{Patent No.~#1} + +\DeclareBibliographyDriver{patent}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{title}% + \newunit + \printlist{language}% + \newunit\newblock + \usebibmacro{byauthor}% + \newunit\newblock + \usebibmacro{date}% + \newunit\newblock + \printfield{type}% + \setunit*{\addspace}% + \printfield{number}% + \iflistundef{location} + {} + {\setunit*{\addspace}% + \printtext[parens]{% + \printlist[][-\value{listtotal}]{location}}}% + \newunit\newblock + \usebibmacro{byholder}% + \newunit\newblock + \printfield{note}% + \newunit\newblock + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + + + +\DeclareBibliographyDriver{periodical}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{editor}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{title+issuetitle}% + \newunit + \printlist{language}% + \newunit\newblock + \usebibmacro{byeditor}% + \newunit\newblock + \printfield{note}% + \newunit\newblock + \iftoggle{bbx:isbn} + {\printfield{issn}} + {}% + \newunit\newblock + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + + + +\DeclareBibliographyDriver{report}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{title}% + \newunit + \printlist{language}% + \newunit\newblock + \usebibmacro{byauthor}% + \newunit\newblock + \printfield{type}% + \setunit*{\addspace}% + \printfield{number}% + \newunit\newblock + \printfield{version}% + \newunit + \printfield{note}% + \newunit\newblock + \usebibmacro{institution+location+date}% + \newunit\newblock + \usebibmacro{chapter+pages}% + \newunit + \printfield{pagetotal}% + \newunit\newblock + \iftoggle{bbx:isbn} + {\printfield{isrn}} + {}% + \newunit\newblock + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + + + +\DeclareBibliographyDriver{thesis}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{title}% + \newunit + \printlist{language}% + \newunit\newblock + \usebibmacro{byauthor}% + \newunit\newblock + \printfield{type}% + \newunit + \usebibmacro{institution+location+date}% + \newunit\newblock + \usebibmacro{chapter+pages}% + \newunit + \printfield{pagetotal}% + \newunit\newblock + \iftoggle{bbx:isbn} + {\printfield{isbn}} + {}% + \newunit\newblock + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \printfield{note}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + +% +% Include support for software entries +% +\blx@inputonce{software.bbx}{biblatex style for software}{}{}{}{} + +% +% Handle ACM specific ArtifactSoftware entry exactly as the software entry (a soft alias will not work) +% +\DeclareStyleSourcemap{ + \maps[datatype=bibtex]{ + \map{ + \step[typesource=artifactsoftware,typetarget=software] + \step[typesource=artifactdataset,typetarget=dataset] + } + } +} + +%%% Compatibility with ACM bibtex formatting + + +% +% Show given name first in the reference list +% +\DeclareNameAlias{sortname}{given-family} + +% +% Produce a bibliography with small font size +% +\renewcommand*{\bibfont}{\bibliofont\footnotesize} + +% +% Remove parentheses from date+extradate +% +\RequirePackage{xpatch} +\xpatchbibmacro{date+extradate}{% + \printtext[parens]% +}{% + \newblock\setunit*{.\space}% + \printtext% +}{}{} + + +%%% Set option values for ACM style + +\ExecuteBibliographyOptions{ + dashed=false, % Do not use dashes for bibliography items with the same set of authors + labeldate=year, + abbreviate=true, + dateabbrev=true, + isbn=true, + doi=true, + urldate=comp, + url=true, + maxbibnames=9, + maxcitenames=2, + backref=false, + sorting=nty, + halid=true, + swhid=true, + swlabels=true, + vcs=true, + license=false, + language=american + } diff --git a/macros/latex/contrib/acmart/acmauthoryear.cbx b/macros/latex/contrib/acmart/acmauthoryear.cbx new file mode 100644 index 0000000000..5c21110a39 --- /dev/null +++ b/macros/latex/contrib/acmart/acmauthoryear.cbx @@ -0,0 +1,219 @@ +\ProvidesFile{acmauthoryear.cbx}[2022-02-14 v0.1] + +\RequireCitationStyle{authoryear-comp} +\RequirePackage{xpatch} + +% +% Hyperlink citations like acmart natbib implementation +% +% From https://tex.stackexchange.com/a/27615/133551 + +% Combine label and labelyear links +\xpatchbibmacro{cite} + {\usebibmacro{cite:label}% + \setunit{\printdelim{nonameyeardelim}}% + \usebibmacro{cite:labeldate+extradate}} + {\printtext[bibhyperref]{% + \DeclareFieldAlias{bibhyperref}{default}% + \usebibmacro{cite:label}% + \setunit{\printdelim{nonameyeardelim}}% + \usebibmacro{cite:labeldate+extradate}}} + {} + {\PackageWarning{biblatex-patch} + {Failed to patch cite bibmacro}} + +% Include labelname in labelyear link +\xpatchbibmacro{cite} + {\printnames{labelname}% + \setunit{\printdelim{nameyeardelim}}% + \usebibmacro{cite:labeldate+extradate}} + {\printtext[bibhyperref]{% + \DeclareFieldAlias{bibhyperref}{default}% + \printnames{labelname}% + \setunit{\printdelim{nameyeardelim}}% + \usebibmacro{cite:labeldate+extradate}}} + {} + {\PackageWarning{biblatex-patch} + {Failed to patch cite bibmacro}} + +\renewbibmacro*{textcite}{% + \iffieldequals{namehash}{\cbx@lasthash} + {\iffieldundef{shorthand} + {\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND + \(\value{multicitecount}=0\OR\iffieldundef{postnote}\)} + {\setunit{\addcomma}% + \usebibmacro{cite:extradate}} + {\setunit{\compcitedelim}% + \usebibmacro{cite:labeldate+extradate}% + \savefield{labelyear}{\cbx@lastyear}}} + {\setunit{\compcitedelim}% + \usebibmacro{cite:shorthand}% + \global\undef\cbx@lastyear}} + {\ifnameundef{labelname} + {\iffieldundef{shorthand} + {\usebibmacro{cite:label}% + \setunit{% + \global\booltrue{cbx:parens}% + \printdelim{nonameyeardelim}\bibopenbracket}% + \ifnumequal{\value{citecount}}{1} + {\usebibmacro{prenote}} + {}% + \usebibmacro{cite:labeldate+extradate}} + {\usebibmacro{cite:shorthand}}} + {\printnames{labelname}% + \setunit{% + \global\booltrue{cbx:parens}% + \printdelim{nameyeardelim}\bibopenbracket}% + \ifnumequal{\value{citecount}}{1} + {\usebibmacro{prenote}} + {}% + \iffieldundef{shorthand} + {\iffieldundef{labelyear} + {\usebibmacro{cite:label}} + {\usebibmacro{cite:labeldate+extradate}}% + \savefield{labelyear}{\cbx@lastyear}} + {\usebibmacro{cite:shorthand}% + \global\undef\cbx@lastyear}}% + \stepcounter{textcitecount}% + \savefield{namehash}{\cbx@lasthash}}% + \setunit{% + \ifbool{cbx:parens} + {\bibclosebracket\global\boolfalse{cbx:parens}} + {}% + \textcitedelim}} + +\xpatchbibmacro{textcite} + {\printnames{labelname}} + {\printtext[bibhyperref]{\printnames{labelname}}} + {} + {\PackageWarning{biblatex-patch} + {Failed to patch textcite bibmacro}} + +\renewbibmacro*{textcite:postnote}{% + \usebibmacro{postnote}% + \ifthenelse{\value{multicitecount}=\value{multicitetotal}} + {\setunit{}% + \printtext{% + \ifbool{cbx:parens} + {\bibclosebracket\global\boolfalse{cbx:parens}} + {}}} + {\setunit{% + \ifbool{cbx:parens} + {\bibclosebracket\global\boolfalse{cbx:parens}} + {}% + \textcitedelim}}} + +% NEW +\newbibmacro*{citeauthor}{% + \ifnameundef{labelname} + {\iffieldundef{shorthand} + {\printtext[bibhyperref]{% + \usebibmacro{cite:label}}% + \setunit{% + \global\booltrue{cbx:parens}% + \printdelim{nonameyeardelim}\bibopenbracket}% + \ifnumequal{\value{citecount}}{1} + {\usebibmacro{prenote}} + {}% + \printtext[bibhyperref]{\usebibmacro{cite:labeldate+extradate}}} + {\printtext[bibhyperref]{\usebibmacro{cite:shorthand}}}} + \printtext[bibhyperref]{\printnames{labelname}}} + +% +% Put brackets around citations +% + +\DeclareCiteCommand{\cite}[\mkbibbrackets] + {\usebibmacro{cite:init}% + \usebibmacro{prenote}} + {\usebibmacro{citeindex}% + \usebibmacro{cite}} + {} + {\usebibmacro{postnote}} + +\DeclareCiteCommand*{\cite}[\mkbibbrackets] + {\usebibmacro{cite:init}% + \usebibmacro{prenote}} + {\usebibmacro{citeindex}% + \usebibmacro{citeyear}} + {} + {\usebibmacro{postnote}} + +\DeclareCiteCommand{\parencite}[\mkbibbrackets] + {\usebibmacro{cite:init}% + \usebibmacro{prenote}} + {\usebibmacro{citeindex}% + \usebibmacro{cite}} + {} + {\usebibmacro{postnote}} + +\DeclareCiteCommand*{\parencite}[\mkbibbrackets] + {\usebibmacro{cite:init}% + \usebibmacro{prenote}} + {\usebibmacro{citeindex}% + \usebibmacro{citeyear}} + {} + {\usebibmacro{postnote}} + +\DeclareMultiCiteCommand{\parencites}[\mkbibbrackets]{\parencite} + {\setunit{\multicitedelim}} + +\DeclareCiteCommand{\footcite}[\mkbibfootnote] + {\usebibmacro{cite:init}% + \usebibmacro{prenote}} + {\usebibmacro{citeindex}% + \usebibmacro{cite}} + {} + {\usebibmacro{postnote}} + +\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext] + {\usebibmacro{cite:init}% + \usebibmacro{prenote}} + {\usebibmacro{citeindex}% + \usebibmacro{cite}} + {} + {\usebibmacro{postnote}} + +\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibbrackets\mkbibfootnote] + {\usebibmacro{cite:init}% + \usebibmacro{prenote}} + {\usebibmacro{citeindex}% + \usebibmacro{cite}} + {} + {\usebibmacro{postnote}} + +\DeclareMultiCiteCommand{\smartcites}[\iffootnote\mkbibbrackets\mkbibfootnote] + {\smartcite}{\setunit{\multicitedelim}} + +\DeclareCiteCommand{\citeauthor} + {\usebibmacro{cite:init}% + \usebibmacro{prenote}} + {\usebibmacro{citeindex}% + \usebibmacro{citeauthor}} + {} + {\usebibmacro{postnote}} + +\DeclareCiteCommand{\citeyear} + {\usebibmacro{cite:init}% + \usebibmacro{prenote}} + {\usebibmacro{citeindex}% + \usebibmacro{citeyear}} + {} + {\usebibmacro{postnote}} + +\DeclareCiteCommand{\citeyearpar}[\mkbibbrackets] + {\usebibmacro{cite:init}% + \usebibmacro{prenote}} + {\usebibmacro{citeindex}% + \usebibmacro{citeyear}} + {} + {\usebibmacro{postnote}} + +% +% Provide aliases for natbib-compatible commands +% +\newcommand*{\citep}{\parencite} +\newcommand*{\citet}{\textcite} +% add others here + +\endinput diff --git a/macros/latex/contrib/acmart/acmdatamodel.dbx b/macros/latex/contrib/acmart/acmdatamodel.dbx new file mode 100644 index 0000000000..6bfb5843b5 --- /dev/null +++ b/macros/latex/contrib/acmart/acmdatamodel.dbx @@ -0,0 +1,33 @@ +% Teach biblatex about numpages field +\DeclareDatamodelFields[type=field, datatype=literal]{numpages} +\DeclareDatamodelEntryfields{numpages} + +% Teach biblatex about articleno field +\DeclareDatamodelFields[type=field, datatype=literal]{articleno} +\DeclareDatamodelEntryfields{articleno} + +% Teach biblatex about urls field +\DeclareDatamodelFields[type=list, datatype=uri]{urls} +\DeclareDatamodelEntryfields{urls} + +% Teach biblatex about school field +\DeclareDatamodelFields[type=list, datatype=literal]{school} +\DeclareDatamodelEntryfields[thesis]{school} + +\DeclareDatamodelFields[type=field, datatype=literal]{key} +\DeclareDatamodelEntryfields{key} + +% Teach biblatex about lastaccessed field +\DeclareDatamodelFields[type=field,datatype=literal]{lastaccessed} +\DeclareDatamodelEntryfields{lastaccessed} + +% Teach biblatex about distincturl field +\DeclareDatamodelFields[type=field, datatype=literal]{distinctURL} +\DeclareDatamodelEntryfields{distinctURL} + + +% +% include software data model from biblatex-software +% + +\blx@inputonce{software.dbx}{biblatex data model extension for software}{}{}{}{} diff --git a/macros/latex/contrib/acmart/acmguide.pdf b/macros/latex/contrib/acmart/acmguide.pdf index fcebb0ab63..7ae163f224 100644 Binary files a/macros/latex/contrib/acmart/acmguide.pdf and b/macros/latex/contrib/acmart/acmguide.pdf differ diff --git a/macros/latex/contrib/acmart/acmnumeric.bbx b/macros/latex/contrib/acmart/acmnumeric.bbx new file mode 100644 index 0000000000..c13e40137f --- /dev/null +++ b/macros/latex/contrib/acmart/acmnumeric.bbx @@ -0,0 +1,885 @@ +\ProvidesFile{acmnumeric.bbx}[2017-09-27 v0.1 biblatex bibliography style] + +% Inherit a default style +\RequireBibliographyStyle{trad-plain} + + + +%%% Localisation strings for ACM + +\DefineBibliographyStrings{american}{% + mathesis = {Master's thesis}, + phdthesis = {Ph\adddot{}D\adddotspace Dissertation}, + editor = {(Ed\adddot)}, + editors = {(Eds\adddot)}, + edition = {ed\adddot}, +} + + + +%%% Formatting for fields + +%\DeclareFieldFormat +% [article,inbook,incollection,inproceedings,patent,thesis,unpublished] +% {title}{#1} +\DeclareFieldFormat{pages}{#1} + +\DeclareFieldFormat{numpages}{#1 pages} + +\DeclareFieldFormat{number}{#1} + +\DeclareFieldFormat{articleno}{Article #1} + +\DeclareFieldFormat{key}{#1} + +\DeclareFieldFormat{urldate}{Retrieved\space{}#1\space{}from} +\DeclareFieldFormat{lastaccessed}{Retrieved\space{}#1\space{}from} + +\DeclareFieldFormat{url}{\url{#1}} + +\DeclareFieldFormat{edition}{% + \printtext[parens]{\ifinteger{#1} + {\mkbibordedition{#1}~\bibstring{edition}} + {#1\isdot~\bibstring{edition}}}} + + +% Handle urls field containing 'and' separated list of URLs +% https://github.com/plk/biblatex/issues/229 +\DeclareListFormat{urls}{% + \url{#1}% + \ifthenelse{\value{listcount}<\value{liststop}} + {\addcomma\space} + {}} +\renewbibmacro*{url}{\iffieldundef{url}{\printlist{urls}}{\printfield{url}}} + + + +%%% Bibmacro definitions + +\renewbibmacro*{translator+others}{% + \ifboolexpr{ + test \ifusetranslator + and + not test {\ifnameundef{translator}} + } + {\printnames{translator}% + \setunit{\addcomma\space}% + \usebibmacro{translator+othersstrg}% + \clearname{translator}} + {\printfield{key}}} + +\newbibmacro*{year}{% + \iffieldundef{year}% + {\printtext{[n.\ d.]}}% + {\printfield{year}}% +} + +\renewbibmacro*{date}{\printtext[parens]{\printdate}} + + +\renewbibmacro*{url+urldate}{\iffieldundef{urlyear} + {\iffieldundef{lastaccessed} + {} + {\printfield{lastaccessed}% + \setunit*{\addspace}}% + } + {\usebibmacro{urldate}% + \setunit*{\addspace}}% + \usebibmacro{url}% + } + +\renewbibmacro*{journal+issuetitle}{% + \usebibmacro{journal}% + \setunit*{\addcomma\space}% + \iffieldundef{series} + {} + {\newunit% + \printfield{series}% + \setunit{\addspace}}% + \usebibmacro{volume+number+date+pages+eid}% + \newcommaunit% +% \setunit{\addspace}% + \usebibmacro{issue-issue}% + \setunit*{\addcolon\space}% + \usebibmacro{issue}% + \newunit} + + + +\newbibmacro*{volume+number+date+pages+eid}{% + \printfield{volume}% + \setunit*{\addcomma\space}% + \printfield{number}% + \setunit*{\addcomma\space}% + \printfield{articleno} + \setunit{\addcomma\space} + \usebibmacro{date-ifmonth} + \setunit{\addcomma\space}% + \iffieldundef{pages}% + {\printfield{numpages}}% + {\printfield{pages}}% + \newcommaunit% + \printfield{eid}}% + +\renewbibmacro*{chapter+pages}{% + \printfield{chapter}% + \setunit{\bibpagespunct}% + \iffieldundef{pages}% + {\printfield{numpages}}% + {\printfield{pages}}% + \newunit} + +\renewbibmacro*{editor+others}{% + \ifboolexpr{ + test \ifuseeditor + and + not test {\ifnameundef{editor}} + } + {\printnames{editor}% + \setunit{\addcomma\space}% + \usebibmacro{editor+othersstrg}% + \clearname{editor}} + {\iflistundef{organization}{}{\printlist{organization}}}} + + +\newbibmacro*{issue-issue}{% + \iffieldundef{issue}% + {}% + {\printfield{issue}% + \setunit*{\addcomma\space}% + \usebibmacro{date-ifmonth}% + }% + \newunit} + + + + +\newbibmacro*{maintitle+booktitle+series+number}{% + \iffieldundef{maintitle} + {} + {\usebibmacro{maintitle}% + \newunit\newblock + \iffieldundef{volume} + {} + {\printfield{volume}% + \printfield{part}% + \setunit{\addcolon\space}}}% + \usebibmacro{booktitle}% + \setunit*{\addspace} + \printfield[parens]{series}% + \setunit*{\addspace}% + \printfield{number}% + \setunit*{\addcomma\space}% + \printfield{articleno} + \newunit + } + +\renewbibmacro*{booktitle}{% + \ifboolexpr{ + test {\iffieldundef{booktitle}} + and + test {\iffieldundef{booksubtitle}} + } + {} + {\printtext[booktitle]{% + \printfield[titlecase]{booktitle}% + \iffieldundef{booksubtitle}{}{ + \setunit{\subtitlepunct}% + \printfield[titlecase]{booksubtitle}}% + }% + }% + \printfield{booktitleaddon}} + +\renewbibmacro*{volume+number+eid}{% + \printfield{volume}% + \setunit*{\addcomma\space}% + \printfield{number}% + \setunit*{\addcomma\space}% + \printfield{articleno} + \setunit{\addcomma\space}% + \printfield{eid}} + + +\renewbibmacro*{publisher+location+date}{% + \printlist{publisher}% + \setunit*{\addcomma\space}% + \printlist{location}% + \setunit*{\addcomma\space}% + \usebibmacro{date-ifmonth}% + \newunit} + + +\newbibmacro{date-ifmonth}{% + \iffieldundef{month}{}{% + \usebibmacro{date} + }% +} + + +\renewbibmacro*{institution+location+date}{% + \printlist{school}% + \setunit*{\addcomma\space}% + \printlist{institution}% + \setunit*{\addcomma\space}% + \printlist{location}% + \setunit*{\addcomma\space}% + \usebibmacro{date-ifmonth}% + \newunit} + + +\renewbibmacro*{periodical}{% + \iffieldundef{title} + {} + {\printtext[title]{% + \printfield[titlecase]{title}% + \setunit{\subtitlepunct}% + \printfield[titlecase]{subtitle}}}% + \newunit% + \usebibmacro{journal}} + +\renewbibmacro*{issue+date}{% + \iffieldundef{issue} + {\usebibmacro{date}} + {\printfield{issue}% + \setunit*{\addspace}% + \usebibmacro{date}}% + \newunit} + +\renewbibmacro*{title+issuetitle}{% + \usebibmacro{periodical}% + \setunit*{\addspace}% + \iffieldundef{series} + {} + {\newunit + \printfield{series}% + \setunit{\addspace}}% + \printfield{volume}% + \setunit*{\addcomma\space}% + \printfield{number}% + \setunit*{\addcomma\space}% + \printfield{articleno} + \setunit{\addcomma\space}% + \printfield{eid}% + \setunit{\addspace}% + \usebibmacro{issue+date}% + \setunit{\addcolon\space}% + \usebibmacro{issue}% + \newunit} + +\renewbibmacro*{doi+eprint+url}{% + \iftoggle{bbx:url} + {\iffieldundef{doi}{ + \usebibmacro{url+urldate} + }{\iffieldundef{distinctURL} + {} + {\usebibmacro{url+urldate}} + } + }% + \newunit\newblock + \iftoggle{bbx:eprint} + {\usebibmacro{eprint}} + {}% + \newunit\newblock + \iftoggle{bbx:doi} + {\printfield{doi}} + {}} + + +%%% Definitions for drivers (alphabetical) + + + +\DeclareBibliographyDriver{article}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author/translator+others}% + \setunit{\labelnamepunct}\newblock% + \usebibmacro{year}% + \newunit% + \usebibmacro{title}% + \newunit% + \printlist{language}% + \newunit\newblock% + \usebibmacro{byauthor}% + \newunit\newblock% + \usebibmacro{bytranslator+others}% + \newunit\newblock% + \printfield{version}% + \newunit\newblock% + \usebibmacro{journal+issuetitle}% + \newunit% + \usebibmacro{byeditor+others}% + \newunit% + \printfield{note}% + \newunit\newblock% + \iftoggle{bbx:isbn} + {\printfield{isbn}} + {}% + \newunit\newblock% + \usebibmacro{doi+eprint+url}% + \newunit\newblock% + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock% + \usebibmacro{related}% + \usebibmacro{finentry}} + + + +\DeclareBibliographyDriver{book}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author/editor+others/translator+others}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{year}% + \newunit% + \usebibmacro{maintitle+title}% + \newunit% + \printlist{language}% + \newunit\newblock + \usebibmacro{byauthor}% + \newunit\newblock + \usebibmacro{byeditor+others}% + \newunit\newblock + \printfield{edition}% + \newunit + \usebibmacro{series+number}% + \iffieldundef{maintitle} + {\printfield{volume}% + \printfield{part}} + {}% + \newunit + \newunit\newblock + \printfield{volumes}% + \newunit\newblock + \printfield{note}% + \newunit\newblock + \usebibmacro{publisher+location+date}% + \newunit\newblock + \usebibmacro{chapter+pages}% + \newunit + \printfield{pagetotal}% + \newunit\newblock + \iftoggle{bbx:isbn} + {\printfield{isbn}} + {}% + \newunit\newblock + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + + + +\DeclareBibliographyDriver{inbook}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \iffieldundef{author}% + {\usebibmacro{byeditor+others}}% + {\usebibmacro{author/translator+others}}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{year} + \newunit\newblock + \usebibmacro{title}% + \newunit + \printlist{language}% + \newunit\newblock + \usebibmacro{byauthor}% + \newunit\newblock +% \usebibmacro{in:}% + \usebibmacro{bybookauthor}% + \newunit\newblock + \usebibmacro{maintitle+booktitle}% + \newunit\newblock + \iffieldundef{author}{}%if undef then we already printed editor + {\usebibmacro{byeditor+others}}% + \newunit\newblock + \printfield{edition}% + \newunit + \iffieldundef{maintitle} + {\printfield{volume}% + \printfield{part}} + {}% + \newunit + \printfield{volumes}% + \newunit\newblock + \usebibmacro{series+number}% + \newunit\newblock + \printfield{note}% + \newunit\newblock + \usebibmacro{publisher+location+date}% + \newunit\newblock + \usebibmacro{chapter+pages}% + \newunit\newblock + \iftoggle{bbx:isbn} + {\printfield{isbn}} + {}% + \newunit\newblock + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + + + +\DeclareBibliographyDriver{incollection}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author/translator+others}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{year} + \newunit\newblock + \usebibmacro{title}% + \newunit + \printlist{language}% + \newunit\newblock + \usebibmacro{byauthor}% + \newunit\newblock + \usebibmacro{in:}% + \usebibmacro{maintitle+booktitle}% + \newunit\newblock + \usebibmacro{series+number}% + \newunit\newblock + \printfield{edition}% + \newunit + \iffieldundef{maintitle} + {\printfield{volume}% + \printfield{part}} + {}% + \newunit + \printfield{volumes}% + \newunit\newblock + \usebibmacro{byeditor+others}% + \newunit\newblock + \printfield{note}% + \newunit\newblock + \usebibmacro{publisher+location+date}% + \newunit\newblock + \usebibmacro{chapter+pages}% + \newunit\newblock + \iftoggle{bbx:isbn} + {\printfield{isbn}} + {}% + \newunit\newblock + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + + + +\DeclareBibliographyDriver{inproceedings}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author/translator+others}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{year} + \newunit\newblock + \usebibmacro{title}% + \newunit + \printlist{language}% + \newunit\newblock + \usebibmacro{byauthor}% + \newunit\newblock + \usebibmacro{in:}% + \usebibmacro{maintitle+booktitle+series+number}% + \newunit\newblock + \usebibmacro{event+venue+date}% + \newunit\newblock + \usebibmacro{byeditor+others}% + \newunit\newblock + \iffieldundef{maintitle} + {\printfield{volume}% + \printfield{part}} + {}% + \newunit + \printfield{volumes}% + \newunit\newblock + \printfield{note}% + \newunit\newblock + \printlist{organization}% + \newunit + \usebibmacro{publisher+location+date}% + \newunit\newblock + \usebibmacro{chapter+pages}% + \newunit\newblock + \iftoggle{bbx:isbn} + {\printfield{isbn}} + {}% + \newunit\newblock + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + + + +\DeclareBibliographyDriver{manual}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author/editor+others}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{year} + \newunit\newblock + \usebibmacro{title}% + \newunit + \printlist{language}% + \newunit\newblock + \usebibmacro{byauthor}% + \newunit\newblock + \usebibmacro{byeditor}% + \newunit\newblock + \printfield{edition}% + \newunit\newblock + \usebibmacro{series+number}% + \newunit\newblock + \printfield{type}% + \newunit + \printfield{version}% + \newunit + \printfield{note}% + \newunit\newblock + \printlist{organization}% + \newunit + \usebibmacro{publisher+location+date}% + \newunit\newblock + \usebibmacro{chapter+pages}% + \newunit + \printfield{pagetotal}% + \newunit\newblock + \iftoggle{bbx:isbn} + {\printfield{isbn}} + {}% + \newunit\newblock + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + + + +\DeclareBibliographyDriver{misc}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author/editor+others/translator+others}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{year} + \newunit\newblock + \usebibmacro{title}% + \newunit + \printlist{language}% + \newunit\newblock + \usebibmacro{byauthor}% + \newunit\newblock + \usebibmacro{byeditor+others}% + \newunit\newblock + \printfield{howpublished}% + \newunit\newblock + \printfield{type}% + \newunit + \printfield{version}% + \newunit + \printfield{note}% + \newunit\newblock + \usebibmacro{organization+location+date}% + \newunit\newblock + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + + + +\DeclareBibliographyDriver{online}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author/editor+others/translator+others}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{year}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{title}% + \newunit + \printlist{language}% + \newunit\newblock + \usebibmacro{byauthor}% + \newunit\newblock + \usebibmacro{byeditor+others}% + \newunit\newblock + \printfield{version}% + \newunit + \printfield{note}% + \newunit\newblock + \printlist{organization}% + \newunit\newblock + \usebibmacro{date-ifmonth}% + \newunit\newblock + \iftoggle{bbx:eprint} + {\usebibmacro{eprint}} + {}% + \newunit\newblock + \usebibmacro{url+urldate}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + + + +\DeclareFieldFormat[patent]{number}{Patent No.~#1} + +\DeclareBibliographyDriver{patent}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{year}% + \newunit + \usebibmacro{title}% + \newunit + \printlist{language}% + \newunit\newblock + \usebibmacro{byauthor}% + \newunit\newblock + \usebibmacro{date}% + \newunit\newblock + \printfield{type}% + \setunit*{\addspace}% + \printfield{number}% + \iflistundef{location} + {} + {\setunit*{\addspace}% + \printtext[parens]{% + \printlist[][-\value{listtotal}]{location}}}% + \newunit\newblock + \usebibmacro{byholder}% + \newunit\newblock + \printfield{note}% + \newunit\newblock + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + + + +\DeclareBibliographyDriver{periodical}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{editor}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{year} + \newunit + \usebibmacro{title+issuetitle}% + \newunit + \printlist{language}% + \newunit\newblock + \usebibmacro{byeditor}% + \newunit\newblock + \printfield{note}% + \newunit\newblock + \iftoggle{bbx:isbn} + {\printfield{issn}} + {}% + \newunit\newblock + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + + + +\DeclareBibliographyDriver{report}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{year} + \newunit + \usebibmacro{title}% + \newunit + \printlist{language}% + \newunit\newblock + \usebibmacro{byauthor}% + \newunit\newblock + \printfield{type}% + \setunit*{\addspace}% + \printfield{number}% + \newunit\newblock + \printfield{version}% + \newunit + \printfield{note}% + \newunit\newblock + \usebibmacro{institution+location+date}% + \newunit\newblock + \usebibmacro{chapter+pages}% + \newunit + \printfield{pagetotal}% + \newunit\newblock + \iftoggle{bbx:isbn} + {\printfield{isrn}} + {}% + \newunit\newblock + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + + + +\DeclareBibliographyDriver{thesis}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{year} + \newunit + \usebibmacro{title}% + \newunit + \printlist{language}% + \newunit\newblock + \usebibmacro{byauthor}% + \newunit\newblock + \printfield{type}% + \newunit + \usebibmacro{institution+location+date}% + \newunit\newblock + \usebibmacro{chapter+pages}% + \newunit + \printfield{pagetotal}% + \newunit\newblock + \iftoggle{bbx:isbn} + {\printfield{isbn}} + {}% + \newunit\newblock + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \printfield{note}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + +% +% Include support for software entries +% +\blx@inputonce{software.bbx}{biblatex style for software}{}{}{}{} + +% +% Handle ACM specific ArtifactSoftware entry exactly as the software entry (a soft alias will not work) +% +\DeclareStyleSourcemap{ + \maps[datatype=bibtex]{ + \map{ + \step[typesource=artifactsoftware,typetarget=software] + \step[typesource=artifactdataset,typetarget=dataset] + } + } +} + +% +% Show given name first in the reference list +% +\DeclareNameAlias{sortname}{given-family} + +% +% Produce a bibliography with small font size +% +\renewcommand*{\bibfont}{\bibliofont\footnotesize} + +%%% Set option values for ACM style + +\ExecuteBibliographyOptions{ + labeldate=year, + abbreviate=true, + dateabbrev=true, + isbn=true, + doi=true, + urldate=comp, + url=true, + maxbibnames=9, + maxcitenames=2, + backref=false, + sorting=nty, + halid=true, + swhid=true, + swlabels=true, + vcs=true, + license=false, + language=american + } \ No newline at end of file diff --git a/macros/latex/contrib/acmart/acmnumeric.cbx b/macros/latex/contrib/acmart/acmnumeric.cbx new file mode 100644 index 0000000000..99be1a0151 --- /dev/null +++ b/macros/latex/contrib/acmart/acmnumeric.cbx @@ -0,0 +1,5 @@ +\ProvidesFile{acmnumeric.cbx}[2017-09-27 v0.1] + +\RequireCitationStyle{numeric} + +\endinput diff --git a/macros/latex/contrib/acmart/samples/abbrev.bib b/macros/latex/contrib/acmart/samples/abbrev.bib new file mode 100644 index 0000000000..02e544b676 --- /dev/null +++ b/macros/latex/contrib/acmart/samples/abbrev.bib @@ -0,0 +1,86 @@ +@STRING{jan = "Jan."} +@STRING{feb = "Feb."} +@STRING{mar = "March"} +@STRING{apr = "April"} +@STRING{may = "May"} +@STRING{jun = "June"} +@STRING{jul = "July"} +@STRING{aug = "Aug."} +@STRING{sep = "Sept."} +@STRING{oct = "Oct."} +@STRING{nov = "Nov."} +@STRING{dec = "Dec."} +@STRING{cie = "ACM Computers in Entertainment"} +@STRING{csur = "ACM Computing Surveys"} +@STRING{dgov = "Digital Government: Research and Practice"} +@STRING{dtrap = "Digital Threats: Research and Practice"} +@STRING{health = "ACM Transactions on Computing for Healthcare"} +@STRING{imwut = "PACM on Interactive, Mobile, Wearable and Ubiquitous Technologies"} +@STRING{jacm = "Journal of the ACM"} +@STRING{jdiq = "ACM Journal of Data and Information Quality"} +@STRING{jea = "ACM Journal of Experimental Algorithmics"} +@STRING{jeric = "ACM Journal of Educational Resources in Computing"} +@STRING{jetc = "ACM Journal on Emerging Technologies in Computing Systems"} +@STRING{jocch = "ACM Journal on Computing and Cultural Heritage"} +@STRING{pacmcgit = "Proceedings of the ACM on Computer Graphics and Interactive Techniques"} +@STRING{pacmhci = "PACM on Human-Computer Interaction"} +@STRING{pacmpl = "PACM on Programming Languages"} +@STRING{pomacs = "PACM on Measurement and Analysis of Computing Systems"} +@STRING{taas = "ACM Transactions on Autonomous and Adaptive Systems"} +@STRING{taccess = "ACM Transactions on Accessible Computing"} +@STRING{taco = "ACM Transactions on Architecture and Code Optimization"} +@STRING{talg = "ACM Transactions on Algorithms"} +@STRING{tallip = "ACM Transactions on Asian and Low-Resource Language Information Processing"} +@STRING{tap = "ACM Transactions on Applied Perception"} +@STRING{tcps = "ACM Transactions on Cyber-Physical Systems"} +@STRING{tds = "ACM/IMS Transactions on Data Science"} +@STRING{teac = "ACM Transactions on Economics and Computation"} +@STRING{tecs = "ACM Transactions on Embedded Computing Systems"} +@STRING{telo = "ACM Transactions on Evolutionary Learning"} +@STRING{thri = "ACM Transactions on Human-Robot Interaction"} +@STRING{tiis = "ACM Transactions on Interactive Intelligent Systems"} +@STRING{tiot = "ACM Transactions on Internet of Things"} +@STRING{tissec = "ACM Transactions on Information and System Security"} +@STRING{tist = "ACM Transactions on Intelligent Systems and Technology"} +@STRING{tkdd = "ACM Transactions on Knowledge Discovery from Data"} +@STRING{tmis = "ACM Transactions on Management Information Systems"} +@STRING{toce = "ACM Transactions on Computing Education"} +@STRING{tochi = "ACM Transactions on Computer-Human Interaction"} +@STRING{tocl = "ACM Transactions on Computational Logic"} +@STRING{tocs = "ACM Transactions on Computer Systems"} +@STRING{toct = "ACM Transactions on Computation Theory"} +@STRING{todaes = "ACM Transactions on Design Automation of Electronic Systems"} +@STRING{tods = "ACM Transactions on Database Systems"} +@STRING{tog = "ACM Transactions on Graphics"} +@STRING{tois = "ACM Transactions on Information Systems"} +@STRING{toit = "ACM Transactions on Internet Technology"} +@STRING{tomacs = "ACM Transactions on Modeling and Computer Simulation"} +@STRING{tomm = "ACM Transactions on Multimedia Computing, Communications and Applications"} +@STRING{tompecs = "ACM Transactions on Modeling and Performance Evaluation of Computing Systems"} +@STRING{toms = "ACM Transactions on Mathematical Software"} +@STRING{topc = "ACM Transactions on Parallel Computing"} +@STRING{toplas = "ACM Transactions on Programming Languages and Systems"} +@STRING{tops = "ACM Transactions on Privacy and Security"} +@STRING{tos = "ACM Transactions on Storage"} +@STRING{tosem = "ACM Transactions on Software Engineering and Methodology"} +@STRING{tosn = "ACM Transactions on Sensor Networks"} +@STRING{tqc = "ACM Transactions on Quantum Computing"} +@STRING{trets = "ACM Transactions on Reconfigurable Technology and Systems"} +@STRING{tsas = "ACM Transactions on Spatial Algorithms and Systems"} +@STRING{tsc = "ACM Transactions on Social Computing"} +@STRING{tslp = "ACM Transactions on Speech and Language Processing"} +@STRING{tweb = "ACM Transactions on the Web"} +@STRING{acmcs = "ACM Computing Surveys"} +@STRING{acta = "Acta Informatica"} +@STRING{cacm = "Communications of the ACM"} +@STRING{ibmjrd = "IBM Journal of Research and Development"} +@STRING{ibmsj = "IBM Systems Journal"} +@STRING{ieeese = "IEEE Transactions on Software Engineering"} +@STRING{ieeetc = "IEEE Transactions on Computers"} +@STRING{ieeetcad = "IEEE Transactions on Computer-Aided Design of Integrated Circuits"} +@STRING{ipl = "Information Processing Letters"} +@STRING{jcss = "Journal of Computer and System Sciences"} +@STRING{scp = "Science of Computer Programming"} +@STRING{sicomp = "SIAM Journal on Computing"} +@STRING{toois = "ACM Transactions on Office Information Systems"} +@STRING{tcs = "Theoretical Computer Science"} diff --git a/macros/latex/contrib/acmart/samples/sample-acmlarge.pdf b/macros/latex/contrib/acmart/samples/sample-acmlarge.pdf index b5dcfd9ca7..712051ef4b 100644 Binary files a/macros/latex/contrib/acmart/samples/sample-acmlarge.pdf and b/macros/latex/contrib/acmart/samples/sample-acmlarge.pdf differ diff --git a/macros/latex/contrib/acmart/samples/sample-acmsmall-biblatex.pdf b/macros/latex/contrib/acmart/samples/sample-acmsmall-biblatex.pdf new file mode 100644 index 0000000000..c8359ae059 Binary files /dev/null and b/macros/latex/contrib/acmart/samples/sample-acmsmall-biblatex.pdf differ diff --git a/macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdf b/macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdf index 9b3ca788b6..6825c8a90f 100644 Binary files a/macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdf and b/macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdf differ diff --git a/macros/latex/contrib/acmart/samples/sample-acmsmall-submission.pdf b/macros/latex/contrib/acmart/samples/sample-acmsmall-submission.pdf index be9729af33..bd3a38698d 100644 Binary files a/macros/latex/contrib/acmart/samples/sample-acmsmall-submission.pdf and b/macros/latex/contrib/acmart/samples/sample-acmsmall-submission.pdf differ diff --git a/macros/latex/contrib/acmart/samples/sample-acmsmall.pdf b/macros/latex/contrib/acmart/samples/sample-acmsmall.pdf index 6873d96090..627a0f494d 100644 Binary files a/macros/latex/contrib/acmart/samples/sample-acmsmall.pdf and b/macros/latex/contrib/acmart/samples/sample-acmsmall.pdf differ diff --git a/macros/latex/contrib/acmart/samples/sample-acmtog.pdf b/macros/latex/contrib/acmart/samples/sample-acmtog.pdf index d78ce126dc..8558edb183 100644 Binary files a/macros/latex/contrib/acmart/samples/sample-acmtog.pdf and b/macros/latex/contrib/acmart/samples/sample-acmtog.pdf differ diff --git a/macros/latex/contrib/acmart/samples/sample-authordraft.pdf b/macros/latex/contrib/acmart/samples/sample-authordraft.pdf index e51ee62a27..37f660358a 100644 Binary files a/macros/latex/contrib/acmart/samples/sample-authordraft.pdf and b/macros/latex/contrib/acmart/samples/sample-authordraft.pdf differ diff --git a/macros/latex/contrib/acmart/samples/sample-lualatex.pdf b/macros/latex/contrib/acmart/samples/sample-lualatex.pdf index d06751562f..e52aea57e9 100644 Binary files a/macros/latex/contrib/acmart/samples/sample-lualatex.pdf and b/macros/latex/contrib/acmart/samples/sample-lualatex.pdf differ diff --git a/macros/latex/contrib/acmart/samples/sample-manuscript.pdf b/macros/latex/contrib/acmart/samples/sample-manuscript.pdf index 25cca1bc7f..ae1d5b4670 100644 Binary files a/macros/latex/contrib/acmart/samples/sample-manuscript.pdf and b/macros/latex/contrib/acmart/samples/sample-manuscript.pdf differ diff --git a/macros/latex/contrib/acmart/samples/sample-sigconf-biblatex.pdf b/macros/latex/contrib/acmart/samples/sample-sigconf-biblatex.pdf new file mode 100644 index 0000000000..77e4cc038b Binary files /dev/null and b/macros/latex/contrib/acmart/samples/sample-sigconf-biblatex.pdf differ diff --git a/macros/latex/contrib/acmart/samples/sample-sigconf-i13n.pdf b/macros/latex/contrib/acmart/samples/sample-sigconf-i13n.pdf index 8960ce2ff4..54f5fdf09c 100644 Binary files a/macros/latex/contrib/acmart/samples/sample-sigconf-i13n.pdf and b/macros/latex/contrib/acmart/samples/sample-sigconf-i13n.pdf differ diff --git a/macros/latex/contrib/acmart/samples/sample-sigconf.pdf b/macros/latex/contrib/acmart/samples/sample-sigconf.pdf index bd85371e7e..0267a91592 100644 Binary files a/macros/latex/contrib/acmart/samples/sample-sigconf.pdf and b/macros/latex/contrib/acmart/samples/sample-sigconf.pdf differ diff --git a/macros/latex/contrib/acmart/samples/sample-sigplan.pdf b/macros/latex/contrib/acmart/samples/sample-sigplan.pdf index d8c8f67f1c..df60a4d500 100644 Binary files a/macros/latex/contrib/acmart/samples/sample-sigplan.pdf and b/macros/latex/contrib/acmart/samples/sample-sigplan.pdf differ diff --git a/macros/latex/contrib/acmart/samples/sample-xelatex.pdf b/macros/latex/contrib/acmart/samples/sample-xelatex.pdf index 25a4bdef54..3a4a9dc312 100644 Binary files a/macros/latex/contrib/acmart/samples/sample-xelatex.pdf and b/macros/latex/contrib/acmart/samples/sample-xelatex.pdf differ diff --git a/macros/latex/contrib/acmart/samples/samples.dtx b/macros/latex/contrib/acmart/samples/samples.dtx index 3d8fc9abda..a0f638aecb 100644 --- a/macros/latex/contrib/acmart/samples/samples.dtx +++ b/macros/latex/contrib/acmart/samples/samples.dtx @@ -1,4 +1,4 @@ -%<*manuscript|acmsmall|acmsmall-submission|acmlarge|acmtog|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n> +%<*manuscript|acmsmall|acmsmall-submission|acmsmall-biblatex|acmlarge|acmtog|sigconf|sigconf-biblatex|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n> %% %% %% Commands for TeXCount @@ -18,10 +18,12 @@ %% The first command in your LaTeX source must be the \documentclass command. %\documentclass[manuscript,screen,review]{acmart} %\documentclass[acmsmall]{acmart} +%\documentclass[acmsmall,natbib=false]{acmart} %\documentclass[acmsmall,screen,review]{acmart} %\documentclass[acmlarge]{acmart} %\documentclass[acmtog]{acmart} %\documentclass[sigconf]{acmart} +%\documentclass[sigconf,natbib=false]{acmart} %\documentclass[sigconf,authordraft]{acmart} %\documentclass[sigplan,screen]{acmart} %\documentclass[sigchi]{acmart} @@ -33,7 +35,7 @@ %% \BibTeX command to typeset BibTeX logo in the docs \AtBeginDocument{% \providecommand\BibTeX{{% - \normalfont B\kern-0.5em{\scshape i\kern-0.25em b}\kern-0.8em\TeX}}} + Bib\TeX}}} %% Rights management information. This information is sent to you %% when you complete the rights form. These commands have SAMPLE @@ -46,7 +48,7 @@ \acmYear{2018} \acmDOI{XXXXXXX.XXXXXXX} -% +% %<*manuscript|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n> %% These commands are for a PROCEEDINGS abstract or paper. \acmConference[Conference acronym 'XX]{Make sure to enter the correct @@ -62,18 +64,18 @@ \acmISBN{978-1-4503-XXXX-X/18/06} % -%<*acmsmall|acmsmall-submission|acmlarge|acmtog> +%<*acmsmall|acmsmall-submission|acmsmall-biblatex|acmlarge|acmtog> %% %% These commands are for a JOURNAL article. -%\acmJournal{JACM} +%\acmJournal{JACM} %\acmJournal{POMACS} %\acmJournal{TOG} \acmVolume{37} \acmNumber{4} \acmArticle{111} \acmMonth{8} -% -%<*manuscript|acmsmall|acmsmall-submission|acmlarge|acmtog|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n> +% +%<*manuscript|acmsmall|acmsmall-submission|acmsmall-biblatex|acmlarge|acmtog|sigconf|sigconf-biblatex|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n> %% @@ -82,8 +84,22 @@ %% receive a unique submission ID from the organizers %% of the event, and this ID should be used as the parameter to this command. %%\acmSubmissionID{123-A56-BU3} +% +%% +%% For managing citations, it is recommended to use bibliography +%% files in BibTeX format. +%% +%% You can then either use BibTeX with the ACM-Reference-Format style, +%% or BibLaTeX with the acmnumeric or acmauthoryear sytles, that include +%% support for advanced citation of software artefact from the +%% biblatex-software package, also separately available on CTAN. +%% +%% Look at the sample-*-biblatex.tex files for templates showcasing +%% the biblatex styles. +%% +%<*manuscript|acmsmall|acmsmall-submission|acmlarge|acmtog|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n> %% %% The majority of ACM publications use numbered citations and %% references. The command \citestyle{authoryear} switches to the @@ -96,6 +112,31 @@ %%% the next command will enable that style. %%%\citestyle{acmauthoryear} %\citestyle{acmauthoryear} +% + +%<*acmsmall-biblatex|sigconf-biblatex> +%% +%% The majority of ACM publications use numbered citations and +%% references, obtained by selecting the acmnumeric BibLaTeX style. +%% The acmauthoryear BibLaTeX style switches to the "author year" style. +%% +%% If you are preparing content for an event +%% sponsored by ACM SIGGRAPH, you must use the acmauthoryear style of +%% citations and references. +%% +%% Bibliography style +\RequirePackage[ + datamodel=acmdatamodel, +% style=acmnumeric, +% style=acmauthoryear, + ]{biblatex} + +%% Declare bibliography sources (one \addbibresource command per source) +\addbibresource{software.bib} +\addbibresource{sample-base.bib} +% + +%<*manuscript|acmsmall|acmsmall-submission|acmsmall-biblatex|acmlarge|acmtog|sigconf|sigconf-biblatex|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n> %% %% end of the preamble, start of the body of the document source. @@ -104,9 +145,9 @@ %% %% The "title" command has an optional parameter, %% allowing the author to define a "short title" to be used in page headers. -\title{The Name of the Title is Hope} +\title{The Name of the Title Is Hope} %\translatedtitle{french}{Le nom du titre est l'espoir} -%\translatedtitle{german}{Der Name des Titels ist Hoffnung} +%\translatedtitle{german}{Der Name des Titels ist 'Hoffnung'} %\translatedtitle{spanish}{El nombre del título es esperanza} %% @@ -193,7 +234,7 @@ %% other information printed in the page headers. This command allows %% the author to define a more concise list %% of authors' names for this purpose. -\renewcommand{\shortauthors}{Trovato and Tobin, et al.} +\renewcommand{\shortauthors}{Trovato et al.} %% %% The abstract is a short summary of the work to be presented in the @@ -206,7 +247,7 @@ as many of the formatting elements an author may use in the preparation of the documentation of their work. \end{abstract} -% +% %<*sigconf-i13n> \begin{translatedabstract}{french} @@ -220,13 +261,12 @@ \end{translatedabstract} \begin{translatedabstract}{german} - Ein übersichtliches und gut dokumentiertes \LaTeX\-Dokument wird als - Artikel, der für die Veröffentlichung durch ACM in einem Tagungsband - formatiert wurde oder Zeitschriftenveröffentlichung. Basierend auf - der Dokumentenklasse ``acmart'', this Artikel präsentiert und - erklärt auch viele der gängigen Variationen so viele der - Formatierungselemente, die ein Autor in der verwenden darf - Vorbereitung der Dokumentation ihrer Arbeit. + Es wird ein übersichtliches und gut dokumentiertes \LaTeX\-Dokument präsentiert, + welches für die Veröffentlichung durch ACM in einem Tagungsband oder + als Zeitschriftenpublikation formatiert wurde. + Basierend auf der Dokumentenklasse ``acmart'' präsentiert und erklärt dieser Artikel + viele der Formatierungselemente sowie auch viele der gängigen Variationen, + die ein Autor bei der Beschreibung seiner Arbeit verwenden darf. \end{translatedabstract} \begin{translatedabstract}{spanish} @@ -239,7 +279,7 @@ trabajo. \end{translatedabstract} % -%<*manuscript|acmsmall|acmsmall-submission|acmlarge|acmtog|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n> +%<*manuscript|acmsmall|acmsmall-submission|acmsmall-biblatex|acmlarge|acmtog|sigconf|sigconf-biblatex|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n> %% %% The code below is generated by the tool at http://dl.acm.org/ccs.cfm. @@ -282,12 +322,11 @@ %\translatedkeywords{french}{ensembles de données, % réseaux de neurones, % détection du regard, marquage de texte} -% \translatedkeywords{german}{Datensätze, -% neuronale Netze, Blickerkennung, Text-Tagging} +% \translatedkeywords{german}{Datensammlungen, +% neuronale Netze, Blickerkennung, Textklassifizierung} % \translatedkeywords{spanish}{conjuntos de datos, % redes neuronales, detección de mirada, etiquetado de texto} - -% +% %<*sigconf|authordraft|sigplan|acmsmall-conf|sigconf-i13n> %% A "teaser" image appears between the author and affiliation %% information and the body of the document, and typically spans the @@ -300,7 +339,7 @@ \label{fig:teaser} \end{teaserfigure} % -%<*manuscript|acmsmall|acmsmall-submission|acmlarge|acmtog|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n> +%<*manuscript|acmsmall|acmsmall-submission|acmsmall-biblatex|acmlarge|acmtog|sigconf|sigconf-biblatex|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n> %% %% This command processes the author and affiliation and title @@ -709,6 +748,7 @@ references is strongly recommended. Authors' names should be complete reference should be included: title, year, volume, number, pages, article DOI, etc. +%<*!(acmsmall-biblatex|sigconf-biblatex)> The bibliography is included in your source document with these two commands, placed just before the \verb|\end{document}| command: \begin{verbatim} @@ -726,6 +766,31 @@ command in the {\bfseries preamble} (before the command \begin{verbatim} \citestyle{acmauthoryear} \end{verbatim} +% + +%<*acmsmall-biblatex|sigconf-biblatex> +Using the BibLaTeX system, the bibliography is included in your source +document with the following command, placed just before the \verb|\end{document}| command: +\begin{verbatim} + \printbibliography +\end{verbatim} + +The command \verb|\addbibresource{bibfile}| declares the \BibTeX\ file to use +in the {\bfseries preamble} (before the command +``\verb|\begin{document}|'') of your \LaTeX\ source +where ``\verb|bibfile|'' is the name, \emph{with} the ``\verb|.bib|'' suffix. +Notice that \verb|\addbibresource| takes only one argument: to declare multiple files, +use multiple instances of the command. + +Citations and references are numbered by default. A small number of +ACM publications have citations and references formatted in the +``author year'' style; for these exceptions, please pass the option \verb|style=acmauthoryear| +to the \verb|biblatex| package loaded in the {\bfseries preamble} (before the command +``\verb|\begin{document}|'') of your \LaTeX\ source. + +% + + Some examples. A paginated journal article \cite{Abril07}, an enumerated journal article \cite{Cohen07}, a reference to an entire @@ -755,9 +820,16 @@ command in the {\bfseries preamble} (before the command multi-volume works as books \cite{MR781536} and \cite{MR781537}. A couple of citations with DOIs: \cite{2004:ITE:1009386.1010128,Kirschmer:2010:AEI:1958016.1958018}. Online - citations: \cite{TUGInstmem, Thornburg01, CTANacmart}. Artifacts: - \cite{R} and \cite{UMassCitations}. - + citations: \cite{TUGInstmem, Thornburg01, CTANacmart}. +%<*!(acmsmall-biblatex|sigconf-biblatex)> + Artifacts: \cite{R} and \cite{UMassCitations}. +% +%<*acmsmall-biblatex|sigconf-biblatex> + Data Artifacts: \cite{UMassCitations}. + Software project: ~\cite{cgal,delebecque:hal-02090402}. Software Version: ~\cite{gf-tag-sound-repo,}. Software Module: ~\cite{cgal:lp-gi-20a}. Code fragment: ~\cite{simplemapper}. +% + + \section{Acknowledgments} Identification of funding sources and other support, and thanks to @@ -838,11 +910,20 @@ the margin: To Robert, for the bagels and explaining CMYK and color spaces. \end{acks} +%<*!(acmsmall-biblatex|sigconf-biblatex)> %% %% The next two lines define the bibliography style to be used, and %% the bibliography file. \bibliographystyle{ACM-Reference-Format} \bibliography{sample-base} +% + +%<*(acmsmall-biblatex|sigconf-biblatex)> +%% +%% Print the bibliography +%% +\printbibliography +% %% %% If your work has an appendix, this is the place to put it. @@ -879,4 +960,4 @@ rhoncus. Maecenas eu arcu ac neque placerat aliquam. Nunc pulvinar massa et mattis lacinia. \end{document} -% +% diff --git a/macros/latex/contrib/acmart/samples/samples.ins b/macros/latex/contrib/acmart/samples/samples.ins index 7c5c974a66..af2d55e4d9 100644 --- a/macros/latex/contrib/acmart/samples/samples.ins +++ b/macros/latex/contrib/acmart/samples/samples.ins @@ -10,9 +10,11 @@ \file{sample-manuscript.tex}{\from{samples.dtx}{manuscript}} \file{sample-acmsmall.tex}{\from{samples.dtx}{acmsmall}} \file{sample-acmsmall-submission.tex}{\from{samples.dtx}{acmsmall-submission}} + \file{sample-acmsmall-biblatex.tex}{\from{samples.dtx}{acmsmall-biblatex}} \file{sample-acmlarge.tex}{\from{samples.dtx}{acmlarge}} \file{sample-acmtog.tex}{\from{samples.dtx}{acmtog}} \file{sample-sigconf.tex}{\from{samples.dtx}{sigconf}} + \file{sample-sigconf-biblatex.tex}{\from{samples.dtx}{sigconf-biblatex}} \file{sample-authordraft.tex}{\from{samples.dtx}{authordraft}} \file{sample-xelatex.tex}{\from{samples.dtx}{sigconf}} \file{sample-lualatex.tex}{\from{samples.dtx}{sigconf}} diff --git a/macros/latex/contrib/acmart/samples/software.bib b/macros/latex/contrib/acmart/samples/software.bib new file mode 100644 index 0000000000..f12ffba46d --- /dev/null +++ b/macros/latex/contrib/acmart/samples/software.bib @@ -0,0 +1,145 @@ +@softwareversion {delebecque:hal-02090402-condensed, + title = {Scilab}, + author = {Delebecque, Fran{\c c}ois and Gomez, Claude and Goursat, Maurice + and Nikoukhah, Ramine and Steer, Serge and Chancelier, Jean-Philippe}, + url = {https://www.scilab.org/}, + date = {1994-01}, + file = {https://hal.inria.fr/hal-02090402/file/scilab-1.1.tar.gz}, + institution = {Inria}, + license = {Scilab license}, + hal_id = {hal-02090402}, + hal_version = {v1}, + swhid = {swh:1:dir:1ba0b67b5d0c8f10961d878d91ae9d6e499d746a; + origin=https://hal.archives-ouvertes.fr/hal-02090402}, + version = {1.1}, + note = {First Scilab version. It was distributed by anonymous ftp.}, + repository= {https://github.com/scilab/scilab}, + abstract = {Software for Numerical Computation freely distributed.} +} +@software {delebecque:hal-02090402, + title = {Scilab}, + author = {Delebecque, Fran{\c c}ois and Gomez, Claude and Goursat, Maurice + and Nikoukhah, Ramine and Steer, Serge and Chancelier, Jean-Philippe}, + date = {1994}, + institution = {Inria}, + license = {Scilab license}, + hal_id = {hal-02090402}, + hal_version = {v1}, + url = {https://www.scilab.org/}, + abstract = {Software for Numerical Computation freely distributed.}, + repository= {https://github.com/scilab/scilab}, +} + +@softwareversion {delebecque:hal-02090402v1, + version = {1.1}, + date = {1994-01}, + file = {https://hal.inria.fr/hal-02090402/file/scilab-1.1.tar.gz}, + swhid = {swh:1:dir:1ba0b67b5d0c8f10961d878d91ae9d6e499d746a; + origin=https://hal.archives-ouvertes.fr/hal-02090402}, + note = {First Scilab version. It was distributed by anonymous ftp.}, + crossref = {delebecque:hal-02090402} +} + @software {cgal, + title = {The Computational Geometry Algorithms Library}, + author = {{The CGAL Project}}, + editor = {{CGAL Editorial Board}}, + date = {1996}, + url = {https://cgal.org/} + } + + @softwareversion{cgal:5-0-2, + crossref = {cgal}, + version = {{5.0.2}}, + url = {https://docs.cgal.org/5.02}, + date = {2020}, + swhid = {swh:1:rel:636541bbf6c77863908eae744610a3d91fa58855; + origin=https://github.com/CGAL/cgal/} + } + + @softwaremodule{cgal:lp-gi-20a, + crossref = {cgal:5-0-2}, + author = {Menelaos Karavelas}, + subtitle = {{2D} Voronoi Diagram Adaptor}, + license = {GPL}, + introducedin = {cgal:3-1}, + url = {https://doc.cgal.org/5.0.2/Manual/packages.html#PkgVoronoiDiagram2}, + } + @softwaremodule{cgal:lp-gi-20a-condensed, + title = {The Computational Geometry Algorithms Library}, + subtitle = {{2D} Voronoi Diagram Adaptor}, + author = {Menelaos Karavelas}, + editor = {{CGAL Editorial Board}}, + license = {GPL}, + version = {{5.0.2}}, + introducedin = {cgal:3-1}, + date = {2020}, + swhid = {swh:1:rel:636541bbf6c77863908eae744610a3d91fa58855; + origin=https://github.com/CGAL/cgal/}, + url = {https://doc.cgal.org/5.0.2/Manual/packages.html#PkgVoronoiDiagram2}, + } +@software {parmap, + title = {The Parmap library}, + author = {Di Cosmo, Roberto and Marco Danelutto}, + date = {2012}, + institution = {{Inria} and {University of Paris} and {University of Pisa}}, + license = {LGPL-2.0}, + url = {https://rdicosmo.github.io/parmap/}, + repository= {https://github.com/rdicosmo/parmap}, +} + +@softwareversion {parmap-1.1.1, + crossref = {parmap}, + date = {2020}, + version = {1.1.1}, + swhid = {swh:1:rel:373e2604d96de4ab1d505190b654c5c4045db773; + origin=https://github.com/rdicosmo/parmap; + visit=swh:1:snp:2a6c348c53eb77d458f24c9cbcecaf92e3c45615}, +} + +@codefragment {simplemapper, + subtitle = {Core mapping routine}, + swhid = {swh:1:cnt:43a6b232768017b03da934ba22d9cc3f2726a6c5; + origin=https://github.com/rdicosmo/parmap; + visit=swh:1:snp:2a6c348c53eb77d458f24c9cbcecaf92e3c45615; + anchor=swh:1:rel:373e2604d96de4ab1d505190b654c5c4045db773; + path=/src/parmap.ml; + lines=192-228}, + crossref = {parmap-1.1.1} +} +@codefragment {simplemapper-condensed, + title = {The Parmap library}, + author = {Di Cosmo, Roberto and Marco Danelutto}, + date = {2020}, + institution = {{Inria} and {University of Paris} and {University of Pisa}}, + license = {LGPL-2.0}, + url = {https://rdicosmo.github.io/parmap/}, + repository= {https://github.com/rdicosmo/parmap}, + version = {1.1.1}, + subtitle = {Core mapping routine}, + swhid = {swh:1:cnt:43a6b232768017b03da934ba22d9cc3f2726a6c5; + origin=https://github.com/rdicosmo/parmap; + visit=swh:1:snp:2a6c348c53eb77d458f24c9cbcecaf92e3c45615; + anchor=swh:1:rel:373e2604d96de4ab1d505190b654c5c4045db773; + path=/src/parmap.ml; + lines=192-228} +} + +@article{ad-wood-2003, + author = {Christopher Anderson and Sophia Drossopoulou}, + title = {{BabyJ}: from Object Based to Class Based Programming via Types}, + journal = {{WOOD}}, + volume = {82}, + number = {7}, + pages = {53--81}, + year = {2003} +} + +@softwareversion{gf-tag-sound-repo, + title={tag-sound}, + author={Ben Greenman and Matthias Felleisen}, + swhid={swh:1:dir:cd0b0abeee707e57cd699e2e2ebd075da8ebf1f7;origin=https://github.com/nuprl/tag-sound;visit=swh:1:snp:7967bc0abee8bf3bfffb9252207a07b73538525a;anchor=swh:1:rev:4cc09ca228947a99c8f4ac45eefb76e96ee96e53}, + repository={https://github.com/nuprl/tag-sound}, + version={4cc09ca}, + date={2020} +} + diff --git a/macros/latex/contrib/l3backend/CHANGELOG.md b/macros/latex/contrib/l3backend/CHANGELOG.md index 68a0f8e377..e94dbb881d 100644 --- a/macros/latex/contrib/l3backend/CHANGELOG.md +++ b/macros/latex/contrib/l3backend/CHANGELOG.md @@ -6,6 +6,19 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2022-04-10] + +### Added +- Support for graphics (PDF) page count extraction + +### Fixed +- Setup for graphics extension searching +- Various internal issues in graphics inclusion +- Some missing functions for `dvisvgm` color support added + +### Removed +- Support for pre-2020-11-11 `dvipdfmx` + ## [2022-02-07] ### Fixed @@ -217,7 +230,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/2022-02-07...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2022-04-10...HEAD +[2022-04-10]: https://github.com/latex3/latex3/compare/2022-02-07...2022-04-10 [2022-02-07]: https://github.com/latex3/latex3/compare/2022-01-12...2022-02-07 [2022-01-12]: https://github.com/latex3/latex3/compare/2021-12-14...2022-01-12 [2021-12-14]: https://github.com/latex3/latex3/compare/2021-10-17...2021-12-14 diff --git a/macros/latex/contrib/l3backend/README.md b/macros/latex/contrib/l3backend/README.md index 31dccaaa60..470d6914a0 100644 --- a/macros/latex/contrib/l3backend/README.md +++ b/macros/latex/contrib/l3backend/README.md @@ -1,7 +1,7 @@ LaTeX3 Backend Drivers ====================== -Release 2022-02-07 +Release 2022-04-10 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/contrib/l3backend/l3backend-basics.dtx index d7c3c6e4c3..f4bf61fe70 100644 --- a/macros/latex/contrib/l3backend/l3backend-basics.dtx +++ b/macros/latex/contrib/l3backend/l3backend-basics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-07} +% \date{Released 2022-04-10} % % \maketitle % @@ -70,27 +70,27 @@ % \begin{macrocode} \ProvidesExplFile %<*dvipdfmx> - {l3backend-dvipdfmx.def}{2022-02-07}{} + {l3backend-dvipdfmx.def}{2022-04-10}{} {L3 backend support: dvipdfmx} % %<*dvips> - {l3backend-dvips.def}{2022-02-07}{} + {l3backend-dvips.def}{2022-04-10}{} {L3 backend support: dvips} % %<*dvisvgm> - {l3backend-dvisvgm.def}{2022-02-07}{} + {l3backend-dvisvgm.def}{2022-04-10}{} {L3 backend support: dvisvgm} % %<*luatex> - {l3backend-luatex.def}{2022-02-07}{} + {l3backend-luatex.def}{2022-04-10}{} {L3 backend support: PDF output (LuaTeX)} % %<*pdftex> - {l3backend-pdftex.def}{2022-02-07}{} + {l3backend-pdftex.def}{2022-04-10}{} {L3 backend support: PDF output (pdfTeX)} % %<*xetex> - {l3backend-xetex.def}{2022-02-07}{} + {l3backend-xetex.def}{2022-04-10}{} {L3 backend support: XeTeX} % % \end{macrocode} @@ -395,35 +395,6 @@ % \end{macro} % % \begin{macrocode} -%<@@=sys> -% \end{macrocode} -% -% \begin{macro}{\c__kernel_sys_dvipdfmx_version_int} -% A short excursion into the |sys| module to set up the backend version -% information. -% \begin{macrocode} -\group_begin: - \cs_set:Npn \@@_tmp:w #1 Version ~ #2 ~ #3 \q_stop {#2} - \sys_get_shell:nnNTF { extractbb~--version } - { \char_set_catcode_space:n { `\ } } - \l_@@_internal_tl - { - \int_const:Nn \c__kernel_sys_dvipdfmx_version_int - { - \exp_after:wN \@@_tmp:w \l_@@_internal_tl - \q_stop - } - } - { \int_const:Nn \c__kernel_sys_dvipdfmx_version_int { 0 } } -\group_end: -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -%<@@=> -% \end{macrocode} -% -% \begin{macrocode} % % \end{macrocode} % diff --git a/macros/latex/contrib/l3backend/l3backend-box.dtx b/macros/latex/contrib/l3backend/l3backend-box.dtx index 1d3450c78c..a732d60564 100644 --- a/macros/latex/contrib/l3backend/l3backend-box.dtx +++ b/macros/latex/contrib/l3backend/l3backend-box.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-07} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3backend/l3backend-code.pdf b/macros/latex/contrib/l3backend/l3backend-code.pdf index a3f052df2c..960a45053c 100644 Binary files a/macros/latex/contrib/l3backend/l3backend-code.pdf and b/macros/latex/contrib/l3backend/l3backend-code.pdf differ diff --git a/macros/latex/contrib/l3backend/l3backend-color.dtx b/macros/latex/contrib/l3backend/l3backend-color.dtx index 064c55fa60..815b41302a 100644 --- a/macros/latex/contrib/l3backend/l3backend-color.dtx +++ b/macros/latex/contrib/l3backend/l3backend-color.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-07} +% \date{Released 2022-04-10} % % \maketitle % @@ -203,54 +203,50 @@ % In \texttt{(x)dvipdfmx}, the base color stack is not set up, so we have to % force that, as well as providing a mechanism more generally. % \begin{macrocode} -\int_compare:nNnTF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } - { \cs_new_protected:Npn \__kernel_color_backend_stack_init:Nnn #1#2#3 { } } +\int_new:N \g_@@_backend_stack_int +\cs_new_protected:Npx \__kernel_color_backend_stack_init:Nnn #1#2#3 { - \int_new:N \g_@@_backend_stack_int - \cs_new_protected:Npx \__kernel_color_backend_stack_init:Nnn #1#2#3 + \int_gincr:N \exp_not:N \g_@@_backend_stack_int + \int_const:Nn #1 { \exp_not:N \g_@@_backend_stack_int } + \use:x { - \int_gincr:N \exp_not:N \g_@@_backend_stack_int - \int_const:Nn #1 { \exp_not:N \g_@@_backend_stack_int } - \use:x + \__kernel_backend_first_shipout:n { - \__kernel_backend_first_shipout:n + \__kernel_backend_literal:n { - \__kernel_backend_literal:n - { - pdfcolorstackinit ~ - \exp_not:N \int_use:N \exp_not:N \g_@@_backend_stack_int - \c_space_tl - \exp_not:N \tl_if_blank:nF {#2} { #2 ~ } - (#3) - } + pdfcolorstackinit ~ + \exp_not:N \int_use:N \exp_not:N \g_@@_backend_stack_int + \c_space_tl + \exp_not:N \tl_if_blank:nF {#2} { #2 ~ } + (#3) } - } - } - \cs_if_exist:cTF { main@pdfcolorstack } - { - \int_set:Nn \l_@@_backend_stack_int - { \int_use:c { main@pdfcolorstack } } - } - { - \__kernel_color_backend_stack_init:Nnn \c_@@_backend_main_stack_int - { page ~ direct } { 0 ~ g ~ 0 ~ G } - \int_set_eq:NN \l_@@_backend_stack_int - \c_@@_backend_main_stack_int - \int_const:cn { main@pdfcolorstack } { \c_@@_backend_main_stack_int } + } } + } +\cs_if_exist:cTF { main@pdfcolorstack } + { + \int_set:Nn \l_@@_backend_stack_int + { \int_use:c { main@pdfcolorstack } } + } + { + \__kernel_color_backend_stack_init:Nnn \c_@@_backend_main_stack_int + { page ~ direct } { 0 ~ g ~ 0 ~ G } + \int_set_eq:NN \l_@@_backend_stack_int + \c_@@_backend_main_stack_int + \int_const:cn { main@pdfcolorstack } { \c_@@_backend_main_stack_int } + } % \end{macrocode} % The backend automatically restores the stack color from the \enquote{classical} % approach (\texttt{pdf:bcolor}) after a scope. That will be an issue for us, so % we manually ensure that the one we are using is inserted. % \begin{macrocode} - \cs_gset_protected:Npn \__kernel_backend_scope_end: +\cs_gset_protected:Npn \__kernel_backend_scope_end: + { + \__kernel_backend_literal:n { x:grestore } + \__kernel_backend_literal:x { - \__kernel_backend_literal:n { x:grestore } - \__kernel_backend_literal:x - { - pdfcolorstack ~ - \int_use:N \g_@@_backend_stack_int \c_space_tl current - } + pdfcolorstack ~ + \int_use:N \g_@@_backend_stack_int \c_space_tl current } } % \end{macrocode} @@ -261,26 +257,23 @@ % \begin{macro}{\__kernel_color_backend_stack_pop:n} % Simple enough but needs a version check. % \begin{macrocode} -\int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } +\cs_new_protected:Npn \__kernel_color_backend_stack_push:nn #1#2 { - \cs_new_protected:Npn \__kernel_color_backend_stack_push:nn #1#2 + \__kernel_backend_literal:x { - \__kernel_backend_literal:x - { - pdfcolorstack ~ - \int_eval:n {#1} ~ - push ~ (#2) - } + pdfcolorstack ~ + \int_eval:n {#1} ~ + push ~ (#2) } - \cs_generate_variant:Nn \__kernel_color_backend_stack_push:nn { nx } - \cs_new_protected:Npn \__kernel_color_backend_stack_pop:n #1 + } +\cs_generate_variant:Nn \__kernel_color_backend_stack_push:nn { nx } +\cs_new_protected:Npn \__kernel_color_backend_stack_pop:n #1 + { + \__kernel_backend_literal:x { - \__kernel_backend_literal:x - { - pdfcolorstack ~ - \int_eval:n {#1} ~ - pop - } + pdfcolorstack ~ + \int_eval:n {#1} ~ + pop } } % \end{macrocode} @@ -440,10 +433,6 @@ % % \subsubsection{\texttt{dvipmdfx}/\XeTeX{}} % -% \begin{macrocode} -%<*dvipdfmx|xetex> -% \end{macrocode} -% % These backends have the most possible approaches: it recognises both % \texttt{dvips}-based color specials and it's own format, plus one can % include PDF statements directly. Recent releases also have a color stack @@ -452,32 +441,6 @@ % we have. Thus it is used in preference to the \texttt{dvips}-style interface % or the \enquote{native} color specials (which have only one stack). % -% \begin{macro} -% { -% \@@_backend_select_cmyk:n , -% \@@_backend_select_gray:n , -% \@@_backend_select_rgb:n -% } -% \begin{macro}{\@@_backend_reset:} -% Push the data to the stack. -% \begin{macrocode} -\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } - { - \cs_gset_protected:Npn \@@_backend_select_cmyk:n #1 - { \__kernel_backend_literal:n { pdf: bc ~ [#1] } } - \cs_gset_eq:NN \@@_backend_select_gray:n \@@_backend_select_cmyk:n - \cs_gset_eq:NN \@@_backend_select_rgb:n \@@_backend_select_cmyk:n - \cs_gset_protected:Npn \@@_backend_reset: - { \__kernel_backend_literal:n { pdf: ec } } - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macrocode} -% -% \end{macrocode} -% % \subsection{Separations} % % Here, life gets interesting and we need essentially one approach per @@ -1097,28 +1060,6 @@ % % \end{macrocode} % -% \begin{macrocode} -%<*dvipdfmx|xetex> -% \end{macrocode} -% -% \begin{macro}{\@@_backend_select_separation:nn, \@@_backend_select_devicen:nn} -% For older \texttt{(x)dvipdfmx}, we \emph{could} support separations using a -% dedicated mechanism, but it was not added that long before the color -% stacks. So instead of having two complex paths, just disable here. -% \begin{macrocode} -\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } - { - \cs_gset_protected:Npn \@@_backend_select_separation:nn #1#2 { } - \cs_gset_eq:NN \@@_backend_select_devicen:nn - \@@_backend_select_separation:nn - } -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -% -% \end{macrocode} -% % \subsection{Fill and stroke color} % % Here, \texttt{dvipdfmx}/\XeTeX{} follows \LuaTeX{} and \pdfTeX{}, @@ -1198,52 +1139,6 @@ % \end{macrocode} % % \begin{macrocode} -%<*dvipdfmx|xetex> -% \end{macrocode} -% -% \begin{macro} -% { -% \@@_backend_fill_cmyk:n , -% \@@_backend_fill_gray:n , -% \@@_backend_fill_rgb:n -% } -% \begin{macro}{\@@_backend_reset:} -% \begin{macro}{\@@_backend_stroke:n} -% \begin{macro}{\@@_backend_fill_separation:nn, \@@_backend_stroke_separation:nn} -% Deal with older \texttt{(x)dvipdfmx}. -% \begin{macrocode} -\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } - { - \cs_gset_protected:Npn \@@_backend_fill_cmyk:n #1 - { - \__kernel_backend_literal:n { pdf: bc ~ [#1] } - \group_insert_after:N \@@_backend_reset: - } - \cs_gset_eq:NN \@@_backend_fill_gray:n \@@_backend_fill_cmyk:n - \cs_gset_eq:NN \@@_backend_fill_rgb:n \@@_backend_fill_cmyk:n - \cs_gset_protected:Npn \@@_backend_reset: - { \__kernel_backend_literal:n { pdf: ec } } - \cs_gset_protected:Npn \@@_backend_stroke:n #1 - { \__kernel_backend_literal:n {#1} } - \cs_gset_protected:Npn \@@_backend_fill_separation:nn #1#2 { } - \cs_gset_eq:NN \@@_backend_fill_devicen:nn - \@@_backend_fill_separation:nn - \cs_gset_eq:NN \@@_backend_stroke_separation:nn - \@@_backend_fill_separation:nn - \cs_gset_eq:NN \@@_backend_stroke_devicen:nn - \@@_backend_stroke_separation:nn - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macrocode} -% -% \end{macrocode} -% -% \begin{macrocode} %<*dvips> % \end{macrocode} % @@ -1414,6 +1309,14 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\@@_backend_devicen_init:nnn, \@@_backend_iccbased_init:nnn} +% No support at present. +% \begin{macrocode} +\cs_new_protected:Npn \@@_backend_devicen_init:nnn #1#2#3 { } +\cs_new_protected:Npn \@@_backend_iccbased_init:nnn #1#2#3 { } +% \end{macrocode} +% \end{macro} +% % \begin{macrocode} % % \end{macrocode} diff --git a/macros/latex/contrib/l3backend/l3backend-draw.dtx b/macros/latex/contrib/l3backend/l3backend-draw.dtx index 43da62e394..0f9fcb6008 100644 --- a/macros/latex/contrib/l3backend/l3backend-draw.dtx +++ b/macros/latex/contrib/l3backend/l3backend-draw.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-07} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3backend/l3backend-graphics.dtx b/macros/latex/contrib/l3backend/l3backend-graphics.dtx index 37122b9a74..1bd6a7e336 100644 --- a/macros/latex/contrib/l3backend/l3backend-graphics.dtx +++ b/macros/latex/contrib/l3backend/l3backend-graphics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-07} +% \date{Released 2022-04-10} % % \maketitle % @@ -60,20 +60,48 @@ %<@@=graphics> % \end{macrocode} % +% \begin{macro}{\@@_backend_loaded:n} +% To deal with file load ordering. Plain users are on their own. +% \begin{macrocode} +\cs_new_protected:Npn \@@_backend_loaded:n #1 + { + \cs_if_exist:NTF \hook_gput_code:nnn + { + \hook_gput_code:nnn + { file / l3graphics.sty / after } + { backend } + {#1} + } + {#1} + } +% \end{macrocode} +% \end{macro} +% % \subsection{\texttt{dvips} backend} % % \begin{macrocode} %<*dvips> % \end{macrocode} % -% \begin{macro}{\@@_backend_getbb_eps:n} +% \begin{variable}{\l_graphics_search_ext_seq} +% \begin{macrocode} +\@@_backend_loaded:n + { \seq_set_from_clist:Nn \l_graphics_search_ext_seq { .eps , .ps } } +% \end{macrocode} +% \end{variable} +% +% \begin{macro}{\@@_backend_getbb_eps:n, \@@_backend_getbb_ps:n} % Simply use the generic function. % \begin{macrocode} -\cs_new_eq:NN \@@_backend_getbb_eps:n \graphics_read_bb:n +\@@_backend_loaded:n + { + \cs_new_eq:NN \@@_backend_getbb_eps:n \@@_read_bb:n + \cs_new_eq:NN \@@_backend_getbb_ps:n \@@_read_bb:n + } % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_backend_include_eps:n} +% \begin{macro}{\@@_backend_include_eps:n, \@@_backend_include_ps:n} % The special syntax is relatively clear here: remember we need PostScript % sizes here. % \begin{macrocode} @@ -82,12 +110,20 @@ \__kernel_backend_literal:x { PSfile = #1 \c_space_tl - llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl - lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl - urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl - ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim + llx = \dim_to_decimal_in_bp:n \l_@@_llx_dim \c_space_tl + lly = \dim_to_decimal_in_bp:n \l_@@_lly_dim \c_space_tl + urx = \dim_to_decimal_in_bp:n \l_@@_urx_dim \c_space_tl + ury = \dim_to_decimal_in_bp:n \l_@@_ury_dim } } +\cs_new_eq:NN \@@_backend_include_ps:n \@@_backend_include_eps:n +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_backend_get_pagecount:n} +% \begin{macrocode} +\@@_backend_loaded:n + { \cs_new_eq:NN \@@_backend_get_pagecount:n \@@_get_pagecount:n } % \end{macrocode} % \end{macro} % @@ -101,6 +137,17 @@ %<*luatex|pdftex> % \end{macrocode} % +% \begin{variable}{\l_graphics_search_ext_seq} +% \begin{macrocode} +\@@_backend_loaded:n + { + \seq_set_from_clist:Nn + \l_graphics_search_ext_seq + { .pdf , .eps , .png , .jpg , .jpeg } + } +% \end{macrocode} +% \end{variable} +% % \begin{variable}{\l_@@_graphics_attr_tl} % In PDF mode, additional attributes of an graphic (such as page number) are % needed both to obtain the bounding box and when inserting the graphic: this @@ -115,12 +162,18 @@ % % \begin{macro} % { -% \@@_backend_getbb_jpg:n, -% \@@_backend_getbb_pdf:n, +% \@@_backend_getbb_jpg:n , +% \@@_backend_getbb_jpeg:n , +% \@@_backend_getbb_pdf:n , % \@@_backend_getbb_png:n % } % \begin{macro} -% {\@@_backend_getbb_auxi:n, \@@_backend_getbb_auxii:n} +% { +% \@@_backend_getbb_auxi:n , +% \@@_backend_getbb_auxii:n , +% \@@_backend_getbb_auxiii:n +% } +% \begin{macro}[EXP]{\@@_backend_dequote:w} % Getting the bounding box here requires us to box up the graphic and % measure it. To deal with the difference in feature support in bitmap % and vector graphics but keeping the common parts, there is a little work @@ -130,78 +183,88 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_getbb_jpg:n #1 { - \int_zero:N \l_graphics_page_int - \tl_clear:N \l_graphics_pagebox_tl + \int_zero:N \l_@@_page_int + \tl_clear:N \l_@@_pagebox_tl \tl_set:Nx \l_@@_graphics_attr_tl { - \tl_if_empty:NF \l_graphics_decodearray_tl - { :D \l_graphics_decodearray_tl } - \bool_if:NT \l_graphics_interpolate_bool + \tl_if_empty:NF \l_@@_decodearray_str + { :D \l_@@_decodearray_str } + \bool_if:NT \l_@@_interpolate_bool { :I } } \tl_clear:N \l_@@_graphics_attr_tl \@@_backend_getbb_auxi:n {#1} } +\cs_new_eq:NN \@@_backend_getbb_jpeg:n \@@_backend_getbb_jpg:n \cs_new_eq:NN \@@_backend_getbb_png:n \@@_backend_getbb_jpg:n \cs_new_protected:Npn \@@_backend_getbb_pdf:n #1 { - \tl_clear:N \l_graphics_decodearray_tl - \bool_set_false:N \l_graphics_interpolate_bool + \tl_clear:N \l_@@_decodearray_str + \bool_set_false:N \l_@@_interpolate_bool \tl_set:Nx \l_@@_graphics_attr_tl { - : \l_graphics_pagebox_tl - \int_compare:nNnT \l_graphics_page_int > 1 - { :P \int_use:N \l_graphics_page_int } + : \l_@@_pagebox_tl + \int_compare:nNnT \l_@@_page_int > 1 + { :P \int_use:N \l_@@_page_int } } \@@_backend_getbb_auxi:n {#1} } \cs_new_protected:Npn \@@_backend_getbb_auxi:n #1 { - \graphics_bb_restore:xF { #1 \l_@@_graphics_attr_tl } + \@@_bb_restore:xF { #1 \l_@@_graphics_attr_tl } { \@@_backend_getbb_auxii:n {#1} } } % \end{macrocode} % Measuring the graphic is done by boxing up: for PDF graphics we could % use |\tex_pdfximagebbox:D|, but if doesn't work for other types. % As the box always starts at $(0,0)$ there is no need to worry about -% the lower-left position. +% the lower-left position. Quotes need to be \emph{removed} as \LuaTeX{} +% does not like them here. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_getbb_auxii:n #1 + { + \exp_args:Ne \@@_backend_getbb_auxiii:n + { \@@_backend_dequote:w #1 " #1 " \s_@@_stop } + \int_const:cn { c_@@_ #1 \l_@@_graphics_attr_tl _int } + { \tex_the:D \tex_pdflastximage:D } + \@@_bb_save:x { #1 \l_@@_graphics_attr_tl } + } +\cs_new_protected:Npn \@@_backend_getbb_auxiii:n #1 { \tex_immediate:D \tex_pdfximage:D \bool_lazy_or:nnT - { \l_graphics_interpolate_bool } - { ! \tl_if_empty_p:N \l_graphics_decodearray_tl } + { \l_@@_interpolate_bool } + { ! \tl_if_empty_p:N \l_@@_decodearray_str } { attr ~ { - \tl_if_empty:NF \l_graphics_decodearray_tl - { /Decode~[ \l_graphics_decodearray_tl ] } - \bool_if:NT \l_graphics_interpolate_bool + \tl_if_empty:NF \l_@@_decodearray_str + { /Decode~[ \l_@@_decodearray_str ] } + \bool_if:NT \l_@@_interpolate_bool { /Interpolate~true } } } - \int_compare:nNnT \l_graphics_page_int > 0 - { page ~ \int_use:N \l_graphics_page_int } - \tl_if_empty:NF \l_graphics_pagebox_tl - { \l_graphics_pagebox_tl } + \int_compare:nNnT \l_@@_page_int > 0 + { page ~ \int_use:N \l_@@_page_int } + \tl_if_empty:NF \l_@@_pagebox_tl + { \l_@@_pagebox_tl } {#1} \hbox_set:Nn \l_@@_internal_box { \tex_pdfrefximage:D \tex_pdflastximage:D } - \dim_set:Nn \l_graphics_urx_dim { \box_wd:N \l_@@_internal_box } - \dim_set:Nn \l_graphics_ury_dim { \box_ht:N \l_@@_internal_box } - \int_const:cn { c_@@_graphics_ #1 \l_@@_graphics_attr_tl _int } - { \tex_the:D \tex_pdflastximage:D } - \graphics_bb_save:x { #1 \l_@@_graphics_attr_tl } + \dim_set:Nn \l_@@_urx_dim { \box_wd:N \l_@@_internal_box } + \dim_set:Nn \l_@@_ury_dim { \box_ht:N \l_@@_internal_box } } +\cs_new:Npn \@@_backend_dequote:w #1 " #2 " #3 \s_@@_stop {#2} % \end{macrocode} % \end{macro} % \end{macro} +% \end{macro} % % \begin{macro} % { -% \@@_backend_include_jpg:n, -% \@@_backend_include_pdf:n, +% \@@_backend_include_jpg:n , +% \@@_backend_include_jpeg:n , +% \@@_backend_include_pdf:n , % \@@_backend_include_png:n % } % Images are already loaded for the measurement part of the code, so @@ -211,8 +274,9 @@ \cs_new_protected:Npn \@@_backend_include_jpg:n #1 { \tex_pdfrefximage:D - \int_use:c { c_@@_graphics_ #1 \l_@@_graphics_attr_tl _int } + \int_use:c { c_@@_ #1 \l_@@_graphics_attr_tl _int } } +\cs_new_eq:NN \@@_backend_include_jpeg:n \@@_backend_include_jpg:n \cs_new_eq:NN \@@_backend_include_pdf:n \@@_backend_include_jpg:n \cs_new_eq:NN \@@_backend_include_png:n \@@_backend_include_jpg:n % \end{macrocode} @@ -241,8 +305,12 @@ \l_@@_backend_ext_str \exp_args:Nx \@@_backend_getbb_eps:nn { - \l_@@_backend_name_str - \str_tail:N \l_@@_backend_ext_str - -converted-to.pdf + \exp_args:Ne \__kernel_file_name_quote:n + { + \l_@@_backend_name_str + - \str_tail:N \l_@@_backend_ext_str + -converted-to.pdf + } } {#1} } @@ -253,7 +321,7 @@ \sys_shell_now:n { repstopdf ~ #2 ~ #1 } } - \tl_set:Nn \l_graphics_name_tl {#1} + \tl_set:Nn \l_@@_final_name_str {#1} \@@_backend_getbb_pdf:n {#1} } \cs_new_protected:Npn \@@_backend_include_eps:n #1 @@ -262,8 +330,12 @@ \l_@@_backend_dir_str \l_@@_backend_name_str \l_@@_backend_ext_str \exp_args:Nx \@@_backend_include_pdf:n { - \l_@@_backend_name_str - \str_tail:N \l_@@_backend_ext_str - -converted-to.pdf + \exp_args:Ne \__kernel_file_name_quote:n + { + \l_@@_backend_name_str + - \str_tail:N \l_@@_backend_ext_str + -converted-to.pdf + } } } } @@ -273,6 +345,18 @@ % \end{macro} % \end{macro} % +% \begin{macro}{\@@_backend_get_pagecount:n} +% Simply load and store. +% \begin{macrocode} +\cs_new_protected:Npn \@@_backend_get_pagecount:n #1 + { + \tex_immediate:D \tex_pdfximage:D {#1} + \int_const:cn { c_@@_ #1 _pages_int } + { \int_use:N \tex_pdflastximagepages:D } + } +% \end{macrocode} +% \end{macro} +% % \begin{macrocode} % % \end{macrocode} @@ -283,28 +367,46 @@ %<*dvipdfmx|xetex> % \end{macrocode} % +% \begin{variable}{\l_graphics_search_ext_seq} +% \begin{macrocode} +\@@_backend_loaded:n + { + \seq_set_from_clist:Nn \l_graphics_search_ext_seq + { .pdf , .eps , .ps , .png , .jpg ., jpeg , .bmp } + } +% \end{macrocode} +% \end{variable} +% % \begin{macro} % { -% \@@_backend_getbb_eps:n, \@@_backend_getbb_jpg:n, -% \@@_backend_getbb_pdf:n, \@@_backend_getbb_png:n +% \@@_backend_getbb_eps:n , +% \@@_backend_getbb_jpg:n , \@@_backend_getbb_jpeg:n , +% \@@_backend_getbb_pdf:n , \@@_backend_getbb_png:n , +% \@@_backend_getbb_bmp:n % } % Simply use the generic functions: only for \texttt{dvipdfmx} in the % extraction cases. % \begin{macrocode} -\cs_new_eq:NN \@@_backend_getbb_eps:n \graphics_read_bb:n +\@@_backend_loaded:n + { + \cs_new_eq:NN \@@_backend_getbb_eps:n \@@_read_bb:n + \cs_new_eq:NN \@@_backend_getbb_ps:n \@@_read_bb:n + } %<*dvipdfmx> \cs_new_protected:Npn \@@_backend_getbb_jpg:n #1 { - \int_zero:N \l_graphics_page_int - \tl_clear:N \l_graphics_pagebox_tl - \graphics_extract_bb:n {#1} + \int_zero:N \l_@@_page_int + \tl_clear:N \l_@@_pagebox_tl + \@@_extract_bb:n {#1} } +\cs_new_eq:NN \@@_backend_getbb_jpeg:n \@@_backend_getbb_jpg:n \cs_new_eq:NN \@@_backend_getbb_png:n \@@_backend_getbb_jpg:n +\cs_new_eq:NN \@@_backend_getbb_bmp:n \@@_backend_getbb_jpg:n \cs_new_protected:Npn \@@_backend_getbb_pdf:n #1 { - \tl_clear:N \l_graphics_decodearray_tl - \bool_set_false:N \l_graphics_interpolate_bool - \graphics_extract_bb:n {#1} + \tl_clear:N \l_@@_decodearray_str + \bool_set_false:N \l_@@_interpolate_bool + \@@_extract_bb:n {#1} } % % \end{macrocode} @@ -319,8 +421,10 @@ % % \begin{macro} % { -% \@@_backend_include_eps:n, \@@_backend_include_jpg:n, -% \@@_backend_include_pdf:n, \@@_backend_include_png:n +% \@@_backend_include_eps:n , \@@_backend_include_ps:n , +% \@@_backend_include_jpg:n , \@@_backend_include_jpseg:n , +% \@@_backend_include_pdf:n , \@@_backend_include_png:n , +% \@@_backend_include_bmp:n , % } % \begin{macro}{\@@_backend_include_auxi:nn} % \begin{macro}{\@@_backend_include_auxii:nnn, \@@_backend_include_auxii:xnn} @@ -335,15 +439,18 @@ \__kernel_backend_literal:x { PSfile = #1 \c_space_tl - llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl - lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl - urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl - ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim + llx = \dim_to_decimal_in_bp:n \l_@@_llx_dim \c_space_tl + lly = \dim_to_decimal_in_bp:n \l_@@_lly_dim \c_space_tl + urx = \dim_to_decimal_in_bp:n \l_@@_urx_dim \c_space_tl + ury = \dim_to_decimal_in_bp:n \l_@@_ury_dim } } +\cs_new_eq:NN \@@_backend_include_ps:n \@@_backend_include_eps:n \cs_new_protected:Npn \@@_backend_include_jpg:n #1 { \@@_backend_include_auxi:nn {#1} { image } } +\cs_new_eq:NN \@@_backend_include_jpeg:n \@@_backend_include_jpg:n \cs_new_eq:NN \@@_backend_include_png:n \@@_backend_include_jpg:n +\cs_new_eq:NN \@@_backend_include_bmp:n \@@_backend_include_jpg:n %<*dvipdfmx> \cs_new_protected:Npn \@@_backend_include_pdf:n #1 { \@@_backend_include_auxi:nn {#1} { epdf } } @@ -358,23 +465,23 @@ { \@@_backend_include_auxii:xnn { - \tl_if_empty:NF \l_graphics_pagebox_tl - { : \l_graphics_pagebox_tl } - \int_compare:nNnT \l_graphics_page_int > 1 - { :P \int_use:N \l_graphics_page_int } - \tl_if_empty:NF \l_graphics_decodearray_tl - { :D \l_graphics_decodearray_tl } - \bool_if:NT \l_graphics_interpolate_bool + \tl_if_empty:NF \l_@@_pagebox_tl + { : \l_@@_pagebox_tl } + \int_compare:nNnT \l_@@_page_int > 1 + { :P \int_use:N \l_@@_page_int } + \tl_if_empty:NF \l_@@_decodearray_str + { :D \l_@@_decodearray_str } + \bool_if:NT \l_@@_interpolate_bool { :I } } {#1} {#2} } \cs_new_protected:Npn \@@_backend_include_auxii:nnn #1#2#3 { - \int_if_exist:cTF { c_@@_graphics_ #2#1 _int } + \int_if_exist:cTF { c_@@_ #2#1 _int } { \__kernel_backend_literal:x - { pdf:usexobj~@graphic \int_use:c { c_@@_graphics_ #2#1 _int } } + { pdf:usexobj~@graphic \int_use:c { c_@@_ #2#1 _int } } } { \@@_backend_include_auxiii:nnn {#2} {#1} {#3} } } @@ -388,31 +495,31 @@ \cs_new_protected:Npn \@@_backend_include_auxiii:nnn #1#2#3 { \int_gincr:N \g_@@_track_int - \int_const:cn { c_@@_graphics_ #1#2 _int } { \g_@@_track_int } + \int_const:cn { c_@@_ #1#2 _int } { \g_@@_track_int } \__kernel_backend_literal:x { pdf:#3~ - @graphic \int_use:c { c_@@_graphics_ #1#2 _int } ~ - \int_compare:nNnT \l_graphics_page_int > 1 - { page ~ \int_use:N \l_graphics_page_int \c_space_tl } - \tl_if_empty:NF \l_graphics_pagebox_tl + @graphic \int_use:c { c_@@_ #1#2 _int } ~ + \int_compare:nNnT \l_@@_page_int > 1 + { page ~ \int_use:N \l_@@_page_int \c_space_tl } + \tl_if_empty:NF \l_@@_pagebox_tl { - pagebox ~ \l_graphics_pagebox_tl \c_space_tl + pagebox ~ \l_@@_pagebox_tl \c_space_tl bbox ~ - \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl - \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl - \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl - \dim_to_decimal_in_bp:n \l_graphics_ury_dim \c_space_tl + \dim_to_decimal_in_bp:n \l_@@_llx_dim \c_space_tl + \dim_to_decimal_in_bp:n \l_@@_lly_dim \c_space_tl + \dim_to_decimal_in_bp:n \l_@@_urx_dim \c_space_tl + \dim_to_decimal_in_bp:n \l_@@_ury_dim \c_space_tl } (#1) \bool_lazy_or:nnT - { \l_graphics_interpolate_bool } - { ! \tl_if_empty_p:N \l_graphics_decodearray_tl } + { \l_@@_interpolate_bool } + { ! \tl_if_empty_p:N \l_@@_decodearray_str } { << - \tl_if_empty:NF \l_graphics_decodearray_tl - { /Decode~[ \l_graphics_decodearray_tl ] } - \bool_if:NT \l_graphics_interpolate_bool + \tl_if_empty:NF \l_@@_decodearray_str + { /Decode~[ \l_@@_decodearray_str ] } + \bool_if:NT \l_@@_interpolate_bool { /Interpolate~true> } >> } @@ -424,6 +531,15 @@ % \end{macro} % \end{macro} % +% \begin{macro}{\@@_backend_get_pagecount:n} +% \begin{macrocode} +%<*dvipdfmx> +\@@_backend_loaded:n + { \cs_new_eq:NN \@@_backend_get_pagecount:n \@@_get_pagecount:n } +% +% \end{macrocode} +% \end{macro} +% % \begin{macrocode} % % \end{macrocode} @@ -434,13 +550,13 @@ %<*xetex> % \end{macrocode} % -% \subsubsection{Images} -% % \begin{macro} % { -% \@@_backend_getbb_jpg:n, -% \@@_backend_getbb_pdf:n, -% \@@_backend_getbb_png:n +% \@@_backend_getbb_jpg:n , +% \@@_backend_getbb_jpeg:n , +% \@@_backend_getbb_pdf:n , +% \@@_backend_getbb_png:n , +% \@@_backend_getbb_bmp:n % } % \begin{macro}{\@@_backend_getbb_auxi:nN} % \begin{macro}{\@@_backend_getbb_auxii:nnN, \@@_backend_getbb_auxii:VnN} @@ -456,21 +572,23 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_getbb_jpg:n #1 { - \int_zero:N \l_graphics_page_int - \tl_clear:N \l_graphics_pagebox_tl + \int_zero:N \l_@@_page_int + \tl_clear:N \l_@@_pagebox_tl \@@_backend_getbb_auxi:nN {#1} \tex_XeTeXpicfile:D } +\cs_new_eq:NN \@@_backend_getbb_jpeg:n \@@_backend_getbb_jpg:n \cs_new_eq:NN \@@_backend_getbb_png:n \@@_backend_getbb_jpg:n +\cs_new_eq:NN \@@_backend_getbb_bmp:n \@@_backend_getbb_jpg:n \cs_new_protected:Npn \@@_backend_getbb_pdf:n #1 { - \tl_clear:N \l_graphics_decodearray_tl - \bool_set_false:N \l_graphics_interpolate_bool + \tl_clear:N \l_@@_decodearray_str + \bool_set_false:N \l_@@_interpolate_bool \@@_backend_getbb_auxi:nN {#1} \tex_XeTeXpdffile:D } \cs_new_protected:Npn \@@_backend_getbb_auxi:nN #1#2 { - \int_compare:nNnTF \l_graphics_page_int > 1 - { \@@_backend_getbb_auxii:VnN \l_graphics_page_int {#1} #2 } + \int_compare:nNnTF \l_@@_page_int > 1 + { \@@_backend_getbb_auxii:VnN \l_@@_page_int {#1} #2 } { \@@_backend_getbb_auxiii:nNnn {#1} #2 { :P 1 } { page 1 } } } \cs_new_protected:Npn \@@_backend_getbb_auxii:nnN #1#2#3 @@ -478,8 +596,8 @@ \cs_generate_variant:Nn \@@_backend_getbb_auxii:nnN { V } \cs_new_protected:Npn \@@_backend_getbb_auxiii:nNnn #1#2#3#4 { - \tl_if_empty:NTF \l_graphics_pagebox_tl - { \@@_backend_getbb_auxiv:VnNnn \l_graphics_pagebox_tl } + \tl_if_empty:NTF \l_@@_pagebox_tl + { \@@_backend_getbb_auxiv:VnNnn \l_@@_pagebox_tl } { \@@_backend_getbb_auxv:nNnn } {#1} #2 {#3} {#4} } @@ -488,21 +606,25 @@ \use:x { \@@_backend_getbb_auxv:nNnn {#2} #3 { : #1 #4 } - { #5 ~ \@@_backend_getbb_pagebox:w #1 } + { + #5 + \tl_if_blank:nF {#1} + { \c_space_tl \@@_backend_getbb_pagebox:w #1 } + } } } \cs_generate_variant:Nn \@@_backend_getbb_auxiv:nnNnn { V } \cs_new_protected:Npn \@@_backend_getbb_auxv:nNnn #1#2#3#4 { - \graphics_bb_restore:nF {#1#3} + \@@_bb_restore:nF {#1#3} { \@@_backend_getbb_auxvi:nNnn {#1} #2 {#3} {#4} } } \cs_new_protected:Npn \@@_backend_getbb_auxvi:nNnn #1#2#3#4 { \hbox_set:Nn \l_@@_internal_box { #2 #1 ~ #4 } - \dim_set:Nn \l_graphics_urx_dim { \box_wd:N \l_@@_internal_box } - \dim_set:Nn \l_graphics_ury_dim { \box_ht:N \l_@@_internal_box } - \graphics_bb_save:n {#1#3} + \dim_set:Nn \l_@@_urx_dim { \box_wd:N \l_@@_internal_box } + \dim_set:Nn \l_@@_ury_dim { \box_ht:N \l_@@_internal_box } + \@@_bb_save:n {#1#3} } \cs_new:Npn \@@_backend_getbb_pagebox:w #1 box {#1} % \end{macrocode} @@ -515,7 +637,6 @@ % \end{macro} % % \begin{macro}{\@@_backend_include_pdf:n} -% \begin{macro}{\@@_backend_include_bitmap_quote:w} % For PDF graphics, properly supporting the |pagebox| concept in \XeTeX{} % is best done using the |\tex_XeTeXpdffile:D| primitive. The syntax here % is the same as for the graphic measurement part, although we know at this @@ -523,16 +644,27 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_include_pdf:n #1 { - \tex_XeTeXpdffile:D - \@@_backend_include_pdf_quote:w #1 "#1" \s_@@_stop \c_space_tl - \int_compare:nNnT \l_graphics_page_int > 0 - { page ~ \int_use:N \l_graphics_page_int \c_space_tl } - \exp_after:wN \@@_backend_getbb_pagebox:w \l_graphics_pagebox_tl + \tex_XeTeXpdffile:D #1 ~ + \int_compare:nNnT \l_@@_page_int > 0 + { page ~ \int_use:N \l_@@_page_int \c_space_tl } + \exp_after:wN \@@_backend_getbb_pagebox:w \l_@@_pagebox_tl } -\cs_new:Npn \@@_backend_include_pdf_quote:w #1 " #2 " #3 \s_@@_stop - { " #2 " } % \end{macrocode} % \end{macro} +% +% \begin{macro}{\@@_backend_get_pagecount:n} +% Very little to do here other than cover the case of a non-PDF file. +% \begin{macrocode} +\cs_new_protected:Npn \@@_backend_get_pagecount:n #1 + { + \int_const:cn { c_@@_ #1 _pages_int } + { + \int_max:nn + { \int_use:N \tex_XeTeXpdfpagecount:D #1 ~ } + { 1 } + } + } +% \end{macrocode} % \end{macro} % % \begin{macrocode} @@ -545,22 +677,35 @@ %<*dvisvgm> % \end{macrocode} % +% \begin{variable}{\l_graphics_search_ext_seq} +% \begin{macrocode} +\@@_backend_loaded:n + { + \seq_set_from_clist:Nn + \l_graphics_search_ext_seq + { .pdf , .eps , .png , .jpg , .jpeg } + } +% \end{macrocode} +% \end{variable} +% % \begin{macro}{\@@_backend_getbb_eps:n} % Simply use the generic function. % \begin{macrocode} -\cs_new_eq:NN \@@_backend_getbb_eps:n \graphics_read_bb:n +\@@_backend_loaded:n + { \cs_new_eq:NN \@@_backend_getbb_eps:n \@@_read_bb:n } % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_backend_getbb_png:n, \@@_backend_getbb_jpg:n} +% \begin{macro}{\@@_backend_getbb_png:n, \@@_backend_getbb_jpg:n, \@@_backend_getbb_jpeg:n} % These can be included by extracting the bounding box data. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_getbb_jpg:n #1 { - \int_zero:N \l_graphics_page_int - \tl_clear:N \l_graphics_pagebox_tl - \graphics_extract_bb:n {#1} + \int_zero:N \l_@@_page_int + \tl_clear:N \l_@@_pagebox_tl + \@@_extract_bb:n {#1} } +\cs_new_eq:NN \@@_backend_getbb_jpeg:n \@@_backend_getbb_jpg:n \cs_new_eq:NN \@@_backend_getbb_png:n \@@_backend_getbb_jpg:n % \end{macrocode} % \end{macro} @@ -570,9 +715,9 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_getbb_pdf:n #1 { - \tl_clear:N \l_graphics_decodearray_tl - \bool_set_false:N \l_graphics_interpolate_bool - \graphics_extract_bb:n {#1} + \tl_clear:N \l_@@_decodearray_str + \bool_set_false:N \l_@@_interpolate_bool + \@@_extract_bb:n {#1} } % \end{macrocode} % \end{macro} @@ -583,25 +728,30 @@ % sizes here. (This is the same as the \texttt{dvips} code.) % \begin{macrocode} \cs_new_protected:Npn \@@_backend_include_eps:n #1 - { @@_backend_include:nn { PSfile } {#1} } + { \@@_backend_include:nn { PSfile } {#1} } \cs_new_protected:Npn \@@_backend_include_pdf:n #1 - { @@_backend_include:nn { pdffile } {#1} } + { \@@_backend_include:nn { pdffile } {#1} } \cs_new_protected:Npn \@@_backend_include:nn #1#2 { \__kernel_backend_literal:x { #1 = #2 \c_space_tl - llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl - lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl - urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl - ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim + llx = \dim_to_decimal_in_bp:n \l_@@_llx_dim \c_space_tl + lly = \dim_to_decimal_in_bp:n \l_@@_lly_dim \c_space_tl + urx = \dim_to_decimal_in_bp:n \l_@@_urx_dim \c_space_tl + ury = \dim_to_decimal_in_bp:n \l_@@_ury_dim } } % \end{macrocode} % \end{macro} % \end{macro} % -% \begin{macro}{\@@_backend_include_png:n, \@@_backend_include_jpg:n} +% \begin{macro} +% { +% \@@_backend_include_png:n , +% \@@_backend_include_jpg:n , +% \@@_backend_include_jpeg:n +% } % \begin{macro}{\@@_backend_include_bitmap_quote:w} % The backend here has built-in support for basic graphic inclusion (see % \texttt{dvisvgm.def} for a more complex approach, needed if clipping, @@ -615,11 +765,12 @@ \__kernel_backend_literal:x { dvisvgm:img~ - \dim_to_decimal:n { \l_graphics_ury_dim } ~ - \dim_to_decimal:n { \l_graphics_ury_dim } ~ + \dim_to_decimal:n { \l_@@_ury_dim } ~ + \dim_to_decimal:n { \l_@@_ury_dim } ~ \@@_backend_include_bitmap_quote:w #1 " #1 " \s_@@_stop } } +\cs_new_eq:NN \@@_backend_include_jpeg:n \@@_backend_include_png:n \cs_new_eq:NN \@@_backend_include_jpg:n \@@_backend_include_png:n \cs_new:Npn \@@_backend_include_bitmap_quote:w #1 " #2 " #3 \s_@@_stop { " #2 " } @@ -627,6 +778,13 @@ % \end{macro} % \end{macro} % +% \begin{macro}{\@@_backend_get_pagecount:n} +% \begin{macrocode} +\@@_backend_loaded:n + { \cs_new_eq:NN \@@_backend_get_pagecount:n \@@_get_pagecount:n } +% \end{macrocode} +% \end{macro} +% % \begin{macrocode} % % \end{macrocode} diff --git a/macros/latex/contrib/l3backend/l3backend-header.dtx b/macros/latex/contrib/l3backend/l3backend-header.dtx index fe05e97760..5eacda7b9f 100644 --- a/macros/latex/contrib/l3backend/l3backend-header.dtx +++ b/macros/latex/contrib/l3backend/l3backend-header.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-07} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3backend/l3backend-opacity.dtx b/macros/latex/contrib/l3backend/l3backend-opacity.dtx index a38736bc5a..89d60de0df 100644 --- a/macros/latex/contrib/l3backend/l3backend-opacity.dtx +++ b/macros/latex/contrib/l3backend/l3backend-opacity.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-07} +% \date{Released 2022-04-10} % % \maketitle % @@ -239,49 +239,6 @@ % \end{macrocode} % % \begin{macrocode} -%<*dvipdfmx|xdvipdfmx> -% \end{macrocode} -% -% \begin{macro}{\@@_backend_select:n} -% Older backends have no stack support, so everything is done directly. -% \begin{macrocode} -\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } - { - \cs_gset_protected:Npn \@@_backend_select_aux:n #1 - { - \tl_set:Nn \l_@@_backend_fill_tl {#1} - \tl_set:Nn \l_@@_backend_stroke_tl {#1} - \pdfmanagement_add:nnn { Page / Resources / ExtGState } - { opacity #1 } - { << /ca ~ #1 /CA ~ #1 >> } - \__kernel_backend_literal_pdf:n { /opacity #1 ~ gs } - } - \cs_gset_protected:Npn \@@_backend_fill_stroke:nn #1#2 - { - \str_if_eq:nnTF {#1} {#2} - { \@@_backend_select_aux:n {#1} } - { - \tl_set:Nn \l_@@_backend_fill_tl {#1} - \tl_set:Nn \l_@@_backend_stroke_tl {#2} - \pdfmanagement_add:nnn { Page / Resources / ExtGState } - { opacity.fill #1 } - { << /ca ~ #1 >> } - \pdfmanagement_add:nnn { Page / Resources / ExtGState } - { opacity.stroke #1 } - { << /CA ~ #2 >> } - \__kernel_backend_literal_pdf:n - { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs } - } - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -% -% \end{macrocode} -% -% \begin{macrocode} %<*dvisvgm> % \end{macrocode} % diff --git a/macros/latex/contrib/l3backend/l3backend-pdf.dtx b/macros/latex/contrib/l3backend/l3backend-pdf.dtx index 7b642b1a46..03435b2454 100644 --- a/macros/latex/contrib/l3backend/l3backend-pdf.dtx +++ b/macros/latex/contrib/l3backend/l3backend-pdf.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-07} +% \date{Released 2022-04-10} % % \maketitle % @@ -1421,19 +1421,13 @@ { \@@_backend_link_begin:n {#1#2} } \cs_new_protected:Npx \@@_backend_link_begin:n #1 { - \int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } - { - \exp_not:N \int_gincr:N \exp_not:N \g_@@_backend_link_int - } + \exp_not:N \int_gincr:N \exp_not:N \g_@@_backend_link_int \@@_backend:x { bann ~ - \int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } - { - @pdf.lnk - \exp_not:N \int_use:N \exp_not:N \g_@@_backend_link_int - \c_space_tl - } + @pdf.lnk + \exp_not:N \int_use:N \exp_not:N \g_@@_backend_link_int + \c_space_tl << /Type /Annot #1 @@ -1451,14 +1445,8 @@ % Available using the backend mechanism with a suitably-recent % version. % \begin{macrocode} -\cs_new:Npx \@@_backend_link_last: - { - \int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } - { - @pdf.lnk - \exp_not:N \int_use:N \exp_not:N \g_@@_backend_link_int - } - } +\cs_new:Npn \@@_backend_link_last: + { @pdf.lnk \int_use:N \g_@@_backend_link_int } % \end{macrocode} % \end{macro} % diff --git a/macros/latex/contrib/l3experimental/CHANGELOG.md b/macros/latex/contrib/l3experimental/CHANGELOG.md index adb32cd3b1..eb5896536a 100644 --- a/macros/latex/contrib/l3experimental/CHANGELOG.md +++ b/macros/latex/contrib/l3experimental/CHANGELOG.md @@ -7,6 +7,16 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2022-04-10] + +### Added +- `\graphics_get_pagecount:nN(TF)` + +### Changed +- Return an empty `seq` when `\sys_shell_split_ls:nN` is applied with a + glob which matched no entries +- Heavily revise `l3graphics` to provide only necessary public interfaces + ## [2022-02-05] ### Changed @@ -236,7 +246,8 @@ this project uses date-based 'snapshot' version identifiers. - New `l3color` module using `xcolor`-like expression syntax - New `l3draw` module, based on `pgf` layer of the TikZ system -[Unreleased]: https://github.com/latex3/latex3/compare/2022-02-05...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2022-04-10...HEAD +[2022-04-10]: https://github.com/latex3/latex3/compare/2022-02-05...2022-04-10 [2022-02-05]: https://github.com/latex3/latex3/compare/2021-11-12...2022-02-05 [2021-11-12]: https://github.com/latex3/latex3/compare/2021-08-27...2021-11-12 [2021-08-27]: https://github.com/latex3/latex3/compare/2021-08-04...2021-08-27 diff --git a/macros/latex/contrib/l3experimental/README.md b/macros/latex/contrib/l3experimental/README.md index 279ce50562..8d02dbf001 100644 --- a/macros/latex/contrib/l3experimental/README.md +++ b/macros/latex/contrib/l3experimental/README.md @@ -1,7 +1,7 @@ Experimental LaTeX3 Concepts ============================ -Release 2022-02-05 +Release 2022-04-10 Overview -------- diff --git a/macros/latex/contrib/l3experimental/l3benchmark.dtx b/macros/latex/contrib/l3experimental/l3benchmark.dtx index e5d50ecf58..0eb34e5c0c 100644 --- a/macros/latex/contrib/l3experimental/l3benchmark.dtx +++ b/macros/latex/contrib/l3experimental/l3benchmark.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2022-02-05} +% \date{Released 2022-04-10} % % \maketitle % @@ -122,7 +122,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3benchmark}{2022-02-05}{} +\ProvidesExplPackage{l3benchmark}{2022-04-10}{} {L3 Experimental benchmarking} % \end{macrocode} % diff --git a/macros/latex/contrib/l3experimental/l3benchmark.pdf b/macros/latex/contrib/l3experimental/l3benchmark.pdf index 951852e501..e5f7ea9bc1 100644 Binary files a/macros/latex/contrib/l3experimental/l3benchmark.pdf and b/macros/latex/contrib/l3experimental/l3benchmark.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3bitset.dtx b/macros/latex/contrib/l3experimental/l3bitset.dtx index 7eba4d0315..3443ca7d25 100644 --- a/macros/latex/contrib/l3experimental/l3bitset.dtx +++ b/macros/latex/contrib/l3experimental/l3bitset.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2022-02-05} +% \date{Released 2022-04-10} % % \maketitle % \begin{documentation} @@ -264,7 +264,7 @@ %<@@=bitset> % \end{macrocode} % \begin{macrocode} -\ProvidesExplPackage{l3bitset}{2022-02-05}{} +\ProvidesExplPackage{l3bitset}{2022-04-10}{} {L3 Experimental bitset support} % \end{macrocode} % A bitset is a string variable. diff --git a/macros/latex/contrib/l3experimental/l3bitset.pdf b/macros/latex/contrib/l3experimental/l3bitset.pdf index 410e5313ac..47e6e50d2b 100644 Binary files a/macros/latex/contrib/l3experimental/l3bitset.pdf and b/macros/latex/contrib/l3experimental/l3bitset.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3draw-boxes.dtx b/macros/latex/contrib/l3experimental/l3draw-boxes.dtx index 40e6f265ae..926ff3387e 100644 --- a/macros/latex/contrib/l3experimental/l3draw-boxes.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-boxes.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2022-02-05} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3experimental/l3draw-code.pdf b/macros/latex/contrib/l3experimental/l3draw-code.pdf index b8cb75e007..31b8834d68 100644 Binary files a/macros/latex/contrib/l3experimental/l3draw-code.pdf and b/macros/latex/contrib/l3experimental/l3draw-code.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3draw-layers.dtx b/macros/latex/contrib/l3experimental/l3draw-layers.dtx index d161240988..e82e7a1e2a 100644 --- a/macros/latex/contrib/l3experimental/l3draw-layers.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-layers.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2022-02-05} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3experimental/l3draw-paths.dtx b/macros/latex/contrib/l3experimental/l3draw-paths.dtx index 0c78addf92..024faef324 100644 --- a/macros/latex/contrib/l3experimental/l3draw-paths.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-paths.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2022-02-05} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3experimental/l3draw-points.dtx b/macros/latex/contrib/l3experimental/l3draw-points.dtx index 379dc45e4a..fe3c28351e 100644 --- a/macros/latex/contrib/l3experimental/l3draw-points.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-points.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2022-02-05} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3experimental/l3draw-scopes.dtx b/macros/latex/contrib/l3experimental/l3draw-scopes.dtx index 339e7dde97..2fcc7e8ac0 100644 --- a/macros/latex/contrib/l3experimental/l3draw-scopes.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-scopes.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2022-02-05} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3experimental/l3draw-softpath.dtx b/macros/latex/contrib/l3experimental/l3draw-softpath.dtx index 04a05acc57..53dfd48728 100644 --- a/macros/latex/contrib/l3experimental/l3draw-softpath.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-softpath.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2022-02-05} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3experimental/l3draw-state.dtx b/macros/latex/contrib/l3experimental/l3draw-state.dtx index bda3a14ace..b93f593a7e 100644 --- a/macros/latex/contrib/l3experimental/l3draw-state.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-state.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2022-02-05} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3experimental/l3draw-transforms.dtx b/macros/latex/contrib/l3experimental/l3draw-transforms.dtx index 6e60b8bddf..bdc96e0c88 100644 --- a/macros/latex/contrib/l3experimental/l3draw-transforms.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-transforms.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2022-02-05} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3experimental/l3draw.dtx b/macros/latex/contrib/l3experimental/l3draw.dtx index a309d0ffb7..31ac35f042 100644 --- a/macros/latex/contrib/l3experimental/l3draw.dtx +++ b/macros/latex/contrib/l3experimental/l3draw.dtx @@ -110,7 +110,7 @@ % }^^A % } % -% \date{Released 2022-02-05} +% \date{Released 2022-04-10} % % \maketitle % @@ -1173,7 +1173,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3draw}{2022-02-05}{} +\ProvidesExplPackage{l3draw}{2022-04-10}{} {L3 Experimental core drawing support} % \end{macrocode} % diff --git a/macros/latex/contrib/l3experimental/l3draw.pdf b/macros/latex/contrib/l3experimental/l3draw.pdf index bf801c3593..d58318d5d3 100644 Binary files a/macros/latex/contrib/l3experimental/l3draw.pdf and b/macros/latex/contrib/l3experimental/l3draw.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3galley.dtx b/macros/latex/contrib/l3experimental/l3galley.dtx index f52c7fb59c..5dd9d565eb 100644 --- a/macros/latex/contrib/l3experimental/l3galley.dtx +++ b/macros/latex/contrib/l3experimental/l3galley.dtx @@ -61,7 +61,7 @@ % }^^A % } % -% \date{Released 2022-02-05} +% \date{Released 2022-04-10} % % \maketitle % @@ -686,7 +686,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3galley}{2022-02-05}{} +\ProvidesExplPackage{l3galley}{2022-04-10}{} {L3 Experimental galley code} % \end{macrocode} % diff --git a/macros/latex/contrib/l3experimental/l3galley.pdf b/macros/latex/contrib/l3experimental/l3galley.pdf index 1bcda6a650..af4ba00c96 100644 Binary files a/macros/latex/contrib/l3experimental/l3galley.pdf and b/macros/latex/contrib/l3experimental/l3galley.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3graphics.dtx b/macros/latex/contrib/l3experimental/l3graphics.dtx index 8b97a562ed..cf4a70983d 100644 --- a/macros/latex/contrib/l3experimental/l3graphics.dtx +++ b/macros/latex/contrib/l3experimental/l3graphics.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2022-02-05} +% \date{Released 2022-04-10} % % \maketitle % @@ -54,140 +54,60 @@ % % \section{\pkg{l3graphics} documentation} % -% \subsection{Driver functions} +% \subsection{Graphics keys} % % Inclusion of graphic files requires a range of low-level data be passed to -% the driver layer. These functions are primarily aimed at supporting this -% work. +% the backend. This is set up using a small number of key--value settings, +% which are stored in the |graphics| tree. % -% \begin{variable}{\l_graphics_decodearray_tl} +% \begin{variable}{decodearray} % Array to decode color in bitmap graphic: when non-empty, this should % be in the form of one, two or three pairs of real numbers in the range % $[0,1]$, separated by spaces. % \end{variable} % -% \begin{variable}{\l_graphics_interpolate_bool} -% Indicates whether interpolation should be applied to bitmap graphic files. +% \begin{variable}{draft} +% Switch to enable draft mode: graphics are read but not included when this is +% true. +% \end{variable} +% +% \begin{variable}{interpolate} +% Switch which indicates whether interpolation should be applied to bitmap +% graphic files. % \end{variable} % -% \begin{variable}{\l_graphics_page_int} +% \begin{variable}{page} % The page to extract from a multi-page graphic file: used for |.pdf| files % which may contain multiple pages. % \end{variable} % -% \begin{variable}{\l_graphics_pagebox_tl} +% \begin{variable}{pagebox} % The nature of the page box setting used to determine the bounding box of % material: used for |.pdf| files which feature multiple page box -% specifications. +% specifications. A choice from |art|, |bleed|, |crop|, |media|, |trim|. +% The standard setting is |crop|. % \end{variable} % -% \begin{variable}{\l_graphics_draft_bool} +% \begin{variable}{draft} % Switch to enable draft mode: graphics are read but not included when this is % true. % \end{variable} % -% \begin{variable} -% {\l_graphics_llx_dim, \l_graphics_lly_dim, \l_graphics_urx_dim, \l_graphics_ury_dim} -% Dimensions which return the points $(\meta{llx},\meta{lly})$ and -% $(\meta{urx},\meta{ury})$ for the graphic. For many graphics only the resulting -% height and width are significant, but this is driver-dependent. -% \end{variable} -% -% \begin{variable}{\l_graphics_name_bool} -% The name of a graphics file being loaded: usually the same as the -% input file name, but may be altered by some drivers. +% \begin{variable}{type} +% The type of graphic file beign included: if this key is not set, the +% \emph{type} is determined from the file extension. % \end{variable} % -% \begin{function} -% { -% \graphics_bb_save:n, \graphics_bb_save:x, -% \graphics_bb_restore:nF, \graphics_bb_restore:xF -% } -% \begin{syntax} -% \cs{graphics_bb_save:n} \Arg{graphic} -% \cs{graphics_bb_restore:nF} \Arg{graphic} \Arg{false code} -% \end{syntax} -% This pair of functions are used to cache the bounding box of an \meta{graphic} -% so that extraction/reading is only required once. The \texttt{save} -% function stores the values from \cs{l_graphics_llx_dim}, -% \cs{l_graphics_lly_dim}, \cs{l_graphics_urx_dim} and -% \cs{l_graphics_ury_dim} as constants. The \texttt{restore} function will then -% look up values for the bounding box of an \meta{graphic} and set the four -% dimensions appropriately. For any one \meta{graphic} the bounding box will -% be constant, so the \texttt{save} function should only be called once. Thus -% a typical use case is -% \begin{verbatim} -% \graphics_bb_restore:nF { } -% { -% % Code to read the bb -% \graphics_bb_save:n { } -% } -% \end{verbatim} -% \emph{i.e.}~every use of a bounding box will attempt to restore saved data, -% and saving will only take place where that is not possible. -% -% Note that the \meta{graphic} may not be a simple file name: a multi-page PDF, -% for example, will need to have the bounding box cached for each page used. -% \end{function} +% \subsection{Including graphics} % -% \begin{function}{\graphics_extract_bb:n} +% \begin{function}{\graphics_include:nn, \graphics_include:nV} % \begin{syntax} -% \cs{graphics_extract_bb:n} \Arg{file} +% \cs{graphics_include:nn} \Arg{keys} \Arg{file} % \end{syntax} -% Extracts bounding box data for the graphic \meta{file} using the |extractbb| -% utility, and stores the bounding box of the graphic file in -% \cs{l_graphics_llx_dim}, \cs{l_graphics_lly_dim}, \cs{l_graphics_urx_dim} and -% \cs{l_graphics_ury_dim}. -% -% The \meta{file} name should be fully-qualified and sanitized: no search -% or other manipulation is carried out at this level. No check is made on -% the file \emph{type} at this stage: it is assumed that the driver code -% using this function has made such a check. File types such as |.pdf| and -% |.jpg| are appropriate for parsing using this function. -% -% When \cs{l_graphics_page_int} is positive the appropriate page will be -% queried from the graphic file. -% -% Note that this function requires pipe shell calls to be enabled: this is -% generally true but may require the option |--enable-pipes| to be enabled -% when running the \TeX{} job. -% \end{function} -% -% \begin{function}{\graphics_read_bb:n} -% \begin{syntax} -% \cs{graphics_read_bb:n} \Arg{file} -% \end{syntax} -% Parses the graphic \meta{file} to find a PostScript-style bounding box -% line of the form -% \begin{verbatim} -% %%BoundingBox: llx lly urx urx -% \end{verbatim} -% where \meta{llx}, \meta{lly}, \meta{urx} and \meta{ury} are the corners -% of the bounding box expressed in PostScript (\enquote{big}) points. The -% values are stored in \cs{l_graphics_llx_dim}, \cs{l_graphics_lly_dim}, -% \cs{l_graphics_urx_dim} and \cs{l_graphics_ury_dim}. -% -% The \meta{file} name should be fully-qualified and sanitized: no search -% or other manipulation is carried out at this level. No check is made on -% the file \emph{type} at this stage: it is assumed that the driver code -% using this function has made such a check. File types such as |.eps| and -% |.bb|/|.xbb| are appropriate for parsing using this function. -% \end{function} -% -% \begin{function}{\graphics_include:n, \graphics_include:nn} -% \begin{syntax} -% \cs{graphics_include:n} \Arg{file} -% \cs{graphics_include:nn} \Arg{file} \Arg{type} -% \end{syntax} -% Horizontal-mode commands which include the \meta{file} as an graphic -% at the current location. The file \meta{type} is given explicitly in -% the two-argument version, or is inferred from the file extension extracted -% in the single-argument form. The exact graphic types supported depend upon -% the driver in use. -% -% Where the \meta{file} is not found and the \meta{type} is \emph{not} -% given, a search for possible graphic files is undertaken using the extensions -% stored in \cs{l_graphics_search_ext_seq}. +% Horizontal-mode command which includes the \meta{file} as an graphic +% at the current location. The file \meta{type} may be given as one of the +% \meta{keys}, or will otherwise be determined from file extension. The +% \meta{keys} is used to pass settings as detailed above. % \end{function} % % \begin{variable}{\l_graphics_ext_type_prop} @@ -200,11 +120,6 @@ % \end{verbatim} % \end{variable} % -% \begin{variable}{\l_graphics_search_ext_seq} -% Extensions to use for graphic searching when the given \meta{file} name is not -% found by \cs{graphics_include:n}. -% \end{variable} -% % \begin{variable}{\l_graphics_search_path_seq} % Each entry is the path to a directory which should be searched when % seeking an graphic file. Each path can be relative or absolute, and should @@ -213,6 +128,36 @@ % variable content. Spaces need not be quoted. % \end{variable} % +% \subsection{Utility functions} +% +% \begin{function}[noTF]{\graphics_get_full_name:nN} +% \begin{syntax} +% \cs{graphics_get_full_name:nN} \Arg{file} \meta{tl~var} +% \cs{graphics_get_full_name:nNTF} \Arg{file} \meta{tl~var} \Arg{true code} \Arg{false code} +% \end{syntax} +% Searches for \meta{file} first as given and then using the extensions +% listed in \cs{l_graphics_search_ext_seq}. The search path used will be +% the entries of \cs{l_graphics_search_path_seq}. If found, the full file +% name including any path and extension will be returned in the +% \meta{tl~var}. In the non-branching version, the \meta{tl var} will be +% set to \cs{q_no_value} in the case that the graphics is not found. +% \end{function} +% +% \begin{variable}{\l_graphics_search_ext_seq} +% Extensions to use for graphic searching when the given \meta{file} name is not +% found by \cs{graphics_get_full_name:nN}. +% \end{variable} +% +% \begin{function}{\graphics_get_pagecount:nN} +% \begin{syntax} +% \cs{graphics_get_pagecount:nn} \Arg{file} \meta{tl~var} +% \end{syntax} +% Reads the graphics \meta{file} and extracts the number of pages, which +% are stored in the \meta{tl~var}. +% \end{function} +% +% \subsection{Showing and logging included graphics} +% % \begin{function}{\graphics_show_list:, \graphics_log_list:} % \begin{syntax} % \cs{graphics_show_list:} @@ -240,15 +185,15 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3graphics}{2022-02-05}{} +\ProvidesExplPackage{l3graphics}{2022-04-10}{} {L3 Experimental graphics inclusion support} % \end{macrocode} % -% \begin{variable}{\l_@@_tmp_ior, \l_@@_tmp_tl} +% \begin{variable}{\l_@@_internal_ior, \l_@@_internal_tl} % Scratch space. % \begin{macrocode} -\ior_new:N \l_@@_tmp_ior -\tl_new:N \l_@@_tmp_tl +\ior_new:N \l_@@_internal_ior +\tl_new:N \l_@@_internal_tl % \end{macrocode} % \end{variable} % @@ -259,24 +204,47 @@ % \end{macrocode} % \end{variable} % -% \subsection{Image feature support} +% \subsection{Graphics keys} % % \begin{macro} % { -% \l_graphics_decodearray_tl , -% \l_graphics_interpolate_bool, -% \l_graphics_page_int , -% \l_graphics_pagebox_tl +% \l_@@_decodearray_str , +% \l__@@_draft_bool , +% \l_@@_interpolate_bool , +% \l_@@_page_int , +% \l_@@_pagebox_tl , +% \l_@@_type_str % } % Keys which control features of graphics. The standard value of |pagebox| -% set up here should match the default for the drivers themselves: in -% the absence of any other setting the |cropbox| should be used. +% set up here should match the default for the backends themselves: in +% the absence of any other setting the |crop| should be used. Note that +% the variable \cs{l_@@_pagebox_str} can be empty internally, as backends +% which do not support |pagebox| are set up to clear it entirely. The +% store for |pagebox| is a |tl| as that makes extracting the data +% easier for some backends. % \begin{macrocode} -\tl_new:N \l_graphics_decodearray_tl -\tl_new:N \l_graphics_pagebox_tl -\bool_new:N \l_graphics_interpolate_bool -\tl_set:Nn \l_graphics_pagebox_tl { cropbox } -\int_new:N \l_graphics_page_int +\tl_new:N \l_@@_pagebox_tl +\keys_define:nn { graphics } + { + decodearray .str_set:N = + \l_@@_decodearray_str , + draft .bool_set:N = + \l_@@_draft_bool , + interpolate .bool_set:N = + \l_@@_interpolate_bool , + pagebox .choices:nn = + { art , bleed , crop , media , trim } + { + \tl_set:Nx \l_@@_pagebox_tl + { \tl_use:N \l_keys_choice_tl box } + } , + pagebox .initial:n = + crop , + page .int_set:N = + \l_@@_page_int , + type . str_set:N = + \l_@@_type_str + } % \end{macrocode} % \end{macro} % @@ -284,60 +252,60 @@ % % \begin{variable} % { -% \l_graphics_llx_dim , \l_graphics_lly_dim, -% \l_graphics_urx_dim , \l_graphics_ury_dim +% \l_@@_llx_dim , \l_@@_lly_dim, +% \l_@@_urx_dim , \l_@@_ury_dim % } % Storage for the return of bounding box. % \begin{macrocode} -\dim_new:N \l_graphics_llx_dim -\dim_new:N \l_graphics_lly_dim -\dim_new:N \l_graphics_urx_dim -\dim_new:N \l_graphics_ury_dim +\dim_new:N \l_@@_llx_dim +\dim_new:N \l_@@_lly_dim +\dim_new:N \l_@@_urx_dim +\dim_new:N \l_@@_ury_dim % \end{macrocode} % \end{variable} % -% \begin{macro}{\graphics_bb_save:n, \graphics_bb_save:x} -% \begin{macro}{\graphics_bb_restore:nF, \graphics_bb_restore:xF} +% \begin{macro}{\@@_bb_save:n, \@@_bb_save:x} +% \begin{macro}{\@@_bb_restore:nF, \@@_bb_restore:xF} % Caching graphic bounding boxes is sensible, and these functions are needed both % here and for drive-specific work. So they are made available as documented % functions. To save on registers, the \enquote{origin} is only saved if it is % not at zero. % \begin{macrocode} -\cs_new_protected:Npn \graphics_bb_save:n #1 +\cs_new_protected:Npn \@@_bb_save:n #1 { \dim_if_exist:cTF { c_@@_ #1 _urx_dim } { \msg_error:nnn { graphic } { bb-already-cached } {#1} } { - \dim_compare:nNnF \l_graphics_llx_dim = { 0pt } - { \dim_const:cn { c_@@_ #1 _llx_dim } { \l_graphics_llx_dim } } - \dim_compare:nNnF \l_graphics_lly_dim = { 0pt } - { \dim_const:cn { c_@@_ #1 _lly_dim } { \l_graphics_lly_dim } } - \dim_const:cn { c_@@_ #1 _urx_dim } { \l_graphics_urx_dim } - \dim_const:cn { c_@@_ #1 _ury_dim } { \l_graphics_ury_dim } + \dim_compare:nNnF \l_@@_llx_dim = { 0pt } + { \dim_const:cn { c_@@_ #1 _llx_dim } { \l_@@_llx_dim } } + \dim_compare:nNnF \l_@@_lly_dim = { 0pt } + { \dim_const:cn { c_@@_ #1 _lly_dim } { \l_@@_lly_dim } } + \dim_const:cn { c_@@_ #1 _urx_dim } { \l_@@_urx_dim } + \dim_const:cn { c_@@_ #1 _ury_dim } { \l_@@_ury_dim } } } -\cs_generate_variant:Nn \graphics_bb_save:n { x } -\cs_new_protected:Npn \graphics_bb_restore:nF #1#2 +\cs_generate_variant:Nn \@@_bb_save:n { x } +\cs_new_protected:Npn \@@_bb_restore:nF #1#2 { \dim_if_exist:cTF { c_@@_ #1 _urx_dim } { - \dim_set_eq:Nc \l_graphics_urx_dim { c_@@_ #1 _urx_dim } - \dim_set_eq:Nc \l_graphics_ury_dim { c_@@_ #1 _ury_dim } + \dim_set_eq:Nc \l_@@_urx_dim { c_@@_ #1 _urx_dim } + \dim_set_eq:Nc \l_@@_ury_dim { c_@@_ #1 _ury_dim } \dim_if_exist:cTF { c_@@_ #1 _llx_dim } - { \dim_set_eq:Nc \l_graphics_llx_dim { c_@@_ #1 _llx_dim } } - { \dim_zero:N \l_graphics_llx_dim } + { \dim_set_eq:Nc \l_@@_llx_dim { c_@@_ #1 _llx_dim } } + { \dim_zero:N \l_@@_llx_dim } \dim_if_exist:cTF { c_@@_ #1 _lly_dim } - { \dim_set_eq:Nc \l_graphics_lly_dim { c_@@_ #1 _lly_dim } } - { \dim_zero:N \l_graphics_lly_dim } + { \dim_set_eq:Nc \l_@@_lly_dim { c_@@_ #1 _lly_dim } } + { \dim_zero:N \l_@@_lly_dim } } {#2} } -\cs_generate_variant:Nn \graphics_bb_restore:nF { x } +\cs_generate_variant:Nn \@@_bb_restore:nF { x } % \end{macrocode} % \end{macro} % \end{macro} % -% \begin{macro}{\graphics_extract_bb:n, \graphics_read_bb:n} +% \begin{macro}{\@@_extract_bb:n, \@@_read_bb:n} % \begin{macro}{\@@_extract_bb_auix:nn, \@@_extract_bb_auix:Vn} % \begin{macro}{\@@_extract_bb_auxii:nnn} % \begin{macro}{\@@_extract_bb_auxiii:nnnn, \@@_extract_bb_auxiii:Vnnn} @@ -357,10 +325,10 @@ % box has to be calculated by |extractbb|, with just the initial phase % different. % \begin{macrocode} -\cs_new_protected:Npn \graphics_extract_bb:n #1 +\cs_new_protected:Npn \@@_extract_bb:n #1 { - \int_compare:nNnTF \l_graphics_page_int > 0 - { \@@_extract_bb_auxi:Vn \l_graphics_page_int {#1} } + \int_compare:nNnTF \l_@@_page_int > 0 + { \@@_extract_bb_auxi:Vn \l_@@_page_int {#1} } { \@@_extract_bb_auxii:nnn {#1} { } { } } } \cs_new_protected:Npn \@@_extract_bb_auxi:nn #1#2 @@ -368,9 +336,9 @@ \cs_generate_variant:Nn \@@_extract_bb_auxi:nn { Vn } \cs_new_protected:Npn \@@_extract_bb_auxii:nnn #1#2#3 { - \tl_if_empty:NTF \l_graphics_pagebox_tl + \tl_if_empty:NTF \l_@@_pagebox_tl { \@@_extract_bb_auxiv:nnn } - { \@@_extract_bb_auxiii:Vnnn \l_graphics_pagebox_tl } + { \@@_extract_bb_auxiii:Vnnn \l_@@_pagebox_tl } {#1} {#2} {#3} } \cs_new_protected:Npn \@@_extract_bb_auxiii:nnnn #1#2#3#4 @@ -379,13 +347,13 @@ \cs_new_protected:Npn \@@_extract_bb_auxiv:nnn #1#2#3 { \@@_read_bb_auxi:nnnn {#1} {#2} - { \ior_shell_open:Nn \l_@@_tmp_ior { extractbb~#3-O~#1 } } + { \ior_shell_open:Nn \l_@@_internal_ior { extractbb~#3-O~#1 } } { pipe-failed } } -\cs_new_protected:Npn \graphics_read_bb:n #1 +\cs_new_protected:Npn \@@_read_bb:n #1 { \@@_read_bb_auxi:nnnn {#1} { } - { \ior_open:Nn \l_@@_tmp_ior {#1} } + { \ior_open:Nn \l_@@_internal_ior {#1} } { graphic-not-found } } % \end{macrocode} @@ -401,31 +369,23 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_read_bb_auxi:nnnn #1#2#3#4 { - \graphics_bb_restore:nF {#1#2} + \@@_bb_restore:nF {#1#2} { \@@_read_bb_auxii:nnnn {#3} {#4} {#1} {#2} } } \cs_new_protected:Npx \@@_read_bb_auxii:nnnn #1#2#3#4 { #1 - \exp_not:N \ior_if_eof:NTF \exp_not:N \l_@@_tmp_ior + \exp_not:N \ior_if_eof:NTF \exp_not:N \l_@@_internal_ior { \msg_error:nnn { graphics } {#2} {#3} } { - \ior_str_map_inline:Nn \exp_not:N \l_@@_tmp_ior + \ior_str_map_inline:Nn \exp_not:N \l_@@_internal_ior { \exp_not:N \@@_read_bb_auxiii:w ##1 ~ \c_colon_str \s_@@_stop } + \@@_bb_save:n {#3#4} } - \exp_not:n - { - \ior_close:N \l_@@_tmp_ior - \dim_compare:nNnF \l_graphics_llx_dim = { 0pt } - { \dim_const:cn { c_@@_ #3#4 _llx_dim } { \l_graphics_llx_dim } } - \dim_compare:nNnF \l_graphics_lly_dim = { 0pt } - { \dim_const:cn { c_@@_ #3#4 _lly_dim } { \l_graphics_lly_dim } } - \dim_const:cn { c_@@_ #3#4 _urx_dim } { \l_graphics_urx_dim } - \dim_const:cn { c_@@_ #3#4 _ury_dim } { \l_graphics_ury_dim } - } + \ior_close:N \exp_not:N \l_@@_internal_ior } \use:x { @@ -450,13 +410,13 @@ { \str_if_eq:nnF {#2} { atend } { - \tl_set_rescan:Nnx \l_@@_tmp_tl + \tl_set_rescan:Nnx \l_@@_internal_tl { \char_set_catcode_space:n { 9 } \char_set_catcode_space:n { 32 } } { \use:n #1 } - \exp_after:wN \@@_read_bb_auxv:w \l_@@_tmp_tl \s_@@_stop + \exp_after:wN \@@_read_bb_auxv:w \l_@@_internal_tl \s_@@_stop } } % \end{macrocode} @@ -465,10 +425,10 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_read_bb_auxv:w #1~#2~#3~#4~#5 \s_@@_stop { - \dim_set:Nn \l_graphics_llx_dim { #1 bp } - \dim_set:Nn \l_graphics_lly_dim { #2 bp } - \dim_set:Nn \l_graphics_urx_dim { #3 bp } - \dim_set:Nn \l_graphics_ury_dim { #4 bp } + \dim_set:Nn \l_@@_llx_dim { #1 bp } + \dim_set:Nn \l_@@_lly_dim { #2 bp } + \dim_set:Nn \l_@@_urx_dim { #3 bp } + \dim_set:Nn \l_@@_ury_dim { #4 bp } \ior_map_break: } % \end{macrocode} @@ -480,17 +440,13 @@ % \end{macro} % \end{macro} % -% \begin{variable}{\l_graphics_draft_bool} -% Relevant to including graphics but not to reading them. -% \begin{macrocode} -\bool_new:N \l_graphics_draft_bool -% \end{macrocode} -% \end{variable} -% -% \begin{variable}{\l_graphics_name_tl, \l_@@_name_tl} +% \begin{variable}{\l_@@_final_name_str, \l_@@_full_name_str} +% The full name is as you'd expect the name including path and extension. +% The final name here reflects any conversions carried out by the backend, +% for example if an |.eps| is converted to |.pdf|. % \begin{macrocode} -\tl_new:N \l_graphics_name_tl -\tl_new:N \l_@@_name_tl +\str_new:N \l_@@_final_name_str +\str_new:N \l_@@_full_name_str % \end{macrocode} % \end{variable} % @@ -515,7 +471,7 @@ % \end{variable} % % \begin{variable}{\l_graphics_search_ext_seq} -% Used to specify fall-back extensions: actually set on a per-driver basis. +% Used to specify fall-back extensions: actually set on a per-backend basis. % \begin{macrocode} \seq_new:N \l_graphics_search_ext_seq % \end{macrocode} @@ -536,66 +492,49 @@ % \end{macrocode} % \end{variable} % -% \begin{macro}{\graphics_include:n} +% \begin{macro}{\graphics_include:nn, \graphics_include:nV} % \begin{macro}{\@@_include_search:n} % \begin{macro}{\@@_include:} -% \begin{macro}{\graphics_include:nn} % \begin{macro} % { -% \@@_include_auxi:n, \@@_include_auxii:n, +% \@@_include_auxi:n, \@@_include_auxi:e, \@@_include_auxii:n, % \@@_include_auxiii:n, \@@_include_auxiv:n % } % Actually including an graphic is relatively straight-forward: most of the -% work is done by the driver. We only have to deal with making sure the +% work is done by the backend. We only have to deal with making sure the % box has no apparent depth. Where the first given name is not found, we % search based on extension only if the \meta{type} was not given. The one % wrinkle is that we may have found a \texttt{.tex} file matching the file % name stem: that's not what we want, so we have to filter out. % \begin{macrocode} -\cs_new_protected:Npn \graphics_include:n #1 +\cs_new_protected:Npn \graphics_include:nn #1#2 { \group_begin: + \keys_set:nn { graphics } {#1} \seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq - \file_get_full_name:nNTF {#1} \l_@@_name_tl + \file_get_full_name:nNTF {#2} \l_@@_full_name_str { - \str_if_eq:eeTF { \l_@@_name_tl } { #1 .tex } - { \@@_include_search:n {#1} } + \str_if_eq:eeTF { \l_@@_full_name_str } { #2 .tex } + { \msg_error:nnn { graphics } { graphic-not-found } {#2} } { \@@_include: } } - { \@@_include_search:n {#1} } + { \msg_error:nnn { graphics } { graphic-not-found } {#2} } \group_end: } -\cs_new_protected:Npn \@@_include_search:n #1 - { - \seq_map_inline:Nn \l_graphics_search_ext_seq - { - \file_get_full_name:nNT { #1 . ##1 } \l_@@_name_tl - { \seq_map_break:n { \use_i:nnn \@@_include: } } - } - \use:n - { \msg_error:nnn { graphics } { graphic-not-found } {#1} } - } +\cs_generate_variant:Nn \graphics_include:nn { nV } \cs_new_protected:Npn \@@_include: { - \file_parse_full_name:VNNN \l_@@_name_tl - \l_@@_dir_str \l_@@_name_str \l_@@_ext_str - \exp_args:Ne \@@_include_auxi:n + \str_if_empty:NTF \l_@@_type_str { - \exp_args:Ne \str_tail:n - { \str_foldcase:V \l_@@_ext_str } - } - } -\cs_new_protected:Npn \graphics_include:nn #1#2 - { - \group_begin: - \seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq - \file_get_full_name:nNTF {#1} \l_@@_name_tl - { - \exp_args:Ne \@@_include_auxi:n - { \str_foldcase:n {#1} } - } - { \msg_error:nnn { graphics } { graphic-not-found } {#1} } - \group_end: + \file_parse_full_name:VNNN \l_@@_full_name_str + \l_@@_dir_str \l_@@_name_str \l_@@_ext_str + \@@_include_auxi:e + { + \exp_args:Ne \str_tail:n + { \str_foldcase:V \l_@@_ext_str } + } + } + { \@@_include_auxi:e { \l_@@_type_str } } } \cs_new_protected:Npn \@@_include_auxi:n #1 { @@ -603,20 +542,21 @@ { \tl_set:Nn \l_@@_internal_tl {#1} } \exp_args:NV \@@_include_auxii:n \l_@@_internal_tl } +\cs_generate_variant:Nn \@@_include_auxi:n { e } \cs_new_protected:Npn \@@_include_auxii:n #1 { \mode_leave_vertical: \cs_if_exist:cTF { @@_backend_include_ #1 :n } { - \tl_set_eq:NN \l_graphics_name_tl \l_@@_name_tl + \tl_set_eq:NN \l_@@_final_name_str \l_@@_full_name_str + \str_set:Nx \l_@@_full_name_str + { \exp_args:NV \__kernel_file_name_quote:n \l_@@_full_name_str } \exp_args:NnV \use:c { @@_backend_getbb_ #1 :n } - \l_@@_name_tl - \seq_gput_right:NV \g_@@_record_seq \l_graphics_name_tl -%<*package> + \l_@@_full_name_str + \seq_gput_right:NV \g_@@_record_seq \l_@@_final_name_str \clist_if_exist:NT \@filelist - { \exp_args:NV \@addtofilelist \l_graphics_name_tl } -% - \bool_if:NTF \l_graphics_draft_bool + { \exp_args:NV \@addtofilelist \l_@@_final_name_str } + \bool_if:NTF \l_@@_draft_bool { \@@_include_auxiii:n } { \@@_include_auxiv:n } {#1} @@ -625,23 +565,21 @@ } \cs_new_protected:Npn \@@_include_auxiii:n #1 { - \hbox_to_wd:nn { \l_graphics_urx_dim - \l_graphics_llx_dim } + \hbox_to_wd:nn { \l_@@_urx_dim - \l_@@_llx_dim } { \tex_vrule:D \tex_hss:D \vbox_to_ht:nn - { \l_graphics_ury_dim - \l_graphics_lly_dim } + { \l_@@_ury_dim - \l_@@_lly_dim } { \tex_hrule:D width - \dim_eval:n { \l_graphics_urx_dim - \l_graphics_llx_dim } + \dim_eval:n { \l_@@_urx_dim - \l_@@_llx_dim } \tex_vss:D \hbox_to_wd:nn - { \l_graphics_urx_dim - \l_graphics_llx_dim } + { \l_@@_urx_dim - \l_@@_llx_dim } { -%<*package> \ttfamily -% - \tex_hss:D \l_@@_name_tl \tex_hss:D + \tex_hss:D \l_@@_full_name_str \tex_hss:D } \tex_vss:D \tex_hrule:D @@ -655,13 +593,13 @@ \hbox_set:Nn \l_@@_internal_box { \exp_args:NnV \use:c { @@_backend_include_ #1 :n } - \l_@@_name_tl + \l_@@_full_name_str } \box_set_dp:Nn \l_@@_internal_box { 0pt } \box_set_ht:Nn \l_@@_internal_box - { \l_graphics_ury_dim - \l_graphics_lly_dim } + { \l_@@_ury_dim - \l_@@_lly_dim } \box_set_wd:Nn \l_@@_internal_box - { \l_graphics_urx_dim - \l_graphics_llx_dim } + { \l_@@_urx_dim - \l_@@_llx_dim } \box_use_drop:N \l_@@_internal_box } % \end{macrocode} @@ -669,7 +607,6 @@ % \end{macro} % \end{macro} % \end{macro} -% \end{macro} % % \begin{macro}{\graphics_show_list:, \graphics_log_list:, \@@_list:N} % \begin{macro}[EXP]{\@@_list_aux:n} @@ -680,7 +617,7 @@ \cs_new_protected:Npn \@@_list:N #1 { \seq_remove_duplicates:N \g_@@_record_seq - #1 { LaTeX/kernel } { file-list } + #1 { kernel } { file-list } { \seq_map_function:NN \g_@@_record_seq \@@_list_aux:n } { } { } { } } @@ -689,14 +626,123 @@ % \end{macro} % \end{macro} % +% \subsection{Utility functions} +% +% \begin{macro}{\graphics_get_full_name:nN} +% \begin{macro}[TF]{\graphics_get_full_name:nN} +% \begin{macro}{\@@_get_full_name:n} +% A simple search. +% \begin{macrocode} +\cs_new_protected:Npn \graphics_get_full_name:nN #1#2 + { + \graphics_get_full_name:nNF {#1} #2 + { \tl_set:Nn #2 { \q_no_value } } + } +\prg_new_protected_conditional:Npnn \graphics_get_full_name:nN #1#2 + { T , F , TF } + { + \group_begin: + \seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq + \file_get_full_name:nNTF {#1} \l_@@_full_name_str + { + \str_if_eq:eeT { \l_@@_full_name_str } { #1 .tex } + { \@@_get_full_name:n {#1} } + } + { \@@_get_full_name:n {#1} } + \exp_args:NNNV \group_end: + \tl_set:Nn #2 \l_@@_full_name_str + \tl_if_empty:NTF #2 + { \prg_return_false: } + { \prg_return_true: } + } +\cs_new_protected:Npn \@@_get_full_name:n #1 + { + \str_clear:N \l_@@_full_name_str + \seq_map_inline:Nn \l_graphics_search_ext_seq + { + \file_get_full_name:nNT { #1 ##1 } \l_@@_full_name_str + { \seq_map_break:n { \use_none:nn } } + } + \use:n + { \str_clear:N \l_@@_full_name_str } + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\graphics_get_pagecount:nN} +% \begin{macro}{\@@_get_pagecount:n} +% \begin{macro}{\@@_get_pagecount:nw} +% A generic function to read the number of pages in a graphic file. This is +% used by all of the backend where there is not a dedicated primitive. The +% plan is essentially the same as reading the bounding box. To avoid multiple +% calls, the value is cached either here or in the backend. +% \begin{macrocode} +\cs_new_protected:Npn \graphics_get_pagecount:nN #1#2 + { + \group_begin: + \seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq + \file_get_full_name:nNTF {#1} \l_@@_full_name_str + { + \int_if_exist:cF { c_@@_ \l_@@_full_name_str _pages_int } + { + \exp_args:NV \@@_backend_get_pagecount:n + \l_@@_full_name_str + } + \tl_set:Nv #2 { c_@@_ \l_@@_full_name_str _pages_int } + } + { + \tl_set:Nn #2 { 0 } + \msg_error:nnn { graphics } { graphic-not-found } {#1} + } + \exp_args:NNNV \group_end: + \tl_set:Nn #2 #2 + } +\cs_new_protected:Npx \@@_get_pagecount:n #1 + { + \ior_shell_open:Nn \exp_not:N \l_@@_internal_ior + { extractbb~-O~#1 } + \exp_not:N \ior_if_eof:NTF \exp_not:N \l_@@_internal_ior + { \msg_error:nnn { graphics } { pipe-failed } } + { + \ior_str_map_inline:Nn \exp_not:N \l_@@_internal_ior + { + \exp_not:N \@@_get_pagecount:nw {#1} + ##1 ~ \c_colon_str \c_colon_str \s_@@_stop + } + \exp_not:N \int_if_exist:cF { c_@@_ #1 _pages_int } + { \int_const:cn { c_@@_ #1 _pages_int } { 1 } } + } + \ior_close:N \exp_not:N \l_@@_internal_ior + } +\use:x + { + \cs_new_protected:Npn \exp_not:N \@@_get_pagecount:nw + ##1##2 \c_colon_str ##3 \c_colon_str ##4 \s_@@_stop + { + \exp_not:N \str_if_eq:nnT + { \c_percent_str \c_percent_str Pages } + {##2} + { + \int_const:cn { c_@@_ ##1 _pages_int } {##3} + \exp_not:N \ior_map_break: + } + } + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% % \subsection{Messages} % % \begin{macrocode} \msg_new:nnnn { graphics } { graphic-not-found } { Image~file~'#1'~not~found. } { - LaTeX~tried~to~open~graphic~file~'#1', - ~but~the~file~could~not~be~read. + LaTeX~tried~to~open~graphic~file~'#1',~ + but~the~file~could~not~be~read. } \msg_new:nnnn { graphics } { pipe-failed } { Cannot~run~piped~system~commands. } diff --git a/macros/latex/contrib/l3experimental/l3graphics.pdf b/macros/latex/contrib/l3experimental/l3graphics.pdf index 9827216d8f..3d5ce27457 100644 Binary files a/macros/latex/contrib/l3experimental/l3graphics.pdf and b/macros/latex/contrib/l3experimental/l3graphics.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3opacity.dtx b/macros/latex/contrib/l3experimental/l3opacity.dtx index 85de4479ae..192f6b6818 100644 --- a/macros/latex/contrib/l3experimental/l3opacity.dtx +++ b/macros/latex/contrib/l3experimental/l3opacity.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2022-02-05} +% \date{Released 2022-04-10} % % \maketitle % @@ -97,7 +97,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3opacity}{2022-02-05}{} +\ProvidesExplPackage{l3opacity}{2022-04-10}{} {L3 Experimental opacity support} % \end{macrocode} % diff --git a/macros/latex/contrib/l3experimental/l3opacity.pdf b/macros/latex/contrib/l3experimental/l3opacity.pdf index 01bca12cc7..ffdc658846 100644 Binary files a/macros/latex/contrib/l3experimental/l3opacity.pdf and b/macros/latex/contrib/l3experimental/l3opacity.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3str-format.dtx b/macros/latex/contrib/l3experimental/l3str-format.dtx index 51193487ac..c84c77c608 100644 --- a/macros/latex/contrib/l3experimental/l3str-format.dtx +++ b/macros/latex/contrib/l3experimental/l3str-format.dtx @@ -48,7 +48,7 @@ % }^^A % } % -% \date{Released 2022-02-05} +% \date{Released 2022-04-10} % % \maketitle % @@ -166,7 +166,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3str-format}{2022-02-05}{} +\ProvidesExplPackage{l3str-format}{2022-04-10}{} {L3 Experimental string formatting} % \end{macrocode} % diff --git a/macros/latex/contrib/l3experimental/l3str-format.pdf b/macros/latex/contrib/l3experimental/l3str-format.pdf index 7b9c5ab087..74e1f21ef0 100644 Binary files a/macros/latex/contrib/l3experimental/l3str-format.pdf and b/macros/latex/contrib/l3experimental/l3str-format.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3sys-shell.dtx b/macros/latex/contrib/l3experimental/l3sys-shell.dtx index cf8ecdf188..db10bbbf60 100644 --- a/macros/latex/contrib/l3experimental/l3sys-shell.dtx +++ b/macros/latex/contrib/l3experimental/l3sys-shell.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2022-02-05} +% \date{Released 2022-04-10} % % \maketitle % @@ -151,7 +151,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3sys-shell}{2022-02-05}{} +\ProvidesExplPackage{l3sys-shell}{2022-04-10}{} {L3 Experimental system shell functions} % \end{macrocode} % @@ -393,6 +393,8 @@ \seq_set_split:NnV #2 { \char_generate:nn { `\^^M } { 12 } } \exp_not:N \l_@@_tmp_tl \seq_pop_right:NN #2 \exp_not:N \l_@@_tmp_tl + \exp_not:N \tl_if_blank:eTF { \exp_not:N \seq_item:Nn #2 { 1 } } + { \seq_clear:N #2 } } } % \end{macrocode} diff --git a/macros/latex/contrib/l3experimental/l3sys-shell.pdf b/macros/latex/contrib/l3experimental/l3sys-shell.pdf index 610ff8e175..8baa8395b8 100644 Binary files a/macros/latex/contrib/l3experimental/l3sys-shell.pdf and b/macros/latex/contrib/l3experimental/l3sys-shell.pdf differ diff --git a/macros/latex/contrib/l3experimental/xcoffins.dtx b/macros/latex/contrib/l3experimental/xcoffins.dtx index 18e0c0deed..e7773188c0 100644 --- a/macros/latex/contrib/l3experimental/xcoffins.dtx +++ b/macros/latex/contrib/l3experimental/xcoffins.dtx @@ -53,7 +53,7 @@ % }^^A % } % -% \date{Released 2022-02-05} +% \date{Released 2022-04-10} % % \maketitle % @@ -672,7 +672,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xcoffins}{2022-02-05}{} +\ProvidesExplPackage{xcoffins}{2022-04-10}{} {L3 Experimental design level coffins} % \end{macrocode} % diff --git a/macros/latex/contrib/l3experimental/xcoffins.pdf b/macros/latex/contrib/l3experimental/xcoffins.pdf index eb412538c9..269b1c2ffa 100644 Binary files a/macros/latex/contrib/l3experimental/xcoffins.pdf and b/macros/latex/contrib/l3experimental/xcoffins.pdf differ diff --git a/macros/latex/contrib/l3experimental/xgalley.dtx b/macros/latex/contrib/l3experimental/xgalley.dtx index dca97d5fb6..2e541d6550 100644 --- a/macros/latex/contrib/l3experimental/xgalley.dtx +++ b/macros/latex/contrib/l3experimental/xgalley.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2022-02-05} +% \date{Released 2022-04-10} % % \maketitle % @@ -731,7 +731,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xgalley}{2022-02-05}{} +\ProvidesExplPackage{xgalley}{2022-04-10}{} {L3 Experimental galley} \RequirePackage{xtemplate,l3galley} % \end{macrocode} diff --git a/macros/latex/contrib/l3experimental/xgalley.pdf b/macros/latex/contrib/l3experimental/xgalley.pdf index 1b2a990971..7addf4afe8 100644 Binary files a/macros/latex/contrib/l3experimental/xgalley.pdf and b/macros/latex/contrib/l3experimental/xgalley.pdf differ diff --git a/macros/latex/contrib/l3kernel/CHANGELOG.md b/macros/latex/contrib/l3kernel/CHANGELOG.md index ba245c3c95..81af951ced 100644 --- a/macros/latex/contrib/l3kernel/CHANGELOG.md +++ b/macros/latex/contrib/l3kernel/CHANGELOG.md @@ -7,6 +7,26 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2022-04-10] + +### Added +- `\keys_precompile:nnN` for conversion of keyvals to fast-to-apply token + lists +- Missing `\str_if_empty:n(TF)` (see issue \#1071) +- Missing `\str_case:Nn(TF)` (see issue \#1071) +- `\tex_...:D` names for primitives added in TeX Live 2022 + +### Changed +- Definition of `\legacy_if:n(TF)` to support primitive conditionals +- `\str_case:n` now case changes codepoints above 127 with all engines +- `\char_generate:nn` now also allows to generate category 10 tokens (spaces) + except for char code 0 + +### Fixed +- Handling of 'misplaced' `\protect` by `\text_expand:n` +- Nesting of `\tl_analysis_map_inline:nn` +- Naming of an error message + ## [2022-02-24] ### Changed @@ -1053,7 +1073,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/2022-02-24...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2022-04-10...HEAD +[2022-04-10]: https://github.com/latex3/latex3/compare/2022-02-24...2022-04-10 [2022-02-24]: https://github.com/latex3/latex3/compare/2022-02-21...2022-02-24 [2022-02-21]: https://github.com/latex3/latex3/compare/2022-02-05...2022-02-21 [2022-02-05]: https://github.com/latex3/latex3/compare/2022-01-21...2022-02-05 diff --git a/macros/latex/contrib/l3kernel/README.md b/macros/latex/contrib/l3kernel/README.md index cc869f47ab..c3054ed481 100644 --- a/macros/latex/contrib/l3kernel/README.md +++ b/macros/latex/contrib/l3kernel/README.md @@ -1,7 +1,7 @@ LaTeX3 Programming Conventions ============================== -Release 2022-02-24 +Release 2022-04-10 Overview -------- diff --git a/macros/latex/contrib/l3kernel/expl3.dtx b/macros/latex/contrib/l3kernel/expl3.dtx index 51fb5f5e02..34e12e7d55 100644 --- a/macros/latex/contrib/l3kernel/expl3.dtx +++ b/macros/latex/contrib/l3kernel/expl3.dtx @@ -24,7 +24,7 @@ % %<*driver|generic|package|2ekernel> % -\def\ExplFileDate{2022-02-24}% +\def\ExplFileDate{2022-04-10}% %<*driver> \documentclass[full]{l3doc} \usepackage{graphicx} @@ -51,7 +51,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/expl3.pdf b/macros/latex/contrib/l3kernel/expl3.pdf index 250532d701..17f1287430 100644 Binary files a/macros/latex/contrib/l3kernel/expl3.pdf and b/macros/latex/contrib/l3kernel/expl3.pdf differ diff --git a/macros/latex/contrib/l3kernel/interface3.pdf b/macros/latex/contrib/l3kernel/interface3.pdf index 0fbf0fe246..fa6f123061 100644 Binary files a/macros/latex/contrib/l3kernel/interface3.pdf and b/macros/latex/contrib/l3kernel/interface3.pdf differ diff --git a/macros/latex/contrib/l3kernel/interface3.tex b/macros/latex/contrib/l3kernel/interface3.tex index 24a3861ab8..9274fe46c3 100644 --- a/macros/latex/contrib/l3kernel/interface3.tex +++ b/macros/latex/contrib/l3kernel/interface3.tex @@ -54,7 +54,7 @@ for those people who are interested. {latex-team@latex-project.org}% }% } -\date{Released 2022-02-24} +\date{Released 2022-04-10} \pagenumbering{roman} \maketitle diff --git a/macros/latex/contrib/l3kernel/l3basics.dtx b/macros/latex/contrib/l3kernel/l3basics.dtx index 8f94eefe1f..c945620ece 100644 --- a/macros/latex/contrib/l3kernel/l3basics.dtx +++ b/macros/latex/contrib/l3kernel/l3basics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % @@ -727,13 +727,6 @@ % \meta{control sequence name} must, when fully expanded, consist of % character tokens, typically a mixture of category code $10$ (space), % $11$ (letter) and $12$ (other). -% \begin{texnote} -% Protected macros that appear in a \texttt{c}-type argument are -% expanded despite being protected; \cs{exp_not:n} also has no -% effect. An internal error occurs if non-characters or active -% characters remain after full expansion, as the conversion to a -% control sequence is not possible. -% \end{texnote} % \end{function} % % As an example of the \cs{use:c} function, both diff --git a/macros/latex/contrib/l3kernel/l3bootstrap.dtx b/macros/latex/contrib/l3kernel/l3bootstrap.dtx index 7afadf6f4b..5b137477ca 100644 --- a/macros/latex/contrib/l3kernel/l3bootstrap.dtx +++ b/macros/latex/contrib/l3kernel/l3bootstrap.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3box.dtx b/macros/latex/contrib/l3kernel/l3box.dtx index 5a0f8bd807..7c19e49bfd 100644 --- a/macros/latex/contrib/l3kernel/l3box.dtx +++ b/macros/latex/contrib/l3kernel/l3box.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3candidates.dtx b/macros/latex/contrib/l3kernel/l3candidates.dtx index 664f4a5306..d8e01d0d0b 100644 --- a/macros/latex/contrib/l3kernel/l3candidates.dtx +++ b/macros/latex/contrib/l3kernel/l3candidates.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % @@ -596,7 +596,7 @@ % % \begin{function}[added = 2018-04-01]{\tl_build_get:NN} % \begin{syntax} -% \cs{tl_build_get:N} \meta{tl~var_1} \meta{tl~var_2} +% \cs{tl_build_get:NN} \meta{tl~var_1} \meta{tl~var_2} % \end{syntax} % Stores the contents of the \meta{tl~var_1} in the \meta{tl~var_2}. % The \meta{tl~var_1} must have been set up with \cs{tl_build_begin:N} @@ -1415,7 +1415,7 @@ \tl_if_in:nnTF {#1} { " } { \msg_error:nnx - { ior } { quote-in-shell } {#1} + { kernel } { quote-in-shell } {#1} } { \__kernel_ior_open:Nn #2 { |#1 } } } diff --git a/macros/latex/contrib/l3kernel/l3cctab.dtx b/macros/latex/contrib/l3kernel/l3cctab.dtx index e10527fedd..69409085fe 100644 --- a/macros/latex/contrib/l3kernel/l3cctab.dtx +++ b/macros/latex/contrib/l3kernel/l3cctab.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3clist.dtx b/macros/latex/contrib/l3kernel/l3clist.dtx index 0e3d0de492..a2e5dd0ec0 100644 --- a/macros/latex/contrib/l3kernel/l3clist.dtx +++ b/macros/latex/contrib/l3kernel/l3clist.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3coffins.dtx b/macros/latex/contrib/l3kernel/l3coffins.dtx index 3b9bff45e0..d00fe3918d 100644 --- a/macros/latex/contrib/l3kernel/l3coffins.dtx +++ b/macros/latex/contrib/l3kernel/l3coffins.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3color.dtx b/macros/latex/contrib/l3kernel/l3color.dtx index 1a16326219..93f42374ef 100644 --- a/macros/latex/contrib/l3kernel/l3color.dtx +++ b/macros/latex/contrib/l3kernel/l3color.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3debug.dtx b/macros/latex/contrib/l3kernel/l3debug.dtx index 81d3d81c47..65457cbdea 100644 --- a/macros/latex/contrib/l3kernel/l3debug.dtx +++ b/macros/latex/contrib/l3kernel/l3debug.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % @@ -1015,7 +1015,7 @@ { \__kernel_debug_log:x { Defining~key~#1~\msg_line_context: } } } { } - { \@@_cmd_set:nn } + { \@@_cmd_set_direct:nn } %<@@=msg> \__kernel_patch:nnn { } diff --git a/macros/latex/contrib/l3kernel/l3deprecation.dtx b/macros/latex/contrib/l3kernel/l3deprecation.dtx index b5c495de2b..4d48f2a007 100644 --- a/macros/latex/contrib/l3kernel/l3deprecation.dtx +++ b/macros/latex/contrib/l3kernel/l3deprecation.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3doc.dtx b/macros/latex/contrib/l3kernel/l3doc.dtx index e3251058b3..0db227edf9 100644 --- a/macros/latex/contrib/l3kernel/l3doc.dtx +++ b/macros/latex/contrib/l3kernel/l3doc.dtx @@ -85,7 +85,7 @@ and all files in that bundle must be distributed together. % require you to do updates, if the class changes.}} % % \author{\Team} -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % \maketitle % \tableofcontents % @@ -361,69 +361,81 @@ and all files in that bundle must be distributed together. % \subsection{Describing functions in the documentation} % % \DescribeEnv{function} +% \DescribeEnv{variable} +% Two heavily-used environments are defined to describe \pkg{expl3} functions +% and variables. If describing a variable, use the latter environment; it +% behaves identically to the \env{function} environment. % \DescribeEnv{syntax} -% Two heavily-used environments are defined to describe the syntax of -% \pkg{expl3} functions and variables. +% Both of the above environments are typically combined with the \env{syntax} +% environment, to describe their syntax. % \begin{framed} % \vspace{-\baselineskip} % \begin{verbatim} -% \begin{function}{\function_one:, \function_two:} +% \begin{function}{\package_function_one:N, \package_function_two:n} % \begin{syntax} -% |\foo_bar:| \Arg{meta} \meta{test_1} +% \cs{package_function_one:N} \meta{cs} +% \cs{package_function_two:n} \marg{Argument} % \end{syntax} -% \meta{description} +% Descriptive text here ... % \end{function} % \end{verbatim} % \hrulefill % \par % \hspace*{0.25\textwidth} % \begin{minipage}{0.5\textwidth} -% \begin{function}{\function_one:, \function_two:} +% \begin{function}{\package_function_one:N, \package_function_two:n} % \begin{syntax} -% |\foo_bar:| \Arg{meta} \meta{test_1} +% \cs[no-index]{package_function_one:N} \meta{cs} +% \cs[no-index]{package_function_two:n} \marg{Argument} % \end{syntax} -% \meta{description} +% \emph{Descriptive text here …} % \end{function} % \end{minipage} % \end{framed} % % Function environments take an optional argument to indicate whether -% the function(s) it describes are expandable or restricted-expandable -% or defined in conditional forms. Use |EXP|, |rEXP|, |TF|, |pTF|, or |noTF| for -% this; note that |pTF| implies |EXP| since predicates must always be -% expandable, and that |noTF| means that the function without |TF| -% should be documented in addition to |TF|. As an example: +% the function(s) it describes are expandable (use |EXP|) or +% restricted-expandable (use |rEXP|) or defined in conditional forms +% (use |TF|, |pTF|, or |noTF|). Note that |pTF| implies |EXP| since +% predicates must always be expandable, and that |noTF| means that the +% function without |TF| should be documented in addition to |TF|. For +% the conditional forms |TF| and |pTF|, the argument of the +% \env{function} environment is \emph{not} in fact a command that +% exists: in the example below, \cs[no-index]{tl_if_empty:N} does not +% exist, but its conditional forms \cs{tl_if_empty:NT}, +% \cs{tl_if_empty:NF}, \cs{tl_if_empty:NTF} and predicate form +% \cs{tl_if_empty_p:N} exist: % \begin{framed} % \vspace{-\baselineskip} % \begin{verbatim} -% \begin{function}[pTF]{\cs_if_exist:N} +% \begin{function}[pTF]{\tl_if_empty:N, \tl_if_empty:c} % \begin{syntax} -% \cs{cs_if_exist_p:N} \meta{cs} +% \cs{tl_if_empty_p:N} \meta{tl~var} +% \cs{tl_if_empty:NTF} \meta{tl~var} \Arg{true code} \Arg{false code} % \end{syntax} -% \meta{description} +% Tests if the \meta{token list variable} is entirely empty +% (\emph{i.e.}~contains no tokens at all). % \end{function} % \end{verbatim} % \hrulefill % \par % \hspace*{0.25\textwidth} % \begin{minipage}{0.5\textwidth} -% \begin{function}[pTF]{\cs_if_exist:N} +% \begin{function}[pTF]{\tl_if_empty:N, \tl_if_empty:c} % \begin{syntax} -% \cs{cs_if_exist_p:N} \meta{cs} +% \cs{tl_if_empty_p:N} \meta{tl~var} +% \cs{tl_if_empty:NTF} \meta{tl~var} \Arg{true code} \Arg{false code} % \end{syntax} -% \meta{description} +% Tests if the \meta{token list variable} is entirely empty +% (\emph{i.e.}~contains no tokens at all). % \end{function} % \end{minipage} % \end{framed} % -% \DescribeEnv{variable} -% If you are documenting a variable instead of a function, use the -% \env{variable} environment instead; it behaves identically to the -% \env{function} environment above. -% % \DescribeEnv{texnote} % This environment is used to call out sections within \env{function} -% and similar that are only of interest to seasoned \TeX{} developers. +% and similar environments that are only of interest to seasoned +% \TeX{} developers. % % \subsection{Describing functions in the implementation} % diff --git a/macros/latex/contrib/l3kernel/l3doc.pdf b/macros/latex/contrib/l3kernel/l3doc.pdf index 57f82896e7..1577ec2375 100644 Binary files a/macros/latex/contrib/l3kernel/l3doc.pdf and b/macros/latex/contrib/l3kernel/l3doc.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3docstrip.dtx b/macros/latex/contrib/l3kernel/l3docstrip.dtx index 6dbb029c6d..9319cd39e5 100644 --- a/macros/latex/contrib/l3kernel/l3docstrip.dtx +++ b/macros/latex/contrib/l3kernel/l3docstrip.dtx @@ -63,7 +63,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3docstrip.pdf b/macros/latex/contrib/l3kernel/l3docstrip.pdf index a2b49464e9..c4ccf58249 100644 Binary files a/macros/latex/contrib/l3kernel/l3docstrip.pdf and b/macros/latex/contrib/l3kernel/l3docstrip.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3expan.dtx b/macros/latex/contrib/l3kernel/l3expan.dtx index f84a0928dc..614a73d29e 100644 --- a/macros/latex/contrib/l3kernel/l3expan.dtx +++ b/macros/latex/contrib/l3kernel/l3expan.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % @@ -331,13 +331,6 @@ % % The |:cc| variant constructs the \meta{function} name in the same % manner as described for the \meta{tokens}. -% \begin{texnote} -% Protected macros that appear in a \texttt{c}-type argument are -% expanded despite being protected; \cs{exp_not:n} also has no -% effect. An internal error occurs if non-characters or active -% characters remain after full expansion, as the conversion to a -% control sequence is not possible. -% \end{texnote} % \end{function} % % \begin{function}[EXP]{\exp_args:No} @@ -374,13 +367,6 @@ % recovered and placed inside braces into the input stream \emph{after} % reinsertion of the \meta{function}. Thus the \meta{function} may take more % than one argument: all others are left unchanged. -% \begin{texnote} -% Protected macros that appear in a \texttt{v}-type argument are -% expanded despite being protected; \cs{exp_not:n} also has no -% effect. An internal error occurs if non-characters or active -% characters remain after full expansion, as the conversion to a -% control sequence is not possible. -% \end{texnote} % \end{function} % % \begin{function}[EXP, added = 2018-05-15]{\exp_args:Ne} @@ -683,13 +669,6 @@ % converts this into a control sequence. % Further expansion of this control sequence is then inhibited using % \cs{exp_not:N}. -% \begin{texnote} -% Protected macros that appear in a \texttt{c}-type argument are -% expanded despite being protected; \cs{exp_not:n} also has no -% effect. An internal error occurs if non-characters or active -% characters remain after full expansion, as the conversion to a -% control sequence is not possible. -% \end{texnote} % \end{function} % % \begin{function}[EXP]{\exp_not:n} @@ -736,13 +715,6 @@ % name. % The content of the \meta{variable} is recovered, and further % expansion in |x|-type or \texttt{e}-type arguments is prevented using \cs{exp_not:n}. -% \begin{texnote} -% Protected macros that appear in a \texttt{v}-type argument are -% expanded despite being protected; \cs{exp_not:n} also has no -% effect. An internal error occurs if non-characters or active -% characters remain after full expansion, as the conversion to a -% control sequence is not possible. -% \end{texnote} % \end{function} % % \begin{function}[EXP]{\exp_not:e} diff --git a/macros/latex/contrib/l3kernel/l3file.dtx b/macros/latex/contrib/l3kernel/l3file.dtx index 296680046c..adf73279bc 100644 --- a/macros/latex/contrib/l3kernel/l3file.dtx +++ b/macros/latex/contrib/l3kernel/l3file.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3flag.dtx b/macros/latex/contrib/l3kernel/l3flag.dtx index 5e35f1920d..22fae08ae6 100644 --- a/macros/latex/contrib/l3kernel/l3flag.dtx +++ b/macros/latex/contrib/l3kernel/l3flag.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-assign.dtx b/macros/latex/contrib/l3kernel/l3fp-assign.dtx index 1558d3015a..38f6d3ff6a 100644 --- a/macros/latex/contrib/l3kernel/l3fp-assign.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-assign.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % \maketitle % % \begin{documentation} diff --git a/macros/latex/contrib/l3kernel/l3fp-aux.dtx b/macros/latex/contrib/l3kernel/l3fp-aux.dtx index 7a441e4161..9ae275ac22 100644 --- a/macros/latex/contrib/l3kernel/l3fp-aux.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-aux.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-basics.dtx b/macros/latex/contrib/l3kernel/l3fp-basics.dtx index 1bd233dbbb..8cd126989a 100644 --- a/macros/latex/contrib/l3kernel/l3fp-basics.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-basics.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-convert.dtx b/macros/latex/contrib/l3kernel/l3fp-convert.dtx index d3f2ea5613..6fc2681f56 100644 --- a/macros/latex/contrib/l3kernel/l3fp-convert.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-convert.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-expo.dtx b/macros/latex/contrib/l3kernel/l3fp-expo.dtx index aa6b45f1f3..fdaece8932 100644 --- a/macros/latex/contrib/l3kernel/l3fp-expo.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-expo.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-extended.dtx b/macros/latex/contrib/l3kernel/l3fp-extended.dtx index f452cf3abb..d116ce9221 100644 --- a/macros/latex/contrib/l3kernel/l3fp-extended.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-extended.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-logic.dtx b/macros/latex/contrib/l3kernel/l3fp-logic.dtx index dd4c419968..7c24b0822c 100644 --- a/macros/latex/contrib/l3kernel/l3fp-logic.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-logic.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-parse.dtx b/macros/latex/contrib/l3kernel/l3fp-parse.dtx index 3b1bd6f1b8..307a848a08 100644 --- a/macros/latex/contrib/l3kernel/l3fp-parse.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-parse.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-random.dtx b/macros/latex/contrib/l3kernel/l3fp-random.dtx index 65802f5fbf..8ad1b84880 100644 --- a/macros/latex/contrib/l3kernel/l3fp-random.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-random.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-round.dtx b/macros/latex/contrib/l3kernel/l3fp-round.dtx index 2a55019509..8cb45a097b 100644 --- a/macros/latex/contrib/l3kernel/l3fp-round.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-round.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-traps.dtx b/macros/latex/contrib/l3kernel/l3fp-traps.dtx index 3cb310052a..6cd2dd1b9b 100644 --- a/macros/latex/contrib/l3kernel/l3fp-traps.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-traps.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % \maketitle % % \begin{documentation} diff --git a/macros/latex/contrib/l3kernel/l3fp-trig.dtx b/macros/latex/contrib/l3kernel/l3fp-trig.dtx index 0d10240c4e..993db8a0b6 100644 --- a/macros/latex/contrib/l3kernel/l3fp-trig.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-trig.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp.dtx b/macros/latex/contrib/l3kernel/l3fp.dtx index ed69fe5fc6..c0f2daa482 100644 --- a/macros/latex/contrib/l3kernel/l3fp.dtx +++ b/macros/latex/contrib/l3kernel/l3fp.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fparray.dtx b/macros/latex/contrib/l3kernel/l3fparray.dtx index 0060743cbb..2b279e18d7 100644 --- a/macros/latex/contrib/l3kernel/l3fparray.dtx +++ b/macros/latex/contrib/l3kernel/l3fparray.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3int.dtx b/macros/latex/contrib/l3kernel/l3int.dtx index 9d459317a7..e8dc857816 100644 --- a/macros/latex/contrib/l3kernel/l3int.dtx +++ b/macros/latex/contrib/l3kernel/l3int.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3intarray.dtx b/macros/latex/contrib/l3kernel/l3intarray.dtx index 8a7434f170..916cef5db2 100644 --- a/macros/latex/contrib/l3kernel/l3intarray.dtx +++ b/macros/latex/contrib/l3kernel/l3intarray.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx index 5f810a6bd1..bd62a0dbca 100644 --- a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx +++ b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3keys.dtx b/macros/latex/contrib/l3kernel/l3keys.dtx index 360a008995..81eb124edd 100644 --- a/macros/latex/contrib/l3kernel/l3keys.dtx +++ b/macros/latex/contrib/l3kernel/l3keys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % @@ -882,6 +882,18 @@ % group and are thus never set. % \end{function} % +% \section{Digesting keys} +% +% \begin{function}[added = 2022-03-09]{\keys_precompile:nnN} +% \begin{syntax} +% \cs{keys_precompile:nnN} \Arg{module} \Arg{keyval list} \meta{tl} +% \end{syntax} +% Parses the \meta{keyval list} as for \cs{keys_set:nn}, placing the +% resulting code for those which set variables or functions into the +% \meta{tl}. Thus this function \enquote{precompiles} the keyval list into +% a set of results which can be applied rapidly. +% \end{function} +% % \section{Utility functions for keys} % % \begin{function}[EXP, pTF, updated = 2022-01-10] @@ -1661,6 +1673,14 @@ % \end{macrocode} % \end{variable} % +% \begin{variable}{\l_@@_precompile_bool, \l_@@_precompile_tl} +% For digesting keys. +% \begin{macrocode} +\bool_new:N \l_@@_precompile_bool +\tl_new:N \l_@@_precompile_tl +% \end{macrocode} +% \end{variable} +% % \begin{variable}{\l_keys_usage_load_prop, \l_keys_usage_preamble_prop} % Global data for document-level information. % \begin{macrocode} @@ -1694,6 +1714,19 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\@@_precompile:n} +% An auxiliary to allow cleaner showing of code. +% \begin{macrocode} +\cs_new_protected:Npn \@@_precompile:n #1 + { + \bool_if:NTF \l_@@_precompile_bool + { \tl_put_right:Nn \l_@@_precompile_tl } + { \use:n } + {#1} + } +% \end{macrocode} +% \end{macro} +% % \subsection{The key defining mechanism} % % \begin{macro}{\keys_define:nn} @@ -1866,7 +1899,7 @@ { \exp_not:c { bool_ #2 set_ #3 :N } \exp_not:N #1 } \@@_cmd_set:nx { \l_keys_path_str / false } { \exp_not:c { bool_ #2 set_ #4 :N } \exp_not:N #1 } - \@@_cmd_set:nn { \l_keys_path_str / unknown } + \@@_cmd_set_direct:nn { \l_keys_path_str / unknown } { \msg_error:nnx { keys } { boolean-values-only } \l_keys_key_str @@ -1909,8 +1942,8 @@ { \cs_set_nopar:cpn { \c_@@_type_root_str \l_keys_path_str } { choice } - \@@_cmd_set:nn \l_keys_path_str { #1 {##1} } - \@@_cmd_set:nn { \l_keys_path_str / unknown } + \@@_cmd_set_direct:nn \l_keys_path_str { #1 {##1} } + \@@_cmd_set_direct:nn { \l_keys_path_str / unknown } { \msg_error:nnxx { keys } { choice-unknown } \l_keys_path_str {##1} @@ -1952,13 +1985,18 @@ % \end{macro} % % \begin{macro} -% {\@@_cmd_set:nn, \@@_cmd_set:nx, \@@_cmd_set:Vn, \@@_cmd_set:Vo} +% { +% \@@_cmd_set:nn, \@@_cmd_set:nx, \@@_cmd_set:Vn, \@@_cmd_set:Vo, +% \@@_cmd_set_direct:nn +% } % Setting the code for a key first logs if appropriate that we are % defining a new key, then saves the code. % \begin{macrocode} \cs_new_protected:Npn \@@_cmd_set:nn #1#2 - { \cs_set_protected:cpn { \c_@@_code_root_str #1 } ##1 {#2} } + { \@@_cmd_set_direct:nn {#1} { \@@_precompile:n {#2} } } \cs_generate_variant:Nn \@@_cmd_set:nn { nx , Vn , Vo } +\cs_new_protected:Npn \@@_cmd_set_direct:nn #1#2 + { \cs_set_protected:cpn { \c_@@_code_root_str #1 } ##1 {#2} } % \end{macrocode} % \end{macro} % @@ -1970,7 +2008,10 @@ \cs_new_protected:Npn \@@_cs_set:NNpn #1#2#3# { \cs_set_protected:cpx { \c_@@_code_root_str \l_keys_path_str } ##1 - { #1 \exp_not:N #2 \exp_not:n {#3} {##1} } + { + \@@_precompile:n + { #1 \exp_not:N #2 \exp_not:n {#3} {##1} } + } \use_none:n } \cs_generate_variant:Nn \@@_cs_set:NNpn { Nc } @@ -2089,13 +2130,17 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_meta_make:n #1 { - \@@_cmd_set:Vo \l_keys_path_str + \exp_args:NVo \@@_cmd_set_direct:nn \l_keys_path_str { - \exp_after:wN \keys_set:nn \exp_after:wN { \l_@@_module_str } {#1} + \exp_after:wN \keys_set:nn \exp_after:wN + { \l_@@_module_str } {#1} } } \cs_new_protected:Npn \@@_meta_make:nn #1#2 - { \@@_cmd_set:Vn \l_keys_path_str { \keys_set:nn {#1} {#2} } } + { + \exp_args:NV \@@_cmd_set_direct:nn + \l_keys_path_str { \keys_set:nn {#1} {#2} } + } % \end{macrocode} % \end{macro} % \end{macro} @@ -2895,6 +2940,20 @@ % \end{macro} % \end{macro} % +% \begin{macro}{\keys_precompile:nnN} +% A simple wrapper. +% \begin{macrocode} +\cs_new_protected:Npn \keys_precompile:nnN #1#2#3 + { + \bool_set_true:N \l_@@_precompile_bool + \tl_clear:N \l_@@_precompile_tl + \keys_set:nn {#1} {#2} + \bool_set_false:N \l_@@_precompile_bool + \tl_set_eq:NN #3 \l_@@_precompile_tl + } +% \end{macrocode} +% \end{macro} +% % \begin{macro}{\@@_set_keyval:n, \@@_set_keyval:nn} % \begin{macro}{\@@_set_keyval:nnn, \@@_set_keyval:onn} % \begin{macro}{\@@_find_key_module:wNN} @@ -3379,7 +3438,11 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\keys_show:nn, \keys_log:nn, \@@_show:Nnn} +% \begin{macro}{\keys_show:nn, \keys_log:nn} +% \begin{macro}{\@@_show:Nnn} +% \begin{macro}{\@@_show:n} +% \begin{macro}{\@@_show:w} +% \begin{macro}{\@@_show:Nw} % To show a key, show its code using a message. % \begin{macrocode} \cs_new_protected:Npn \keys_show:nn @@ -3395,18 +3458,52 @@ { \exp_args:Nnf \msg_show_item_unbraced:nn { code } { - \exp_args:Nc \cs_replacement_spec:N + \exp_args:Ne \@@_show:n { - \c_@@_code_root_str - \@@_trim_spaces:n { #2 / #3 } + \exp_args:Nc \cs_replacement_spec:N + { + \c_@@_code_root_str + \@@_trim_spaces:n { #2 / #3 } + } } } } } { } { } } +\cs_new:Npx \@@_show:n #1 + { + \exp_not:N \@@_show:w + #1 + \tl_to_str:n { \@@_precompile:n } + #1 + \tl_to_str:n { \@@_precompile:n } + \exp_not:N \s_@@_stop + } +\use:x + { + \cs_new:Npn \exp_not:N \@@_show:w + ##1 \tl_to_str:n { \@@_precompile:n } + ##2 \tl_to_str:n { \@@_precompile:n } + ##3 \exp_not:N \s_@@_stop + } + { + \tl_if_blank:nTF {#2} + {#1} + { \@@_show:Nw #2 \s_@@_stop } + } +\use:x + { + \cs_new:Npn \exp_not:N \@@_show:Nw ##1##2 + \c_right_brace_str \exp_not:N \s_@@_stop + } + {#2} % \end{macrocode} % \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % % \subsection{Messages} % diff --git a/macros/latex/contrib/l3kernel/l3legacy.dtx b/macros/latex/contrib/l3kernel/l3legacy.dtx index fb04de0adf..534d37be27 100644 --- a/macros/latex/contrib/l3kernel/l3legacy.dtx +++ b/macros/latex/contrib/l3kernel/l3legacy.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % @@ -100,15 +100,19 @@ % \end{macrocode} % % \begin{macro}[EXP,pTF]{\legacy_if:n} -% A friendly wrapper. +% A friendly wrapper. We need to use the \cs{if:w} approach here, rather than +% testing against \tn{iftrue}/\tn{iffalse} as the latter approach fails for +% primitive conditionals such as \tn{ifmmode}. The \cs{reverse_if:N} here +% means that we get a slightly more useful error if the name is undefined. % \begin{macrocode} \prg_new_conditional:Npnn \legacy_if:n #1 { p , T , F , TF } { - \exp_args:Nc \if_meaning:w { if#1 } \iftrue - \prg_return_true: - \else: + \exp_after:wN \reverse_if:N + \cs:w if#1 \cs_end: \prg_return_false: - \fi: + \else: + \prg_return_true: + \fi: } % \end{macrocode} % \end{macro} diff --git a/macros/latex/contrib/l3kernel/l3luatex.dtx b/macros/latex/contrib/l3kernel/l3luatex.dtx index 456a02293d..04786d3c1f 100644 --- a/macros/latex/contrib/l3kernel/l3luatex.dtx +++ b/macros/latex/contrib/l3kernel/l3luatex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % @@ -317,6 +317,7 @@ local scan_string = token.scan_string local scan_keyword = token.scan_keyword local put_next = token.put_next local token_create = token.create +local token_new = token.new % \end{macrocode} % % Since token.create only returns useful values after the tokens diff --git a/macros/latex/contrib/l3kernel/l3msg.dtx b/macros/latex/contrib/l3kernel/l3msg.dtx index 23add4a7c6..ef95cabf99 100644 --- a/macros/latex/contrib/l3kernel/l3msg.dtx +++ b/macros/latex/contrib/l3kernel/l3msg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % @@ -1854,9 +1854,7 @@ { Cannot~generate~null~char~as~a~space. } \msg_new:nnn { char } { out-of-range } { Charcode~requested~out~of~engine~range. } -\msg_new:nnn { char } { space } - { Cannot~generate~space~chars. } -\msg_new:nnnn { ior } { quote-in-shell } +\msg_new:nnnn { kernel } { quote-in-shell } { Quotes~in~shell~command~'#1'. } { Shell~commands~cannot~contain~quotes~("). } \msg_new:nnnn { keys } { no-property } diff --git a/macros/latex/contrib/l3kernel/l3names.dtx b/macros/latex/contrib/l3kernel/l3names.dtx index f330647e3f..50512593c3 100644 --- a/macros/latex/contrib/l3kernel/l3names.dtx +++ b/macros/latex/contrib/l3kernel/l3names.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % @@ -1140,12 +1140,14 @@ \@@_primitive:NN \kcatcode \tex_kcatcode:D \@@_primitive:NN \kuten \tex_kuten:D \@@_primitive:NN \lastnodechar \tex_lastnodechar:D + \@@_primitive:NN \lastnodefont \tex_lastnodefont:D \@@_primitive:NN \lastnodesubtype \tex_lastnodesubtype:D \@@_primitive:NN \noautospacing \tex_noautospacing:D \@@_primitive:NN \noautoxspacing \tex_noautoxspacing:D \@@_primitive:NN \pagefistretch \tex_pagefistretch:D \@@_primitive:NN \postbreakpenalty \tex_postbreakpenalty:D \@@_primitive:NN \prebreakpenalty \tex_prebreakpenalty:D + \@@_primitive:NN \ptexlineendmode \tex_lineendmode:D \@@_primitive:NN \ptexminorversion \tex_ptexminorversion:D \@@_primitive:NN \ptexrevision \tex_ptexrevision:D \@@_primitive:NN \ptexversion \tex_ptexversion:D @@ -1161,6 +1163,8 @@ \@@_primitive:NN \textbaselineshiftfactor \tex_textbaselineshiftfactor:D \@@_primitive:NN \tfont \tex_tfont:D + \@@_primitive:NN \toucs \tex_toucs:D + \@@_primitive:NN \ucs \tex_ucs:D \@@_primitive:NN \xkanjiskip \tex_xkanjiskip:D \@@_primitive:NN \xspcode \tex_xspcode:D \@@_primitive:NN \ybaselineshift \tex_ybaselineshift:D @@ -1176,7 +1180,6 @@ \@@_primitive:NN \kchar \tex_kchar:D \@@_primitive:NN \kchardef \tex_kchardef:D \@@_primitive:NN \kuten \tex_kuten:D - \@@_primitive:NN \ucs \tex_ucs:D \@@_primitive:NN \uptexrevision \tex_uptexrevision:D \@@_primitive:NN \uptexversion \tex_uptexversion:D % \end{macrocode} @@ -1195,6 +1198,7 @@ % \begin{macrocode} \@@_primitive:NN \partokencontext \tex_partokencontext:D \@@_primitive:NN \partokenname \tex_partokenname:D + \@@_primitive:NN \showstream \tex_showstream:D \@@_primitive:NN \tracingstacklevels \tex_tracingstacklevels:D % \end{macrocode} % End of the \enquote{just the names} part of the source. @@ -1470,9 +1474,9 @@ % Here \enquote{smaller} refers to codepoint order which does not correspond to % the user expected order for most non-ASCII strings. % \begin{macrocode} -local minus_tok = token.new(string.byte'-', 12) -local zero_tok = token.new(string.byte'0', 12) -local one_tok = token.new(string.byte'1', 12) +local minus_tok = token_new(string.byte'-', 12) +local zero_tok = token_new(string.byte'0', 12) +local one_tok = token_new(string.byte'1', 12) luacmd('tex_strcmp:D', function() local first = scan_string() local second = scan_string() @@ -1487,14 +1491,19 @@ end, 'global') % % \begin{macro}{\tex_Ucharcat:D} % Creating arbitrary chars using |tex.cprint|. -% The alternative approach using |token.put_next(token.create(...))| -% would be about 10\% slower. +% The alternative approach using |token.new(...)| is about 10\% slower +% but needed to create arbitrary space tokens. % \begin{macrocode} +local sprint = tex.sprint local cprint = tex.cprint luacmd('tex_Ucharcat:D', function() local charcode = scan_int() local catcode = scan_int() - cprint(catcode, utf8_char(charcode)) + if catcode == 10 then + sprint(token_new(charcode, 10)) + else + cprint(catcode, utf8_char(charcode)) + end end, 'global') % \end{macrocode} % \end{macro} diff --git a/macros/latex/contrib/l3kernel/l3news.pdf b/macros/latex/contrib/l3kernel/l3news.pdf index 41629c69b0..9ca06a0a68 100644 Binary files a/macros/latex/contrib/l3kernel/l3news.pdf and b/macros/latex/contrib/l3kernel/l3news.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news01.pdf b/macros/latex/contrib/l3kernel/l3news01.pdf index db35f561cc..1976dbbfc5 100644 Binary files a/macros/latex/contrib/l3kernel/l3news01.pdf and b/macros/latex/contrib/l3kernel/l3news01.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news02.pdf b/macros/latex/contrib/l3kernel/l3news02.pdf index 9a55490e56..96c2a09157 100644 Binary files a/macros/latex/contrib/l3kernel/l3news02.pdf and b/macros/latex/contrib/l3kernel/l3news02.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news03.pdf b/macros/latex/contrib/l3kernel/l3news03.pdf index 8af2efbdcd..68b424976f 100644 Binary files a/macros/latex/contrib/l3kernel/l3news03.pdf and b/macros/latex/contrib/l3kernel/l3news03.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news04.pdf b/macros/latex/contrib/l3kernel/l3news04.pdf index 3732cec9c7..4337d21355 100644 Binary files a/macros/latex/contrib/l3kernel/l3news04.pdf and b/macros/latex/contrib/l3kernel/l3news04.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news05.pdf b/macros/latex/contrib/l3kernel/l3news05.pdf index 79a1463cf8..6a23c7d8bb 100644 Binary files a/macros/latex/contrib/l3kernel/l3news05.pdf and b/macros/latex/contrib/l3kernel/l3news05.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news06.pdf b/macros/latex/contrib/l3kernel/l3news06.pdf index 40f1de1db6..07b0787506 100644 Binary files a/macros/latex/contrib/l3kernel/l3news06.pdf and b/macros/latex/contrib/l3kernel/l3news06.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news07.pdf b/macros/latex/contrib/l3kernel/l3news07.pdf index 7ae558a916..221fdc815a 100644 Binary files a/macros/latex/contrib/l3kernel/l3news07.pdf and b/macros/latex/contrib/l3kernel/l3news07.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news08.pdf b/macros/latex/contrib/l3kernel/l3news08.pdf index b9b64ff4a2..88dce29221 100644 Binary files a/macros/latex/contrib/l3kernel/l3news08.pdf and b/macros/latex/contrib/l3kernel/l3news08.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news09.pdf b/macros/latex/contrib/l3kernel/l3news09.pdf index 2029fe30fb..0e81abd093 100644 Binary files a/macros/latex/contrib/l3kernel/l3news09.pdf and b/macros/latex/contrib/l3kernel/l3news09.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news10.pdf b/macros/latex/contrib/l3kernel/l3news10.pdf index aaad79b8ab..96bbed2245 100644 Binary files a/macros/latex/contrib/l3kernel/l3news10.pdf and b/macros/latex/contrib/l3kernel/l3news10.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news11.pdf b/macros/latex/contrib/l3kernel/l3news11.pdf index 127719deb2..39754d32c5 100644 Binary files a/macros/latex/contrib/l3kernel/l3news11.pdf and b/macros/latex/contrib/l3kernel/l3news11.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news12.pdf b/macros/latex/contrib/l3kernel/l3news12.pdf index 3fce91c694..9035265fc7 100644 Binary files a/macros/latex/contrib/l3kernel/l3news12.pdf and b/macros/latex/contrib/l3kernel/l3news12.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3pdf.dtx b/macros/latex/contrib/l3kernel/l3pdf.dtx index c6841148de..b2ed19cb08 100644 --- a/macros/latex/contrib/l3kernel/l3pdf.dtx +++ b/macros/latex/contrib/l3kernel/l3pdf.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3prefixes.csv b/macros/latex/contrib/l3kernel/l3prefixes.csv index d9786a1a1e..2648b9b874 100644 --- a/macros/latex/contrib/l3kernel/l3prefixes.csv +++ b/macros/latex/contrib/l3kernel/l3prefixes.csv @@ -40,6 +40,7 @@ clist,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https cmd,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2021-01-20,2021-03-03, code,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2021-04-23,2021-04-23, codedoc,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,Somewhat experimental: may change +codehigh,codehigh,Jianrui Lyu,https://github.com/lvjr/codehigh,https://github.com/lvjr/codehigh.git,https://github.com/lvjr/codehigh/issues,2022-04-02,2022-04-02, coffin,"l3kernel,xcoffins",The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27, colon,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12, color,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27, @@ -89,6 +90,7 @@ fnpct,fnpct,Clemens Niederberger,https://github.com/cgnieder/fnpct/,https://gith fontsizes,fontsizes,Julien Rivaud,,,,,2018-06-13, fontspec,fontspec,Will Robertson,https://github.com/wspr/fontspec,https://github.com/wspr/fontspec.git,https://github.com/wspr/fontspec/issues,2013-03-16,2013-03-16, fp,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27, +fun,functional,Jianrui Lyu,https://github.com/lvjr/functional,https://github.com/lvjr/functional.git,https://github.com/lvjr/functional/issues,2022-04-02,2022-04-02, galley,l3galley,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27, gatherenum,gatherenum,Julien Rivaud,,,,2018-06-13,2018-06-14, getree,genealogytree,Thomas F. Sturm,https://github.com/T-F-S/genealogytree,https://github.com/T-F-S/genealogytree.git,https://github.com/T-F-S/genealogytree/issues,2020-02-19,2020-02-19, @@ -125,6 +127,7 @@ lltxmath,lualatex-math,Philipp Stephani,https://github.com/phst/lualatex-math,ht log,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12, lua,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27, luatex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27, +lwc,lua-widow-control,Max Chernoff,https://github.com/gucci-on-fleek/lua-widow-control,https://github.com/gucci-on-fleek/lua-widow-control.git,https://github.com/gucci-on-fleek/lua-widow-control/issues,2022-02-24,2022-02-24, mark,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12, markdown,markdown,Vít Novotný,https://ctan.org/pkg/markdown,https://github.com/witiko/markdown.git,https://github.com/witiko/markdown/issues,2021-09-08,2021-09-08, marks,l3kernel/xmarks,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2020-02-17,2020-02-17, @@ -149,6 +152,7 @@ namedef,namedef,Phelype Oleinik,https://github.com/PhelypeOleinik/namedef,https: nan,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12, nicematrix,nicematrix,François Pantigny,,,,2019-12-19,2019-12-19, nil,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12, +ninecolors,ninecolors,Jianrui Lyu,https://github.com/lvjr/ninecolors,https://github.com/lvjr/ninecolors.git,https://github.com/lvjr/ninecolors/issues,2022-04-02,2022-04-02, nmc,numerica,Andrew Parsloe,,,,2021-06-30,2021-06-30, no,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12, notestobib,notes2bib,Joseph Wright,https://github.com/josephwright/notes2bib,https://github.com/josephwright/notes2bib.git,https://github.com/josephwright/notes2bib/issues,2012-11-07,2012-11-07, @@ -218,6 +222,7 @@ substances,substances,Clemens Niederberger,https://github.com/cgnieder/substance sys,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2015-09-07,2015-09-08, tag,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2019-06-02,2019-06-02, tasks,tasks,Clemens Niederberger,https://github.com/cgnieder/tasks/,https://github.com/cgnieder/tasks.git,https://github.com/cgnieder/cgnieder/tasks/issues,2013-03-16,2020-04-14, +tblr,tabularray,Jianrui Lyu,https://github.com/lvjr/tabularray,https://github.com/lvjr/tabularray.git,https://github.com/lvjr/tabularray/issues,2022-04-02,2022-04-02 tcobox,tcolorbox,Thomas F. Sturm,https://github.com/T-F-S/tcolorbox,https://github.com/T-F-S/tcolorbox.git,https://github.com/T-F-S/tcolorbox/issues,2020-02-19,2020-02-19, term,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12, tex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27, diff --git a/macros/latex/contrib/l3kernel/l3prefixes.pdf b/macros/latex/contrib/l3kernel/l3prefixes.pdf index 7724db3c3b..433569b9b2 100644 Binary files a/macros/latex/contrib/l3kernel/l3prefixes.pdf and b/macros/latex/contrib/l3kernel/l3prefixes.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3prg.dtx b/macros/latex/contrib/l3kernel/l3prg.dtx index 1742e7c0a5..98f6211187 100644 --- a/macros/latex/contrib/l3kernel/l3prg.dtx +++ b/macros/latex/contrib/l3kernel/l3prg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3prop.dtx b/macros/latex/contrib/l3kernel/l3prop.dtx index de14307b84..1d0694fe6a 100644 --- a/macros/latex/contrib/l3kernel/l3prop.dtx +++ b/macros/latex/contrib/l3kernel/l3prop.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3quark.dtx b/macros/latex/contrib/l3kernel/l3quark.dtx index a31d883016..53ea8dfc18 100644 --- a/macros/latex/contrib/l3kernel/l3quark.dtx +++ b/macros/latex/contrib/l3kernel/l3quark.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3regex.dtx b/macros/latex/contrib/l3kernel/l3regex.dtx index 4eb2dacf10..e9c254bb02 100644 --- a/macros/latex/contrib/l3kernel/l3regex.dtx +++ b/macros/latex/contrib/l3kernel/l3regex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3seq.dtx b/macros/latex/contrib/l3kernel/l3seq.dtx index c6300a8447..bf285df964 100644 --- a/macros/latex/contrib/l3kernel/l3seq.dtx +++ b/macros/latex/contrib/l3kernel/l3seq.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3skip.dtx b/macros/latex/contrib/l3kernel/l3skip.dtx index d6ba0a90c1..75e80b0c54 100644 --- a/macros/latex/contrib/l3kernel/l3skip.dtx +++ b/macros/latex/contrib/l3kernel/l3skip.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3sort.dtx b/macros/latex/contrib/l3kernel/l3sort.dtx index 75509e1e54..11604bbf81 100644 --- a/macros/latex/contrib/l3kernel/l3sort.dtx +++ b/macros/latex/contrib/l3kernel/l3sort.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3str-convert.dtx b/macros/latex/contrib/l3kernel/l3str-convert.dtx index f854e3ea2e..8646c378e5 100644 --- a/macros/latex/contrib/l3kernel/l3str-convert.dtx +++ b/macros/latex/contrib/l3kernel/l3str-convert.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3str.dtx b/macros/latex/contrib/l3kernel/l3str.dtx index 897f4b962b..ddfdd10279 100644 --- a/macros/latex/contrib/l3kernel/l3str.dtx +++ b/macros/latex/contrib/l3kernel/l3str.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % @@ -222,8 +222,8 @@ % % \section{String conditionals} % -% \begin{function}[EXP,pTF, added = 2015-09-18] -% {\str_if_empty:N, \str_if_empty:c} +% \begin{function}[EXP,pTF, added = 2015-09-18, updated = 2022-03-21] +% {\str_if_empty:N, \str_if_empty:c, \str_if_empty:n} % \begin{syntax} % \cs{str_if_empty_p:N} \meta{str~var} % \cs{str_if_empty:NTF} \meta{str~var} \Arg{true code} \Arg{false code} @@ -282,8 +282,8 @@ % tests whether \meta{string_2} is found inside \meta{string_1}. % \end{function} % -% \begin{function}[added = 2013-07-24, updated = 2015-02-28, EXP, noTF] -% {\str_case:nn, \str_case:Vn, \str_case:on, \str_case:nV, \str_case:nv} +% \begin{function}[added = 2013-07-24, updated = 2022-03-21, EXP, noTF] +% {\str_case:nn, \str_case:Vn, \str_case:Nn, \str_case:on, \str_case:nV, \str_case:nv} % \begin{syntax} % \cs{str_case:nnTF} \Arg{test string} \\ % ~~|{| \\ @@ -747,16 +747,6 @@ % correctly deal with context-dependence and other factors appropriate % to text case changing. % \end{itemize} -% -% \begin{texnote} -% As with all \pkg{expl3} functions, the input supported by -% \cs{str_foldcase:n} is \emph{engine-native} characters which are or -% interoperate with \textsc{utf-8}. As such, when used with \pdfTeX{} -% \emph{only} the Latin alphabet characters A--Z are case-folded -% (\emph{i.e.}~the \textsc{ascii} range which coincides with -% \textsc{utf-8}). Full \textsc{utf-8} support is available with both -% \XeTeX{} and \LuaTeX{}. -% \end{texnote} % \end{function} % % \begin{function}[EXP, added = 2019-11-26] @@ -789,18 +779,6 @@ % a language-insensitive process, there is no special treatment of % Turkic input (\emph{i.e.}~\texttt{I} always folds to \texttt{i} and % not to \texttt{\i}). -% -% \begin{texnote} -% As with all \pkg{expl3} functions, the input supported by -% \cs{str_foldcase:n} is \emph{engine-native} characters which are or -% interoperate with \textsc{utf-8}. As such, when used with \pdfTeX{} -% \emph{only} the Latin alphabet characters A--Z are case-folded -% (\emph{i.e.}~the \textsc{ascii} range which coincides with -% \textsc{utf-8}). Full \textsc{utf-8} support is available with both -% \XeTeX{} and \LuaTeX{}, subject only to the fact that \XeTeX{} in -% particular has issues with characters of code above hexadecimal -% $0\mathrm{xFFFF}$ when interacting with \cs{tl_to_str:n}. -% \end{texnote} % \end{function} % % \section{Viewing strings} @@ -1113,7 +1091,7 @@ % % \begin{macro}[pTF, EXP] % { -% \str_if_empty:N, \str_if_empty:c, +% \str_if_empty:N, \str_if_empty:c, \str_if_empty:n, % \str_if_exist:N, \str_if_exist:c % } % More copy-paste! @@ -1126,6 +1104,8 @@ { p , T , F , TF } \prg_new_eq_conditional:NNn \str_if_empty:c \tl_if_empty:c { p , T , F , TF } +\prg_new_eq_conditional:NNn \str_if_empty:n \tl_if_empty:n + { p , T , F , TF } % \end{macrocode} % \end{macro} % @@ -1224,7 +1204,7 @@ % \end{macro} % % \begin{macro}[EXP, noTF] -% {\str_case:nn, \str_case:Vn, \str_case:on, \str_case:nV, \str_case:nv, \str_case_e:nn} +% {\str_case:nn, \str_case:Vn, \str_case:Nn, \str_case:on, \str_case:nV, \str_case:nv, \str_case_e:nn} % \begin{macro}[EXP]{\@@_case:nnTF, \@@_case_e:nnTF} % \begin{macro}[EXP] % {\@@_case:nw, \@@_case_e:nw, \@@_case_end:nw} @@ -1254,6 +1234,10 @@ \cs_new:Npn \@@_case:nnTF #1#2#3#4 { \@@_case:nw {#1} #2 {#1} { } \s_@@_mark {#3} \s_@@_mark {#4} \s_@@_stop } \cs_generate_variant:Nn \str_case:nn { V , o , nV , nv } +\cs_new_eq:NN \str_case:Nn \str_case:Vn +\cs_new_eq:NN \str_case:NnT \str_case:VnT +\cs_new_eq:NN \str_case:NnF \str_case:VnF +\cs_new_eq:NN \str_case:NnTF \str_case:VnTF \prg_generate_conditional_variant:Nnn \str_case:nn { V , o , nV , nv } { T , F , TF } \cs_new:Npn \@@_case:nw #1#2#3 @@ -1918,10 +1902,21 @@ % \begin{macro}[EXP]{\@@_change_case_loop:nw} % \begin{macro}[EXP]{\@@_change_case_space:n} % \begin{macro}[EXP]{\@@_change_case_char:nN} +% \begin{macro}[EXP]{\@@_change_case_char_UTFviii:nNN} +% \begin{macro}[EXP]{\@@_change_case_char_UTFviii:nNNN} +% \begin{macro}[EXP]{\@@_change_case_char_UTFviii:nNNNN} +% \begin{macro}[EXP] +% { +% \@@_change_case_char_UTFviii:nn , +% \@@_change_case_char_UTFviii_lower:nn , +% \@@_change_case_char_UTFviii_upper:nn , +% \@@_change_case_char_UTFviii_fold:nn +% } % Case changing for programmatic reasons is done by first detokenizing % input then doing a simple loop that only has to worry about spaces % and everything else. The output is detokenized to allow data sharing -% with text-based case changing. +% with text-based case changing. Similarly, for $8$-bit engines the +% multi-byte information is shared. % \begin{macrocode} \cs_new:Npn \str_foldcase:n #1 { \@@_change_case:nn {#1} { fold } } \cs_new:Npn \str_lowercase:n #1 { \@@_change_case:nn {#1} { lower } } @@ -1965,7 +1960,100 @@ { \use:c { char_str_ #1 case:N } #2 } \@@_change_case_loop:nw {#1} } +\if_int_compare:w 0 + \cs_if_exist:NT \tex_XeTeXversion:D { 1 } + \cs_if_exist:NT \tex_luatexversion:D { 1 } + > 0 \exp_stop_f: +\else: + \cs_gset:Npn \@@_change_case_char:nN #1#2 + { + \@@_if_recursion_tail_stop_do:Nn #2 + { \@@_change_case_end:wn } + \int_compare:nNnTF { `#2 } > { "80 } + { + \int_compare:nNnTF { `#2 } < { "E0 } + { \@@_change_case_char_UTFviii:nNN } + { + \int_compare:nNnTF { `#2 } < { "F0 } + { \@@_change_case_char_UTFviii:nNNN } + { \@@_change_case_char_UTFviii:nNNNN } + } + {#1} #2 + } + { + \@@_change_case_output:fw + { \use:c { char_str_ #1 case:N } #2 } + \@@_change_case_loop:nw {#1} + } + } + \cs_new:Npn \@@_change_case_char_UTFviii:nNN #1#2#3 + { \@@_change_case_char_UTFviii:nn {#1} {#2#3} } + \cs_new:Npn \@@_change_case_char_UTFviii:nNNN #1#2#3#4 + { \@@_change_case_char_UTFviii:nn {#1} {#2#3#4} } + \cs_new:Npn \@@_change_case_char_UTFviii:nNNNN #1#2#3#4#5 + { \@@_change_case_char_UTFviii:nn {#1} {#2#3#4#5} } % \end{macrocode} +% Skip high chars for the Japanese engines. +% \begin{macrocode} + \cs_if_exist:NF \tex_pdftexversion:D + { + \cs_gset:Npn \@@_change_case_char_UTFviii:nNNN #1#2#3#4 + { + \@@_change_case_output:nw {#2#3#4} + \@@_change_case_loop:nw {#1} + } + \cs_gset:Npn \@@_change_case_char_UTFviii:nNNNN #1#2#3#4#5 + { + \@@_change_case_output:nw {#2#3#4#5} + \@@_change_case_loop:nw {#1} + } + } + \cs_new:Npn \@@_change_case_char_UTFviii:nn #1#2 + { + \use:c { @@_change_case_char_UTFviii_ #1 :nn } {#1} {#2} + } + \cs_new:Npn \@@_change_case_char_UTFviii_upper:nn #1#2 + { + \@@_change_case_output:fw + { + \cs_if_exist:cTF { c__kernel_ #1 case_ #2 _tl } + { + \__kernel_tl_to_str:w \exp_after:wN \exp_after:wN \exp_after:wN + { \cs:w c__kernel_ #1 case_ #2 _tl \cs_end: } + } + {#2} + } + \@@_change_case_loop:nw {#1} + } + \cs_new_eq:NN \@@_change_case_char_UTFviii_lower:nn + \@@_change_case_char_UTFviii_upper:nn + \cs_new:Npn \@@_change_case_char_UTFviii_fold:nn #1#2 + { + \@@_change_case_output:fw + { + \cs_if_exist:cTF { c__kernel_ #1 case_ #2 _tl } + { + \__kernel_tl_to_str:w \exp_after:wN \exp_after:wN \exp_after:wN + { \cs:w c__kernel_ #1 case_ #2 _tl \cs_end: } + } + { + \cs_if_exist:cTF { c__kernel_lowercase_ #2 _tl } + { + \__kernel_tl_to_str:w + \exp_after:wN \exp_after:wN \exp_after:wN + { \cs:w c__kernel_lowercase_ #2 _tl \cs_end: } + } + {#2} + } + } + \@@_change_case_loop:nw {#1} + } +\fi: +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % \end{macro} % \end{macro} % \end{macro} diff --git a/macros/latex/contrib/l3kernel/l3styleguide.pdf b/macros/latex/contrib/l3kernel/l3styleguide.pdf index 63989dbdbf..21449e7b02 100644 Binary files a/macros/latex/contrib/l3kernel/l3styleguide.pdf and b/macros/latex/contrib/l3kernel/l3styleguide.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3styleguide.tex b/macros/latex/contrib/l3kernel/l3styleguide.tex index 86f5230696..6fd43ce801 100644 --- a/macros/latex/contrib/l3kernel/l3styleguide.tex +++ b/macros/latex/contrib/l3kernel/l3styleguide.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2022-02-24} +\date{Released 2022-04-10} \begin{document} diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf index 3d449d0537..587c0c8b36 100644 Binary files a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf and b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.tex b/macros/latex/contrib/l3kernel/l3syntax-changes.tex index 430b3cb056..722a90977a 100644 --- a/macros/latex/contrib/l3kernel/l3syntax-changes.tex +++ b/macros/latex/contrib/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 2022-02-24} +\date{Released 2022-04-10} \newcommand{\TF}{\textit{(TF)}} diff --git a/macros/latex/contrib/l3kernel/l3sys.dtx b/macros/latex/contrib/l3kernel/l3sys.dtx index 4134831b8b..a211af619b 100644 --- a/macros/latex/contrib/l3kernel/l3sys.dtx +++ b/macros/latex/contrib/l3kernel/l3sys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.pdf b/macros/latex/contrib/l3kernel/l3term-glossary.pdf index 4cf56475bb..d200cd3e0c 100644 Binary files a/macros/latex/contrib/l3kernel/l3term-glossary.pdf and b/macros/latex/contrib/l3kernel/l3term-glossary.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.tex b/macros/latex/contrib/l3kernel/l3term-glossary.tex index bd10abf6f2..90b3a71af2 100644 --- a/macros/latex/contrib/l3kernel/l3term-glossary.tex +++ b/macros/latex/contrib/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 2022-02-24} +\date{Released 2022-04-10} \newcommand{\TF}{\textit{(TF)}} diff --git a/macros/latex/contrib/l3kernel/l3text-case.dtx b/macros/latex/contrib/l3kernel/l3text-case.dtx index 61681108e2..faa9960f79 100644 --- a/macros/latex/contrib/l3kernel/l3text-case.dtx +++ b/macros/latex/contrib/l3kernel/l3text-case.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % @@ -670,10 +670,10 @@ { \@@_change_case_char_UTFviii:nnnn {#1} {#2} {#3} {#4#5#6#7} } \cs_new:Npn \@@_change_case_char_UTFviii:nnnn #1#2#3#4 { - \cs_if_exist:cTF { c_@@_ #1 case_ \tl_to_str:n {#4} _tl } + \cs_if_exist:cTF { c__kernel_ #1 case_ \tl_to_str:n {#4} _tl } { \@@_change_case_store:v - { c_@@_ #1 case_ \tl_to_str:n {#4} _tl } + { c__kernel_ #1 case_ \tl_to_str:n {#4} _tl } } { \@@_change_case_store:n {#4} } \use:c { @@_change_case_char_next_ #2 :nn } {#2} {#3} @@ -1536,11 +1536,11 @@ % % For $8$-bit engines we now need to define the case-change data for % the multi-octet mappings. This data is here not in the \pkg{char} module -% as the multi-byte nature means they are never |N|-type. -% These need a list of what code points are -% doable in |T1| so the list is hard coded (there's no saving in loading -% the mappings dynamically). All of the straight-forward ones have two -% octets, so that is taken as read. +% as the multi-byte nature means they are never |N|-type. As this data is +% needed both for text and string work, it is stored as |kernel|: it remains +% internal as it is not really suitable for wider exposure. +% +% The first set of codepoints are those in |T1|: all of these are two bytes. % \begin{macrocode} \group_begin: \bool_lazy_or:nnF @@ -1562,7 +1562,7 @@ { \tl_const:cx { - c_@@_ #1 case_ + c__kernel_ #1 case_ \char_generate:nn {#2} { 12 } \char_generate:nn {#3} { 12 } _tl @@ -1578,7 +1578,7 @@ { \tl_const:cx { - c_@@_lowercase_ + c__kernel_lowercase_ \char_generate:nn {#1} { 12 } \char_generate:nn {#2} { 12 } _tl @@ -1694,8 +1694,7 @@ { 0218 } { 0219 } { 021A } { 021B } % \end{macrocode} -% Add |T2| (Cyrillic) as this is doable using a classical \tn{MakeUppercase} -% approach. +% Add |T2| (Cyrillic) : again two bytes. % \begin{macrocode} { 0400 } { 0450 } { 0401 } { 0451 } @@ -1818,7 +1817,7 @@ { \tl_const:cx { - c_@@_ #3 case_ + c__kernel_ #3 case_ \char_generate:nn {##1} { 12 } \char_generate:nn {##2} { 12 } _tl @@ -1859,7 +1858,7 @@ { \tl_const:cn { - c_@@_ #3 case_ + c__kernel_ #3 case_ \char_generate:nn {##1} { 12 } \char_generate:nn {##2} { 12 } _tl @@ -1880,7 +1879,7 @@ { \tl_const:cx { - c_@@_ #1 case_ + c__kernel_ #1 case_ \char_generate:nn {#2} { 12 } \char_generate:nn {#3} { 12 } \char_generate:nn {#4} { 12 } @@ -1899,7 +1898,7 @@ { \tl_const:cx { - c_@@_lowercase_ + c__kernel_lowercase_ \char_generate:nn {#1} { 12 } \char_generate:nn {#2} { 12 } \char_generate:nn {#3} { 12 } @@ -2025,7 +2024,7 @@ { \tl_const:cx { - c_@@_ #3 case_ + c__kernel_ #3 case_ \char_generate:nn {##1} { 12 } \char_generate:nn {##2} { 12 } \char_generate:nn {##3} { 12 } diff --git a/macros/latex/contrib/l3kernel/l3text-purify.dtx b/macros/latex/contrib/l3kernel/l3text-purify.dtx index 922a371d33..a055aec838 100644 --- a/macros/latex/contrib/l3kernel/l3text-purify.dtx +++ b/macros/latex/contrib/l3kernel/l3text-purify.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3text.dtx b/macros/latex/contrib/l3kernel/l3text.dtx index 0d1365c8d2..3cb5795a5d 100644 --- a/macros/latex/contrib/l3kernel/l3text.dtx +++ b/macros/latex/contrib/l3kernel/l3text.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % @@ -562,11 +562,45 @@ % \end{variable} % % \begin{variable}{\l_text_expand_exclude_tl} -% Commands which need not to expand. +% Commands which need not to expand. We start with a somewhat historical +% list, and tidy up if possible. % \begin{macrocode} \tl_new:N \l_text_expand_exclude_tl \tl_set:Nn \l_text_expand_exclude_tl { \begin \cite \end \label \ref } +\bool_lazy_and:nnT + { \str_if_eq_p:Vn \fmtname { LaTeX2e } } + { \tl_if_exist_p:N \@expl@finalise@setup@@@@ } + { + \tl_gput_right:Nn \@expl@finalise@setup@@@@ + { + \tl_gput_right:Nn \@kernel@after@begindocument + { + \group_begin: + \cs_set_protected:Npn \@@_tmp:w #1 + { + \tl_clear:N \l_text_expand_exclude_tl + \tl_map_inline:nn {#1} + { + \bool_lazy_any:nF + { + { \token_if_protected_macro_p:N ##1 } + { \token_if_protected_long_macro_p:N ##1 } + { + \str_if_eq_p:ee + { \cs_replacement_spec:N ##1 } + { \exp_not:n { \protect ##1 } \c_space_tl } + } + } + { \tl_put_right:Nn \l_text_expand_exclude_tl {##1} } + } + } + \exp_args:NV \@@_tmp:w \l_text_expand_exclude_tl + \exp_args:NNNV \group_end: + \tl_set:Nn \l_text_expand_exclude_tl \l_text_expand_exclude_tl + } + } + } % \end{macrocode} % \end{variable} % @@ -632,13 +666,14 @@ % \begin{macro}[EXP]{\@@_expand_accent:NN} % \begin{macro}[EXP]{\@@_expand_letterlike:N} % \begin{macro}[EXP]{\@@_expand_letterlike:NN} -% \begin{macro}[EXP]{\@@_expand_cs:N, \@@_expand_encoding:N} -% \begin{macro}[EXP]{\@@_expand_encoding_escape:N} +% \begin{macro}[EXP]{\@@_expand_cs:N} +% \begin{macro}[EXP]{\@@_expand_protect:w} % \begin{macro}[EXP]{\@@_expand_protect:N} % \begin{macro}[EXP]{\@@_expand_protect:nN} % \begin{macro}[EXP]{\@@_expand_protect:Nw} % \begin{macro}[EXP]{\@@_expand_testopt:N} % \begin{macro}[EXP]{\@@_expand_testopt:NNn} +% \begin{macro}[EXP]{\@@_expand_encoding:N, \@@_expand_encoding_escape:N} % \begin{macro}[EXP]{\@@_expand_replace:N} % \begin{macro}[EXP]{\@@_expand_replace:n} % \begin{macro}[EXP]{\@@_expand_cs_expand:N} @@ -947,14 +982,15 @@ % \end{macrocode} % \LaTeXe{}'s \cs{protect} makes life interesting. Where possible, we % simply remove it and replace with the \enquote{parent} command; of course, -% the \cs{protect} might be explicit, in which case we need to leave it alone -% if it's required. There is also the case of a straight \tn{@protected@testopt} -% to cover. +% the \cs{protect} might be explicit, in which case we need to leave it alone. +% That includes the case where it's not even followed by an \texttt{N}-type +% token. There is also the case of a straight \tn{@protected@testopt} to +% cover. % \begin{macrocode} \cs_new:Npx \@@_expand_cs:N #1 { \exp_not:N \str_if_eq:nnTF {#1} { \exp_not:N \protect } - { \exp_not:N \@@_expand_protect:N } + { \exp_not:N \@@_expand_protect:w } { \bool_lazy_and:nnTF { \cs_if_exist_p:N \fmtname } @@ -963,8 +999,23 @@ { \exp_not:N \@@_expand_replace:N #1 } } } +\cs_new:Npn \@@_expand_protect:w #1 \q_@@_recursion_stop + { + \tl_if_head_is_N_type:nTF {#1} + { \@@_expand_protect:N } + { + \@@_expand_store:n { \protect } + \@@_expand_loop:w + } + #1 \q_@@_recursion_stop + } \cs_new:Npn \@@_expand_protect:N #1 { + \@@_if_recursion_tail_stop_do:Nn #1 + { + \@@_expand_store:n { \protect } + \@@_expand_end:w + } \exp_args:Ne \@@_expand_protect:nN { \cs_to_str:N #1 } #1 } @@ -1122,6 +1173,7 @@ % \end{macro} % \end{macro} % \end{macro} +% \end{macro} % % \begin{macro} % { diff --git a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx index 9f6527b505..0db5f15d7a 100644 --- a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx +++ b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % @@ -90,7 +90,7 @@ % characters, and the value of registers. % \end{function} % -% \begin{function}[added = 2018-04-09] +% \begin{function}[added = 2018-04-09, updated = 2022-03-26] % {\tl_analysis_map_inline:nn, \tl_analysis_map_inline:Nn} % \begin{syntax} % \cs{tl_analysis_map_inline:nn} \Arg{token list} \Arg{inline function} @@ -935,47 +935,46 @@ % % \subsection{Mapping through the analysis} % -% \begin{macro}{\tl_analysis_map_inline:nn, \tl_analysis_map_inline:Nn} -% \begin{macro}{\@@_analysis_map_inline_aux:Nn} -% \begin{macro}{\@@_analysis_map_inline_aux:nnn} +% \begin{macro}{\tl_analysis_map_inline:Nn, \tl_analysis_map_inline:nn} +% \begin{macro}{\@@_analysis_map:Nn} +% \begin{macro}{\@@_analysis_map:NwNw} % First obtain the analysis of the token list into % \cs{g_@@_analysis_result_tl}. To allow nested mappings, increase the -% nesting depth \cs{g__kernel_prg_map_int} (shared between all modules), then -% define the looping macro, which has a name specific to that nesting -% depth. That looping grabs the \meta{tokens}, \meta{catcode} and -% \meta{char code}; it checks for the end of the loop with -% \cs{use_none:n} |##2|, normally empty, but which becomes -% \cs{tl_map_break:} at the end; it then performs the user's code -% |#2|, and loops by calling itself. When the loop ends, remember to -% decrease the nesting depth. +% nesting depth \cs{g__kernel_prg_map_int} (shared between all +% modules), then define the payload macro, which runs the user code +% and has a name specific to that nesting depth. The looping macro +% grabs the \meta{tokens}, \meta{catcode} and \meta{char code}; it +% checks for the end of the loop with \cs{use_none:n} |##2|, normally +% empty, but which becomes \cs{tl_map_break:} at the end; it then +% calls the payload macro with the arguments in the correct order +% (this is the reason why we cannot directly use the same macro for +% looping and payload), and loops by calling itself. When the loop +% ends, remember to decrease the nesting depth. % \begin{macrocode} +\cs_new_protected:Npn \tl_analysis_map_inline:Nn #1 + { \exp_args:No \tl_analysis_map_inline:nn #1 } \cs_new_protected:Npn \tl_analysis_map_inline:nn #1 { \@@_analysis:n {#1} \int_gincr:N \g__kernel_prg_map_int - \exp_args:Nc \@@_analysis_map_inline_aux:Nn + \exp_args:Nc \@@_analysis_map:Nn { @@_analysis_map_inline_ \int_use:N \g__kernel_prg_map_int :wNw } } -\cs_new_protected:Npn \tl_analysis_map_inline:Nn #1 - { \exp_args:No \tl_analysis_map_inline:nn #1 } -\cs_new_protected:Npn \@@_analysis_map_inline_aux:Nn #1#2 +\cs_new_protected:Npn \@@_analysis_map:Nn #1#2 { - \cs_gset_protected:Npn #1 ##1 \s_@@ ##2 ##3 \s_@@ - { - \use_none:n ##2 - \@@_analysis_map_inline_aux:nnn {##1} {##3} {##2} - } - \cs_gset_protected:Npn \@@_analysis_map_inline_aux:nnn ##1##2##3 - { - #2 - #1 - } - \exp_after:wN #1 + \cs_gset_protected:Npn #1 ##1##2##3 {#2} + \exp_after:wN \@@_analysis_map:NwNw \exp_after:wN #1 \g_@@_analysis_result_tl \s_@@ { ? \tl_map_break: } \s_@@ \prg_break_point:Nn \tl_map_break: { \int_gdecr:N \g__kernel_prg_map_int } } +\cs_new_protected:Npn \@@_analysis_map:NwNw #1 #2 \s_@@ #3 #4 \s_@@ + { + \use_none:n #3 + #1 {#2} {#4} {#3} + \@@_analysis_map:NwNw #1 + } % \end{macrocode} % \end{macro} % \end{macro} diff --git a/macros/latex/contrib/l3kernel/l3tl.dtx b/macros/latex/contrib/l3kernel/l3tl.dtx index bd78c69bde..68d2cdaf8a 100644 --- a/macros/latex/contrib/l3kernel/l3tl.dtx +++ b/macros/latex/contrib/l3kernel/l3tl.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3token.dtx b/macros/latex/contrib/l3kernel/l3token.dtx index 909dff2b7e..3d5858a37a 100644 --- a/macros/latex/contrib/l3kernel/l3token.dtx +++ b/macros/latex/contrib/l3kernel/l3token.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % @@ -139,12 +139,14 @@ % \item $6$ (parameter) % \item $7$ (math superscript) % \item $8$ (math subscript) +% \item $10$ (space) % \item $11$ (letter) % \item $12$ (other) % \item $13$ (active) % \end{itemize} % and other values raise an error. The \meta{charcode} may be any one valid -% for the engine in use. +% for the engine in use, except that for \meta{catcode} $10$, \meta{charcode} +% $0$ is not allowed. % Active characters cannot be generated in older versions of \XeTeX{}. % Another way to build token lists with unusual category codes is % \cs{regex_replace:nnN} |{.*}| \Arg{replacement} \meta{tl~var}. @@ -1527,26 +1529,22 @@ % \begin{macrocode} \cs_new:Npn \@@_generate_aux:w #1 ; #2 ; { - \if_int_compare:w #2 = 10 \exp_stop_f: - \if_int_compare:w #1 = \c_zero_int - \msg_expandable_error:nn { char } { null-space } - \else: - \msg_expandable_error:nn { char } { space } - \fi: + \if_int_odd:w 0 + \if_int_compare:w #2 < 1 \exp_stop_f: 1 \fi: + \if_int_compare:w #2 = 5 \exp_stop_f: 1 \fi: + \if_int_compare:w #2 = 9 \exp_stop_f: 1 \fi: + \if_int_compare:w #2 > 13 \exp_stop_f: 1 \fi: \exp_stop_f: + \msg_expandable_error:nn { char } + { invalid-catcode } \else: \if_int_odd:w 0 - \if_int_compare:w #2 < 1 \exp_stop_f: 1 \fi: - \if_int_compare:w #2 = 5 \exp_stop_f: 1 \fi: - \if_int_compare:w #2 = 9 \exp_stop_f: 1 \fi: - \if_int_compare:w #2 > 13 \exp_stop_f: 1 \fi: \exp_stop_f: + \if_int_compare:w #1 < \c_zero_int 1 \fi: + \if_int_compare:w #1 > \c_max_char_int 1 \fi: \exp_stop_f: \msg_expandable_error:nn { char } - { invalid-catcode } + { out-of-range } \else: - \if_int_odd:w 0 - \if_int_compare:w #1 < \c_zero_int 1 \fi: - \if_int_compare:w #1 > \c_max_char_int 1 \fi: \exp_stop_f: - \msg_expandable_error:nn { char } - { out-of-range } + \if_int_compare:w #2#1 = 100 \exp_stop_f: + \msg_expandable_error:nn { char } { null-space } \else: \@@_generate_aux:nnw {#1} {#2} \fi: diff --git a/macros/latex/contrib/l3kernel/l3unicode.dtx b/macros/latex/contrib/l3kernel/l3unicode.dtx index 317630568d..db57bd0f38 100644 --- a/macros/latex/contrib/l3kernel/l3unicode.dtx +++ b/macros/latex/contrib/l3kernel/l3unicode.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2022-02-24} +% \date{Released 2022-04-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/source3.pdf b/macros/latex/contrib/l3kernel/source3.pdf index abe5195e41..c00c8648b5 100644 Binary files a/macros/latex/contrib/l3kernel/source3.pdf and b/macros/latex/contrib/l3kernel/source3.pdf differ diff --git a/macros/latex/contrib/l3kernel/source3.tex b/macros/latex/contrib/l3kernel/source3.tex index 774083a4a8..3defa4b47a 100644 --- a/macros/latex/contrib/l3kernel/source3.tex +++ b/macros/latex/contrib/l3kernel/source3.tex @@ -53,7 +53,7 @@ for those people who are interested. {latex-team@latex-project.org}% }% } -\date{Released 2022-02-24} +\date{Released 2022-04-10} \pagenumbering{roman} \maketitle diff --git a/macros/latex/contrib/l3kernel/source3body.tex b/macros/latex/contrib/l3kernel/source3body.tex index a2e87856bd..20e1875361 100644 --- a/macros/latex/contrib/l3kernel/source3body.tex +++ b/macros/latex/contrib/l3kernel/source3body.tex @@ -207,7 +207,9 @@ following argument specifiers: \item[\texttt{c}] This means \emph{csname}, and indicates that the argument will be turned into a csname before being used. So |\foo:c| |{ArgumentOne}| will act in the same way as |\foo:N| - |\ArgumentOne|. + |\ArgumentOne|. All macros that appear in the argument are expanded. + An internal error will occur if the result of expansion inside + a \texttt{c}-type argument is not a series of character tokens. \item[\texttt{V} and \texttt{v}] These mean \emph{value of variable}. The \texttt{V} and \texttt{v} specifiers are used to get the content of a variable without needing to worry about the -- cgit v1.2.3