summaryrefslogtreecommitdiff
path: root/macros
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-02-01 03:02:08 +0000
committerNorbert Preining <norbert@preining.info>2022-02-01 03:02:08 +0000
commit811714247a66acfce87bba00b9758441ff9d1413 (patch)
treeec506acda8d10ad1ae18a0f4c3f266f1f59934e1 /macros
parentbf3e5a0ef8f4536286b8606775c8d34fd9840b18 (diff)
CTAN sync 202202010302
Diffstat (limited to 'macros')
-rw-r--r--macros/latex/contrib/animate/ChangeLog3
-rw-r--r--macros/latex/contrib/animate/animate.pdfbin3865127 -> 3753532 bytes
-rw-r--r--macros/latex/contrib/animate/animate.sty433
-rw-r--r--macros/latex/contrib/easybook/easybook.dtx6
-rw-r--r--macros/latex/contrib/easybook/easybook.pdfbin575831 -> 575824 bytes
-rw-r--r--macros/latex/contrib/easybook/easybook.tex8
-rw-r--r--macros/latex/contrib/spbmark/spbmark.pdfbin74237 -> 75040 bytes
-rw-r--r--macros/latex/contrib/spbmark/spbmark.sty2
-rw-r--r--macros/latex/contrib/spbmark/spbmark.tex11
-rw-r--r--macros/latex/contrib/zref-vario/CHANGELOG.md8
-rw-r--r--macros/latex/contrib/zref-vario/DEPENDS.txt2
-rw-r--r--macros/latex/contrib/zref-vario/MANIFEST.md148
-rw-r--r--macros/latex/contrib/zref-vario/README.md19
-rw-r--r--macros/latex/contrib/zref-vario/zref-vario-code.pdfbin0 -> 539239 bytes
-rw-r--r--macros/latex/contrib/zref-vario/zref-vario-code.tex52
-rw-r--r--macros/latex/contrib/zref-vario/zref-vario.dtx908
-rw-r--r--macros/latex/contrib/zref-vario/zref-vario.ins94
-rw-r--r--macros/latex/contrib/zref-vario/zref-vario.pdfbin0 -> 119911 bytes
-rw-r--r--macros/latex/contrib/zref-vario/zref-vario.tex261
-rw-r--r--macros/luatex/generic/lua-widow-control/README.md2
-rw-r--r--macros/luatex/generic/lua-widow-control/lua-widow-control.lua4
-rw-r--r--macros/luatex/generic/lua-widow-control/lua-widow-control.pdfbin314157 -> 313200 bytes
-rw-r--r--macros/luatex/generic/lua-widow-control/lua-widow-control.sty14
-rw-r--r--macros/luatex/generic/lua-widow-control/lua-widow-control.tex2
-rw-r--r--macros/luatex/generic/lua-widow-control/lwc-documentation.tex2
-rw-r--r--macros/luatex/generic/lua-widow-control/t-lua-widow-control.mkxl4
-rw-r--r--macros/luatex/latex/autopuncitems/autopuncitems.lua13
-rw-r--r--macros/luatex/latex/autopuncitems/autopuncitems.pdfbin41875 -> 38603 bytes
-rw-r--r--macros/luatex/latex/autopuncitems/autopuncitems.sty6
-rw-r--r--macros/luatex/latex/autopuncitems/autopuncitems.tex36
-rw-r--r--macros/unicodetex/latex/fontsetup/README2
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.pdfbin460242 -> 518759 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.tex24
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample-concrete.pdfbin0 -> 26645 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample-talos.pdfbin0 -> 33605 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample.tex2
-rw-r--r--macros/unicodetex/latex/fontsetup/fontsetup.sty11
-rw-r--r--macros/unicodetex/latex/fontsetup/fspconcrete.sty33
-rw-r--r--macros/unicodetex/latex/fontsetup/fsptalos.sty33
39 files changed, 1891 insertions, 252 deletions
diff --git a/macros/latex/contrib/animate/ChangeLog b/macros/latex/contrib/animate/ChangeLog
index 0d6aa65da5..b43af114e4 100644
--- a/macros/latex/contrib/animate/ChangeLog
+++ b/macros/latex/contrib/animate/ChangeLog
@@ -1,3 +1,6 @@
+2022-01-31
+ * improvement: optimizing XObject nesting for smaller output files
+
2022-01-25
* improvement: svg clipping optimized for smaller output size
diff --git a/macros/latex/contrib/animate/animate.pdf b/macros/latex/contrib/animate/animate.pdf
index eb1b44c371..7fe63d0830 100644
--- a/macros/latex/contrib/animate/animate.pdf
+++ b/macros/latex/contrib/animate/animate.pdf
Binary files differ
diff --git a/macros/latex/contrib/animate/animate.sty b/macros/latex/contrib/animate/animate.sty
index fe5636586d..9a4fed2374 100644
--- a/macros/latex/contrib/animate/animate.sty
+++ b/macros/latex/contrib/animate/animate.sty
@@ -13,7 +13,7 @@
\NeedsTeXFormat{LaTeX2e}[2020-10-01]
-\def\@anim@version{2022/01/25}
+\def\@anim@version{2022/01/31}
\ProvidesPackage{animate}
[\@anim@version\space PDF & SVG animations from files and inline graphics]
@@ -312,16 +312,16 @@
%helper macro that typesets graphics file into savebox
\if@anim@dvips
- \def\@anim@filebox#1#2#3{% dvips: no multi-page support
+ \def\@anim@filebox#1#2#3#4{% dvips: no multi-page support
\edef\@anim@curfile{[#3]{#1}}%
- \global\setbox\@anim@box=\hbox{%
+ \setbox#4=\hbox{%
\expandafter\includegraphics\@anim@curfile}%
}
\else
%pdfTeX, LuaTeX, dvipdfmx, xetex, dvisvgm
- \def\@anim@filebox#1#2#3{%
+ \def\@anim@filebox#1#2#3#4{%
\edef\@anim@curfile{[#3,page=#2]{#1}}%
- \global\setbox\@anim@box=\hbox{%
+ \setbox#4=\hbox{%
\expandafter\includegraphics\@anim@curfile}%
}
\fi
@@ -357,14 +357,16 @@
\edef\@anim@curxform{\@anim@getkeyval{xform:\@anim@fingerprint}}%
\ifthenelse{\equal{\@anim@curxform}{}}{%
% new "<file chksum>.<page>.<graphicx opts>"
- \@anim@filebox{#3}{#4}{#5}% store file in a box
- \@anim@newkey{natdims:\@anim@fingerprint}{%
- {\the\wd\@anim@box}{\the\ht\@anim@box}{\the\dp\@anim@box}%
+ \@anim@filebox{#3}{#4}{#5}{\@anim@box}% store file in a box
+ \edef\@anim@natdims{{\the\wd\@anim@box}{\the\ht\@anim@box}{\the\dp\@anim@box}}%
+ \@anim@xinline{#1}{#2}{\@anim@box}{newfile}% Form XObject creation
+ \@anim@newkey{natdims:\@anim@lastxform}{\@anim@natdims}%
+ \@anim@newkey{scaleddims:\@anim@lastxform}{% scaled dimensions
+ {\@anim@animwidth}{\@anim@animheight}{\@anim@animdepth}%
}%
- \@anim@xinline{#1}{#2}{\@anim@box}{newfile}% delegate Form XObject creation
- \@anim@newkey{xform:\@anim@fingerprint}{\@anim@@lastxform}%
- }{% file known, re-using existing form xobject
- \edef\@anim@curndims{\@anim@getkeyval{natdims:\@anim@fingerprint}}%
+ \@anim@newkey{xform:\@anim@fingerprint}{\@anim@lastxform}%
+ }{% file known, re-using existing xform
+ \edef\@anim@curndims{\@anim@getkeyval{scaleddims:\@anim@curxform}}%
\setbox\@anim@box=\hbox to \@anim@xformnatwd{\@anim@curndims}{%
\vrule width \z@
height \@anim@xformnatht{\@anim@curndims}
@@ -372,76 +374,67 @@
\@anim@refxform{\@anim@curxform}%
\hss%
}%
- \global\let\@anim@@lastxform\@anim@curxform%
- \@anim@xinline{#1}{#2}{\@anim@box}{knownfile}%
+ \@anim@xinline{#1}{#2}{\@anim@box}{\@anim@curxform}%
}%
}
%creates Form XObject from box contents
-\def\@anim@xinline#1#2#3#4{%
- \def\@anim@status{#4}% "newfile", "knownfile" or "inline" (inline graphics)
- \edef\@anim@curwd{\the\wd#3}%
+\def\@anim@xinline#1#2#3#4{% #1 anim num, #2 frame num, #3 box num, #4 status (
+ \edef\@anim@curwd{\the\wd#3}% `newfile', xform ref of known file or `inline')
\edef\@anim@curht{\the\ht#3}%
\edef\@anim@curdp{\the\dp#3}%
+ % measure 0th frame, to determine final animation widget dims
\ifnum#2=\z@\relax%
- %measure 0th frame
- \setbox\@anim@measbox=\hbox to \wd#3{%
- \vrule width \z@ height \ht#3 depth \dp#3\hss}%
- %determine final dims of animation widget
+ \ifthenelse{\equal{#4}{newfile}\OR\equal{#4}{inline}}{%
+ \setbox\@anim@measbox=\hbox to \wd#3{%
+ \vrule width \z@ height \ht#3 depth \dp#3\hss}%
+ }{% known file
+ \edef\@anim@curndims{\@anim@getkeyval{natdims:#4}}%
+ \setbox\@anim@measbox=\hbox to \@anim@xformnatwd{\@anim@curndims}{%
+ \vrule width \z@
+ height \@anim@xformnatht{\@anim@curndims}
+ depth \@anim@xformnatdp{\@anim@curndims}%
+ \hss%
+ }%
+ }%
\@anim@scale{\@anim@measbox}%
- \@anim@keytoaux{a#1.wdbp}{\strip@pt\dimexpr0.996264\dimexpr\@anim@animwidth}%
- \@anim@keytoaux{a#1.htbp}{\strip@pt\dimexpr0.996264\dimexpr\@anim@animheight}%
- \@anim@keytoaux{a#1.thtbp}{\strip@pt\dimexpr0.996264\dimexpr\@anim@animtotalheight}%
+ \if@anim@dvisvgm% for clipping purposes
+ \@anim@keytoaux{a#1.wdbp}{\strip@pt\dimexpr0.996264\dimexpr\@anim@animwidth}%
+ \@anim@keytoaux{a#1.htbp}{\strip@pt\dimexpr0.996264\dimexpr\@anim@animheight}%
+ \@anim@keytoaux{a#1.thtbp}{\strip@pt\dimexpr0.996264\dimexpr\@anim@animtotalheight}%
+ \fi%
\fi%
- %test if natural dimensions of the current frame differ from
- %final widget size
\def\@anim@needresize{0}%
+ % test if content dimensions differ from those of the final widget
\ifdim\@anim@curwd=\@anim@animwidth\else\def\@anim@needresize{1}\fi%
\ifdim\@anim@curht=\@anim@animheight\else\def\@anim@needresize{1}\fi%
\ifdim\@anim@curdp=\@anim@animdepth\else\def\@anim@needresize{1}\fi%
- %if it's a new file, make xobject from it at its natural size
- \ifthenelse{\equal{\@anim@status}{newfile}}{%
- \@anim@xform{1}{0}{}{}{#3}% `{1}'-->with additional resources (opacity etc.)
- \global\let\@anim@@lastxform\@anim@lastxform%
- \def\@anim@status{knownfile}%
- \ifnum\@anim@needresize>\z@\relax%
- \global\setbox#3=\hbox to \@anim@curwd{%
- \vrule width \z@ height \@anim@curht depth \@anim@curdp%
- \@anim@refxform{\@anim@lastxform}%
- \hss%
- }%
- \fi%
- }{%
- \ifthenelse{\equal{\@anim@status}{knownfile}}{%
- \global\let\@anim@lastxform\@anim@@lastxform%
- }{}%
- }%
- %adjust size of current frame to final animation dims, if necessary
+ % resize content to final dimensions, if necessary
\ifnum\@anim@needresize>\z@\relax%
- \global\setbox#3=\hbox{%
+ \setbox#3=\hbox{%
\raisebox{-\@anim@animdepth}{%
\resizebox*{\@anim@animwidth}{%
\@anim@animtotalheight}{\raisebox{\depth}{\box#3}}%
}%
}%
- \ifthenelse{\equal{\@anim@status}{knownfile}}{%
- \@anim@xform{0}{0}{}{}{#3}% without additional Resources
- }{}%
- \fi%
- %distill box with inline graphics to xobject
- \ifthenelse{\equal{\@anim@status}{inline}}{%
- \@anim@xform{1}{0}{}{}{#3}% with additional Resources
- }{}%
- %keep a record of XObject number
- \@anim@newkey{img@#2}{\@anim@lastxform}%
- \if@anim@timeline\else%
- \@anim@newkey{frmcontent@#2}{\@anim@getkeyval{img@#2},}%
- \@anim@makeframe{#1}{#2}%
\fi%
+ \ifthenelse{\equal{#4}{newfile}\OR\equal{#4}{inline}}{%
+ \@anim@xform{1}{1}{}{}{#3}%
+ %keep a record of XObject number, needed when timeline is built
+ \@anim@newkey{img@#2}{\@anim@lastxform}%
+ }{%
+ %known file
+ \ifnum\@anim@needresize>\z@%
+ \@anim@xform{0}{1}{}{}{#3}%
+ \@anim@newkey{img@#2}{\@anim@lastxform}%
+ \else%
+ \@anim@newkey{img@#2}{#4}%
+ \fi%
+ }%
\message{<a#1,fr#2>}%
}
-\def\@anim@insertfrmcontent#1,#2\@nil{%
+\def\@anim@refxformlist#1,#2\@nil{%
\ifthenelse{\equal{#1}{}}{}{%
\if@anim@dvips%
\@anim@refxform{{#1}}%
@@ -449,38 +442,79 @@
\@anim@refxform{#1}%
\fi%
}%
- \ifthenelse{\equal{#2}{}}{}{\@anim@insertfrmcontent#2\@nil}%
+ \ifthenelse{\equal{#2}{}}{}{\@anim@refxformlist#2\@nil}%
}
-%inserts one animation frame into the output acc. to
-% \ifcase\@anim@method as
-% 0 & 1: non-interactive Widget annotation
-% 2: Form XObject referenced in the page content, tagged as OC
-% or dvisvgm
-\def\@anim@makeframe#1#2{%
- %container box
- \edef\@anim@tmpvar{\@anim@getkeyval{frmcontent@#2},}%
- \global\setbox\@anim@box=\hbox to \@anim@animwidth{%
- \vrule width \z@ height \@anim@animheight depth \@anim@animdepth%
- \expandafter\@anim@insertfrmcontent\@anim@tmpvar\@nil%
- \hss%
- }%
- %inside a `landscape' environment together with the icon and widget methods,
- %the frame content needs to be rotated counter-clockwise by 90 deg
- \ifnum\@anim@method>\@ne\else%
- \ifx\@anim@lscape\@anim@@lscape%
- \global\setbox\@anim@box=\hbox{\rotatebox{90}{\box\@anim@box}}%
+% this counts the length of a clist <item a>,<item b>,<item b>,..., (note the
+% trailing comma)
+\def\@anim@countxformlist#1{%
+ \expandafter\@anim@@countxformlist\expandafter0\expandafter:#1,\@nil%
+}
+\def\@anim@@countxformlist#1:#2,#3\@nil{%
+ \ifx\relax#2\relax%
+ \the\numexpr#1%
+ \else%
+ \ifx\relax#3\relax%
+ \the\numexpr#1%
+ \else%
+ \expandafter\@anim@@countxformlist\the\numexpr #1+1:#3\@nil%
+ \fi%
+ \fi%
+}
+
+\def\@anim@zaptrailingcommafromxref#1,\@nil{\if@anim@dvips{#1}\else#1\fi}%
+
+% inserts one animation frame into the output acc. to \ifcase\@anim@method
+% as a non-interactive Widget annotation (0 or 1) or an an xform (2) that is
+% referenced in the page content (and tagged as OCG or for multipage PDF export)
+% args: #1 animation num, #2 frame number, #3 comma-separated list of xform
+% refs (transparencies)
+\def\@anim@makeframe#1#2#3{%
+ \edef\@anim@arg{#3}%
+ \setboolean{@anim@singleref}{false}\def\@anim@framexform{}%
+ % count number of xforms in the frame content; a single xform can be referenced
+ % at once, while a transparency list (multiple, overlayed xforms) must be boxed
+ % and nested in an additional xform
+ \ifnum\@anim@countxformlist{\@anim@arg}=\@ne%
+ \setboolean{@anim@singleref}{true}%
+ \edef\@anim@framexform{\expandafter\@anim@zaptrailingcommafromxref\@anim@arg\@nil}%
+ \fi%
+ % however, this isn't possible on landscape pages with \@anim@method==0|1
+ % because frame content needs to be rotated by 90 deg counterclockwise
+ \ifnum\@anim@method>\@ne\else\ifx\@anim@lscape\@anim@@lscape%
+ \setboolean{@anim@singleref}{false}\def\@anim@framexform{}%
+ \fi\fi%
+ % ... nor if the animation is to be exported to multipage PDF
+ \if@anim@export%
+ \setboolean{@anim@singleref}{false}\def\@anim@framexform{}%
+ \fi%
+ \if@anim@singleref\else%
+ % put frame content in a box if necessary
+ \setbox\@anim@box=\hbox to \@anim@animwidth{%
+ \vrule width \z@ height \@anim@animheight depth \@anim@animdepth%
+ \expandafter\@anim@refxformlist\@anim@arg,\@nil%
+ \hss%
+ }%
+ % rotate content on lscape pages
+ \ifnum\@anim@method>\@ne\else%
+ \ifx\@anim@lscape\@anim@@lscape%
+ \setbox\@anim@box=\hbox{\rotatebox{90}{\box\@anim@box}}%
+ \fi%
+ \fi%
+ % convert it to an xform
+ \if@anim@export\else%
+ \@anim@xform{0}{1}{}{}{\@anim@box}%
+ \let\@anim@framexform\@anim@lastxform%
\fi%
\fi%
\ifcase\@anim@method% icon based
- \@anim@xform{0}{1}{}{}{\@anim@box}%
%initial visibility
\ifnum\@anim@poster>\@anim@mtwo\relax% insert poster frame
\ifnum#2=\@anim@poster\relax%
- \let\@anim@posterap\@anim@lastxform%
+ \let\@anim@posterap\@anim@framexform%
\else%
\ifnum\@anim@poster=\@anim@mone\relax% use last frame as poster
- \let\@anim@posterap\@anim@lastxform%
+ \let\@anim@posterap\@anim@framexform%
\fi%
\fi%
\fi%
@@ -490,8 +524,9 @@
/F 2%
/FT/Btn/Ff 65537%
/BS <</W 0>>%
- /AP <</N \@anim@lastxform>>%
- /MK <</TP 1/I \@anim@lastxform/IF<</S/A/FB true>>>>%
+ /AP <</N \@anim@framexform>>%
+ /MK <</TP 1/I \@anim@framexform%
+ /IF<</S/A/FB true>>>>%
/T (#1.#2)%
}%
\or% widget based
@@ -512,20 +547,22 @@
\fi%
\fi%
%frame insertion
- \@anim@xform{0}{1}{}{}{\@anim@box}%
\@anim@widget{\@anim@animwidth}{\@anim@animheight}{\@anim@animdepth}{%
/Subtype/Widget%
\@anim@annotflag%
/FT/Btn/Ff 65537%
/BS <</W 0>>%
- /AP <</N \@anim@lastxform>>%
- /MK <</TP 1/I \@anim@lastxform/IF<</S/A/FB true>>>>%
+ /AP <</N \@anim@framexform>>%
+ /MK <</TP 1/I \@anim@framexform%
+ /IF<</S/A/FB true>>>>%
/T (#1.#2)%
}%
- \or% ocg based (abused for dvisvgm backend as well as for
+ \or% ocg-based (abused for dvisvgm backend as well as for
% multipage PDF export)
\if@anim@export%
+ \if@anim@insideexport\else\anim@export\fi%
\box\@anim@box%
+ \endanim@export%
\else%
\@anim@newocg{#1}{#2}%
%initial visibility
@@ -542,25 +579,13 @@
\fi%
\fi%
%frame insertion
- \if@anim@dvisvgm%
- % `marked content' method for dvisvgm
- \@anim@xform{0}{0}{}{}{\@anim@box}%
- \ocgbase@oc@bdc{\@anim@curocg}%
- \@anim@refxform{\@anim@lastxform}%
- \ocgbase@oc@emc%
- \else%
- % /OC method for PDF output
- \@anim@xform{0}{0}{}{/OC \@anim@curocg}{\@anim@box}%
- \@anim@refxform{\@anim@lastxform}%
- %% `marked content' method (slower, perhaps)
- %\@anim@xform{0}{0}{}{}{\@anim@box}%
- %\ocgbase@oc@bdc{\@anim@curocg}%
- %\@anim@refxform{\@anim@lastxform}%
- %\ocgbase@oc@emc%
- \fi%
+ \ocgbase@oc@bdc{\@anim@curocg}%
+ \@anim@refxform{\@anim@framexform}%
+ \ocgbase@oc@emc%
\fi%
\fi%
}
+\newboolean{@anim@singleref}
%create XObjects of all button faces
\ifnum\if@anim@dvips 1\else\if@anim@dvisvgm 1\else0\fi\fi=1
@@ -843,7 +868,7 @@
\@anim@xbutton{ResetFG}{\@anim@btnreset}{#2}%
\endgroup%
\ifx\empty\@anim@bg\empty\else%
- \global\setbox\@anim@box=\hbox to \@anim@btnsize {%
+ \setbox\@anim@box=\hbox to \@anim@btnsize {%
\vbox to \@anim@btnsize {\vss%
\@anim@refxform{\@anim@getkeyval{btnResetBG:#2}}%
\@anim@refxform{\@anim@lastxform}%
@@ -878,7 +903,7 @@
\def\@anim@xbutton#1#2#3{% #1: name; #2: stroking commands,
% only create if button face doesn't exist yet
\ifcsname btn#1:#3\endcsname\else% #3: current colour+alpha+ ... combination
- \global\setbox\@anim@box=\hbox to 15bp {\vbox to 15bp {\vss%
+ \setbox\@anim@box=\hbox to 15bp {\vbox to 15bp {\vss%
\@anim@literal{}{%
save
\ifx\empty\@anim@alpha\empty%
@@ -909,7 +934,7 @@
}%
}\hss}%
\if@anim@dvisvgm%
- \global\setbox\@anim@box=\hbox{%
+ \setbox\@anim@box=\hbox{%
\resizebox*{!}{\@anim@btnsize}{\box\@anim@box}}%
\fi%
%distill box into XObject
@@ -1607,23 +1632,22 @@
\fi%
\if@anim@dvisvgm%
\def\@anim@method{\tw@}% using ocg-like method for dvisvgm
- \setboolean{@anim@doscaling}{false}%
\fi%
\if@anim@draft%
\if@anim@multipage%
%store file in a box
- \@anim@filebox{\@anim@pathtofile}{\@anim@first}{\@anim@gropts}%
+ \@anim@filebox{\@anim@pathtofile}{\@anim@first}{\@anim@gropts}{\@anim@box}%
\else%
%get file name extension
\@anim@getpath{\@anim@base\@anim@first}{\@anim@ftype}%
- \@anim@filebox{\@anim@pathtofile}{1}{\@anim@gropts}%
+ \@anim@filebox{\@anim@pathtofile}{1}{\@anim@gropts}{\@anim@box}%
\fi%
\@anim@scale{\@anim@box}%
%draw draftbox according to dimensions of the first frame
\@anim@draftbox%
\else%
\xdef\@anim@nfps{#2\space}% current frame rate
- \xdef\@anim@nfps{\expandafter\zap@space\@anim@nfps\@empty}%
+ \xdef\@anim@nfps{\expandafter\@anim@zap@space\@anim@nfps\@empty}%
\ifdim\@anim@nfps pt<\z@%
\PackageError{animate}{%
Negative frame rate `\@anim@nfps' is not allowed%
@@ -1631,19 +1655,11 @@
\fi%
\global\let\@anim@fps\@anim@nfps%
%
- \if@anim@export\if@anim@timeline%
+ \if@anim@export%
\anim@export%
- \fi\fi%
- %make all frames of the sequence
- \if@anim@dvisvgm\if@anim@timeline\else%
- \ifcsname a\the\@anim@num.htbp\endcsname%
- \@anim@beginsvgclip{\the\@anim@num}%
- \fi%
- \fi\fi%
+ \fi%
+ %embed content (graphics sequence)
\loop\ifnum\@anim@curframe\@anim@relop\@anim@last\relax\else%
- \if@anim@export\if@anim@timeline\else%
- \anim@export%
- \fi\fi%
\if@anim@multipage%
%embed graphics
\@anim@ximage{\the\@anim@num}{\the\@anim@curframe@zb}{%
@@ -1657,31 +1673,31 @@
\@anim@ximage{\the\@anim@num}{\the\@anim@curframe@zb}{%
\@anim@pathtofile}{1}{\@anim@gropts}%
\fi%
- \if@anim@export\if@anim@timeline\else%
- \endanim@export%
- \fi\fi%
\global\advance\@anim@curframe by \@anim@every%
\global\advance\@anim@curframe@zb by \@ne%
\repeat%
- \if@anim@dvisvgm\if@anim@timeline\else%
- \ifcsname a\the\@anim@num.htbp\endcsname%
- \@anim@endsvgclip%
- \fi%
- \fi\fi%
\xdef\@anim@frames{\the\@anim@curframe@zb}% total number
\global\@anim@tmpcnt=\@anim@frames%
\global\advance\@anim@tmpcnt by -\@ne%
\xdef\@anim@maxframe{\the\@anim@tmpcnt}% highest frame index
- %build timeline from optional timeline file
- \if@anim@timeline%
- \if@anim@dvisvgm\ifcsname a\the\@anim@num.htbp\endcsname%
- \@anim@beginsvgclip{\the\@anim@num}%
- \fi\fi%
+ %make animation frames from embedded content ...
+ \if@anim@dvisvgm\ifcsname a\the\@anim@num.htbp\endcsname%
+ \@anim@beginsvgclip{\the\@anim@num}%
+ \fi\fi%
+ \if@anim@timeline% ... by building timeline (optional timeline file)
\@anim@buildtmln{\the\@anim@num}%
- \if@anim@dvisvgm\ifcsname a\the\@anim@num.htbp\endcsname%
- \@anim@endsvgclip%
- \fi\fi%
+ \else% ... or by direct insertion
+ \global\@anim@curframe@zb=\z@%
+ \whiledo{\@anim@curframe@zb<\@anim@frames}{%
+ \@anim@makeframe{\the\@anim@num}{\the\@anim@curframe@zb}{%
+ \@anim@getkeyval{img@\the\@anim@curframe@zb},%
+ }%
+ \global\advance\@anim@curframe@zb by \@ne%
+ }%
\fi%
+ \if@anim@dvisvgm\ifcsname a\the\@anim@num.htbp\endcsname%
+ \@anim@endsvgclip%
+ \fi\fi%
% if last frame used as poster, write frame num to aux file
\ifnum\@anim@poster=\@anim@mone\relax%
\@anim@keytoaux{a\the\@anim@num.poster}{\@anim@maxframe}%
@@ -1776,9 +1792,6 @@
\newcount\@anim@resizeflags% resizing flags according to options given.
-%post-scaling, not possible for embedded files with dvisvgm
-\newboolean{@anim@doscaling}
-
%set animation widget dimensions
\def\@anim@scale#1{% #1: box number
\begingroup%
@@ -1796,11 +1809,11 @@
%now resize
\ifcase\@anim@resizeflags% bit 2^2=width, 2^1=height, 2^0=totalhight given
\or% 1
- \global\setbox#1=\hbox{\resizebox*{!}{\@anim@animtotalheight}{\box#1}}%
+ \setbox#1=\hbox{\resizebox*{!}{\@anim@animtotalheight}{\box#1}}%
\or% 2
- \global\setbox#1=\hbox{\resizebox{!}{\@anim@animheight}{\box#1}}%
+ \setbox#1=\hbox{\resizebox{!}{\@anim@animheight}{\box#1}}%
\or\or% 4
- \global\setbox#1=\hbox{\resizebox{\@anim@animwidth}{!}{\box#1}}%
+ \setbox#1=\hbox{\resizebox{\@anim@animwidth}{!}{\box#1}}%
\or% 5
\if@anim@iso%
\setlength{\@anim@tmpdima}{%
@@ -1809,13 +1822,13 @@
\setlength{\@anim@tmpdimb}{\@anim@animtotalheight}%
\ifdim\@anim@tmpdimb<\z@\@anim@tmpdimb=-\@anim@tmpdimb\fi%
\ifdim\@anim@tmpdima<\@anim@tmpdimb%
- \global\setbox#1=\hbox{\resizebox*{\@anim@animwidth}{!}{\box#1}}%
+ \setbox#1=\hbox{\resizebox*{\@anim@animwidth}{!}{\box#1}}%
\else%
- \global\setbox#1=\hbox{%
+ \setbox#1=\hbox{%
\resizebox*{!}{\@anim@animtotalheight}{\box#1}}%
\fi%
\else%
- \global\setbox#1=\hbox{%
+ \setbox#1=\hbox{%
\resizebox*{\@anim@animwidth}{\@anim@totheightarg}{\box#1}}%
\fi%
\or% 6
@@ -1825,18 +1838,18 @@
\setlength{\@anim@tmpdimb}{\@anim@animheight}%
\ifdim\@anim@tmpdimb<\z@\@anim@tmpdimb=-\@anim@tmpdimb\fi%
\ifdim\@anim@tmpdima<\@anim@tmpdimb%
- \global\setbox#1=\hbox{\resizebox{\@anim@animwidth}{!}{\box#1}}%
+ \setbox#1=\hbox{\resizebox{\@anim@animwidth}{!}{\box#1}}%
\else%
- \global\setbox#1=\hbox{\resizebox{!}{\@anim@animheight}{\box#1}}%
+ \setbox#1=\hbox{\resizebox{!}{\@anim@animheight}{\box#1}}%
\fi%
\else%
- \global\setbox#1=\hbox{%
+ \setbox#1=\hbox{%
\resizebox{\@anim@animwidth}{\@anim@animheight}{\box#1}}%
\fi%
\fi%
%apply scale
\ifdim\@anim@boxscale pt=\p@\else%
- \global\setbox#1=\hbox{\scalebox{\@anim@boxscale}{\box#1}}%
+ \setbox#1=\hbox{\scalebox{\@anim@boxscale}{\box#1}}%
\fi%
%dimensions after resizing
\xdef\@anim@animwidth{\the\wd#1}%
@@ -1886,7 +1899,7 @@
\ifnum\@anim@poster=\@anim@mtwo\relax%
\ifdefined\@anim@apdummy\else% empty appearance widget
\setbox\@anim@box=\hbox{\phantom{x}}%
- \@anim@xform{0}{0}{}{}{\@anim@box}%
+ \@anim@xform{0}{1}{}{}{\@anim@box}%
\global\let\@anim@apdummy\@anim@lastxform%
\@anim@widget{1ex}{1ex}{\z@}{%
/Subtype/Widget%
@@ -1905,7 +1918,7 @@
\else%
\ifdefined\@anim@apdummy\else% empty appearance dummy
\setbox\@anim@box=\hbox{\phantom{x}}%
- \@anim@xform{0}{0}{}{}{\@anim@box}%
+ \@anim@xform{0}{1}{}{}{\@anim@box}%
\global\let\@anim@apdummy\@anim@lastxform%
\fi%
\def\@anim@apmk{\@anim@apdummy}%
@@ -2015,7 +2028,7 @@
\if@anim@mk\else%
\ifdefined\@anim@apdummy\else% empty appearance dummy
\setbox\@anim@box=\hbox{\phantom{x}}%
- \@anim@xform{0}{0}{}{}{\@anim@box}%
+ \@anim@xform{0}{1}{}{}{\@anim@box}%
\global\let\@anim@apdummy\@anim@lastxform%
\fi%
\fi%
@@ -2119,43 +2132,41 @@
\xdef\@anim@nfps{-1}%
\@anim@processfpsarg{#2}%
\fi%
- \if@anim@export\if@anim@timeline%
+ \if@anim@export%
\anim@export%
- \fi\fi%
+ \fi%
\fi%
\let\newframe\@anim@@newframe%
\let\multiframe\@anim@multiframe%
- \if@anim@dvisvgm\if@anim@timeline\else\if@anim@draft\else%
- \ifcsname a\the\@anim@num.htbp\endcsname%
- \@anim@beginsvgclip{\the\@anim@num}%
- \fi%
- \fi\fi\fi%
\@anim@beginframe%
\ignorespaces%
}{%
\unskip%
\@anim@endframe{\the\@anim@num}{\the\@anim@curframe@zb}%
- \if@anim@dvisvgm\if@anim@timeline\else\if@anim@draft\else%
- \ifcsname a\the\@anim@num.htbp\endcsname%
- \@anim@endsvgclip%
- \fi%
- \fi\fi\fi%
\global\advance\@anim@curframe@zb by \@ne%
\if@anim@draft\else%
\xdef\@anim@frames{\the\@anim@curframe@zb}% total number
\global\@anim@tmpcnt=\@anim@frames%
\global\advance\@anim@tmpcnt by -\@ne%
\xdef\@anim@maxframe{\the\@anim@tmpcnt}% highest frame index
- %build timeline from optional timeline file
- \if@anim@timeline%
- \if@anim@dvisvgm\ifcsname a\the\@anim@num.htbp\endcsname%
- \@anim@beginsvgclip{\the\@anim@num}%
- \fi\fi%
+ %make animation frames from embedded content ...
+ \if@anim@dvisvgm\ifcsname a\the\@anim@num.htbp\endcsname%
+ \@anim@beginsvgclip{\the\@anim@num}%
+ \fi\fi%
+ \if@anim@timeline% ... by building timeline (optional timeline file)
\@anim@buildtmln{\the\@anim@num}%
- \if@anim@dvisvgm\ifcsname a\the\@anim@num.htbp\endcsname%
- \@anim@endsvgclip%
- \fi\fi%
+ \else% ... or by direct insertion
+ \global\@anim@curframe@zb=\z@%
+ \whiledo{\@anim@curframe@zb<\@anim@frames}{%
+ \@anim@makeframe{\the\@anim@num}{\the\@anim@curframe@zb}{%
+ \@anim@getkeyval{img@\the\@anim@curframe@zb},%
+ }%
+ \global\advance\@anim@curframe@zb by \@ne%
+ }%
\fi%
+ \if@anim@dvisvgm\ifcsname a\the\@anim@num.htbp\endcsname%
+ \@anim@endsvgclip%
+ \fi\fi%
%insert animation widget & controls
\if@anim@export\else%
% insert <script> part
@@ -2207,7 +2218,7 @@
%process frame rate argument
\global\let\@anim@pfps\@anim@nfps%
\xdef\@anim@nfps{#1\space}%
- \xdef\@anim@nfps{\expandafter\zap@space\@anim@nfps\@empty}%
+ \xdef\@anim@nfps{\expandafter\@anim@zap@space\@anim@nfps\@empty}%
\ifx\@anim@nfps\@empty% no change of frame rate
\global\let\@anim@nfps\@anim@pfps%
\fi%
@@ -2273,9 +2284,6 @@
%starts new frame
\def\@anim@beginframe{%
- \if@anim@export\if@anim@timeline\else\ifnum\@anim@skipfram=\z@\relax%
- \anim@export%
- \fi\fi\fi%
\begingroup%
\lrbox{\@anim@box}% store graphics in a box
\ifdefined\@anim@curTxtDir\textdir\@anim@curTxtDir\fi%
@@ -2291,7 +2299,7 @@
\ifnum#2=\z@\relax%
\ifdim\wd\@anim@box=\z@%
\PackageError{animate}{%
- Contents of first frame must not have zero width%
+ Content of first frame must not have zero width%
}{%
Possible reason: \protect\begin{animateinline}{...}
immediately followed by \protect\newframe%
@@ -2299,7 +2307,7 @@
\fi%
\ifdim\ht\@anim@box=\z@\ifdim\dp\@anim@box=\z@%
\PackageError{animate}{%
- Contents of first frame must not have zero height%
+ Content of first frame must not have zero height%
}{}%
\fi\fi%
%draw draftbox according to dimensions of the first frame
@@ -2309,18 +2317,15 @@
\fi%
\else% remaining frames
%deal with zero width or totalheight boxes
- \ifdim\wd\@anim@box=\z@\global\setbox\@anim@box=\hbox{\phantom{X}}\fi%
+ \ifdim\wd\@anim@box=\z@\setbox\@anim@box=\hbox{\phantom{X}}\fi%
\ifdim\ht\@anim@box=\z@\ifdim\dp\@anim@box=\z@%
- \global\setbox\@anim@box=\hbox{\phantom{X}}%
+ \setbox\@anim@box=\hbox{\phantom{X}}%
\fi\fi%
\fi%
%now create Form XObject of box contents
\if@anim@draft\else%
\@anim@xinline{#1}{#2}{\@anim@box}{inline}%
\fi%
- \if@anim@export\if@anim@timeline\else%
- \endanim@export%
- \fi\fi%
\fi%
\global\advance\@anim@skipfram by \@ne%
\ifnum\@anim@skipfram=\@anim@every\relax%
@@ -2347,7 +2352,7 @@
\global\@anim@mulframecnt=\z@%
%remove spaces from variable declaration list (2nd arg)
\xdef\@anim@vardecls{#2\space}%
- \xdef\@anim@vardecls{\expandafter\zap@space\@anim@vardecls\@empty}%
+ \xdef\@anim@vardecls{\expandafter\@anim@zap@space\@anim@vardecls\@empty}%
\ifnum#1<\z@\relax%
\PackageError{animate}{%
\protect\multiframe: first argument must be greater than zero%
@@ -2386,7 +2391,7 @@
\edef\@anim@vartype{\@anim@getvartype#1\@nil}%
\ifthenelse{\equal{\@anim@vartype}{d}\OR\equal{\@anim@vartype}{D}}{%
% dimensions, prefix d, D
- %initialize variable
+ %initialise variable
\setlength{\@anim@tmpdima}{#2}%
\expandafter\edef\csname#1\endcsname{\number\@anim@tmpdima sp}%
%global copy that saves current variable value between loops
@@ -2408,7 +2413,7 @@
\equal{\@anim@vartype}{n}\OR\equal{\@anim@vartype}{N}%
\OR\equal{\@anim@vartype}{r}\OR\equal{\@anim@vartype}{R}%
}{% real numbers, prefix n, N, r, R
- %initialize variable
+ %initialise variable
\expandafter\edef\csname#1\endcsname{\@anim@fpeval{#2}}%
%global copy that saves current variable value between loops
\expandafter\xdef\csname#1@old\endcsname{\@anim@fpeval{#2}}%
@@ -2424,7 +2429,7 @@
}{%
\ifthenelse{\equal{\@anim@vartype}{i}\OR\equal{\@anim@vartype}{I}}{%
% integers, prefix i, I
- %initialize variable
+ %initialise variable
\setcounter{@anim@ltxcnt}{#2}%
\expandafter\edef\csname#1\endcsname{\the@anim@ltxcnt}%
%global copy that saves current variable value between loops
@@ -2530,14 +2535,11 @@
\@anim@endsanitize%
\edef\@anim@inputline{\@anim@inputline\space}%
%remove all spaces from input line
- \edef\@anim@inputline{\expandafter\zap@space\@anim@inputline\@empty}%
+ \edef\@anim@inputline{\expandafter\@anim@zap@space\@anim@inputline\@empty}%
\ifeof\@anim@@tmlnfile\setboolean{@anim@eof}{true}\else%
\setboolean{@anim@eof}{false}\fi%
\whiledo{\NOT\boolean{@anim@eof}}{%
\ifthenelse{\equal{\@anim@inputline}{}}{}{%
- %initialise contents & transparency lists for each frame
- \@anim@newkey{trlst@\the\@anim@curframe@zb}{}%
- \@anim@newkey{frmcontent@\the\@anim@curframe@zb}{}%
\global\advance\@anim@curframe@zb by \@ne%
}%
\@anim@sanitizeJS%
@@ -2545,7 +2547,7 @@
\global\read\@anim@@tmlnfile to \@anim@inputline%
\@anim@endsanitize%
\edef\@anim@inputline{\@anim@inputline\space}%
- \edef\@anim@inputline{\expandafter\zap@space\@anim@inputline\@empty}%
+ \edef\@anim@inputline{\expandafter\@anim@zap@space\@anim@inputline\@empty}%
\ifeof\@anim@@tmlnfile\setboolean{@anim@eof}{true}\else%
\setboolean{@anim@eof}{false}\fi%
}%
@@ -2566,12 +2568,15 @@
\@anim@endsanitize%
\edef\@anim@inputlinenospc{\@anim@inputline\space}%
\edef\@anim@inputlinenospc{%
- \expandafter\zap@space\@anim@inputlinenospc\@empty}%
+ \expandafter\@anim@zap@space\@anim@inputlinenospc\@empty}%
\ifeof\@anim@@tmlnfile\setboolean{@anim@eof}{true}\else%
\setboolean{@anim@eof}{false}\fi%
\message{<building timeline a#1 from file `\@anim@tmlnfile':}%
\whiledo{\NOT\boolean{@anim@eof}}{%
\global\advance\@anim@lineno by \@ne%
+ %initialise content and transparency lists for current frame
+ \def\@anim@frmcontent{}%
+ \def\@anim@trlst{}%
\ifthenelse{\equal{\@anim@inputlinenospc}{}}{}{%
%process input line
\global\@anim@curfield=\z@%
@@ -2579,13 +2584,13 @@
%combine the layers of the current frame
\global\@anim@curlayer=\z@%
\loop\ifnum\@anim@curlayer>\@anim@maxlayer\relax\else%
- \@anim@newkey{frmcontent@\the\@anim@curframe@zb}{%
- \@anim@getkeyval{frmcontent@\the\@anim@curframe@zb}%
+ \edef\@anim@frmcontent{%
+ \@anim@frmcontent%
\@anim@getkeyval{%
layercontent@\the\@anim@curframe@zb.\the\@anim@curlayer}%
}%
- \@anim@newkey{trlst@\the\@anim@curframe@zb}{%
- \@anim@getkeyval{trlst@\the\@anim@curframe@zb}%
+ \edef\@anim@trlst{%
+ \@anim@trlst%
\@anim@getkeyval{%
layertrlst@\the\@anim@curframe@zb.\the\@anim@curlayer}%
}%
@@ -2596,17 +2601,12 @@
\global\advance\@anim@curlayer by \@ne%
\repeat%
%detect multiple inclusion of the same transp. in the current frame
- \xdef\@anim@trlst{%
- \the\@anim@curframe@zb.\@anim@getkeyval{trlst@\the\@anim@curframe@zb}}%
- \expandafter\@anim@findmult\@anim@trlst,\@nil%
- \if@anim@export\if@anim@insideexport\else\anim@export\fi\fi%
+ \xdef\@anim@@trlst{\the\@anim@curframe@zb.\@anim@trlst}%
+ \expandafter\@anim@findmult\@anim@@trlst,\@nil%
%insert frame Widget
- \@anim@makeframe{#1}{\the\@anim@curframe@zb}%
- \if@anim@export\endanim@export\fi%
+ \@anim@makeframe{#1}{\the\@anim@curframe@zb}{\@anim@frmcontent}%
%clean-up
- \expandafter\@anim@resetmult\@anim@trlst,\@nil%
- \@anim@newkey{trlst@\the\@anim@curframe@zb}{}%
- \@anim@newkey{frmcontent@\the\@anim@curframe@zb}{}%
+ \expandafter\@anim@resetmult\@anim@@trlst,\@nil%
\message{.}%
\global\advance\@anim@curframe@zb by \@ne%
}%
@@ -2616,7 +2616,7 @@
\@anim@endsanitize%
\edef\@anim@inputlinenospc{\@anim@inputline\space}%
\edef\@anim@inputlinenospc{%
- \expandafter\zap@space\@anim@inputlinenospc\@empty}%
+ \expandafter\@anim@zap@space\@anim@inputlinenospc\@empty}%
\ifeof\@anim@@tmlnfile\setboolean{@anim@eof}{true}\else%
\setboolean{@anim@eof}{false}%
\fi%
@@ -2653,7 +2653,7 @@
%first field: a star (pause frame)
\if@anim@step\else%
\edef\@anim@tmp{#1\space}%
- \edef\@anim@tmp{\expandafter\zap@space\@anim@tmp\@empty}%
+ \edef\@anim@tmp{\expandafter\@anim@zap@space\@anim@tmp\@empty}%
\ifthenelse{\equal{\@anim@tmp}{*}}{%
\xdef\@anim@pauseat{%
\@anim@pauseat%
@@ -2675,10 +2675,10 @@
%parse the third field (list of layer specifications)
\global\@anim@curlayer=\z@%
\edef\@anim@tmp{#1\space}%
- \edef\@anim@tmp{\expandafter\zap@space\@anim@tmp\@empty}%
+ \edef\@anim@tmp{\expandafter\@anim@zap@space\@anim@tmp\@empty}%
\expandafter\@anim@parsethird\@anim@tmp;\@nil%
\edef\@anim@tmp{#2\space}%
- \edef\@anim@tmp{\expandafter\zap@space\@anim@tmp\@empty}%
+ \edef\@anim@tmp{\expandafter\@anim@zap@space\@anim@tmp\@empty}%
%fourth field: JavaScript provided by the user
\ifx\@anim@tmp\empty\else\@anim@parseforth#2\@nil\fi%
\fi%
@@ -2700,7 +2700,7 @@
%process JavaScript field
\def\@anim@parseforth#1:\@nil{%
\edef\@anim@tmp{#1\space}%
- \edef\@anim@tmp{\expandafter\zap@space\@anim@tmp\@empty}%
+ \edef\@anim@tmp{\expandafter\@anim@zap@space\@anim@tmp\@empty}%
\ifx\@anim@tmp\@empty\else%
\xdef\@anim@usrjsat{%
\@anim@usrjsat%
@@ -2826,6 +2826,12 @@
}%
}
+\def\@anim@zap@space#1 #2{%
+ #1%
+ \ifx#2\@empty\else\expandafter\@anim@zap@space\fi
+ #2%
+}
+
%command options
\define@key{anim@user}{label}{%
\gdef\@anim@label{#1}%
@@ -3189,7 +3195,6 @@
%macro to reset macros and booleans
\def\@anim@reset{%
\gdef\@anim@label{}%
- \setboolean{@anim@doscaling}{true}%
\global\let\@anim@boxscale\@anim@@boxscale%
\global\let\if@anim@iso=\if@anim@@iso%
\global\let\@anim@bb\@anim@@bb%
@@ -3436,7 +3441,7 @@
\define@key{anim@pkg}{buttonsize}{%
\gdef\@anim@@btnsize{#1}%
}
-\edef\@anim@@alttext{/Contents(animation by animate[\@anim@version])}
+\edef\@anim@@alttext{/Contents (animation by animate, v. \@anim@version)}
\define@key{anim@pkg}{alttext}{%
\ifthenelse{\equal{#1}{none}}{%
\gdef\@anim@@alttext{}%
diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx
index 66e8b05c30..7c5b54eddd 100644
--- a/macros/latex/contrib/easybook/easybook.dtx
+++ b/macros/latex/contrib/easybook/easybook.dtx
@@ -15,7 +15,7 @@
%<*class>
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
\RequirePackage{l3keys2e}
-\ProvidesExplClass{easybook}{2022/01/30}{1.56}
+\ProvidesExplClass{easybook}{2022/01/31}{1.58}
{Typeset Chinese theses or books}
\bool_set_false:N \l__eb_compile_draft_bool
@@ -305,7 +305,7 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
\RequirePackage{l3keys2e,etoolbox}
-\ProvidesExplPackage{easybase}{2022/01/30}{1.56}
+\ProvidesExplPackage{easybase}{2022/01/31}{1.58}
{Typeset Chinese theses or books}
\cs_generate_variant:Nn \dim_set:Nn { NV }
@@ -2343,7 +2343,7 @@
}
%</package>
%<*tcolorbox>
-\ProvidesExplFile{eb-tcolorbox.cfg}{2022/01/30}{1.56}
+\ProvidesExplFile{eb-tcolorbox.cfg}{2022/01/31}{1.58}
{Customization of tcolorbox for easybook}
\cs_set_protected:Npn \addtotcbstyle #1#2
diff --git a/macros/latex/contrib/easybook/easybook.pdf b/macros/latex/contrib/easybook/easybook.pdf
index 03cc97c9cc..2380b1c3d2 100644
--- a/macros/latex/contrib/easybook/easybook.pdf
+++ b/macros/latex/contrib/easybook/easybook.pdf
Binary files differ
diff --git a/macros/latex/contrib/easybook/easybook.tex b/macros/latex/contrib/easybook/easybook.tex
index 2f36d84435..0a8668bd86 100644
--- a/macros/latex/contrib/easybook/easybook.tex
+++ b/macros/latex/contrib/easybook/easybook.tex
@@ -21,8 +21,8 @@
name = easybook,
color-scheme = blue,
title = EASYBOOK 使用手册,
- version = v1.56,
- date = 2022/01/30,
+ version = v1.58,
+ date = 2022/01/31,
authors = 瞿毅,
info = 排版简体中文学位论文和书籍,
email = q1jx@foxmail.com,
@@ -698,8 +698,8 @@
\begin{options}\noitemsep
\keyval-{headruleskip}{页眉线间距}\Module{geoset}\Default*{0pt}
\keyval-{footruleskip}{页脚线间距}\Default*{3.5pt}
- \kvsplit*{hdivide}{左边距,页面文本宽度,右边距}
- \kvsplit*{hmargin}{左边距,右边距}
+ \kvsplit*{hdivide}{左边距,页面文本宽度,右边距}\default{}
+ \kvsplit*{hmargin}{左边距,右边距}\default{}
\keyval*-{textheight}{页面文本高度}\default{}
\keybool*{nofoot}\Default*{false}
\begin{ctexexam}
diff --git a/macros/latex/contrib/spbmark/spbmark.pdf b/macros/latex/contrib/spbmark/spbmark.pdf
index 956ba69d9e..2baaca2e23 100644
--- a/macros/latex/contrib/spbmark/spbmark.pdf
+++ b/macros/latex/contrib/spbmark/spbmark.pdf
Binary files differ
diff --git a/macros/latex/contrib/spbmark/spbmark.sty b/macros/latex/contrib/spbmark/spbmark.sty
index 6b1f60022e..8655a6245d 100644
--- a/macros/latex/contrib/spbmark/spbmark.sty
+++ b/macros/latex/contrib/spbmark/spbmark.sty
@@ -9,7 +9,7 @@
% https://creativecommons.org/licenses/by/4.0/legalcode
\NeedsTeXFormat{LaTeX2e}[2018/12/31]
\RequirePackage{xparse,l3keys2e}
-\ProvidesExplPackage{spbmark}{2022/01/28}{1.33}
+\ProvidesExplPackage{spbmark}{2022/01/31}{1.34}
{Customize superscripts and subscripts}
\cs_generate_variant:Nn \box_set_ht:Nn { cv }
diff --git a/macros/latex/contrib/spbmark/spbmark.tex b/macros/latex/contrib/spbmark/spbmark.tex
index fd16319223..42cc8b7dbe 100644
--- a/macros/latex/contrib/spbmark/spbmark.tex
+++ b/macros/latex/contrib/spbmark/spbmark.tex
@@ -1,13 +1,13 @@
\documentclass[load-preamble+]{cnltx-doc}
-\usepackage{spbmark,siunitx}
+\usepackage{spbmark,siunitx,pifont}
\usepackage[noto]{newtxmath}
\setcnltx
{
package = spbmark,
title = the spbmark package,
- version = v1.33,
- date = 2022/01/28,
+ version = v1.34,
+ date = 2022/01/31,
authors = Qu Yi,
info = Customize superscript and subscript,
email = q1jx@foxmail.com,
@@ -34,6 +34,7 @@
\newsplitarg{\splitoarg}{[}{]}
\newsplitarg{\splitmarg}{\{}{\}}
\newsplitarg{\splitdarg}{(}{)}
+\newnote*{\newtag}{\textcolor{red}{\ding{73}\ New}}
\makeatother
\begin{document}
@@ -71,7 +72,7 @@ There are currently three commands to set superscript and subscript. Their forma
Defines the style of the superscript or subscript used for the \option{style} option.
\command{spbifmath}[\marg{math code}\marg{text code}]
In some cases, \code{math} or \code{text} output modes require different code for format or move. This command can be used when using the \code{match} option or changing the output mode locally, whitch should be used in the move or format options. It can switch the corresponding code according to different output modes.
- \command{spbshortkv}[\marg{short opt}\marg{key value}]
+ \command{spbshortkv}[\marg{short opt}\marg{key value}]\newtag%
Converts any existing key-value pair to a shorthand option. The value of key \code{\#1} indicates that the shorthand option needs to be assigned a value.
\begin{example}
\spbshortkv{x}{sphmove=#1}
@@ -84,7 +85,7 @@ There are currently three commands to set superscript and subscript. Their forma
Since the \cs{super} and \cs{sub} commands enclose the scripts in a horizontal box, the horizontal positions are staggered when using both superscript and subscript, which is different from the simultaneous use of \code{\^{}} and \code{\_} symbols in math mode. In this case, you need to adjust the horizontal offset of the latter command or use the \cs{supersub} command.
-The options common to \meta{kv list} of the three commands are as follows. They can be used in \meta{key-value list} for the \cs{spbset} command. When the following options are used in the \cs{spbset} command, in addition to \option{style} and \option{mode}, they are set according to the type of the previous most recent command.
+The options common to \meta{kv list} of the three commands are as follows. They can also be used in \meta {key-value list} of the \cs{spbset} command. In this situation, in addition to \option{style} and \option{mode}, they will be set according to the type of the previous most recent command.
\begin{options}
\keyval{vmove}{fixed length}\Default{0pt}
Vertical move of superscript or subscript. Represents the extra vertical distance \option{vsep} between superscript and subscript in the superscript and subscript commands.
diff --git a/macros/latex/contrib/zref-vario/CHANGELOG.md b/macros/latex/contrib/zref-vario/CHANGELOG.md
new file mode 100644
index 0000000000..7702b1e815
--- /dev/null
+++ b/macros/latex/contrib/zref-vario/CHANGELOG.md
@@ -0,0 +1,8 @@
+# Changelog
+
+## [Unreleased]
+
+## [v0.1.0-alpha](https://github.com/gusbrs/zref-vario/releases/tag/v0.1.0-alpha) (2022-01-31)
+
+### Added
+- Initial release.
diff --git a/macros/latex/contrib/zref-vario/DEPENDS.txt b/macros/latex/contrib/zref-vario/DEPENDS.txt
new file mode 100644
index 0000000000..b593a243a7
--- /dev/null
+++ b/macros/latex/contrib/zref-vario/DEPENDS.txt
@@ -0,0 +1,2 @@
+hard zref-clever
+hard varioref
diff --git a/macros/latex/contrib/zref-vario/MANIFEST.md b/macros/latex/contrib/zref-vario/MANIFEST.md
new file mode 100644
index 0000000000..050277efd7
--- /dev/null
+++ b/macros/latex/contrib/zref-vario/MANIFEST.md
@@ -0,0 +1,148 @@
+# Manifest for zref-vario
+
+This file is a listing of all files considered to be part of this package.
+It is automatically generated with `l3build manifest`.
+
+
+## Repository manifest
+
+The following groups list the files included in the development repository of the package.
+Files listed with a ‘†’ marker are included in the TDS but not CTAN files, and files listed
+with ‘‡’ are included in both.
+
+### Source files
+
+These are source files for a number of purposes, including the `unpack` process which
+generates the installation files of the package. Additional files included here will also
+be installed for processing such as testing.
+
+* zref-vario.dtx ‡
+* zref-vario.ins ‡
+
+### Typeset documentation source files
+
+These files are typeset using LaTeX to produce the PDF documentation for the package.
+
+* zref-vario-code.tex ‡
+* zref-vario.tex ‡
+
+### Text files
+
+Plain text files included as documentation or metadata.
+
+* CHANGELOG.md ‡
+* MANIFEST.md ‡
+* README.md ‡
+* readme-ctan.md
+* DEPENDS.txt ‡
+
+### Derived files
+
+The files created by ‘unpacking’ the package sources. This typically includes
+`.sty` and `.cls` files created from DocStrip `.dtx` files.
+
+* zref-vario.sty †
+
+### Typeset documents
+
+The output files (PDF, essentially) from typesetting the various source, demo,
+etc., package files.
+
+* zref-vario-code.pdf ‡
+* zref-vario.pdf ‡
+
+### Test files
+
+These files form the test suite for the package. `.lvt` or `.lte` files are the individual
+unit tests, and `.tlg` are the stored output for ensuring changes to the package produce
+the same output. These output files are sometimes shared and sometime specific for
+different engines (pdfTeX, XeTeX, LuaTeX, etc.).
+
+* zv-basic01.lvt
+* zv-basic02.lvt
+* zv-basic03.lvt
+* zv-basic04.lvt
+* zv-hyperref01.lvt
+* zv-languages01.lvt
+* zv-zcref-options01.lvt
+* zv-basic01.luatex.tlg
+* zv-basic01.luatexdev.tlg
+* zv-basic01.tlg
+* zv-basic01.xetex.tlg
+* zv-basic01.xetexdev.tlg
+* zv-basic02.luatex.tlg
+* zv-basic02.luatexdev.tlg
+* zv-basic02.tlg
+* zv-basic02.xetex.tlg
+* zv-basic02.xetexdev.tlg
+* zv-basic03.luatex.tlg
+* zv-basic03.luatexdev.tlg
+* zv-basic03.tlg
+* zv-basic03.xetex.tlg
+* zv-basic03.xetexdev.tlg
+* zv-basic04.luatex.tlg
+* zv-basic04.luatexdev.tlg
+* zv-basic04.tlg
+* zv-basic04.xetex.tlg
+* zv-basic04.xetexdev.tlg
+* zv-hyperref01.luatex.tlg
+* zv-hyperref01.luatexdev.tlg
+* zv-hyperref01.tlg
+* zv-hyperref01.xetex.tlg
+* zv-hyperref01.xetexdev.tlg
+* zv-languages01.tlg
+* zv-zcref-options01.luatex.tlg
+* zv-zcref-options01.luatexdev.tlg
+* zv-zcref-options01.tlg
+* zv-zcref-options01.xetex.tlg
+* zv-zcref-options01.xetexdev.tlg
+
+
+## TDS manifest
+
+The following groups list the files included in the TeX Directory Structure used to install
+the package into a TeX distribution.
+
+### Source files (TDS)
+
+All files included in the `zref-vario/source` directory.
+
+* zref-vario.dtx
+* zref-vario.ins
+
+### TeX files (TDS)
+
+All files included in the `zref-vario/tex` directory.
+
+* zref-vario.sty
+
+### Doc files (TDS)
+
+All files included in the `zref-vario/doc` directory.
+
+* CHANGELOG.md
+* DEPENDS.txt
+* MANIFEST.md
+* README.md
+* zref-vario-code.pdf
+* zref-vario-code.tex
+* zref-vario.pdf
+* zref-vario.tex
+
+
+## CTAN manifest
+
+The following group lists the files included in the CTAN package.
+
+### CTAN files
+
+* CHANGELOG.md
+* DEPENDS.txt
+* MANIFEST.md
+* README.md
+* zref-vario-code.pdf
+* zref-vario-code.tex
+* zref-vario.dtx
+* zref-vario.ins
+* zref-vario.pdf
+* zref-vario.tex
diff --git a/macros/latex/contrib/zref-vario/README.md b/macros/latex/contrib/zref-vario/README.md
new file mode 100644
index 0000000000..a76d0b945c
--- /dev/null
+++ b/macros/latex/contrib/zref-vario/README.md
@@ -0,0 +1,19 @@
+# zref-vario
+
+**Extended LaTeX page cross-references with varioref and zref-clever**
+
+Author: Gustavo Barros
+Maintainer: Gustavo Barros
+
+`zref-vario` offers a compatibility layer for `varioref` to be used alongside
+`zref-clever`. It provides "`\z...`" counterparts to `varioref`'s main
+reference commands, each of which essentially does some (scoped) setup for
+`varioref`, then calls the original one.
+
+License: LPPL Version 1.3c
+
+Repository: https://github.com/gusbrs/zref-vario
+
+Bug tracker: https://github.com/gusbrs/zref-vario/issues
+
+CTAN: https://ctan.org/pkg/zref-vario
diff --git a/macros/latex/contrib/zref-vario/zref-vario-code.pdf b/macros/latex/contrib/zref-vario/zref-vario-code.pdf
new file mode 100644
index 0000000000..00e63f3389
--- /dev/null
+++ b/macros/latex/contrib/zref-vario/zref-vario-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/zref-vario/zref-vario-code.tex b/macros/latex/contrib/zref-vario/zref-vario-code.tex
new file mode 100644
index 0000000000..949376f197
--- /dev/null
+++ b/macros/latex/contrib/zref-vario/zref-vario-code.tex
@@ -0,0 +1,52 @@
+% \iffalse meta-comment
+%
+% File: zref-vario-code.tex
+%
+% This file is part of the LaTeX package "zref-vario".
+%
+% Copyright (C) 2022 Gustavo Barros
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file:
+%
+% https://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+%
+% This work is "maintained" (as per LPPL maintenance status) by
+% Gustavo Barros.
+%
+% This work consists of the files zref-vario.dtx,
+% zref-vario.ins,
+% zref-vario.tex,
+% zref-vario-code.tex,
+% and the files listed in MANIFEST.md.
+%
+% The released version of this package is available from CTAN.
+%
+% -----------------------------------------------------------------------
+%
+% The development version of the package can be found at
+%
+% https://github.com/gusbrs/zref-vario
+%
+% for those people who are interested.
+%
+% -----------------------------------------------------------------------
+%
+% \fi
+
+\documentclass{l3doc}
+
+% Have \GetFileInfo pick up date and version data.
+\usepackage{zref-vario}
+
+\begin{document}
+
+\DocInput{zref-vario.dtx}
+
+\end{document}
diff --git a/macros/latex/contrib/zref-vario/zref-vario.dtx b/macros/latex/contrib/zref-vario/zref-vario.dtx
new file mode 100644
index 0000000000..f58b39af25
--- /dev/null
+++ b/macros/latex/contrib/zref-vario/zref-vario.dtx
@@ -0,0 +1,908 @@
+% \iffalse meta-comment
+%
+% File: zref-vario.dtx
+%
+% This file is part of the LaTeX package "zref-vario".
+%
+% Copyright (C) 2022 Gustavo Barros
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file:
+%
+% https://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+%
+% This work is "maintained" (as per LPPL maintenance status) by
+% Gustavo Barros.
+%
+% This work consists of the files zref-vario.dtx,
+% zref-vario.ins,
+% zref-vario.tex,
+% zref-vario-code.tex,
+% and the files listed in MANIFEST.md.
+%
+% The released version of this package is available from CTAN.
+%
+% -----------------------------------------------------------------------
+%
+% The development version of the package can be found at
+%
+% https://github.com/gusbrs/zref-vario
+%
+% for those people who are interested.
+%
+% -----------------------------------------------------------------------
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\documentclass{l3doc}
+
+% Have \GetFileInfo pick up date and version data and used in the
+% documentation.
+\usepackage{zref-vario}
+
+\begin{document}
+
+\DocInput{zref-vario.dtx}
+
+\end{document}
+%</driver>
+% \fi
+%
+% \DoNotIndex{\\,\{,\}}
+%
+% \NewDocumentCommand\githubissue{m}{^^A
+% issue~\href{https://github.com/gusbrs/zref-vario/issues/#1}{\##1}}
+%
+% \NewDocumentCommand\githubPR{m}{^^A
+% PR~\href{https://github.com/gusbrs/zref-vario/pull/#1}{\##1}}
+%
+% ^^A Currently just for keeping semantic markup on this.
+% \NewDocumentCommand\contributor{m}{#1}
+%
+% \NewDocumentCommand\opt{m}{\texttt{#1}}
+%
+% \pdfstringdefDisableCommands{^^A
+% \def\opt#1{#1}
+% }
+%
+% ^^A Have the Index at 'section' level rather than 'part'. Otherwise it is
+% ^^A just the same definition from 'l3doc.cls'.
+% \IndexPrologue{^^A
+% \section*{Index}
+% \markboth{Index}{Index}
+% \addcontentsline{toc}{section}{Index}
+% The italic numbers denote the pages where the corresponding entry is
+% described, numbers underlined point to the definition, all others indicate
+% the places where it is used.^^A
+% }
+%
+%
+% \GetFileInfo{zref-vario.sty}
+%
+% \title{^^A
+% The \pkg{zref-vario} package^^A
+% \thanks{This file describes \fileversion, released \filedate.}^^A
+% \texorpdfstring{\\{}\medskip{}}{ - }^^A
+% Code documentation^^A
+% \texorpdfstring{\medskip{}}{}^^A
+% }
+%
+% \author{^^A
+% Gustavo Barros^^A
+% \thanks{\url{https://github.com/gusbrs/zref-vario}}^^A
+% }
+%
+% \date{\filedate}
+%
+% \maketitle
+%
+% \begin{center}
+% \textbf{EXPERIMENTAL}
+% \end{center}
+%
+%
+% \tableofcontents
+%
+% \clearpage{}
+%
+% \section{Initial setup}
+%
+% Start the \pkg{DocStrip} guards.
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% Identify the internal prefix (\LaTeX3 \pkg{DocStrip} convention).
+% \begin{macrocode}
+%<@@=zrefvario>
+% \end{macrocode}
+%
+%
+% Identify the package.
+% \begin{macrocode}
+\ProvidesExplPackage {zref-vario} {2022-01-31} {0.1.0-alpha}
+ {Extended LaTeX page cross-references with varioref and zref-clever}
+% \end{macrocode}
+%
+%
+% Required packages.
+%
+% \begin{macrocode}
+\RequirePackage { varioref }
+\RequirePackage { zref-clever } [ 2022-01-28 ] % v0.2.0-alpha
+% \end{macrocode}
+%
+%
+% \section{Customization}
+%
+% Provide some functions to define options names in a standard form.
+%
+% \begin{macro}[EXP]{\@@_ref_opt_default_cs:nn}
+% \begin{syntax}
+% \cs{@@_ref_opt_default_cs:nn} \Arg{option} \Arg{signature}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new:Npn \@@_ref_opt_default_cs:nn #1#2
+ { @@_ref_opt_default_ #1 : #2 }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}[EXP]{\@@_base_lang:n}
+% \begin{syntax}
+% \cs{@@_base_lang:n} \Arg{language}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new:Npn \@@_base_lang:n #1
+ {
+ \zrefclever_language_if_declared:nTF {#1}
+ { \tl_use:c { \zrefclever_language_varname:n {#1} } }
+ { zv_unknown_language }
+ }
+\cs_generate_variant:Nn \@@_base_lang:n { e }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_@@_ref_language_tl}
+% An internal version of \cs{l_zrefclever_ref_language_tl}, since we need to
+% retreive the current value of the variable in multiple places.
+% \begin{macrocode}
+\tl_new:N \l_@@_ref_language_tl
+\tl_set:Nn \l_@@_ref_language_tl { \l_zrefclever_ref_language_tl }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_ref_opt_name_lang_tl:nn}
+% \begin{syntax}
+% \cs{@@_ref_opt_name_lang_tl:nn} \Arg{lang} \Arg{option}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new:Npn \@@_ref_opt_name_lang_tl:nn #1#2
+ { g_@@_ref_opt_lang_ \@@_base_lang:n {#1} _ #2 _tl }
+\cs_generate_variant:Nn \@@_ref_opt_name_lang_tl:nn { en }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_ref_opt_name_lang_cs:nnn}
+% \begin{syntax}
+% \cs{@@_ref_opt_name_lang_cs:nnn} \Arg{lang} \Arg{option} \Arg{signature}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new:Npn \@@_ref_opt_name_lang_cs:nnn #1#2#3
+ { @@_ref_opt_lang_ \@@_base_lang:n {#1} _ #2 : #3 }
+\cs_generate_variant:Nn \@@_ref_opt_name_lang_cs:nnn { enn }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% Retrieving options values.
+%
+% \begin{macro}
+% {
+% \@@_ref_opt_tl_get:nnN ,
+% \@@_ref_opt_cs_get:nnnN ,
+% }
+% \begin{syntax}
+% \cs{@@_ref_opt_tl_get:nnN} \Arg{lang} \Arg{option} \Arg{tl var to set}
+% \cs{@@_ref_opt_cs_get:nnnN} \Arg{lang} \Arg{option}
+% ~~\Arg{cs signature} \Arg{cs to set}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_ref_opt_tl_get:nnN #1#2#3
+ {
+ \tl_if_exist:cTF
+ { \@@_ref_opt_name_lang_tl:nn {#1} {#2} }
+ {
+ \tl_set_eq:Nc #3
+ { \@@_ref_opt_name_lang_tl:nn {#1} {#2} }
+ }
+ {
+ \tl_set_eq:Nc #3
+ { \@@_ref_opt_name_lang_tl:nn { zv_unknown_language } {#2} }
+ }
+ }
+\cs_generate_variant:Nn \@@_ref_opt_tl_get:nnN { xnN }
+\cs_new_protected:Npn \@@_ref_opt_cs_get:nnnN #1#2#3#4
+ {
+ \cs_if_exist:cTF
+ { \@@_ref_opt_name_lang_cs:nnn {#1} {#2} {#3} }
+ {
+ \cs_set_eq:Nc #4
+ { \@@_ref_opt_name_lang_cs:nnn {#1} {#2} {#3} }
+ }
+ {
+ \cs_if_exist:cTF
+ { \@@_ref_opt_default_cs:nn {#2} {#3} }
+ {
+ \cs_set_eq:Nc #4
+ { \@@_ref_opt_default_cs:nn {#2} {#3} }
+ }
+ {
+ \cs_set_eq:Nc #4
+ {
+ \@@_ref_opt_name_lang_cs:nnn
+ { zv_unknown_language } {#2} {#3}
+ }
+ }
+ }
+ }
+\cs_generate_variant:Nn \@@_ref_opt_cs_get:nnnN { xnnN }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% Handle the options set of the user commands, and add support for
+% \pkg{varioref} optional arguments. All commands can receive the same set of
+% options \cs{zcref} can, and these are processed the same way and
+% ``consumed'' by any \cs{zcref} or \cs{zcpageref} calls. Besides those,
+% \opt{vother} is made available for \cs{zvpageref}, corresponding to its
+% second optional argument, and \opt{vcurrent} which is available to all
+% commands except \cs{fullref}, corresponding to their first optional
+% arguments. The distinction between \cs{l_@@_reftextcurrent_tl} and
+% \cs{l_@@_vref_reftextcurrent_tl} is in their default/initial values. The
+% default values for the optional arguments of \cs{vpageref}, \cs{vrefrange},
+% and \cs{vpagerefrange} are set to \cs{reftextcurrent}, while the default
+% value of the optional argument of \cs{vref} is empty.
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_reftextcurrent_tl
+\tl_set:Nn \l_@@_reftextcurrent_tl { \reftextcurrent }
+\tl_new:N \l_@@_vref_reftextcurrent_tl
+\tl_new:N \l_@@_reftextother_tl
+\keys_define:nn { zref-vario/current }
+ {
+ vcurrent .code:n =
+ {
+ \tl_set:Nn \l_@@_reftextcurrent_tl {#1}
+ \tl_set:Nn \l_@@_vref_reftextcurrent_tl {#1}
+ } ,
+ vcurrent .value_required:n = true ,
+ }
+\keys_define:nn { zref-vario/other }
+ {
+ vother .tl_set:N = \l_@@_reftextother_tl ,
+ vother .value_required:n = true ,
+ }
+\keys_define:nn { }
+ {
+ zref-vario/ref .inherit:n =
+ { zref-clever/reference } ,
+ zref-vario/ref-oneoptarg .inherit:n =
+ { zref-clever/reference , zref-vario/current } ,
+ zref-vario/ref-twooptargs .inherit:n =
+ { zref-clever/reference , zref-vario/current , zref-vario/other } ,
+ }
+% \end{macrocode}
+%
+%
+% \begin{macro}[int]{\zvLanguageSetup}
+% User interface for setting ``strings'' (\texttt{reftext\dots{}} options) and
+% ``formats'' (\texttt{\dots{}format} options) for each language.
+% \begin{syntax}
+% \cs{zvLanguageSetup}\marg{language}\marg{options}
+% \end{syntax}
+% \begin{macrocode}
+\tl_new:N \l_@@_setup_language_tl
+\seq_new:N \g_@@_setup_languages_seq
+\NewDocumentCommand \zvLanguageSetup { m m }
+ {
+ \group_begin:
+ \zrefclever_language_if_declared:nTF {#1}
+ {
+ \tl_set:Nn \l_@@_setup_language_tl {#1}
+ \keys_set:nn { zref-vario/langsetup } {#2}
+ \seq_gput_right:Nx \g_@@_setup_languages_seq
+ { \@@_base_lang:n {#1} }
+ }
+ { \msg_warning:nnn { zref-vario } { unknown-language-setup } {#1} }
+ \group_end:
+ }
+\msg_new:nnn { zref-vario } { unknown-language-setup }
+ {
+ Language~'#1'~is~unknown~\msg_line_context:.~Can't~set~it~up.~
+ The~language~must~be~declared~for~'zref-clever',~see~its~documentation.
+ }
+\@onlypreamble \zvLanguageSetup
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macrocode}
+\keys_define:nn { zref-vario/langsetup }
+ {
+ reftextfaceafter .code:n =
+ {
+ \tl_gset:cn
+ {
+ \@@_ref_opt_name_lang_tl:en
+ { \l_@@_setup_language_tl }
+ { reftextfaceafter }
+ } {#1}
+ } ,
+ reftextfacebefore .code:n =
+ {
+ \tl_gset:cn
+ {
+ \@@_ref_opt_name_lang_tl:en
+ { \l_@@_setup_language_tl }
+ { reftextfacebefore }
+ } {#1}
+ } ,
+ reftextafter .code:n =
+ {
+ \tl_gset:cn
+ {
+ \@@_ref_opt_name_lang_tl:en
+ { \l_@@_setup_language_tl }
+ { reftextafter }
+ } {#1}
+ } ,
+ reftextbefore .code:n =
+ {
+ \tl_gset:cn
+ {
+ \@@_ref_opt_name_lang_tl:en
+ { \l_@@_setup_language_tl }
+ { reftextbefore }
+ } {#1}
+ } ,
+ reftextcurrent .code:n =
+ {
+ \tl_gset:cn
+ {
+ \@@_ref_opt_name_lang_tl:en
+ { \l_@@_setup_language_tl }
+ { reftextcurrent }
+ } {#1}
+ } ,
+ reftextfaraway .code:n =
+ {
+ \cs_gset_nopar:cpn
+ {
+ \@@_ref_opt_name_lang_cs:enn
+ { \l_@@_setup_language_tl }
+ { reftextfaraway } { n }
+ }
+ ##1
+ {#1}
+ } ,
+ reftextpagerange .code:n =
+ {
+ \cs_gset_nopar:cpn
+ {
+ \@@_ref_opt_name_lang_cs:enn
+ { \l_@@_setup_language_tl }
+ { reftextpagerange } { nn }
+ }
+ ##1##2
+ {#1}
+ } ,
+ reftextlabelrange .code:n =
+ {
+ \cs_gset_nopar:cpn
+ {
+ \@@_ref_opt_name_lang_cs:enn
+ { \l_@@_setup_language_tl }
+ { reftextlabelrange } { nn }
+ }
+ ##1##2
+ {#1}
+ } ,
+ vrefformat .code:n =
+ {
+ \cs_gset_nopar:cpn
+ {
+ \@@_ref_opt_name_lang_cs:enn
+ { \l_@@_setup_language_tl }
+ { vrefformat } { nn }
+ }
+ ##1##2
+ {#1}
+ } ,
+ vrefrangeformat .code:n =
+ {
+ \cs_gset_nopar:cpn
+ {
+ \@@_ref_opt_name_lang_cs:enn
+ { \l_@@_setup_language_tl }
+ { vrefrangeformat } { nnn }
+ }
+ ##1##2##3
+ {#1}
+ } ,
+ fullrefformat .code:n =
+ {
+ \cs_gset_nopar:cpn
+ {
+ \@@_ref_opt_name_lang_cs:enn
+ { \l_@@_setup_language_tl }
+ { fullrefformat } { n }
+ }
+ ##1
+ {#1}
+ } ,
+ }
+% \end{macrocode}
+%
+%
+% Default reference formats for all languages. These will be used by
+% \cs{@@_ref_opt_cs_get:nnnN}, unless a language specific setting for the same
+% format has been set. \cs{zreftextfaraway} is defined so it can be called
+% with different arguments in \cs{zvpageref} (where it is alone) and in
+% \cs{zfullref} (where it is the second of the pair).
+%
+% \begin{macrocode}
+\cs_new_nopar:cpn
+ { \@@_ref_opt_default_cs:nn { vrefformat } { nn } } #1#2
+ {
+ \zcref {#2} ~
+ \zvpageref [ S=false, typeset=both, vcurrent={#1} ] {#2}
+ }
+\cs_new_nopar:cpn
+ { \@@_ref_opt_default_cs:nn { vrefrangeformat } { nnn } } #1#2#3
+ {
+ \reftextlabelrange {#2} {#3} ~
+ \zvpagerefrange [ S=false, typeset=both, vcurrent={#1} ] {#2} {#3}
+ }
+\cs_new_nopar:cpn
+ { \@@_ref_opt_default_cs:nn { fullrefformat } { n } } #1
+ {
+ \zcref {#1} ~
+ \zreftextfaraway [ S=false, typeset=both ] {#1}
+ }
+\NewDocumentCommand \zreftextfaraway { s O { } m }
+ { \zref@wrapper@babel \@@_zreftextfaraway:nnn {#3} {#1} {#2} }
+\cs_new_protected:Npn \@@_zreftextfaraway:nnn #1#2#3
+ {
+ \group_begin:
+ \keys_set:nn { zref-vario/ref } {#3}
+ \bool_if:nT {#2}
+ { \keys_set:nn { zref-vario/ref } { nohyperref } }
+ \@@_varioref_setup:
+ \reftextfaraway {#1}
+ \group_end:
+ }
+% \end{macrocode}
+%
+%
+% Warnings and values for missing strings / unknown languages.
+%
+% \begin{macrocode}
+\group_begin:
+\tl_set:Nn \l_@@_setup_language_tl { zv_unknown_language }
+\keys_set:nn { zref-vario/langsetup }
+ {
+ reftextfaceafter =
+ {
+ \msg_warning:nnxx { zref-vario } { missing-string }
+ { reftextfaceafter } { \l_@@_ref_language_tl }
+ \zref@default
+ } ,
+ reftextfacebefore =
+ {
+ \msg_warning:nnxx { zref-vario } { missing-string }
+ { reftextfacebefore } { \l_@@_ref_language_tl }
+ \zref@default
+ } ,
+ reftextafter =
+ {
+ \msg_warning:nnxx { zref-vario } { missing-string }
+ { reftextafter } { \l_@@_ref_language_tl }
+ \zref@default
+ } ,
+ reftextbefore =
+ {
+ \msg_warning:nnxx { zref-vario } { missing-string }
+ { reftextbefore } { \l_@@_ref_language_tl }
+ \zref@default
+ } ,
+ reftextcurrent =
+ {
+ \msg_warning:nnxx { zref-vario } { missing-string }
+ { reftextcurrent } { \l_@@_ref_language_tl }
+ \zref@default
+ } ,
+ reftextfaraway =
+ {
+ \msg_warning:nnxx { zref-vario } { missing-string }
+ { reftextfaraway } { \l_@@_ref_language_tl }
+ \zref@default
+ } ,
+ reftextpagerange =
+ {
+ \msg_warning:nnxx { zref-vario } { missing-string }
+ { reftextpagerange } { \l_@@_ref_language_tl }
+ \zref@default
+ } ,
+ reftextlabelrange =
+ {
+ \msg_warning:nnxx { zref-vario } { missing-string }
+ { reftextlabelrange } { \l_@@_ref_language_tl }
+ \zref@default
+ } ,
+ }
+\group_end:
+\msg_new:nnn { zref-vario } { missing-string }
+ { Missing~'#1'~string~for~language~'#2'~\msg_line_context:. }
+% \end{macrocode}
+%
+%
+% A general initial warning in case the language is altogether not set up.
+%
+% \begin{macrocode}
+\AddToHook { begindocument }
+ {
+ \seq_if_in:NxF \g_@@_setup_languages_seq
+ { \@@_base_lang:e { \l_@@_ref_language_tl } }
+ {
+ \msg_warning:nnx { zref-vario } { language-not-setup }
+ { \l_@@_ref_language_tl }
+ }
+ }
+\msg_new:nnn { zref-vario } { language-not-setup }
+ {
+ Language~'#1'~is~not~set~up~for~'zref-vario'.~
+ See~documentation~for~'\iow_char:N\\zvLanguageSetup'.
+ }
+% \end{macrocode}
+%
+%
+%
+% \section{User interface}
+%
+% \begin{macro}
+% {
+% \@@_vref_pagenum:Nn ,
+% \@@_vrefpagenum:Nn ,
+% \@@_vref_label:n ,
+% }
+% These three small functions are responsible for ``connecting''
+% \pkg{varioref} with \pkg{zref}, instead of with the standard referencing
+% system. They are meant to locally replace their \pkg{varioref}
+% counterparts: \cs{vref@pagenum}, \cs{vrefpagenum}, and \cs{vref@label}.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_vref_pagenum:Nn #1#2
+ {
+ \exp_args:NNNo \exp_args:NNo \tl_set:Nn #1
+ { \zref@extractdefault {#2} { page } { ?? } }
+ }
+\cs_new_protected:Npn \@@_vrefpagenum:Nn #1#2
+ {
+ \zref@refused {#2}
+ \@@_vref_pagenum:Nn #1 {#2}
+ }
+\cs_new_protected:Npn \@@_vref_label:n #1
+ { \zref@labelbyprops {#1} { page } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_varioref_setup:}
+% Sets things up for \pkg{varioref} to work with \pkg{zref}/\pkg{zref-clever}.
+% It is pretty straightforward, but it is the core of the package.
+% \cs{l_@@_varioref_setup_bool} ensures this setup runs only once in case of
+% nested calls to the package's commands.
+% \begin{macrocode}
+\bool_new:N \l_@@_varioref_setup_bool
+\cs_new_protected:Npn \@@_varioref_setup:
+ {
+ \bool_if:NF \l_@@_varioref_setup_bool
+ {
+ \bool_set_true:N \l_@@_varioref_setup_bool
+ \@vrefhandlespacefalse
+ \cs_set_eq:NN \vref@pagenum \@@_vref_pagenum:Nn
+ \cs_set_eq:NN \vrefpagenum \@@_vrefpagenum:Nn
+ \cs_set_eq:NN \vref@label \@@_vref_label:n
+ \@@_ref_opt_tl_get:xnN
+ { \l_@@_ref_language_tl }
+ { reftextfaceafter }
+ \reftextfaceafter
+ \@@_ref_opt_tl_get:xnN
+ { \l_@@_ref_language_tl }
+ { reftextfacebefore }
+ \reftextfacebefore
+ \@@_ref_opt_tl_get:xnN
+ { \l_@@_ref_language_tl }
+ { reftextafter }
+ \reftextafter
+ \@@_ref_opt_tl_get:xnN
+ { \l_@@_ref_language_tl }
+ { reftextbefore }
+ \reftextbefore
+ \@@_ref_opt_tl_get:xnN
+ { \l_@@_ref_language_tl }
+ { reftextcurrent }
+ \reftextcurrent
+ \@@_ref_opt_cs_get:xnnN
+ { \l_@@_ref_language_tl }
+ { reftextfaraway } { n }
+ \reftextfaraway
+ \@@_ref_opt_cs_get:xnnN
+ { \l_@@_ref_language_tl }
+ { reftextpagerange } { nn }
+ \reftextpagerange
+ \@@_ref_opt_cs_get:xnnN
+ { \l_@@_ref_language_tl }
+ { reftextlabelrange } { nn }
+ \reftextlabelrange
+ \@@_ref_opt_cs_get:xnnN
+ { \l_@@_ref_language_tl }
+ { vrefformat } { nn }
+ \vrefformat
+ \@@_ref_opt_cs_get:xnnN
+ { \l_@@_ref_language_tl }
+ { vrefrangeformat } { nnn }
+ \vrefrangeformat
+ \@@_ref_opt_cs_get:xnnN
+ { \l_@@_ref_language_tl }
+ { fullrefformat } { n }
+ \fullrefformat
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% User commands.
+%
+% \begin{macro}[int]{\zvref}
+% \begin{syntax}
+% \cs{zvref}\meta{*}\oarg{options}\marg{label}
+% \end{syntax}
+% \begin{macrocode}
+\NewDocumentCommand \zvref { s O { } m }
+ { \zref@wrapper@babel \@@_zvref:nnn {#3} {#1} {#2} }
+\cs_new_protected:Npn \@@_zvref:nnn #1#2#3
+ {
+ \group_begin:
+ \keys_set:nn { zref-vario/ref-oneoptarg } {#3}
+ \bool_if:nT {#2}
+ { \keys_set:nn { zref-vario/ref } { nohyperref } }
+ \@@_varioref_setup:
+ \@@_vref:Vn \l_@@_vref_reftextcurrent_tl {#1}
+ \group_end:
+ }
+% \end{macrocode}
+% ``Ideally'', we'd be using \cs{vref} here, but \pkg{hyperref} redefines
+% \cs{vref@star} and \cs{vr@f}, hard-coding what was supposed to be
+% configurable\dots{}, so we use \cs{vrefformat} instead, which is the
+% original definition of \cs{vref@star}, and \cs{vr@f} also boils down to
+% \cs{vref@star} when \cs{@vrefhandlespace} is false, which is our case.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_vref:nn #1#2
+ { \vrefformat {#1} {#2} }
+\cs_generate_variant:Nn \@@_vref:nn { Vn }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}[int]{\zvpageref}
+% \begin{syntax}
+% \cs{zvpageref}\meta{*}\oarg{options}\marg{label}
+% \end{syntax}
+% \begin{macrocode}
+\NewDocumentCommand \zvpageref { s O { } m }
+ { \zref@wrapper@babel \@@_zvpageref:nnn {#3} {#1} {#2} }
+\cs_new_protected:Npn \@@_zvpageref:nnn #1#2#3
+ {
+ \group_begin:
+ \keys_set:nn { zref-vario/ref-twooptargs } {#3}
+ \bool_if:nT {#2}
+ { \keys_set:nn { zref-vario/ref } { nohyperref } }
+ \@@_varioref_setup:
+ \@@_vpageref:VVn \l_@@_reftextcurrent_tl
+ \l_@@_reftextother_tl {#1}
+ \group_end:
+ }
+\cs_new_protected:Npn \@@_vpageref:nnn #1#2#3
+ { \vpageref [{#1}] [#2] {#3} }
+\cs_generate_variant:Nn \@@_vpageref:nnn { VVn }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}[int]{\zvrefrange}
+% \begin{syntax}
+% \cs{zvrefrange}\meta{*}\oarg{options}\marg{label}\marg{label}
+% \end{syntax}
+% \begin{macrocode}
+\NewDocumentCommand \zvrefrange { s O { } m m }
+ {
+ \zref@wrapper@babel
+ { \zref@wrapper@babel \@@_zvrefrange:nnnn {#3} }
+ {#4} {#1} {#2}
+ }
+\cs_new_protected:Npn \@@_zvrefrange:nnnn #1#2#3#4
+ {
+ \group_begin:
+ \keys_set:nn { zref-vario/ref-oneoptarg } {#4}
+ \bool_if:nT {#3}
+ { \keys_set:nn { zref-vario/ref } { nohyperref } }
+ \@@_varioref_setup:
+ \@@_vrefrange:Vnn \l_@@_reftextcurrent_tl {#1} {#2}
+ \group_end:
+ }
+\cs_new_protected:Npn \@@_vrefrange:nnn #1#2#3
+ { \vrefrange [{#1}] {#2} {#3} }
+\cs_generate_variant:Nn \@@_vrefrange:nnn { Vnn }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}[int]{\zvpagerefrange}
+% \begin{syntax}
+% \cs{zvpagerefrange}\meta{*}\oarg{options}\marg{label}\marg{label}
+% \end{syntax}
+% \begin{macrocode}
+\NewDocumentCommand \zvpagerefrange { s O { } m m }
+ {
+ \zref@wrapper@babel
+ { \zref@wrapper@babel \@@_zvpagerefrange:nnnn {#3} }
+ {#4} {#1} {#2}
+ }
+\cs_new_protected:Npn \@@_zvpagerefrange:nnnn #1#2#3#4
+ {
+ \group_begin:
+ \keys_set:nn { zref-vario/ref-oneoptarg } {#4}
+ \bool_if:nT {#3}
+ { \keys_set:nn { zref-vario/ref } { nohyperref } }
+ \@@_varioref_setup:
+ \@@_vpagerefrange:Vnn \l_@@_reftextcurrent_tl {#1} {#2}
+ \group_end:
+ }
+\cs_new_protected:Npn \@@_vpagerefrange:nnn #1#2#3
+ { \vpagerefrange [{#1}] {#2} {#3} }
+\cs_generate_variant:Nn \@@_vpagerefrange:nnn { Vnn }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}[int]{\zfullref}
+% \begin{syntax}
+% \cs{zfullref}\meta{*}\oarg{options}\marg{label}
+% \end{syntax}
+% \begin{macrocode}
+\NewDocumentCommand \zfullref { s O { } m }
+ { \zref@wrapper@babel \@@_zfullref:nnn {#3} {#1} {#2} }
+\cs_new_protected:Npn \@@_zfullref:nnn #1#2#3
+ {
+ \group_begin:
+ \keys_set:nn { zref-vario/ref } {#3}
+ \bool_if:nT {#2}
+ { \keys_set:nn { zref-vario/ref } { nohyperref } }
+ \@@_varioref_setup:
+ \fullref {#1}
+ \group_end:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \section{Languages}
+%
+%
+% \begin{macrocode}
+\zvLanguageSetup { english }
+ {
+ reftextfaceafter = {on~the~\reftextvario{facing}{next}~page} ,
+ reftextfacebefore = {on~the~\reftextvario{facing}{preceding}~page} ,
+ reftextafter = {on~the~\reftextvario{following}{next}~page} ,
+ reftextbefore = {on~the~\reftextvario{preceding}{previous}~page} ,
+ reftextcurrent = {on~\reftextvario{this}{the~current}~page} ,
+ reftextfaraway = {on~\zcpageref{#1}} ,
+ reftextpagerange = {on~\zcpageref[range]{#1,#2}} ,
+ reftextlabelrange = {\zcref[range]{#1,#2}} ,
+ }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\zvLanguageSetup { german }
+ {
+ reftextfaceafter = {auf~der~nächsten~Seite} ,
+ reftextfacebefore = {auf~der~vorherigen~Seite} ,
+ reftextafter = {auf~der~nächsten~Seite} ,
+ reftextbefore = {auf~der~vorherigen~Seite} ,
+ reftextcurrent = {auf~dieser~Seite} ,
+ reftextfaraway = {auf~\zcpageref[d=D,g=f]{#1}} ,
+ reftextpagerange = {auf~den~\zcpageref[range,d=D,g=f]{#1,#2}} ,
+ reftextlabelrange = {\zcref[range]{#1,#2}} ,
+ }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\zvLanguageSetup { french }
+ {
+ reftextfaceafter = {page~\reftextvario{ci-contre}{suivante}} ,
+ reftextfacebefore = {page~\reftextvario{ci-contre}{précédente}} ,
+ reftextafter = {page~suivante} ,
+ reftextbefore = {page~précédente} ,
+ reftextcurrent = {de~la~présente~page} ,
+ reftextfaraway = {\zcpageref[g=f]{#1}} ,
+ reftextpagerange = {\zcpageref[range,g=f]{#1,#2}} ,
+ reftextlabelrange = {\zcref[range]{#1,#2}} ,
+ }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\zvLanguageSetup { portuguese }
+ {
+ reftextfaceafter = {na~\reftextvario{página~oposta}{próxima~página}} ,
+ reftextfacebefore = {na~página~\reftextvario{oposta}{anterior}} ,
+ reftextafter = {na~\reftextvario{página~seguinte}{próxima~página}} ,
+ reftextbefore = {na~página~\reftextvario{anterior}{precedente}} ,
+ reftextcurrent = {nesta~página} ,
+ reftextfaraway = {na~\zcpageref[g=f]{#1}} ,
+ reftextpagerange = {nas~\zcpageref[range,g=f]{#1,#2}} ,
+ reftextlabelrange = {\zcref[range]{#1,#2}} ,
+ }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\zvLanguageSetup { spanish }
+ {
+ reftextfaceafter = {en~la~página~siguiente} ,
+ reftextfacebefore = {en~la~página~anterior} ,
+ reftextafter = {en~la~página~siguiente} ,
+ reftextbefore = {en~la~página~anterior} ,
+ reftextcurrent = {en~esta~página} ,
+ reftextfaraway = {en~la~\zcpageref[g=f]{#1}} ,
+ reftextpagerange = {en~las~\zcpageref[range,g=f]{#1,#2}} ,
+ reftextlabelrange = {\zcref[range]{#1,#2}} ,
+ }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\zvLanguageSetup { dutch }
+ {
+ reftextfaceafter = {op~de~\reftextvario{rechter~pagina}{pagina~hiernaast}} ,
+ reftextfacebefore = {op~de~\reftextvario{linker~pagina}{pagina~hiernaast}} ,
+ reftextafter = {op~de~\reftextvario{volgende~pagina}{pagina~hierna}} ,
+ reftextbefore = {op~de~\reftextvario{vorige~pagina}{pagina~hiervoor}} ,
+ reftextcurrent = {op~deze~pagina} ,
+ reftextfaraway = {op~\zcpageref[g=f]{#1}} ,
+ reftextpagerange = {op~\zcpageref[range,g=f]{#1,#2}} ,
+ reftextlabelrange = {\zcref[range]{#1,#2}} ,
+ }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+%
+% \PrintIndex
+%
diff --git a/macros/latex/contrib/zref-vario/zref-vario.ins b/macros/latex/contrib/zref-vario/zref-vario.ins
new file mode 100644
index 0000000000..c04eb45c3e
--- /dev/null
+++ b/macros/latex/contrib/zref-vario/zref-vario.ins
@@ -0,0 +1,94 @@
+% \iffalse meta-comment
+%
+% File: zref-vario.ins
+%
+% This file is part of the LaTeX package "zref-vario".
+%
+% Copyright (C) 2022 Gustavo Barros
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file:
+%
+% https://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+%
+% This work is "maintained" (as per LPPL maintenance status) by
+% Gustavo Barros.
+%
+% This work consists of the files zref-vario.dtx,
+% zref-vario.ins,
+% zref-vario.tex,
+% zref-vario-code.tex,
+% and the files listed in MANIFEST.md.
+%
+% The released version of this package is available from CTAN.
+%
+% -----------------------------------------------------------------------
+%
+% The development version of the package can be found at
+%
+% https://github.com/gusbrs/zref-vario
+%
+% for those people who are interested.
+%
+% -----------------------------------------------------------------------
+%
+% \fi
+
+\input l3docstrip.tex
+
+\keepsilent
+
+\askforoverwritefalse
+
+\preamble
+
+This file was generated from file(s) of the LaTeX package "zref-vario".
+
+Copyright (C) 2022 Gustavo Barros
+
+It may be distributed and/or modified under the conditions of the
+LaTeX Project Public License (LPPL), either version 1.3c of this
+license or (at your option) any later version. The latest version
+of this license is in the file:
+
+ https://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+
+This work is "maintained" (as per LPPL maintenance status) by
+ Gustavo Barros.
+
+This work consists of the files zref-vario.dtx,
+ zref-vario.ins,
+ zref-vario.tex,
+ zref-vario-code.tex,
+ and the files listed in MANIFEST.md.
+
+The released version of this package is available from CTAN.
+
+-----------------------------------------------------------------------
+
+The development version of the package can be found at
+
+ https://github.com/gusbrs/zref-vario
+
+for those people who are interested.
+
+-----------------------------------------------------------------------
+
+\endpreamble
+
+\postamble
+\endpostamble
+
+\generate{\file{zref-vario.sty}{\from{zref-vario.dtx}{package}}}
+
+\endbatchfile
diff --git a/macros/latex/contrib/zref-vario/zref-vario.pdf b/macros/latex/contrib/zref-vario/zref-vario.pdf
new file mode 100644
index 0000000000..8ff1c89bca
--- /dev/null
+++ b/macros/latex/contrib/zref-vario/zref-vario.pdf
Binary files differ
diff --git a/macros/latex/contrib/zref-vario/zref-vario.tex b/macros/latex/contrib/zref-vario/zref-vario.tex
new file mode 100644
index 0000000000..522e46a207
--- /dev/null
+++ b/macros/latex/contrib/zref-vario/zref-vario.tex
@@ -0,0 +1,261 @@
+% \iffalse meta-comment
+%
+% File: zref-vario.tex
+%
+% This file is part of the LaTeX package "zref-vario".
+%
+% Copyright (C) 2022 Gustavo Barros
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file:
+%
+% https://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+%
+% This work is "maintained" (as per LPPL maintenance status) by
+% Gustavo Barros.
+%
+% This work consists of the files zref-vario.dtx,
+% zref-vario.ins,
+% zref-vario.tex,
+% zref-vario-code.tex,
+% and the files listed in MANIFEST.md.
+%
+% The released version of this package is available from CTAN.
+%
+% -----------------------------------------------------------------------
+%
+% The development version of the package can be found at
+%
+% https://github.com/gusbrs/zref-vario
+%
+% for those people who are interested.
+%
+% -----------------------------------------------------------------------
+%
+% \fi
+
+\documentclass{l3doc}
+
+% The package itself *must* be loaded so that \GetFileInfo can pick up date
+% and version data.
+\usepackage{zref-vario}
+
+\usepackage[T1]{fontenc}
+
+\usepackage[sc]{mathpazo}
+\linespread{1.05}
+\usepackage[scale=.88]{tgheros} % sans
+\usepackage[varqu,scaled=1.03]{inconsolata} % tt
+
+\usepackage{listings}
+
+\usepackage{microtype}
+
+\hypersetup{hidelinks}
+
+\NewDocumentCommand\opt{m}{\texttt{#1}}
+
+\lstdefinestyle{code}{
+ language=[LaTeX]TeX,
+ % moretexcs={
+ % }
+}
+\lstdefinestyle{zrefvario}{
+ style=code,
+ % moretexcs={
+ % }
+}
+\lstset{
+ style=zrefvario,
+ basicstyle=\ttfamily\small,
+ columns=fullflexible,
+ keepspaces,
+ xleftmargin=\leftmargin,
+ xrightmargin=.5\leftmargin,
+}
+\lstnewenvironment{zvexample}[1][]{%
+ \renewcommand{\lstlistingname}{Example}%
+ \lstset{#1}%
+}{}
+
+\begin{document}
+
+\GetFileInfo{zref-vario.sty}
+
+\title{%
+ The \pkg{zref-vario} package%
+ \thanks{This file describes \fileversion, released \filedate.}%
+ \texorpdfstring{\\{}\medskip{}}{ - }%
+ User manual%
+ \texorpdfstring{\medskip{}}{}%
+}
+
+\author{%
+ Gustavo Barros%
+ \thanks{\url{https://github.com/gusbrs/zref-vario}}%
+}
+
+\date{\filedate}
+
+\maketitle
+
+\begin{center}
+ {\bfseries \abstractname\vspace{-.5em}\vspace{0pt}}
+\end{center}
+
+\begin{quotation}
+ \pkg{zref-vario} offers a compatibility layer for \pkg{varioref} to be used
+ alongside \pkg{zref-clever}. It provides ``\texttt{\cs{z}}\dots{}''
+ counterparts to \pkg{varioref}'s main reference commands, each of which
+ essentially does some (scoped) setup for \pkg{varioref}, then calls the
+ original one.
+\end{quotation}
+
+\bigskip{}
+
+\begin{center}
+ \textbf{EXPERIMENTAL}
+\end{center}
+
+\tableofcontents
+
+\clearpage{}
+
+\section{Loading the package}
+
+As usual:
+
+\begin{zvexample}
+\usepackage{zref-vario}
+\end{zvexample}
+
+
+\section{Dependencies}
+
+\pkg{zref-vario} requires \pkg{varioref} and \pkg{zref-clever}.
+
+
+\section{User interface}
+
+\begin{function}{\zvref}
+ \begin{syntax}
+ \cs{zvref}\meta{*}\oarg{options}\marg{label}
+ \end{syntax}
+\end{function}
+
+\begin{function}{\zvpageref}
+ \begin{syntax}
+ \cs{zvpageref}\meta{*}\oarg{options}\marg{label}
+ \end{syntax}
+\end{function}
+
+\begin{function}{\zvrefrange}
+ \begin{syntax}
+ \cs{zvrefrange}\meta{*}\oarg{options}\marg{label}\marg{label}
+ \end{syntax}
+\end{function}
+
+\begin{function}{\zvpagerefrange}
+ \begin{syntax}
+ \cs{zvpagerefrange}\meta{*}\oarg{options}\marg{label}\marg{label}
+ \end{syntax}
+\end{function}
+
+\begin{function}{\zfullref}
+ \begin{syntax}
+ \cs{zfullref}\meta{*}\oarg{options}\marg{label}
+ \end{syntax}
+\end{function}
+
+These user commands work pretty much as their \pkg{varioref}
+counterparts.\footnote{If you are not acquainted with them, see
+ \pkg{varioref}'s documentation.} Indeed, they are just wrappers around
+them. As such, differently from \pkg{zref-clever}'s commands, these can
+receive single labels as arguments, not lists of them. In all of them the
+starred version inhibits hyperlinking, and they (locally) set \pkg{varioref}'s
+\opt{nospace} option, so that the this syntax can be used unambiguously.
+
+All of them have a single optional argument, which can receive any of
+\cs{zcref}'s options, and those are set for calls to \cs{zcref} or
+\cs{zpageref} which are part of the building blocks of the reference formats
+and strings set for \pkg{varioref}. However, there is indeed some potential
+friction and caveats stemming from the use of these options, which were
+designed to work for single calls of \cs{zcref}, to apply to \emph{pairs} of
+them. Hence, whether each and every of these options is meaningful, useful,
+or potentially harmful in this context depends on the case, and it is up to
+the user to make proper use of them. Of course, one can always split the pair
+using \cs{zcref} and then \cs{zvpageref}, \cs{zvpagerefrange}, or
+\cs{zcpageref}, and have more control over each part. Anyway, the package
+does what it says: passes the options along to the underlying call(s) to
+\cs{zcref}.\footnote{Note that the options given to each call of these user
+ macros are set \emph{before} the call to the original \pkg{varioref}
+ counterpart. This means that options given to \cs{zcref} or \cs{zpageref}
+ in the strings and formats in \cs{zvLanguageSetup} will have precedence over
+ the former. Which is useful, so that we can distinguish to some degree the
+ first from the second call of \cs{zcref}/\cs{zpageref} done in the formats,
+ but does not eliminate the limitations which arise from the underlying
+ problem.}
+
+Besides these options, two other are provided corresponding to
+\pkg{varioref}'s commands' optional arguments: \opt{vcurrent} (the first
+optional argument) and \opt{vother} (the second optional argument). Of
+course, these are only available when the underlying \pkg{varioref} command
+supports them.
+
+\section{Customization}
+
+
+\begin{function}{\zvLanguageSetup}
+ \begin{syntax}
+ \cs{zvLanguageSetup}\marg{language}\marg{options}
+ \end{syntax}
+\end{function}
+
+User interface for customization of ``strings'' and ``formats'' for
+\meta{language}. \meta{language} must be known to \pkg{zref-clever}. The
+\meta{options} are familiar to users of \pkg{varioref}:
+\opt{reftextfaceafter}, \opt{reftextfacebefore}, \opt{reftextafter},
+\opt{reftextbefore}, \opt{reftextcurrent}, \opt{reftextfaraway},
+\opt{reftextpagerange}, \opt{reftextlabelrange}, \opt{vrefformat},
+\opt{vrefrangeformat}, and \opt{fullrefformat}.\footnote{For details, see
+ \pkg{varioref}'s documentation.} Their meaning is the same as the ones they
+have in \pkg{varioref} and, indeed, they work by setting those \pkg{varioref}
+macros to the values given to the corresponding options in
+\cs{zvLanguageSetup}. If you are setting up a language which has no built-in
+support, you should set at least the whole set of ``\texttt{reftext}\dots{}''
+options. Language independent default values are provided for the
+``\dots{}\texttt{format}'' options (equivalent to the ones from
+\pkg{varioref}, which are adequate to most use cases), so you may omit them.
+But, if you need to adjust them, the default values can be overridden by
+setting the corresponding options in \cs{zvLanguageSetup}.
+
+
+% \section{Acknowledgments}
+%
+% A number of people have contributed to \pkg{zref-vario}. Suggestions,
+% ideas, solutions to problems, bug reports or even encouragement were
+% generously provided by (in chronological order):
+%
+% The package's language settings have been provided or improved thanks to:
+%
+% If I have inadvertently left anyone off the list I apologize, and please let
+% me know, so that I can correct the oversight.
+%
+% Thank you all very much!
+
+
+\section{Change history}
+
+A change log with relevant changes for each version, eventual upgrade
+instructions, and upcoming changes, is maintained in the package's repository,
+at \url{https://github.com/gusbrs/zref-vario/blob/main/CHANGELOG.md}. An
+archive of historical versions of the package is also kept at
+\url{https://github.com/gusbrs/zref-vario/releases}.
+
+\end{document}
diff --git a/macros/luatex/generic/lua-widow-control/README.md b/macros/luatex/generic/lua-widow-control/README.md
index 6e467d96ff..2486ba110a 100644
--- a/macros/luatex/generic/lua-widow-control/README.md
+++ b/macros/luatex/generic/lua-widow-control/README.md
@@ -42,4 +42,4 @@ Lua-widow-control is licensed under the [_Mozilla Public License_, version 2.0](
Please note that a compiled document is absolutely **not** considered to be an "Executable Form" as defined by the MPL. The use of lua-widow-control in a document does not place **any** obligations on the document's author or distributors. The MPL and CC-BY-SA licenses **only** apply to you if you distribute the lua-widow-control source code or documentation.
---
-_v1.1.2 (2021-12-14)_ <!--%%version %%date-->
+_v1.1.3 (2022-01-30)_ <!--%%version %%date-->
diff --git a/macros/luatex/generic/lua-widow-control/lua-widow-control.lua b/macros/luatex/generic/lua-widow-control/lua-widow-control.lua
index dd488f3bd2..56fa77e991 100644
--- a/macros/luatex/generic/lua-widow-control/lua-widow-control.lua
+++ b/macros/luatex/generic/lua-widow-control/lua-widow-control.lua
@@ -65,8 +65,8 @@ if lwc.context then
elseif lwc.plain or lwc.latex then
luatexbase.provides_module {
name = lwc.name,
- date = "2021/12/14", --%%date
- version = "1.1.2", --%%version
+ date = "2022/01/30", --%%date
+ version = "1.1.3", --%%version
description = [[
This module provides a LuaTeX-based solution to prevent
diff --git a/macros/luatex/generic/lua-widow-control/lua-widow-control.pdf b/macros/luatex/generic/lua-widow-control/lua-widow-control.pdf
index d8c7777e88..2a8f319bbf 100644
--- a/macros/luatex/generic/lua-widow-control/lua-widow-control.pdf
+++ b/macros/luatex/generic/lua-widow-control/lua-widow-control.pdf
Binary files differ
diff --git a/macros/luatex/generic/lua-widow-control/lua-widow-control.sty b/macros/luatex/generic/lua-widow-control/lua-widow-control.sty
index 0b4826dc5e..31d58237f6 100644
--- a/macros/luatex/generic/lua-widow-control/lua-widow-control.sty
+++ b/macros/luatex/generic/lua-widow-control/lua-widow-control.sty
@@ -5,17 +5,17 @@
\NeedsTeXFormat{LaTeX2e}[2015/01/01] % Formats built after 2015 include \LuaTeX{}Base
\ProvidesPackage{lua-widow-control}%
- [2021/12/14 v1.1.2] %%version %%date
+ [2022/01/30 v1.1.3] %%version %%date
-\setlength{\clubpenalty}{1}
-\setlength{\widowpenalty}{1}
-\setlength{\displaywidowpenalty}{0}
-\setlength{\interlinepenalty}{0}
-\setlength{\brokenpenalty}{0}
+\clubpenalty=1
+\widowpenalty=1
+\displaywidowpenalty=0
+\interlinepenalty=0
+\brokenpenalty=0
% We can't use \\newlength since that makes a \TeX{} "skip", not a "dimen"
\newdimen\lwcemergencystretch
-\setlength{\lwcemergencystretch}{3em}
+\lwcemergencystretch=3em
\directlua{require "lua-widow-control"}
diff --git a/macros/luatex/generic/lua-widow-control/lua-widow-control.tex b/macros/luatex/generic/lua-widow-control/lua-widow-control.tex
index 715652186e..eb2c1a070b 100644
--- a/macros/luatex/generic/lua-widow-control/lua-widow-control.tex
+++ b/macros/luatex/generic/lua-widow-control/lua-widow-control.tex
@@ -3,7 +3,7 @@
% SPDX-License-Identifier: MPL-2.0+
% SPDX-FileCopyrightText: 2021 Max Chernoff
-\wlog{lua-widow-control v1.1.2} %%version
+\wlog{lua-widow-control v1.1.3} %%version
\input ltluatex % \LuaTeX{}Base
diff --git a/macros/luatex/generic/lua-widow-control/lwc-documentation.tex b/macros/luatex/generic/lua-widow-control/lwc-documentation.tex
index 689fcda643..78ae260794 100644
--- a/macros/luatex/generic/lua-widow-control/lwc-documentation.tex
+++ b/macros/luatex/generic/lua-widow-control/lwc-documentation.tex
@@ -37,7 +37,7 @@
\startdocument[
title=lua-widow-control,
author=Max Chernoff,
- version=1.1.2, %%version
+ version=1.1.3, %%version
github=https://github.com/gucci-on-fleek/lua-widow-control,
ctan=https://www.ctan.org/pkg/lua-widow-control,
]
diff --git a/macros/luatex/generic/lua-widow-control/t-lua-widow-control.mkxl b/macros/luatex/generic/lua-widow-control/t-lua-widow-control.mkxl
index 90ede02913..85b1e340b6 100644
--- a/macros/luatex/generic/lua-widow-control/t-lua-widow-control.mkxl
+++ b/macros/luatex/generic/lua-widow-control/t-lua-widow-control.mkxl
@@ -1,10 +1,10 @@
%D \module
%D [ file=t-lua-widow-control,
-%D version=1.1.2, %%version
+%D version=1.1.3, %%version
%D title=lua-widow-control,
%D subtitle=\ConTeXt module for lua-widow-control,
%D author=Max Chernoff,
-%D date=2021-12-14, %%date
+%D date=2022-01-30, %%date
%D copyright=Max Chernoff,
%D license=MPL-2.0+,
%D url=https://github.com/gucci-on-fleek/lua-widow-control]
diff --git a/macros/luatex/latex/autopuncitems/autopuncitems.lua b/macros/luatex/latex/autopuncitems/autopuncitems.lua
index fc0a4b38b5..07b68e3ed4 100644
--- a/macros/luatex/latex/autopuncitems/autopuncitems.lua
+++ b/macros/luatex/latex/autopuncitems/autopuncitems.lua
@@ -1,5 +1,5 @@
--% Kale Ewasiuk (kalekje@gmail.com)
---% 2022-01-18
+--% 2022-01-30
--% Copyright (C) 2021-2022 Kale Ewasiuk
--%
--% Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -41,6 +41,7 @@ ap.pass = '\\APpass' -- flag for passing item from punc, but still considered in
ap.code = 0 -- code for skipping punc if > 0, keep in count if == 1, omit from count if == 2
ap.autopassnested = true
+ap.skipnextprot = false
function ap.start(s)
ap.curr = 0
@@ -70,6 +71,8 @@ function ap.getdelim()
return d
end
+
+
function ap.protectnest(s)
local x = ''
if ap.autopassnested then x = ap.pass..'{}' end
@@ -88,12 +91,16 @@ end
function ap.go(s)
- s = ap.protectnest(s)
+ if ap.skipnextprot then
+ s = s:gsub(ap.item, ap.itemp)
+ else
+ s = ap.protectnest(s)
+ end
ap.start(s) -- start counters
--texio.write_nl('yooo...'..s)
s = s:gsub(ap.itemp, '\0\0'):gsub('\0', '', 1) -- make all items \0\0 then change first item to one \0
s = s:gsub('(%z)(%Z*)(%z?)', -- find betwen \0 .. \0
- function(it, s, _it) -- discarding duplicate item '_it' that was made in first gsub
+ function(it, s) -- discarding duplicate item '_it' that was made in first gsub
ap.addcount(s) -- add count, helps determine delimiter
return ap.rtrim(it..s)..ap.getdelim()..' '
end
diff --git a/macros/luatex/latex/autopuncitems/autopuncitems.pdf b/macros/luatex/latex/autopuncitems/autopuncitems.pdf
index d2a5da00ed..c377b41f50 100644
--- a/macros/luatex/latex/autopuncitems/autopuncitems.pdf
+++ b/macros/luatex/latex/autopuncitems/autopuncitems.pdf
Binary files differ
diff --git a/macros/luatex/latex/autopuncitems/autopuncitems.sty b/macros/luatex/latex/autopuncitems/autopuncitems.sty
index 81c3f2dd6c..11a4c66f69 100644
--- a/macros/luatex/latex/autopuncitems/autopuncitems.sty
+++ b/macros/luatex/latex/autopuncitems/autopuncitems.sty
@@ -1,5 +1,5 @@
% Kale Ewasiuk (kalekje@gmail.com)
-% 2022-01-18
+% 2022-01-30
% Copyright (C) 2021-2022 Kale Ewasiuk
%
% Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -23,7 +23,7 @@
% OR OTHER DEALINGS IN THE SOFTWARE.
-\ProvidesPackage{autopuncitems}[2022-01-18]
+\ProvidesPackage{autopuncitems}[2022-01-30]
\RequirePackage{luacode}
\RequirePackage{etoolbox}
@@ -40,6 +40,8 @@
\newcommand{\disableAPautopassnest}{\luadirect{autopuncitems.autopassnested = false}}
\newcommand{\enableAPautopassnest}{\luadirect{autopuncitems.autopassnested = true}}
+\newcommand{\disableAPprotectnest}{\luadirect{autopuncitems.skipnextprot = true}}
+\newcommand{\enableAPprotectnest}{\luadirect{autopuncitems.skipnextprot = false}}
\NewDocumentCommand{\setAPeach}{m m m}{\setAPdef{#1}\setAPseclast{#2}\setAPlast{#3}} % set each one, default, second last, last
\NewDocumentCommand{\setAPall}{m}{\setAPdef{#1}\setAPseclast{#1}\setAPlast{#1}} % set all the same
diff --git a/macros/luatex/latex/autopuncitems/autopuncitems.tex b/macros/luatex/latex/autopuncitems/autopuncitems.tex
index 06f3f5e9be..e30c85e26f 100644
--- a/macros/luatex/latex/autopuncitems/autopuncitems.tex
+++ b/macros/luatex/latex/autopuncitems/autopuncitems.tex
@@ -1,5 +1,5 @@
% Kale Ewasiuk (kalekje@gmail.com)
-% 2022-01-18
+% 2022-01-30
% Copyright (C) 2021-2022 Kale Ewasiuk
%
% Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -62,7 +62,6 @@
\begin{document}
\maketitle
-{\Huge TODO make an environment that can be used outside of itemize, useful for beamer possibly}
\section{Introduction}
This package provides environments \cmd{AutoPuncItemize}, \cmd{AutoPuncItemizeO}, and \cmd{AutoPuncItemizeE} (beta)
@@ -209,5 +208,38 @@ If you disable auto-pass nested lists, and don't use \cmd{\APpass}, here is what
\end{itemize}
\end{LTXexample}
+You may want to use the \cmd{AutoPuncItems} environment outside a list environment instead,
+say perhaps if you're using the \cmd{beamer}.
+Note that nested lists are normally not punctuated, and since the first-level list is inside the environment, it's considered nested.
+If you would like to disable the prevention of auto-punctuating all nested lists, use the \cmd{\disableAPprotectnest}.
+Note that nested lists will cause an error to occur.
+
+\begin{LTXexample}
+\disableAPprotectnest
+\begin{AutoPuncItems}
+\begin{itemize}
+ \item one
+ \item two
+ \item three
+ \item four
+\end{itemize}
+\end{AutoPuncItems}
+\end{LTXexample}
+
+The normal way to use the environment should be inside the first list, like so.
+
+\begin{LTXexample}
+\enableAPautopassnest % default settn
+\begin{itemize}
+\begin{AutoPuncItems}
+ \item one
+ \item two
+ \item three
+ \item four
+\end{AutoPuncItems}
+\end{itemize}
+\end{LTXexample}
+
+
\end{document}
diff --git a/macros/unicodetex/latex/fontsetup/README b/macros/unicodetex/latex/fontsetup/README
index 99b7a63e0b..bd550fab77 100644
--- a/macros/unicodetex/latex/fontsetup/README
+++ b/macros/unicodetex/latex/fontsetup/README
@@ -1,5 +1,5 @@
The fontsetup package
- (Version 1.1, GPL3)
+ (Version 1.2, GPL3)
This simple package makes it trivial to switch quickly between
different quality fonts supporting Mathematics.
diff --git a/macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.pdf b/macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.pdf
index 676ec08813..f98b8938b2 100644
--- a/macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.pdf
+++ b/macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.tex b/macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.tex
index 49b7904ca2..a8abebd240 100644
--- a/macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.tex
+++ b/macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.tex
@@ -14,8 +14,8 @@
\textit{by}\\[1ex]
{\large Antonis Tsolomitis}\\
University of the Aegean\\ Department of Mathematics\\[1ex]
- \textsc{9} Dec \textsc{2021}\\[1ex]
- Version 1.1, \textsc{gpl3}
+ \textsc{31} Jan \textsc{2022}\\[1ex]
+ Version 1.2, \textsc{gpl3}
\end{center}
This package is a simple wrapper-type package that makes the setup of fonts easy and
@@ -96,6 +96,8 @@ NewComputerModern font family.
as a system font (in \verb|C:\Windows\Fonts| in MS-Windows, in \verb|/home/user/.fonts/| in Linux
or elsewhere by the system administratior). This option works only if
fontsetup-nonfree is installed.
+ \item[concrete] Loads the Concrete fonts from the \texttt{cmu} package with Concrete-Math
+ font for mathematics.
\item[ebgaramond] Loads the EB-Garamond fonts with Garamond-Math.
\item[fira] Loads the Fira family, a sans-serif font.
\item[gfsartemisia] Loads the GFSArtemisia, a font family designed to be used
@@ -136,7 +138,8 @@ NewComputerModern font family.
system-installed to allow access to Greek small caps.
Mathematics font is texgyrepagella-math. This option works only if
fontsetup-nonfree is installed.
- \item[stixtwo] Loads the stix2 fonts, a Times-type font.
+ \item[stixtwo] Loads the stix2 fonts, a Times-type font.
+ \item[talos] Loads the NewCM Book weight with the Greek cult font Talos.
\item[times] Loads the FreeSerifb fonts, a Times font and stix2 for Mathematics
with letters replaced from FreeSerifb.
\end{description}
@@ -198,6 +201,11 @@ Samples for the free fonts follow. Samples for the nonfree fonts can be found in
\end{center}
\newpage
+\begin{center}
+{\Large Concrete fonts: option \verb|concrete|}\\[1cm]
+\includegraphics[scale=1.2]{fspsample-concrete.pdf}
+\end{center}
+\newpage
\begin{center}
{\Large EB-Garamond and Garamond-Math fonts: option \verb|ebgaramond|}\\[1cm]
@@ -277,10 +285,20 @@ NeoEuler font must be installed in TeX tree\\[1cm]
\newpage
\begin{center}
+{\Large Talos and NewCMMath-Book: option \verb|talos|}\\[1cm]
+\includegraphics[scale=1.2]{fspsample-talos.pdf}
+\end{center}
+
+
+\newpage
+
+\begin{center}
{\Large FreeSerifb and Stix2Math: option \verb|times|}\\[1cm]
\includegraphics[scale=1.2]{fspsample-times.pdf}
\end{center}
+
+
\appendix
\chapter{Ancient Greek Numbers}
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample-concrete.pdf b/macros/unicodetex/latex/fontsetup/doc/fspsample-concrete.pdf
new file mode 100644
index 0000000000..577d069a55
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample-concrete.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample-talos.pdf b/macros/unicodetex/latex/fontsetup/doc/fspsample-talos.pdf
new file mode 100644
index 0000000000..384b5ee71e
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample-talos.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample.tex b/macros/unicodetex/latex/fontsetup/doc/fspsample.tex
index 23ec736e02..188ccf5a5e 100644
--- a/macros/unicodetex/latex/fontsetup/doc/fspsample.tex
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample.tex
@@ -28,6 +28,8 @@
%\usepackage[neoeuler]{fontsetup}
%\usepackage[libertinus]{fontsetup}
%\usepackage[olddefault]{fontsetup}
+%\usepackage[concrete]{fontsetup}
+%\usepackage[talos]{fontsetup}
diff --git a/macros/unicodetex/latex/fontsetup/fontsetup.sty b/macros/unicodetex/latex/fontsetup/fontsetup.sty
index f8bf12c516..9fbafedcc9 100644
--- a/macros/unicodetex/latex/fontsetup/fontsetup.sty
+++ b/macros/unicodetex/latex/fontsetup/fontsetup.sty
@@ -30,6 +30,8 @@
\chardef\fontsetupneoeuler=16
\chardef\fontsetuplibertinus=17
\chardef\fontsetupolddefault=18 % old (thin) CMR
+\chardef\fontsetupconcrete=19
+\chardef\fontsetuptalos=20
\chardef\fontsetupfont\fontsetupdefault
\DeclareOption{default}{\chardef\fontsetupfont\fontsetupdefault}
@@ -51,6 +53,8 @@
\DeclareOption{neoeuler}{\chardef\fontsetupfont\fontsetupneoeuler}
\DeclareOption{libertinus}{\chardef\fontsetupfont\fontsetuplibertinus}
\DeclareOption{olddefault}{\chardef\fontsetupfont\fontsetupolddefault}
+\DeclareOption{concrete}{\chardef\fontsetupfont\fontsetupconcrete}
+\DeclareOption{talos}{\chardef\fontsetupfont\fontsetuptalos}
\DeclareOption*{\PackageWarning{fontsetup}{Unknown ‘\CurrentOption’}}
%
\newif\if@upint
@@ -143,6 +147,13 @@
\setmathfont{NewCMMath-Regular.otf}
\fi
\fi
+\or
+ \RequirePackage{fspconcrete}
+\or
+ \RequirePackage{fsptalos}
+%%%
+%
+%%%
\fi
}{%the user runs 8bit engine
\relax}
diff --git a/macros/unicodetex/latex/fontsetup/fspconcrete.sty b/macros/unicodetex/latex/fontsetup/fspconcrete.sty
new file mode 100644
index 0000000000..45549174b7
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/fspconcrete.sty
@@ -0,0 +1,33 @@
+\RequirePackage{fontspec}
+\defaultfontfeatures{Ligatures=TeX}
+
+\setmainfont[%
+BoldFont=cmunobx.otf,%
+ItalicFont=cmunoti.otf,%
+BoldItalicFont=cmunobi.otf%
+]{cmunorm.otf}
+
+\setsansfont[%
+ItalicFont=NewCMSans10-BookOblique.otf,%
+BoldFont=NewCMSans10-Bold.otf,%
+BoldItalicFont=NewCMSans10-BoldOblique.otf,%
+SmallCapsFeatures={Numbers=OldStyle},%
+SlantedFont=NewCMSans10-BookOblique.otf,%
+BoldSlantedFont=NewCMSans10-BoldOblique.otf,%
+]{NewCMSans10-Book.otf}
+
+\setmonofont[%
+ItalicFont=NewCMMono10-BookItalic.otf,%
+BoldFont=NewCMMono10-Bold.otf,%
+BoldItalicFont=NewCMMono10-BoldOblique.otf,%
+SlantedFont=NewCMMono10-Book.otf,%
+SlantedFeatures={FakeSlant=0.25},
+BoldSlantedFont=NewCMMono10-Bold.otf,%
+BoldSlantedFeatures={FakeSlant=0.25},
+SmallCapsFeatures={Numbers=OldStyle}]{NewCMMono10-Book.otf}
+
+
+\RequirePackage{unicode-math}
+\setmathfont{Concrete-Math.otf}
+
+\endinput
diff --git a/macros/unicodetex/latex/fontsetup/fsptalos.sty b/macros/unicodetex/latex/fontsetup/fsptalos.sty
new file mode 100644
index 0000000000..40e5b2809f
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/fsptalos.sty
@@ -0,0 +1,33 @@
+\RequirePackage{fontspec}
+\defaultfontfeatures{Ligatures=TeX}
+
+\setmainfont[%
+BoldFont=Talos-Bold.otf,%
+ItalicFont=Talos-Italic.otf,%
+BoldItalicFont=Talos-BoldItalic.otf%
+]{Talos-Regular.otf}
+
+\setsansfont[%
+ItalicFont=NewCMSans10-BookOblique.otf,%
+BoldFont=NewCMSans10-Bold.otf,%
+BoldItalicFont=NewCMSans10-BoldOblique.otf,%
+SmallCapsFeatures={Numbers=OldStyle},%
+SlantedFont=NewCMSans10-BookOblique.otf,%
+BoldSlantedFont=NewCMSans10-BoldOblique.otf,%
+]{NewCMSans10-Book.otf}
+
+\setmonofont[%
+ItalicFont=NewCMMono10-BookItalic.otf,%
+BoldFont=NewCMMono10-Bold.otf,%
+BoldItalicFont=NewCMMono10-BoldOblique.otf,%
+SlantedFont=NewCMMono10-Book.otf,%
+SlantedFeatures={FakeSlant=0.25},
+BoldSlantedFont=NewCMMono10-Bold.otf,%
+BoldSlantedFeatures={FakeSlant=0.25},
+SmallCapsFeatures={Numbers=OldStyle}]{NewCMMono10-Book.otf}
+
+
+\RequirePackage{unicode-math}
+\setmathfont{NewCMMath-Book.otf}
+
+\endinput