summaryrefslogtreecommitdiff
path: root/macros
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2024-01-06 03:01:33 +0000
committerNorbert Preining <norbert@preining.info>2024-01-06 03:01:33 +0000
commit949a85bb8707bf1aaa2b23b018e24d5001d38e52 (patch)
treec5af6ca7487e0e439195d0308276267088b67352 /macros
parent387961768f65ec00d171b3781d4b87ea94bb19f5 (diff)
CTAN sync 202401060301
Diffstat (limited to 'macros')
-rw-r--r--macros/latex/contrib/easybook/easybook.dtx13
-rw-r--r--macros/latex/contrib/easybook/easybook.pdfbin589428 -> 590446 bytes
-rw-r--r--macros/latex/contrib/easybook/easybook.tex63
-rw-r--r--macros/latex/contrib/l3backend/CHANGELOG.md10
-rw-r--r--macros/latex/contrib/l3backend/README.md4
-rw-r--r--macros/latex/contrib/l3backend/l3backend-basics.dtx18
-rw-r--r--macros/latex/contrib/l3backend/l3backend-box.dtx16
-rw-r--r--macros/latex/contrib/l3backend/l3backend-code.pdfbin934856 -> 910529 bytes
-rw-r--r--macros/latex/contrib/l3backend/l3backend-color.dtx56
-rw-r--r--macros/latex/contrib/l3backend/l3backend-draw.dtx28
-rw-r--r--macros/latex/contrib/l3backend/l3backend-graphics.dtx24
-rw-r--r--macros/latex/contrib/l3backend/l3backend-header.dtx176
-rw-r--r--macros/latex/contrib/l3backend/l3backend-opacity.dtx26
-rw-r--r--macros/latex/contrib/l3backend/l3backend-pdf.dtx49
-rw-r--r--macros/latex/contrib/l3backend/l3backend.ins6
-rw-r--r--macros/latex/contrib/l3experimental/CHANGELOG.md12
-rw-r--r--macros/latex/contrib/l3experimental/README.md4
-rw-r--r--macros/latex/contrib/l3experimental/l3benchmark.dtx6
-rw-r--r--macros/latex/contrib/l3experimental/l3benchmark.ins4
-rw-r--r--macros/latex/contrib/l3experimental/l3benchmark.pdfbin308820 -> 308420 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-boxes.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-code.pdfbin682740 -> 684116 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-layers.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-paths.dtx114
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-points.dtx201
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-scopes.dtx6
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-softpath.dtx18
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-state.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-transforms.dtx60
-rw-r--r--macros/latex/contrib/l3experimental/l3draw.dtx21
-rw-r--r--macros/latex/contrib/l3experimental/l3draw.ins4
-rw-r--r--macros/latex/contrib/l3experimental/l3draw.pdfbin518932 -> 518609 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3galley.dtx46
-rw-r--r--macros/latex/contrib/l3experimental/l3galley.pdfbin409197 -> 408796 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3graphics.dtx16
-rw-r--r--macros/latex/contrib/l3experimental/l3graphics.ins4
-rw-r--r--macros/latex/contrib/l3experimental/l3graphics.pdfbin383921 -> 383526 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3opacity.dtx8
-rw-r--r--macros/latex/contrib/l3experimental/l3opacity.ins4
-rw-r--r--macros/latex/contrib/l3experimental/l3opacity.pdfbin313872 -> 313477 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3str-format.dtx8
-rw-r--r--macros/latex/contrib/l3experimental/l3str-format.pdfbin368314 -> 367974 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3str.ins4
-rw-r--r--macros/latex/contrib/l3experimental/l3sys-shell.dtx8
-rw-r--r--macros/latex/contrib/l3experimental/l3sys-shell.ins4
-rw-r--r--macros/latex/contrib/l3experimental/l3sys-shell.pdfbin348328 -> 347930 bytes
-rw-r--r--macros/latex/contrib/l3experimental/xcoffins.dtx14
-rw-r--r--macros/latex/contrib/l3experimental/xcoffins.ins4
-rw-r--r--macros/latex/contrib/l3experimental/xcoffins.pdfbin394766 -> 394367 bytes
-rw-r--r--macros/latex/contrib/l3experimental/xgalley.dtx10
-rw-r--r--macros/latex/contrib/l3experimental/xgalley.ins4
-rw-r--r--macros/latex/contrib/l3experimental/xgalley.pdfbin299916 -> 299509 bytes
-rw-r--r--macros/latex/contrib/l3kernel/CHANGELOG.md34
-rw-r--r--macros/latex/contrib/l3kernel/README.md5
-rw-r--r--macros/latex/contrib/l3kernel/expl3.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/expl3.pdfbin623156 -> 623018 bytes
-rw-r--r--macros/latex/contrib/l3kernel/interface3.pdfbin1774220 -> 1776647 bytes
-rw-r--r--macros/latex/contrib/l3kernel/interface3.tex4
-rw-r--r--macros/latex/contrib/l3kernel/l3.ins8
-rw-r--r--macros/latex/contrib/l3kernel/l3basics.dtx35
-rw-r--r--macros/latex/contrib/l3kernel/l3bitset.dtx172
-rw-r--r--macros/latex/contrib/l3kernel/l3bootstrap.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3box.dtx14
-rw-r--r--macros/latex/contrib/l3kernel/l3candidates.dtx34
-rw-r--r--macros/latex/contrib/l3kernel/l3cctab.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3clist.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3coffins.dtx34
-rw-r--r--macros/latex/contrib/l3kernel/l3color.dtx48
-rw-r--r--macros/latex/contrib/l3kernel/l3debug.dtx14
-rw-r--r--macros/latex/contrib/l3kernel/l3deprecation.dtx19
-rw-r--r--macros/latex/contrib/l3kernel/l3doc.dtx140
-rw-r--r--macros/latex/contrib/l3kernel/l3doc.pdfbin563591 -> 563777 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3docstrip.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3docstrip.pdfbin151750 -> 150985 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3expan.dtx8
-rw-r--r--macros/latex/contrib/l3kernel/l3file.dtx34
-rw-r--r--macros/latex/contrib/l3kernel/l3flag.dtx8
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-assign.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-aux.dtx8
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-basics.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-convert.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-expo.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-extended.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-functions.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-logic.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-parse.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-random.dtx16
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-round.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-symbolic.dtx10
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-traps.dtx14
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-trig.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-types.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/l3fp.dtx16
-rw-r--r--macros/latex/contrib/l3kernel/l3fparray.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3int.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3intarray.dtx8
-rw-r--r--macros/latex/contrib/l3kernel/l3kernel-functions.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3keys.dtx82
-rw-r--r--macros/latex/contrib/l3kernel/l3legacy.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3luatex.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3msg.dtx36
-rw-r--r--macros/latex/contrib/l3kernel/l3names.dtx10
-rw-r--r--macros/latex/contrib/l3kernel/l3news.pdfbin396222 -> 396222 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news01.pdfbin122959 -> 122959 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news02.pdfbin150919 -> 150919 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news03.pdfbin148747 -> 148747 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news04.pdfbin114754 -> 114754 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news05.pdfbin112524 -> 112524 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news06.pdfbin151591 -> 151591 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news07.pdfbin128344 -> 128344 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news08.pdfbin163484 -> 163484 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news09.pdfbin250159 -> 250159 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news10.pdfbin150302 -> 150302 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news11.pdfbin170102 -> 170102 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news12.pdfbin205020 -> 205020 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3pdf.dtx64
-rw-r--r--macros/latex/contrib/l3kernel/l3prefixes.csv4
-rw-r--r--macros/latex/contrib/l3kernel/l3prefixes.pdfbin82696 -> 82696 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3prg.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3prop.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3quark.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3regex.dtx16
-rw-r--r--macros/latex/contrib/l3kernel/l3seq.dtx14
-rw-r--r--macros/latex/contrib/l3kernel/l3skip.dtx10
-rw-r--r--macros/latex/contrib/l3kernel/l3sort.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3str-convert.dtx36
-rw-r--r--macros/latex/contrib/l3kernel/l3str.dtx14
-rw-r--r--macros/latex/contrib/l3kernel/l3styleguide.pdfbin296516 -> 296516 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3styleguide.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.pdfbin243162 -> 243162 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3sys.dtx10
-rw-r--r--macros/latex/contrib/l3kernel/l3term-glossary.pdfbin218315 -> 218315 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3term-glossary.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3text-case.dtx86
-rw-r--r--macros/latex/contrib/l3kernel/l3text-map.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3text-purify.dtx8
-rw-r--r--macros/latex/contrib/l3kernel/l3text.dtx38
-rw-r--r--macros/latex/contrib/l3kernel/l3tl-analysis.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3tl-build.dtx24
-rw-r--r--macros/latex/contrib/l3kernel/l3tl.dtx17
-rw-r--r--macros/latex/contrib/l3kernel/l3token.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3unicode.dtx76
-rw-r--r--macros/latex/contrib/l3kernel/source3.pdfbin7510840 -> 7514579 bytes
-rw-r--r--macros/latex/contrib/l3kernel/source3.tex4
-rw-r--r--macros/latex/contrib/lwarp/README.txt7
-rw-r--r--macros/latex/contrib/lwarp/lwarp.dtx2175
-rw-r--r--macros/latex/contrib/lwarp/lwarp.ins1
-rw-r--r--macros/latex/contrib/lwarp/lwarp.pdfbin3405893 -> 3442544 bytes
-rwxr-xr-xmacros/latex/contrib/lwarp/lwarpmk.lua4
-rw-r--r--macros/latex/contrib/morewrites/README.md18
-rw-r--r--macros/latex/contrib/morewrites/morewrites.dtx272
-rw-r--r--macros/latex/contrib/morewrites/morewrites.ins6
-rw-r--r--macros/latex/contrib/morewrites/morewrites.pdfbin715831 -> 748706 bytes
-rw-r--r--macros/latex/contrib/morewrites/primargs.dtx32
-rw-r--r--macros/latex/contrib/morewrites/primargs.pdfbin601061 -> 635774 bytes
-rw-r--r--macros/latex/contrib/unbtex/README.md8
-rw-r--r--macros/latex/contrib/unbtex/unbtex-example.pdfbin600842 -> 590243 bytes
-rw-r--r--macros/latex/contrib/unbtex/unbtex-example.tex26
-rw-r--r--macros/latex/contrib/unbtex/unbtex-example/anexo-a.tex3
-rw-r--r--macros/latex/contrib/unbtex/unbtex-example/anexo-b.tex11
-rw-r--r--macros/latex/contrib/unbtex/unbtex-example/capitulo2.tex15
-rw-r--r--macros/latex/contrib/unbtex/unbtex-example/capitulo3.tex4
-rw-r--r--macros/latex/contrib/unbtex/unbtex-example/codigos/blockdiagram.tex3
-rw-r--r--macros/latex/contrib/unbtex/unbtex-example/figuras/bodediagram.pdfbin38806 -> 38649 bytes
-rw-r--r--macros/latex/contrib/unbtex/unbtex-example/referencias.bib26
-rw-r--r--macros/latex/contrib/unbtex/unbtex.cls48
-rw-r--r--macros/latex/contrib/unravel/README.md3
-rw-r--r--macros/latex/contrib/unravel/unravel.dtx749
-rw-r--r--macros/latex/contrib/unravel/unravel.pdfbin880287 -> 908970 bytes
-rw-r--r--macros/luatex/latex/autotype/README4
-rw-r--r--macros/luatex/latex/autotype/autotype-de.pdfbin333903 -> 424355 bytes
-rw-r--r--macros/luatex/latex/autotype/autotype-de.tex590
-rw-r--r--macros/luatex/latex/autotype/autotype.lua28
-rw-r--r--macros/luatex/latex/autotype/autotype.sty4
175 files changed, 4129 insertions, 2395 deletions
diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx
index 17b0945a04..4dd844a0d3 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}{2024/01/04}{2024A}
+\ProvidesExplClass{easybook}{2024/01/05}{2024B}
{Easily typesetting Chinese theses or books}
\bool_set_false:N \l__eb_compile_draft_bool
@@ -397,7 +397,6 @@
\seq_map_function:NN
\l_tmpb_seq \eb_match_load_package:n
}
-\cs_gset_eq:NN \PackageWarning \PackageInfo
\msg_redirect_module:nnn { hooks } { warning } { info }
\bool_set_true:N \l__eb_class_mode_book_bool
@@ -1187,7 +1186,6 @@
}
\cs_new_protected:Npn \eb_fncustom_format_initial:
{
- % \ebhdrset{fntext-code = { }}
\bool_set_false:N \l__eb_normal_footnote_bool
\bool_if:NF \l__eb_fncustom_format_match_bool
{
@@ -1652,8 +1650,8 @@
{
biname .code:n = \ctex_assign_heading_name:nn { bichapter } {#1},
biname .initial:n = Chapter\space,
- binmuber .tl_set:N = \CTEX@bichapter@number,
- binmuber .initial:n = \arabic{chapter}
+ binumber .tl_set:N = \CTEX@bichapter@number,
+ binumber .initial:n = \arabic{chapter}
}
\cs_new_protected:Npn \eb_counter_zero:n #1
{ \eb_seq_map_inline:nn {#1} { \setcounter{##1}{0} } }
@@ -1805,8 +1803,6 @@
\skip_set:Nn \textfloatsep { 12pt plus 4pt minus 3pt }
\skip_set:Nn \dbltextfloatsep { 12pt plus 4pt minus 3pt }
\skip_set:Nn \multicolsep { 12pt plus 4pt minus 3pt }
-%% \int_gset:Nn \vbadness { 10000 }
-%% \int_gset:Nn \hbadness { 10000 }
\setcounter{topnumber}{4}
\setcounter{bottomnumber}{4}
\setcounter{totalnumber}{8}
@@ -2113,7 +2109,6 @@
{
breaklines = true,
resetmargins = true,
- % numbers = left,
numberstyle = \footnotesize,
basewidth = 0.5em,
columns = flexible,
@@ -2335,7 +2330,7 @@
}
%</package>
%<*tcolorbox>
-\ProvidesExplFile{eb-tcolorbox.cfg}{2024/01/04}{2024A}
+\ProvidesExplFile{eb-tcolorbox.cfg}{2024/01/05}{2024B}
{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 d6455ad028..953c8df90c 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 cb18b47540..e3c4306e2c 100644
--- a/macros/latex/contrib/easybook/easybook.tex
+++ b/macros/latex/contrib/easybook/easybook.tex
@@ -11,7 +11,7 @@
{
cs => violet,
option => Green,
- cnltx => MediumBlue,
+ cnltx => NavyBlue,
link => DeepPink,
module => FireBrick,
beginend => FireBrick,
@@ -23,8 +23,8 @@
name = easybook,
color-scheme = blue,
title = EASYBOOK使用手册,
- version = v2024A,
- date = 2024/01/04,
+ version = v2024B,
+ date = 2024/01/05,
authors = 瞿毅,
info = 简便地排版中文学位论文或书籍,
email = toquyi@163.com,
@@ -40,20 +40,20 @@
}
\KOMAoptions{numbers = noenddot}
\setfootnoterule[0.5pt]{0.4\columnwidth}
-\addtokomafont{headsepline}{\color{MediumBlue}}
-\addtokomafont{footnoterule}{\color{MediumBlue}}
+\addtokomafont{headsepline}{\color{NavyBlue}}
+\addtokomafont{footnoterule}{\color{NavyBlue}}
\addtokomafont{section}{\normalfont\sffamily}
\addtokomafont{subsection}{\normalfont\sffamily}
\addtokomafont{subsubsection}{\normalfont\sffamily}
\DeclareTOCStyleEntry[entryformat = \sffamily]{default}{section}
\DeclareFieldFormat[book]{title}{\textsf{#1}}
\geometry{margin = 1in,marginparwidth = 0.6in}
-\SetEnumitemValue{label}{smallbullet}{\small\color{MediumBlue}\textbullet}
+\SetEnumitemValue{label}{smallbullet}{\small\color{NavyBlue}\textbullet}
\setlist{nosep,topsep = \smallskipamount,labelsep = 0.5em}
\setlist[1]{labelindent = \parindent}
\setlist[itemize,1]{label = smallbullet,leftmargin = *}
\setcounter{tocdepth}{2}
-\SetTblrInner[talltblr]{hline{1,Z} = {0.8pt,blue}}
+\SetTblrInner[talltblr]{hline{1,Z} = {0.8pt,NavyBlue}}
\SetTblrTemplate{caption}{empty}
\DefTblrTemplate{remark-sep}{default}{\space}
\SetTblrStyle{remark}{font = \small\normalfont}
@@ -143,7 +143,7 @@
baselinestretch = 1.2,
gobble = 2,
fontsize = \small,
- rulecolor = \color{MediumBlue},
+ rulecolor = \color{NavyBlue},
framerule = 0.5pt,
frame = single,
framesep = 6pt
@@ -291,7 +291,7 @@
remark{\ding{72}} = \code{times*} 方案为 \textsf{windows} 系统的预置字体。
]{
colspec = @{}*{4}{c}@{},
- hline{2} = {0.5pt,blue},
+ hline{2} = {0.5pt,NavyBlue},
row{1} = {font = \sffamily},
column{1} = {cmd = \code}
}{
@@ -328,7 +328,7 @@
\insertalltblr
{
colspec = @{}*{5}{c}@{},
- hline{3} = {0.5pt,blue},
+ hline{3} = {0.5pt,NavyBlue},
row{1,3} = {font = \sffamily,belowsep = 0pt},
row{2,4} = {cmd = \module*}
}{
@@ -639,8 +639,8 @@
标题标记命令 \cs*{sectionmark} 的内容,包括了标签选项 \option{sec-label} 的内容。
\keyval{subsec-mark}{标题标记}
标题标记命令 \cs*{subsectionmark} 的内容,包括了标签选项 \option{subsec-label} 的内容。
- \kvsplit-{chap-label}{\oarg{数字输出命令}\marg{距离命令}}\Default{\cs*{hspace}\Marg{1em}}
- 标题标记命令 \cs*{chaptermark} 内容的标签(标题有编号时)。比标题标记选项更常用,可选参数是对应于章节编号计数器的输出命令,必选参数是编号与标题之间的距离命令:
+ \kvsplit-{chap-label}{\oarg{编号输出命令}\marg{距离命令}}\Default{\cs*{hspace}\Marg{1em}}
+ 标题标记命令 \cs*{chaptermark} 内容的标签(标题有编号时)。比标题标记选项更常用,可选参数是对应章编号计数器值的输出命令,必选参数是编号与标题之间的距离命令:
\begin{ctexexam}
\ebhdrset
{
@@ -648,9 +648,9 @@
sec-mark = \CTEXifname{\CTEXthesection——}{}#1
}
\end{ctexexam}
- \kvsplit-{sec-label}{\oarg{数字输出命令}\marg{距离命令}}\Default{\cs*{hspace}\Marg{0.5em}}
+ \kvsplit-{sec-label}{\oarg{编号输出命令}\marg{距离命令}}\Default{\cs*{hspace}\Marg{0.5em}}
标题标记命令 \cs*{sectionmark} 内容的标签,用法与 \option{chap-label} 类似。
- \kvsplit-{subsec-label}{\oarg{数字输出命令}\marg{距离命令}}\Default{\cs*{hspace}\Marg{0.5em}}
+ \kvsplit-{subsec-label}{\oarg{编号输出命令}\marg{距离命令}}\Default{\cs*{hspace}\Marg{0.5em}}
标题标记命令内容 \cs*{subsectionmark} 的标签,用法与 \option{chap-label} 类似。
\keyval{headrule}{横线命令}
绘制页眉横线的选项,可以使用 \cs*{hrule} 或下述 \cs{markrule} 等画线命令来绘制横线。
@@ -708,7 +708,7 @@
\keychoice{fnmark-num}{plain,pifont,pifont*,pisans,pisans*,short num}\Default{plain}
脚注正文标记编号的类型。默认为原生样式 \code{plain},还可以改为 \code{pifont} 的各个版本,从左往右依次为普通版、阴文衬线版、阳文无衬线版和阴文无衬线版,缺点是它们的编号仅包括1-10。
- 短编号的形式与列表环境类似,不过增加了中文数字 \code{c} 和符号 \code{s} 格式参数。原生样式 \code{plain} 等同于单独使用数字 \code{1} 参数。这个选项可以用在正文中改变其后脚注编号类型。
+ 短编号的参数与列表环境类似,有1、A、a、I和i,除此之外还增加了中文数字 \code{c} 和符号 \code{s} 格式。原生样式 \code{plain} 等同于单独使用数字 \code{1} 参数。这个选项可以用在正文中改变其后脚注编号类型。
\begin{commands}
\command{footref}[\marg{脚注标签名}]
在当前位置对自动编号的脚注进行引用,与被引用的正文标记共享一个编号与格式。
@@ -832,7 +832,7 @@
\command{contentsuse}[\marg{条目名}\marg{扩展名}]
激活名称为 \meta{条目名} 的浮动环境目录定制功能,它使用的目录文件后缀为 \meta{扩展名}。需要在激活条目后再使用命令 \cs{RegisterTocName} 注册选项。
\command{DeclareFloatList}[\marg{条目名}\marg{扩展名}]\newtag%
- 声明一个新的 \cs*{listof}\meta{条目名}\code{\textcolor{cs}{s}} 的浮动环境目录命令,并且支持\ref{subsec:directory command} 中图表目录命令的机制。使用这个命令要确保将条目加入目录的机制已经存在,推荐搭配 \pkg*{newfloat} 宏包创建新的浮动环境。选项前有符号 \textcolor{red}{\ding{73}} 表示在声明后可用。下面举一个声明算法目录的例子:
+ 声明一个浮动环境题注的目录命令 \cs*{listof}\meta{条目名}\code{\textcolor{cs}{s}},并且支持\ref{subsec:directory command} 中图表目录命令的机制。使用这个命令要确保将条目加入目录的机制已经存在,推荐搭配 \pkg*{newfloat} 宏包创建新的浮动环境。选项前有符号 \textcolor{red}{\ding{73}} 表示在声明后可用。下面举一个声明算法目录的例子:
\begin{ctexexam}
\usepackage{newfloat}
\DeclareFloatingEnvironment[
@@ -843,7 +843,7 @@
\listofalgorithms[multoc] % 在正文中输出双栏算法目录
\end{ctexexam}
\command{listnumberline}[\marg{条目名}]
- 在图表等浮动环境目录中插入条目标签和编号,默认标签可以由格式命令 \cs{labelformat} 设置。注意其中 \meta{条目名} 需要用对应名称\textbf{显示指定}。
+ 在图表等浮动环境目录中插入条目标签和编号,默认标签可以由格式命令 \cs{labelformat} 设置。注意其中 \meta{条目名} 需要用对应名称\textbf{显式指定}。
\begin{ctexexam}
\ctexset
{
@@ -879,7 +879,7 @@
\subsection{文区命令}
\begin{commands}
\command{frontmatter}[\sarg\oarg{编号格式}]\Default{Roman}
- 前言区命令。使部分和章标题不编号,带有星号的变体命令不使用 \cs{cleardoublepage} 命令。页码 \meta{编号格式} 可设置为例如 \code{roman} 或 \code{Alph} 等形式。
+ 前言区命令。使部分和章标题不编号,带有星号的变体命令不使用 \cs{cleardoublepage} 命令。页码 \meta{编号格式} 可设置为 \code{arabic}、\code{Alph}、\code{alph}、\code{Roman}、\code{roman} 和 \code{chinese} 形式。
\command{mainmatter}[\sarg]
主文区命令。章标题正常编号且页码为从1开始计数的阿拉伯数字,带有星号的变体命令不使用 \cs{cleardoublepage} 清双页命令。
\command{backmatter}
@@ -894,7 +894,7 @@
\label{subsec:directory command}
\begin{commands}
\command{tableofcontents}[\sarg\oarg{键值列表}\darg{代码钩子}]
- 文档主目录命令。带有星号参数的命令不输出目录标题。\meta{代码钩子} 是当方案 \keyis{plan}{both} 时中文与英文目录之间执行的代码,可以插入目录样式和换页等命令。
+ 文档主目录命令,支持中英文双语标题目录输出。带有星号参数不输出目录条目上方的标题。\meta{代码钩子} 是当方案 \keyis{plan}{both} 时中文与英文目录之间执行的代码,可以插入目录样式和换页等命令。
\begin{options}
\keychoice{plan}{cn,bi,both}\Default{cn}\newtag[Exp]%
文档主目录的输出方案。\code{cn} 只输出中文目录,\code{bi} 只输出英文目录。\code{both} 同时连续输出中文和英文目录,需要与双语目录标题命令 \cs{bichapter} 等或双语标题选项 \option{title} 配合使用。
@@ -932,7 +932,7 @@
\end{commands}
\subsection[双语标题]{双语标题\smodule{chapter}}
-双语目录标题命令目前设置了常用的三个级别,它们将中文标题正常输出,并使中英文标题加入双语目录。类似于标准文档类,这三个标题命令分别具有独立的计数器\footnote{默认情况下与普通标题命令共享使用计数器。},并对应 \cs*{the}\meta{计数器} 的值,可以用于 \option{binumber} 选项更改英文目录中的编号。这个功能是为国内一些高校的学位论文模板的要求设计,在一般情况和英文模式下\textbf{不需要使用}。
+双语目录标题命令目前设置了常用的三个级别,它们将中文标题正常输出,并使中英文标题加入双语目录。类似于标准文档类,这三个标题命令分别具有独立的计数器\footnote{默认情况下与普通标题命令共享使用计数器。},并对应 \cs*{the}\meta{计数器} 的值,可以用于 \option{number} 选项更改英文目录中标题的编号格式。这个功能是为国内一些高校的学位论文模板的要求设计,在一般情况和英文模式下\textbf{不需要使用}。
\begin{commands}
\command{bichapter}[\sarg\oarg{目录中文标题}\marg{中文标题}\marg{目录英文标题}]
\code{chapter} 章级别的双语目录标题命令,具有独立的 \code{bichapter} 计数器。
@@ -941,20 +941,29 @@
\command{bisubsection}[\sarg\oarg{目录中文标题}\marg{中文标题}\marg{目录英文标题}]
\code{subsection} 小节级别的双语目录标题命令,具有独立的 \code{bisubsection} 计数器。
- 它们的星号变体命令使文中标题不编号,但是仍然加入双语目录,若英文标题参数空置那么仅加入中文目录而不加入英文目录,这一特点与 \cs*{chapter}\sarg{} 等命令的行为不太一样,在一些情况下会用到。可选参数是目录中的中文标题,默认与中文标题一致,正文标题过长时可用它设置在目录中显示的标题。默认情况下双语目录的格式是一致的,共享使用 \module*{tocset} 模块的设置,英文目录的章级别标题名及编号的修改方式如下:
+ 它们的星号变体命令使文中标题不编号,但是仍然加入双语目录,若英文标题参数空置那么仅加入中文目录而不加入英文目录,这一特点与 \cs*{chapter}\sarg{} 等命令的行为不太一样,在一些情况下会用到。可选参数是目录中的中文条目,默认与中文标题一致,正文标题过长时可用它设置在目录中显示的标题。默认情况下双语目录条目的格式是一致的,共享使用 \module*{tocset} 模块的设置。提供了两个选项 \option{biname} 和 \option{binumber} 修改英文目录章标题条目的名字及编号:
\begin{options}
\kvsplit{biname}{英文目录前名字,英文目录后名字}\Default{Chapter\cs*{space}}
更改英文目录 \code{chapter} 级别的标题编号前后名字,类似于 \CTeX 的 \option*{name} 选项。
- \keyval{binmuber}{英文目录数字输出命令}\Default{\cs*{arabic}\Marg{chapter}}
- 更改英文目录 \code{chapter} 级别的标题编号输出格式,类似于 \CTeX 的 \option*{number} 选项。
+ \keyval{binumber}{英文目录编号输出命令}\Default{\cs*{arabic}\Marg{chapter}}
+ 更改英文目录 \code{chapter} 级别的标题编号输出格式,类似于 \CTeX 的 \option*{number} 选项。下面两种设置英文目录中章标题编号的方式等效:
\end{options}
+ \begin{ctexexam}
+ \bisection{zhtitle}{entitle}
+ \ctexset{chapter/binumber = \arabic{chapter}}
+ \BeforeAddBitoc{\ctexset{chapter/nmuber = \arabic{chapter}}}
+ \end{ctexexam}
\end{commands}
\begin{commands}
- \command{appendix}[\splitoarg{前名字,后名字}\darg{数字输出命令}]
- 附录起始命令,其后的章节标题变为附录形式。英文目录中附录标题的 \meta{前名字} 为英文附录目录前名字,\meta{后名字} 为英文附录目录后名字。前后名字之间用一个半角逗号分开,也可以只有一部分,表示英文附录目录前名字。\meta{数字输出命令} 为附录标题计数器在英文目录中的编号命令。
+ \command{appendix}[\splitoarg{前名字,后名字}\darg{编号输出命令}]
+ 附录起始命令,其后的章节标题变为附录形式。\meta{前名字} 为英文目录中附录标题的前名字,同理 \meta{后名字} 为英文目录中附录标题的后名字。前后名字之间用一个半角逗号分开,也可以只有一部分,表示英文目录中附录标题前名字。\meta{编号输出命令} 为附录标题计数器在英文目录中的编号命令。注意这两个参数仅对 \code{bichapter} 级别的标题生效。
\command{BeforeAddBitoc}[\sarg\marg{英文标题加入目录前的代码}]
- 作用于局部范围的英文目录钩子,可以插入标题或目录设置的命令改变英文目录中标题的显示格式,也可以覆盖上述的目录前后名字和编号等设置,带有星号的命令会重置之前的代码,放置在导言区或 \cs{bichapter} 等命令前生效。
+ 作用于局部范围的英文目录钩子,可以插入标题或目录设置的命令改变英文目录中标题的显示格式,也可以覆盖上述的目录前后名字和编号等设置,带有星号的命令会重置之前的代码,放置在导言区或 \cs{bichapter} 等双语标题命令前生效。这个命令在设置英文目录标题格式中有最高优先级。举一个在英文目录节标题编号前添加 \code{Section} 字符串的例子:
+ \begin{ctexexam}
+ \BeforeAddBitoc{\ctexset{section/name = Section}}
+ \bisection{zhtitle}{entitle}
+ \end{ctexexam}
\end{commands}
\subsection[上标和下标]{上标和下标\smodule{style}}
@@ -1327,7 +1336,7 @@
\shortversion{v = 1.638,date = 2022/03/04,changes = 增加目录条目样式选项注册命令 \cs{RegisterTocName}。}
\shortversion{v = 1.644,date = 2022/03/10,changes = 增加浮动环境目录声明命令 \cs{DeclareFloatList} 配合 \pkg*{caption} 宏包。}
\shortversion{v = 1.682,date = 2022/05/01,changes = 将迷你页判断命令 \cs*{notminipage} 改为被保护命令兼容 \pkg*{circledtext} 宏包。}
- \shortversion{v = 2024A,date = 2024/01/04,changes = 核对依赖宏包的更新改动,优化使用手册的内容细节。}
+ \shortversion{v = 2024B,date = 2024/01/05,changes = 核对依赖宏包的更新改动,优化使用手册的内容细节。}
\end{changelog}
\nocite{*}
diff --git a/macros/latex/contrib/l3backend/CHANGELOG.md b/macros/latex/contrib/l3backend/CHANGELOG.md
index ddccab9d20..0adcd7fb84 100644
--- a/macros/latex/contrib/l3backend/CHANGELOG.md
+++ b/macros/latex/contrib/l3backend/CHANGELOG.md
@@ -6,6 +6,11 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2024-01-04]
+
+### Changed
+- Documentation tweaks
+
## [2023-11-09]
### Changed
@@ -133,7 +138,7 @@ this project uses date-based 'snapshot' version identifiers.
## [2021-08-04]
-## Changed
+### Changed
- Only use `pdfmanagement` module if active
## [2021-07-12]
@@ -316,7 +321,8 @@ this project uses date-based 'snapshot' version identifiers.
- Include `l3backend` in file names
- Moved backend code to internal for each 'parent' module
-[Unreleased]: https://github.com/latex3/latex3/compare/2023-11-09...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2024-01-04...HEAD
+[2024-01-04]: https://github.com/latex3/latex3/compare/2023-11-09...2024-01-04
[2023-11-09]: https://github.com/latex3/latex3/compare/2023-11-04...2023-11-09
[2023-11-04]: https://github.com/latex3/latex3/compare/2023-10-23...2023-11-04
[2023-10-23]: https://github.com/latex3/latex3/compare/2023-10-10...2023-10-23
diff --git a/macros/latex/contrib/l3backend/README.md b/macros/latex/contrib/l3backend/README.md
index 0dd36a404c..ad12f364be 100644
--- a/macros/latex/contrib/l3backend/README.md
+++ b/macros/latex/contrib/l3backend/README.md
@@ -1,7 +1,7 @@
LaTeX3 Backend Drivers
======================
-Release 2023-11-09
+Release 2024-01-04
This package forms parts of `expl3`, and contains the code used to interface
with backends (drivers) across the `expl3` codebase. The functions here are
@@ -11,6 +11,6 @@ on an independent schedule.
-----
-<p>Copyright (C) 2019-2023 The LaTeX Project <br />
+<p>Copyright (C) 2019-2024 The LaTeX Project <br />
<a href="http://latex-project.org/">http://latex-project.org/</a> <br />
All rights reserved.</p>
diff --git a/macros/latex/contrib/l3backend/l3backend-basics.dtx b/macros/latex/contrib/l3backend/l3backend-basics.dtx
index add8305061..948a9eadfc 100644
--- a/macros/latex/contrib/l3backend/l3backend-basics.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-basics.dtx
@@ -2,7 +2,7 @@
%
%% File: l3backend-basics.dtx
%
-% Copyright (C) 2019-2023 The LaTeX Project
+% Copyright (C) 2019-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \textsf{l3backend-basics} package\\ Backend basics^^A
+% The \pkg{l3backend-basics} module\\ Backend basics^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -70,27 +70,27 @@
% \begin{macrocode}
\ProvidesExplFile
%<*dvipdfmx>
- {l3backend-dvipdfmx.def}{2023-11-09}{}
+ {l3backend-dvipdfmx.def}{2024-01-04}{}
{L3 backend support: dvipdfmx}
%</dvipdfmx>
%<*dvips>
- {l3backend-dvips.def}{2023-11-09}{}
+ {l3backend-dvips.def}{2024-01-04}{}
{L3 backend support: dvips}
%</dvips>
%<*dvisvgm>
- {l3backend-dvisvgm.def}{2023-11-09}{}
+ {l3backend-dvisvgm.def}{2024-01-04}{}
{L3 backend support: dvisvgm}
%</dvisvgm>
%<*luatex>
- {l3backend-luatex.def}{2023-11-09}{}
+ {l3backend-luatex.def}{2024-01-04}{}
{L3 backend support: PDF output (LuaTeX)}
%</luatex>
%<*pdftex>
- {l3backend-pdftex.def}{2023-11-09}{}
+ {l3backend-pdftex.def}{2024-01-04}{}
{L3 backend support: PDF output (pdfTeX)}
%</pdftex>
%<*xetex>
- {l3backend-xetex.def}{2023-11-09}{}
+ {l3backend-xetex.def}{2024-01-04}{}
{L3 backend support: XeTeX}
%</xetex>
% \end{macrocode}
diff --git a/macros/latex/contrib/l3backend/l3backend-box.dtx b/macros/latex/contrib/l3backend/l3backend-box.dtx
index cf91e71bed..7dbacb0044 100644
--- a/macros/latex/contrib/l3backend/l3backend-box.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-box.dtx
@@ -2,7 +2,7 @@
%
%% File: l3backend-box.dtx
%
-% Copyright (C) 2019-2023 The LaTeX Project
+% Copyright (C) 2019-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \textsf{l3backend-box} package\\ Backend box support^^A
+% The \pkg{l3backend-box} package\\ Backend box support^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -118,9 +118,9 @@
{ \fp_eval:n { round ( -(#2) , 5 ) } } ~
rotate
}
- \__kernel_backend_align_end:
- \box_use:N #1
- \__kernel_backend_scope_end:
+ \__kernel_backend_align_end:
+ \box_use:N #1
+ \__kernel_backend_scope_end:
}
% \end{macrocode}
% \end{macro}
@@ -217,8 +217,8 @@
\c_space_tl
\fp_use:N \l_@@_backend_cos_fp
}
- \box_use:N #1
- \__kernel_backend_scope_end:
+ \box_use:N #1
+ \__kernel_backend_scope_end:
}
\fp_new:N \l_@@_backend_cos_fp
\fp_new:N \l_@@_backend_sin_fp
diff --git a/macros/latex/contrib/l3backend/l3backend-code.pdf b/macros/latex/contrib/l3backend/l3backend-code.pdf
index dc7099b579..3617a446d2 100644
--- a/macros/latex/contrib/l3backend/l3backend-code.pdf
+++ b/macros/latex/contrib/l3backend/l3backend-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3backend/l3backend-color.dtx b/macros/latex/contrib/l3backend/l3backend-color.dtx
index cca4f54383..94a09ae916 100644
--- a/macros/latex/contrib/l3backend/l3backend-color.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-color.dtx
@@ -2,7 +2,7 @@
%
%% File: l3backend-color.dtx
%
-% Copyright (C) 2019-2023 The LaTeX Project
+% Copyright (C) 2019-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \textsf{l3backend-color} package\\ Backend color support^^A
+% The \pkg{l3backend-color} module\\ Backend color support^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -169,7 +169,6 @@
% \@@_backend_select:n
% }
% \begin{macro}{\@@_backend_reset:}
-% \begin{macro}{color.sc}
% Push the data to the stack. In the case of \texttt{dvips} also saves the
% drawing color in raw PostScript. The |spot| model is for handling data
% in classical format.
@@ -194,7 +193,6 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
-% \end{macro}
%
% \begin{macrocode}
%</dvips|dvisvgm>
@@ -467,9 +465,9 @@
% \begin{macrocode}
\cs_new:Npn \@@_backend_separation_init:nnn #1#2#3
{
- \exp_args:Ne \@@_backend_separation_init:nnnn
- { \@@_backend_separation_init_count:n {#2} }
- {#1} {#2} {#3}
+ \exp_args:Ne \@@_backend_separation_init:nnnn
+ { \@@_backend_separation_init_count:n {#2} }
+ {#1} {#2} {#3}
}
\cs_new:Npn \@@_backend_separation_init_count:n #1
{ \int_eval:n { 0 \@@_backend_separation_init_count:w #1 ~ \s_@@_stop } }
@@ -531,15 +529,15 @@
% \begin{macrocode}
\cs_new:Npn \@@_backend_separation_init:nw #1#2 ~ #3 ~ #4 \s_@@_stop
{
- #2 ~ #3 ~
- 2 ~ index ~ 2 ~ index ~ lt ~
- { ~ pop ~ exch ~ pop ~ } ~
- { ~
- 2 ~ index ~ 1 ~ index ~ gt ~
- { ~ exch ~ pop ~ exch ~ pop ~ } ~
- { ~ pop ~ pop ~ } ~
- ifelse ~
- }
+ #2 ~ #3 ~
+ 2 ~ index ~ 2 ~ index ~ lt ~
+ { ~ pop ~ exch ~ pop ~ } ~
+ { ~
+ 2 ~ index ~ 1 ~ index ~ gt ~
+ { ~ exch ~ pop ~ exch ~ pop ~ } ~
+ { ~ pop ~ pop ~ } ~
+ ifelse ~
+ }
ifelse ~
#1 ~ 1 ~ roll ~
\tl_if_blank:nF {#4}
@@ -795,9 +793,9 @@
{
/Lab ~
<<
- /WhitePoint ~
- [ \tl_use:c { c_@@_model_whitepoint_CIELAB_ #1 _tl } ]
- /Range ~ [ \c_@@_model_range_CIELAB_tl ]
+ /WhitePoint ~
+ [ \tl_use:c { c_@@_model_whitepoint_CIELAB_ #1 _tl } ]
+ /Range ~ [ \c_@@_model_range_CIELAB_tl ]
>>
}
}
@@ -841,7 +839,7 @@
]
}
{ {#3} }
- }
+ }
\use:e
{
\pdf_object_new:n { color \int_use:N \g_@@_model_int }
@@ -1207,14 +1205,14 @@
\__kernel_backend_scope:n
{
stroke =
- "
- rgb
- (
- #1 \c_percent_str ,
- #2 \c_percent_str ,
- #3 \c_percent_str
- )
- "
+ "
+ rgb
+ (
+ #1 \c_percent_str ,
+ #2 \c_percent_str ,
+ #3 \c_percent_str
+ )
+ "
}
}
% \end{macrocode}
diff --git a/macros/latex/contrib/l3backend/l3backend-draw.dtx b/macros/latex/contrib/l3backend/l3backend-draw.dtx
index 46b0e2af1d..93a4c09b44 100644
--- a/macros/latex/contrib/l3backend/l3backend-draw.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-draw.dtx
@@ -2,7 +2,7 @@
%
%% File: l3backend-draw.dtx
%
-% Copyright (C) 2019-2023 The LaTeX Project
+% Copyright (C) 2019-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \textsf{l3backend-draw} package\\ Backend drawing support^^A
+% The \pkg{l3backend-draw} package\\ Backend drawing support^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -141,11 +141,11 @@
}
\cs_new_protected:Npn \@@_backend_rectangle:nnnn #1#2#3#4
{
- \@@_backend_literal:e
- {
- \dim_to_decimal_in_bp:n {#4} ~ \dim_to_decimal_in_bp:n {#3} ~
- \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
- moveto~dup~0~rlineto~exch~0~exch~rlineto~neg~0~rlineto~closepath
+ \@@_backend_literal:e
+ {
+ \dim_to_decimal_in_bp:n {#4} ~ \dim_to_decimal_in_bp:n {#3} ~
+ \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
+ moveto~dup~0~rlineto~exch~0~exch~rlineto~neg~0~rlineto~closepath
}
}
\cs_new_protected:Npn \@@_backend_curveto:nnnnnn #1#2#3#4#5#6
@@ -157,7 +157,7 @@
\dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~
curveto
}
- }
+ }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -451,10 +451,10 @@
\dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~
c
}
- }
+ }
\cs_new_protected:Npn \@@_backend_rectangle:nnnn #1#2#3#4
{
- \@@_backend_literal:e
+ \@@_backend_literal:e
{
\dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
\dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
@@ -698,7 +698,7 @@
{ \fp_eval:n { atand ( #3 , #2 ) } }
{ \fp_eval:n { atand ( #4 , #1 ) } }
}
- #5
+ #5
}
\cs_new_protected:Npn \@@_backend_cm_decompose_auxii:nnnnN #1#2#3#4#5
{
@@ -1022,8 +1022,8 @@
{
\__kernel_backend_scope:n
{
- transform =
- " matrix ( #1 , #2 , #3 , #4 , 0pt , 0pt ) "
+ transform =
+ " matrix ( #1 , #2 , #3 , #4 , 0pt , 0pt ) "
}
}
% \end{macrocode}
diff --git a/macros/latex/contrib/l3backend/l3backend-graphics.dtx b/macros/latex/contrib/l3backend/l3backend-graphics.dtx
index ce2e00a405..b1b7e6ea89 100644
--- a/macros/latex/contrib/l3backend/l3backend-graphics.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-graphics.dtx
@@ -2,7 +2,7 @@
%
%% File: l3backend-graphics.dtx
%
-% Copyright (C) 2019-2023 The LaTeX Project
+% Copyright (C) 2019-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \textsf{l3backend-graphics} package\\ Backend graphics support^^A
+% The \pkg{l3backend-graphics} module\\ Backend graphics support^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -83,7 +83,7 @@
%<*dvips>
% \end{macrocode}
%
-% \begin{variable}{\l_graphics_search_ext_seq}
+% \begin{variable}[no-user-doc]{\l_graphics_search_ext_seq}
% \begin{macrocode}
\@@_backend_loaded:n
{ \seq_set_from_clist:Nn \l_graphics_search_ext_seq { .eps , .ps } }
@@ -137,7 +137,7 @@
%<*luatex|pdftex>
% \end{macrocode}
%
-% \begin{variable}{\l_graphics_search_ext_seq}
+% \begin{variable}[no-user-doc]{\l_graphics_search_ext_seq}
% \begin{macrocode}
\@@_backend_loaded:n
{
@@ -320,7 +320,7 @@
}
}
{#1}
- }
+ }
\cs_new_eq:NN \@@_backend_getbb_ps:n \@@_backend_getbb_eps:n
\cs_new_protected:Npn \@@_backend_getbb_eps:nn #1#2
{
@@ -376,13 +376,13 @@
%<*dvipdfmx|xetex>
% \end{macrocode}
%
-% \begin{variable}{\l_graphics_search_ext_seq}
+% \begin{variable}[no-user-doc]{\l_graphics_search_ext_seq}
% \begin{macrocode}
\@@_backend_loaded:n
{
\seq_set_from_clist:Nn \l_graphics_search_ext_seq
{ .pdf , .eps , .ps , .png , .jpg , .jpeg , .bmp }
- }
+ }
% \end{macrocode}
% \end{variable}
%
@@ -481,7 +481,7 @@
\tl_if_empty:NF \l_@@_decodearray_str
{ :D \l_@@_decodearray_str }
\bool_if:NT \l_@@_interpolate_bool
- { :I }
+ { :I }
}
{#1} {#2}
}
@@ -686,7 +686,7 @@
%<*dvisvgm>
% \end{macrocode}
%
-% \begin{variable}{\l_graphics_search_ext_seq}
+% \begin{variable}[no-user-doc]{\l_graphics_search_ext_seq}
% \begin{macrocode}
\@@_backend_loaded:n
{
@@ -768,7 +768,7 @@
{ \@@_backend_getbb_svg_auxiv:Nw #2 }
{ \@@_backend_getbb_svg_auxv:Nw #2 }
}
- }
+ }
##2 \s_@@_stop
}
}
@@ -777,7 +777,7 @@
\@@_backend_getbb_svg_auxii:w #3
\tl_to_str:n {#1} = \tl_to_str:n {#1} =
\s_@@_stop
- }
+ }
}
\cs_new_protected:Npn \@@_backend_getbb_svg_auxii:w { }
\cs_new_protected:Npn \@@_backend_getbb_svg_auxiii:Nw #1 ' #2 ' #3 \s_@@_stop
diff --git a/macros/latex/contrib/l3backend/l3backend-header.dtx b/macros/latex/contrib/l3backend/l3backend-header.dtx
index 8fe469e639..a16f8cee31 100644
--- a/macros/latex/contrib/l3backend/l3backend-header.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-header.dtx
@@ -2,7 +2,7 @@
%
%% File: l3backend-header.dtx
%
-% Copyright (C) 2019-2023 The LaTeX Project
+% Copyright (C) 2019-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \textsf{l3backend-header} package\\ Backend graphics support^^A
+% The \pkg{l3backend-header} module\\ Backend graphics support^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -59,24 +59,24 @@
%<*dvips&header>
% \end{macrocode}
%
-% \begin{macro}{color.sc}
+% \begin{macro}[no-user-doc]{color.sc}
% Empty definition for color at the top level.
-% \begin{macrocode}
+% \begin{macrocode}
/color.sc { } def
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{TeXcolorseparation, separation}
+% \begin{macro}[int]{TeXcolorseparation, separation}
% Support for separation/spot colors: this strange naming is so
% things work with the color stack.
-% \begin{macrocode}
+% \begin{macrocode}
TeXDict begin
/TeXcolorseparation { setcolor } def
end
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{pdf.globaldict}
+% \begin{macro}[int]{pdf.globaldict}
% A small global dictionary for backend use.
% \begin{macrocode}
true setglobal
@@ -85,7 +85,7 @@ false setglobal
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}
+% \begin{macro}[int]
% {
% pdf.cvs ,
% pdf.dvi.pt ,
@@ -103,7 +103,7 @@ false setglobal
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{pdf.linkmargin, pdf.linkdp.pad, pdf.linkht.pad}
+% \begin{macro}[int]{pdf.linkmargin, pdf.linkdp.pad, pdf.linkht.pad}
% Settings which are defined up-front in |SDict|.
% \begin{macrocode}
/pdf.linkmargin { 1 pdf.pt.dvi } def
@@ -112,7 +112,7 @@ false setglobal
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}
+% \begin{macro}[int]
% {
% pdf.rect ,
% pdf.save.ll ,
@@ -167,7 +167,7 @@ false setglobal
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}
+% \begin{macro}[int]
% {
% pdf.dest.anchor ,
% pdf.dest.x ,
@@ -219,14 +219,14 @@ false setglobal
pdf.dest.y pdf.tmpc mul add
pdf.dev.x add
pdf.dest.x pdf.tmpb mul
- pdf.dest.y pdf.tmpd mul add
- pdf.dev.y add
+ pdf.dest.y pdf.tmpd mul add
+ pdf.dev.y add
}
def
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}
+% \begin{macro}[int]
% {
% pdf.bordertracking ,
% pdf.bordertracking.begin ,
@@ -388,7 +388,7 @@ false setglobal
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}
+% \begin{macro}[int]
% {
% pdf.breaklink ,
% pdf.breaklink.write ,
@@ -409,83 +409,83 @@ false setglobal
{
counttomark /pdf.count exch def
{
- pdf.count 0 eq { exit } if
- counttomark 2 roll
- 1 index /Rect eq
- {
- dup 4 array copy
- dup dup
- 1 get
- pdf.outerbox pdf.rect.ht
- pdf.linkmargin 2 mul add sub
- 3 exch put
- dup
- pdf.outerbox 2 get
- pdf.linkmargin add
- 2 exch put
- dup dup
- 3 get
- pdf.outerbox pdf.rect.ht
- pdf.linkmargin 2 mul add add
- 1 exch put
- /pdf.currentrect exch def
- pdf.breaklink.write
- {
- pdf.currentrect
- dup
- pdf.outerbox 0 get
- pdf.linkmargin sub
- 0 exch put
- dup
- pdf.outerbox 2 get
- pdf.linkmargin add
- 2 exch put
- dup dup
- 1 get
- pdf.baselineskip add
- 1 exch put
- dup dup
- 3 get
- pdf.baselineskip add
- 3 exch put
- /pdf.currentrect exch def
- pdf.breaklink.write
+ pdf.count 0 eq { exit } if
+ counttomark 2 roll
+ 1 index /Rect eq
+ {
+ dup 4 array copy
+ dup dup
+ 1 get
+ pdf.outerbox pdf.rect.ht
+ pdf.linkmargin 2 mul add sub
+ 3 exch put
+ dup
+ pdf.outerbox 2 get
+ pdf.linkmargin add
+ 2 exch put
+ dup dup
+ 3 get
+ pdf.outerbox pdf.rect.ht
+ pdf.linkmargin 2 mul add add
+ 1 exch put
+ /pdf.currentrect exch def
+ pdf.breaklink.write
+ {
+ pdf.currentrect
+ dup
+ pdf.outerbox 0 get
+ pdf.linkmargin sub
+ 0 exch put
+ dup
+ pdf.outerbox 2 get
+ pdf.linkmargin add
+ 2 exch put
+ dup dup
+ 1 get
+ pdf.baselineskip add
+ 1 exch put
+ dup dup
+ 3 get
+ pdf.baselineskip add
+ 3 exch put
+ /pdf.currentrect exch def
+ pdf.breaklink.write
}
1 index 3 get
pdf.linkmargin 2 mul add
pdf.outerbox pdf.rect.ht add
2 index 1 get sub
pdf.baselineskip div round cvi 1 sub
- exch
- repeat
- pdf.currentrect
- dup
- pdf.outerbox 0 get
- pdf.linkmargin sub
- 0 exch put
- dup dup
- 1 get
- pdf.baselineskip add
- 1 exch put
- dup dup
- 3 get
- pdf.baselineskip add
- 3 exch put
- dup 2 index 2 get 2 exch put
- /pdf.currentrect exch def
- pdf.breaklink.write
- SDict /pdf.pdfmark.good false put
- exit
- }
- { pdf.count 2 sub /pdf.count exch def }
- ifelse
- }
- loop
- }
- if
- /ANN
-}
- def
+ exch
+ repeat
+ pdf.currentrect
+ dup
+ pdf.outerbox 0 get
+ pdf.linkmargin sub
+ 0 exch put
+ dup dup
+ 1 get
+ pdf.baselineskip add
+ 1 exch put
+ dup dup
+ 3 get
+ pdf.baselineskip add
+ 3 exch put
+ dup 2 index 2 get 2 exch put
+ /pdf.currentrect exch def
+ pdf.breaklink.write
+ SDict /pdf.pdfmark.good false put
+ exit
+ }
+ { pdf.count 2 sub /pdf.count exch def }
+ ifelse
+ }
+ loop
+ }
+ if
+ /ANN
+ }
+ def
/pdf.breaklink.write
{
counttomark 1 sub
@@ -509,7 +509,7 @@ false setglobal
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}
+% \begin{macro}[int]
% {
% pdf.pdfmark ,
% pdf.pdfmark.good ,
diff --git a/macros/latex/contrib/l3backend/l3backend-opacity.dtx b/macros/latex/contrib/l3backend/l3backend-opacity.dtx
index 440becf760..728b18ca6d 100644
--- a/macros/latex/contrib/l3backend/l3backend-opacity.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-opacity.dtx
@@ -2,7 +2,7 @@
%
%% File: l3backend-opacity.dtx
%
-% Copyright (C) 2021-2023 The LaTeX Project
+% Copyright (C) 2021-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \textsf{l3backend-opacity} package\\ Backend opacity support^^A
+% The \pkg{l3backend-opacity} module\\ Backend opacity support^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -169,10 +169,10 @@
% same as color.
% \begin{macrocode}
\cs_new_protected:Npn \@@_backend_select:n #1
- {
- \exp_args:Ne \@@_backend_select_aux:n
- { \fp_eval:n { min(max(0,#1),1) } }
- }
+ {
+ \exp_args:Ne \@@_backend_select_aux:n
+ { \fp_eval:n { min(max(0,#1),1) } }
+ }
\cs_new_protected:Npn \@@_backend_select_aux:n #1
{
\tl_set:Nn \l_@@_backend_fill_tl {#1}
@@ -196,15 +196,15 @@
\cs_gset_protected:Npn \@@_backend_select_aux:n #1 { }
}
\cs_new_protected:Npn \@@_backend_reset:
- {
+ {
%<*dvipdfmx|xetex>
- \__kernel_backend_literal_pdf:n
+ \__kernel_backend_literal_pdf:n
{ /opacity1 ~ gs }
%</dvipdfmx|xetex>
%<*luatex|pdftex>
\__kernel_color_backend_stack_pop:n \c_@@_backend_stack_int
%</luatex|pdftex>
- }
+ }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -240,12 +240,12 @@
{ opacity.stroke #1 }
{ << /CA ~ #2 >> }
%<*dvipdfmx|xetex>
- \__kernel_backend_literal_pdf:n
+ \__kernel_backend_literal_pdf:n
%</dvipdfmx|xetex>
%<*luatex|pdftex>
- \__kernel_color_backend_stack_push:nn \c_@@_backend_stack_int
+ \__kernel_color_backend_stack_push:nn \c_@@_backend_stack_int
%</luatex|pdftex>
- { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs }
+ { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs }
\group_insert_after:N \@@_backend_reset:
}
}
diff --git a/macros/latex/contrib/l3backend/l3backend-pdf.dtx b/macros/latex/contrib/l3backend/l3backend-pdf.dtx
index e787ab7c25..19ab02daaa 100644
--- a/macros/latex/contrib/l3backend/l3backend-pdf.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-pdf.dtx
@@ -2,7 +2,7 @@
%
%% File: l3backend-pdf.dtx
%
-% Copyright (C) 2019-2023 The LaTeX Project
+% Copyright (C) 2019-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \textsf{l3backend-pdf} package\\ Backend PDF features^^A
+% The \pkg{l3backend-pdf} module\\ Backend PDF features^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -388,16 +388,6 @@
% \begin{macro}{\@@_backend_link_minima:}
% \begin{macro}{\@@_backend_link_outerbox:n}
% \begin{macro}{\@@_backend_link_sf_save:, \@@_backend_link_sf_restore:}
-% \begin{macro}
-% {
-% pdf.linkdp.pad ,
-% pdf.linkht.pad ,
-% pdf.llx, pdf.lly ,
-% pdf.ury, pdf.ury ,
-% pdf.link.dict ,
-% pdf.outerbox ,
-% pdf.baselineskip
-% }
% Links are crated like annotations but with dedicated code to allow for
% adjusting the size of the rectangle. In contrast to \pkg{hyperref}, we
% grab the link content as a box which can then unbox: this allows the same
@@ -470,9 +460,9 @@
\hbox_set:Nn \l_@@_backend_model_box { Gg }
\exp_args:Ne \@@_backend_link_outerbox:n
{
- \int_if_odd:nTF { \value { page } }
- { \oddsidemargin }
- { \evensidemargin }
+ \int_if_odd:nTF { \value { page } }
+ { \oddsidemargin }
+ { \evensidemargin }
}
\box_move_down:nn { \box_dp:N \l_@@_backend_content_box }
{ \hbox:n { \__kernel_backend_postscript:n { pdf.save.linkll } } }
@@ -569,9 +559,7 @@
% \end{macro}
% \end{macro}
% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\@makecol@hook}
% Hooks to allow link breaking: something will be needed in format mode
% at some stage. At present this code is disabled as there is an open
% question about the name of the hook: to be resolved at the \LaTeXe{}
@@ -605,7 +593,6 @@
}
}
% \end{macrocode}
-% \end{macro}
%
% \begin{macro}{\@@_backend_link_last:}
% The same as annotations, but with a custom integer.
@@ -711,7 +698,7 @@
\__kernel_backend_literal_postscript:n
{
/setdistillerparams ~ where
- { pop << /CompressPages ~ false >> setdistillerparams }
+ { pop << /CompressPages ~ false >> setdistillerparams }
if
}
}
@@ -723,7 +710,7 @@
\__kernel_backend_literal_postscript:n
{
/setdistillerparams ~ where
- { pop << /CompressStreams ~ false >> setdistillerparams }
+ { pop << /CompressStreams ~ false >> setdistillerparams }
if
}
}
@@ -1336,7 +1323,7 @@
% \begin{macro}{\@@_backend_object_last:}
% \begin{macrocode}
\cs_new:Npn \@@_backend_object_last:
- { @pdf.obj \int_use:N \g_@@_backend_object_int }
+ { @pdf.obj \int_use:N \g_@@_backend_object_int }
% \end{macrocode}
% \end{macro}
%
@@ -1379,7 +1366,7 @@
% \begin{macro}{\@@_backend_annotation_last:}
% \begin{macrocode}
\cs_new:Npn \@@_backend_annotation_last:
- { @pdf.obj \int_use:N \g_@@_backend_annotation_int }
+ { @pdf.obj \int_use:N \g_@@_backend_annotation_int }
% \end{macrocode}
% \end{macro}
%
@@ -1405,14 +1392,14 @@
\exp_not:N \int_gincr:N \exp_not:N \g_@@_backend_link_int
\@@_backend:e
{
- bann ~
- @pdf.lnk
- \exp_not:N \int_use:N \exp_not:N \g_@@_backend_link_int
- \c_space_tl
- <<
- /Type /Annot
- #1
- >>
+ bann ~
+ @pdf.lnk
+ \exp_not:N \int_use:N \exp_not:N \g_@@_backend_link_int
+ \c_space_tl
+ <<
+ /Type /Annot
+ #1
+ >>
}
}
\cs_new_protected:Npn \@@_backend_link_end:
diff --git a/macros/latex/contrib/l3backend/l3backend.ins b/macros/latex/contrib/l3backend/l3backend.ins
index 5b8945f012..e24c41d236 100644
--- a/macros/latex/contrib/l3backend/l3backend.ins
+++ b/macros/latex/contrib/l3backend/l3backend.ins
@@ -2,7 +2,7 @@
File l3backend.ins
-Copyright (C) 2019-2023 The LaTeX Project
+Copyright (C) 2019-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@ license information is placed in the derived files.
\preamble
-Copyright (C) 2019-2023 The LaTeX Project
+Copyright (C) 2019-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of
the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -142,7 +142,7 @@ and all files in that bundle must be distributed together.
\def\MetaPrefix{--}
\preamble
-Copyright (C) 2023 The LaTeX Project
+Copyright (C) 2023,2024 The LaTeX Project
It may be distributed and/or modified under the conditions of
the LaTeX Project Public License (LPPL), either version 1.3c of
diff --git a/macros/latex/contrib/l3experimental/CHANGELOG.md b/macros/latex/contrib/l3experimental/CHANGELOG.md
index d6e3645c59..449a9889a6 100644
--- a/macros/latex/contrib/l3experimental/CHANGELOG.md
+++ b/macros/latex/contrib/l3experimental/CHANGELOG.md
@@ -7,6 +7,15 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2024-01-04]
+
+### Changed
+- Apply transformation matrix to drawing shifts
+
+### Fixed
+- Remove a stray scaling in `\draw_path_rectangle:nn` (issue \#1386)
+- Correct baseline calculations in some `l3draw` cases (issue \#1400)
+
## [2023-12-08]
### Added
@@ -293,7 +302,8 @@ this project uses date-based 'snapshot' version identifiers.
- New `l3color` module using `xcolor`-like expression syntax
- New `l3draw` module, based on `pgf` layer of the TikZ system
-[Unreleased]: https://github.com/latex3/latex3/compare/2023-12-08...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2024-01-04...HEAD
+[2024-01-04]: https://github.com/latex3/latex3/compare/2023-12-08...2024-01-04
[2023-12-08]: https://github.com/latex3/latex3/compare/2023-11-01...2023-12-08
[2023-11-01]: https://github.com/latex3/latex3/compare/2023-10-10...2023-11-01
[2023-10-10]: https://github.com/latex3/latex3/compare/2023-05-11...2023-10-10
diff --git a/macros/latex/contrib/l3experimental/README.md b/macros/latex/contrib/l3experimental/README.md
index 52c7d97926..1a4d3a4650 100644
--- a/macros/latex/contrib/l3experimental/README.md
+++ b/macros/latex/contrib/l3experimental/README.md
@@ -1,7 +1,7 @@
Experimental LaTeX3 Concepts
============================
-Release 2023-12-08
+Release 2024-01-04
Overview
--------
@@ -124,6 +124,6 @@ the [LaTeX-L list](#Discussion) should be used.
-----
-<p>Copyright (C) 1998-2004,2008-2012,2014-2023 The LaTeX Project <br />
+<p>Copyright (C) 1998-2004,2008-2012,2014-2024 The LaTeX Project <br />
<a href="http://latex-project.org/">http://latex-project.org/</a> <br />
All rights reserved.</p>
diff --git a/macros/latex/contrib/l3experimental/l3benchmark.dtx b/macros/latex/contrib/l3experimental/l3benchmark.dtx
index bc21191d4b..2eb979c660 100644
--- a/macros/latex/contrib/l3experimental/l3benchmark.dtx
+++ b/macros/latex/contrib/l3experimental/l3benchmark.dtx
@@ -2,7 +2,7 @@
%
%% File: l3benchmark.dtx
%
-% Copyright (C) 2011-2023 The LaTeX Project
+% Copyright (C) 2011-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-08}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -122,7 +122,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3benchmark}{2023-12-08}{}
+\ProvidesExplPackage{l3benchmark}{2024-01-04}{}
{L3 Experimental benchmarking}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3experimental/l3benchmark.ins b/macros/latex/contrib/l3experimental/l3benchmark.ins
index cfef0f0600..2c4c6908df 100644
--- a/macros/latex/contrib/l3experimental/l3benchmark.ins
+++ b/macros/latex/contrib/l3experimental/l3benchmark.ins
@@ -2,7 +2,7 @@
File: l3benchmark.ins
-Copyright (C) 2011,2018-2023 The LaTeX Project
+Copyright (C) 2011,2018-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -34,7 +34,7 @@ license information is placed in the derived files.
\preamble
-Copyright (C) 2018-2023 The LaTeX Project
+Copyright (C) 2018-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of
the LaTeX Project Public License (LPPL), either version 1.3c of
diff --git a/macros/latex/contrib/l3experimental/l3benchmark.pdf b/macros/latex/contrib/l3experimental/l3benchmark.pdf
index 83471b67fd..9da3c2ae15 100644
--- a/macros/latex/contrib/l3experimental/l3benchmark.pdf
+++ b/macros/latex/contrib/l3experimental/l3benchmark.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3draw-boxes.dtx b/macros/latex/contrib/l3experimental/l3draw-boxes.dtx
index b8f68e90a8..8f481aada9 100644
--- a/macros/latex/contrib/l3experimental/l3draw-boxes.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-boxes.dtx
@@ -2,7 +2,7 @@
%
%% File: l3draw-boxes.dtx
%
-% Copyright (C) 2018-2023 The LaTeX Project
+% Copyright (C) 2018-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-08}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-code.pdf b/macros/latex/contrib/l3experimental/l3draw-code.pdf
index c2e80fc340..db5ed76836 100644
--- a/macros/latex/contrib/l3experimental/l3draw-code.pdf
+++ b/macros/latex/contrib/l3experimental/l3draw-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3draw-layers.dtx b/macros/latex/contrib/l3experimental/l3draw-layers.dtx
index cf2c2091cb..6e71f93ade 100644
--- a/macros/latex/contrib/l3experimental/l3draw-layers.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-layers.dtx
@@ -2,7 +2,7 @@
%
%% File: l3draw-layers.dtx
%
-% Copyright (C) 2019-2023 The LaTeX Project
+% Copyright (C) 2019-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-08}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-paths.dtx b/macros/latex/contrib/l3experimental/l3draw-paths.dtx
index 53032f4d61..735db2d23e 100644
--- a/macros/latex/contrib/l3experimental/l3draw-paths.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-paths.dtx
@@ -2,7 +2,7 @@
%
%% File: l3draw-paths.dtx
%
-% Copyright (C) 2018-2023 The LaTeX Project
+% Copyright (C) 2018-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-08}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -235,9 +235,9 @@
}
\cs_new_protected:Npn \@@_path_moveto:nn #1#2
{
- \@@_path_update_limits:nn {#1} {#2}
- \@@_softpath_moveto:nn {#1} {#2}
- \@@_path_update_last:nn {#1} {#2}
+ \@@_path_update_limits:nn {#1} {#2}
+ \@@_softpath_moveto:nn {#1} {#2}
+ \@@_path_update_last:nn {#1} {#2}
}
\cs_new_protected:Npn \draw_path_lineto:n #1
{
@@ -247,10 +247,10 @@
}
\cs_new_protected:Npn \@@_path_lineto:nn #1#2
{
- \@@_path_mark_corner:
- \@@_path_update_limits:nn {#1} {#2}
- \@@_softpath_lineto:nn {#1} {#2}
- \@@_path_update_last:nn {#1} {#2}
+ \@@_path_mark_corner:
+ \@@_path_update_limits:nn {#1} {#2}
+ \@@_softpath_lineto:nn {#1} {#2}
+ \@@_path_update_last:nn {#1} {#2}
}
\cs_new_protected:Npn \draw_path_curveto:nnn #1#2#3
{
@@ -265,11 +265,11 @@
}
\cs_new_protected:Npn \@@_path_curveto:nnnnnn #1#2#3#4#5#6
{
- \@@_path_update_limits:nn {#1} {#2}
- \@@_path_update_limits:nn {#3} {#4}
- \@@_path_update_limits:nn {#5} {#6}
- \@@_softpath_curveto:nnnnnn {#1} {#2} {#3} {#4} {#5} {#6}
- \@@_path_update_last:nn {#5} {#6}
+ \@@_path_update_limits:nn {#1} {#2}
+ \@@_path_update_limits:nn {#3} {#4}
+ \@@_path_update_limits:nn {#5} {#6}
+ \@@_softpath_curveto:nnnnnn {#1} {#2} {#3} {#4} {#5} {#6}
+ \@@_path_update_last:nn {#5} {#6}
}
% \end{macrocode}
% \end{macro}
@@ -348,32 +348,32 @@
\fp_set:Nn \l_@@_path_tmpb_fp { \c_@@_path_curveto_b_fp * #2 }
\use:e
{
- \@@_path_mark_corner:
- \@@_path_curveto:nnnnnn
- {
- \fp_to_dim:n
- {
- \c_@@_path_curveto_a_fp * \g_@@_path_lastx_dim
- + \l_@@_path_tmpa_fp
- }
- }
- {
- \fp_to_dim:n
- {
- \c_@@_path_curveto_a_fp * \g_@@_path_lasty_dim
- + \l_@@_path_tmpb_fp
- }
- }
- {
- \fp_to_dim:n
- { \c_@@_path_curveto_a_fp * #3 + \l_@@_path_tmpa_fp }
- }
- {
- \fp_to_dim:n
- { \c_@@_path_curveto_a_fp * #4 + \l_@@_path_tmpb_fp }
- }
- {#3}
- {#4}
+ \@@_path_mark_corner:
+ \@@_path_curveto:nnnnnn
+ {
+ \fp_to_dim:n
+ {
+ \c_@@_path_curveto_a_fp * \g_@@_path_lastx_dim
+ + \l_@@_path_tmpa_fp
+ }
+ }
+ {
+ \fp_to_dim:n
+ {
+ \c_@@_path_curveto_a_fp * \g_@@_path_lasty_dim
+ + \l_@@_path_tmpb_fp
+ }
+ }
+ {
+ \fp_to_dim:n
+ { \c_@@_path_curveto_a_fp * #3 + \l_@@_path_tmpa_fp }
+ }
+ {
+ \fp_to_dim:n
+ { \c_@@_path_curveto_a_fp * #4 + \l_@@_path_tmpb_fp }
+ }
+ {#3}
+ {#4}
}
}
\fp_const:Nn \c_@@_path_curveto_a_fp { 1 / 3 }
@@ -390,8 +390,8 @@
% \begin{macro}
% {
% \@@_path_arc_auxi:nnnnNnn,
-% \@@_path_arc_auxi:fnnnNnn,
-% \@@_path_arc_auxi:fnfnNnn
+% \@@_path_arc_auxi:enenNnn,
+% \@@_path_arc_auxi:eennNnn
% }
% \begin{macro}{\@@_path_arc_auxii:nnnNnnnn}
% \begin{macro}{\@@_path_arc_auxiii:nn}
@@ -416,7 +416,7 @@
{ \fp_eval:n {#2} }
{ \fp_to_dim:n {#3} }
{ \fp_to_dim:n {#4} }
- }
+ }
}
\cs_new_protected:Npn \@@_path_arc:nnnn #1#2#3#4
{
@@ -432,14 +432,14 @@
{
\fp_compare:nNnTF \l_@@_path_arc_delta_fp > { 115 }
{
- \@@_path_arc_auxi:ffnnNnn
+ \@@_path_arc_auxi:eennNnn
{ \fp_to_decimal:N \l_@@_path_arc_start_fp }
{ \fp_eval:n { \l_@@_path_arc_start_fp #3 90 } }
{ 90 } {#2}
#3 {#4} {#5}
}
{
- \@@_path_arc_auxi:ffnnNnn
+ \@@_path_arc_auxi:eennNnn
{ \fp_to_decimal:N \l_@@_path_arc_start_fp }
{ \fp_eval:n { \l_@@_path_arc_start_fp #3 60 } }
{ 60 } {#2}
@@ -447,7 +447,7 @@
}
}
\@@_path_mark_corner:
- \@@_path_arc_auxi:fnfnNnn
+ \@@_path_arc_auxi:enenNnn
{ \fp_to_decimal:N \l_@@_path_arc_start_fp }
{#2}
{ \fp_eval:n { abs( \l_@@_path_arc_start_fp - #2 ) } }
@@ -488,10 +488,10 @@
}
}
}
-\cs_generate_variant:Nn \@@_path_arc_auxi:nnnnNnn { fnf , ff }
+\cs_generate_variant:Nn \@@_path_arc_auxi:nnnnNnn { ene , ee }
% \end{macrocode}
% We can now calculate the required points. As everything here is
-% non-expandable, that is best done by using \texttt{x}-type expansion
+% non-expandable, that is best done by using \texttt{e}-type expansion
% to build up the tokens. The three points are calculated out-of-order,
% since finding the second control point needs the position of the end
% point. Once the points are found, fire-off the fundamental path
@@ -708,7 +708,7 @@
{ \@@_path_rectangle_rounded:nnnn }
{ \@@_path_rectangle:nnnn }
}
- { \draw_point_transform:n {#1} }
+ {#1}
{#2}
}
\cs_new_protected:Npn \@@_path_rectangle:nnnn #1#2#3#4
@@ -752,12 +752,12 @@
% \begin{macro}{\draw_path_grid:nnnn}
% \begin{macro}
% {
-% \@@_path_grid_auxi:nnnnnn, \@@_path_grid_auxi:ffnnnn,
+% \@@_path_grid_auxi:nnnnnn, \@@_path_grid_auxi:eennnn,
% \@@_path_grid_auxii:nnnnnn,
-% \@@_path_grid_auxiii:nnnnnn, \@@_path_grid_auxiiii:ffnnnn
+% \@@_path_grid_auxiii:nnnnnn, \@@_path_grid_auxiiii:eennnn
% }
% \begin{macro}
-% {\@@_path_grid_auxiv:nnnnnnnn, \@@_path_grid_auxiv:ffnnnnnn}
+% {\@@_path_grid_auxiv:nnnnnnnn, \@@_path_grid_auxiv:eennnnnn}
% The main complexity here is lining up the grid correctly.
% To keep it simple, we tidy up the argument ordering first.
% \begin{macrocode}
@@ -765,7 +765,7 @@
{
\@@_point_process:nnn
{
- \@@_path_grid_auxi:ffnnnn
+ \@@_path_grid_auxi:eennnn
{ \dim_eval:n { \dim_abs:n {#1} } }
{ \dim_eval:n { \dim_abs:n {#2} } }
}
@@ -777,7 +777,7 @@
{ \@@_path_grid_auxii:nnnnnn {#1} {#2} {#5} {#4} {#3} {#6} }
{ \@@_path_grid_auxii:nnnnnn {#1} {#2} {#3} {#4} {#5} {#6} }
}
-\cs_generate_variant:Nn \@@_path_grid_auxi:nnnnnn { ff }
+\cs_generate_variant:Nn \@@_path_grid_auxi:nnnnnn { ee }
\cs_new_protected:Npn \@@_path_grid_auxii:nnnnnn #1#2#3#4#5#6
{
\dim_compare:nNnTF {#4} > {#6}
@@ -786,7 +786,7 @@
}
\cs_new_protected:Npn \@@_path_grid_auxiii:nnnnnn #1#2#3#4#5#6
{
- \@@_path_grid_auxiv:ffnnnnnn
+ \@@_path_grid_auxiv:eennnnnn
{ \fp_to_dim:n { #1 * trunc(#3/(#1)) } }
{ \fp_to_dim:n { #2 * trunc(#4/(#2)) } }
{#1} {#2} {#3} {#4} {#5} {#6}
@@ -810,7 +810,7 @@
\draw_path_lineto:n { #7 , ##1 }
}
}
-\cs_generate_variant:Nn \@@_path_grid_auxiv:nnnnnnnn { ff }
+\cs_generate_variant:Nn \@@_path_grid_auxiv:nnnnnnnn { ee }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -864,7 +864,7 @@
\@@_path_reset_limits:
}
{ \@@_path_use:n { #1 , clear } }
- }
+ }
% \end{macrocode}
% Map over the actions and set up the data: mainly just booleans,
% but with the possibility to cover more complex cases. The business end
diff --git a/macros/latex/contrib/l3experimental/l3draw-points.dtx b/macros/latex/contrib/l3experimental/l3draw-points.dtx
index f722873237..19e69d4b38 100644
--- a/macros/latex/contrib/l3experimental/l3draw-points.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-points.dtx
@@ -2,7 +2,7 @@
%
%% File: l3draw-points.dtx
%
-% Copyright (C) 2018-2023 The LaTeX Project
+% Copyright (C) 2018-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-08}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -70,10 +70,10 @@
% \item \cs{pgfpointadd}, \cs{pgfpointdiff},
% \cs{pgfpointscale}: Can be given explicitly.
% \item \cs{pgfextractx}, \cs{pgfextracty}: Available by applying
-% \cs{use_i:nn}/\cs{use_ii:nn} or similar to the \texttt{x}-type
+% \cs{use_i:nn}/\cs{use_ii:nn} or similar to the \texttt{e}-type
% expansion of a point expression.
% \item \cs{pgfgetlastxy}: Unused in the entire \pkg{pgf} core, may be
-% emulated by \texttt{x}-type expansion of a point expression, then using
+% emulated by \texttt{e}-type expansion of a point expression, then using
% the result.
% \end{itemize}
% In addition, equivalents of the following \emph{may} be added in future but
@@ -93,16 +93,18 @@
% \subsection{Support functions}
%
% \begin{macro}[EXP]{\@@_point_process:nn}
-% \begin{macro}[EXP]{\@@_point_process_auxi:nn}
+% \begin{macro}[EXP]{\@@_point_process_auxi:nn, \@@_point_process_auxi:en}
% \begin{macro}[EXP]{\@@_point_process_auxii:nw}
% \begin{macro}[EXP]{\@@_point_process:nnn}
-% \begin{macro}[EXP]{\@@_point_process_auxiii:nnn}
+% \begin{macro}[EXP]{\@@_point_process_auxiii:nnn, \@@_point_process_auxiii:een}
% \begin{macro}[EXP]{\@@_point_process_auxiv:nw}
% \begin{macro}[EXP]{\@@_point_process:nnnn}
-% \begin{macro}[EXP]{\@@_point_process_auxv:nnnn}
+% \begin{macro}[EXP]
+% {\@@_point_process_auxv:nnnn, \@@_point_process_auxv:eeen}
% \begin{macro}[EXP]{\@@_point_process_auxvi:nw}
% \begin{macro}[EXP]{\@@_point_process:nnnnn}
-% \begin{macro}[EXP]{\@@_point_process_auxvii:nnnnn}
+% \begin{macro}[EXP]
+% {\@@_point_process_auxvii:nnnnn, \@@_point_process_auxvii:eeeen}
% \begin{macro}[EXP]{\@@_point_process_auxviii:nw}
% Execute whatever code is passed to extract the $x$ and $y$ co-ordinates.
% The first argument here should itself absorb two arguments. There is
@@ -111,28 +113,30 @@
% \begin{macrocode}
\cs_new:Npn \@@_point_process:nn #1#2
{
- \exp_args:Nf \@@_point_process_auxi:nn
+ \@@_point_process_auxi:en
{ \draw_point:n {#2} }
{#1}
}
\cs_new:Npn \@@_point_process_auxi:nn #1#2
{ \@@_point_process_auxii:nw {#2} #1 \s_@@_stop }
+\cs_generate_variant:Nn \@@_point_process_auxi:nn { e }
\cs_new:Npn \@@_point_process_auxii:nw #1 #2 , #3 \s_@@_stop
{ #1 {#2} {#3} }
\cs_new:Npn \@@_point_process:nnn #1#2#3
{
- \exp_args:Nff \@@_point_process_auxiii:nnn
+ \@@_point_process_auxiii:een
{ \draw_point:n {#2} }
{ \draw_point:n {#3} }
{#1}
}
\cs_new:Npn \@@_point_process_auxiii:nnn #1#2#3
{ \@@_point_process_auxiv:nw {#3} #1 \s_@@_mark #2 \s_@@_stop }
+\cs_generate_variant:Nn \@@_point_process_auxiii:nnn { ee }
\cs_new:Npn \@@_point_process_auxiv:nw #1 #2 , #3 \s_@@_mark #4 , #5 \s_@@_stop
{ #1 {#2} {#3} {#4} {#5} }
\cs_new:Npn \@@_point_process:nnnn #1#2#3#4
{
- \exp_args:Nfff \@@_point_process_auxv:nnnn
+ \@@_point_process_auxv:eeen
{ \draw_point:n {#2} }
{ \draw_point:n {#3} }
{ \draw_point:n {#4} }
@@ -140,12 +144,13 @@
}
\cs_new:Npn \@@_point_process_auxv:nnnn #1#2#3#4
{ \@@_point_process_auxvi:nw {#4} #1 \s_@@_mark #2 \s_@@_mark #3 \s_@@_stop }
+\cs_generate_variant:Nn \@@_point_process_auxv:nnnn { eee }
\cs_new:Npn \@@_point_process_auxvi:nw
#1 #2 , #3 \s_@@_mark #4 , #5 \s_@@_mark #6 , #7 \s_@@_stop
{ #1 {#2} {#3} {#4} {#5} {#6} {#7} }
\cs_new:Npn \@@_point_process:nnnnn #1#2#3#4#5
{
- \exp_args:Nffff \@@_point_process_auxvii:nnnnn
+ \@@_point_process_auxvii:eeeen
{ \draw_point:n {#2} }
{ \draw_point:n {#3} }
{ \draw_point:n {#4} }
@@ -157,6 +162,7 @@
\@@_point_process_auxviii:nw
{#5} #1 \s_@@_mark #2 \s_@@_mark #3 \s_@@_mark #4 \s_@@_stop
}
+\cs_generate_variant:Nn \@@_point_process_auxvii:nnnnn { eeee }
\cs_new:Npn \@@_point_process_auxviii:nw
#1 #2 , #3 \s_@@_mark #4 , #5 \s_@@_mark #6 , #7 \s_@@_mark #8 , #9 \s_@@_stop
{ #1 {#2} {#3} {#4} {#5} {#6} {#7} {#8} {#9} }
@@ -177,15 +183,15 @@
% \subsection{Basic points}
%
% \begin{macro}[EXP]{\draw_point:n}
-% \begin{macro}[EXP]{\@@_point_to_dim:n, \@@_point_to_dim:f}
+% \begin{macro}[EXP]{\@@_point_to_dim:n, \@@_point_to_dim:e}
% \begin{macro}[EXP]{\@@_point_to_dim:w}
% Co-ordinates are always returned as two dimensions.
% \begin{macrocode}
\cs_new:Npn \draw_point:n #1
- { \@@_point_to_dim:f { \fp_eval:n {#1} } }
+ { \@@_point_to_dim:e { \fp_eval:n {#1} } }
\cs_new:Npn \@@_point_to_dim:n #1
{ \@@_point_to_dim:w #1 }
-\cs_generate_variant:Nn \@@_point_to_dim:n { f }
+\cs_generate_variant:Nn \@@_point_to_dim:n { e }
\cs_new:Npn \@@_point_to_dim:w ( #1 , ~ #2 ) { #1pt , #2pt }
% \end{macrocode}
% \end{macro}
@@ -195,7 +201,7 @@
%
% \begin{macro}[EXP]{\draw_point_polar:nn}
% \begin{macro}[EXP]{\draw_point_polar:nnn}
-% \begin{macro}[EXP]{\@@_draw_polar:nnn, \@@_draw_polar:fnn}
+% \begin{macro}[EXP]{\@@_draw_polar:nnn, \@@_draw_polar:enn}
% Polar co-ordinates may have either one or two lengths, so there is a need
% to do a simple split before the calculation. As the angle gets used twice,
% save on any expression evaluation there and force expansion.
@@ -203,10 +209,10 @@
\cs_new:Npn \draw_point_polar:nn #1#2
{ \draw_point_polar:nnn {#1} {#1} {#2} }
\cs_new:Npn \draw_point_polar:nnn #1#2#3
- { \@@_draw_polar:fnn { \fp_eval:n {#3} } {#1} {#2} }
+ { \@@_draw_polar:enn { \fp_eval:n {#3} } {#1} {#2} }
\cs_new:Npn \@@_draw_polar:nnn #1#2#3
{ \draw_point:n { cosd(#1) * (#2) , sind(#1) * (#3) } }
-\cs_generate_variant:Nn \@@_draw_polar:nnn { f }
+\cs_generate_variant:Nn \@@_draw_polar:nnn { e }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -218,7 +224,7 @@
%
% \begin{macro}[EXP]{\draw_point_unit_vector:n}
% \begin{macro}[EXP]{\@@_point_unit_vector:nn}
-% \begin{macro}[EXP]{\@@_point_unit_vector:nnn}
+% \begin{macro}[EXP]{\@@_point_unit_vector:nnn, \@@_point_unit_vector:enn}
% The outcome is the normalised vector from $(0,0)$ in the direction of
% the point, \emph{i.e.}
% \[
@@ -232,7 +238,7 @@
{ \@@_point_process:nn { \@@_point_unit_vector:nn } {#1} }
\cs_new:Npn \@@_point_unit_vector:nn #1#2
{
- \exp_args:Nf \@@_point_unit_vector:nnn
+ \@@_point_unit_vector:nnn
{ \fp_eval:n { (sqrt(#1 * #1 + #2 * #2)) } }
{#1} {#2}
}
@@ -245,6 +251,7 @@
{ ( #2 , #3 ) / #1 }
}
}
+\cs_generate_variant:Nn \@@_point_unit_vector:nnn { e }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -256,7 +263,7 @@
% \begin{macro}[EXP]{\@@_point_intersect_lines:nnnnnn}
% \begin{macro}[EXP]{\@@_point_intersect_lines:nnnnnnnn}
% \begin{macro}[EXP]
-% {\@@_point_intersect_lines_aux:nnnnnn, \@@_point_intersect_lines_aux:ffffff}
+% {\@@_point_intersect_lines_aux:nnnnnn, \@@_point_intersect_lines_aux:eeeeee}
% The intersection point~$P$ between a line joining points $(x_{1}, y_{1})$
% and $(x_{2}, y_{2})$ with a second line joining points $(x_{3}, y_{3})$
% and $(x_{4}, y_{4})$ can be calculated using the formulae
@@ -300,7 +307,7 @@
% \begin{macrocode}
\cs_new:Npn \@@_point_intersect_lines:nnnnnnnn #1#2#3#4#5#6#7#8
{
- \@@_point_intersect_lines_aux:ffffff
+ \@@_point_intersect_lines_aux:eeeeee
{ \fp_eval:n { #1 * #4 - #2 * #3 } }
{ \fp_eval:n { #5 * #8 - #6 * #7 } }
{ \fp_eval:n { #1 - #3 } }
@@ -316,7 +323,7 @@
/ ( #4 * #5 - #6 * #3 )
}
}
-\cs_generate_variant:Nn \@@_point_intersect_lines_aux:nnnnnn { ffffff }
+\cs_generate_variant:Nn \@@_point_intersect_lines_aux:nnnnnn { eeeeee }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -328,29 +335,29 @@
% \begin{macro}[EXP]
% {
% \@@_point_intersect_circles_auxii:nnnnnnn,
-% \@@_point_intersect_circles_auxii:ffnnnnn,
+% \@@_point_intersect_circles_auxii:eennnnn,
% \@@_point_intersect_circles_auxiii:nnnnnnn,
-% \@@_point_intersect_circles_auxiii:ffnnnnn
+% \@@_point_intersect_circles_auxiii:eennnnn
% }
% \begin{macro}[EXP]
% {
% \@@_point_intersect_circles_auxiv:nnnnnnnn,
-% \@@_point_intersect_circles_auxiv:fnnnnnnn
+% \@@_point_intersect_circles_auxiv:ennnnnnn
% }
% \begin{macro}[EXP]
% {
% \@@_point_intersect_circles_auxv:nnnnnnnnn,
-% \@@_point_intersect_circles_auxv:ffnnnnnnn
+% \@@_point_intersect_circles_auxv:eennnnnnn
% }
% \begin{macro}[EXP]
% {
% \@@_point_intersect_circles_auxvi:nnnnnnnn,
-% \@@_point_intersect_circles_auxvi:fnnnnnnn
+% \@@_point_intersect_circles_auxvi:ennnnnnn
% }
% \begin{macro}[EXP]
% {
% \@@_point_intersect_circles_auxvii:nnnnnnn,
-% \@@_point_intersect_circles_auxvii:fffnnnn
+% \@@_point_intersect_circles_auxvii:eeennnn
% }
% Another long expansion chain to get the values in the right places.
% We have two circles, the first with center $(a, b)$ and radius~$r$,
@@ -383,7 +390,7 @@
}
\cs_new:Npn \@@_point_intersect_circles_auxi:nnnnnnn #1#2#3#4#5#6#7
{
- \@@_point_intersect_circles_auxii:ffnnnnn
+ \@@_point_intersect_circles_auxii:eennnnn
{ \fp_eval:n {#1} } { \fp_eval:n {#2} } {#4} {#5} {#6} {#7} {#3}
}
% \end{macrocode}
@@ -403,19 +410,19 @@
% \begin{macrocode}
\cs_new:Npn \@@_point_intersect_circles_auxii:nnnnnnn #1#2#3#4#5#6#7
{
- \@@_point_intersect_circles_auxiii:ffnnnnn
+ \@@_point_intersect_circles_auxiii:eennnnn
{ \fp_eval:n { #5 - #3 } }
{ \fp_eval:n { #6 - #4 } }
{#1} {#2} {#3} {#4} {#7}
}
-\cs_generate_variant:Nn \@@_point_intersect_circles_auxii:nnnnnnn { ff }
+\cs_generate_variant:Nn \@@_point_intersect_circles_auxii:nnnnnnn { ee }
\cs_new:Npn \@@_point_intersect_circles_auxiii:nnnnnnn #1#2#3#4#5#6#7
{
- \@@_point_intersect_circles_auxiv:fnnnnnnn
+ \@@_point_intersect_circles_auxiv:ennnnnnn
{ \fp_eval:n { sqrt( #1 * #1 + #2 * #2 ) } }
{#1} {#2} {#3} {#4} {#5} {#6} {#7}
}
-\cs_generate_variant:Nn \@@_point_intersect_circles_auxiii:nnnnnnn { ff }
+\cs_generate_variant:Nn \@@_point_intersect_circles_auxiii:nnnnnnn { ee }
% \end{macrocode}
% We now have $p$: we pre-calculate $1/p$ as it is needed a few times and
% is relatively expensive. We also need $r^{2}$ twice so deal with that
@@ -423,19 +430,19 @@
% \begin{macrocode}
\cs_new:Npn \@@_point_intersect_circles_auxiv:nnnnnnnn #1#2#3#4#5#6#7#8
{
- \@@_point_intersect_circles_auxv:ffnnnnnnn
+ \@@_point_intersect_circles_auxv:eennnnnnn
{ \fp_eval:n { 1 / #1 } }
{ \fp_eval:n { #4 * #4 } }
{#1} {#2} {#3} {#5} {#6} {#7} {#8}
}
-\cs_generate_variant:Nn \@@_point_intersect_circles_auxiv:nnnnnnnn { f }
+\cs_generate_variant:Nn \@@_point_intersect_circles_auxiv:nnnnnnnn { e }
\cs_new:Npn \@@_point_intersect_circles_auxv:nnnnnnnnn #1#2#3#4#5#6#7#8#9
{
- \@@_point_intersect_circles_auxvi:fnnnnnnn
+ \@@_point_intersect_circles_auxvi:ennnnnnn
{ \fp_eval:n { 0.5 * #1 * ( #2 + #3 * #3 - #6 * #6 ) } }
{#1} {#2} {#4} {#5} {#7} {#8} {#9}
}
-\cs_generate_variant:Nn \@@_point_intersect_circles_auxv:nnnnnnnnn { ff }
+\cs_generate_variant:Nn \@@_point_intersect_circles_auxv:nnnnnnnnn { ee }
% \end{macrocode}
% We now have all of the intermediate values we require, with one division
% carried out up-front to avoid doing this expensive step twice:
@@ -455,19 +462,19 @@
% \begin{macrocode}
\cs_new:Npn \@@_point_intersect_circles_auxvi:nnnnnnnn #1#2#3#4#5#6#7#8
{
- \@@_point_intersect_circles_auxvii:fffnnnn
+ \@@_point_intersect_circles_auxvii:eeennnn
{ \fp_eval:n { #1 * #2 } }
{ \int_if_odd:nTF {#8} { 1 } { -1 } }
{ \fp_eval:n { sqrt ( #3 - #1 * #1 ) * #2 } }
{#4} {#5} {#6} {#7}
}
-\cs_generate_variant:Nn \@@_point_intersect_circles_auxvi:nnnnnnnn { f }
+\cs_generate_variant:Nn \@@_point_intersect_circles_auxvi:nnnnnnnn { e }
\cs_new:Npn \@@_point_intersect_circles_auxvii:nnnnnnn #1#2#3#4#5#6#7
{
\draw_point:n
{ #6 + #4 * #1 + #2 * #3 * #5 , #7 + #5 * #1 + -1 * #2 * #3 * #4 }
}
-\cs_generate_variant:Nn \@@_point_intersect_circles_auxvii:nnnnnnn { fff }
+\cs_generate_variant:Nn \@@_point_intersect_circles_auxvii:nnnnnnn { eee }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -482,19 +489,19 @@
% \begin{macro}[EXP]
% {
% \@@_point_intersect_line_circle_auxii:nnnnnnnn,
-% \@@_point_intersect_line_circle_auxii:fnnnnnnn,
+% \@@_point_intersect_line_circle_auxii:ennnnnnn,
% \@@_point_intersect_line_circle_auxiii:nnnnnnnn,
-% \@@_point_intersect_line_circle_auxiii:fffnnnnn
+% \@@_point_intersect_line_circle_auxiii:eeennnnn
% }
% \begin{macro}[EXP]
% {
% \@@_point_intersect_line_circle_auxiv:nnnnnnnn,
-% \@@_point_intersect_line_circle_auxiv:ffnnnnnn
+% \@@_point_intersect_line_circle_auxiv:eennnnnn
% }
% \begin{macro}[EXP]
% {
% \@@_point_intersect_line_circle_auxv:nnnnn,
-% \@@_point_intersect_line_circle_auxv:fnnnn
+% \@@_point_intersect_line_circle_auxv:ennnn
% }
% The intersection points~$P_{1}$ and~$P_{2}$ between
% a line joining points $(x_{1}, y_{1})$ and $(x_{2}, y_{2})$
@@ -531,7 +538,7 @@
}
\cs_new:Npn \@@_point_intersect_line_circle_auxi:nnnnnnnn #1#2#3#4#5#6#7#8
{
- \@@_point_intersect_line_circle_auxii:fnnnnnnn
+ \@@_point_intersect_line_circle_auxii:ennnnnnn
{ \fp_eval:n {#1} } {#3} {#4} {#5} {#6} {#7} {#8} {#2}
}
% \end{macrocode}
@@ -552,24 +559,24 @@
% \begin{macrocode}
\cs_new:Npn \@@_point_intersect_line_circle_auxii:nnnnnnnn #1#2#3#4#5#6#7#8
{
- \@@_point_intersect_line_circle_auxiii:fffnnnnn
+ \@@_point_intersect_line_circle_auxiii:eeennnnn
{ \fp_eval:n { (#4-#2)*(#4-#2)+(#5-#3)*(#5-#3) } }
{ \fp_eval:n { 2*((#4-#2)*(#2-#6)+(#5-#3)*(#3-#7)) } }
{ \fp_eval:n { (#6*#6+#7*#7)+(#2*#2+#3*#3)-(2*(#6*#2+#7*#3))-(#1*#1) } }
{#2} {#3} {#4} {#5} {#8}
}
-\cs_generate_variant:Nn \@@_point_intersect_line_circle_auxii:nnnnnnnn { f }
+\cs_generate_variant:Nn \@@_point_intersect_line_circle_auxii:nnnnnnnn { e }
% \end{macrocode}
% then we can get $d = b^{2} - 4\times a \times c$ and the usage of $n$.
% \begin{macrocode}
\cs_new:Npn \@@_point_intersect_line_circle_auxiii:nnnnnnnn #1#2#3#4#5#6#7#8
{
- \@@_point_intersect_line_circle_auxiv:ffnnnnnn
+ \@@_point_intersect_line_circle_auxiv:eennnnnn
{ \fp_eval:n { #2 * #2 - 4 * #1 * #3 } }
{ \int_if_odd:nTF {#8} { 1 } { -1 } }
{#1} {#2} {#4} {#5} {#6} {#7}
}
-\cs_generate_variant:Nn \@@_point_intersect_line_circle_auxiii:nnnnnnnn { fff }
+\cs_generate_variant:Nn \@@_point_intersect_line_circle_auxiii:nnnnnnnn { eee }
% \end{macrocode}
% We now have all of the intermediate values we require, with one division
% carried out up-front to avoid doing this expensive step twice:
@@ -590,17 +597,17 @@
% \begin{macrocode}
\cs_new:Npn \@@_point_intersect_line_circle_auxiv:nnnnnnnn #1#2#3#4#5#6#7#8
{
- \@@_point_intersect_line_circle_auxv:fnnnn
+ \@@_point_intersect_line_circle_auxv:ennnn
{ \fp_eval:n { (-1 * #4 + #2 * sqrt(#1)) / (2 * #3) } }
{#5} {#6} {#7} {#8}
}
-\cs_generate_variant:Nn \@@_point_intersect_line_circle_auxiv:nnnnnnnn { ff }
+\cs_generate_variant:Nn \@@_point_intersect_line_circle_auxiv:nnnnnnnn { ee }
\cs_new:Npn \@@_point_intersect_line_circle_auxv:nnnnn #1#2#3#4#5
{
\draw_point:n
{ #2 + #1 * (#4 - #2), #3 + #1 * (#5 - #3) }
}
-\cs_generate_variant:Nn \@@_point_intersect_line_circle_auxv:nnnnn { f }
+\cs_generate_variant:Nn \@@_point_intersect_line_circle_auxv:nnnnn { e }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -614,30 +621,30 @@
% \begin{macro}[EXP]
% {
% \@@_point_interpolate_line_aux:nnnnn,
-% \@@_point_interpolate_line_aux:fnnnn,
+% \@@_point_interpolate_line_aux:ennnn,
% }
% \begin{macro}[EXP]
% {
% \@@_point_interpolate_line_aux:nnnnnn,
-% \@@_point_interpolate_line_aux:fnnnnn,
+% \@@_point_interpolate_line_aux:ennnnn,
% }
% Simple maths after expansion.
% \begin{macrocode}
\cs_new:Npn \draw_point_interpolate_line:nnn #1#2#3
{
\@@_point_process:nnn
- { \@@_point_interpolate_line_aux:fnnnn { \fp_eval:n {#1} } }
+ { \@@_point_interpolate_line_aux:ennnn { \fp_eval:n {#1} } }
{#2} {#3}
}
\cs_new:Npn \@@_point_interpolate_line_aux:nnnnn #1#2#3#4#5
{
- \@@_point_interpolate_line_aux:fnnnnn { \fp_eval:n { 1 - #1 } }
+ \@@_point_interpolate_line_aux:ennnnn { \fp_eval:n { 1 - #1 } }
{#1} {#2} {#3} {#4} {#5}
}
-\cs_generate_variant:Nn \@@_point_interpolate_line_aux:nnnnn { f }
+\cs_generate_variant:Nn \@@_point_interpolate_line_aux:nnnnn { e }
\cs_new:Npn \@@_point_interpolate_line_aux:nnnnnn #1#2#3#4#5#6
{ \draw_point:n { #2 * #3 + #1 * #5 , #2 * #4 + #1 * #6 } }
-\cs_generate_variant:Nn \@@_point_interpolate_line_aux:nnnnnn { f }
+\cs_generate_variant:Nn \@@_point_interpolate_line_aux:nnnnnn { e }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -648,7 +655,7 @@
% \begin{macro}[EXP]
% {
% \@@_point_interpolate_distance:nnnnnn,
-% \@@_point_interpolate_distance:fnnnnn,
+% \@@_point_interpolate_distance:ennnnn,
% }
% Same idea but using the normalised length to obtain the scale factor.
% The start point is needed twice, so we force evaluation, but the end
@@ -664,14 +671,14 @@
{
\@@_point_process:nn
{
- \@@_point_interpolate_distance:fnnnn
+ \@@_point_interpolate_distance:ennnn
{ \fp_eval:n {#1} } {#3} {#4}
}
{ \draw_point_unit_vector:n { ( #2 ) - ( #3 , #4 ) } }
}
\cs_new:Npn \@@_point_interpolate_distance:nnnnn #1#2#3#4#5
{ \draw_point:n { #2 + #1 * #4 , #3 + #1 * #5 } }
-\cs_generate_variant:Nn \@@_point_interpolate_distance:nnnnn { f }
+\cs_generate_variant:Nn \@@_point_interpolate_distance:nnnnn { e }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -683,17 +690,17 @@
% \begin{macro}[EXP]
% {
% \@@_point_interpolate_arcaxes_auxii:nnnnnnnnn,
-% \@@_point_interpolate_arcaxes_auxii:fnnnnnnnn
+% \@@_point_interpolate_arcaxes_auxii:ennnnnnnn
% }
% \begin{macro}[EXP]
% {
% \@@_point_interpolate_arcaxes_auxiii:nnnnnnn,
-% \@@_point_interpolate_arcaxes_auxiii:fnnnnnn
+% \@@_point_interpolate_arcaxes_auxiii:ennnnnn
% }
% \begin{macro}[EXP]
% {
% \@@_point_interpolate_arcaxes_auxiv:nnnnnnnn,
-% \@@_point_interpolate_arcaxes_auxiv:ffnnnnnn
+% \@@_point_interpolate_arcaxes_auxiv:eennnnnn
% }
% Finding a point on an ellipse arc is relatively easy: find the correct
% angle between the two given, use the sine and cosine of that angle,
@@ -708,7 +715,7 @@
}
\cs_new:Npn \@@_point_interpolate_arcaxes_auxi:nnnnnnnnn #1#2#3#4#5#6#7#8#9
{
- \@@_point_interpolate_arcaxes_auxii:fnnnnnnnn
+ \@@_point_interpolate_arcaxes_auxii:ennnnnnnn
{ \fp_eval:n {#1} } {#2} {#3} {#4} {#5} {#6} {#7} {#8} {#9}
}
% \end{macrocode}
@@ -730,25 +737,25 @@
% \begin{macrocode}
\cs_new:Npn \@@_point_interpolate_arcaxes_auxii:nnnnnnnnn #1#2#3#4#5#6#7#8#9
{
- \@@_point_interpolate_arcaxes_auxiii:fnnnnnn
+ \@@_point_interpolate_arcaxes_auxiii:ennnnnn
{ \fp_eval:n { #1 * (#3) + ( 1 - #1 ) * (#2) } }
{#4} {#5} {#6} {#7} {#8} {#9}
}
-\cs_generate_variant:Nn \@@_point_interpolate_arcaxes_auxii:nnnnnnnnn { f }
+\cs_generate_variant:Nn \@@_point_interpolate_arcaxes_auxii:nnnnnnnnn { e }
\cs_new:Npn \@@_point_interpolate_arcaxes_auxiii:nnnnnnn #1#2#3#4#5#6#7
{
- \@@_point_interpolate_arcaxes_auxiv:ffnnnnnn
+ \@@_point_interpolate_arcaxes_auxiv:eennnnnn
{ \fp_eval:n { cosd (#1) } }
{ \fp_eval:n { sind (#1) } }
{#2} {#3} {#4} {#5} {#6} {#7}
}
-\cs_generate_variant:Nn \@@_point_interpolate_arcaxes_auxiii:nnnnnnn { f }
+\cs_generate_variant:Nn \@@_point_interpolate_arcaxes_auxiii:nnnnnnn { e }
\cs_new:Npn \@@_point_interpolate_arcaxes_auxiv:nnnnnnnn #1#2#3#4#5#6#7#8
{
\draw_point:n
{ #3 + #1 * #5 + #2 * #7 , #4 + #1 * #6 + #2 * #8 }
}
-\cs_generate_variant:Nn \@@_point_interpolate_arcaxes_auxiv:nnnnnnnn { ff }
+\cs_generate_variant:Nn \@@_point_interpolate_arcaxes_auxiv:nnnnnnnn { ee }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -761,25 +768,25 @@
% \begin{macro}[EXP]
% {
% \draw_point_interpolate_curve_auxii:nnnnnnnnn,
-% \draw_point_interpolate_curve_auxii:fnnnnnnnn,
+% \draw_point_interpolate_curve_auxii:ennnnnnnn,
% }
% \begin{macro}[EXP]
% {
% \draw_point_interpolate_curve_auxiii:nnnnnn,
-% \draw_point_interpolate_curve_auxiii:fnnnnn,
+% \draw_point_interpolate_curve_auxiii:ennnnn,
% }
% \begin{macro}[EXP]{\draw_point_interpolate_curve_auxiv:nnnnnn}
% \begin{macro}[EXP]
% {
% \draw_point_interpolate_curve_auxv:nnw,
-% \draw_point_interpolate_curve_auxv:ffw,
+% \draw_point_interpolate_curve_auxv:eew,
% }
% \begin{macro}[EXP]{\draw_point_interpolate_curve_auxvi:n}
% \begin{macro}[EXP]{\draw_point_interpolate_curve_auxvii:nnnnnnnn}
% \begin{macro}[EXP]
% {
% \draw_point_interpolate_curve_auxviii:nnnnnn,
-% \draw_point_interpolate_curve_auxviii:ffnnnn,
+% \draw_point_interpolate_curve_auxviii:eennnn,
% }
% Here we start with a proportion of the curve ($p$) and four points
% \begin{enumerate}
@@ -798,7 +805,7 @@
}
\cs_new:Npn \@@_point_interpolate_curve_auxi:nnnnnnnnn #1#2#3#4#5#6#7#8#9
{
- \@@_point_interpolate_curve_auxii:fnnnnnnnn
+ \@@_point_interpolate_curve_auxii:ennnnnnnn
{ \fp_eval:n {#1} }
{#2} {#3} {#4} {#5} {#6} {#7} {#8} {#9}
}
@@ -831,15 +838,15 @@
\cs_new:Npn \@@_point_interpolate_curve_auxii:nnnnnnnnn
#1#2#3#4#5#6#7#8#9
{
- \@@_point_interpolate_curve_auxiii:fnnnnn
+ \@@_point_interpolate_curve_auxiii:ennnnn
{ \fp_eval:n { 1 - #1 } }
{#1}
{ {#2} {#3} } { {#4} {#5} } { {#6} {#7} } { {#8} {#9} }
}
-\cs_generate_variant:Nn \@@_point_interpolate_curve_auxii:nnnnnnnnn { f }
+\cs_generate_variant:Nn \@@_point_interpolate_curve_auxii:nnnnnnnnn { e }
% \begin{macrocode}
% We need to do the first cycle, but haven't got enough arguments to keep
-% everything in play at once. So her ewe use a but of argument re-ordering
+% everything in play at once. So here we use a bit of argument re-ordering
% and a single auxiliary to get the job done.
% \begin{macrocode}
\cs_new:Npn \@@_point_interpolate_curve_auxiii:nnnnnn #1#2#3#4#5#6
@@ -850,10 +857,10 @@
\prg_do_nothing:
\@@_point_interpolate_curve_auxvi:n { {#1} {#2} }
}
-\cs_generate_variant:Nn \@@_point_interpolate_curve_auxiii:nnnnnn { f }
+\cs_generate_variant:Nn \@@_point_interpolate_curve_auxiii:nnnnnn { e }
\cs_new:Npn \@@_point_interpolate_curve_auxiv:nnnnnn #1#2#3#4#5#6
{
- \@@_point_interpolate_curve_auxv:ffw
+ \@@_point_interpolate_curve_auxv:eew
{ \fp_eval:n { #1 * #3 + #2 * #5 } }
{ \fp_eval:n { #1 * #4 + #2 * #6 } }
}
@@ -864,7 +871,7 @@
\prg_do_nothing:
#4 { #5 {#1} {#2} }
}
-\cs_generate_variant:Nn \@@_point_interpolate_curve_auxv:nnw { ff }
+\cs_generate_variant:Nn \@@_point_interpolate_curve_auxv:nnw { ee }
% \begin{macrocode}
% Get the arguments back into the right places and to the second and
% third cycles directly.
@@ -873,7 +880,7 @@
{ \@@_point_interpolate_curve_auxvii:nnnnnnnn #1 }
\cs_new:Npn \@@_point_interpolate_curve_auxvii:nnnnnnnn #1#2#3#4#5#6#7#8
{
- \@@_point_interpolate_curve_auxviii:ffffnn
+ \@@_point_interpolate_curve_auxviii:eeeenn
{ \fp_eval:n { #1 * #5 + #2 * #3 } }
{ \fp_eval:n { #1 * #6 + #2 * #4 } }
{ \fp_eval:n { #1 * #7 + #2 * #5 } }
@@ -885,7 +892,7 @@
\draw_point:n
{ #5 * #3 + #6 * #1 , #5 * #4 + #6 * #2 }
}
-\cs_generate_variant:Nn \@@_point_interpolate_curve_auxviii:nnnnnn { ffff }
+\cs_generate_variant:Nn \@@_point_interpolate_curve_auxviii:nnnnnn { eeee }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -954,14 +961,14 @@
% \end{macrocode}
%
% \begin{macro}[EXP]{\draw_point_vec:nn}
-% \begin{macro}[EXP]{\@@_point_vec:nn, \@@_point_vec:ff}
+% \begin{macro}[EXP]{\@@_point_vec:nn, \@@_point_vec:ee}
% \begin{macro}[EXP]{\draw_point_vec:nnn}
-% \begin{macro}[EXP]{\@@_point_vec:nnn, \@@_point_vec:fff}
+% \begin{macro}[EXP]{\@@_point_vec:nnn, \@@_point_vec:eee}
% Force a single evaluation of each factor, then use these to work out the
% underlying point.
% \begin{macrocode}
\cs_new:Npn \draw_point_vec:nn #1#2
- { \@@_point_vec:ff { \fp_eval:n {#1} } { \fp_eval:n {#2} } }
+ { \@@_point_vec:ee { \fp_eval:n {#1} } { \fp_eval:n {#2} } }
\cs_new:Npn \@@_point_vec:nn #1#2
{
\draw_point:n
@@ -970,26 +977,26 @@
#1 * \l_@@_xvec_y_dim + #2 * \l_@@_yvec_y_dim
}
}
-\cs_generate_variant:Nn \@@_point_vec:nn { ff }
+\cs_generate_variant:Nn \@@_point_vec:nn { ee }
\cs_new:Npn \draw_point_vec:nnn #1#2#3
{
- \@@_point_vec:fff
+ \@@_point_vec:eee
{ \fp_eval:n {#1} } { \fp_eval:n {#2} } { \fp_eval:n {#3} }
}
\cs_new:Npn \@@_point_vec:nnn #1#2#3
{
\draw_point:n
{
- #1 * \l_@@_xvec_x_dim
- + #2 * \l_@@_yvec_x_dim
- + #3 * \l_@@_zvec_x_dim
+ #1 * \l_@@_xvec_x_dim
+ + #2 * \l_@@_yvec_x_dim
+ + #3 * \l_@@_zvec_x_dim
,
#1 * \l_@@_xvec_y_dim
+ #2 * \l_@@_yvec_y_dim
+ #3 * \l_@@_zvec_y_dim
}
}
-\cs_generate_variant:Nn \@@_point_vec:nnn { fff }
+\cs_generate_variant:Nn \@@_point_vec:nnn { eee }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -998,22 +1005,22 @@
%
% \begin{macro}[EXP]{\draw_point_vec_polar:nn}
% \begin{macro}[EXP]{\draw_point_vec_polar:nnn}
-% \begin{macro}[EXP]{\@@_point_vec_polar:nnn, \@@_point_vec_polar:fnn}
+% \begin{macro}[EXP]{\@@_point_vec_polar:nnn, \@@_point_vec_polar:enn}
% Much the same as the core polar approach.
% \begin{macrocode}
\cs_new:Npn \draw_point_vec_polar:nn #1#2
{ \draw_point_vec_polar:nnn {#1} {#1} {#2} }
\cs_new:Npn \draw_point_vec_polar:nnn #1#2#3
- { \@@_draw_vec_polar:fnn { \fp_eval:n {#3} } {#1} {#2} }
+ { \@@_draw_vec_polar:enn { \fp_eval:n {#3} } {#1} {#2} }
\cs_new:Npn \@@_draw_vec_polar:nnn #1#2#3
{
\draw_point:n
{
cosd(#1) * (#2) * \l_@@_xvec_x_dim ,
sind(#1) * (#3) * \l_@@_yvec_y_dim
- }
+ }
}
-\cs_generate_variant:Nn \@@_draw_vec_polar:nnn { f }
+\cs_generate_variant:Nn \@@_draw_vec_polar:nnn { e }
% \end{macrocode}
% \end{macro}
% \end{macro}
diff --git a/macros/latex/contrib/l3experimental/l3draw-scopes.dtx b/macros/latex/contrib/l3experimental/l3draw-scopes.dtx
index ae8869d6b7..7906bc12e9 100644
--- a/macros/latex/contrib/l3experimental/l3draw-scopes.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-scopes.dtx
@@ -2,7 +2,7 @@
%
%% File: l3draw-scopes.dtx
%
-% Copyright (C) 2018-2023 The LaTeX Project
+% Copyright (C) 2018-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-08}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -210,7 +210,7 @@
{ 0pt }
}
\box_set_ht:Nn \l_@@_main_box
- { \g_@@_ymax_dim + #1 }
+ { \g_@@_ymax_dim - #1 }
}
% \end{macrocode}
% \end{macro}
diff --git a/macros/latex/contrib/l3experimental/l3draw-softpath.dtx b/macros/latex/contrib/l3experimental/l3draw-softpath.dtx
index 56a7c78d9d..0b8f731ca5 100644
--- a/macros/latex/contrib/l3experimental/l3draw-softpath.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-softpath.dtx
@@ -2,7 +2,7 @@
%
%% File: l3draw-softpath.dtx
%
-% Copyright (C) 2018-2023 The LaTeX Project
+% Copyright (C) 2018-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-08}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -109,12 +109,10 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_softpath_use:
{
- \tl_build_gend:N \g_@@_softpath_main_tl
- \tl_set_eq:NN \l_@@_softpath_tmp_tl \g_@@_softpath_main_tl
+ \tl_build_get_intermediate:NN
+ \g_@@_softpath_main_tl
+ \l_@@_softpath_tmp_tl
\l_@@_softpath_tmp_tl
- \tl_build_gbegin:N \g_@@_softpath_main_tl
- \exp_args:NNV \tl_build_gput_right:Nn
- \g_@@_softpath_main_tl \l_@@_softpath_tmp_tl
}
\cs_new_protected:Npn \@@_softpath_clear:
{
@@ -330,7 +328,7 @@
% \begin{macro}{\@@_softpath_round_roundpoint:NnnNnnNnn}
% \begin{macro}{\@@_softpath_round_calc:NnnNnn}
% \begin{macro}[EXP]
-% {\@@_softpath_round_calc:nnnnnn, \@@_softpath_round_calc:fVnnnn}
+% {\@@_softpath_round_calc:nnnnnn, \@@_softpath_round_calc:eVnnnn}
% \begin{macro}[EXP]{\@@_softpath_round_calc:nnnnw}
% \begin{macro}{\@@_softpath_round_close:nn}
% \begin{macro}[EXP]{\@@_softpath_round_close:w}
@@ -509,7 +507,7 @@
\tl_put_right:Ne \l_@@_softpath_part_tl
{
\exp_not:N #4
- \@@_softpath_round_calc:fVnnnn
+ \@@_softpath_round_calc:eVnnnn
{
\draw_point_interpolate_distance:nnn
\l_@@_softpath_corneri_dim
@@ -535,7 +533,7 @@
\@@_softpath_round_calc:nnnnw {#3} {#4} {#5} {#6}
#1 \s_@@_mark #2 \s_@@_stop
}
-\cs_generate_variant:Nn \@@_softpath_round_calc:nnnnnn { fV }
+\cs_generate_variant:Nn \@@_softpath_round_calc:nnnnnn { eV }
% \end{macrocode}
% The calculations themselves are relatively straight-forward, as we use a
% quadratic Bézier curve.
diff --git a/macros/latex/contrib/l3experimental/l3draw-state.dtx b/macros/latex/contrib/l3experimental/l3draw-state.dtx
index c288fe0c58..e3f6dba452 100644
--- a/macros/latex/contrib/l3experimental/l3draw-state.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-state.dtx
@@ -2,7 +2,7 @@
%
%% File: l3draw-state.dtx
%
-% Copyright (C) 2018-2023 The LaTeX Project
+% Copyright (C) 2018-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-08}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-transforms.dtx b/macros/latex/contrib/l3experimental/l3draw-transforms.dtx
index 8115e1c4fc..df9f07af18 100644
--- a/macros/latex/contrib/l3experimental/l3draw-transforms.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-transforms.dtx
@@ -2,7 +2,7 @@
%
%% File: l3draw-transforms.dtx
%
-% Copyright (C) 2018-2023 The LaTeX Project
+% Copyright (C) 2018-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-08}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -154,10 +154,7 @@
{ \@@_transform_shift_absolute:nn } {#1}
}
\cs_new_protected:Npn \@@_transform_shift_absolute:nn #1#2
- {
- \dim_set:Nn \l_@@_xshift_dim {#1}
- \dim_set:Nn \l_@@_yshift_dim {#2}
- }
+ { \@@_transform_shift:nnnn { 0pt } { 0pt } {#1} {#2} }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -199,8 +196,10 @@
}
\cs_new_protected:Npn \@@_transform_shift:nn #1#2
{
- \dim_set:Nn \l_@@_xshift_dim { \l_@@_xshift_dim + #1 }
- \dim_set:Nn \l_@@_yshift_dim { \l_@@_yshift_dim + #2 }
+ \@@_transform_shift:nnnn
+ \l_@@_xshift_dim
+ \l_@@_yshift_dim
+ {#1} {#2}
}
% \end{macrocode}
% \end{macro}
@@ -208,8 +207,35 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\@@_transform_shift:nnnn}
+% Apply the current transformation matrix to the shift, then store
+% the resulting values: we may or may not have a none-zero starting
+% point here.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_transform_shift:nnnn #1#2#3#4
+ {
+ \dim_set:Nn \l_@@_xshift_dim
+ {
+ \fp_to_dim:n
+ {
+ #1 +
+ ( #3 * \l_@@_matrix_a_fp + #4 * \l_@@_matrix_b_fp )
+ }
+ }
+ \dim_set:Nn \l_@@_yshift_dim
+ {
+ \fp_to_dim:n
+ {
+ #2 +
+ ( #3 * \l_@@_matrix_c_fp + #4 * \l_@@_matrix_d_fp )
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\draw_transform_matrix_invert:}
-% \begin{macro}{\@@_transform_invert:n, \@@_transform_invert:f}
+% \begin{macro}{\@@_transform_invert:n, \@@_transform_invert:e}
% \begin{macro}{\draw_transform_shift_invert:}
% Standard mathematics: calculate the inverse matrix and use that, then
% undo the shifts.
@@ -218,7 +244,7 @@
{
\bool_if:NT \l_@@_matrix_active_bool
{
- \@@_transform_invert:f
+ \@@_transform_invert:e
{
\fp_eval:n
{
@@ -242,7 +268,7 @@
\fp_set:Nn \l_@@_matrix_d_fp
{ \l_@@_matrix_a_fp * #1 }
}
-\cs_generate_variant:Nn \@@_transform_invert:n { f }
+\cs_generate_variant:Nn \@@_transform_invert:n { e }
\cs_new_protected:Npn \draw_transform_shift_invert:
{
\dim_set:Nn \l_@@_xshift_dim { -\l_@@_xshift_dim }
@@ -312,24 +338,24 @@
% \begin{macro}{\draw_transform_rotate:n}
% \begin{macro}
% {
-% \@@_transform_rotate:n, \@@_transform_rotate:f,
-% \@@_transform_rotate:nn, \@@_transform_rotate:ff
+% \@@_transform_rotate:n, \@@_transform_rotate:e,
+% \@@_transform_rotate:nn, \@@_transform_rotate:ee
% }
% Slightly more involved: evaluate the angle only once, and the sine and
% cosine only once.
% \begin{macrocode}
\cs_new_protected:Npn \draw_transform_rotate:n #1
- { \@@_transform_rotate:f { \fp_eval:n {#1} } }
+ { \@@_transform_rotate:e { \fp_eval:n {#1} } }
\cs_new_protected:Npn \@@_transform_rotate:n #1
{
- \@@_transform_rotate:ff
+ \@@_transform_rotate:ee
{ \fp_eval:n { cosd(#1) } }
{ \fp_eval:n { sind(#1) } }
}
-\cs_generate_variant:Nn \@@_transform_rotate:n { f }
+\cs_generate_variant:Nn \@@_transform_rotate:n { e }
\cs_new_protected:Npn \@@_transform_rotate:nn #1#2
{ \draw_transform_matrix:nnnn {#1} {#2} { -#2 } { #1 } }
-\cs_generate_variant:Nn \@@_transform_rotate:nn { ff }
+\cs_generate_variant:Nn \@@_transform_rotate:nn { ee }
% \end{macrocode}
% \end{macro}
% \end{macro}
diff --git a/macros/latex/contrib/l3experimental/l3draw.dtx b/macros/latex/contrib/l3experimental/l3draw.dtx
index e0cbdff3d4..2fae7afc74 100644
--- a/macros/latex/contrib/l3experimental/l3draw.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw.dtx
@@ -2,7 +2,7 @@
%
%% File: l3draw.dtx
%
-% Copyright(C) 2018-2023 The LaTeX Project
+% Copyright(C) 2018-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -50,10 +50,10 @@
\newcommand*\demo@common{%
\setkeys{lst}
{%
- basicstyle = \small\ttfamily,
- basewidth = 0.51em,
- gobble = 5,
- language = [LaTeX]{TeX},
+ basicstyle = \small\ttfamily,
+ basewidth = 0.51em,
+ gobble = 5,
+ language = [LaTeX]{TeX},
}%
}
\newcommand*\demo@input{%
@@ -110,7 +110,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-08}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -259,7 +259,7 @@
% will appear. Note that these all apply \emph{globally}, though some are
% rest at the start of each drawing (\cs{draw_begin:}).
%
-% \begin{variable}{\g_draw_linewidth_default_dim}
+% \begin{variable}{\l_draw_default_linewidth_dim}
% The default value of the linewidth for stokes, set at the start
% of every drawing (\cs{draw_begin:}).
% \end{variable}
@@ -369,7 +369,7 @@
% \end{syntax}
% Creates a scope for localisation of state settings within a drawing.
% A scope forms a \TeX{} group but will also localise global state
-% variables (such as \cs{g_draw_linewidth_default_dim}), and driver-level
+% variables (such as \cs{l_draw_default_linewidth_dim}), and driver-level
% concepts such as the termination of lines.
% \begin{demo}
% \draw_begin:
@@ -1046,7 +1046,8 @@
% \end{syntax}
% Applies the transformation \meta{vector} to points.
% The basic applies the vector in addition to those active; the
-% |absolute| version overwrites any active vector.
+% |absolute| version overwrites any active vector. Any active
+% transformation matrix is applied to the shifts each time they are adjusted.
% This assignment is local.
% \end{function}
%
@@ -1180,7 +1181,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3draw}{2023-12-08}{}
+\ProvidesExplPackage{l3draw}{2024-01-04}{}
{L3 Experimental core drawing support}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3experimental/l3draw.ins b/macros/latex/contrib/l3experimental/l3draw.ins
index 7183607c2d..d4e505ef75 100644
--- a/macros/latex/contrib/l3experimental/l3draw.ins
+++ b/macros/latex/contrib/l3experimental/l3draw.ins
@@ -2,7 +2,7 @@
File: l3draw.ins
-Copyright (C) 2018-2023 The LaTeX Project
+Copyright (C) 2018-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -34,7 +34,7 @@ license information is placed in the derived files.
\preamble
-Copyright (C) 2018-2023 The LaTeX Project
+Copyright (C) 2018-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of
the LaTeX Project Public License (LPPL), either version 1.3c of
diff --git a/macros/latex/contrib/l3experimental/l3draw.pdf b/macros/latex/contrib/l3experimental/l3draw.pdf
index 6b8a5e9a92..4beda52c98 100644
--- a/macros/latex/contrib/l3experimental/l3draw.pdf
+++ b/macros/latex/contrib/l3experimental/l3draw.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3galley.dtx b/macros/latex/contrib/l3experimental/l3galley.dtx
index 7b150d5dc5..3bafa455b4 100644
--- a/macros/latex/contrib/l3experimental/l3galley.dtx
+++ b/macros/latex/contrib/l3experimental/l3galley.dtx
@@ -3,7 +3,7 @@
%% File: l3galley.dtx
%
% Copyright (C) 1999-2001,2004-2009 Frank Mittelbach
-% (C) 2010-2023 The LaTeX Project
+% (C) 2010-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -49,7 +49,7 @@
% \fi
%
% \title{^^A
-% The \textsf{l3galley} package\\ Galley code^^A
+% The \pkg{l3galley} package\\ Galley code^^A
% }
%
% \author{^^A
@@ -61,7 +61,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-08}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -686,7 +686,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3galley}{2023-12-08}{}
+\ProvidesExplPackage{l3galley}{2024-01-04}{}
{L3 Experimental galley code}
% \end{macrocode}
%
@@ -1323,27 +1323,27 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_display_penalty:N #1
{
- \tl_if_empty:NF #1
- {
- \tl_gput_right:Ne \g_galley_restore_running_tl
- {
- \int_gset:Nn \exp_not:N \g_galley_penalty_int
- { \int_use:N \g_galley_penalty_int }
- }
- \int_gset:Nn \g_galley_penalty_int {#1}
- }
+ \tl_if_empty:NF #1
+ {
+ \tl_gput_right:Ne \g_galley_restore_running_tl
+ {
+ \int_gset:Nn \exp_not:N \g_galley_penalty_int
+ { \int_use:N \g_galley_penalty_int }
+ }
+ \int_gset:Nn \g_galley_penalty_int {#1}
+ }
}
\cs_new_protected:Npn \@@_display_vspace:N #1
{
- \tl_if_empty:NF #1
- {
- \tl_gput_right:Ne \g_galley_restore_running_tl
- {
- \skip_gset:Nn \exp_not:N \g_galley_vspace_skip
- { \skip_use:N \g_galley_vspace_skip }
- }
- \skip_gset:Nn \g_galley_vspace_int {#1}
- }
+ \tl_if_empty:NF #1
+ {
+ \tl_gput_right:Ne \g_galley_restore_running_tl
+ {
+ \skip_gset:Nn \exp_not:N \g_galley_vspace_skip
+ { \skip_use:N \g_galley_vspace_skip }
+ }
+ \skip_gset:Nn \g_galley_vspace_int {#1}
+ }
}
% \end{macrocode}
% The \cs{par} token at the end of the display needs to go in at the same
@@ -1896,7 +1896,7 @@
\seq_get_right:NNF \g_@@_tmpb_seq \l_@@_tmp_tl
{ \tl_clear:N \l_@@_tmp_tl }
\tl_if_empty:NT \l_@@_tmp_tl
- { \tl_set:Nn \l_@@_tmp_tl { 0pt } }
+ { \tl_set:Nn \l_@@_tmp_tl { 0pt } }
\int_set:Nn \l_@@_tmp_int
{
\seq_count:N \g_@@_tmpa_seq
diff --git a/macros/latex/contrib/l3experimental/l3galley.pdf b/macros/latex/contrib/l3experimental/l3galley.pdf
index bd9bf88c83..a633e46628 100644
--- a/macros/latex/contrib/l3experimental/l3galley.pdf
+++ b/macros/latex/contrib/l3experimental/l3galley.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3graphics.dtx b/macros/latex/contrib/l3experimental/l3graphics.dtx
index 5a45b88d9c..9f59b4ec05 100644
--- a/macros/latex/contrib/l3experimental/l3graphics.dtx
+++ b/macros/latex/contrib/l3experimental/l3graphics.dtx
@@ -2,7 +2,7 @@
%
%% File: l3graphics.dtx
%
-% Copyright (C) 2017-2023 The LaTeX Project
+% Copyright (C) 2017-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-08}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -184,7 +184,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3graphics}{2023-12-08}{}
+\ProvidesExplPackage{l3graphics}{2024-01-04}{}
{L3 Experimental graphics inclusion support}
% \end{macrocode}
%
@@ -237,7 +237,7 @@
{ art , bleed , crop , media , trim }
{
\tl_set:Ne \l_@@_pagebox_tl
- { \l_keys_choice_tl box }
+ { \l_keys_choice_tl box }
} ,
pagebox .initial:n =
crop ,
@@ -536,8 +536,8 @@
\exp_args:Ne \str_tail:n
{ \str_casefold:V \l_@@_ext_str }
}
- }
- { \@@_include_auxi:e { \l_@@_type_str } }
+ }
+ { \@@_include_auxi:e { \l_@@_type_str } }
}
\cs_new_protected:Npn \@@_include_auxi:n #1
{
@@ -553,7 +553,7 @@
{
\tl_set_eq:NN \l_@@_final_name_str \l_@@_full_name_str
\str_set:Ne \l_@@_full_name_str
- { \exp_args:NV \__kernel_file_name_quote:n \l_@@_full_name_str }
+ { \exp_args:NV \__kernel_file_name_quote:n \l_@@_full_name_str }
\exp_args:NnV \use:c { @@_backend_getbb_ #1 :n }
\l_@@_full_name_str
\seq_gput_right:NV \g_@@_record_seq \l_@@_final_name_str
@@ -601,7 +601,7 @@
\box_set_dp:Nn \l_@@_internal_box { 0pt }
\box_set_ht:Nn \l_@@_internal_box
{ \l_@@_ury_dim - \l_@@_lly_dim }
- \box_set_wd:Nn \l_@@_internal_box
+ \box_set_wd:Nn \l_@@_internal_box
{ \l_@@_urx_dim - \l_@@_llx_dim }
\box_use_drop:N \l_@@_internal_box
}
diff --git a/macros/latex/contrib/l3experimental/l3graphics.ins b/macros/latex/contrib/l3experimental/l3graphics.ins
index 40f03e569d..8798dce73c 100644
--- a/macros/latex/contrib/l3experimental/l3graphics.ins
+++ b/macros/latex/contrib/l3experimental/l3graphics.ins
@@ -1,6 +1,6 @@
\iffalse meta-comment
-File l3graphics.ins Copyright (C) 2017,2019-2023 The LaTeX Project
+File l3graphics.ins Copyright (C) 2017,2019-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -32,7 +32,7 @@ license information is placed in the derived files.
\preamble
-Copyright (C) 2019-2023 The LaTeX Project
+Copyright (C) 2019-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of
the LaTeX Project Public License (LPPL), either version 1.3c of
diff --git a/macros/latex/contrib/l3experimental/l3graphics.pdf b/macros/latex/contrib/l3experimental/l3graphics.pdf
index 66ce45d710..42212b3f64 100644
--- a/macros/latex/contrib/l3experimental/l3graphics.pdf
+++ b/macros/latex/contrib/l3experimental/l3graphics.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3opacity.dtx b/macros/latex/contrib/l3experimental/l3opacity.dtx
index 9ed6f5e6a4..f4abdacd81 100644
--- a/macros/latex/contrib/l3experimental/l3opacity.dtx
+++ b/macros/latex/contrib/l3experimental/l3opacity.dtx
@@ -2,7 +2,7 @@
%
%% File: l3opacity.dtx
%
-% Copyright (C) 2021-2023 The LaTeX Project
+% Copyright (C) 2021-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -34,7 +34,7 @@
% \fi
%
% \title{^^A
-% The \textsf{l3opacity} package\\ Experimental opacity (transparency) support^^A
+% The \pkg{l3opacity} package\\ Experimental opacity (transparency) support^^A
% }
%
% \author{^^A
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-08}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -96,7 +96,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3opacity}{2023-12-08}{}
+\ProvidesExplPackage{l3opacity}{2024-01-04}{}
{L3 Experimental opacity support}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3experimental/l3opacity.ins b/macros/latex/contrib/l3experimental/l3opacity.ins
index 1a5e5de20a..58b33fff7c 100644
--- a/macros/latex/contrib/l3experimental/l3opacity.ins
+++ b/macros/latex/contrib/l3experimental/l3opacity.ins
@@ -2,7 +2,7 @@
File: l3opacity.ins
-Copyright (C) 2021-2023 The LaTeX Project
+Copyright (C) 2021-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -34,7 +34,7 @@ license information is placed in the derived files.
\preamble
-Copyright (C) 2021-2023 The LaTeX Project
+Copyright (C) 2021-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of
the LaTeX Project Public License (LPPL), either version 1.3c of
diff --git a/macros/latex/contrib/l3experimental/l3opacity.pdf b/macros/latex/contrib/l3experimental/l3opacity.pdf
index 096288c14a..0898e6463c 100644
--- a/macros/latex/contrib/l3experimental/l3opacity.pdf
+++ b/macros/latex/contrib/l3experimental/l3opacity.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3str-format.dtx b/macros/latex/contrib/l3experimental/l3str-format.dtx
index 03a6145239..6304ce3ec2 100644
--- a/macros/latex/contrib/l3experimental/l3str-format.dtx
+++ b/macros/latex/contrib/l3experimental/l3str-format.dtx
@@ -2,7 +2,7 @@
%
%% File: l3str-format.dtx
%
-% Copyright (C) 2012-2023 The LaTeX Project
+% Copyright (C) 2012-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -36,7 +36,7 @@
%
%
% \title{^^A
-% The \textsf{l3str-format} package: formatting strings of characters^^A
+% The \pkg{l3str-format} package\\ Formatting strings of characters^^A
% }
%
% \author{^^A
@@ -48,7 +48,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-08}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -166,7 +166,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3str-format}{2023-12-08}{}
+\ProvidesExplPackage{l3str-format}{2024-01-04}{}
{L3 Experimental string formatting}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3experimental/l3str-format.pdf b/macros/latex/contrib/l3experimental/l3str-format.pdf
index 83b57b975b..367a84e099 100644
--- a/macros/latex/contrib/l3experimental/l3str-format.pdf
+++ b/macros/latex/contrib/l3experimental/l3str-format.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3str.ins b/macros/latex/contrib/l3experimental/l3str.ins
index fa070c69ec..fd77436304 100644
--- a/macros/latex/contrib/l3experimental/l3str.ins
+++ b/macros/latex/contrib/l3experimental/l3str.ins
@@ -2,7 +2,7 @@
File l3str.ins
-Copyright (C) 2011-2017,2019-2023 The LaTeX Project
+Copyright (C) 2011-2017,2019-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -34,7 +34,7 @@ license information is placed in the derived files.
\preamble
-Copyright (C) 2011-2023 The LaTeX Project
+Copyright (C) 2011-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of
the LaTeX Project Public License (LPPL), either version 1.3c of
diff --git a/macros/latex/contrib/l3experimental/l3sys-shell.dtx b/macros/latex/contrib/l3experimental/l3sys-shell.dtx
index 4c05998e37..ad1733ab77 100644
--- a/macros/latex/contrib/l3experimental/l3sys-shell.dtx
+++ b/macros/latex/contrib/l3experimental/l3sys-shell.dtx
@@ -2,7 +2,7 @@
%
%% File: l3sys-shell.dtx
%
-% Copyright (C) 2018-2023 The LaTeX Project
+% Copyright (C) 2018-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-08}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -151,7 +151,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3sys-shell}{2023-12-08}{}
+\ProvidesExplPackage{l3sys-shell}{2024-01-04}{}
{L3 Experimental system shell functions}
% \end{macrocode}
%
@@ -201,7 +201,7 @@
\token_if_eq_meaning:NNTF #1 /
{ \c_backslash_str }
{#1}
- \@@_path_to_win:N
+ \@@_path_to_win:N
}
}
% \end{macrocode}
diff --git a/macros/latex/contrib/l3experimental/l3sys-shell.ins b/macros/latex/contrib/l3experimental/l3sys-shell.ins
index c546801d05..8e5e7169d9 100644
--- a/macros/latex/contrib/l3experimental/l3sys-shell.ins
+++ b/macros/latex/contrib/l3experimental/l3sys-shell.ins
@@ -2,7 +2,7 @@
File: l3sys-shell.ins
-Copyright (C) 2018-2023 The LaTeX Project
+Copyright (C) 2018-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -34,7 +34,7 @@ license information is placed in the derived files.
\preamble
-Copyright (C) 2018-2023 The LaTeX Project
+Copyright (C) 2018-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of
the LaTeX Project Public License (LPPL), either version 1.3c of
diff --git a/macros/latex/contrib/l3experimental/l3sys-shell.pdf b/macros/latex/contrib/l3experimental/l3sys-shell.pdf
index 3152e29a00..1d1c41221a 100644
--- a/macros/latex/contrib/l3experimental/l3sys-shell.pdf
+++ b/macros/latex/contrib/l3experimental/l3sys-shell.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/xcoffins.dtx b/macros/latex/contrib/l3experimental/xcoffins.dtx
index 9ca534e86c..a18ade7abd 100644
--- a/macros/latex/contrib/l3experimental/xcoffins.dtx
+++ b/macros/latex/contrib/l3experimental/xcoffins.dtx
@@ -2,7 +2,7 @@
%
%% File: xcoffins.dtx
%
-% Copyright (C) 2010-2023 The LaTeX Project
+% Copyright (C) 2010-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -41,7 +41,7 @@
% \fi
%
% \title{^^A
-% The \textsf{xcoffins} package\\ Design-level coffins^^A
+% The \pkg{xcoffins} package\\ Design-level coffins^^A
% }
%
% \author{^^A
@@ -53,7 +53,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-08}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -672,7 +672,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{xcoffins}{2023-12-08}{}
+\ProvidesExplPackage{xcoffins}{2024-01-04}{}
{L3 Experimental design level coffins}
% \end{macrocode}
%
@@ -859,9 +859,9 @@
% \begin{macrocode}
\NewDocumentCommand \TypesetCoffin
{
- m
- > { \SplitArgument { 1 } { , } } O { H , l }
- > { \SplitArgument { 1 } { , } } D ( ) { 0 pt , 0 pt }
+ m
+ > { \SplitArgument { 1 } { , } } O { H , l }
+ > { \SplitArgument { 1 } { , } } D ( ) { 0 pt , 0 pt }
}
{ \coffin_typeset:Nnnnn #1 #2 #3 }
% \end{macrocode}
diff --git a/macros/latex/contrib/l3experimental/xcoffins.ins b/macros/latex/contrib/l3experimental/xcoffins.ins
index 224e77b5d6..326f21e4a5 100644
--- a/macros/latex/contrib/l3experimental/xcoffins.ins
+++ b/macros/latex/contrib/l3experimental/xcoffins.ins
@@ -2,7 +2,7 @@
File: xcoffins.ins
-Copyright (C) 2010,2011,2012,2016,2017,2019-2023 The LaTeX Project
+Copyright (C) 2010,2011,2012,2016,2017,2019-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -34,7 +34,7 @@ license information is placed in the derived files.
\preamble
-Copyright (C) 2010-2023 The LaTeX Project
+Copyright (C) 2010-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of
the LaTeX Project Public License (LPPL), either version 1.3c of
diff --git a/macros/latex/contrib/l3experimental/xcoffins.pdf b/macros/latex/contrib/l3experimental/xcoffins.pdf
index 98b321ae28..bee04ded96 100644
--- a/macros/latex/contrib/l3experimental/xcoffins.pdf
+++ b/macros/latex/contrib/l3experimental/xcoffins.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/xgalley.dtx b/macros/latex/contrib/l3experimental/xgalley.dtx
index eb704906db..76e8242f4e 100644
--- a/macros/latex/contrib/l3experimental/xgalley.dtx
+++ b/macros/latex/contrib/l3experimental/xgalley.dtx
@@ -3,7 +3,7 @@
%% File: xgalley.dtx
%
% Copyright (C) 1999-2001,2004-2009 Frank Mittelbach
-% (C) 2010-2012,2014,2016-2023 The LaTeX Project
+% (C) 2010-2012,2014,2016-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -32,7 +32,7 @@
% \fi
%
% \title{^^A
-% The \textsf{xgalley} package\\ Galley^^A
+% The \pkg{xgalley} package\\ Galley^^A
% }
%
% \author{^^A
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-08}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -731,7 +731,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{xgalley}{2023-12-08}{}
+\ProvidesExplPackage{xgalley}{2024-01-04}{}
{L3 Experimental galley}
\RequirePackage{xtemplate,l3galley}
% \end{macrocode}
@@ -829,7 +829,7 @@
lines : integer = 1
}
\DeclareTemplateInterface { parshape } { initial } { 0 }
- {
+ {
indent : length = 0pt ,
on-left-side : boolean = true ,
lines : integer = 2
diff --git a/macros/latex/contrib/l3experimental/xgalley.ins b/macros/latex/contrib/l3experimental/xgalley.ins
index 82ae4c7728..53ecd1bbdc 100644
--- a/macros/latex/contrib/l3experimental/xgalley.ins
+++ b/macros/latex/contrib/l3experimental/xgalley.ins
@@ -2,7 +2,7 @@
File: xgalley.ins
-Copyright (C) 2010-2012,2016,2017,2019-2023 The LaTeX Project
+Copyright (C) 2010-2012,2016,2017,2019-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -34,7 +34,7 @@ license information is placed in the derived files.
\preamble
-Copyright (C) 2010-2023 The LaTeX Project
+Copyright (C) 2010-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of
the LaTeX Project Public License (LPPL), either version 1.3c of
diff --git a/macros/latex/contrib/l3experimental/xgalley.pdf b/macros/latex/contrib/l3experimental/xgalley.pdf
index e1964e85ee..50375b414b 100644
--- a/macros/latex/contrib/l3experimental/xgalley.pdf
+++ b/macros/latex/contrib/l3experimental/xgalley.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/CHANGELOG.md b/macros/latex/contrib/l3kernel/CHANGELOG.md
index 726d647298..0c9d02efe4 100644
--- a/macros/latex/contrib/l3kernel/CHANGELOG.md
+++ b/macros/latex/contrib/l3kernel/CHANGELOG.md
@@ -7,17 +7,35 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
-## [2023-12-11]
+## [2024-01-04]
+
+### Added
+- Documentation for `\bitset_show_named_index:N` (issue \#1372)
+- `\bitset_log_named_index:N`
+- `\tl_build_get_intermediate:NN`
+- Support for `.default:n` values for the `unknown` handler (see issue \#67)
+
+### Changed
+- Improved method to suppress `l3bitset` where required
+- Clarify behavior of `\tl_if_novalue:n(TF)` (see issue \#1402)
-## [2023-12-12]
+### Deprecated
+- `\tl_build_get:NN` in favor of `\tl_build_get_intermediate:NN`
### Fixed
-- Support for deprecated `pdf` module functions (issue \#1373)
-- Generate stub `l3bitset` for transitional support
+- Handling of `documented-as` variants in `l3doc` indexing
+ (see issue \#1345)
+- Missing trailing `TF` in single variant of conditional functions (issue \#1398)
+
+## [2023-12-11]
### Changed
- Use keyval handler for `l3doc` class options
+### Fixed
+- Support for deprecated `pdf` module functions (issue \#1373)
+- Generate stub `l3bitset` for transitional support
+
## [2023-12-08]
### Added
@@ -35,7 +53,7 @@ this project uses date-based 'snapshot' version identifiers.
- Documentation for `\c_nan_fp`
- `\str_case_e:en(TF)`
-### Changes
+### Changed
- Speed up `\str_(g)set:Nn`, `\str_const:Nn`, `\str_(g)put_left:Nn`,
and `\str_(g)put_right:Nn`
@@ -1617,9 +1635,9 @@ this project uses date-based 'snapshot' version identifiers.
- Step functions have been added for dim variables,
e.g. `\dim_step_inline:nnnn`
-[Unreleased]: https://github.com/latex3/latex3/compare/2023-12-11...HEAD
-[2023-12-11]: https://github.com/latex3/latex3/compare/2023-12-12...2023-12-11
-[2023-12-12]: https://github.com/latex3/latex3/compare/2023-12-08...2023-12-12
+[Unreleased]: https://github.com/latex3/latex3/compare/2024-01-04...HEAD
+[2024-01-04]: https://github.com/latex3/latex3/compare/2023-12-11...2024-01-04
+[2023-12-11]: https://github.com/latex3/latex3/compare/2023-12-08...2023-12-11
[2023-12-08]: https://github.com/latex3/latex3/compare/2023-11-09...2023-12-08
[2023-11-09]: https://github.com/latex3/latex3/compare/2023-11-01...2023-11-09
[2023-11-01]: https://github.com/latex3/latex3/compare/2023-10-23...2023-11-01
diff --git a/macros/latex/contrib/l3kernel/README.md b/macros/latex/contrib/l3kernel/README.md
index 3ad1051d46..1173d3966f 100644
--- a/macros/latex/contrib/l3kernel/README.md
+++ b/macros/latex/contrib/l3kernel/README.md
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2023-12-11
+Release 2024-01-04
Overview
--------
@@ -30,6 +30,7 @@ The `l3kernel` bundle requires the e-TeX extensions and a number of additional
particular, the functionality equivalent to the following pdfTeX primitives must
be available
+- `\ifincsname`
- `\ifpdfprimitive`
- `\pdfcreationdate`
- `\pdfelapsedtime`
@@ -90,6 +91,6 @@ by e-mail: <latex-team@latex-project.org>.
-----
-<p>Copyright (C) 1998-2012,2015-2023 The LaTeX Project <br />
+<p>Copyright (C) 1998-2012,2015-2024 The LaTeX Project <br />
<a href="http://latex-project.org/">http://latex-project.org/</a> <br />
All rights reserved.</p>
diff --git a/macros/latex/contrib/l3kernel/expl3.dtx b/macros/latex/contrib/l3kernel/expl3.dtx
index 7c6ffe952b..c62a81f8ad 100644
--- a/macros/latex/contrib/l3kernel/expl3.dtx
+++ b/macros/latex/contrib/l3kernel/expl3.dtx
@@ -2,7 +2,7 @@
%
%% File: expl3.dtx
%
-% Copyright (C) 1990-2023 The LaTeX Project
+% Copyright (C) 1990-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -24,7 +24,7 @@
%
%<*driver|generic|package|2ekernel>
%</driver|generic|package|2ekernel>
-\def\ExplFileDate{2023-12-11}%
+\def\ExplFileDate{2024-01-04}%
%<*driver>
\documentclass[full]{l3doc}
\usepackage{graphicx}
@@ -51,7 +51,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/expl3.pdf b/macros/latex/contrib/l3kernel/expl3.pdf
index 6981f1fc34..123d474f9b 100644
--- a/macros/latex/contrib/l3kernel/expl3.pdf
+++ b/macros/latex/contrib/l3kernel/expl3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/interface3.pdf b/macros/latex/contrib/l3kernel/interface3.pdf
index b7598e7082..3144931ce4 100644
--- a/macros/latex/contrib/l3kernel/interface3.pdf
+++ b/macros/latex/contrib/l3kernel/interface3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/interface3.tex b/macros/latex/contrib/l3kernel/interface3.tex
index f9f461a288..06b8b3d8a6 100644
--- a/macros/latex/contrib/l3kernel/interface3.tex
+++ b/macros/latex/contrib/l3kernel/interface3.tex
@@ -2,7 +2,7 @@
File: interface3.tex
-Copyright (C) 1990-2011,2017-2023 The LaTeX Project
+Copyright (C) 1990-2011,2017-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -29,7 +29,7 @@ for those people who are interested.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% This document typesets the LaTeX3 interface descriptions a single document.
-% This produces quite a large file (more than 170 pages currently).
+% This produces quite a large file (more than 360 pages as of Dec 2023).
%
% There is also a full version of the sources (source3.tex) which additionally
% also typesets the command implementations.
diff --git a/macros/latex/contrib/l3kernel/l3.ins b/macros/latex/contrib/l3kernel/l3.ins
index 7f1d882f8c..776e777c46 100644
--- a/macros/latex/contrib/l3kernel/l3.ins
+++ b/macros/latex/contrib/l3kernel/l3.ins
@@ -2,7 +2,7 @@
File l3.ins
-Copyright (C) 2011,2012,2014-2023 The LaTeX Project
+Copyright (C) 2011,2012,2014-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@ license information is placed in the derived files.
\preamble
-Copyright (C) 1990-2023 The LaTeX Project
+Copyright (C) 1990-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of
the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -152,14 +152,12 @@ and all files in that bundle must be distributed together.
\generate{\file{l3names.def} {\from{l3names.dtx} {names}}}
-\generate{\file{l3bitset.sty} {\from{l3bitset.dtx} {stub}}}
-
% Lua code
\def\MetaPrefix{--}
\preamble
-Copyright (C) 1990-2023 The LaTeX Project
+Copyright (C) 1990-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of
the LaTeX Project Public License (LPPL), either version 1.3c of
diff --git a/macros/latex/contrib/l3kernel/l3basics.dtx b/macros/latex/contrib/l3kernel/l3basics.dtx
index 716edf4c7c..761aa46a79 100644
--- a/macros/latex/contrib/l3kernel/l3basics.dtx
+++ b/macros/latex/contrib/l3kernel/l3basics.dtx
@@ -2,7 +2,7 @@
%
%% File: l3basics.dtx
%
-% Copyright (C) 1990-2023 The LaTeX Project
+% Copyright (C) 1990-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3basics} package\\ Basic definitions^^A
+% The \pkg{l3basics} module\\ Basic definitions^^A
% }
%
% \author{^^A
@@ -43,17 +43,17 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
% \begin{documentation}
%
-% As the name suggest this package holds some basic definitions which
-% are needed by most or all other packages in this set.
+% As the name suggests, this module holds some basic definitions which
+% are needed by most or all other modules in this set.
%
-% Here we describe those functions that are used all over the place. With
-% that we mean functions dealing with the construction and testing of
+% Here we describe those functions that are used all over the place.
+% By that, we mean functions dealing with the construction and testing of
% control sequences. Furthermore the basic parts of conditional
% processing are covered; conditional processing dealing with specific
% data types is described in the modules specific for the respective
@@ -957,7 +957,7 @@
% \begin{function}[EXP]
% {
% \use_i:nn, \use_ii:nn ,
-% \use_i:nnn , \use_ii:nnn , \use_iii:nnn , \use_i_ii:nnn ,
+% \use_i:nnn , \use_ii:nnn , \use_iii:nnn ,
% \use_i:nnnn, \use_ii:nnnn, \use_iii:nnnn, \use_iv:nnnn ,
% \use_i:nnnnn, \use_ii:nnnnn, \use_iii:nnnnn, \use_iv:nnnnn ,
% \use_v:nnnnn ,
@@ -966,7 +966,7 @@
% \use_i:nnnnnnn, \use_ii:nnnnnnn, \use_iii:nnnnnnn, \use_iv:nnnnnnn ,
% \use_v:nnnnnnn , \use_vi:nnnnnnn , \use_vii:nnnnnnn ,
% \use_i:nnnnnnnn, \use_ii:nnnnnnnn, \use_iii:nnnnnnnn, \use_iv:nnnnnnnn ,
-% \use_v:nnnnnnnn , \use_vi:nnnnnnnn , \use_vii:nnnnnnnn , \use_vii:nnnnnnnn ,
+% \use_v:nnnnnnnn , \use_vi:nnnnnnnn , \use_vii:nnnnnnnn , \use_viii:nnnnnnnn ,
% \use_i:nnnnnnnnn, \use_ii:nnnnnnnnn, \use_iii:nnnnnnnnn, \use_iv:nnnnnnnnn ,
% \use_v:nnnnnnnnn , \use_vi:nnnnnnnnn , \use_vii:nnnnnnnnn , \use_viii:nnnnnnnnn ,
% \use_ix:nnnnnnnnn
@@ -1678,7 +1678,7 @@
%
% \begin{macro}[EXP]
% {
-% \use_i:nnn , \use_ii:nnn , \use_iii:nnn , \use_i_ii:nnn ,
+% \use_i:nnn , \use_ii:nnn , \use_iii:nnn ,
% \use_i:nnnn, \use_ii:nnnn, \use_iii:nnnn, \use_iv:nnnn ,
% \use_i:nnnnn, \use_ii:nnnnn, \use_iii:nnnnn, \use_iv:nnnnn ,
% \use_v:nnnnn ,
@@ -1687,7 +1687,7 @@
% \use_i:nnnnnnn, \use_ii:nnnnnnn, \use_iii:nnnnnnn, \use_iv:nnnnnnn ,
% \use_v:nnnnnnn , \use_vi:nnnnnnn , \use_vii:nnnnnnn ,
% \use_i:nnnnnnnn, \use_ii:nnnnnnnn, \use_iii:nnnnnnnn, \use_iv:nnnnnnnn ,
-% \use_v:nnnnnnnn , \use_vi:nnnnnnnn , \use_vii:nnnnnnnn , \use_vii:nnnnnnnn ,
+% \use_v:nnnnnnnn , \use_vi:nnnnnnnn , \use_vii:nnnnnnnn , \use_viii:nnnnnnnn ,
% \use_i:nnnnnnnnn, \use_ii:nnnnnnnnn, \use_iii:nnnnnnnnn, \use_iv:nnnnnnnnn ,
% \use_v:nnnnnnnnn , \use_vi:nnnnnnnnn , \use_vii:nnnnnnnnn , \use_viii:nnnnnnnnn ,
% \use_ix:nnnnnnnnn
@@ -1697,7 +1697,6 @@
\cs_set:Npn \use_i:nnn #1#2#3 {#1}
\cs_set:Npn \use_ii:nnn #1#2#3 {#2}
\cs_set:Npn \use_iii:nnn #1#2#3 {#3}
-\cs_set:Npn \use_i_ii:nnn #1#2#3 {#1#2}
\cs_set:Npn \use_i:nnnn #1#2#3#4 {#1}
\cs_set:Npn \use_ii:nnnn #1#2#3#4 {#2}
\cs_set:Npn \use_iii:nnnn #1#2#3#4 {#3}
@@ -1740,6 +1739,12 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}[EXP]{\use_i_ii:nnn}
+% \begin{macrocode}
+\cs_set:Npn \use_i_ii:nnn #1#2#3 {#1#2}
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}[EXP]{\use_ii_i:nn}
% \begin{macrocode}
\cs_set:Npn \use_ii_i:nn #1#2 { #2 #1 }
@@ -2656,9 +2661,9 @@
\cs_set:Npn \@@_tmp:w #1#2
{
\cs_set_protected:Npn #1 ##1
- {
- \__kernel_chk_if_free_cs:N ##1
- #2 ##1
+ {
+ \__kernel_chk_if_free_cs:N ##1
+ #2 ##1
}
}
\@@_tmp:w \cs_new_nopar:Npn \cs_gset_nopar:Npn
diff --git a/macros/latex/contrib/l3kernel/l3bitset.dtx b/macros/latex/contrib/l3kernel/l3bitset.dtx
index 545d7c3357..d362d59adb 100644
--- a/macros/latex/contrib/l3kernel/l3bitset.dtx
+++ b/macros/latex/contrib/l3kernel/l3bitset.dtx
@@ -2,7 +2,7 @@
%
%% File: l3bitset.dtx
%
-% Copyright (C) 2020-2023 The LaTeX Project
+% Copyright (C) 2020-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -30,7 +30,7 @@
%</driver>
% \fi
% \title{^^A
-% The \pkg{l3bitset} package\\ Bitsets^^A
+% The \pkg{l3bitset} module\\ Bitsets^^A
% }
%
% \author{^^A
@@ -42,13 +42,13 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
% \begin{documentation}
%
-% This package defines and implements the data type \texttt{bitset}, a vector of
+% This module defines and implements the data type \texttt{bitset}, a vector of
% bits. The size of the vector may grow dynamically.
% Individual bits can be set and unset by names pointing to an index position.
% The names |1|, |2|, |3|, \ldots\ are predeclared and point to the
@@ -64,11 +64,11 @@
% The bitset is stored as a string (but one shouldn't rely on the internal
% representation) and so the vector size is theoretically
% unlimited, only restricted by \TeX-memory. But the functions to set and clear
-% bits uses integer functions for the index so bitsets can't be longer
+% bits use integer functions for the index so bitsets can't be longer
% than $2^{31} - 1$.
% The export function
% \cs{bitset_to_arabic:N} can use functions from the \texttt{int} module only if
-% the largest index used for this bitset is smaller then $32$, for longer
+% the largest index used for this bitset is smaller than $32$, for longer
% bitsets \texttt{fp} is used and this is slower.
%
% \section{Creating bitsets}
@@ -79,8 +79,8 @@
% \cs{bitset_new:N} \meta{bitset var} \\
% \cs{bitset_new:Nn} \meta{bitset var}
% ~~\{
-% ~~~~\meta{name1} |=| \meta{index1} |,|
-% ~~~~\meta{name2} |=| \meta{index2} |,| \ldots{}
+% ~~~~\meta{name_1} |=| \meta{index_1} |,|
+% ~~~~\meta{name_2} |=| \meta{index_2} |,| \ldots{}
% ~~\}
% \end{syntax}
% Creates a new \meta{bitset var} or raises an error if the name is already taken.
@@ -101,7 +101,7 @@
%
% \meta{index\ldots} should be a positive number or an
% \meta{integer expression} which evaluates to a positive number.
-% The expression is evaluated when the index is used, not a declaration time.
+% The expression is evaluated when the index is used, not at declaration time.
% The names \meta{name\ldots}
% should be unique. Using a number as name, e.g.~|10=1|, is allowed, it
% then overwrites the predeclared name |10|,
@@ -117,8 +117,8 @@
% \begin{syntax}
% \cs{bitset_addto_named_index:Nn} \meta{bitset var}
% ~~\{
-% ~~~~\meta{name1} |=| \meta{index1} |,|
-% ~~~~\meta{name2} |=| \meta{index2} |,| \ldots{}
+% ~~~~\meta{name_1} |=| \meta{index_1} |,|
+% ~~~~\meta{name_2} |=| \meta{index_2} |,| \ldots{}
% ~~\}
% \end{syntax}
% This extends or changes the name--index pairs for \meta{bitset var}
@@ -145,7 +145,7 @@
% print = 3
% }
% \end{verbatim}
-% it is possible to set bit $3$ by using any of this alternatives:
+% it is possible to set bit $3$ by using any of these alternatives:
% \begin{verbatim}
% \bitset_set_true:Nn \l_pdfannot_F_bitset {Print}
% \bitset_set_true:Nn \l_pdfannot_F_bitset {print}
@@ -156,7 +156,7 @@
% {\bitset_if_exist:N, \bitset_if_exist:c}
% \begin{syntax}
% \cs{bitset_if_exist_p:N} \meta{bitset var}
-% \cs{bitset_if_exist:NTF} \meta{bitset var} \Arg{true code} \Arg{false code}%
+% \cs{bitset_if_exist:NTF} \meta{bitset var} \Arg{true code} \Arg{false code}
% \end{syntax}
% Tests whether the \meta{bitset var} exist.
% \end{function}
@@ -172,7 +172,7 @@
% \cs{bitset_set_true:Nn} \meta{bitset var} \Arg{name}
% \end{syntax}
% This sets the bit of the index position represented by \Arg{name} to $1$.
-% \Arg{name} should be either one of the predeclared names
+% \meta{name} should be either one of the predeclared names
% |1|, |2|, |3|, \ldots, or one of the names added manually.
% Index position are 1-based.
% If needed the length of the bit vector is enlarged.
@@ -188,7 +188,7 @@
% \end{syntax}
% This unsets the bit of the index position represented by \Arg{name} (sets
% it to $0$).
-% \Arg{name} should be either one of the predeclared names
+% \meta{name} should be either one of the predeclared names
% |1|, |2|, |3|, \ldots, or one of the names added manually.
% The index is $1$-based. If the index position is larger
% than the current length of the bit vector
@@ -213,8 +213,8 @@
% \cs{bitset_item:Nn} \meta{bitset var} \Arg{name}
% \end{syntax}
% \cs{bitset_item:Nn} outputs \texttt{1} if the bit with
-% the index number represented by \Arg{name} is set and \texttt{0} otherwise.
-% \Arg{name} is either one of the predeclared names
+% the index number represented by \meta{name} is set and \texttt{0} otherwise.
+% \meta{name} is either one of the predeclared names
% |1|, |2|, |3|, \ldots, or one of the names added manually.
% \end{function}
%
@@ -236,8 +236,8 @@
% This leaves the current value of the bitset expressed as
% a decimal number in the input stream. If no bit has been set yet,
% the output is zero. The function uses \cs{int_from_bin:n} if the largest
-% index that have been set or unset is smaller then $32$, and a slower implementation
-% based on \cs{fp_eval:n} otherwise.
+% index that have been set or unset is smaller than $32$, and a slower
+% implementation based on \cs{fp_eval:n} otherwise.
% \end{function}
%
% \begin{function}[added = 2023-11-15]
@@ -245,7 +245,8 @@
% \begin{syntax}
% \cs{bitset_show:N} \meta{bitset var}
% \end{syntax}
-% Displays the binary and decimal value of the \meta{bitset var} on the terminal,
+% Displays the binary and decimal values of the \meta{bitset var}
+% on the terminal.
% \end{function}
%
% \begin{function}[added = 2023-11-15]
@@ -253,7 +254,30 @@
% \begin{syntax}
% \cs{bitset_log:N} \meta{bitset var}
% \end{syntax}
-% Writes the value of the \meta{bitset var} in the log file.
+% Writes the binary and decimal values of the \meta{bitset var}
+% in the log file.
+% \end{function}
+%
+% \begin{function}[added = 2023-11-15]
+% {
+% \bitset_show_named_index:N, \bitset_show_named_index:c
+% }
+% \begin{syntax}
+% \cs{bitset_show_named_index:N} \meta{bitset var}
+% \end{syntax}
+% Displays declared name--index pairs of the \meta{bitset var}
+% on the terminal.
+% \end{function}
+%
+% \begin{function}[added = 2023-12-11]
+% {
+% \bitset_log_named_index:N, \bitset_log_named_index:c
+% }
+% \begin{syntax}
+% \cs{bitset_log_named_index:N} \meta{bitset var}
+% \end{syntax}
+% Writes declared name--index pairs of the \meta{bitset var}
+% in the log file.
% \end{function}
%
% \end{documentation}
@@ -270,6 +294,15 @@
%<@@=bitset>
% \end{macrocode}
%
+% Transitional support.
+% \begin{macrocode}
+\cs_if_exist:NT \@expl@finalise@setup@@@@
+ {
+ \tl_gput_right:Nn \@expl@finalise@setup@@@@
+ { \declare@file@substitution { l3bitset.sty } { null.tex } }
+ }
+% \end{macrocode}
+%
% A bitset is a string variable.
% \begin{macro}{\bitset_new:N, \bitset_new:c}
% \begin{macro}{\bitset_new:Nn, \bitset_new:cn}
@@ -280,40 +313,27 @@
\cs_gset_eq:NN #1 \c_zero_str
\prop_new:c { g__bitset_ \cs_to_str:N #1 _name_prop }
}
-
\cs_new_protected:Npn \bitset_new:Nn #1 #2
{
\__kernel_chk_if_free_cs:N #1
\cs_gset_eq:NN #1 \c_zero_str
\prop_new:c { g__bitset_ \cs_to_str:N #1 _name_prop }
\prop_gset_from_keyval:cn
- { g__bitset_ \cs_to_str:N #1 _name_prop }
- {#2}
+ { g__bitset_ \cs_to_str:N #1 _name_prop }
+ {#2}
}
\cs_generate_variant:Nn \bitset_new:N { c }
+\cs_generate_variant:Nn \bitset_new:Nn { c }
% \end{macrocode}
% \end{macro}
% \end{macro}
%
-% \begin{variable}{\l_@@_tmp_prop}
-% A scratch prop to be able to extend the names properties.
-% \begin{macrocode}
-\prop_new:N \l_@@_tmp_prop
-% \end{macrocode}
-% \end{variable}
-%
% \begin{macro}{\bitset_addto_named_index:Nn}
% \begin{macrocode}
\cs_new_protected:Npn \bitset_addto_named_index:Nn #1#2
{
- \prop_set_from_keyval:Nn \l_@@_tmp_prop {#2}
- \prop_map_inline:Nn \l_@@_tmp_prop
- {
- \prop_gput:cnn
- { g_@@_ \cs_to_str:N #1 _name_prop }
- {##1}
- {##2}
- }
+ \prop_gput_from_keyval:cn
+ { g_@@_ \cs_to_str:N #1 _name_prop } { #2 }
}
% \end{macrocode}
% \end{macro}
@@ -329,6 +349,7 @@
\bitset_if_exist:c \str_if_exist:c { p , T , F , TF }
% \end{macrocode}
% \end{macro}
+%
% \begin{macro}{\@@_set_true:Nn, \@@_gset_true:Nn, \@@_set_false:Nn, \@@_gset_false:Nn}
% \begin{macro}{\@@_set:NNnN}
% The internal command uses only numbers (integer expressions) for the
@@ -358,12 +379,12 @@
}
}
{
- #1 #2
+ #1 #2
{
\str_range:Nnn #2 { 1 } { -1 - (#3) }
#4
\str_range:Nnn #2 { 1 - (#3) } { -1 }
- }
+ }
}
}
}
@@ -379,7 +400,7 @@
%
% \begin{macro}[TF]{\@@_test_digits:n}
% \begin{macro}{\@@_test_digits_end:n}
-% \begin{macro}{\@@_test_digits:wn}
+% \begin{macro}{\@@_test_digits:w}
% \url{https://chat.stackexchange.com/transcript/message/56878159#56878159}
% \begin{macrocode}
\prg_new_protected_conditional:Npnn \@@_test_digits:n #1 { TF }
@@ -468,14 +489,16 @@
\cs_generate_variant:Nn \bitset_gclear:N { c }
% \end{macrocode}
% \end{macro}
-% \begin{macro}
+%
+% \begin{macro}[EXP]
% {
% \bitset_to_arabic:N, \bitset_to_arabic:c,
% \bitset_to_bin:N, \bitset_to_bin:c,
% }
+% \begin{macro}[EXP]{\@@_to_int:nN}
% The naming of the commands follow the names in the \texttt{int} module.
% \cs{bitset_to_arabic:N} uses \cs{int_from_bin:n} if the string is shorter
-% then $32$ and the slower \cs{fp_eval} for larger bitsets.
+% than $32$ and the slower \cs{fp_eval:n} for larger bitsets.
% \begin{macrocode}
\cs_new:Npn \bitset_to_arabic:N #1
{
@@ -486,13 +509,11 @@
#1 \q_recursion_tail \q_recursion_stop
}
}
-
\cs_new:Npn \@@_to_int:nN #1#2
{
\quark_if_recursion_tail_stop_do:Nn #2 {#1}
\exp_args:Nf \@@_to_int:nN { \fp_eval:n { #1 * 2 + #2 } }
}
-
\cs_new:Npn \bitset_to_bin:N #1
{
#1
@@ -501,6 +522,8 @@
\cs_generate_variant:Nn \bitset_to_bin:N { c }
% \end{macrocode}
% \end{macro}
+% \end{macro}
+%
% \begin{macro}
% {
% \bitset_item:Nn, \bitset_item:cn
@@ -518,10 +541,10 @@
{ 0 - ( \prop_item:cn { g_@@_ \cs_to_str:N #1 _name_prop } {#2} ) }
+0
}
- }
- {
- 0
- }
+ }
+ {
+ 0
+ }
}
\cs_generate_variant:Nn \bitset_item:Nn { c }
% \end{macrocode}
@@ -537,28 +560,40 @@
\cs_generate_variant:Nn \bitset_show:N { c }
\cs_new_protected:Npn \bitset_log:N { \@@_show:NN \msg_log:nneeee }
\cs_generate_variant:Nn \bitset_log:N { c }
-\cs_new_protected:Npn \bitset_show_named_index:N { \@@_show_named_index:NN \msg_show:nneeee }
-\cs_generate_variant:Nn \bitset_show_named_index:N { c }
\cs_new_protected:Npn \@@_show:NN #1#2
{
\__kernel_chk_defined:NT #2
{
#1 { bitset } { show }
- { \token_to_str:N #2 }
- { \bitset_to_bin:N #2 }
- { \bitset_to_arabic:N #2 }
- { }
+ { \token_to_str:N #2 }
+ { \bitset_to_bin:N #2 }
+ { \bitset_to_arabic:N #2 }
+ { }
}
}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}
+% {
+% \bitset_show_named_index:N, \bitset_show_named_index:c,
+% \bitset_log_named_index:N, \bitset_log_named_index:c
+% }
+% \begin{macrocode}
+\cs_new_protected:Npn \bitset_show_named_index:N
+ { \@@_show_named_index:NN \msg_show:nneeee }
+\cs_generate_variant:Nn \bitset_show_named_index:N { c }
+\cs_new_protected:Npn \bitset_log_named_index:N
+ { \@@_show_named_index:NN \msg_log:nneeee }
+\cs_generate_variant:Nn \bitset_log_named_index:N { c }
\cs_new_protected:Npn \@@_show_named_index:NN #1#2
{
\__kernel_chk_defined:NT #2
{
#1 { bitset } { show-names }
- { \token_to_str:N #2 }
- { \prop_map_function:cN { g_@@_ \cs_to_str:N #2 _name_prop } \msg_show_item:nn }
- { }
- { }
+ { \token_to_str:N #2 }
+ { \prop_map_function:cN { g_@@_ \cs_to_str:N #2 _name_prop } \msg_show_item:nn }
+ { } { }
}
}
% \end{macrocode}
@@ -566,7 +601,7 @@
%
% \subsection{Messages}
% \begin{macrocode}
- \msg_new:nnn { bitset } { show }
+\msg_new:nnn { bitset } { show }
{
The~bitset~#1~has~the~representation: \\
>~binary:~#2 \\
@@ -589,21 +624,6 @@
%</package>
% \end{macrocode}
%
-% \subsection{Stub package}
-%
-% \begin{macrocode}
-%<*stub>
-% \end{macrocode}
-%
-% \begin{macrocode}
-\ProvidesExplPackage{l3bitset}{2023-12-11}{}
- {L3 Experimental bitset support}
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</stub>
-% \end{macrocode}
-%
% \end{implementation}
%
% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3bootstrap.dtx b/macros/latex/contrib/l3kernel/l3bootstrap.dtx
index 1b9a6e18e6..1e8af0f79e 100644
--- a/macros/latex/contrib/l3kernel/l3bootstrap.dtx
+++ b/macros/latex/contrib/l3kernel/l3bootstrap.dtx
@@ -2,7 +2,7 @@
%
%% File: l3bootstrap.dtx
%
-% Copyright (C) 2011-2023 The LaTeX Project
+% Copyright (C) 2011-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3bootstrap} package\\ Bootstrap code^^A
+% The \pkg{l3bootstrap} module\\ Bootstrap code^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3box.dtx b/macros/latex/contrib/l3kernel/l3box.dtx
index 25de02e6fb..82041737ef 100644
--- a/macros/latex/contrib/l3kernel/l3box.dtx
+++ b/macros/latex/contrib/l3kernel/l3box.dtx
@@ -2,7 +2,7 @@
%
%% File: l3box.dtx
%
-% Copyright (C) 2005-2023 The LaTeX Project
+% Copyright (C) 2005-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3box} package\\ Boxes^^A
+% The \pkg{l3box} module\\ Boxes^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -1493,10 +1493,10 @@
% Put a horizontal box directly into the input stream.
% \begin{macrocode}
\cs_new_protected:Npn \hbox_to_wd:nn #1#2
- {
- \tex_hbox:D to \@@_dim_eval:n {#1}
- { \color_group_begin: #2 \color_group_end: }
- }
+ {
+ \tex_hbox:D to \@@_dim_eval:n {#1}
+ { \color_group_begin: #2 \color_group_end: }
+ }
\cs_new_protected:Npn \hbox_to_zero:n #1
{
\tex_hbox:D to \c_zero_dim
diff --git a/macros/latex/contrib/l3kernel/l3candidates.dtx b/macros/latex/contrib/l3kernel/l3candidates.dtx
index 044f23b41d..05e3fdc23a 100644
--- a/macros/latex/contrib/l3kernel/l3candidates.dtx
+++ b/macros/latex/contrib/l3kernel/l3candidates.dtx
@@ -2,7 +2,7 @@
%
%% File: l3candidates.dtx
%
-% Copyright (C) 2012-2023 The LaTeX Project
+% Copyright (C) 2012-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3candidates} package\\ Experimental additions to
+% The \pkg{l3candidates} module\\ Experimental additions to
% \pkg{l3kernel}^^A
% }
%
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -101,19 +101,6 @@
% \end{texnote}
% \end{function}
%
-% \section{Additions to \pkg{l3tl}}
-%
-% \begin{function}[added = 2018-04-01]{\tl_build_get:NN}
-% \begin{syntax}
-% \cs{tl_build_get:NN} \meta{tl~var_1} \meta{tl~var_2}
-% \end{syntax}
-% Stores the contents of the \meta{tl~var_1} in the \meta{tl~var_2}.
-% The \meta{tl~var_1} must have been set up with \cs{tl_build_begin:N}
-% or \cs{tl_build_gbegin:N}. The \meta{tl~var_2} is a
-% \enquote{normal} token list variable, assigned locally using
-% \cs{tl_set:Nn}.
-% \end{function}
-%
% \end{documentation}
%
% \begin{implementation}
@@ -154,21 +141,6 @@
% \end{macro}
% \end{macro}
%
-% \subsection{Additions to \pkg{l3tl}}
-%
-% \subsubsection{Building a token list}
-%
-% \begin{macrocode}
-%<@@=tl>
-% \end{macrocode}
-%
-% \begin{macro}{\tl_build_get:NN}
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_build_get:NN
- { \@@_build_get:NNN \__kernel_tl_set:Ne }
-% \end{macrocode}
-% \end{macro}
-%
% \begin{macrocode}
%</package>
% \end{macrocode}
diff --git a/macros/latex/contrib/l3kernel/l3cctab.dtx b/macros/latex/contrib/l3kernel/l3cctab.dtx
index 03e6b6f8b5..325d4616df 100644
--- a/macros/latex/contrib/l3kernel/l3cctab.dtx
+++ b/macros/latex/contrib/l3kernel/l3cctab.dtx
@@ -2,7 +2,7 @@
%
%% File: l3cctab.dtx
%
-% Copyright (C) 2018-2023 The LaTeX Project
+% Copyright (C) 2018-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3cctab} package\\ Category code tables^^A
+% The \pkg{l3cctab} module\\ Category code tables^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3clist.dtx b/macros/latex/contrib/l3kernel/l3clist.dtx
index 4783ba761f..7b64db9863 100644
--- a/macros/latex/contrib/l3kernel/l3clist.dtx
+++ b/macros/latex/contrib/l3kernel/l3clist.dtx
@@ -3,7 +3,7 @@
%% File: l3clist.dtx
%
% Copyright (C) 2004-2011 Frank Mittelbach, The LaTeX Project
-% (C) 2012-2023 The LaTeX Project
+% (C) 2012-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -32,7 +32,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3clist} package\\ Comma separated lists^^A
+% The \pkg{l3clist} module\\ Comma separated lists^^A
% }
%
% \author{^^A
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3coffins.dtx b/macros/latex/contrib/l3kernel/l3coffins.dtx
index 217fd933c2..e3d23ea537 100644
--- a/macros/latex/contrib/l3kernel/l3coffins.dtx
+++ b/macros/latex/contrib/l3kernel/l3coffins.dtx
@@ -2,7 +2,7 @@
%
%% File: l3coffins.dtx
%
-% Copyright (C) 2010-2023 The LaTeX Project
+% Copyright (C) 2010-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3coffins} package\\ Coffin code layer^^A
+% The \pkg{l3coffins} module\\ Coffin code layer^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -871,7 +871,7 @@
\box_set_eq:NN #1 #2
\prop_set_eq:cc { coffin ~ \@@_to_value:N #1 ~ corners }
{ coffin ~ \@@_to_value:N #2 ~ corners }
- \prop_set_eq:cc { coffin ~ \@@_to_value:N #1 ~ poles }
+ \prop_set_eq:cc { coffin ~ \@@_to_value:N #1 ~ poles }
{ coffin ~ \@@_to_value:N #2 ~ poles }
}
}
@@ -883,7 +883,7 @@
\box_gset_eq:NN #1 #2
\prop_gset_eq:cc { coffin ~ \@@_to_value:N #1 ~ corners }
{ coffin ~ \@@_to_value:N #2 ~ corners }
- \prop_gset_eq:cc { coffin ~ \@@_to_value:N #1 ~ poles }
+ \prop_gset_eq:cc { coffin ~ \@@_to_value:N #1 ~ poles }
{ coffin ~ \@@_to_value:N #2 ~ poles }
}
}
@@ -1266,7 +1266,7 @@
{
( \dim_to_fp:n {#7} / \dim_to_fp:n {#8} )
* ( \dim_to_fp:n {#4} - \dim_to_fp:n {#6} )
- + \dim_to_fp:n {#5}
+ + \dim_to_fp:n {#5}
}
}
}
@@ -1606,13 +1606,13 @@
\cs_new_protected:Npn \@@_find_corner_maxima_aux:nn #1#2
{
\dim_set:Nn \l_@@_left_corner_dim
- { \dim_min:nn { \l_@@_left_corner_dim } {#1} }
+ { \dim_min:nn { \l_@@_left_corner_dim } {#1} }
\dim_set:Nn \l_@@_right_corner_dim
- { \dim_max:nn { \l_@@_right_corner_dim } {#1} }
+ { \dim_max:nn { \l_@@_right_corner_dim } {#1} }
\dim_set:Nn \l_@@_bottom_corner_dim
- { \dim_min:nn { \l_@@_bottom_corner_dim } {#2} }
+ { \dim_min:nn { \l_@@_bottom_corner_dim } {#2} }
\dim_set:Nn \l_@@_top_corner_dim
- { \dim_max:nn { \l_@@_top_corner_dim } {#2} }
+ { \dim_max:nn { \l_@@_top_corner_dim } {#2} }
}
% \end{macrocode}
% \end{macro}
@@ -1915,13 +1915,13 @@
% The coffin structure is reset, and the corners are cleared: only
% those from the two parent coffins are needed.
% \begin{macrocode}
- \@@_reset_structure:N \l_@@_aligned_coffin
- \prop_clear:c
- {
- coffin ~ \@@_to_value:N \l_@@_aligned_coffin
- \c_space_tl corners
- }
- \@@_update_poles:N \l_@@_aligned_coffin
+ \@@_reset_structure:N \l_@@_aligned_coffin
+ \prop_clear:c
+ {
+ coffin ~ \@@_to_value:N \l_@@_aligned_coffin
+ \c_space_tl corners
+ }
+ \@@_update_poles:N \l_@@_aligned_coffin
% \end{macrocode}
% The structures of the parent coffins are now transferred to the new
% coffin, which requires that the appropriate offsets are applied. That
diff --git a/macros/latex/contrib/l3kernel/l3color.dtx b/macros/latex/contrib/l3kernel/l3color.dtx
index 2fa59821b4..7f9e36e6df 100644
--- a/macros/latex/contrib/l3kernel/l3color.dtx
+++ b/macros/latex/contrib/l3kernel/l3color.dtx
@@ -2,7 +2,7 @@
%
%% File: l3color.dtx
%
-% Copyright (C) 2017-2023 The LaTeX Project
+% Copyright (C) 2017-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3color} package\\ Color support^^A
+% The \pkg{l3color} module\\ Color support^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -779,9 +779,9 @@
\cs_new:Npn \@@_convert_rgb_cmyk:w #1 ~ #2 ~ #3 \s_@@_stop
{
\exp_args:Neee \@@_convert_rgb_cmyk:nnn
- { \fp_eval:n { 1 - #1 } }
- { \fp_eval:n { 1 - #2 } }
- { \fp_eval:n { 1 - #3 } }
+ { \fp_eval:n { 1 - #1 } }
+ { \fp_eval:n { 1 - #2 } }
+ { \fp_eval:n { 1 - #3 } }
}
\cs_new:Npn \@@_convert_rgb_cmyk:nnn #1#2#3
{
@@ -875,9 +875,9 @@
\cs_new_protected:Npn \@@_parse_set_eq:Nn #1#2
{
\tl_if_empty:NTF \l_color_fixed_model_tl
- { \exp_args:Nv \@@_parse_set_eq:nNn { l_@@_named_ #2 _tl } }
- { \exp_args:NV \@@_parse_set_eq:nNn \l_color_fixed_model_tl }
- #1 {#2}
+ { \exp_args:Nv \@@_parse_set_eq:nNn { l_@@_named_ #2 _tl } }
+ { \exp_args:NV \@@_parse_set_eq:nNn \l_color_fixed_model_tl }
+ #1 {#2}
}
% \end{macrocode}
% Here, we have to allow for the case where there is a fixed model:
@@ -894,8 +894,8 @@
\tl_set_eq:Nc \l_@@_model_tl { l_@@_named_ #3 _tl }
\prop_get:cVN { l_@@_named_ #3 _prop } \l_@@_model_tl
\l_@@_value_tl
- \@@_convert:nnN
- \l_@@_model_tl {#1} \l_@@_value_tl
+ \@@_convert:nnN
+ \l_@@_model_tl {#1} \l_@@_value_tl
\tl_set:Ne #2
{
{#1}
@@ -1190,11 +1190,11 @@
\use:e
{
\exp_not:N \@@_parse_model_hsb_aux:nnnnn
- { \@@_parse_number:n {#4} }
- { \fp_eval:n { round(#4 * (1 - #3) ,5) } }
- { \fp_eval:n { round(#4 * ( 1 - #3 * #2 ) ,5) } }
- { \fp_eval:n { round(#4 * ( 1 - #3 * (1 - #2) ) ,5) } }
- {#1}
+ { \@@_parse_number:n {#4} }
+ { \fp_eval:n { round(#4 * (1 - #3) ,5) } }
+ { \fp_eval:n { round(#4 * ( 1 - #3 * #2 ) ,5) } }
+ { \fp_eval:n { round(#4 * ( 1 - #3 * (1 - #2) ) ,5) } }
+ {#1}
}
}
\cs_new:Npn \@@_parse_model_hsb_aux:nnnnn #1#2#3#4#5
@@ -2317,10 +2317,10 @@
\tl_const:cn { c_@@_fallback_ #1 _tl } { cmyk }
\cs_new:cpn { @@_convert_ #1 _cmyk:w } ##1 \s_@@_stop
{
- \fp_eval:n {##1 * #3} ~
- \fp_eval:n {##1 * #4} ~
- \fp_eval:n {##1 * #5} ~
- \fp_eval:n {##1 * #6}
+ \fp_eval:n {##1 * #3} ~
+ \fp_eval:n {##1 * #4} ~
+ \fp_eval:n {##1 * #5} ~
+ \fp_eval:n {##1 * #6}
}
\cs_new:cpn { @@_convert_cmyk_ #1 :w } ##1 \s_@@_stop { 1 }
\prop_gput:Nnn \g_@@_alternative_values_prop {#1} { #3 , #4 , #5 , #6 }
@@ -2332,9 +2332,9 @@
\tl_const:cn { c_@@_fallback_ #1 _tl } { rgb }
\cs_new:cpn { @@_convert_ #1 _rgb:w } ##1 \s_@@_stop
{
- \fp_eval:n {##1 * #3} ~
- \fp_eval:n {##1 * #4} ~
- \fp_eval:n {##1 * #5}
+ \fp_eval:n {##1 * #3} ~
+ \fp_eval:n {##1 * #4} ~
+ \fp_eval:n {##1 * #5}
}
\cs_new:cpn { @@_convert_rgb_ #1 :w } ##1 \s_@@_stop { 1 }
\prop_gput:Nnn \g_@@_alternative_values_prop {#1} { #3 , #4 , #5 }
@@ -2495,7 +2495,7 @@
{#2}
\clist_map_break:n { \use_none:nnnn }
}
- }
+ }
}
{
\str_if_eq:nnF {##1} { none }
diff --git a/macros/latex/contrib/l3kernel/l3debug.dtx b/macros/latex/contrib/l3kernel/l3debug.dtx
index 884ecdf6ac..423ffd5577 100644
--- a/macros/latex/contrib/l3kernel/l3debug.dtx
+++ b/macros/latex/contrib/l3kernel/l3debug.dtx
@@ -2,7 +2,7 @@
%
%% File: l3debug.dtx
%
-% Copyright (C) 2019-2023 The LaTeX Project
+% Copyright (C) 2019-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3debug} package\\ Debugging support^^A
+% The \pkg{l3debug} module\\ Debugging support^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -128,7 +128,7 @@
%
% Standard file identification.
% \begin{macrocode}
-\ProvidesExplFile{l3debug.def}{2023-12-11}{}{L3 Debugging support}
+\ProvidesExplFile{l3debug.def}{2024-01-04}{}{L3 Debugging support}
% \end{macrocode}
%
% \begin{variable}{\s_@@_stop}
@@ -165,12 +165,12 @@
% \begin{macro}{\debug_on:n, \debug_off:n, \@@_all_on:, \@@_all_off:}
% \begin{macrocode}
\cs_set_protected:Npn \debug_on:n #1
- {
+ {
\exp_args:No \clist_map_inline:nn { \tl_to_str:n {#1} }
- {
+ {
\cs_if_exist_use:cF { @@_ ##1 _on: }
{ \msg_error:nnn { debug } { debug } {##1} }
- }
+ }
}
\cs_set_protected:Npn \debug_off:n #1
{
diff --git a/macros/latex/contrib/l3kernel/l3deprecation.dtx b/macros/latex/contrib/l3kernel/l3deprecation.dtx
index f046e4a263..59007c6725 100644
--- a/macros/latex/contrib/l3kernel/l3deprecation.dtx
+++ b/macros/latex/contrib/l3kernel/l3deprecation.dtx
@@ -2,7 +2,7 @@
%
%% File: l3deprecation.dtx
%
-% Copyright (C) 2017-2023 The LaTeX Project
+% Copyright (C) 2017-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3deprecation} package\\ Deprecation errors^^A
+% The \pkg{l3deprecation} module\\ Deprecation errors^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -129,9 +129,9 @@
\__kernel_deprecation_error:Nnn #4 {#2} {#1}
}
{ \tex_let:D #4 \scan_stop: }
- \cs_if_eq:NNTF #3 \cs_gset_protected:Npn
- { \@@_warn_once:nnNnn {#1} {#2} #4 {#5} {#6} }
- { \@@_patch_aux:Nn #3 { #4 #5 {#6} } }
+ \cs_if_eq:NNTF #3 \cs_gset_protected:Npn
+ { \@@_warn_once:nnNnn {#1} {#2} #4 {#5} {#6} }
+ { \@@_patch_aux:Nn #3 { #4 #5 {#6} } }
}
% \end{macrocode}
% In case we want a warning, the \meta{function} is defined to produce
@@ -729,6 +729,13 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\tl_build_get:NN}
+% \begin{macrocode}
+\__kernel_patch_deprecation:nnNNpn { 2023-10-25 } { \tl_build_get_intermediate:NN }
+\cs_new_protected:Npn \tl_build_get:NN { \tl_build_get_intermediate:NN }
+% \end{macrocode}
+% \end{macro}
+%
% \subsection{Deprecated \pkg{l3token} functions}
%
% \begin{macrocode}
diff --git a/macros/latex/contrib/l3kernel/l3doc.dtx b/macros/latex/contrib/l3kernel/l3doc.dtx
index 983df56fab..d24fcce4f8 100644
--- a/macros/latex/contrib/l3kernel/l3doc.dtx
+++ b/macros/latex/contrib/l3kernel/l3doc.dtx
@@ -2,7 +2,7 @@
%
%% File: l3doc.dtx
%
-% Copyright (C) 1990-2023 The LaTeX Project
+% Copyright (C) 1990-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
\askforoverwritefalse
\preamble
-Copyright (C) 1990-2023 The LaTeX Project
+Copyright (C) 1990-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of
the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -71,7 +71,7 @@ and all files in that bundle must be distributed together.
% This isn't included in the typeset documentation because it's a bit
% ugly:
%<*class>
-\ProvidesExplClass{l3doc}{2023-12-11}{}
+\ProvidesExplClass{l3doc}{2024-01-04}{}
{L3 Experimental documentation class}
%</class>
% \fi
@@ -84,7 +84,7 @@ and all files in that bundle must be distributed together.
% require you to do updates, if the class changes.}}
%
% \author{\Team}
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
% \maketitle
% \tableofcontents
%
@@ -1443,11 +1443,11 @@ and all files in that bundle must be distributed together.
\bool_gset_true:N \g_@@_typeset_documentation_bool
\bool_gset_true:N \g_@@_typeset_implementation_bool
} ,
- onlydoc .code:n =
- {
- \bool_gset_true:N \g_@@_typeset_documentation_bool
- \bool_gset_false:N \g_@@_typeset_implementation_bool
- } ,
+ onlydoc .code:n =
+ {
+ \bool_gset_true:N \g_@@_typeset_documentation_bool
+ \bool_gset_false:N \g_@@_typeset_implementation_bool
+ } ,
check .bool_gset:N = \g_@@_checkfunc_bool ,
checktest .bool_gset:N = \g_@@_checktest_bool ,
kernel .bool_gset:N = \g_@@_kernel_bool ,
@@ -2015,28 +2015,28 @@ and all files in that bundle must be distributed together.
% Indexing.
% \begin{macrocode}
\bool_if:NT \l_@@_allow_indexing_bool
- {
- \bool_if:NF \l_@@_cmd_noindex_bool
- {
- \quark_if_no_value:NF \l_@@_cmd_index_tl
- {
- \__kernel_tl_set:Ne \l_@@_cmd_tl
- { \c_backslash_str \exp_not:o { \l_@@_cmd_index_tl } }
- }
- \exp_args:No \@@_key_get:n { \l_@@_cmd_tl }
- \quark_if_no_value:NF \l_@@_cmd_module_tl
+ {
+ \bool_if:NF \l_@@_cmd_noindex_bool
{
- \__kernel_tl_set:Ne \l_@@_index_module_tl
- { \tl_to_str:N \l_@@_cmd_module_tl }
+ \quark_if_no_value:NF \l_@@_cmd_index_tl
+ {
+ \__kernel_tl_set:Ne \l_@@_cmd_tl
+ { \c_backslash_str \exp_not:o { \l_@@_cmd_index_tl } }
+ }
+ \exp_args:No \@@_key_get:n { \l_@@_cmd_tl }
+ \quark_if_no_value:NF \l_@@_cmd_module_tl
+ {
+ \__kernel_tl_set:Ne \l_@@_index_module_tl
+ { \tl_to_str:N \l_@@_cmd_module_tl }
+ }
+ \@@_special_index_module:ooonN
+ { \l_@@_index_key_tl }
+ { \l_@@_index_macro_tl }
+ { \l_@@_index_module_tl }
+ { usage }
+ \l_@@_index_internal_bool
}
- \@@_special_index_module:ooonN
- { \l_@@_index_key_tl }
- { \l_@@_index_macro_tl }
- { \l_@@_index_module_tl }
- { usage }
- \l_@@_index_internal_bool
- }
- }
+ }
}
\cs_generate_variant:Nn \@@_cmd:nn { no }
% \end{macrocode}
@@ -2729,7 +2729,10 @@ and all files in that bundle must be distributed together.
\@@_typeset_aux:n { \@@_get_function_name:n {#1} }
:
\int_compare:nTF { \seq_count:N \g_@@_variants_seq == 1 }
- { \seq_use:Nn \g_@@_variants_seq { } }
+ {
+ \seq_use:Nn \g_@@_variants_seq { }
+ \bool_if:NT #2 { \@@_typeset_TF: }
+ }
{
\hbox_set:Nn \l_tmpa_box
{ \seq_use:Nn \g__@@_variants_seq { \textrm| \nolinebreak[2] } }
@@ -2997,10 +3000,13 @@ and all files in that bundle must be distributed together.
% \end{macro}
%
% \begin{macro}{\@@_macro_save_names:}
+% \begin{macro}[EXP]{\@@_macro_save_names_aux:w}
% The list of names defined in a set of \env{macro} environments is
% eventually used to display on which page they are documented. If
% the |documented-as| key is given, use that, otherwise find names in
-% \cs{l_@@_names_block_tl}.
+% \cs{l_@@_names_block_tl}. The |documented-as| needs to be detokenized
+% without adding a space, so it has to be treated in a slightly awkward
+% way.
% \begin{macrocode}
\cs_new_protected:Npn \@@_macro_save_names:
{
@@ -3008,13 +3014,19 @@ and all files in that bundle must be distributed together.
{ \@@_names_block_base_map:N \@@_macro_save_names_aux:n }
{
\seq_gput_right:Ne \g_@@_nested_names_seq
- { \tl_to_str:N \l_@@_macro_documented_tl }
+ {
+ \exp_after:wN \@@_macro_save_names_aux:w
+ \l_@@_macro_documented_tl \q_@@_stop
+ }
}
}
+\cs_new:Npn \@@_macro_save_names_aux:w #1#2 \q_@@_stop
+ { \token_to_str:N #1 \tl_to_str:n {#2} }
\cs_new_protected:Npn \@@_macro_save_names_aux:n #1
{ \seq_gput_right:Nn \g_@@_nested_names_seq {#1} }
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
% \begin{macro}{\@@_macro_exclude_index:}
% Some control sequences in a \env{macrocode} environment shouldn't
@@ -3316,21 +3328,21 @@ and all files in that bundle must be distributed together.
\cs_new_protected:Npn \@@_macro_end_check_tested:
{
\bool_lazy_all:nT
- {
- { \g_@@_checktest_bool }
- { ! \l_@@_macro_var_bool }
- { ! \l_@@_macro_tested_bool }
- }
- {
- \seq_set_filter:NNn \l_@@_tmpa_seq \l_@@_names_seq
- { ! \@@_if_macro_internal_p:n {##1} }
- \seq_gput_right:Ne \g_@@_not_tested_seq
- {
- \seq_use:Nn \l_@@_tmpa_seq { , }
- \bool_if:NTF \l_@@_macro_pTF_bool {~(pTF)}
- { \bool_if:NT \l_@@_macro_TF_bool {~(TF)} }
- }
- }
+ {
+ { \g_@@_checktest_bool }
+ { ! \l_@@_macro_var_bool }
+ { ! \l_@@_macro_tested_bool }
+ }
+ {
+ \seq_set_filter:NNn \l_@@_tmpa_seq \l_@@_names_seq
+ { ! \@@_if_macro_internal_p:n {##1} }
+ \seq_gput_right:Ne \g_@@_not_tested_seq
+ {
+ \seq_use:Nn \l_@@_tmpa_seq { , }
+ \bool_if:NTF \l_@@_macro_pTF_bool {~(pTF)}
+ { \bool_if:NT \l_@@_macro_TF_bool {~(TF)} }
+ }
+ }
}
% \end{macrocode}
% \end{macro}
@@ -3535,17 +3547,17 @@ and all files in that bundle must be distributed together.
\providecommand\Hy@footnote@currentHref{}
\prop_new:N\g_@@_fnmark_prop
\cs_new_protected:Npn \@@_fn_store:
- {
- \prop_gput:Nee\g_@@_fnmark_prop
- {fn\int_use:N\c@footnote}{{\Hy@footnote@currentHref}{\int_use:N\c@footnote}}
- }
+ {
+ \prop_gput:Nee\g_@@_fnmark_prop
+ {fn\int_use:N\c@footnote}{{\Hy@footnote@currentHref}{\int_use:N\c@footnote}}
+ }
\cs_new_protected:Npn \@@_fn_restore:n #1
- {
- \prop_get:NnN \g_@@_fnmark_prop {fn#1}\l_@@_tmpa_tl
- \tl_gset:Ne\Hy@footnote@currentHref
- {\exp_last_unbraced:NV\use_i:nn \l_@@_tmpa_tl }
- \setcounter{footnote}{\exp_last_unbraced:NV\use_ii:nn \l_@@_tmpa_tl}
- }
+ {
+ \prop_get:NnN \g_@@_fnmark_prop {fn#1}\l_@@_tmpa_tl
+ \tl_gset:Ne\Hy@footnote@currentHref
+ {\exp_last_unbraced:NV\use_i:nn \l_@@_tmpa_tl }
+ \setcounter{footnote}{\exp_last_unbraced:NV\use_ii:nn \l_@@_tmpa_tl}
+ }
\cs_generate_variant:Nn \hook_gput_next_code:nn {ne}
\cs_new_protected:Npn \@@_fn_footnote:nn #1 #2
@@ -3656,7 +3668,7 @@ and all files in that bundle must be distributed together.
% (which may not be the case).
% \begin{macrocode}
\cs_if_exist:NT \MaybeStop
- { \RenewCommandCopy \MaybeStop \StopEventually }
+ { \RenewCommandCopy \MaybeStop \StopEventually }
% \end{macrocode}
%
% \begin{macrocode}
@@ -4664,13 +4676,13 @@ and all files in that bundle must be distributed together.
{
\title
{
- The~\pkg{#1}~package \\ #2
+ The~\pkg{#1}~package \\ #2
}
\author
{
- The~\LaTeX3~Project\thanks{E-mail:~
- \href{mailto:latex-l@listserv.uni-heidelberg.de}
- {latex-l@listserv.uni-heidelberg.de}}
+ The~\LaTeX3~Project\thanks{E-mail:~
+ \href{mailto:latex-l@listserv.uni-heidelberg.de}
+ {latex-l@listserv.uni-heidelberg.de}}
}
\date{Released~\ExplFileDate}
\maketitle
@@ -4686,8 +4698,8 @@ and all files in that bundle must be distributed together.
{
\clist_map_inline:nn
{
- asin, acos, atan, acot,
- asinh, acosh, atanh, acoth, round, floor, ceil
+ asin, acos, atan, acot,
+ asinh, acosh, atanh, acoth, round, floor, ceil
}
{ \exp_args:Nc \DeclareMathOperator{#1}{#1} }
}
diff --git a/macros/latex/contrib/l3kernel/l3doc.pdf b/macros/latex/contrib/l3kernel/l3doc.pdf
index 2ca0d9cbc4..9201da42ef 100644
--- a/macros/latex/contrib/l3kernel/l3doc.pdf
+++ b/macros/latex/contrib/l3kernel/l3doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.dtx b/macros/latex/contrib/l3kernel/l3docstrip.dtx
index 0d21cb4833..9e28f867c2 100644
--- a/macros/latex/contrib/l3kernel/l3docstrip.dtx
+++ b/macros/latex/contrib/l3kernel/l3docstrip.dtx
@@ -2,7 +2,7 @@
%
%% File l3dosctrip.dtx
%
-% Copyright (C) 2012-2023 The LaTeX Project
+% Copyright (C) 2012-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -51,7 +51,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3docstrip} package\\ Code extraction and manipulation^^A
+% The \pkg{l3docstrip} module\\ Code extraction and manipulation^^A
% }
%
% \author{^^A
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.pdf b/macros/latex/contrib/l3kernel/l3docstrip.pdf
index 887d4d5247..cb2d544930 100644
--- a/macros/latex/contrib/l3kernel/l3docstrip.pdf
+++ b/macros/latex/contrib/l3kernel/l3docstrip.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3expan.dtx b/macros/latex/contrib/l3kernel/l3expan.dtx
index e4b8a9967d..dd682a37d8 100644
--- a/macros/latex/contrib/l3kernel/l3expan.dtx
+++ b/macros/latex/contrib/l3kernel/l3expan.dtx
@@ -2,7 +2,7 @@
%
%% File: l3expan.dtx
%
-% Copyright (C) 1990-2023 The LaTeX Project
+% Copyright (C) 1990-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3expan} package\\ Argument expansion^^A
+% The \pkg{l3expan} module\\ Argument expansion^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -1525,7 +1525,7 @@
\cs_new:Npn \exp_last_two_unbraced:Noo #1#2#3
{ \exp_after:wN \@@_last_two_unbraced:noN \exp_after:wN {#3} {#2} #1 }
\cs_new:Npn \@@_last_two_unbraced:noN #1#2#3
- { \exp_after:wN #3 #2 #1 }
+ { \exp_after:wN #3 #2 #1 }
% \end{macrocode}
% \end{macro}
% \end{macro}
diff --git a/macros/latex/contrib/l3kernel/l3file.dtx b/macros/latex/contrib/l3kernel/l3file.dtx
index d33fe899d8..c715b4da65 100644
--- a/macros/latex/contrib/l3kernel/l3file.dtx
+++ b/macros/latex/contrib/l3kernel/l3file.dtx
@@ -2,7 +2,7 @@
%
%% File: l3file.dtx
%
-% Copyright (C) 1990-2023 The LaTeX Project
+% Copyright (C) 1990-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -32,7 +32,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3file} package\\ File and I/O operations^^A
+% The \pkg{l3file} module\\ File and I/O operations^^A
% }
%
% \author{^^A
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -2158,12 +2158,12 @@
% \end{macrocode}
% Sanity check.
% \begin{macrocode}
- \int_compare:nNnT { \l_@@_line_target_int } < 0
- {
- \tl_set:Nn \l_@@_newline_tl { \iow_newline: }
- \int_set:Nn \l_@@_line_target_int
- { \l_iow_line_count_int + 1 }
- }
+ \int_compare:nNnT { \l_@@_line_target_int } < 0
+ {
+ \tl_set:Nn \l_@@_newline_tl { \iow_newline: }
+ \int_set:Nn \l_@@_line_target_int
+ { \l_iow_line_count_int + 1 }
+ }
% \end{macrocode}
% There is then a loop over the input, which stores the wrapped
% result in \cs{l_@@_wrap_tl}. After the loop, the resulting text is
@@ -3372,7 +3372,7 @@
{ \file_full_name:n {#1} }
{ \file_full_name:n {#3} }
#2
- }
+ }
\prg_generate_conditional_variant:Nnn \file_compare_timestamp:nNn
{ nNV , V , VNV } { p , T , F , TF }
\cs_new:Npn \@@_compare_timestamp:nnN #1#2#3
@@ -3388,11 +3388,11 @@
{
\tl_if_blank:nTF {#2}
{
- \if_charcode:w #3 >
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
+ \if_charcode:w #3 >
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
}
{
\if_int_compare:w
@@ -3825,8 +3825,8 @@
{
\exp_args:NV \@@_kernel_dependency_compare:nnn
\c__kernel_expl_date_tl {#1}
- }
- { \@@_kernel_dependency_compare:nnn { 0000-00-00 } {#1} }
+ }
+ { \@@_kernel_dependency_compare:nnn { 0000-00-00 } {#1} }
}
\cs_new_protected:Npn \@@_kernel_dependency_compare:nnn #1 #2 #3
{
diff --git a/macros/latex/contrib/l3kernel/l3flag.dtx b/macros/latex/contrib/l3kernel/l3flag.dtx
index d0203d5209..05768ae069 100644
--- a/macros/latex/contrib/l3kernel/l3flag.dtx
+++ b/macros/latex/contrib/l3kernel/l3flag.dtx
@@ -2,7 +2,7 @@
%
%% File: l3flag.dtx
%
-% Copyright (C) 2011-2023 The LaTeX Project
+% Copyright (C) 2011-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3flag} package\\ Expandable flags^^A
+% The \pkg{l3flag} module\\ Expandable flags^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -61,7 +61,7 @@
% to zero requires non-expandable assignments.
%
% Flag variables are always local. They are referenced by a \meta{flag
-% name} such as \texttt{@@_missing}. The \meta{flag name} is used as
+% name} such as \texttt{fp_overflow}. The \meta{flag name} is used as
% part of \cs{use:c} constructions hence is expanded at point of use.
% It must expand to character tokens only, with no spaces.
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-assign.dtx b/macros/latex/contrib/l3kernel/l3fp-assign.dtx
index f5d3e6bb38..5784537889 100644
--- a/macros/latex/contrib/l3kernel/l3fp-assign.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-assign.dtx
@@ -2,7 +2,7 @@
%
%% File: l3fp-assign.dtx
%
-% Copyright (C) 2011-2023 The LaTeX Project
+% Copyright (C) 2011-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3fp-assign} package\\
+% The \pkg{l3fp-assign} module\\
% Floating point expressions^^A
% }
% \author{^^A
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/contrib/l3kernel/l3fp-aux.dtx b/macros/latex/contrib/l3kernel/l3fp-aux.dtx
index 20c68b2964..1efa9da7cb 100644
--- a/macros/latex/contrib/l3kernel/l3fp-aux.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-aux.dtx
@@ -2,7 +2,7 @@
%
%% File: l3fp-aux.dtx
%
-% Copyright (C) 2011-2023 The LaTeX Project
+% Copyright (C) 2011-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3fp-aux} package\\ Support for floating points^^A
+% The \pkg{l3fp-aux} module\\ Support for floating points^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -906,7 +906,7 @@
#2#3#4; {#5} ;
}
\cs_new:Npn \@@_basics_pack_weird_high:NNNNNNNNw
- 1 #1#2#3#4 #5#6#7#8 #9; { ; {#1#2#3#4} {#5#6#7#8} {#9} }
+ 1 #1#2#3#4 #5#6#7#8 #9; { ; {#1#2#3#4} {#5#6#7#8} {#9} }
% \end{macrocode}
% \end{macro}
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-basics.dtx b/macros/latex/contrib/l3kernel/l3fp-basics.dtx
index 7d2c3527d2..f50bded4d4 100644
--- a/macros/latex/contrib/l3kernel/l3fp-basics.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-basics.dtx
@@ -2,7 +2,7 @@
%
%% File: l3fp-basics.dtx
%
-% Copyright (C) 2011-2023 The LaTeX Project
+% Copyright (C) 2011-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3fp-basics} package\\
+% The \pkg{l3fp-basics} module\\
% Floating point arithmetic^^A
% }
% \author{^^A
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-convert.dtx b/macros/latex/contrib/l3kernel/l3fp-convert.dtx
index 4a1c9f2211..30cff3bb38 100644
--- a/macros/latex/contrib/l3kernel/l3fp-convert.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-convert.dtx
@@ -2,7 +2,7 @@
%
%% File: l3fp-convert.dtx
%
-% Copyright (C) 2011-2023 The LaTeX Project
+% Copyright (C) 2011-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3fp-convert} package\\ Floating point conversion^^A
+% The \pkg{l3fp-convert} module\\ Floating point conversion^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-expo.dtx b/macros/latex/contrib/l3kernel/l3fp-expo.dtx
index bf385275ef..3a7616d3b9 100644
--- a/macros/latex/contrib/l3kernel/l3fp-expo.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-expo.dtx
@@ -2,7 +2,7 @@
%
%% File: l3fp-expo.dtx
%
-% Copyright (C) 2011-2023 The LaTeX Project
+% Copyright (C) 2011-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3fp-expo} package\\
+% The \pkg{l3fp-expo} module\\
% Floating point exponential-related functions^^A
% }
% \author{^^A
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-extended.dtx b/macros/latex/contrib/l3kernel/l3fp-extended.dtx
index 9350c1c41b..d65b1a1160 100644
--- a/macros/latex/contrib/l3kernel/l3fp-extended.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-extended.dtx
@@ -2,7 +2,7 @@
%
%% File: l3fp-extended.dtx
%
-% Copyright (C) 2011-2023 The LaTeX Project
+% Copyright (C) 2011-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3fp-extended} package\\
+% The \pkg{l3fp-extended} module\\
% Manipulating numbers with extended precision, for internal use^^A
% }
% \author{^^A
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-functions.dtx b/macros/latex/contrib/l3kernel/l3fp-functions.dtx
index 3ed473a097..d140af6758 100644
--- a/macros/latex/contrib/l3kernel/l3fp-functions.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-functions.dtx
@@ -30,7 +30,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3fp-functions} package\\ Floating point functions^^A
+% The \pkg{l3fp-functions} module\\ Floating point functions^^A
% }
%
% \author{^^A
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-logic.dtx b/macros/latex/contrib/l3kernel/l3fp-logic.dtx
index 004290b05d..31cd180c39 100644
--- a/macros/latex/contrib/l3kernel/l3fp-logic.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-logic.dtx
@@ -2,7 +2,7 @@
%
%% File: l3fp-logic.dtx
%
-% Copyright (C) 2011-2023 The LaTeX Project
+% Copyright (C) 2011-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3fp-logic} package\\
+% The \pkg{l3fp-logic} module\\
% Floating point conditionals^^A
% }
% \author{^^A
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-parse.dtx b/macros/latex/contrib/l3kernel/l3fp-parse.dtx
index 0bc6861903..a4d2979c1e 100644
--- a/macros/latex/contrib/l3kernel/l3fp-parse.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-parse.dtx
@@ -2,7 +2,7 @@
%
%% File: l3fp-parse.dtx
%
-% Copyright (C) 2011-2023 The LaTeX Project
+% Copyright (C) 2011-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3fp-parse} package\\
+% The \pkg{l3fp-parse} module\\
% Floating point expression parsing^^A
% }
% \author{^^A
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-random.dtx b/macros/latex/contrib/l3kernel/l3fp-random.dtx
index 28a9d11dde..95671bce21 100644
--- a/macros/latex/contrib/l3kernel/l3fp-random.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-random.dtx
@@ -2,7 +2,7 @@
%
%% File: l3fp-random.dtx
%
-% Copyright (C) 2016-2023 The LaTeX Project
+% Copyright (C) 2016-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3fp-random} package\\
+% The \pkg{l3fp-random} module\\
% Floating point random numbers
% }
% \author{^^A
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -434,10 +434,10 @@
\cs_new:Npn \@@_randint_auxiv_o:ww #1#2#3#4#5 ; #6#7#8#9
{
\if_int_compare:w
- \if_int_compare:w #1#2 > #6#7 \exp_stop_f: 1 \else:
+ \if_int_compare:w #1#2 > #6#7 \exp_stop_f: 1 \else:
\if_int_compare:w #1#2 < #6#7 \exp_stop_f: - \fi: \fi:
- #3#4 > #8#9 \exp_stop_f:
- \@@_use_i_until_s:nw
+ #3#4 > #8#9 \exp_stop_f:
+ \@@_use_i_until_s:nw
\fi:
\@@_randint_auxv_o:w {#1}{#2}{#3}{#4}#5
}
@@ -567,8 +567,8 @@
\exp_after:wN \@@_randint_wide_auxii:w
\int_value:w \@@_int_eval:w #5 * #3 + #6 * #1 +
(#5 * #4 + #6 * #3 + #7 * #1 +
- (#5 * #2 + #7 * #3 +
- (16384 * #6 + #7) * (16384 * #4 + #2) / 268435456) / 16384
+ (#5 * #2 + #7 * #3 +
+ (16384 * #6 + #7) * (16384 * #4 + #2) / 268435456) / 16384
) / 16384 \exp_after:wN ;
\int_value:w \@@_int_eval:w (#5 + #6) * 16384 + #7 ;
#1 ; #5 ;
diff --git a/macros/latex/contrib/l3kernel/l3fp-round.dtx b/macros/latex/contrib/l3kernel/l3fp-round.dtx
index 4fbc392922..8061147f0a 100644
--- a/macros/latex/contrib/l3kernel/l3fp-round.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-round.dtx
@@ -2,7 +2,7 @@
%
%% File: l3fp-round.dtx
%
-% Copyright (C) 2011-2023 The LaTeX Project
+% Copyright (C) 2011-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3fp-round} package\\ Rounding floating points^^A
+% The \pkg{l3fp-round} module\\ Rounding floating points^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-symbolic.dtx b/macros/latex/contrib/l3kernel/l3fp-symbolic.dtx
index 596eb65a22..22b9585e5d 100644
--- a/macros/latex/contrib/l3kernel/l3fp-symbolic.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-symbolic.dtx
@@ -30,7 +30,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3fp-symbolic} package\\ Symbolic expressions^^A
+% The \pkg{l3fp-symbolic} module\\ Symbolic expressions^^A
% }
%
% \author{^^A
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -599,8 +599,8 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\fp_set_variable:nn}
-% \begin{macro}{\@@_set_variable:nn}
+% \begin{variable}{@@_symbolic}
+% \begin{macro}{\fp_set_variable:nn, \@@_set_variable:nn}
% Refuse invalid identifiers. If the variable does not exist yet,
% define it just as in \cs{fp_new_variable:n} (but without unnecessary
% checks). Then evaluate~|#2|. If the result contains the
@@ -642,7 +642,7 @@
}
% \end{macrocode}
% \end{macro}
-% \end{macro}
+% \end{variable}
%
% \subsection{Messages}
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-traps.dtx b/macros/latex/contrib/l3kernel/l3fp-traps.dtx
index e2ce4ea35a..983fb91171 100644
--- a/macros/latex/contrib/l3kernel/l3fp-traps.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-traps.dtx
@@ -2,7 +2,7 @@
%
%% File: l3fp-traps.dtx
%
-% Copyright (C) 2011-2023 The LaTeX Project
+% Copyright (C) 2011-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3fp-traps} package\\
+% The \pkg{l3fp-traps} module\\
% Trapping floating-point exceptions^^A
% }
% \author{^^A
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
% \maketitle
%
% \begin{documentation}
@@ -74,10 +74,10 @@
%
% \begin{variable}[module = fp]
% {
-% flag fp_invalid_operation,
-% flag fp_division_by_zero,
-% flag fp_overflow,
-% flag fp_underflow
+% fp_invalid_operation,
+% fp_division_by_zero,
+% fp_overflow,
+% fp_underflow
% }
% Flags to denote exceptions.
% \begin{macrocode}
diff --git a/macros/latex/contrib/l3kernel/l3fp-trig.dtx b/macros/latex/contrib/l3kernel/l3fp-trig.dtx
index 9c329e4b95..78e1403da0 100644
--- a/macros/latex/contrib/l3kernel/l3fp-trig.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-trig.dtx
@@ -2,7 +2,7 @@
%
%% File: l3fp-trig.dtx
%
-% Copyright (C) 2011-2023 The LaTeX Project
+% Copyright (C) 2011-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3fp-trig} package\\
+% The \pkg{l3fp-trig} module\\
% Floating point trigonometric functions^^A
% }
% \author{^^A
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-types.dtx b/macros/latex/contrib/l3kernel/l3fp-types.dtx
index 46fe0c19c3..cf76b2747b 100644
--- a/macros/latex/contrib/l3kernel/l3fp-types.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-types.dtx
@@ -30,7 +30,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3fp-types} package\\ Floating point types^^A
+% The \pkg{l3fp-types} module\\ Floating point types^^A
% }
%
% \author{^^A
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp.dtx b/macros/latex/contrib/l3kernel/l3fp.dtx
index 3da05f4d19..4f4fee8af6 100644
--- a/macros/latex/contrib/l3kernel/l3fp.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp.dtx
@@ -2,7 +2,7 @@
%
%% File: l3fp.dtx
%
-% Copyright (C) 2011-2023 The LaTeX Project
+% Copyright (C) 2011-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -37,7 +37,7 @@
%
%
% \title{^^A
-% The \pkg{l3fp} package\\ Floating points^^A
+% The \pkg{l3fp} module\\ Floating points^^A
% }
%
% \author{^^A
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -909,10 +909,10 @@
%
% \begin{variable}[module = fp]
% {
-% flag fp_overflow,
-% flag fp_underflow,
-% flag fp_invalid_operation,
-% flag fp_division_by_zero
+% fp_overflow,
+% fp_underflow,
+% fp_invalid_operation,
+% fp_division_by_zero
% }
% Flags denoting the occurrence of various floating-point exceptions.
% \end{variable}
@@ -1567,7 +1567,7 @@
%
% \section{Disclaimer and roadmap}
%
-% The package may break down if the escape character is among
+% This module may break if the escape character is among
% |0123456789_+|, or if it receives a \TeX{} primitive conditional affected
% by \cs{exp_not:N}.
%
diff --git a/macros/latex/contrib/l3kernel/l3fparray.dtx b/macros/latex/contrib/l3kernel/l3fparray.dtx
index 61c5fce745..6f8e1c4c0e 100644
--- a/macros/latex/contrib/l3kernel/l3fparray.dtx
+++ b/macros/latex/contrib/l3kernel/l3fparray.dtx
@@ -2,7 +2,7 @@
%
%% File: l3fparray.dtx
%
-% Copyright (C) 2018-2023 The LaTeX Project
+% Copyright (C) 2018-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -32,7 +32,7 @@
%
%
% \title{^^A
-% The \pkg{l3fparray} package\\ Fast global floating point arrays^^A
+% The \pkg{l3fparray} module\\ Fast global floating point arrays^^A
% }
%
% \author{^^A
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3int.dtx b/macros/latex/contrib/l3kernel/l3int.dtx
index b3282ff9da..e0be12a51e 100644
--- a/macros/latex/contrib/l3kernel/l3int.dtx
+++ b/macros/latex/contrib/l3kernel/l3int.dtx
@@ -2,7 +2,7 @@
%
%% File: l3int.dtx
%
-% Copyright (C) 1990-2023 The LaTeX Project
+% Copyright (C) 1990-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3int} package\\ Integers^^A
+% The \pkg{l3int} module\\ Integers^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3intarray.dtx b/macros/latex/contrib/l3kernel/l3intarray.dtx
index 130da0503e..c29930bd79 100644
--- a/macros/latex/contrib/l3kernel/l3intarray.dtx
+++ b/macros/latex/contrib/l3kernel/l3intarray.dtx
@@ -2,7 +2,7 @@
%
%% File: l3intarray.dtx
%
-% Copyright (C) 2017-2023 The LaTeX Project
+% Copyright (C) 2017-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -32,7 +32,7 @@
%
%
% \title{^^A
-% The \pkg{l3intarray} package\\ Fast global integer arrays^^A
+% The \pkg{l3intarray} module\\ Fast global integer arrays^^A
% }
%
% \author{^^A
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -151,7 +151,7 @@
% $2^{30}-1$). In contrast to \pkg{l3seq} sequences the access to
% individual entries is done in constant time rather than linear time,
% but only integers can be stored. More precisely, the primitive
-% \tn{fontdimen} stores dimensions but the \pkg{l3intarray} package
+% \tn{fontdimen} stores dimensions but the \pkg{l3intarray} module
% transparently converts these from/to integers. Assignments are always
% global.
%
diff --git a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
index b9602fd17c..509abeedd6 100644
--- a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
+++ b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
@@ -2,7 +2,7 @@
%
%% File: l3kernel-functions.dtx
%
-% Copyright (C) 2018-2023 The LaTeX Project
+% Copyright (C) 2018-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3kernel-functions} package\\ Kernel-reserved functions^^A
+% The \pkg{l3kernel-functions} module\\ Kernel-reserved functions^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3keys.dtx b/macros/latex/contrib/l3kernel/l3keys.dtx
index c300e3e5ee..9919abfd86 100644
--- a/macros/latex/contrib/l3kernel/l3keys.dtx
+++ b/macros/latex/contrib/l3kernel/l3keys.dtx
@@ -2,7 +2,7 @@
%
%% File: l3keys.dtx
%
-% Copyright (C) 2006-2023 The LaTeX Project
+% Copyright (C) 2006-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3keys} package\\ Key--value interfaces^^A
+% The \pkg{l3keys} module\\ Key--value interfaces^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -775,12 +775,14 @@
% If a key has not previously been defined (is unknown), \cs{keys_set:nn}
% looks for a special \texttt{unknown} key for the same module, and if this is
% not defined raises an error indicating that the key name was unknown. This
-% mechanism can be used for example to issue custom error texts.
+% mechanism can be used for example to issue custom error texts. The
+% \texttt{unknown} key also supports the \texttt{.default:n} property.
% \begin{verbatim}
% \keys_define:nn { mymodule }
% {
% unknown .code:n =
-% You~tried~to~set~key~'\l_keys_key_str'~to~'#1'.
+% You~tried~to~set~key~'\l_keys_key_str'~to~'#1'. ,
+% unknown .default:V = \c_novalue_tl
% }
% \end{verbatim}
%
@@ -1344,9 +1346,9 @@
% \begin{macrocode}
\cs_new:Npn \@@_misplaced_equal_after_active_error:w
\s_@@_mark ##1 \s_@@_stop \s_@@_mark ##2 \s_@@_nil
- = \s_@@_mark \@@_split_active_auxii:w
- \s_@@_mark ##3 \s_@@_nil
- #2 \s_@@_mark \@@_clean_up_active:w
+ = \s_@@_mark \@@_split_active_auxii:w
+ \s_@@_mark ##3 \s_@@_nil
+ #2 \s_@@_mark \@@_clean_up_active:w
{
\msg_expandable_error:nn
{ keyval } { misplaced-equals-sign }
@@ -1813,28 +1815,29 @@
% \end{macro}
%
% \begin{macro}{\@@_property_find:n}
-% \begin{macro}
+% \begin{macro}[EXP]{\@@_property_find_auxi:w}
+% \begin{macro}{\@@_property_find_auxii:w}
+% \begin{macro}[EXP]
% {
-% \@@_property_find_auxi:w ,
-% \@@_property_find_auxii:w ,
% \@@_property_find_auxiii:w ,
% \@@_property_find_auxiv:w
% }
+% \begin{macro}{\@@_property_find_err:w}
% Searching for a property means finding the last |.| in the input,
-% and storing the text before and after it. Everything is turned into
-% strings, so there is no problem using an \texttt{e}-type expansion. Since
-% \cs{@@_trim_spaces:n} will turn its argument into a string anyway, this
-% function uses \cs{cs_set_nopar:Npe} instead of \cs{tl_set:Ne} to gain some
-% speed.
+% and storing the text before and after it. Everything is first turned into
+% strings, so there is no problem using \cs{cs_set_nopar:Npe} instead of
+% \cs{str_set:Ne} to set \cs{l_keys_path_str}. To gain further speed, brace
+% tricks are used and \cs{@@_property_find_auxiv:w} is defined as expandable.
+% Since spaces will already be trimmed from the module we can omit it from the
+% argument to \cs{@@_trim_spaces:n}.
% \begin{macrocode}
\cs_new_protected:Npn \@@_property_find:n #1
{
- \cs_set_nopar:Npe \l_@@_property_str { \@@_trim_spaces:n { #1 } }
- \exp_after:wN \@@_property_find_auxi:w \l_@@_property_str
+ \exp_after:wN \@@_property_find_auxi:w \tl_to_str:n {#1}
\s_@@_nil \@@_property_find_auxii:w
. \s_@@_nil \@@_property_find_err:w
}
-\cs_new_protected:Npn \@@_property_find_auxi:w #1 . #2 \s_@@_nil #3
+\cs_new:Npn \@@_property_find_auxi:w #1 . #2 \s_@@_nil #3
{
#3 #1 \s_@@_mark #2 \s_@@_nil #3
}
@@ -1843,22 +1846,24 @@
\@@_property_find_err:w
{
\cs_set_nopar:Npe \l_keys_path_str
- { \str_if_empty:NF \l_@@_module_str { \l_@@_module_str / } #1 }
- \@@_property_find_auxi:w #2 \s_@@_nil \@@_property_find_auxiii:w . \s_@@_nil
- \@@_property_find_auxiv:w
+ {
+ \str_if_empty:NF \l_@@_module_str { \l_@@_module_str / }
+ \exp_after:wN \@@_trim_spaces:n \tex_expanded:D {{
+ #1
+ \if_false: }}} \fi:
+ \@@_property_find_auxi:w #2 \s_@@_nil \@@_property_find_auxiii:w
+ . \s_@@_nil \@@_property_find_auxiv:w
}
-\cs_new_protected:Npn \@@_property_find_auxiii:w #1 \s_@@_mark
+\cs_new:Npn \@@_property_find_auxiii:w #1 \s_@@_mark #2 . #3 \s_@@_nil #4
{
- \cs_set_nopar:Npe \l_keys_path_str { \l_keys_path_str . #1 }
- \@@_property_find_auxi:w
+ . #1 #4 #2 \s_@@_mark #3 \s_@@_nil #4
}
-\cs_new_protected:Npn \@@_property_find_auxiv:w
+\cs_new:Npn \@@_property_find_auxiv:w
#1 \s_@@_nil \@@_property_find_auxiii:w
\s_@@_mark \s_@@_nil \@@_property_find_auxiv:w
{
+ \if_false: {{{ \fi: }}}
\cs_set_nopar:Npe \l_@@_property_str { . #1 }
- \cs_set_nopar:Npe \l_keys_path_str
- { \exp_after:wN \@@_trim_spaces:n \exp_after:wN { \l_keys_path_str } }
\tl_set_eq:NN \l_keys_path_tl \l_keys_path_str
}
\cs_new_protected:Npn \@@_property_find_err:w
@@ -1870,6 +1875,9 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
%
% \begin{macro}{\@@_define_code:n}
% \begin{macro}[EXP]{\@@_define_code:w}
@@ -2154,8 +2162,8 @@
\@@_default_set:n { true }
\cs_if_exist:cF { if#1 }
{
- \cs:w newif \exp_after:wN \cs_end:
- \cs:w if#1 \cs_end:
+ \cs:w newif \exp_after:wN \cs_end:
+ \cs:w if#1 \cs_end:
}
}
% \end{macrocode}
@@ -3242,7 +3250,19 @@
{
\cs_if_exist:cTF
{ \c_@@_code_root_str \l_@@_module_str / unknown }
- { \@@_execute:no { \l_@@_module_str / unknown } \l_keys_value_tl }
+ {
+ \bool_if:NT \l_@@_no_value_bool
+ {
+ \cs_if_exist:cT
+ { \c_@@_default_root_str \l_@@_module_str / unknown }
+ {
+ \tl_set_eq:Nc
+ \l_keys_value_tl
+ { \c_@@_default_root_str \l_@@_module_str / unknown }
+ }
+ }
+ \@@_execute:no { \l_@@_module_str / unknown } \l_keys_value_tl
+ }
{
\msg_error:nnee { keys } { unknown }
\l_keys_path_str \l_@@_module_str
diff --git a/macros/latex/contrib/l3kernel/l3legacy.dtx b/macros/latex/contrib/l3kernel/l3legacy.dtx
index 2311d28bba..8f72634dc5 100644
--- a/macros/latex/contrib/l3kernel/l3legacy.dtx
+++ b/macros/latex/contrib/l3kernel/l3legacy.dtx
@@ -2,7 +2,7 @@
%
%% File: l3legacy.dtx
%
-% Copyright (C) 2019-2023 The LaTeX Project
+% Copyright (C) 2019-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3legacy} package\\ Interfaces to legacy concepts^^A
+% The \pkg{l3legacy} module\\ Interfaces to legacy concepts^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3luatex.dtx b/macros/latex/contrib/l3kernel/l3luatex.dtx
index d3be98cb59..59e49857e7 100644
--- a/macros/latex/contrib/l3kernel/l3luatex.dtx
+++ b/macros/latex/contrib/l3kernel/l3luatex.dtx
@@ -2,7 +2,7 @@
%
%% File: l3luatex.dtx
%
-% Copyright (C) 2010-2023 The LaTeX Project
+% Copyright (C) 2010-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3luatex} package\\ \LuaTeX-specific functions^^A
+% The \pkg{l3luatex} module\\ \LuaTeX-specific functions^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3msg.dtx b/macros/latex/contrib/l3kernel/l3msg.dtx
index f9c4dd9945..b504e402f7 100644
--- a/macros/latex/contrib/l3kernel/l3msg.dtx
+++ b/macros/latex/contrib/l3kernel/l3msg.dtx
@@ -2,7 +2,7 @@
%
%% File: l3msg.dtx
%
-% Copyright (C) 2009-2023 The LaTeX Project
+% Copyright (C) 2009-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3msg} package\\ Messages^^A
+% The \pkg{l3msg} module\\ Messages^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -936,9 +936,9 @@
{ \use:c { \c_@@_text_prefix_tl #2 / #3 } #4 }
{ \c_@@_continue_text_tl }
{
- \c_@@_no_info_text_tl
- \tl_if_empty:NF #5
- { \\ \\ #5 }
+ \c_@@_no_info_text_tl
+ \tl_if_empty:NF #5
+ { \\ \\ #5 }
}
}
{
@@ -946,9 +946,9 @@
{ \use:c { \c_@@_text_prefix_tl #2 / #3 } #4 }
{ \c_@@_help_text_tl }
{
- \use:c { \c_@@_more_text_prefix_tl #2 / #3 } #4
- \tl_if_empty:NF #5
- { \\ \\ #5 }
+ \use:c { \c_@@_more_text_prefix_tl #2 / #3 } #4
+ \tl_if_empty:NF #5
+ { \\ \\ #5 }
}
}
}
@@ -1189,7 +1189,7 @@
{ nnVV , nnVn , nnnV , nnne , nnnx , nnee , nnxx }
\cs_generate_variant:cn { msg_ #1 :nnnnn }
{ nnnee , nnnxx , nneee , nnxxx }
- \cs_generate_variant:cn { msg_ #1 :nnnnnn } { nneeee , nnxxxx }
+ \cs_generate_variant:cn { msg_ #1 :nnnnnn } { nneeee , nnxxxx }
}
% \end{macrocode}
% \end{macro}
@@ -1403,14 +1403,14 @@
{
( \l_@@_name_str )
\prg_replicate:nn
- {
- \str_count:N \l_@@_text_str
- - \str_count:N \l_@@_name_str
- }
+ {
+ \str_count:N \l_@@_text_str
+ - \str_count:N \l_@@_name_str
+ }
{ ~ }
- }
- { } #1
- #1 { }
+ }
+ { } #1
+ #1 { }
}
\@@_class_new:nn { warning }
{
@@ -2042,7 +2042,7 @@
\msg_new:nnnn { kernel } { no-elapsed-time }
{ No~clock~detected~for~#1. }
{ The~current~engine~provides~no~way~to~access~the~system~time. }
- }
+ }
\msg_new:nnnn { kernel } { non-base-function }
{ Function~'#1'~is~not~a~base~function }
{
diff --git a/macros/latex/contrib/l3kernel/l3names.dtx b/macros/latex/contrib/l3kernel/l3names.dtx
index c1478161d6..58c7828ac9 100644
--- a/macros/latex/contrib/l3kernel/l3names.dtx
+++ b/macros/latex/contrib/l3kernel/l3names.dtx
@@ -2,7 +2,7 @@
%
%% File: l3names.dtx
%
-% Copyright (C) 1990-2023 The LaTeX Project
+% Copyright (C) 1990-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3names} package\\ Namespace for primitives^^A
+% The \pkg{l3names} module\\ Namespace for primitives^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -117,7 +117,7 @@
%<*names|package>
% \end{macrocode}
%
-% In the current incarnation of this package, all \TeX{} primitives
+% In the current incarnation of this module, all \TeX{} primitives
% are given a new name of the form |\tex_|\emph{oldname}|:D|.
% But first three special cases which have symbolic original names.
% These are given modified new names, so that they may be entered
@@ -1096,7 +1096,7 @@
\@@_primitive:NN \Umathoverbarrule \tex_Umathoverbarrule:D
\@@_primitive:NN \Umathoverbarvgap \tex_Umathoverbarvgap:D
\@@_primitive:NN \Umathoverdelimiterbgap
- \tex_Umathoverdelimiterbgap:D
+ \tex_Umathoverdelimiterbgap:D
\@@_primitive:NN \Umathoverdelimitervgap
\tex_Umathoverdelimitervgap:D
\@@_primitive:NN \Umathpunctbinspacing \tex_Umathpunctbinspacing:D
diff --git a/macros/latex/contrib/l3kernel/l3news.pdf b/macros/latex/contrib/l3kernel/l3news.pdf
index 2c87f4f00c..0a5bc3794d 100644
--- a/macros/latex/contrib/l3kernel/l3news.pdf
+++ b/macros/latex/contrib/l3kernel/l3news.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news01.pdf b/macros/latex/contrib/l3kernel/l3news01.pdf
index 2caf5448b9..ca854aca2d 100644
--- a/macros/latex/contrib/l3kernel/l3news01.pdf
+++ b/macros/latex/contrib/l3kernel/l3news01.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news02.pdf b/macros/latex/contrib/l3kernel/l3news02.pdf
index 7bf6c3b5b7..abc710c5e8 100644
--- a/macros/latex/contrib/l3kernel/l3news02.pdf
+++ b/macros/latex/contrib/l3kernel/l3news02.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news03.pdf b/macros/latex/contrib/l3kernel/l3news03.pdf
index 7e790309ac..67c3c65908 100644
--- a/macros/latex/contrib/l3kernel/l3news03.pdf
+++ b/macros/latex/contrib/l3kernel/l3news03.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news04.pdf b/macros/latex/contrib/l3kernel/l3news04.pdf
index c0e7744a12..aeae2e688f 100644
--- a/macros/latex/contrib/l3kernel/l3news04.pdf
+++ b/macros/latex/contrib/l3kernel/l3news04.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news05.pdf b/macros/latex/contrib/l3kernel/l3news05.pdf
index 09a8a17473..33026d2cdc 100644
--- a/macros/latex/contrib/l3kernel/l3news05.pdf
+++ b/macros/latex/contrib/l3kernel/l3news05.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news06.pdf b/macros/latex/contrib/l3kernel/l3news06.pdf
index e17d4ba600..cab5c11273 100644
--- a/macros/latex/contrib/l3kernel/l3news06.pdf
+++ b/macros/latex/contrib/l3kernel/l3news06.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news07.pdf b/macros/latex/contrib/l3kernel/l3news07.pdf
index ee3855783f..c5a3d300a5 100644
--- a/macros/latex/contrib/l3kernel/l3news07.pdf
+++ b/macros/latex/contrib/l3kernel/l3news07.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news08.pdf b/macros/latex/contrib/l3kernel/l3news08.pdf
index 8673d4a078..5a5517c002 100644
--- a/macros/latex/contrib/l3kernel/l3news08.pdf
+++ b/macros/latex/contrib/l3kernel/l3news08.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news09.pdf b/macros/latex/contrib/l3kernel/l3news09.pdf
index 00fff384ee..95f1aa0ee5 100644
--- a/macros/latex/contrib/l3kernel/l3news09.pdf
+++ b/macros/latex/contrib/l3kernel/l3news09.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news10.pdf b/macros/latex/contrib/l3kernel/l3news10.pdf
index dcac23758d..1b8dc9af29 100644
--- a/macros/latex/contrib/l3kernel/l3news10.pdf
+++ b/macros/latex/contrib/l3kernel/l3news10.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news11.pdf b/macros/latex/contrib/l3kernel/l3news11.pdf
index 1a3a1038f6..bfb59818be 100644
--- a/macros/latex/contrib/l3kernel/l3news11.pdf
+++ b/macros/latex/contrib/l3kernel/l3news11.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news12.pdf b/macros/latex/contrib/l3kernel/l3news12.pdf
index 5ff84d3990..eddbad6dca 100644
--- a/macros/latex/contrib/l3kernel/l3news12.pdf
+++ b/macros/latex/contrib/l3kernel/l3news12.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3pdf.dtx b/macros/latex/contrib/l3kernel/l3pdf.dtx
index 09013a7a7f..863d3681c3 100644
--- a/macros/latex/contrib/l3kernel/l3pdf.dtx
+++ b/macros/latex/contrib/l3kernel/l3pdf.dtx
@@ -2,7 +2,7 @@
%
%% File: l3pdf.dtx
%
-% Copyright(C) 2019-2023 The LaTeX Project
+% Copyright(C) 2019-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3pdf} package\\ Core PDF support^^A
+% The \pkg{l3pdf} module\\ Core PDF support^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -382,37 +382,37 @@
\prg_new_conditional:Npnn \pdf_version_compare:Nn #1#2 { p , T , F , TF }
{ \use:c { @@_version_compare_ #1 :w } #2 . . \s_@@_stop }
\cs_new:cpn { @@_version_compare_=:w } #1 . #2 . #3 \s_@@_stop
- {
- \bool_lazy_and:nnTF
- { \int_compare_p:nNn \@@_backend_version_major: = {#1} }
- { \int_compare_p:nNn \@@_backend_version_minor: = {#2} }
- { \prg_return_true: }
- { \prg_return_false: }
- }
+ {
+ \bool_lazy_and:nnTF
+ { \int_compare_p:nNn \@@_backend_version_major: = {#1} }
+ { \int_compare_p:nNn \@@_backend_version_minor: = {#2} }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
\cs_new:cpn { @@_version_compare_<:w } #1 . #2 . #3 \s_@@_stop
- {
- \bool_lazy_or:nnTF
- { \int_compare_p:nNn \@@_backend_version_major: < {#1} }
- {
- \bool_lazy_and_p:nn
- { \int_compare_p:nNn \@@_backend_version_major: = {#1} }
- { \int_compare_p:nNn \@@_backend_version_minor: < {#2} }
- }
- { \prg_return_true: }
- { \prg_return_false: }
- }
+ {
+ \bool_lazy_or:nnTF
+ { \int_compare_p:nNn \@@_backend_version_major: < {#1} }
+ {
+ \bool_lazy_and_p:nn
+ { \int_compare_p:nNn \@@_backend_version_major: = {#1} }
+ { \int_compare_p:nNn \@@_backend_version_minor: < {#2} }
+ }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
\cs_new:cpn { @@_version_compare_>:w } #1 . #2 . #3 \s_@@_stop
- {
- \bool_lazy_or:nnTF
- { \int_compare_p:nNn \@@_backend_version_major: > {#1} }
- {
- \bool_lazy_and_p:nn
- { \int_compare_p:nNn \@@_backend_version_major: = {#1} }
- { \int_compare_p:nNn \@@_backend_version_minor: > {#2} }
- }
- { \prg_return_true: }
- { \prg_return_false: }
- }
+ {
+ \bool_lazy_or:nnTF
+ { \int_compare_p:nNn \@@_backend_version_major: > {#1} }
+ {
+ \bool_lazy_and_p:nn
+ { \int_compare_p:nNn \@@_backend_version_major: = {#1} }
+ { \int_compare_p:nNn \@@_backend_version_minor: > {#2} }
+ }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
% \end{macrocode}
% \end{macro}
% \end{macro}
diff --git a/macros/latex/contrib/l3kernel/l3prefixes.csv b/macros/latex/contrib/l3kernel/l3prefixes.csv
index 1baf489209..e3512672ff 100644
--- a/macros/latex/contrib/l3kernel/l3prefixes.csv
+++ b/macros/latex/contrib/l3kernel/l3prefixes.csv
@@ -12,7 +12,7 @@ alloc,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https
ampersand,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
apfs,apfontspec,Qing Lee,https://github.com/CTeX-org/apfontspec,https://github.com/CTeX-org/apfontspec.git,https://github.com/CTeX-org/apfontspec/issues,2020-05-17,2020-05-17,
arch,archaeologie,Lukas C. Bossert,http://www.biblatex-archaeologie.de,https://github.com/LukasCBossert/biblatex-archaeologie.git,https://github.com/LukasCBossert/biblatex-archaeologie/issues,2017-03-24,2017-03-24,
-arsenal,arsenal,Boris Veytsman,https://github.com/borisveytsman/arsenal,https://github.com/borisveytsman/arsenal,https://github.com/borisveytsman/arsenal/issues
+arsenal,arsenal,Boris Veytsman,https://github.com/borisveytsman/arsenal,https://github.com/borisveytsman/arsenal,https://github.com/borisveytsman/arsenal/issues,2023-09-04,2023-09-04,
array,hobby,Andrew Stacey,https://github.com/loopspace/hobby,https://github.com/loopspace/hobby,https://github.com/loopspace/hobby/issues,2013-03-16,2020-10-29,
atsign,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
avm,langsci-avm,Felix Kopecky,https://ctan.org/pkg/langsci-avm,https://github.com/langsci/langsci-avm,https://github.com/langsci/langsci-avm/issues,2020-03-11,2020-03-11,
@@ -123,7 +123,7 @@ intarray,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,ht
ior,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
iot,iot,Island of TeX,https://islandoftex.gitlab.io,https://gitlab.com/islandoftex/texmf,https://gitlab.com/groups/islandoftex/texmf/-/issues,2023-07-18,2023-07-18,
iow,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-iwonamath,iwonamath,Boris Veytsman,https://github.com/borisveytsman/iwonamath,https://github.com/borisveytsman/iwonamath,https://github.com/borisveytsman/iwonamath/issues
+iwonamath,iwonamath,Boris Veytsman,https://github.com/borisveytsman/iwonamath,https://github.com/borisveytsman/iwonamath,https://github.com/borisveytsman/iwonamath/issues,2023-09-04,2023-09-04,
jiazhu,jiazhu,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,2020-05-17,2020-05-17,
job,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2021-04-23,2021-04-23,
kernel,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
diff --git a/macros/latex/contrib/l3kernel/l3prefixes.pdf b/macros/latex/contrib/l3kernel/l3prefixes.pdf
index f174ef9e0f..4a23b2563d 100644
--- a/macros/latex/contrib/l3kernel/l3prefixes.pdf
+++ b/macros/latex/contrib/l3kernel/l3prefixes.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3prg.dtx b/macros/latex/contrib/l3kernel/l3prg.dtx
index 668bf41d08..866537f904 100644
--- a/macros/latex/contrib/l3kernel/l3prg.dtx
+++ b/macros/latex/contrib/l3kernel/l3prg.dtx
@@ -2,7 +2,7 @@
%
%% File: l3prg.dtx
%
-% Copyright (C) 2005-2023 The LaTeX Project
+% Copyright (C) 2005-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3prg} package\\ Control structures^^A
+% The \pkg{l3prg} module\\ Control structures^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3prop.dtx b/macros/latex/contrib/l3kernel/l3prop.dtx
index 91e8c07fbf..f8bb23e765 100644
--- a/macros/latex/contrib/l3kernel/l3prop.dtx
+++ b/macros/latex/contrib/l3kernel/l3prop.dtx
@@ -2,7 +2,7 @@
%
%% File: l3prop.dtx
%
-% Copyright (C) 1990-2023 The LaTeX Project
+% Copyright (C) 1990-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3prop} package\\ Property lists^^A
+% The \pkg{l3prop} module\\ Property lists^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3quark.dtx b/macros/latex/contrib/l3kernel/l3quark.dtx
index 10fa3584aa..80b953353f 100644
--- a/macros/latex/contrib/l3kernel/l3quark.dtx
+++ b/macros/latex/contrib/l3kernel/l3quark.dtx
@@ -2,7 +2,7 @@
%
%% File: l3quark.dtx
%
-% Copyright (C) 1990-2023 The LaTeX Project
+% Copyright (C) 1990-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3quark} package\\ Quarks and scan marks^^A
+% The \pkg{l3quark} module\\ Quarks and scan marks^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3regex.dtx b/macros/latex/contrib/l3kernel/l3regex.dtx
index 900a1c2c82..37245cb0b9 100644
--- a/macros/latex/contrib/l3kernel/l3regex.dtx
+++ b/macros/latex/contrib/l3kernel/l3regex.dtx
@@ -2,7 +2,7 @@
%
%% File: l3regex.dtx
%
-% Copyright (C) 2011-2023 The LaTeX Project
+% Copyright (C) 2011-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3regex} package\\ Regular expressions in \TeX{}^^A
+% The \pkg{l3regex} module\\ Regular expressions in \TeX{}^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -52,7 +52,7 @@
% {\begin{itemize}\def\\{\char`\\}\def\makelabel##1{\hss\llap{\ttfamily##1}}}
% {\end{itemize}}
%
-% The \pkg{l3regex} package provides regular expression testing,
+% The \pkg{l3regex} module provides regular expression testing,
% extraction of submatches, splitting, and replacement, all acting
% on token lists. The syntax of regular expressions is mostly a subset
% of the \textsc{pcre} syntax (and very close to \textsc{posix}),
@@ -1377,7 +1377,7 @@
% in the input stream.
% \begin{macrocode}
\cs_new_protected:Npn \@@_break_true:w
- #1 \@@_break_point:TF #2 #3 {#2}
+ #1 \@@_break_point:TF #2 #3 {#2}
\cs_new_protected:Npn \@@_break_point:TF #1 #2 { #2 }
% \end{macrocode}
% \end{macro}
@@ -3510,6 +3510,7 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{variable}{@@_cs}
% \begin{macro}+\@@_compile_}:+
% \begin{macro}{\@@_compile_end_cs:}
% \begin{macro}[EXP]{\@@_compile_cs_aux:Nn, \@@_compile_cs_aux:NNnnnN}
@@ -3592,6 +3593,7 @@
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{variable}
%
% \subsubsection{Raw token lists with \cs[no-index]{u}}
%
@@ -5354,7 +5356,7 @@
\int_set:Nn \l_@@_curr_pos_int
{ \l_@@_start_pos_int - 1 }
\int_set_eq:NN \l_@@_curr_char_int \l_@@_last_char_success_int
- \tl_build_get:NN \l_@@_matched_analysis_tl \l_@@_internal_a_tl
+ \tl_build_get_intermediate:NN \l_@@_matched_analysis_tl \l_@@_internal_a_tl
\exp_args:NNf \@@_match_once_init_aux:
\tl_map_inline:nn
{ \exp_after:wN \l_@@_internal_a_tl \l_@@_curr_analysis_tl }
@@ -8113,7 +8115,7 @@
\cs_new_protected:Npn \@@_trace_push:nnN #1#2#3
{ \@@_trace:nne {#1} {#2} { entering~ \token_to_str:N #3 } }
\cs_new_protected:Npn \@@_trace_pop:nnN #1#2#3
- { \@@_trace:nne {#1} {#2} { leaving~ \token_to_str:N #3 } }
+ { \@@_trace:nne {#1} {#2} { leaving~ \token_to_str:N #3 } }
\cs_new_protected:Npn \@@_trace:nne #1#2#3
{
\int_compare:nNnF
diff --git a/macros/latex/contrib/l3kernel/l3seq.dtx b/macros/latex/contrib/l3kernel/l3seq.dtx
index c32985545a..debdd81397 100644
--- a/macros/latex/contrib/l3kernel/l3seq.dtx
+++ b/macros/latex/contrib/l3kernel/l3seq.dtx
@@ -2,7 +2,7 @@
%
%% File: l3seq.dtx
%
-% Copyright (C) 1990-2023 The LaTeX Project
+% Copyright (C) 1990-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3seq} package\\ Sequences and stacks^^A
+% The \pkg{l3seq} module\\ Sequences and stacks^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -1565,10 +1565,10 @@
\if_false: { \fi: }
\tl_set:Nn \l_@@_internal_b_tl {##1}
#1 #2
- { \if_false: } \fi:
- \exp_not:o {#2}
- \tl_if_eq:NNT \l_@@_internal_a_tl \l_@@_internal_b_tl
- { \use_none:nn }
+ { \if_false: } \fi:
+ \exp_not:o {#2}
+ \tl_if_eq:NNT \l_@@_internal_a_tl \l_@@_internal_b_tl
+ { \use_none:nn }
}
\@@_wrap_item:n {##1}
}
diff --git a/macros/latex/contrib/l3kernel/l3skip.dtx b/macros/latex/contrib/l3kernel/l3skip.dtx
index cac06a49ea..226debac9d 100644
--- a/macros/latex/contrib/l3kernel/l3skip.dtx
+++ b/macros/latex/contrib/l3kernel/l3skip.dtx
@@ -3,7 +3,7 @@
%% File: l3skip.dtx
%
% Copyright (C) 2004-2011 Frank Mittelbach, The LaTeX Project
-% (C) 2012-2023 The LaTeX Project
+% (C) 2012-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -32,7 +32,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3skip} package\\ Dimensions and skips^^A
+% The \pkg{l3skip} module\\ Dimensions and skips^^A
% }
%
% \author{^^A
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -2269,8 +2269,8 @@
\prg_new_conditional:Npnn \skip_if_eq:nn #1#2 { p , T , F , TF }
{
\str_if_eq:eeTF { \skip_eval:n {#1} } { \skip_eval:n {#2} }
- { \prg_return_true: }
- { \prg_return_false: }
+ { \prg_return_true: }
+ { \prg_return_false: }
}
% \end{macrocode}
% \end{macro}
diff --git a/macros/latex/contrib/l3kernel/l3sort.dtx b/macros/latex/contrib/l3kernel/l3sort.dtx
index ab7531a313..71d28c4433 100644
--- a/macros/latex/contrib/l3kernel/l3sort.dtx
+++ b/macros/latex/contrib/l3kernel/l3sort.dtx
@@ -2,7 +2,7 @@
%
%% File l3sort.dtx
%
-% Copyright (C) 2012-2023 The LaTeX Project
+% Copyright (C) 2012-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3sort} package\\ Sorting functions^^A
+% The \pkg{l3sort} module\\ Sorting functions^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3str-convert.dtx b/macros/latex/contrib/l3kernel/l3str-convert.dtx
index ff4cacf868..90eb26afbb 100644
--- a/macros/latex/contrib/l3kernel/l3str-convert.dtx
+++ b/macros/latex/contrib/l3kernel/l3str-convert.dtx
@@ -2,7 +2,7 @@
%
%% File: l3str-convert.dtx
%
-% Copyright (C) 2013-2023 The LaTeX Project
+% Copyright (C) 2013-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -32,7 +32,7 @@
%
%
% \title{^^A
-% The \pkg{l3str-convert} package\\ String encoding conversions^^A
+% The \pkg{l3str-convert} module\\ String encoding conversions^^A
% }
%
% \author{^^A
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -469,14 +469,14 @@
% \begin{macrocode}
\group_begin:
\__kernel_tl_set:Ne \l_@@_internal_tl { \tl_to_str:n { 0123456789ABCDEF } }
- \tl_map_inline:Nn \l_@@_internal_tl
- {
- \tl_map_inline:Nn \l_@@_internal_tl
- {
- \tl_const:ce { c_@@_byte_ \int_eval:n {"#1##1} _tl }
- { \char_generate:nn { "#1##1 } { 12 } #1 ##1 }
- }
- }
+ \tl_map_inline:Nn \l_@@_internal_tl
+ {
+ \tl_map_inline:Nn \l_@@_internal_tl
+ {
+ \tl_const:ce { c_@@_byte_ \int_eval:n {"#1##1} _tl }
+ { \char_generate:nn { "#1##1 } { 12 } #1 ##1 }
+ }
+ }
\group_end:
\tl_const:cn { c_@@_byte_-1_tl } { { } \use_none:n { } }
% \end{macrocode}
@@ -1818,10 +1818,10 @@
%
% \begin{variable}
% {
-% \l_@@_missing_flag ,
-% \l_@@_extra_flag ,
-% \l_@@_overlong_flag ,
-% \l_@@_overflow_flag ,
+% @@_missing ,
+% @@_extra ,
+% @@_overlong ,
+% @@_overflow ,
% }
% When decoding a string that is purportedly in the \textsc{utf-8}
% encoding, four different errors can occur, signalled by a specific
@@ -2148,9 +2148,9 @@
%
% \begin{variable}
% {
-% \l_@@_missing_flag ,
-% \l_@@_extra_flag ,
-% \l_@@_end_flag ,
+% @@_missing ,
+% @@_extra ,
+% @@_end ,
% }
% When encoding a Unicode string to \textsc{utf-16}, only one error
% can occur: code points in the range $[\hexnum{D800},
diff --git a/macros/latex/contrib/l3kernel/l3str.dtx b/macros/latex/contrib/l3kernel/l3str.dtx
index fa26d53426..dbb2180516 100644
--- a/macros/latex/contrib/l3kernel/l3str.dtx
+++ b/macros/latex/contrib/l3kernel/l3str.dtx
@@ -2,7 +2,7 @@
%
%% File: l3str.dtx
%
-% Copyright (C) 2011-2023 The LaTeX Project
+% Copyright (C) 2011-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3str} package\\ Strings^^A
+% The \pkg{l3str} module\\ Strings^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -2051,9 +2051,9 @@
\int_compare:nNnTF {`#2} < { "E0 }
{ \@@_change_case_codepoint:nNN }
{
- \int_compare:nNnTF {`#2} < { "F0 }
- { \@@_change_case_codepoint:nNNN }
- { \@@_change_case_codepoint:nNNNNN }
+ \int_compare:nNnTF {`#2} < { "F0 }
+ { \@@_change_case_codepoint:nNNN }
+ { \@@_change_case_codepoint:nNNNNN }
}
{#1} #2
}
@@ -2113,7 +2113,7 @@
{
\codepoint_str_generate:n {#2}
\tl_if_blank:nF {#3}
- { \codepoint_str_generate:n {#3} }
+ { \codepoint_str_generate:n {#3} }
}
}
}
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.pdf b/macros/latex/contrib/l3kernel/l3styleguide.pdf
index 6bf6d1bc46..7e379d5eae 100644
--- a/macros/latex/contrib/l3kernel/l3styleguide.pdf
+++ b/macros/latex/contrib/l3kernel/l3styleguide.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.tex b/macros/latex/contrib/l3kernel/l3styleguide.tex
index 9f8d8733c8..c66e0df5d1 100644
--- a/macros/latex/contrib/l3kernel/l3styleguide.tex
+++ b/macros/latex/contrib/l3kernel/l3styleguide.tex
@@ -2,7 +2,7 @@
File: l3styleguide.tex
-Copyright (C) 2011,2012,2014-2023 The LaTeX Project
+Copyright (C) 2011,2012,2014-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
index 63f01138b7..5fc4a89708 100644
--- a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
+++ b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.tex b/macros/latex/contrib/l3kernel/l3syntax-changes.tex
index db3fab7f7b..1fbac1e5b4 100644
--- a/macros/latex/contrib/l3kernel/l3syntax-changes.tex
+++ b/macros/latex/contrib/l3kernel/l3syntax-changes.tex
@@ -2,7 +2,7 @@
File: l3syntax-changes.tex
-Copyright (C) 2011,2012,2017-2023 The LaTeX Project
+Copyright (C) 2011,2012,2017-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
diff --git a/macros/latex/contrib/l3kernel/l3sys.dtx b/macros/latex/contrib/l3kernel/l3sys.dtx
index 8ae4bbb18d..0195a6e781 100644
--- a/macros/latex/contrib/l3kernel/l3sys.dtx
+++ b/macros/latex/contrib/l3kernel/l3sys.dtx
@@ -2,7 +2,7 @@
%
%% File: l3sys.dtx
%
-% Copyright (C) 2015-2023 The LaTeX Project
+% Copyright (C) 2015-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3sys} package\\ System/runtime functions^^A
+% The \pkg{l3sys} module\\ System/runtime functions^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -1147,14 +1147,14 @@ end
\sys_if_engine_xetex:TF
{ xetex }
{
- \sys_if_output_pdf:TF
+ \sys_if_output_pdf:TF
{
\sys_if_engine_pdftex:TF
{ pdftex }
{ luatex }
}
{ dvips }
- }
+ }
}
}
% \end{macrocode}
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.pdf b/macros/latex/contrib/l3kernel/l3term-glossary.pdf
index 8e3ca84f08..2e4db4a60c 100644
--- a/macros/latex/contrib/l3kernel/l3term-glossary.pdf
+++ b/macros/latex/contrib/l3kernel/l3term-glossary.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.tex b/macros/latex/contrib/l3kernel/l3term-glossary.tex
index e3277b964e..f26cf48fbe 100644
--- a/macros/latex/contrib/l3kernel/l3term-glossary.tex
+++ b/macros/latex/contrib/l3kernel/l3term-glossary.tex
@@ -2,7 +2,7 @@
File: l3term-glossary.tex
-Copyright (C) 2018-2023 The LaTeX Project
+Copyright (C) 2018-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
diff --git a/macros/latex/contrib/l3kernel/l3text-case.dtx b/macros/latex/contrib/l3kernel/l3text-case.dtx
index b09f9f2108..e5d854ff18 100644
--- a/macros/latex/contrib/l3kernel/l3text-case.dtx
+++ b/macros/latex/contrib/l3kernel/l3text-case.dtx
@@ -2,7 +2,7 @@
%
%% File: l3text-case.dtx
%
-% Copyright (C) 2020-2023 The LaTeX Project
+% Copyright (C) 2020-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3text-case} package\\ Text processing (case changing)^^A
+% The \pkg{l3text-case} module\\ Text processing (case changing)^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -238,7 +238,7 @@
% \begin{macrocode}
\cs_new:Npn \@@_change_case:nnnn #1#2#3#4
{
- \__kernel_exp_not:w \exp_after:wN
+ \__kernel_exp_not:w \exp_after:wN
{
\exp:w
\exp_args:Ne \@@_change_case_auxi:nnnn
@@ -402,10 +402,10 @@
\token_if_eq_meaning:NNTF #4 #5
{
\@@_use_i_delimit_by_q_recursion_stop:nw
- {
- \@@_change_case_store:n {#4}
- \@@_change_case_math_loop:nnnNw {#1} {#2} {#3} #6
- }
+ {
+ \@@_change_case_store:n {#4}
+ \@@_change_case_math_loop:nnnNw {#1} {#2} {#3} #6
+ }
}
{ \@@_change_case_math_search:nnnNNN {#1} {#2} {#3} #4 }
}
@@ -494,8 +494,8 @@
\cs_new:Npn \@@_change_case_exclude:nnnNnn #1#2#3#4#5#6
{
\tl_if_blank:nTF {#5}
- { \@@_change_case_store:n { #4 {#6} } }
- {
+ { \@@_change_case_store:n { #4 {#6} } }
+ {
\@@_change_case_store:o
{
\exp_after:wN #4
@@ -592,7 +592,7 @@
{
\@@_change_case_store:v
{ c_@@_ #1 case_ \token_to_str:N #6 _tl }
- \use:c { @@_change_case_next_ #2 :nnn } {#2} {#4} {#5}
+ \use:c { @@_change_case_next_ #2 :nnn } {#2} {#4} {#5}
}
{
\@@_change_case_store:n {#6}
@@ -786,10 +786,10 @@
\codepoint_generate:nn {#2}
{ \char_value_catcode:n {#2} }
\tl_if_blank:nF {#3}
- {
- \codepoint_generate:nn {#3}
- { \char_value_catcode:n {#3} }
- }
+ {
+ \codepoint_generate:nn {#3}
+ { \char_value_catcode:n {#3} }
+ }
}
}
}
@@ -982,10 +982,10 @@
\@@_codepoint_compare:nNnTF {#5} = { "00DF }
{
\@@_change_case_store:e
- {
- \codepoint_generate:nn { "1E9E }
- { \@@_change_case_catcode:nn {#5} { "1E9E } }
- }
+ {
+ \codepoint_generate:nn { "1E9E }
+ { \@@_change_case_catcode:nn {#5} { "1E9E } }
+ }
\use:c { @@_change_case_next_ #2 :nnn }
{#2} {#3} {#4}
}
@@ -1482,7 +1482,7 @@
\else:
\if_int_compare:w #1 = "1FCF \exp_stop_f:
\prg_return_true:
- \else:
+ \else:
\if_int_compare:w #1 = "1FDD \exp_stop_f:
\prg_return_true:
\else:
@@ -1745,15 +1745,15 @@
\cs_new:Npn \@@_change_case_breathing:nnnnnnw #1#2#3#4#5#6#7 \q_mark
{
\tl_if_blank:nTF {#7}
- {
- \@@_change_case_breathing_aux:nnnnnn
- {#1} {#2} {#3} {#4} {#5} {#6}
- }
- {
- \@@_codepoint_process:nN
- { \@@_change_case_breathing:nnnnnnw {#1} {#2} {#3} {#4} {#5} }
- #7 \q_mark
- }
+ {
+ \@@_change_case_breathing_aux:nnnnnn
+ {#1} {#2} {#3} {#4} {#5} {#6}
+ }
+ {
+ \@@_codepoint_process:nN
+ { \@@_change_case_breathing:nnnnnnw {#1} {#2} {#3} {#4} {#5} }
+ #7 \q_mark
+ }
}
\cs_new:Npn \@@_change_case_breathing_aux:nnnnnn #1#2#3#4#5#6
{
@@ -1786,12 +1786,12 @@
}
\cs_new:Npn \@@_change_case_breathing_dialytika:nnnn #1#2#3#4
{
- \@@_change_case_if_takes_dialytika:nTF {#4}
- {
- \@@_change_case_upper_el_dialytika:n {#4}
- \@@_change_case_loop:nnnw {#1} {#2} {#3}
- }
- { \@@_change_case_loop:nnnw {#1} {#2} {#3} #4 }
+ \@@_change_case_if_takes_dialytika:nTF {#4}
+ {
+ \@@_change_case_upper_el_dialytika:n {#4}
+ \@@_change_case_loop:nnnw {#1} {#2} {#3}
+ }
+ { \@@_change_case_loop:nnnw {#1} {#2} {#3} #4 }
}
% \end{macrocode}
% \end{macro}
@@ -1972,7 +1972,7 @@
\tl_if_head_is_N_type:nTF {#4}
{ \@@_change_case_lower_lt:nnnN }
{ \@@_change_case_loop:nnnw }
- {#1} {#2} {#3} #4 \q_@@_recursion_stop
+ {#1} {#2} {#3} #4 \q_@@_recursion_stop
}
\cs_new:Npn \@@_change_case_lower_lt:nnnN #1#2#3#4
{
@@ -2021,7 +2021,7 @@
% combining char: drop it if present.
% \begin{macrocode}
\cs_new:Npn \@@_change_case_upper_lt:nnnnn #1#2#3#4#5
- {
+ {
\exp_args:Ne \@@_change_case_upper_lt_aux:nnnnn
{
\int_case:nn { \@@_codepoint_from_chars:Nw #5 }
@@ -2031,7 +2031,7 @@
{ "012F } { "012E }
}
}
- {#2} {#3} {#4} {#5}
+ {#2} {#3} {#4} {#5}
}
\cs_new:Npn \@@_change_case_upper_lt_aux:nnnnn #1#2#3#4#5
{
@@ -2320,11 +2320,11 @@
% for the Unicode engines
% \begin{macrocode}
\bool_lazy_or:nnF
- { \sys_if_engine_luatex_p: }
- { \sys_if_engine_xetex_p: }
- {
- \text_declare_uppercase_mapping:nn { "01F0 } { \v { J } }
- }
+ { \sys_if_engine_luatex_p: }
+ { \sys_if_engine_xetex_p: }
+ {
+ \text_declare_uppercase_mapping:nn { "01F0 } { \v { J } }
+ }
% \end{macrocode}
%
% \begin{macrocode}
diff --git a/macros/latex/contrib/l3kernel/l3text-map.dtx b/macros/latex/contrib/l3kernel/l3text-map.dtx
index 6dbb1a9950..bec0df2943 100644
--- a/macros/latex/contrib/l3kernel/l3text-map.dtx
+++ b/macros/latex/contrib/l3kernel/l3text-map.dtx
@@ -2,7 +2,7 @@
%
%% File: l3text-map.dtx
%
-% Copyright (C) 2022-2023 The LaTeX Project
+% Copyright (C) 2022-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3text-map} package\\ Text processing (mapping)^^A
+% The \pkg{l3text-map} module\\ Text processing (mapping)^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3text-purify.dtx b/macros/latex/contrib/l3kernel/l3text-purify.dtx
index 854cbb7e26..6f8be11b3a 100644
--- a/macros/latex/contrib/l3kernel/l3text-purify.dtx
+++ b/macros/latex/contrib/l3kernel/l3text-purify.dtx
@@ -2,7 +2,7 @@
%
%% File: l3text-purify.dtx
%
-% Copyright (C) 2020-2023 The LaTeX Project
+% Copyright (C) 2020-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3text-purify} package\\ Text processing (purification)^^A
+% The \pkg{l3text-purify} module\\ Text processing (purification)^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -174,7 +174,7 @@
\token_if_eq_meaning:NNTF #1 #2
{
\@@_use_i_delimit_by_q_recursion_stop:nw
- { \@@_purify_math_start:NNw #2 #3 }
+ { \@@_purify_math_start:NNw #2 #3 }
}
{ \@@_purify_math_search:NNN #1 }
}
diff --git a/macros/latex/contrib/l3kernel/l3text.dtx b/macros/latex/contrib/l3kernel/l3text.dtx
index d47eb59825..61de77d6ab 100644
--- a/macros/latex/contrib/l3kernel/l3text.dtx
+++ b/macros/latex/contrib/l3kernel/l3text.dtx
@@ -2,7 +2,7 @@
%
%% File: l3text.dtx
%
-% Copyright (C) 2020-2023 The LaTeX Project
+% Copyright (C) 2020-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3text} package\\ Text processing^^A
+% The \pkg{l3text} module\\ Text processing^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -605,15 +605,15 @@
\if_catcode:w \exp_not:N #1 \c_space_token
10
\else:
- \if_catcode:w \exp_not:N #1 \c_catcode_letter_token
- 11
- \else:
- \if_catcode:w \exp_not:N #1 \c_catcode_other_token
- 12
- \else:
- 13
- \fi:
- \fi:
+ \if_catcode:w \exp_not:N #1 \c_catcode_letter_token
+ 11
+ \else:
+ \if_catcode:w \exp_not:N #1 \c_catcode_other_token
+ 12
+ \else:
+ 13
+ \fi:
+ \fi:
\fi:
\fi:
\fi:
@@ -683,9 +683,9 @@
\int_compare:nNnTF { `#2 } < { "E0 }
{ \@@_codepoint_process:nNN }
{
- \int_compare:nNnTF { `#2 } < { "F0 }
- { \@@_codepoint_process:nNNN }
- { \@@_codepoint_process:nNNNN }
+ \int_compare:nNnTF { `#2 } < { "F0 }
+ { \@@_codepoint_process:nNNN }
+ { \@@_codepoint_process:nNNNN }
}
{#1} #2
}
@@ -1045,10 +1045,10 @@
\token_if_eq_meaning:NNTF #1 #2
{
\@@_use_i_delimit_by_q_recursion_stop:nw
- {
- \@@_expand_store:n {#1}
- \@@_expand_math_loop:Nw #3
- }
+ {
+ \@@_expand_store:n {#1}
+ \@@_expand_math_loop:Nw #3
+ }
}
{ \@@_expand_math_search:NNN #1 }
}
diff --git a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
index 14d7bcacb9..99469d92c4 100644
--- a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
@@ -2,7 +2,7 @@
%
%% File: l3tl-analysis.dtx
%
-% Copyright (C) 2011-2023 The LaTeX Project
+% Copyright (C) 2011-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -32,7 +32,7 @@
%
%
% \title{^^A
-% The \pkg{l3tl-analysis} package\\ Analysing token lists^^A
+% The \pkg{l3tl-analysis} module\\ Analysing token lists^^A
% }
%
% \author{^^A
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3tl-build.dtx b/macros/latex/contrib/l3kernel/l3tl-build.dtx
index ad8e56b739..645f052d15 100644
--- a/macros/latex/contrib/l3kernel/l3tl-build.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl-build.dtx
@@ -2,7 +2,7 @@
%
%% File: l3tl-build.dtx
%
-% Copyright (C) 2018-2023 The LaTeX Project
+% Copyright (C) 2018-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3tl-build} package\\ Piecewise \texttt{tl} constructions^^A
+% The \pkg{l3tl-build} module\\ Piecewise \texttt{tl} constructions^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -106,6 +106,17 @@
% \texttt{tl} functions.
% \end{function}
%
+% \begin{function}[added = 2023-12-14]{\tl_build_get_intermediate:NN}
+% \begin{syntax}
+% \cs{tl_build_get_intermediate:NN} \meta{tl~var_1} \meta{tl~var_2}
+% \end{syntax}
+% Stores the contents of the \meta{tl~var_1} in the \meta{tl~var_2}.
+% The \meta{tl~var_1} must have been set up with \cs{tl_build_begin:N}
+% or \cs{tl_build_gbegin:N}. The \meta{tl~var_2} is a
+% \enquote{normal} token list variable, assigned locally using
+% \cs{tl_set:Nn}.
+% \end{function}
+%
% \end{documentation}
%
% \begin{implementation}
@@ -294,6 +305,13 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\tl_build_get_intermediate:NN}
+% \begin{macrocode}
+\cs_new_protected:Npn \tl_build_get_intermediate:NN
+ { \@@_build_get:NNN \__kernel_tl_set:Ne }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\@@_build_get:NNN}
% \begin{macro}{\@@_build_get:w, \@@_build_get_end:w}
% The idea is to expand the \meta{tl~var} then the \meta{next~tl} and
diff --git a/macros/latex/contrib/l3kernel/l3tl.dtx b/macros/latex/contrib/l3kernel/l3tl.dtx
index 682f2cdcf5..0249c36aef 100644
--- a/macros/latex/contrib/l3kernel/l3tl.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl.dtx
@@ -2,7 +2,7 @@
%
%% File: l3tl.dtx
%
-% Copyright (C) 1990-2023 The LaTeX Project
+% Copyright (C) 1990-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3tl} package\\ Token lists^^A
+% The \pkg{l3tl} module\\ Token lists^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -330,8 +330,13 @@
% \cs{tl_if_novalue_p:n} \Arg{token list}
% \cs{tl_if_novalue:nTF} \Arg{token list} \Arg{true code} \Arg{false code}
% \end{syntax}
-% Tests if the \meta{token list} is exactly equal to the special
-% \cs{c_novalue_tl} marker. This function is intended to allow construction
+% Tests if the \meta{token list} and the special \cs{c_novalue_tl} marker
+% contain the same list of tokens, both in respect of character codes and
+% category codes. This means that
+% \cs{exp_args:No} \cs{tl_if_novalue:nTF} \{ \cs{c_novalue_tl} \} is
+% logically \texttt{true} but \cs{tl_if_novalue:nTF} \{ \cs{c_novalue_tl} \}
+% is logically \texttt{false}.
+% This function is intended to allow construction
% of flexible document interface structures in which missing optional
% arguments are detected.
% \end{function}
@@ -2361,7 +2366,7 @@
\else:
\prg_return_false:
\fi:
- }
+ }
% \end{macrocode}
% \end{macro}
% \end{macro}
diff --git a/macros/latex/contrib/l3kernel/l3token.dtx b/macros/latex/contrib/l3kernel/l3token.dtx
index 30ae67a205..1f3113a659 100644
--- a/macros/latex/contrib/l3kernel/l3token.dtx
+++ b/macros/latex/contrib/l3kernel/l3token.dtx
@@ -2,7 +2,7 @@
%
%% File: l3token.dtx
%
-% Copyright (C) 2005-2023 The LaTeX Project
+% Copyright (C) 2005-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3token} package\\ Token manipulation^^A
+% The \pkg{l3token} module\\ Token manipulation^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3unicode.dtx b/macros/latex/contrib/l3kernel/l3unicode.dtx
index f2b1983c41..df2a5189db 100644
--- a/macros/latex/contrib/l3kernel/l3unicode.dtx
+++ b/macros/latex/contrib/l3kernel/l3unicode.dtx
@@ -2,7 +2,7 @@
%
%% File: l3unicode.dtx
%
-% Copyright (C) 2018-2023 The LaTeX Project
+% Copyright (C) 2018-2024 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
% \fi
%
% \title{^^A
-% The \pkg{l3unicode} package\\ Unicode support functions^^A
+% The \pkg{l3unicode} module\\ Unicode support functions^^A
% }
%
% \author{^^A
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-12-11}
+% \date{Released 2024-01-04}
%
% \maketitle
%
@@ -172,7 +172,7 @@
{ ~ }
{ \char_generate:nn {#1} { 12 } }
}
- \cs_new:Npn \codepoint_generate:nn #1#2
+ \cs_new:Npn \codepoint_generate:nn #1#2
{
\int_compare:nNnTF {#1} = { `\ }
{ ~ }
@@ -245,11 +245,11 @@
}
}
}
- \cs_new:Npn \@@_generate:n #1
- {
- \__kernel_exp_not:w \exp_after:wN \exp_after:wN \exp_after:wN
- { \char_generate:nn {#1} { 13 } }
- }
+ \cs_new:Npn \@@_generate:n #1
+ {
+ \__kernel_exp_not:w \exp_after:wN \exp_after:wN \exp_after:wN
+ { \char_generate:nn {#1} { 13 } }
+ }
}
% \end{macrocode}
% \end{macro}
@@ -304,7 +304,7 @@
\@@_to_bytes_outputi:nw
{
\@@_to_bytes_auxii:Nnn F
- {#1} { 64 * 64 * 64 }
+ {#1} { 64 * 64 * 64 }
}
\@@_to_bytes_outputii:nw
{
@@ -628,18 +628,18 @@
% \begin{macrocode}
\cs_set_protected:Npe \@@_data_auxv:nnnnw #1#2#3#4#5 Last> #6 \q_stop
{
- \exp_not:N \tl_if_blank:nTF {#6}
- {
- \exp_not:N \@@_range:nnn {#1} { category }
- { \exp_not:V \l_@@_category_Cn_tl }
- \exp_not:N \@@_range:nnn {#1} { uppercase } { 0 }
- \exp_not:N \@@_range:nnn {#1} { lowercase } { 0 }
- }
- {
- \exp_not:N \@@_range:nnn {#1} { category } {#2}
- \exp_not:N \@@_range:nnn {#1} { uppercase } {#3}
- \exp_not:N \@@_range:nnn {#1} { lowercase } {#4}
- }
+ \exp_not:N \tl_if_blank:nTF {#6}
+ {
+ \exp_not:N \@@_range:nnn {#1} { category }
+ { \exp_not:V \l_@@_category_Cn_tl }
+ \exp_not:N \@@_range:nnn {#1} { uppercase } { 0 }
+ \exp_not:N \@@_range:nnn {#1} { lowercase } { 0 }
+ }
+ {
+ \exp_not:N \@@_range:nnn {#1} { category } {#2}
+ \exp_not:N \@@_range:nnn {#1} { uppercase } {#3}
+ \exp_not:N \@@_range:nnn {#1} { lowercase } {#4}
+ }
}
% \end{macrocode}
% Calculated the length of the range and the space remaining in the current
@@ -676,20 +676,20 @@
\int_compare:nNnT { \clist_count:c { l_@@_ #3 _block_clist } }
= \c_@@_block_size_int
{ \@@_save_blocks:nn {#3} { 1 } }
- \int_compare:nNnF
- { \int_div_truncate:nn { #2 - #1 } \c_@@_block_size_int } = 0
- {
- \tl_set:ce { l_@@_ #3 _block_clist }
- {
- \exp_args:NNe \use:nn \use_none:n
- { \prg_replicate:nn { \c_@@_block_size_int } { , #4 } }
- }
- \@@_save_blocks:nn {#3}
- { \int_div_truncate:nn { (#2 - #1) } \c_@@_block_size_int }
- }
- \prg_replicate:nn
- { \int_mod:nn { #2 - #1 } \c_@@_block_size_int }
- { \clist_put_right:ce { l_@@_ #3 _block_clist } {#4} }
+ \int_compare:nNnF
+ { \int_div_truncate:nn { #2 - #1 } \c_@@_block_size_int } = 0
+ {
+ \tl_set:ce { l_@@_ #3 _block_clist }
+ {
+ \exp_args:NNe \use:nn \use_none:n
+ { \prg_replicate:nn { \c_@@_block_size_int } { , #4 } }
+ }
+ \@@_save_blocks:nn {#3}
+ { \int_div_truncate:nn { (#2 - #1) } \c_@@_block_size_int }
+ }
+ \prg_replicate:nn
+ { \int_mod:nn { #2 - #1 } \c_@@_block_size_int }
+ { \clist_put_right:ce { l_@@_ #3 _block_clist } {#4} }
}
% \end{macrocode}
% To allow rapid comparison, each completed block is stored locally as a
@@ -742,13 +742,13 @@
\@@_range:nnn { 110000 } {##1} { 0 }
\@@_finalise_blocks:n {##1}
}
- }
+ }
\cs_set_protected:Npn \@@_finalise_blocks:n #1
{
\cs_gset_eq:cc { c_@@_ #1 _index_intarray } { g_@@_ #1 _index_intarray }
\cs_undefine:c { g_@@_ #1 _index_intarray }
\intarray_new:cn { g_@@_ #1 _blocks_intarray }
- { ( \tl_use:c { l_@@_ #1 _block_tl } - 1 ) * \c_@@_block_size_int }
+ { ( \tl_use:c { l_@@_ #1 _block_tl } - 1 ) * \c_@@_block_size_int }
\int_step_inline:nn { \tl_use:c { l_@@_ #1 _block_tl } - 1 }
{
\exp_args:Nv \@@_finalise_blocks:nnn
diff --git a/macros/latex/contrib/l3kernel/source3.pdf b/macros/latex/contrib/l3kernel/source3.pdf
index fc0be1908b..8485500fb3 100644
--- a/macros/latex/contrib/l3kernel/source3.pdf
+++ b/macros/latex/contrib/l3kernel/source3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/source3.tex b/macros/latex/contrib/l3kernel/source3.tex
index 0df48640b4..5aae34aba2 100644
--- a/macros/latex/contrib/l3kernel/source3.tex
+++ b/macros/latex/contrib/l3kernel/source3.tex
@@ -2,7 +2,7 @@
File: source3.tex
-Copyright (C) 1990-2012,2017-2023 The LaTeX Project
+Copyright (C) 1990-2012,2017-2024 The LaTeX Project
It may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -29,7 +29,7 @@ for those people who are interested.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% This document typesets the LaTeX3 sources as a single document.
-% This produces quite a large file (more than 780 pages).
+% This produces quite a large file (more than 1670 pages as of Dec 2023).
%
% There is also a shorter version (interface3.tex) that only typesets the
% command % interface descriptions.
diff --git a/macros/latex/contrib/lwarp/README.txt b/macros/latex/contrib/lwarp/README.txt
index 3918deb3e5..5d40622028 100644
--- a/macros/latex/contrib/lwarp/README.txt
+++ b/macros/latex/contrib/lwarp/README.txt
@@ -1,5 +1,5 @@
-LaTeX lwarp package v0.912 README.txt
+LaTeX lwarp package v0.913 README.txt
Files included are:
@@ -41,7 +41,6 @@ and version 1.3 or later is part of all distributions of LaTeX
version 2005/12/01 or later.
-Copyright 2016-2023 Brian Dunn
+Copyright 2016-2024 Brian Dunn
-Homepage: http://BDTechConcepts.com
-Email: bd@BDTechConcepts.com
+GitHub: https://github.com/bdtc/lwarp
diff --git a/macros/latex/contrib/lwarp/lwarp.dtx b/macros/latex/contrib/lwarp/lwarp.dtx
index d7f79fc3cf..efd097b79c 100644
--- a/macros/latex/contrib/lwarp/lwarp.dtx
+++ b/macros/latex/contrib/lwarp/lwarp.dtx
@@ -1,7 +1,7 @@
%
% \iffalse meta-comment
%
-% Copyright 2016-2023 Brian Dunn
+% Copyright 2016-2024 Brian Dunn
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
@@ -16,7 +16,7 @@
% \iffalse
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{lwarp}
-%<package> [2023/08/28 v0.912 Allows LaTeX to directly produce HTML5 output.]
+%<package> [2024/01/05 v0.913 Allows LaTeX to directly produce HTML5 output.]
%
%<*driver>
\documentclass{ltxdoc}
@@ -88,7 +88,7 @@
% \usepackage[log-declarations=false]{xparse}
\usepackage{xparse}
-\usepackage{ifptex}% *8* remove later
+\usepackage{ifptex}% in case TL2019 or earlier
\usepackage[lwarpmk, warpdisable]{lwarp}
@@ -534,23 +534,6 @@ used when converting \LaTeX\ \PDF\ output with \HTML\ tags into
a plain-text file with \HTML\ tags.
}
-\newcommand{\limitsbibtex}{%
-When enough authors are cited for a source,
-\watchout[Modify *.bib]
-\trouble{Improper \cs{prevdepth}>bibtex=\pkg{bibtex}}
-\trouble{bibtex=\pkg{bibtex}>Improper \cs{prevdepth}}
-\trouble{bibtex=\pkg{bibtex}>\cs{etalchar}}
-\trouble{etalchar=\cs{etalchar}}
-\BibTeX\ may use the \cs{etalchar} command
-to display a math superscript with a $+$ character to indicate ``and others''.
-Without modification, this will result in an ``Improper \cs{prevdepth}'' error.
-At present, \pkg{lwarp} requires that \cs{etalchar} be replaced by a text superscript.
-To do so, add to the start of the \filenm{.bib} file the following:
-\begin{sourcedisplay}
-\hspace*{-6em}@PREAMBLE\{"\cs{let}\cs{etalchar}\cs{relax}
-\cs{newcommand}\{\cs{etalchar}\}[1]\{\cs{textsuperscript}\{\#1\}\}"\}
-\end{sourcedisplay}
-}
\newcommand{\limitsgloss}{%
To process the \HTML\ glossary:
@@ -798,23 +781,39 @@ but \cs{bfseries}, etc.\ work only in some situations.
\trouble[HTML special chars]{HTML>entities}
\trouble{HTML>\&, \textless, \textgreater}
\trouble{text>\&, \textless, \textgreater}
+\trouble{HTML>sanitization}
have special meanings in \HTML.
If \cs{\&}, \cs{textless}, and \cs{textgreater} are used, proper
\HTML\ entities will be used, but there may be \HTML\ parsing problems
if these special characters occur unescaped in program listings
or other verbatim text.
+\trouble{listings>HTML sanitization}
+\trouble{program listings>HTML sanitization}
+\trouble{HTML>sanitization}
+\trouble{verbatim=\pkg{verbatim}}
+\gindex{listings>HTML sanitization}
+\gindex{program listings>HTML sanitization}
+\gindex{HTML>sanitization}
For program listings, the \pkg{listings} package is supported,
\margintag{program listings}
-and its \optn{literate} option is used to convert
+and its \optn{literate} option is used to automatically convert
\texttt{\&}, \texttt{\textless}, and \texttt{\textgreater}
to proper \HTML\ entities.
-The various \env{verbatim}-related environments do not convert
-\texttt{\&}, \texttt{\textless}, and \texttt{\textgreater},
-\margintag{verbatim}
+\pkg{minted} sanitizes \HTML\ automatically by its colorizing,
+which splits the special characters from the rest of the tag.
+
+The \pkg{fancyvrb} and \pkg{fvextra} packages automatically sanitize \HTML\ entities,
+\trouble[verbatim]{verbatim>HTML sanitization}
+but the core \LaTeX\ \env{verbatim}-related environments do not,
+nor does the \pkg{verbatim} package,
so care must be taken to avoid accidentally including valid \HTML\ code inside
-these environments. Adding a space on either side may be sufficient.
+these environments. It may be sufficient to add a space on either side of
+\texttt{\&}, \texttt{\textless}, and \texttt{\textgreater}.
+
+\pkg{fancyvrb} does not sanitize \HTML\ when using the \optn{gobble} option.
+\watchout[\optn{gobble}]
}
\newcommand{\limitstextcomp}{%
@@ -985,9 +984,6 @@ use \cs{footnotemark} and \cs{footnotetext}:
\textred{\cs{footnotetext}}\{A footnote with \cs{verb}+verbtim+.\} \\
\end{sourcedisplay}
and likewise for equations or display math.
-
-At present there is a bug such that paragraph closing tags are not present in
-footnotes when \cs{VerbatimFootnotes} are selected. The browser usually compensates.
}
\newcommand{\limitsmanyfootbigfoot}{%
@@ -1369,8 +1365,8 @@ Limitations when using \MathJax\ include:
\item Math appearing inside a lateximage,
\margintag{lateximage}
and therefore also inside a \TikZ\ or \env{picture}
- environment, is rendered as \SVG\ math even if \MathJax
- is used in the rest of the document.
+ environment, is rendered as \SVG\ math even if \MathJax\ is
+ used in the rest of the document.
\item For \pkg{siunitx},
\margintag{\pkg{siunitx}}
@@ -1461,9 +1457,8 @@ Yet another problem is math packages which are only partially emulated
in \MathJax.
The macro \cs{inlinemathother} may be used before a sequence of dynamic or complicated
math expressions, and \cs{inlinemathnormal} after. Doing so tells \pkg{lwarp} to
-use unhashed \SVG\ math images for those particular expressins, even if \MathJax
-is otherwise in use.
-See \cref{sec:localizingdynamicmath}.
+use unhashed \SVG\ math images for those particular expressins, even if \MathJax\ is
+otherwise in use. See \cref{sec:localizingdynamicmath}.
}
\newcommand*{\limitsmathdisplay}{
@@ -2037,9 +2032,6 @@ Color definitions, models, and mixing are fully supported
\margintag{color support}
without any changes required.
-\cs{rowcolors} is supported, except that the optional argument is ignored so far.
-\margintag{colored tables}
-
\cs{textcolor}, \cs{colorbox}, and \cs{fcolorbox} are supported.
\margintag{colored text and boxes}
@@ -2576,6 +2568,9 @@ in that order.
\trouble[row/cell color]{colortbl=\pkg{colortbl}}
\pkg{colortbl} ignores the overhang arguments.
+
+\cs{rowcolors} is supported, except that the optional argument is ignored so far.
+\margintag{colored tables}
}
\newcommand{\limitsctable}{%
@@ -2768,6 +2763,9 @@ may be defined as:
\margintag{indented alignment}
space which may not line up exactly with what \prog{pdftotext} detects.
Some lines may be off slightly in their left edge.
+
+\pkg{lwarp} sanitizes \HTML\ for \pkg{fancybox} verbatims, except for
+the contents of \cs{VerbBox} and any \cs{verb} inside.
}
\newcommand{\limitsmdframed}{%
@@ -3211,6 +3209,12 @@ after \cmds{lwarpmk html} use \cmds{lwarpmk cleanlimages} a single time,
and then \cmds{lwarpmk limages} to generate the new images.
}
+\newcommand*{\newlabelsystem}{
+Due to changes in cross referencing, \watchout[New labels]
+\textred{execute \cmds{lwarpmk clean} before recompiling.}
+}
+
+
\newcommand*{\describehashing}{%
If starred, a hashed filename is used.\margintag{image filename hashing}
@@ -3424,6 +3428,7 @@ This boolean may be tested by the user for later use.
% \changes{v0.910}{2023/01/03}{\ 2023/01/03}
% \changes{v0.911}{2023/02/28}{\ 2023/02/28}
% \changes{v0.912}{2023/08/28}{\ 2023/08/28}
+% \changes{v0.913}{2024/01/05}{\ 2024/01/05}
@@ -3456,7 +3461,9 @@ This boolean may be tested by the user for later use.
%
% \fileversion{} \Dash \filedate
%
-% {\small\textcopyright{} 2016--2023} Brian Dunn\\ \small \texttt{bd@BDTechConcepts.com}
+% {\small\textcopyright{} 2016--2024} Brian Dunn
+%
+% GitHub: \url{https://github.com/bdtc/lwarp}
%
% \end{center}
%
@@ -3542,6 +3549,8 @@ This boolean may be tested by the user for later use.
%
% To update existing projects, see \cref{sec:updates}: \nameref{sec:updates}.
%
+% Need help? See the \nameref{sec:indexgen} or the \nameref{sec:indextrb}.
+%
% \color{red!30!black}\bfseries
% \pkg{Lwarp} is still in development. Changes are likely.
%
@@ -3657,8 +3666,22 @@ This boolean may be tested by the user for later use.
% see the end of the Change History on page \pageref{sec:changesend}.
%
% \begin{description}
+% \item[v0.913:] \HTML\ sanitization for verbatims.
+% \begin{itemize}
+% \item Now at GitHub: \url{https://github.com/bdtc/lwarp}
+% \item Added bibliography usage info to docs and tutorial.
+% \item \cs{verb} now uses a \CSS\ class of \attribute{verb}
+% instead of \attribute{texttt}.
+% \item Improved \HTML\ sanitization for hyperlinks,
+% \pkg{fancybox}, \pkg{fancyvrb}, \pkg{fvextra}, \pkg{minted}.
+% \item Updated \pkg{fancyvrb}, \pkg{fvextra}, \pkg{simplebnf}.
+% \item \pkg{siunitx}: Updated, and improved complex i,j.
+% \item Added \pkg{doipubmed}.
+% \end{itemize}
+% \needspace{2\baselineskip}
% \item[v0.912:] Updated for new \LaTeX\ label system.
% \begin{itemize}
+% \item \newlabelsystem
% \item Fixed for updated kernel label system, name and back references.
% \item Updated \pkg{memoir}, \pkg{tcolorbox}.
% \item \pkg{nameref}: Now allowed to load before \pkg{lwarp}, such as by \pkg{memoir}.
@@ -3815,8 +3838,7 @@ This boolean may be tested by the user for later use.
% \needspace{2\baselineskip}
% \item[v0.896:] Back references, accessibility.
% \begin{itemize}
-% \item \textred{Due to changes in cross referencing, \watchout
-% execute \cmds{lwarpmk clean} before recompiling.}
+% \item \newlabelsystem
% \item Increased sectioning nesting stack depth. Error if overflow stack.
% \item Fixed footnotes at the end of the document,
% or inside a \env{description} label.
@@ -6080,7 +6102,7 @@ This boolean may be tested by the user for later use.
% due to native \LaTeX\ processing.\\
%
% Theorems: & Native \LaTeX\ theorems,
-% \mpkg{amsthm}, \spkg{apxproof}, \mpkg{ntheorem}, \mpkg{shadethm},
+% \mpkg{amsthm}, \mpkg{apxproof}, \mpkg{ntheorem}, \mpkg{shadethm},
% \mpkg{theorem}, \mpkg{thmbox}, \mpkg{thmtools}. \\
%
% Additional math: & Math fonts via \SVG\ images,
@@ -6294,8 +6316,8 @@ This boolean may be tested by the user for later use.
% \mpkg{axodraw2}, \mpkg{bitpattern}, \spkg{blochsphere}, \spkg{bodegraph},
% \spkg{bohr}, \mpkg{bytefield},
% \mpkg{chemfig}, \mpkg{chemformula}, \mpkg{chemgreek},
-% \mpkg{chemmacros}, \mpkg{chemnum},
-% \spkg{circuitikz}, \spkg{econometrics}\ejax, \spkg{elements},
+% \mpkg{chemmacros}, \mpkg{chemnum}, \spkg{circuitikz},
+% \mpkg{doipubmed}, \spkg{econometrics}\ejax, \spkg{elements},
% \mpkg{engtlc}\ejax, \spkg{fast-diagram}, \mpkg{ghsystem},
% \spkg{hepnicenames}, \spkg{heppennames}, \spkg{hepunits}\ejax,
% \mpkg{isotope}\ejax,
@@ -6971,6 +6993,7 @@ This boolean may be tested by the user for later use.
%
% \section{Tutorial}
% \label{sec:tutorial}
+% ^^A *tutorial
%
% This section shows an example of how to create an \pkg{lwarp} document.
%
@@ -7447,6 +7470,20 @@ This boolean may be tested by the user for later use.
%
% \clearpage
%
+% \subsection{Using a bibliography}
+%
+% \changes{v0.913}{2023/10/01}{Docs: Update a bibliography.}
+%
+% To process the bibliography for the \HTML\ version:
+% \userentry{bibtex <filename>\_html}
+% or
+% \userentry{biber <filename>\_html}
+%
+% To see the bibliography in the \HTML\ version:
+% \userentry{lwarpmk html1}
+% as many times as neccesary.
+%
+%
% \subsection{Using a glossary}
%
% \changes{v0.29}{2017/04/15}{Docs: Using a glossary}
@@ -7889,7 +7926,7 @@ This boolean may be tested by the user for later use.
% \DescribePackage{lmodern}
% To use Latin Modern instead, add
% \begin{sourcedisplay}
-% |usepackage{lmodern}|
+% |\usepackage{lmodern}|
% \end{sourcedisplay}
% to the preamble.
%
@@ -7908,7 +7945,7 @@ This boolean may be tested by the user for later use.
% \margintag{\prog{latex}, \prog{pdflatex}, T1, UTF8}
% \pkg{lwarp} automatically loads \pkg{fontenc} with T1 encoding.
% \pkg{fontenc} may be loaded with an additional encoding after \pkg{lwarp}.
-% \pkg{inputenc} is automatically loaded with UTF8 encoding if if has not yet been loaded,
+% \pkg{inputenc} is automatically loaded with UTF8 encoding if it has not yet been loaded,
% but may also be specified with another encoding such as |latin1|.
% See the next section regarding index encoding.
%
@@ -8273,7 +8310,7 @@ This boolean may be tested by the user for later use.
% \margintag{automatic setting}
% to sensible values for each of those programs while compiling a single index.
% \pkg{lwarp}'s \optn{makeindexStyle}, \optn{xindyStyle},
-% \optn{xindyLanuage}, and \optn{xindyCodepage} options will be used if specified.
+% \optn{xindyLanguage}, and \optn{xindyCodepage} options will be used if specified.
%
% If specifying \optn{PrintIndexCmd} manually,
% \trouble{PrintIndexCmd}
@@ -8313,7 +8350,7 @@ This boolean may be tested by the user for later use.
% \margintag{automatic setting}
% to sensible values for each of those programs while compiling a single index.
% \pkg{lwarp}'s \optn{makeindexStyle}, \optn{xindyStyle},
-% \optn{xindyLanuage}, and \optn{xindyCodepage} options will be used if specified.
+% \optn{xindyLanguage}, and \optn{xindyCodepage} options will be used if specified.
%
% If specifying \optn{HTMLIndexCmd} manually,
% \trouble[xindy]{xindy=\prog{xindy}>options>HTMLIndexCmd=\optn{HTMLIndexCmd}}
@@ -8344,7 +8381,7 @@ This boolean may be tested by the user for later use.
% \margintag{automatic setting}
% to either of the two settings show above.
% \pkg{lwarp}'s \optn{makeindexStyle}, \optn{xindyStyle},
-% \optn{xindyLanuage}, and \optn{xindyCodepage} options will be used if specified.
+% \optn{xindyLanguage}, and \optn{xindyCodepage} options will be used if specified.
% Unlike \optn{PrintIndexCmd} and \optn{HTMLIndexCmd},
% \prog{latexmk} uses either of the single-line settings of \optn{LatexmkIndexCmd}
% shown above to compile each of multiple indexes if necessary.
@@ -8677,7 +8714,7 @@ This boolean may be tested by the user for later use.
% of the section names. If false, web pages are numbered.
% Either way, the \optn{HTMLFilename} option is used as a prefix.
% See \cref{sec:filenameexamples} for examples of naming and numbering \HTML\ files.
-% The user must ensure that filenames are unique after begin sanitized.
+% The user must ensure that filenames are unique after being sanitized.
% \trouble[Unique filename!]{HTML>missing pages>filename not unique}
% For example, math in the section name is removed before creating the filename,
% so the rest of the filename must be sufficiently unique to avoid name collisions.
@@ -8728,7 +8765,7 @@ This boolean may be tested by the user for later use.
% \begin{description}
% \ItemDescribeMacro{\CSSFilename} \marg{filename.css} \DescribeDefault{lwarp.css} \quad
% Sets the \CSS\ file to use for the following
-% files. May be changed before each each sectioning command which would
+% files. May be changed before each sectioning command which would
% cause a file split.
%
% The \CSS\ styles of the web pages are set by the \cs{CSSFilename} command.
@@ -8737,12 +8774,12 @@ This boolean may be tested by the user for later use.
% in this tutorial. Change it to |lwarp_formal.css| for a more formal look,
% or comment out the \cs{CSSFilename} command to see the default.
% \cs{CSSFilename} may be used before each file break to set the \CSS\ for
-% individual pagess of the website.
+% individual pages of the website.
%
% \ItemDescribeMacro{\MathJaxFilename} \marg{filename}
% \DescribeDefault{\filenm{lwarp_mathjax.txt}} \quad
% Sets the \MathJax\ script file to use for the following
-% files. May be changed before each each sectioning command which would
+% files. May be changed before each sectioning command which would
% cause a file split.
%
% The \MathJax\ script file is copied into the head of each \HTML\ file.
@@ -8792,7 +8829,7 @@ This boolean may be tested by the user for later use.
%
% \ItemDescribeMacro{\HTMLDescription} \marg{description} \DescribeDefault{<empty>} \quad
% Sets the \HTML\ \attribute{description} tag for
-% the following files. May be changed before each each sectioning command which would
+% the following files. May be changed before each sectioning command which would
% cause a file split.
%
% \ItemDescribeMacro{\HTMLPageTop} \marg{contents} \DescribeDefault{<empty>} \quad
@@ -9144,8 +9181,8 @@ This boolean may be tested by the user for later use.
% Performs the given actions only when \HTML\ output is being generated.
%
% \DescribeEnv{warpMathJax}
-% Anything which is to be done only while using \HTML\ output with \MathJax
-% is surrounded by a \env{warpMathJax} environment.
+% Anything which is to be done only while using \HTML\ output with \MathJax\ is
+% surrounded by a \env{warpMathJax} environment.
% Usually, this is \cs{CustomizeMathJax}, used to add emulation macros.
% |\end{warpMathJax}| must appear on its own line.
% \trouble[\texttt{\cs{end}\{warpMathJax\}}]{warpMathJax}
@@ -9943,10 +9980,44 @@ This boolean may be tested by the user for later use.
%
% \subsubsection{\prog{BibTeX}}
% \label{sec:limitsbibtex}
+%
+% \trouble{bibtex=\pkg{bibtex}>Update bibliography}
+% \trouble{bibliography>update}
+% \gindex{bibtex=\pkg{bibtex}>Update bibliography}
+% \gindex{bibliography>update}
+% To update the \HTML\ version of the bibliography:
+% \userentry{bibtex <filename>\_html}
+% \changes{v0.913}{2023/10/01}{Docs: Update a bibliography.}
+%
% \DescribeMacro{\etalchar} Displays a superscript ``+'' to indicate ``and others''.
% \changes{v0.54}{2018/03/09}{Docs: BibTeX.}
%
-% \limitsbibtex
+% When enough authors are cited for a source,
+% \watchout[Modify *.bib]
+% \trouble{Improper \cs{prevdepth}>bibtex=\pkg{bibtex}}
+% \trouble{bibtex=\pkg{bibtex}>Improper \cs{prevdepth}}
+% \trouble{bibtex=\pkg{bibtex}>\cs{etalchar}}
+% \trouble{etalchar=\cs{etalchar}}
+% \BibTeX\ may use the \cs{etalchar} command
+% to display a math superscript with a $+$ character to indicate ``and others''.
+% Without modification, this will result in an ``Improper \cs{prevdepth}'' error.
+% At present, \pkg{lwarp} requires that \cs{etalchar} be replaced by a text superscript.
+% To do so, add to the start of the \filenm{.bib} file the following:
+% \begin{sourcedisplay}
+% \hspace*{-6em}@PREAMBLE\{"\cs{let}\cs{etalchar}\cs{relax}
+% \cs{newcommand}\{\cs{etalchar}\}[1]\{\cs{textsuperscript}\{\#1\}\}"\}
+% \end{sourcedisplay}
+%
+%
+% \subsubsection{\prog{biber}}
+%
+%\trouble{biber=\pkg{biber}>Update bibliography}
+%\trouble{bibliography>update}
+%\gindex{biber=\pkg{biber}>Update bibliography}
+%\gindex{bibliography>update}
+% To update the \HTML\ version of the bibliography:
+% \userentry{biber <filename>\_html}
+% \changes{v0.913}{2023/10/01}{Docs: Update a bibliography.}
%
%
% \subsubsection{\pkg{xcite} package}
@@ -12258,7 +12329,6 @@ This boolean may be tested by the user for later use.
% \begin{enumerate}
% \item Change the source in \filenm{lwarp.dtx}.
% \item |pdflatex lwarp.ins| -or- |pdflatex core.ins|
-% \item |pdflatex lwarp.dtx|
% \item If modifying \prog{lwarpmk} the new version should now be active.
% \item If modifying \CSS\ files or other files generated by \pkg{lwarp}:
% \begin{enumerate}
@@ -12266,6 +12336,7 @@ This boolean may be tested by the user for later use.
% in the project.
% \item Reload the \HTML\ document to see the effect of the new \CSS\ files.
% \end{enumerate}
+% \item If done testing, |pdflatex lwarp.dtx| to update the \pkg{lwarp} documentation.
% \end{enumerate}
%
% Sometimes it is worth checking the |<project>_html.pdf| file, which is the
@@ -13073,7 +13144,7 @@ This boolean may be tested by the user for later use.
% \begin{macrocode}
\RequirePackage{iftex}[2019/11/07]
\RequirePackage{ifpdf}
-\RequirePackage{ifptex}
+\RequirePackage{ifptex}% in case TL2019 or earlier
\newif\ifxetexorluatex
@@ -13615,6 +13686,7 @@ This boolean may be tested by the user for later use.
\LWR@loadafter{anonchap}
\LWR@loadafter{anysize}
\LWR@notmemoirloadafter{appendix}
+\LWR@loadafter{apxproof}
\LWR@loadafter{ar}
\LWR@loadafter{arabicfront}
\LWR@notmemoirloadafter{array}
@@ -13702,6 +13774,7 @@ This boolean may be tested by the user for later use.
\LWR@loadafter{decorule}
\LWR@loadafter{diagbox}
\LWR@loadafter{dingbat}
+\LWR@loadafter{doipubmed}
\LWR@loadafter{DotArrow}
\LWR@loadafter{dotlessi}
\LWR@loadafter{dprogress}
@@ -14194,8 +14267,11 @@ This boolean may be tested by the user for later use.
%
% The default for \pdfLaTeX, \dviLaTeX, up\LaTeX, etc:
% \changes{v0.63}{2018/11/30}{Fix: Default \cs{LWR@mdfive}.}
+% \changes{v0.913}{2023/12/09}{Fix: Default \cs{LWR@mdfive}.}
% \begin{macrocode}
-\let\LWR@mdfive\pdfmdfivesum
+\ifdef{\pdfmdfivesum}
+ {\let\LWR@mdfive\pdfmdfivesum}
+ {}
% \end{macrocode}
%
% For \LuaLaTeX:
@@ -14601,11 +14677,12 @@ This boolean may be tested by the user for later use.
%
% \begin{macro}{\LWR@maybe@orignewpage}
% Only do \cs{LWR@orignewpage} if not inside a \TeX\ box.
+% Avoids nested paragraph tags.
% \changes{v0.88}{2020/06/06}{Added.}
% \begin{macrocode}
\newcommand*{\LWR@maybe@orignewpage}{%
\LWR@traceinfo{LWR@maybe@orignewpage}%
- \ifnumgreater{\value{LWR@texboxdepth}}{0}
+ \ifnumgreater{\value{LWR@texboxdepth}}{0}%
{}%
{\LWR@orignewpage}%
\LWR@traceinfo{LWR@maybe@orignewpage done}%
@@ -17128,6 +17205,8 @@ This boolean may be tested by the user for later use.
%
%
% \begin{macro}{\LWR@formatted@checkname} \marg{name}
+%
+% Verify that a print and \HTML\ version exist.
% \changes{v0.893}{2020/11/15}{Added.}
% \changes{v0.901}{2021/08/18}{Improved error handling.}
% \begin{macrocode}
@@ -17506,12 +17585,14 @@ This boolean may be tested by the user for later use.
% be remembered here.
% \changes{v0.51}{2018/03/12}{Fix: Remember original \cs{\#} in case is redefined.}
% \changes{v0.72}{2019/05/24}{Use \cs{LWR@formatted} for \cs{bfseries}, etc.}
+% \changes{v0.913}{2023/12/09}{Added \cs{nobreakspace}.}
% \begin{macrocode}
\chardef\LWR@origpound=`\#
% \end{macrocode}
% \begin{macrocode}
\let\LWR@origcomma\,
-\let\LWR@origtilde~
+\LetLtxMacro\LWR@origtilde~
+\LetLtxMacro\LWR@orignobreakspace\nobreakspace
\let\LWR@orighfil\hfil
\let\LWR@orighss\hss
\let\LWR@origllap\llap
@@ -18268,6 +18349,8 @@ This boolean may be tested by the user for later use.
% \changes{v0.902}{2021/09/15}{\filenm{lwarp.css}: Added \pkg{beamerarticle}.}
% \changes{v0.902}{2021/09/28}{\filenm{lwarp.css}: Added \attribute{textnormal}.}
% \changes{v0.903}{2022/01/02}{\filenm{lwarp.css}: Improved pars in lists.}
+% \changes{v0.913}{2023/09/27}{\filenm{lwarp.css}: Improved \pkg{fancyvrb}.}
+% \changes{v0.913}{2023/09/27}{\filenm{lwarp.css}: Added complex number i,j format.}
%
% ^^A *lwarp.css
%
@@ -18371,6 +18454,12 @@ span.textup, div.textup {
font-variant-numeric: normal ;
}
+
+/* For complex number i,j symbols */
+span.ijit {font-style: italic; font-variant: normal}
+span.ijup {font-style: normal; font-variant: normal}
+
+
span.textsc, div.textsc {
font-variant: small-caps;
font-variant-numeric: oldstyle-nums ;
@@ -18944,8 +19033,10 @@ span.abstractrunintitle{
}
.fancyvrb {
- font-size:.85em ;
- margin: 3ex 0pt 3ex 0pt
+ margin: 3ex 0pt 3ex 0pt ;
+ font-family: "DejaVu Mono", "Bitstream Vera Mono", "Lucida Console",
+ "Nimbus Mono L", "Liberation Mono", "FreeMono", "Andale Mono",
+ "Courier New", monospace;
}
.fancyvrblabel {
@@ -19511,7 +19602,7 @@ div.programlisting pre.verbatim span.callout{
font-size: .85em ;
}
-span.verbatim {
+span.verbatim, span.verb {
font-family: "DejaVu Mono", "Bitstream Vera Mono", "Lucida Console",
"Nimbus Mono L", "Liberation Mono", "FreeMono", "Andale Mono",
"Courier New", monospace;
@@ -21137,10 +21228,10 @@ MathJax = {
\begin{filecontents*}[overwrite]{lwarpmk.lua}
#!/usr/bin/env texlua
--- Copyright 2016-2023 Brian Dunn
+-- Copyright 2016-2024 Brian Dunn
-printversion = "v0.912"
+printversion = "v0.913"
requiredconfversion = "2" -- also at *lwarpmk.conf
function printhelp ()
@@ -25188,7 +25279,7 @@ end -- not --version
% \changes{v0.902}{2021/09/20}{Improved \pkg{footnote} par tags.}
% \begin{macrocode}
\ifbool{LWR@spewingnotes}{}{%
- \LWR@origtilde\LWR@orignewline%
+ \LWR@orignobreakspace\LWR@orignewline%
\LWR@htmltagc{/\LWR@tagregularparagraph}%
\LWR@orignewline%
}%
@@ -25999,6 +26090,33 @@ end -- not --version
% \end{macrocode}
% \end{macro}
+
+% \DescribeBoolean{LWR@HTMLsanitize@tmpb@enable}
+% Allow to disable sanitization while inside a \env{lateximage},
+% or while using \pkg{minted}.
+% \watchout
+% \HTML\ sanitizaiton was occurring too early,
+% and \pkg{minted} would then colorize the sanitized results,
+% breaking the \HTML\ entities in \pkg{lwarp}'s \HTML\ output.
+% \changes{v0.913}{2023/11/17}{\bool{LWR@HTMLsanitize@tmpb@enable} added.}
+% \begin{macrocode}
+\newbool{LWR@HTMLsanitize@tmpb@enable}
+\booltrue{LWR@HTMLsanitize@tmpb@enable}
+% \end{macrocode}
+
+% \DescribeBoolean{LWR@HTMLsanitize@tmpb@removebackslash}
+%
+% Allow to enable \Slash disable sanitization of the
+% macros \cs{\%}, \cs{\#}, \cs{\%}.
+% This is usually enabled to allow the user to enter these macros in
+% \URL{}s, for example, but is disabled for ALT tags and
+% \MathJax\ output where the literal \LaTeX\ source must be preserved.
+% \changes{v0.913}{2023/11/25}{\bool{LWR@HTMLsanitize@tmpb@removebackslash} added.}
+% \begin{macrocode}
+\newbool{LWR@HTMLsanitize@tmpb@removebackslash}
+\booltrue{LWR@HTMLsanitize@tmpb@removebackslash}
+% \end{macrocode}
+
% \DescribeBoolean{LWR@MathJax@silentquotes}
% If true, double quotes (\cs{"} and |"|) are removed (used for \pkg{mathspec}).
% This unfortunately includes double quotes used inside \cs{text} with \MathJax.
@@ -26009,11 +26127,94 @@ end -- not --version
% \end{macrocode}
+% \begin{macro}{\LWR@HTMLsanitize@tmpb} Sanitizes \HTML\ for \cs{tmpb}.
+% These characters may be interpreted by the browser.
+% \changes{v0.913}{2023/10/01}{Added.}
+% \begin{macrocode}
+\catcode`\&=12
+\newcommand*{\LWR@HTMLsanitize@tmpb}{%
+ \ifbool{LWR@HTMLsanitize@tmpb@enable}%
+ {%
+% \end{macrocode}
+%
+% \HTML\ entities:
+% \begin{macrocode}
+ \LWR@replacestrings{&}{&amp;}% must be first because & is used for lt, gt, etc.
+ \LWR@replacestrings{<}{&lt;}%
+ \LWR@replacestrings{>}{&gt;}%
+ \LWR@replacestrings{'}{&apos;}%
+ \LWR@replacestrings{`}{&grave;}%
+ \LWR@replacestrings{_}{\detokenize{_}}%
+% \end{macrocode}
+% ^^A \StrSubstitute[100]{\tmpb}{\LWRpercent}{&percnt;}[\tmpb]%
+%
+% Neutralize \cs{\%}, \cs{\#}, \cs{\&} in case used by the author.
+%
+% \cs{@tempa} is built to be
+% \begin{Verbatim}[gobble=2,obeytabs,tabsize=4,frame=lines]
+% \LWR@replacestrings{\#}{#}
+% \end{Verbatim}
+% and similar for |%| and |&|.
+% \changes{v0.913}{2023/11/25}{Neutralize \cs{\%}, \cs{\#}, \cs{\&} in \URL.}
+% \begin{macrocode}
+ \ifbool{LWR@HTMLsanitize@tmpb@removebackslash}%
+ {%
+ \def\@tempa{\LWR@replacestrings}%
+ \expandafter\appto\expandafter\@tempa\expandafter{\expandafter{\detokenize{\#}}}%
+ \expandafter\appto\expandafter\@tempa\expandafter{\expandafter{\LWRhash}}%
+ \@tempa%
+ \def\@tempa{\LWR@replacestrings}%
+ \expandafter\appto\expandafter\@tempa\expandafter{\expandafter{\detokenize{\%}}}%
+ \expandafter\appto\expandafter\@tempa\expandafter{\expandafter{\LWRpercent}}%
+ \@tempa%
+ \def\@tempa{\LWR@replacestrings}%
+ \expandafter\appto\expandafter\@tempa\expandafter{\expandafter{\detokenize{\&}}}%
+ \expandafter\appto\expandafter\@tempa\expandafter{\expandafter{\LWRamp}}%
+ \@tempa%
+ }%
+ {}%
+% \end{macrocode}
+%
+% The quotes occasionally causes problems.
+% For \pkg{MathJax}, also allow neutralization of \cs{"} and the |"| character.
+% \changes{v0.891}{2020/09/09}{Neutralized quotes.}
+% \changes{v0.893}{2020/11/22}{Optionally neutralized quotes.}
+% \begin{macrocode}
+ \ifbool{LWR@MathJax@silentquotes}
+ {%
+ \expandafter\LWR@replacestrings\expandafter{\LWRbackslash"}{}%
+ \LWR@replacestrings{"}{}%
+ }%
+ {\LWR@replacestrings{"}{&quot;}}%
+ }% enabled
+ {}% not enabled
+}
+\catcode`\&=4
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@HTMLsanitize@use@tmpb} \marg{text}
+%
+% Sanitizes via \cs{LWR@HTMLsanitize@tmpb} and then immediately uses the result.
+% \begin{macrocode}
+\newcommand{\LWR@HTMLsanitize@use@tmpb}[1]{%
+ \ifbool{LWR@HTMLsanitize@tmpb@enable}%
+ {%
+ \def\tmpb{#1}%
+ \LWR@HTMLsanitize@tmpb%
+ \tmpb%
+ }%
+ {#1}%
+}
+% \end{macrocode}
+% \end{macro}
+
% \begin{macro}{\LWR@subHTMLsanitize}
%
-% \cs{LWR@strresult} must first be set by \cs{LWR@HTMLsanitize},
-% \cs{LWR@HTMLsanitizeexpand}, or \cs{CustomizeMathJax}.
+% \cs{LWR@strresult} must first be set by \cs{LWR@HTMLsanitizedetokenized},
+% \cs{LWR@HTMLsanitizeexpanded}, or \cs{CustomizeMathJax}.
%
% \changes{v0.36}{2017/08/16}{Fix for \pkg{babel-french}.}
% \changes{v0.51}{2018/03/07}{Fix: Escapes double quotes.}
@@ -26021,30 +26222,9 @@ end -- not --version
% \changes{v0.81}{2020/02/24}{Faster.}
% \begin{macrocode}
\catcode`\#=12
-\catcode`\&=12
\newcommand{\LWR@subHTMLsanitize}{%
-% \end{macrocode}
-% The |&|, |<|, and |>| may be interpreted by the browser:
-%
-% \begin{macrocode}
\edef\tmpb{\detokenize\expandafter{\LWR@strresult}}%
- \LWR@replacestrings{&}{&amp;}%
- \LWR@replacestrings{<}{&lt;}%
- \LWR@replacestrings{>}{&gt;}%
-% \end{macrocode}
-% The quotes occasionally causes problems.
-% For \pkg{mathspec}, also allow neutralization of \cs{"} and the |"| character.
-% \changes{v0.891}{2020/09/09}{Neutralized single quotes.}
-% \changes{v0.893}{2020/11/22}{Optionally neutralized single quotes.}
-% \begin{macrocode}
- \ifbool{LWR@MathJax@silentquotes}
- {%
- \expandafter\LWR@replacestrings\expandafter{\LWRbackslash"}{}%
- \LWR@replacestrings{"}{}%
- }%
- {\LWR@replacestrings{"}{&quot;}}%
- \LWR@replacestrings{'}{&apos;}%
- \LWR@replacestrings{`}{&grave;}%
+ \LWR@HTMLsanitize@tmpb%
% \end{macrocode}
% \MathJax\ allows expressions to be defined with \cs{newcommand}.
% These expressions would appear with |##| for each argument,
@@ -26056,7 +26236,6 @@ end -- not --version
\edef\LWR@strresult{\detokenize\expandafter{\tmpb}}%
}
\catcode`\#=6
-\catcode`\&=4
% \end{macrocode}
% \end{macro}
@@ -26163,6 +26342,7 @@ end -- not --version
\newcommand*{\LWR@subcustomizedmathjax}[1]{%
\begingroup%
\LWR@hook@processingtags%
+ \boolfalse{LWR@HTMLsanitize@tmpb@removebackslash}%
\edef\LWR@strresult{\detokenize{#1}}%
\LWR@subHTMLsanitize%
\xdef\LWR@customizedMathJax{%
@@ -27892,6 +28072,7 @@ end -- not --version
\begingroup%
\LWR@restoreoriglists%
\boolfalse{LWR@verbtags}%
+ \boolfalse{LWR@HTMLsanitize@tmpb@removebackslash}%
% \end{macrocode}
% ^^A \ifbool{mathKaTeX}{%
% ^^A \verbatiminput{lwarp_KaTeX.txt}%
@@ -27912,7 +28093,6 @@ end -- not --version
% \end{macrocode}
% ^^A }%
% \begin{macrocode}
- \booltrue{LWR@verbtags}%
\endgroup%
\LWR@stoppars%
}% end of mathjax
@@ -28234,11 +28414,11 @@ end -- not --version
% \changes{v0.65}{2018/12/18}{Improved \CSS\ for page layout.}
% \changes{v0.84}{2020/04/24}{Added prev/next links.}
%
-% (The \cs{LWR@origtilde} is in case no autopage is required for the label,
+% (The \cs{LWR@orignobreakspace} is in case no autopage is required for the label,
% which would not print anything, and something must be printed before the newline.)
%
% \begin{macrocode}
-\label{\BaseJobname-autofile-last}\LWR@origtilde\LWR@orignewline
+\label{\BaseJobname-autofile-last}\LWR@orignobreakspace\LWR@orignewline
% \end{macrocode}
%
% \changes{v0.896}{2021/03/04}{Added \element{main}.}
@@ -29321,8 +29501,26 @@ end -- not --version
\begin{warpHTML}
% \end{macrocode}
+
+% \begin{macro}{\@setupverbvisiblespace}
+% For \XeTeX\ or \LuaTeX, the default visible space was drawn in \PDF,
+% but not a text character which could be copied to \HTML.
+% \changes{v0.913}{2023/11/27}{Fixed \XeTeX, \LuaTeX\ visible space.}
+% \begin{macrocode}
+\ifxetexorluatex
+
+\newcommand*{\LWR@HTML@@setupverbvisiblespace}{\let\@xobeysp\textvisiblespace}
+
+\LWR@formatted{@setupverbvisiblespace}
+
+\fi
+% \end{macrocode}
+% \end{macro}
+
+
% \DescribeBoolean{LWR@verbtags} Used to temporarily turn off verbatim tags
-% while doing \cs{verbatiminput} in the \HTML\ head.
+% while doing \cs{verbatiminput} in the \HTML\ head, or during \MathJax.
+% Verbatim tags are also disabled separately inside an \HTML\ span.
% \begin{macrocode}
\newbool{LWR@verbtags}
\booltrue{LWR@verbtags}
@@ -29332,25 +29530,31 @@ end -- not --version
% \begin{macro}{\verb}
%
% Patched to encapsulate the verbatim text inside span
-% with a class of \attribute{texttt}.
+% with a class of \attribute{verb}.
%
-% \changes{v0.891}{2020/09/12}{\cs{verb} as \cs{texttt}.}
% \begin{macrocode}
\LetLtxMacro\LWR@orig@verb@egroup\verb@egroup
\def\LWR@verb@egroup@endspan{%
\LWR@orig@verb@egroup%
- \LWR@htmltag{/span}%
+ \ifbool{LWR@verbtags}%
+ {\LWR@htmltag{/span}}%
+ {}%
\endgroup%
}
% \end{macrocode}
%
+% \changes{v0.891}{2020/09/12}{\cs{verb} as class \attribute{texttt}.}
% \changes{v0.895}{2021/01/14}{Improved \HTML\ quotes.}
+% \changes{v0.913}{2023/12/07}{\cs{verb} as class \attribute{verb}.}
+% \changes{v0.913}{2023/12/09}{\cs{verb} in a \env{lateximage}.}
% \begin{macrocode}
\xpretocmd{\verb}
{%
\begingroup%
- \LWR@htmltag{span class=\textquotedbl{}texttt\textquotedbl}%
+ \ifbool{LWR@verbtags}%
+ {\LWR@htmltag{span class=\textquotedbl{}verb\textquotedbl}}%
+ {}%
\let\verb@egroup\LWR@verb@egroup@endspan%
}
{}
@@ -29393,13 +29597,20 @@ end -- not --version
%
% Create a new |pre| of the given class.
% The tags may temporarily be turned off for internal use, such
-% as loading the \MathJax\ script.
+% as loading the \MathJax\ script, or inside a \element{span}.
+% \changes{v0.913}{2023/11/07}{Fix: No \element{pre} tags if inside a \element{span}.}
% \begin{macrocode}
-\ifbool{LWR@verbtags}{%
- \LWR@htmltag{pre class=\textquotedbl#2\textquotedbl%
- \ifthenelse{\equal{#1}{}}{}{ style=\textquotedbl#1\textquotedbl}%
+\ifbool{LWR@verbtags}%
+{%
+ \ifnumcomp{\value{LWR@spandepth}}{=}{0}{%
+ \LWR@htmltag{pre class=\textquotedbl#2\textquotedbl%
+ \ifthenelse{\equal{#1}{}}{}{ style=\textquotedbl#1\textquotedbl}%
+ }%
+ \par%
+ }%
+ {% in a span
+ \LWR@spanwarnformat{verbatim}%
}%
- \par%
}{}%
% \end{macrocode}
%
@@ -29416,20 +29627,36 @@ end -- not --version
% \begin{macrocode}
\LWR@print@normalfont%
\LWR@origttfamily%
-\LWR@print@scriptsize%
% \end{macrocode}
+%
+% If not inside a \env{lateximage},
+% use a small font to avoid line overflow.
+% \changes{v0.913}{2023/12/11}{Fix: Verbatim font size in a \env{lateximage}.}
+% \begin{macrocode}
+\ifnumcomp{\value{LWR@lateximagedepth}}{=}{0}%
+ {\LWR@print@scriptsize}%
+ {}%
+% \end{macrocode}
+%
% Since inside a \element{pre}, restore the original list processing:
% \begin{macrocode}
\LWR@restoreoriglists%
% \end{macrocode}
+%
% Turn off \pkg{babel-french} extra space before punctuation:
% \begin{macrocode}
\LWR@hook@processingtags%
% \end{macrocode}
+%
% Do not produce \HTML\ tags for \cs{hspace} inside a verse |par|.
% Restore plain \LaTeX{} \cs{hspace} functionality:
% \begin{macrocode}
\let\hspace\LWR@print@hspace%
+% \end{macrocode}
+%
+% Do not produce \HTML\ tags for \cs{nbsp}.
+% \begin{macrocode}
+\boolfalse{LWR@HTMLsanitize@nobreakspace}%
}
% \end{macrocode}
% \end{macro}
@@ -29446,7 +29673,11 @@ end -- not --version
% \end{macrocode}
% At the end of the environment, close the |pre|:
% \begin{macrocode}
-\ifbool{LWR@verbtags}{%
+\ifboolexpr{
+ bool{LWR@verbtags} and
+ test {\ifnumcomp{\value{LWR@spandepth}}{=}{0}}
+}%
+{%
\noindent\LWR@htmltag{/pre}\par% pre
}{}%
% \end{macrocode}
@@ -29533,6 +29764,7 @@ end -- not --version
% \changes{v0.84}{2020/04/17}{Restore spacing.}
% \changes{v0.903}{2021/12/20}{Converted to env.}
% \changes{v0.906}{2022/06/10}{Used \cs{LWR@formatted} for more items.}
+% \changes{v0.913}{2023/12/09}{Added \cs{nobreakspace}.}
% \begin{macrocode}
\newenvironment*{LWR@HTML@tabbing}
{%
@@ -29541,7 +29773,8 @@ end -- not --version
\let\enskip\LWR@print@enskip%
\let\quad\LWR@print@quad%
\let\qquad\LWR@print@qquad%
- \let~\LWR@origtilde%
+ \LetLtxMacro~\LWR@origtilde%
+ \LetLtxMacro\nobreakspace\LWR@orignobreakspace%
\let\,\LWR@origcomma%
\let\thinspace\LWR@print@thinspace%
\let\negthinspace\LWR@print@negthinspace%
@@ -32444,7 +32677,7 @@ end -- not --version
% \end{macrocode}
% Print the class with left and right trim letters appended:
% \begin{macrocode}
- \LWR@origtilde tdrule#1#2%
+ \space tdrule#1#2%
% \end{macrocode}
% Remember the width of the rule:
% \begin{macrocode}
@@ -35241,6 +35474,17 @@ end -- not --version
% \end{macro}
+% \begin{macro}{\NR@gettitle} \marg{text}
+% From \pkg{nameref}, used by \pkg{caption}.
+% \changes{v0.913}{2023/11/22}{Fix for recent changes in \pkg{caption} with \cs{nameref}.}
+% \begin{macrocode}
+\def\NR@gettitle#1{%
+ \GetTitleString{#1}%
+ \let\@currentlabelname\GetTitleStringResult
+}
+% \end{macrocode}
+% \end{macro}
+
% \subsection{Hyper-references}
%
@@ -35329,12 +35573,14 @@ end -- not --version
% \changes{v0.45}{2017/12/29}{Improved URLs with underscores.}
% \changes{v0.57}{2018/06/05}{Fix: Text catcodes.}
% \changes{v0.895}{2021/01/14}{Improved \HTML\ quotes.}
+% \changes{v0.913}{2023/10/01}{Improved \HTML\ sanitization.}
% \begin{macrocode}
\NewDocumentCommand{\LWR@subhyperref}{m}{%
\LWR@traceinfo{LWR@subhyperref !#1!}%
- \LWR@sanitize{#1}%
+ \edef\tmpb{\detokenize\expandafter{#1}}%
+ \LWR@HTMLsanitize@tmpb%
\LWR@htmltag{%
- a href=\textquotedbl\LWR@sanitized\textquotedbl\ % space
+ a href=\textquotedbl\tmpb\textquotedbl\ % space
\LWR@addlinktitle % space
target=\textquotedbl\_{}blank\textquotedbl\ % space
}%
@@ -35342,14 +35588,33 @@ end -- not --version
% \end{macrocode}
% \end{macro}
-% \begin{macro}{\LWR@subhyperreftext} \marg{text}
+% \begin{macro}{\LWR@subhyperreftext@sanizited} \marg{text}
%
% Finishes the hyperref for \cs{LWR@hrefb}. Catcodes must have been restored already.
% To be used after \cs{LWR@subhyperref}, and after its group has been closed.
%
% \changes{v0.57}{2018/06/05}{Fix: Text catcodes.}
+% \changes{v0.913}{2023/10/01}{Improved \HTML\ sanitization.}
% \begin{macrocode}
-\newcommand{\LWR@subhyperreftext}[1]{%
+\newcommand{\LWR@subhyperreftext@sanitized}[1]{%
+ \edef\tmpb{#1}%
+ \LWR@HTMLsanitize@tmpb%
+ \tmpb%
+ \LWR@htmltag{/a}%
+ \LWR@ensuredoingapar%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR@subhyperreftext@unsanitized} \marg{text}
+%
+% Finishes the hyperref for \cs{LWR@hrefb}. Catcodes must have been restored already.
+% To be used after \cs{LWR@subhyperref}, and after its group has been closed.
+%
+% \changes{v0.57}{2018/06/05}{Fix: Text catcodes.}
+% \begin{macrocode}
+\newcommand{\LWR@subhyperreftext@unsanitized}[1]{%
#1%
\LWR@htmltag{/a}%
\LWR@ensuredoingapar%
@@ -35358,6 +35623,8 @@ end -- not --version
% \end{macro}
+
+
% \begin{macro}{\LWR@subhyperrefclass} \marg{URL} \marg{text} \marg{htmlclass}
% \changes{v0.18}{2016/04/14}{Improved \HTML\ output linebreaks.}
% \changes{v0.45}{2017/12/29}{Improved URLs with underscores.}
@@ -35383,7 +35650,8 @@ end -- not --version
% \begin{macro}{\LWR@href} \oarg{options} \marg{URL} \marg{text}
%
-% Create a link with accompanying text:
+% Create a link with accompanying text.
+% The accompanyting text is sanitized for \HTML.
%
% \changes{v0.43}{2017/10/31}{Made robust.}
% \changes{v0.49}{2018/02/18}{Fix: Adapt to classes.}
@@ -35395,7 +35663,12 @@ end -- not --version
\LWR@ensuredoingapar%
\LWR@subhyperref{#2}%
\endgroup% restore catcodes
- \LWR@subhyperreftext%
+% \end{macrocode}
+% If use \cs{LWR@subhyperreftext@sanitized} here,
+% some forms of text may not expand correctly, and thus break.
+% ^^A \LWR@subhyperreftext@sanitized% takes the following text as an argument
+% \begin{macrocode}
+ \LWR@subhyperreftext@unsanitized% takes the following text as an argument
}
\newrobustcmd*{\LWR@href}{%
@@ -35404,6 +35677,54 @@ end -- not --version
\LWR@hrefb%
}
% \end{macrocode}
+
+% A version which sanitizes both the \acro{URL} and the text.
+% Used by \cs{LWR@url}.
+% \changes{v0.913}{2023/10/04}{Improved \HTML\ sanitization.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\LWR@hrefb@sanitized}{O{} m}{%
+ \LWR@ensuredoingapar%
+ \LWR@subhyperref{#2}%
+ \endgroup% restore catcodes
+% \end{macrocode}
+% Used by \cs{LWR@url} to sanitize the text argument before printing.
+% \begin{macrocode}
+ \LWR@subhyperreftext@sanitized% takes the following text as an argument
+}
+
+\newrobustcmd*{\LWR@href@sanitized}{%
+ \begingroup%
+ \LWR@linkcatcodes%
+ \LWR@hrefb@sanitized%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LWR@href@partsanitized} \oarg{options} \marg{URL} \marg{text}
+%
+% Create a link with accompanying text.
+% The accompanyting text is not sanitized,
+% for use internally with algorithmically derived tags.
+%
+% \changes{v0.43}{2017/10/31}{Made robust.}
+% \changes{v0.49}{2018/02/18}{Fix: Adapt to classes.}
+% \changes{v0.52}{2018/03/26}{Fix: \progcode{\#}, \progcode{\%}, \progcode{\&}, \progcode{\~}, \progcode{\_} in \URL.}
+% \changes{v0.57}{2018/06/05}{Fix: Text catcodes.}
+% \changes{v0.86}{2020/05/07}{\pkg{hyperref}: Adjusted emulation.}
+% \begin{macrocode}
+\DeclareDocumentCommand{\LWR@hrefb@partsanitized}{O{} m}{%
+ \LWR@ensuredoingapar%
+ \LWR@subhyperref{#2}%
+ \endgroup% restore catcodes
+ \LWR@subhyperreftext@unsanitized% takes the following text as an argument
+}
+
+\newrobustcmd*{\LWR@href@partsanitized}{%
+ \begingroup%
+ \LWR@linkcatcodes%
+ \LWR@hrefb@partsanitized%
+}
+% \end{macrocode}
% \end{macro}
% \begin{macro}{\LWR@nolinkurl} \marg{URL}
@@ -35413,12 +35734,13 @@ end -- not --version
% \changes{v0.45}{2017/12/29}{Fix: Underscore in \URL.}
% \changes{v0.52}{2018/03/26}{Fix: \progcode{\#}, \progcode{\%}, \progcode{\&}, \progcode{\~}, \progcode{\_} in \URL.}
% \changes{v0.86}{2020/05/07}{\pkg{hyperref}: Adjusted emulation.}
+% \changes{v0.913}{2023/10/01}{Improved \HTML\ sanitization.}
% \begin{macrocode}
\newcommand*{\LWR@nolinkurlb}[1]{%
\LWR@ensuredoingapar%
- \def\LWR@templink{#1}%
- \@onelevel@sanitize\LWR@templink%
- \LWR@templink%
+ \edef\tmpb{#1}%
+ \LWR@HTMLsanitize@tmpb%
+ \tmpb%
\endgroup%
}
@@ -35446,9 +35768,7 @@ end -- not --version
% \begin{macrocode}
\DeclareDocumentCommand{\LWR@urlb}{m}{%
\LWR@ensuredoingapar%
- \def\LWR@templink{#1}%
- \@onelevel@sanitize\LWR@templink%
- \LWR@href{\LWR@templink}{\LWR@templink}%
+ \LWR@href@sanitized{#1}{#1}%
\endgroup%
}
@@ -35471,8 +35791,11 @@ end -- not --version
% \changes{v0.74}{2019/08/20}{Add \cs{ThisAltText}.}
% \changes{v0.895}{2021/01/14}{Improved \HTML\ quotes.}
% \changes{v0.896}{2021/03/05}{Added \ARIA\ role.}
+% \changes{v0.913}{2023/11/25}{\bool{LWR@HTMLsanitize@tmpb@removebackslash} added.}
% \begin{macrocode}
\newcommand*{\LWR@subinlineimage}[6]{%
+ \begingroup%
+ \boolfalse{LWR@HTMLsanitize@tmpb@removebackslash}%
\ifblank{#6}%
{\renewcommand*{\LWR@tempone}{}}%
{\renewcommand*{\LWR@tempone}{role="#6"\LWR@indentHTML}}%
@@ -35495,6 +35818,7 @@ end -- not --version
class=\textquotedbl#2\textquotedbl \LWR@orignewline
}%
}%
+ \endgroup%
}
% \end{macrocode}
% \end{macro}
@@ -37511,13 +37835,15 @@ end -- not --version
\let\&\LWR@origampersand%
% \end{macrocode}
% \changes{v0.72}{2019/05/24}{Use \cs{LWR@formatted} for \cs{bfseries}, etc.}
+% \changes{v0.013}{2023/12/09}{Added \cs{nobreakspace}.}
% \begin{macrocode}
\LetLtxMacro\em\LWR@origem%
\LetLtxMacro\normalfont\LWR@orignormalfont%
\let\sp\LWR@origsp%
\let\sb\LWR@origsb%
\LetLtxMacro\underline\LWR@origunderline%
- \let~\LWR@origtilde%
+ \LetLtxMacro~\LWR@origtilde%
+ \LetLtxMacro\nobreakspace\LWR@orignobreakspace%
% \end{macrocode}
%
% \cs{endtabular} must be restored to its original,
@@ -38491,6 +38817,7 @@ end -- not --version
{%
\LWR@traceinfo{LWR@subsingledollar: Mathjax}%
{%
+ \boolfalse{LWR@HTMLsanitize@tmpb@removebackslash}%
\textbackslash(%
{%
% \end{macrocode}
@@ -38583,6 +38910,7 @@ end -- not --version
% \begin{macrocode}
{% intentional blank line:
+ \begingroup%
\IfSubStr{\detokenize\expandafter{#1}}{\detokenize{note}}{%
% \end{macrocode}
%
@@ -38597,6 +38925,7 @@ end -- not --version
% \changes{v0.903}{2021/12/18}{Improved math sanitization.}
% \begin{macrocode}
\InlineClass{hidden}{\LWR@syncnotenumbers}%
+ \boolfalse{LWR@HTMLsanitize@tmpb@removebackslash}%
\textbackslash[%
{%
\LWR@print@ttfamily%
@@ -38604,14 +38933,17 @@ end -- not --version
}%
\textbackslash]
\InlineClass{hidden}{\LWR@syncnotenames}%
- }{%
+ }% yes note
+ {% no note
+ \boolfalse{LWR@HTMLsanitize@tmpb@removebackslash}%
\textbackslash[%
{%
\LWR@print@ttfamily%
\LWR@HTMLsanitizedetokenized{\detokenize{#1}}%
}%
\textbackslash]
- }%
+ }% no note
+ \endgroup%
}% mathjax
% \end{macrocode}
@@ -38666,6 +38998,8 @@ end -- not --version
\protected\gdef\LWR@singledollar#1${%
\LWR@traceinfo{LWR@singledollar}%
\ifbool{mathjax}{%
+ \begingroup%
+ \boolfalse{LWR@HTMLsanitize@tmpb@removebackslash}%
\LWR@subsingledollar*%
{% alt tag
\textbackslash( %
@@ -38674,6 +39008,7 @@ end -- not --version
}%
{singledollar}% add'l hashing
{#1}% contents
+ \endgroup%
}{% not mathjax
\LWR@subsingledollar*%
{% alt tag
@@ -38735,6 +39070,8 @@ end -- not --version
\renewcommand{\@ensuredmath}[1]{%
\ifbool{mathjax}{%
+ \begingroup%
+ \boolfalse{LWR@HTMLsanitize@tmpb@removebackslash}%
\LWR@subsingledollar*{\AltTextOpen\MathImageAltText\AltTextClose}%
{%
\protect\LWR@HTMLsanitizedetokenized{\detokenize\expandafter{#1}}%
@@ -38743,6 +39080,7 @@ end -- not --version
\relax%
\LWR@origensuredmath{#1}%
}%
+ \endgroup%
}{% SVG math
% \end{macrocode}
% If already inside a \env{lateximage} in math mode, continue as-is.
@@ -39034,7 +39372,7 @@ end -- not --version
\NewDocumentCommand{\LWR@addmathjax}{m +m}{%
% \end{macrocode}
% \begin{macrocode}
- \LWR@origtilde\LWR@orignewline
+ \LWR@orignobreakspace\LWR@orignewline
% \end{macrocode}
% Enclose the \MathJax\ environment inside printed ``\cs{(}'' and ``\cs{)}'' characters.
% Print the environment name and contents, sanitizing for \HTML\ special characters.
@@ -39060,6 +39398,7 @@ end -- not --version
% The environment contents and \cs{end}:
% \begin{macrocode}
\LWR@orignewline%
+ \boolfalse{LWR@HTMLsanitize@tmpb@removebackslash}%
\LWR@HTMLsanitizeexpanded{\detokenize\expandafter{#2}}%
\LWR@orignewline%
\textbackslash{}end\{#1\}
@@ -39299,8 +39638,8 @@ end -- not --version
% \end{environment}
-% Remember the ``less'' version of \env{equation}, which uses \MathJax
-% and \attribute{alt} tags, but does not support complicated contents such as
+% Remember the ``less'' version of \env{equation}, which uses \MathJax\ and
+% \attribute{alt} tags, but does not support complicated contents such as
% some \TikZ\ expressions.
% \begin{macrocode}
\AtBeginDocument{
@@ -39410,7 +39749,7 @@ end -- not --version
% \begin{macrocode}
\newcommand*{\LWR@beginhideamsmath}{
\LWR@stoppars
- \LWR@origtilde\LWR@orignewline
+ \LWR@orignobreakspace\LWR@orignewline
\LWR@htmlopencomment
\begingroup
@@ -39503,6 +39842,7 @@ end -- not --version
% \begin{macrocode}
\LWR@syncmathjax%
\boolfalse{LWR@amsmultline}%
+ \boolfalse{LWR@HTMLsanitize@tmpb@removebackslash}%
\ifbool{LWR@numbereqnarray}%
{%
% \end{macrocode}
@@ -40028,6 +40368,14 @@ end -- not --version
% \begin{macrocode}
\boolfalse{mathjax}%
% \end{macrocode}
+%
+% While inside a lateximage, do not use \HTML\ tags for verbatim content,
+% and do not sanitize \HTML\ tags for |<|, |>|, |&|, etc.
+% \begin{macrocode}
+ \boolfalse{LWR@verbtags}%
+ \boolfalse{LWR@HTMLsanitize@tmpb@enable}%
+% \end{macrocode}
+%
% Be sure that are doing a paragraph:
% \begin{macrocode}
\LWR@ensuredoingapar%
@@ -42233,9 +42581,9 @@ color:\LWR@origpound\LWR@tempcolor%
{\InlineClass{textnormal}{#1}}%
{%
\InlineClass{%
- text\LWR@f@family\LWR@origtilde{}%
- text\LWR@f@series\LWR@origtilde{}%
- text\LWR@f@shape\LWR@origtilde{}%
+ text\LWR@f@family\LWR@orignobreakspace{}%
+ text\LWR@f@series\LWR@orignobreakspace{}%
+ text\LWR@f@shape\LWR@orignobreakspace{}%
text\LWR@f@shapecaps%
}%
{#1}%
@@ -42256,9 +42604,9 @@ color:\LWR@origpound\LWR@tempcolor%
\newenvironment*{LWR@blocktextcurrentfont}{%
\LWR@stoppars%
\BlockClass{%
- text\LWR@f@family\LWR@origtilde{}%
- text\LWR@f@series\LWR@origtilde{}%
- text\LWR@f@shape\LWR@origtilde{}%
+ text\LWR@f@family\LWR@orignobreakspace{}%
+ text\LWR@f@series\LWR@orignobreakspace{}%
+ text\LWR@f@shape\LWR@orignobreakspace{}%
text\LWR@f@shapecaps%
}%
}{\endBlockClass\LWR@startpars}
@@ -42675,6 +43023,19 @@ color:\LWR@origpound\LWR@tempcolor%
\begin{warpHTML}
% \end{macrocode}
%
+%
+% \DescribeBoolean{LWR@HTMLsanitize@nobreakspace}
+% Used to disable the |nbsp| entity inside verbatims \element{pre} sections,
+% but not inside inline verbatims where spacing must be preserved by \element{nbsp}.
+%
+% (\pkg{fvextra} used |~| which showed as \element{nbsp}.)
+% \changes{v0.913}{2023/12/16}{Disable \element{nbsp} inside verbatims.}
+% \begin{macrocode}
+\newbool{LWR@HTMLsanitize@nobreakspace}
+\booltrue{LWR@HTMLsanitize@nobreakspace}
+% \end{macrocode}
+%
+%
% \cs{,} and \cs{thinspace} may be redefined by other packages, so
% are redefined \cs{AtBeginDocument} here.
%
@@ -42685,19 +43046,44 @@ color:\LWR@origpound\LWR@tempcolor%
% \changes{v0.61}{2018/09/23}{Spaces redefined \cs{AtBeginDocument}.}
% \changes{v0.88}{2020/07/03}{Added \cs{vdots}.}
% \changes{v0.906}{2022/06/10}{Used \cs{LWR@formatted} for more items.}
+% \changes{v0.913}{2023/12/09}{Added \cs{nobreakspace}.}
% \begin{macrocode}
\AtBeginDocument{%
+%
\renewrobustcmd*{\,}{\HTMLunicode{202f}}% HTML thin non-breakable space, not using LWR@formatted
+%
\newrobustcmd*{\LWR@HTML@thinspace}{\HTMLunicode{202f}}% HTML thin non-breakable space
\LWR@formatted{thinspace}
+%
\newrobustcmd*{\LWR@HTML@negthinspace}{\HTMLunicode{202f}} % HTML thin non-breakable space
\LWR@formatted{negthinspace}
-\renewrobustcmd*{~}{\HTMLentity{nbsp}}% cannot use \LWR@formatted
+% \end{macrocode}
+%
+% Cannot use \cs{LWR@formatted} for |~| or \cs{nobreakspace}.
+% \begin{macrocode}
+\renewrobustcmd*{~}{%
+ \ifbool{LWR@HTMLsanitize@nobreakspace}%
+ {\leavevmode\nobreak\HTMLentity{nbsp}}%
+ {\LWR@orignobreakspace}%
+}
+
+\LetLtxMacro\nobreakspace~
+% \end{macrocode}
+%
+% \cs{?-\string\nobreakspace} seems to be necessary for packages such as \pkg{ctexbook},
+% where this is used at the end of the document.
+% \begin{macrocode}
+\expandafter\LetLtxMacro\csname ?-\string\nobreakspace\endcsname~
+% \end{macrocode}
+%
+% \begin{macrocode}
\newrobustcmd*{\LWR@HTML@textellipsis}{\HTMLunicode{2026}}
\LWR@formatted{textellipsis}
+%
\newrobustcmd*{\LWR@HTML@vdots}{\HTMLunicode{22EE}}
\LWR@formatted{vdots}
-}
+%
+}% AtBeginDocument
% \end{macrocode}
%
% Direct-formatting font sizes are remembered for future use:
@@ -45787,7 +46173,7 @@ color:\LWR@origpound\LWR@tempcolor%
{
\LWR@endhideamsmath
\boolfalse{LWR@amsmultline}
- \LWR@addmathjax{#2}{\the\@envbody}
+ \LWR@addmathjax{#2}{\the\@envbody}%
}
{\LWR@amsmathenv@@after}
% \end{macrocode}
@@ -46384,6 +46770,42 @@ color:\LWR@origpound\LWR@tempcolor%
%
%
%
+% \iffalse
+%<*apxproof>
+% \fi
+%
+% \part{lwarp-apxproof.sty}
+%
+% \section{apxproof}
+%
+% \credits{Pierre Senellart}
+%
+% \DescribePackage{apxproof}
+% \pkg{apxproof} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.913}{2024/01/02}{\pkg{apxproof}: Added for \pkg{fancyvrb} changes.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{apxproof}[2022/10/14]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\xpatchcmd{\FVB@axp@VerbatimOut}
+ {\FV@Scan}
+ {\boolfalse{LWR@HTMLsanitize@tmpb@enable}\FV@Scan}
+ {}
+ {\LWR@patcherror{apxproof}{FVB@axp@VerbatimOut}}
+% \end{macrocode}
+%
+% \iffalse
+%</apxproof>
+% \fi
+%
+%
+%
+%
%
% \iffalse
%<*ar>
@@ -46917,7 +47339,7 @@ color:\LWR@origpound\LWR@tempcolor%
% A file annotation becomes a reference:
% \begin{macrocode}
\DeclareRobustCommand{\atfi@insert@file@annot}[1]{%
- \LWR@href{#1}{\LWR@attachfile@appearance}%
+ \LWR@href@partsanitized{#1}{\LWR@attachfile@appearance}%
}
% \end{macrocode}
@@ -47015,7 +47437,7 @@ color:\LWR@origpound\LWR@tempcolor%
% A file annotation becomes a reference:
% \begin{macrocode}
\DeclareRobustCommand{\atfi@insert@file@annot}[1]{%
- \LWR@href{#1}{\LWR@attachfile@appearance}%
+ \LWR@href@partsanitized{#1}{\LWR@attachfile@appearance}%
}
% \end{macrocode}
%
@@ -49082,7 +49504,12 @@ color:\LWR@origpound\LWR@tempcolor%
\NewDocumentCommand{\LWR@burlaltb}{O{} +m m}{%
\LWR@ensuredoingapar%
\LWR@subhyperref{#2}%
- \LWR@subhyperreftext{#3}%
+% \end{macrocode}
+% If use \cs{LWR@subhyperreftext@sanitized} here,
+% some forms of text may not expand correctly, and thus break.
+% ^^A \LWR@subhyperreftext@sanitized% takes the following text as an argument
+% \begin{macrocode}
+ \LWR@subhyperreftext@unsanitized{#3}%
\endgroup% restore catcodes
}
@@ -49268,7 +49695,10 @@ color:\LWR@origpound\LWR@tempcolor%
\CustomizeMathJax{\require{bussproofs}}
\NewEnviron{LWR@HTML@prooftree}%
- {\LWR@doequation{\BODY}{prooftree}}%
+ {%
+ \boolfalse{LWR@HTMLsanitize@tmpb@removebackslash}%
+ \LWR@doequation{\BODY}{prooftree}%
+ }%
[\LWR@doendequation{prooftree}]
\LWR@formattedenv{prooftree}
}{% SVG HTML
@@ -49478,6 +49908,7 @@ s%
% \changes{v0.84}{2020/04/20}{\pkg{caption}: Non-width \cs{parbox}es.}
% \changes{v0.89}{2020/08/25}{\pkg{caption}: Adapt to v3.5.}
% \changes{v0.893}{2020/11/26}{\pkg{caption}: Updated date to v3.5g.}
+% \changes{v0.913}{2023/11/24}{\pkg{caption}: Updated to v3.6o.}
%
% \codehtml
%
@@ -49490,7 +49921,7 @@ s%
\typeout{instead of: \protect\usepackage[options]\protect{caption\protect}.}
\typeout{---}
-\LWR@ProvidesPackagePass{caption}[2020/10/26]
+\LWR@ProvidesPackagePass{caption}[2023/08/05]
% \end{macrocode}
%
% ^^A This could be given a permanent standardized name, then redefined by lwarp.
@@ -49500,7 +49931,7 @@ s%
\caption@iiibox{#1}{#2}{#3}%
% [\wd\@tempboxa]%
[]% lwarp
- [\captionbox@hj@default]%
+ [\captionbox@innerpos@default]%
% {\unhbox\@tempboxa}%
{{#4}}% lwarp
}
@@ -49524,7 +49955,7 @@ s%
% #2%
{\caption#4{#5}}%
% \captionbox@hrule
-% \csname caption@hj@#7\endcsname
+% \csname caption@justification@#7\endcsname
#8%
}%
}{%
@@ -49539,7 +49970,7 @@ s%
\parbox[b]{\linewidth}{% lwarp
#1\relax
\caption@setposition b%
-% \csname caption@hj@#7\endcsname
+% \csname caption@justification@#7\endcsname
#8%
% \captionbox@hrule
% #3
@@ -49633,11 +50064,12 @@ s%
%
% \changes{v0.89}{2020/08/25}{\pkg{caption3}: Split from \pkg{lwarp-caption}.}
% \changes{v0.893}{2020/11/26}{\pkg{caption3}: Updated date to v2.2e.}
+% \changes{v0.913}{2023/11/24}{\pkg{caption3}: Updated to v2.4d.}
%
% \codehtml
%
% \begin{macrocode}
-\LWR@ProvidesPackagePass{caption3}[2020/10/21]
+\LWR@ProvidesPackagePass{caption3}[2023/07/31]
% \end{macrocode}
%
%
@@ -49659,10 +50091,25 @@ s%
% ^^A This could be factored out into a macro with a standard name
% ^^A which lwarp could nullify:
% \begin{macrocode}
-% \sbox\@tempboxa{#1}%
-% \ifdim\wd\@tempboxa=\z@
-% \caption@set{labelseparator}{none}%
-% \fi
+% \ifx\caption@fmt\@undefined\caption@format\fi
+% \let\caption@lfmt\caption@labelformat
+% \global\def\caption@tempa{gobbletwo}%
+% \global\def\caption@tempb{}%
+% \sbox\@tempboxa{%
+% \let\caption@ignorespaces\ignorespaces
+% \def\ignorespaces{%
+% \global\def\caption@tempb{two}% "gobble" -> "gobbletwo"
+% % if \ignorespaces is used addtionally
+% \caption@ignorespaces}%
+% #1%
+% {\global\let\caption@tempa\@undefined\aftergroup\@gobble}%
+% {\global\def\caption@tempa{gobble\caption@tempb}}}%
+% \ifdim\wd\@tempboxa=\z@
+% \gdef\caption@tempa{none}%
+% \fi
+% \ifx\caption@tempa\@undefined \else
+% \@expandtwoargs\caption@set{labelseparator}{\caption@tempa}%
+% \fi
\caption@ifempty{#2}{%
\caption@set{labelseparator}{none}%
\caption@set{textformat}{simple}%
@@ -53286,6 +53733,89 @@ name = \chemmacros_translate:n {scheme-name}
% \end{macrocode}
% \end{noindmacro}
+
+
+% \begin{noindmacro}{\rowc@l@rs} \oarg{cmds} \marg{startrow} \marg{odd color} \marg{even color}
+% \changes{v0.913}{2024/01/03}{\pkg{colortbl}: Moved row colors code from \pkg{xcolor}.}
+% \begin{macrocode}
+\newcommand*{\LWR@xcolortempcolor}{}
+
+\def\rowc@l@rs[#1]#2#3#4%
+{%
+ \rownum=1%
+ \@rowcolorstrue%
+ \@ifxempty{#3}%
+ {\def\@oddrowcolor{\@norowcolor}}%
+ {%
+ \convertcolorspec{named}{#3}{HTML}\LWR@xcolortempcolor%
+ \edef\@oddrowcolor{%
+ \csdef{LWR@xcolorrowHTMLcolor}{\LWR@xcolortempcolor}%
+ }%
+ }%
+ \@ifxempty{#4}%
+ {\def\@evenrowcolor{\@norowcolor}}%
+ {%
+ \convertcolorspec{named}{#4}{HTML}\LWR@xcolortempcolor%
+ \edef\@evenrowcolor{%
+ \csdef{LWR@xcolorrowHTMLcolor}{\LWR@xcolortempcolor}%
+ }%
+ }%
+ \if@rowcmd
+ \def\@rowcolors
+ {%
+% #1%
+ \if@rowcolors
+% \noalign{%
+ \relax\ifnum\rownum<#2\@norowcolor\else
+ \ifodd\rownum\@oddrowcolor\else\@evenrowcolor\fi\fi%
+% }%
+ \fi%
+ }%
+ \else
+ \def\@rowcolors
+ {%
+ \if@rowcolors
+ \ifnum\rownum<#2%
+% \noalign{%
+ \@norowcolor
+% }
+ \else
+% #1%
+% \noalign{%
+ \ifodd\rownum\@oddrowcolor\else\@evenrowcolor\fi%
+% }%
+ \fi
+ \fi%
+ }%
+ \fi
+ \ignorespaces%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\@norowcolor} Turns off color for this row.
+% \begin{macrocode}
+\def\@norowcolor{%
+ \renewcommand{\LWR@xcolorrowHTMLcolor}{}%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
+
+% \begin{noindmacro}{\@rowc@lors} Executed at the end of each row.
+% \changes{v0.79}{2020/01/18}{\pkg{xcolor}: Fix: Nested \env{tabular}s.}
+% \begin{macrocode}
+\def\@rowc@lors{%
+% \noalign{%
+ \advance\rownum\@ne%
+% }%
+ \@rowcolors%
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+
% For \MathJax, use the \MathJax\ package.
% The unused macro options are ignored.
% \changes{v0.894}{2020/12/22}{\pkg{colortbl}: Added \MathJax\ emulation.}
@@ -54082,6 +54612,62 @@ name = \chemmacros_translate:n {scheme-name}
%
%
%
+%
+% \iffalse
+%<*doipubmed>
+% \fi
+%
+% \part{lwarp-doipubmed.sty}
+%
+% \section{doipubmed}
+%
+% \credits{Nicola Talbot}
+%
+% \DescribePackage{doipubmed}
+% \pkg{doipubmed} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.913}{2023/11/23}{\pkg{doipubmed}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{doipubmed}[2007/08/20]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand*{\doi}[1]{%
+\def\@doi@code{}%
+\@doi@linksubs#1\#\@@\@doi@code
+\@onelevel@sanitize{\@doi@code}%
+\def\@doi@text{}%
+\@doi@textsubs#1\@nil\@@\@doi@text
+\xpretocmd{\@doi@code}{http://dx.doi.org/}%
+\href\expandafter{\@doi@code}{\doitext{\@doi@text}}}
+% \end{macrocode}
+%
+% Must not modify catcodes before using \cs{url}:
+% \begin{macrocode}
+\DeclareDocumentCommand{\LWR@citeurlb}{m}{%
+ \LWR@ensuredoingapar%
+ \textless%
+ \LWR@href@sanitized{#1}{#1}%
+ \textgreater%
+ \endgroup%
+}
+
+\renewrobustcmd*{\citeurl}{%
+ \begingroup%
+ \LWR@linkcatcodes%
+ \LWR@citeurlb%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</doipubmed>
+% \fi
+%
+%
+%
% \iffalse
%<*DotArrow>
% \fi
@@ -56525,7 +57111,7 @@ name = \chemmacros_translate:n {scheme-name}
% \changes{v0.902}{2021/09/29}{\pkg{fancybox}: Improved footnote par tags.}
% \begin{macrocode}
\def\V@@@footnotetext{%
- \LWR@origtilde\LWR@orignewline%
+ \LWR@orignobreakspace\LWR@orignewline%
\LWR@htmltagc{/\LWR@tagregularparagraph}\LWR@orignewline%
\strut\egroup%
}
@@ -56598,7 +57184,7 @@ name = \chemmacros_translate:n {scheme-name}
% This is a tabular, and does not use \cs{item}.
%
% \begin{noindmacro}{Btrivlist} \marg{l/c/r} \oarg{t/c/b}
-% \changes{v0.73}{2019/06/24}{\pkg{fancyvrb}: \env{Btrivlist}: Fixed paragraph tags.}
+% \changes{v0.73}{2019/06/24}{\pkg{fancybox}: \env{Btrivlist}: Fixed paragraph tags.}
% \begin{macrocode}
\RenewDocumentEnvironment{Btrivlist}{m o}
{%
@@ -56716,7 +57302,44 @@ name = \chemmacros_translate:n {scheme-name}
%
% Low-level patches for \env{UseVerbatim} and friends:
%
-% \begin{macrocode}
+% \changes{v0.903}{2024/01/03}{\pkg{fancybox}: Sanitize verbatim.}
+% \begin{macrocode}
+\def\Verbatim@List#1{%
+ \if@minipage\else\vskip\parskip\fi
+ \leftskip\@totalleftmargin
+ \@rightskip\@flushglue \rightskip\@rightskip
+ \parindent\z@
+ \parskip\z@
+ \parfillskip\@flushglue
+ \hfuzz\VerbatimFuzz\relax
+ \@@par
+ \global\@inlabelfalse %Prevents vspace from being inserted when
+ \Verbatim@Prep %first line exceeds \hsize.
+% #1%
+ \expandafter\def\expandafter\tmpb\expandafter{#1}% lwarp
+ \LWR@HTMLsanitize@tmpb% lwarp
+ \tmpb% lwarp
+ \Verbatim@Par}%
+
+\def\Verbatim@@Input{%
+ \let\protect\noexpand
+ \LetLtxMacro\tmpb\The@Verbatim% lwarp
+ \LWR@HTMLsanitize@tmpb% lwarp
+ \edef\The@Verbatim{%
+ \noexpand\Every@VerbatimLine
+% \The@Verbatim
+ \tmpb% lwarp
+ \ifeof\Verbatim@Infile\else\noexpand\Verbatim@Par\fi}%
+ \let\protect\relax
+ \The@Verbatim
+ \ifeof\Verbatim@Infile\else
+ \let\The@Verbatim\The@GVerbatim
+ \def\The@GVerbatim{}\Verbatim@NextLine
+ \expandafter\Verbatim@@Input
+ \fi}%
+
+
+
\let\LWRFB@UseVerbatim\UseVerbatim
\renewcommand*{\UseVerbatim}[1]{%
\LWR@atbeginverbatim{Verbatim}%
@@ -57020,17 +57643,21 @@ name = \chemmacros_translate:n {scheme-name}
% The label is placed inside a \element{div} of class \attribute{fancyvrblabel}.
% The verbatim text itself is placed inside a \element{div} of class \attribute{verbatim}.
%
+% For an inline \cs{Verb}, the verbatim is placee inside a \element{span}
+% of class \attribute{fancyvrb}.
+%
% \limitsverbatimfootnotes
%
% \changes{v0.34}{2017/07/27}{\pkg{fancyvrb}: Added, no longer required.}
% \changes{v0.45}{2018/01/07}{\pkg{fancyvrb}: Improvements.}
% \changes{v0.52}{2018/03/29}{\pkg{fancyvrb}: Initial support for \cs{VerbatimFootnotes}.}
+% \changes{v0.913}{2023/12/04}{\pkg{fancyvrb}: Updated to v4.5b.}
%
%
% \begin{macrocode}
\AtBeginDocument{\RequirePackage{xcolor}}% for \convertcolorspec
-\LWR@ProvidesPackagePass{fancyvrb}[2008/02/07]
+\LWR@ProvidesPackagePass{fancyvrb}[2023/11/06]
% \end{macrocode}
%
% Initial default patch for fancyvrb:
@@ -57038,13 +57665,303 @@ name = \chemmacros_translate:n {scheme-name}
\fvset{frame=none}%
% \end{macrocode}
%
-% After the preamble is loaded, after any patches to \env{Verbatim}:
+
+% Gobble does not work with \HTML\ sanitization,
+% so if gobbling is non-zero then turn off \HTML\ sanitization.
% \begin{macrocode}
-\AfterEndPreamble{
-\LWR@traceinfo{Patching fancyvrb.}
+\define@key{FV}{gobble}{%
+ \@tempcnta=#1\relax
+ \ifnum\@tempcnta<\@ne
+ \let\FV@Gobble\relax
+ \else
+ \ifnum\@tempcnta>9
+ \FV@Error{gobble parameter must be less than 10}\FV@eha
+ \else
+ \renewcommand{\FV@@@@Gobble}[\@tempcnta]{}%
+ \let\FV@Gobble\FV@@Gobble%
+ \boolfalse{LWR@HTMLsanitize@tmpb@enable}% lwarp
+ \fi
+ \fi}
+% \end{macrocode}
+
+
+
+% \begin{noindmacro}{\FancyVerbSpace}
+% Force the use of a vibible space instead of an empty box.
+% \changes{v0.913}{2023/12/04}{\pkg{fancyvrb}: Fixed visible space from kernel change.}
+% \begin{macrocode}
+\ifxetexorluatex
+\def\LWR@HTML@FancyVerbSpace{\textvisiblespace}
+\else
+\@ifundefined{verbvisiblespace}%
+ {%
+ \@ifundefined{textvisiblespace}%
+ {\begingroup\catcode`\ =12 \gdef\LWR@HTML@FancyVerbSpace{\tt }\endgroup}
+ {\def\LWR@HTML@FancyVerbSpace{\textvisiblespace}}
+ }%
+ {\def\LWR@HTML@FancyVerbSpace{\verbvisiblespace}}
+\fi
+\LWR@formatted{FancyVerbSpace}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\FancyVerbTab}
+% Set the visible tab.
+% Unicode |240B| (SYMBOL FOR HORIZONTAL TABULATION)
+% and |21E5| (RIGHTWARDS ARROW TO BAR)
+% both gave unindended new lines at each tab,
+% so a simple pipe character is used instead.
+%
+% For the print mode, the \pkg{fancyvrb} definition does not copy,
+% so a simplified version is used.
+% \changes{v0.913}{2023/12/04}{\pkg{fancyvrb}: Set visible tab character.}
+% \begin{macrocode}
+\def\LWR@print@FancyVerbTab{|}
+\def\LWR@HTML@FancyVerbTab{|}%
+\LWR@formatted{FancyVerbTab}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{macrocode}
+\fvset{tabsize=8,showtabs=false}
+% \end{macrocode}
+
+
+%
+% \begin{noindmacro}{\FV@CatCodes}
+% \begin{macrocode}
+\def\FV@CatCodes{%
+ \let\do\@makeother\dospecials % The usual stuff.
+ \FV@ActiveWhiteSpace % See below.
+ \FV@FontScanPrep % See below.
+ \FV@CatCodesHook % A style hook.
+ \FancyVerbCodes % A user-defined hook.
+ \catcode`\>=12% % lwarp
+ \catcode`\<=12% % lwarp
+}
% \end{macrocode}
+% \end{noindmacro}
+%
%
+% \begin{noindmacro}{\FV@GetLine}
+% Added the catcode changes for |<| and|>| to avoid
+% the effect of \cs{@noligs} for these characters.
+% They were being made active and thus would not be sensed by the
+% search/replace to sanitize.
%
+% This code is sensitive to the use of |%|, and for some reason does not work
+% \watchout
+% if \cs{expandafter} immediately follows the |<| catcode change.
+% \changes{v0.913}{2023/10/04}{\pkg{fancyvrb}: Sanitize \HTML.}
+% \begin{macrocode}
+\def\FV@GetLine{%
+ \@noligs%
+ \catcode`\>=12% lwarp, and the next line as well
+% for some reason, there must not be a % after the following 12:
+ \catcode`\<=12
+%
+ \expandafter\FV@CheckScan\FancyVerbGetLine%
+}
+% \end{macrocode}
+
+% Modified to sanitize \HTML.
+% \cs{LWR@HTMLsanitize@tmpb} is included in \cs{FV@Line},
+% so it will adjust if used inside an \env{lateximage}.
+% \changes{v0.913}{2023/10/11}{\pkg{fancyvrb}: Sanitize \HTML.}
+% \begin{macrocode}
+\begingroup
+\catcode`\^^M=\active%
+\gdef\FancyVerbGetLine#1^^M{%
+ \@nil%
+ \FV@CheckEnd{#1}%
+ \ifx\@tempa\FV@EnvironName% % True if end is found
+ \ifx\@tempb\FV@@@CheckEnd\else\FV@BadEndError\fi%
+ \let\next\FV@EndScanning%
+ \else%
+ \ifbool{LWR@HTMLsanitize@tmpb@enable}% lwarp
+ {\def\FV@Line{\LWR@HTMLsanitize@use@tmpb{#1}}}% lwarp
+ {\def\FV@Line{#1}}% lwarp
+ \def\next{\FV@PreProcessLine\FV@GetLine}%
+ \fi%
+ \next}%
+\endgroup
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+%
+% \begin{noindmacro}{\FV@List} \marg{R/L margin 0/1}
+%
+% Modified to always allow line wrapping because added \HTML\ tags may
+% make run off the end of the line in the \PDF\ output file before conversion to \HTML.
+% \begin{macrocode}
+\def\FV@List#1{%
+ \begingroup
+ \FV@UseKeyValues
+ \FV@LeaveVMode
+ \if@inlabel\else\setbox\@labels=\box\voidb@x\fi
+ \FV@ListNesting{#1}%
+ \FV@ListParameterHook
+ \FV@ListVSpace
+ \FV@SetLineWidth
+ \FV@InterLinePenalty
+% \let\FV@ProcessLine\FV@ListProcessLine@i
+ \let\FV@ProcessLine\FV@ListProcessLine% lwarp
+ \FV@CatCodes
+ \FV@FormattingPrep
+ \FV@ObeyTabsInit
+ \FV@BeginListFrame}
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\FV@ListProcessLine} \marg{text}
+%
+% Processes each line, adding optional line numbers.
+% Modified to always allow line wrapping because added \HTML\ tags may
+% make run off the end of the line in the \PDF\ output file before conversion to \HTML.
+% \begin{macrocode}
+\def\FV@ListProcessLine#1{%
+ \hbox to \hsize{%
+% \kern\leftmargin
+ \hbox to \VerbatimHTMLWidth {%
+ \ifcsvoid{FV@LeftListNumber}{}{\kern 2.5em}%
+ \FV@LeftListNumber%
+% \FV@LeftListFrame
+ \FancyVerbFormatLine{#1}%
+ \hss%
+% \FV@RightListFrame
+ \FV@RightListNumber%
+ }%
+ \hss% required to avoid underfull hboxes
+}
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\FVC@SaveVerb} \marg{name} \marg{character}
+%
+% Modified to sanitize \HTML\ when stored.
+% Sanitizing on use would be too late to adjust catcodes.
+% \cs{LWR@HTMLsanitize@tmpb} is included in the saved macro, so
+% if inside a \env{lateximage}, \cs{LWR@HTMLsanitize@tmp} does nothing.
+% \changes{v0.913}{2023/10/11}{\pkg{fancyvrb}: Sanitize \HTML.}
+% \begin{macrocode}
+\begingroup
+\catcode`\^^M=\active%
+\gdef\FVC@SaveVerb#1#2{%
+ \@namedef{FV@SV@#1}{}%
+ \begingroup%
+ \FV@UseKeyValues%
+ \FV@CatCodes%
+ \outer\def^^M{\FV@EOL}%
+ \global\let\@tempg\FancyVerbAfterSave%
+ \catcode`#2=12%
+ \def\@tempa{\def\FancyVerbGetVerb####1####2}%
+% \expandafter\@tempa\string#2{\endgroup\@namedef{FV@SV@#1}{##2}\@tempg}%
+ \expandafter\@tempa\string#2{%
+ \endgroup%
+ \@namedef{FV@SV@#1}{%
+% ##2%
+ \LWR@HTMLsanitize@use@tmpb{##2}% lwarp
+ }\@tempg%
+ }%
+ \FancyVerbGetVerb\FV@EOL}%
+\endgroup
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\FV@UseVerb} \marg{macro}
+%
+% Adds a \element{span}.
+% \begin{macrocode}
+\def\FV@UseVerb#1{%
+ \ifbool{LWR@verbtags}% lwarp
+ {\LWR@htmltag{span class=\textquotedbl{}fancyvrb\textquotedbl}}% lwarp
+ {}% lwarp
+ \mbox{\FV@UseKeyValues\FV@FormattingPrep#1}%
+ \ifbool{LWR@verbtags}% lwarp
+ {\LWR@htmltag{/span}}% lwarp
+ {}% lwarp
+}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+
+%
+%
+% \begin{noindmacro}{\FVC@Verb} \marg{character}
+%
+% Modified to sanitize \HTML.
+% \changes{v0.913}{2023/10/04}{\pkg{fancyvrb}: Sanitize \HTML.}
+% \begin{macrocode}
+\begingroup
+\catcode`\^^M=\active%
+\gdef\FVC@Verb#1{%
+ \begingroup%
+ \FV@UseKeyValues%
+ \FV@FormattingPrep%
+ \FV@CatCodes%
+ \outer\def^^M{}%
+ \catcode`#1=12%
+ \def\@tempa{\def\FancyVerbGetVerb####1####2}%
+ \expandafter\@tempa\string#1{%
+ \ifbool{LWR@verbtags}% lwarp
+ {% lwarp
+ \LWR@htmltag{span class=\textquotedbl{}fancyvrb\textquotedbl}% lwarp
+ \def\tmpb{##2}% lwarp
+ \LWR@HTMLsanitize@tmpb% lwarp
+ \mbox{\tmpb}% lwarp
+ \LWR@htmltag{/span}% lwarp
+ }% lwarp
+ {\mbox{##2}}%
+ \endgroup%
+ }%
+ \FancyVerbGetVerb\FV@EOL%
+}%
+\endgroup
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+%
+% \begin{noindmacro}{\FV@ReadLine}
+% Modified to sanitize \HTML.
+% \changes{v0.913}{2023/10/08}{\pkg{fancyvrb}: Sanitize \HTML.}
+% \begin{macrocode}
+\begingroup
+\catcode`\^^M=\active
+\gdef\FV@ReadLine{%
+ \ifeof\FV@InFile\else
+% \immediate\read\FV@InFile to\@tempa%
+% \expandafter\FV@@ReadLine\@tempa^^M\relax^^M\@nil%
+ \immediate\read\FV@InFile to\tmpb%
+ \LWR@HTMLsanitize@tmpb%
+ \expandafter\FV@@ReadLine\tmpb^^M\relax^^M\@nil%
+ \fi}
+\endgroup
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\LWR@FVstyle} Holds the style of the verbatim.
+% \begin{macrocode}
+\newcommand*{\LWR@FVstyle}{}
+% \end{macrocode}
+% \end{noindmacro}
+%
+%
+% After the preamble is loaded, after any patches to \env{Verbatim},
+% such as by \pkg{fvextra}:
+% \begin{macrocode}
+\AfterEndPreamble{
+
+\LWR@traceinfo{Patching fancyvrb.}
+% \end{macrocode}
+
% \begin{noindmacro}{\VerbatimFootnotes}
% Patched to use the new version.
% \begin{macrocode}
@@ -57090,8 +58007,19 @@ name = \chemmacros_translate:n {scheme-name}
% \begin{macrocode}
\renewrobustcmd{\textsuperscript}[1]{\LWR@htmlspan{sup}{##1}}%
% \end{macrocode}
+%
+% Verbatim tags and \HTML\ sanitization will have been turned off
+% inside a \env{lateximage}, such as in \SVG\ math,
+% so turn them on here so they will be active in the \HTML\ footnotes.
+% \changes{v0.913}{2023/12/09}{\pkg{fancyvrb}: Improved \HTML\ sanitization.}
+% \begin{macrocode}
+ \booltrue{LWR@verbtags}%
+ \booltrue{LWR@HTMLsanitize@tmpb@enable}%
+% \end{macrocode}
+
+
% Use paragraph tags if in a tabular data cell or a \env{lateximage}:
-% \changes{v0.66}{2019/02/02}{Improved \HTML\ formatting.}
+% \changes{v0.66}{2019/02/02}{\pkg{fancyvrb}: Improved \HTML\ formatting.}
% \changes{v0.902}{2021/09/29}{\pkg{fancyvrb}: Improved footnote par tags.}
% \begin{macrocode}
\LWR@htmltagc{\LWR@tagregularparagraph}\LWR@orignewline%
@@ -57118,10 +58046,11 @@ name = \chemmacros_translate:n {scheme-name}
% \end{noindmacro}
%
% \begin{noindmacro}{\V@@@footnotetext}
+% Improves \element{par}.
% \changes{v0.902}{2021/09/29}{\pkg{fancyvrb}: Improved footnote par tags.}
% \begin{macrocode}
\def\V@@@footnotetext{%
- \LWR@origtilde\LWR@orignewline%
+ \LWR@orignobreakspace\LWR@orignewline%
\LWR@htmltagc{/\LWR@tagregularparagraph}\LWR@orignewline%
\strut\egroup%
}
@@ -57129,76 +58058,116 @@ name = \chemmacros_translate:n {scheme-name}
% \end{noindmacro}
%
%
+% \begin{noindmacro}{\FVB@Verbatim}
+% \begin{noindmacro}{\FVB@LVerbatim}
+% Prevents unexpected page break in the \PDF\ output before \HTML\ conversion.
% \changes{v0.45}{2018/01/07}{\pkg{fancyvrb}: Improvements.}
% \begin{macrocode}
\preto\FVB@Verbatim{\LWR@forcenewpage}
\preto\FVB@LVerbatim{\LWR@forcenewpage}
% \preto\FVB@BVerbatim{\LWR@forcenewpage}% Fails, so done below.
% \end{macrocode}
+% \end{noindmacro}
+% \end{noindmacro}
+%
%
% Simplified to remove \PDF\ formatting:
% \changes{v0.45}{2018/01/07}{\pkg{fancyvrb}: Improvements.}
% \begin{macrocode}
-\def\FV@BeginListFrame@Single{%
+\def\LWR@HTML@FV@BeginListFrame@Single{%
\FV@SingleFrameLine{\z@}%
}
+\LWR@formatted{FV@BeginListFrame@Single}
-\def\FV@EndListFrame@Single{%
+\def\LWR@HTML@FV@EndListFrame@Single{%
\FV@SingleFrameLine{\@ne}%
}
+\LWR@formatted{FV@EndListFrame@Single}
-\def\FV@BeginListFrame@Lines{%
+\def\LWR@HTML@FV@BeginListFrame@Lines{%
\FV@SingleFrameLine{\z@}%
}
+\LWR@formatted{FV@BeginListFrame@Lines}
-\def\FV@EndListFrame@Lines{%
+\def\LWR@HTML@FV@EndListFrame@Lines{%
\FV@SingleFrameLine{\@ne}%
}
+\LWR@formatted{FV@EndListFrame@Lines}
-\renewcommand*{\FV@SingleFrameSep}{}
+\newcommand*{\LWR@HTML@FV@SingleFrameSep}{}%
+\LWR@formatted{FV@SingleFrameSep}
% \end{macrocode}
%
-% Adds \HTML\ formatting:
-% \changes{v0.891}{2020/09/12}{\pkg{fancyvrb}: Fix: \env{BVerbatim} with labels.}
-% \begin{macrocode}
-\def\FV@BUseVerbatim#1{%
- \FV@BVerbatimBegin#1\FV@BVerbatimEnd%
-}
-% \end{macrocode}
-% \begin{macro}{\LWR@FVstyle} Holds the style of the verbatim.
-% \begin{macrocode}
-\newcommand*{\LWR@FVstyle}{}
-% \end{macrocode}
-% \end{macro}
%
% The following patches to \env{Verbatim} are executed at the
% start and end of the environment, depending on the choice of |frame|.
-% Original code is from the \pkg{fancyvrb} package.
+%
+% \begin{noindmacro}{\LWR@fvstartnone}
+% Wraps label in a \element{div} of class \attribute{fancyvrblabel}.
% \changes{v0.73}{2019/06/26}{\pkg{fancyvrb}: Fix: Nested \element{div}/\element{pre}.}
-% \changes{v0.895}{2021/01/14}{Improved \HTML\ quotes.}
+% \changes{v0.895}{2021/01/14}{\pkg{fancyvrb}: Improved \HTML\ quotes.}
% \begin{macrocode}
\newcommand*{\LWR@fvstartnone}{%
\LWR@traceinfo{fvstartnone}%
% \hbox to\z@{
-\BlockClass[\LWR@FVstyle]{fancyvrb}
+% \end{macrocode}
+%
+% If the current text sytle is empty, do not print an \HTML\ style.
+% \changes{v0.913}{2023/12/04}{\pkg{fancyvrb}: No style if empty.}
+% \begin{macrocode}
+ \ifdefstring{\LWR@FVstyle}{\LWR@currenttextcolorstyle}%
+ {%
+ \LWR@findcurrenttextcolor%
+ \ifdefstring{\LWR@tempcolor}{000000}%
+ {\BlockClass{fancyvrb}}%
+ {\BlockClass[\LWR@FVstyle]{fancyvrb}}%
+ }%
+ {%
+ \BlockClass[\LWR@FVstyle]{fancyvrb}%
+ }%
+% \BlockClass[\LWR@FVstyle]{fancyvrb}%
+% \end{macrocode}
+%
+% \changes{v0.913}{2023/12/04}{\pkg{fancyvrb}: Color style.}
+% \begin{macrocode}
\LWR@stoppars
\ifx\FV@LabelPositionTopLine\relax\else
\ifx\FV@LabelBegin\relax\else
\FancyVerbRuleColor{\LWR@FVfindbordercolor}
- \LWR@htmltagc{%
- div class=\textquotedbl{}fancyvrblabel\textquotedbl\ % space
- style=\textquotedbl{}color: \LWR@origpound\LWR@tempcolor\textquotedbl%
- }
+ \ifbool{LWR@verbtags}% lwarp
+ {% lwarp
+ \LWR@findcurrenttextcolor%
+ \LWR@htmltagc{% lwarp
+ div class=\textquotedbl{}fancyvrblabel\textquotedbl\ % space
+ style=\textquotedbl{}%
+ color: \LWR@origpound\LWR@tempcolor%
+ \textquotedbl%
+ }%
+ \LWR@orignewline% lwarp
+ }% lwarp
+ {}% lwarp
\LWR@print@textrm{\FV@LabelBegin}% \textrm preserves emdash
- \LWR@htmltagc{/div}\LWR@orignewline%
+ \LWR@orignewline% lwarp
+ \ifbool{LWR@verbtags}% lwarp
+ {% lwarp
+ \LWR@htmltagc{/div}% lwarp
+ \LWR@orignewline% lwarp
+ }% lwarp
+ {}% lwarp
\fi
\fi
\LWR@atbeginverbatim{verbatim}%
-% }%
+% }% hbox
}
+% \end{macrocode}
+% \end{noindmacro}
+% \begin{noindmacro}{\LWR@fvendnone}
+% Wraps label in a \element{div} of class \attribute{fancyvrblabel}.
+% \changes{v0.913}{2023/12/04}{\pkg{fancyvrb}: Color style.}
+% \begin{macrocode}
\newcommand*{\LWR@fvendnone}{%
\LWR@traceinfo{fvendnone}%
% \hbox to\z@{
@@ -57206,18 +58175,36 @@ name = \chemmacros_translate:n {scheme-name}
\LWR@stoppars%
\ifx\FV@LabelPositionBottomLine\relax\else
\ifx\FV@LabelEnd\relax\else
- \FancyVerbRuleColor{\LWR@FVfindbordercolor}
- \LWR@htmltagc{%
- div class=\textquotedbl{}fancyvrblabel\textquotedbl\ % space
- style=\textquotedbl{}color: \LWR@origpound\LWR@tempcolor\textquotedbl%
- }
- \LWR@print@textrm{\FV@LabelEnd}
- \LWR@htmltagc{/div}\LWR@orignewline%
+ \FancyVerbRuleColor{\LWR@FVfindbordercolor}% lwarp
+ \ifbool{LWR@verbtags}% lwarp
+ {% lwarp
+ \LWR@findcurrenttextcolor%
+ \LWR@htmltagc{% lwarp
+ div class=\textquotedbl{}fancyvrblabel\textquotedbl\ % space
+ style=\textquotedbl{}%
+ color: \LWR@origpound\LWR@tempcolor%
+ \textquotedbl%
+ }%
+ \LWR@orignewline% lwarp
+ }% lwarp
+ {}% lwarp
+ \LWR@print@textrm{\FV@LabelEnd}% lwarp
+ \LWR@orignewline% lwarp
+ \ifbool{LWR@verbtags}% lwarp
+ {% lwarp
+ \LWR@htmltagc{/div}% lwarp
+ \LWR@orignewline% lwarp
+ }% lwarp
+ {}% lwarp
\fi
\fi
-\endBlockClass
+\endBlockClass% lwarp
+% }% hbox
}
+% \end{macrocode}
+% \end{noindmacro}
+% \begin{macrocode}
\newcommand*{\LWR@fvstartsingle}{%
\LWR@traceinfo{fvstartsingle}%
\LWR@fvstartnone%
@@ -57248,7 +58235,6 @@ name = \chemmacros_translate:n {scheme-name}
%
% The following patches select the start/left/right/end
% behaviors depending on |frame|.
-% Original code is from the \pkg{fancyvrb} package.
% \begin{macrocode}
\newcommand*{\LWR@FVfindbordercolor}{%
\FancyVerbRuleColor%
@@ -57264,16 +58250,17 @@ border#1: \strip@pt\dimexpr \FV@FrameRule\relax\relax pt % space
solid {\FancyVerbRuleColor{\LWR@origpound\LWR@tempcolor}} ; % space
}
-\def\FV@Frame@none{%
+\def\LWR@HTML@FV@Frame@none{%
\renewcommand*{\LWR@FVstyle}{\LWR@currenttextcolorstyle}%
\let\FV@BeginListFrame\LWR@fvstartnone%
\let\FV@LeftListFrame\relax%
\let\FV@RightListFrame\relax%
\let\FV@EndListFrame\LWR@fvendnone}
+\LWR@formatted{FV@Frame@none}
\FV@Frame@none% default values
-\def\FV@Frame@single{%
+\def\LWR@HTML@FV@Frame@single{%
\renewcommand*{\LWR@FVstyle}{%
\LWR@currenttextcolorstyle\LWR@indentHTMLtwo%
\LWR@FVborderstyle{}%
@@ -57282,8 +58269,9 @@ solid {\FancyVerbRuleColor{\LWR@origpound\LWR@tempcolor}} ; % space
\let\FV@LeftListFrame\FV@LeftListFrame@Single%
\let\FV@RightListFrame\FV@RightListFrame@Single%
\let\FV@EndListFrame\LWR@fvendsingle}
+\LWR@formatted{FV@Frame@single}
-\def\FV@Frame@lines{%
+\def\LWR@HTML@FV@Frame@lines{%
\renewcommand*{\LWR@FVstyle}{%
\LWR@currenttextcolorstyle\LWR@indentHTMLtwo%
\LWR@FVborderstyle{-top}%
@@ -57294,8 +58282,9 @@ solid {\FancyVerbRuleColor{\LWR@origpound\LWR@tempcolor}} ; % space
\let\FV@LeftListFrame\relax%
\let\FV@RightListFrame\relax%
\let\FV@EndListFrame\LWR@fvendline}
+\LWR@formatted{FV@Frame@lines}
-\def\FV@Frame@topline{%
+\def\LWR@HTML@FV@Frame@topline{%
\renewcommand*{\LWR@FVstyle}{%
\LWR@currenttextcolorstyle\LWR@indentHTMLtwo%
\LWR@FVborderstyle{-top}%
@@ -57304,8 +58293,9 @@ solid {\FancyVerbRuleColor{\LWR@origpound\LWR@tempcolor}} ; % space
\let\FV@LeftListFrame\relax%
\let\FV@RightListFrame\relax%
\let\FV@EndListFrame\LWR@fvendnone}
+\LWR@formatted{FV@Frame@topline}
-\def\FV@Frame@bottomline{%
+\def\LWR@HTML@FV@Frame@bottomline{%
\renewcommand*{\LWR@FVstyle}{%
\LWR@currenttextcolorstyle\LWR@indentHTMLtwo%
\LWR@FVborderstyle{-bottom}%
@@ -57314,20 +58304,26 @@ solid {\FancyVerbRuleColor{\LWR@origpound\LWR@tempcolor}} ; % space
\let\FV@LeftListFrame\relax%
\let\FV@RightListFrame\relax%
\let\FV@EndListFrame\LWR@fvendline}
+\LWR@formatted{FV@Frame@bottomline}
% \end{macrocode}
%
-% Seems to be required in some situations:
+% Seems to be required in some situations.
+% Is not \cs{LWR@formatted} because it is defined as needed.
% \changes{v0.892}{2020/10/06}{\pkg{fancyvrb}: Provided \cs{FV@FrameFillLine}.}
% \begin{macrocode}
-\def\FV@FrameFillLine{}%
+\def\FV@FrameFillLine{}
% \end{macrocode}
+%
% \begin{macrocode}
-\def\FV@Frame@leftline{%
+\def\LWR@HTML@FV@Frame@leftline{%
\renewcommand*{\LWR@FVstyle}{%
\LWR@currenttextcolorstyle\LWR@indentHTMLtwo%
\LWR@FVborderstyle{-left}%
}%
-% To define the \FV@FrameFillLine macro (from \FV@BeginListFrame)
+% \end{macrocode}
+%
+% To define the \cs{FV@FrameFillLine} macro (from \cs{FV@BeginListFrame})
+% \begin{macrocode}
\ifx\FancyVerbFillColor\relax%
\let\FV@FrameFillLine\relax%
\else%
@@ -57341,13 +58337,14 @@ solid {\FancyVerbRuleColor{\LWR@origpound\LWR@tempcolor}} ; % space
\let\FV@LeftListFrame\FV@LeftListFrame@Single%
\let\FV@RightListFrame\relax%
\let\FV@EndListFrame\LWR@fvendnone}
+\LWR@formatted{FV@Frame@leftline}
% \end{macrocode}
%
+% \begin{noindmacro}{\FV@SingleFrameLine}
% Adds the optional label to the top and bottom edges.
-% Original code is from the \pkg{fancyvrb} package.
% \changes{v0.73}{2019/06/26}{\pkg{fancyvrb}: Fix: Nested \element{div}/\element{pre}.}
% \begin{macrocode}
-\def\FV@SingleFrameLine#1{%
+\def\LWR@HTML@FV@SingleFrameLine#1{%
% \hbox to\z@{%
% \kern\leftmargin
\ifnum#1=\z@\relax
@@ -57373,54 +58370,19 @@ solid {\FancyVerbRuleColor{\LWR@origpound\LWR@tempcolor}} ; % space
% \hss
% }
}
+\LWR@formatted{FV@SingleFrameLine}
% \end{macrocode}
+% \end{noindmacro}
%
-% Processes each line, adding optional line numbers.
-% Original code is from the \pkg{fancyvrb} package.
-% \begin{macrocode}
-\def\FV@ListProcessLine#1{%
- \hbox to \hsize{%
-% \kern\leftmargin
- \hbox to \VerbatimHTMLWidth {%
- \ifcsvoid{FV@LeftListNumber}{}{\kern 2.5em}%
- \FV@LeftListNumber%
-% \FV@LeftListFrame
- \FancyVerbFormatLine{#1}%
- \hss%
-% \FV@RightListFrame
- \FV@RightListNumber%
- }%
- \hss% required to avoid underfull hboxes
-}
-}
-% \end{macrocode}
-% \changes{v0.892}{2020/10/05}{\pkg{fancyvrb}: Adapted to \pkg{fvextra}.}
-% \begin{macrocode}
-\def\FV@ListProcessLine@i#1{%
-% \hbox{%
- \ifvoid\@labels\else
- \hbox to \z@{\kern\@totalleftmargin\box\@labels\hss}%
- \fi
- \FV@ListProcessLine{#1}%
-% }%
-% \let\FV@ProcessLine\FV@ListProcessLine@ii%
-}
-% \end{macrocode}
-
-% \changes{v0.892}{2020/10/05}{\pkg{fancyvrb}: Adapted to \pkg{fvextra}.}
-% \begin{macrocode}
-\def\FV@ListProcessLastLine{}
-% \end{macrocode}
-
-% \begin{environment}{BVerbatim}
+% \begin{noindenvironment}{BVerbatim}
+% Adds \pkg{lwarp} verbatim patches.
% \changes{v0.891}{2020/09/12}{\pkg{fancyvrb}: Fix: \env{BVerbatim} with labels.}
% \begin{macrocode}
-
\xpretocmd{\FV@BeginVBox}
{%
- \LWR@forcenewpage% instead of \preto
+ \LWR@forcenewpage%
\LWR@atbeginverbatim{bverbatim}%
}
{}
@@ -57433,13 +58395,34 @@ solid {\FancyVerbRuleColor{\LWR@origpound\LWR@tempcolor}} ; % space
{}
{\LWR@patcherror{fancyvrb}{FV@EndVBox}}
% \end{macrocode}
-% \end{environment}
+% \end{noindenvironment}
% End of the modifications to make at the end of the preamble:
% \begin{macrocode}
} % \AfterEndPreamble
% \end{macrocode}
+
+
+% \begin{macrocode}
+\def\FVB@VerbatimOut#1{%
+ \@bsphack
+ \begingroup
+ \FV@UseKeyValues
+ \FV@DefineWhiteSpace
+ \def\FV@Space{\space}%
+ \FV@DefineTabOut
+ \def\FV@ProcessLine{\immediate\write\FV@OutFile}%
+ \immediate\openout\FV@OutFile #1\relax
+ \let\FV@FontScanPrep\relax
+%% DG/SR modification begin - May. 18, 1998 (to avoid problems with ligatures)
+ \let\@noligs\relax
+%% DG/SR modification end
+ \boolfalse{LWR@HTMLsanitize@tmpb@enable}% lwarp
+ \FV@Scan}
+% \end{macrocode}
+
+
% \iffalse
%</fancyvrb>
% \fi
@@ -59292,9 +60275,9 @@ solid {\FancyVerbRuleColor{\LWR@origpound\LWR@tempcolor}} ; % space
% \let\fn@endnote\color@endgroup% *** conflicts with lwarp
\def\fn@endnote{%
- \LWR@origtilde\LWR@orignewline%
+ \LWR@orignobreakspace\LWR@orignewline%
\LWR@htmltagc{/\LWR@tagregularparagraph}\LWR@orignewline%
- \LWR@origtilde\LWR@orignewline%
+ \LWR@orignobreakspace\LWR@orignewline%
}
% \end{macrocode}
%
@@ -59319,7 +60302,7 @@ solid {\FancyVerbRuleColor{\LWR@origpound\LWR@tempcolor}} ; % space
% \begin{macrocode}
\def\fn@endfntext{%
\fn@postfntext%
- \LWR@origtilde\LWR@orignewline%
+ \LWR@orignobreakspace\LWR@orignewline%
\LWR@htmltagc{/\LWR@tagregularparagraph}%
\LWR@orignewline%
\egroup%
@@ -60106,46 +61089,44 @@ solid {\FancyVerbRuleColor{\LWR@origpound\LWR@tempcolor}} ; % space
%
% \changes{v0.892}{2020/10/05}{\pkg{fvextra}: Added.}
% \changes{v0.910}{2022/12/15}{\pkg{fvextra}: Updated to v1.5.}
+% \changes{v0.913}{2023/12/05}{\pkg{fvextra}: Updated to v1.6.1.}
%
% \codehtml
%
% \begin{macrocode}
-\LWR@ProvidesPackagePass{fvextra}[2022/11/30]
+\LWR@ProvidesPackagePass{fvextra}[2023/11/28]
% \end{macrocode}
%
-% Ignored are \optn{highlight},
-% \optn{showtabs}, \optn{obeytabs}, \optn{tab}, \optn{tabcolor}.
-% Also ignored are all options regarding line breaking
-% except \optn{breaklines}, which is emulated as true.
-%
-% \optn{tabsize} is honored.
-%
% If line numbers on the right side are used along with \optn{breaklines},
% the line numbers will not be aligned.
% \begin{macrocode}
\define@booleankey{FV}{obeytabs}%
% {\let\FV@ObeyTabsInit\FV@@ObeyTabsInit}%
+ {\let\FV@ObeyTabsInit\relax}% lwarp
{\let\FV@ObeyTabsInit\relax}
- {\let\FV@ObeyTabsInit\relax}
-
-\define@key{FV}{tabcolor}%
- {}
+% \end{macrocode}
-\define@key{FV}{tab}{}
+% \optn{tabcolor} causes extra \HTML\ tags, destroying the verbatim text alignment,
+% so \optn{tabcolor} is ignored.
+% \begin{macrocode}
+\define@key{FV}{tabcolor}{}%
+% \end{macrocode}
+% \changes{v0.910}{2023/12/04}{\pkg{fvextra}: Improved tabs.}
+% \begin{macrocode}
\define@booleankey{FV}{showtabs}%
-% {\def\FV@TabChar{\FV@TabColor{\FancyVerbTab}}}%
- {\let\FV@TabChar\relax}
+ {\def\FV@TabChar{\FV@TabColor{\FancyVerbTab}}}%
{\let\FV@TabChar\relax}
\newbool{LWR@FV@breaklines}
\define@booleankey{FV}{breaklines}%
- {\boolfalse{FV@breaklines}
- \booltrue{LWR@FV@breaklines}
- \let\FV@ListProcessLine\FV@ListProcessLine@NoBreak}
- {\boolfalse{FV@breaklines}
- \boolfalse{LWR@FV@breaklines}
+ {\boolfalse{FV@breaklines}%
+ \booltrue{LWR@FV@breaklines}% lwarp
+% \let\FV@ListProcessLine\FV@ListProcessLine@Break}%
+ \let\FV@ListProcessLine\FV@ListProcessLine@NoBreak}% lwarp
+ {\boolfalse{FV@breaklines}%
+ \boolfalse{LWR@FV@breaklines}% lwarp
\let\FV@ListProcessLine\FV@ListProcessLine@NoBreak}
% \fvset{breaklines}
@@ -60175,7 +61156,52 @@ solid {\FancyVerbRuleColor{\LWR@origpound\LWR@tempcolor}} ; % space
\define@key{FV}{breaksymbolright}{\def\FancyVerbBreakSymbolRight{}}
\fvset{breaksymbolright={}}
+% \end{macrocode}
+
+
+% Modified to insert a fixed-width space (\cs{nobreakspace}) to indent the
+% left margin on indented code, but also allow a line break if needed (\cs{allowbreaK}),
+% to allow for break lines.
+% \changes{v0.913}{2023/11/26}{\pkg{fvextra}: Improved indentation.}
+% \begin{macrocode}
+\def\FV@DefFVSpace{%
+ \ifbool{FV@showspaces}%
+ {%
+ \def\FV@Space{%
+ \FV@SpaceColor{\FancyVerbSpace}%
+ \allowbreak%
+ }%
+ }%
+ {\def\FV@Space{\nobreakspace\allowbreak}}%
+}
+% \end{macrocode}
+
+
+% \begin{noindmacro}{\FancyVerbSpace}
+% Force the use of a vibible space instead of an empty box.
+% From \pkg{fancyvrb}.
+% \changes{v0.913}{2023/11/25}{\pkg{fvextra}: Fixed visible space from kernel change.}
+% \begin{macrocode}
+\ifxetexorluatex
+\def\FancyVerbSpace{\textvisiblespace}
+\else
+\@ifundefined{verbvisiblespace}%
+ {%
+ \@ifundefined{textvisiblespace}%
+ {\begingroup\catcode`\ =12 \gdef\FancyVerbSpace{\tt }\endgroup}
+ {\def\FancyVerbSpace{\textvisiblespace}}
+ }%
+ {\def\FancyVerbSpace{\verbvisiblespace}}
+\fi
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\FV@ListProcessLine@NoBreak} \marg{text}
+%
+% Modified to always allow line wrapping because added \HTML\ tags may
+% make run off the end of the line in the \PDF\ output file before conversion to \HTML.
+% \begin{macrocode}
\def\FV@ListProcessLine@NoBreak#1{%
% \hbox to \hsize{%
% \kern\leftmargin
@@ -60191,8 +61217,10 @@ solid {\FancyVerbRuleColor{\LWR@origpound\LWR@tempcolor}} ; % space
% \hss}%
\null\par% lwarp
}
-
-
+% \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{macrocode}
\newcommand*{\LWR@FV@linethensep}{%
\ifbool{LWR@FV@breaklines}%
{\theFancyVerbLine\kern\FV@NumberSep}%
@@ -60205,79 +61233,249 @@ solid {\FancyVerbRuleColor{\LWR@origpound\LWR@tempcolor}} ; % space
{\hbox to\z@{\kern\FV@NumberSep\theFancyVerbLine\hss}}%
}
-\xpatchcmd{\FV@Numbers@left}
+\xpatchcmd{\FV@Numbers@left}%
{\hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}}
{\LWR@FV@linethensep}
{}
{\LWR@patcherror{fvextra}{FV@Numbers@left A}}
-\xpatchcmd{\FV@Numbers@left}
+\xpatchcmd{\FV@Numbers@left}%
{\hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}}
{\LWR@FV@linethensep}
{}
{\LWR@patcherror{fvextra}{FV@Numbers@left B}}
-\xpatchcmd{\FV@Numbers@left}
+\xpatchcmd{\FV@Numbers@left}%
{\hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}}
{\LWR@FV@linethensep}
{}
{\LWR@patcherror{fvextra}{FV@Numbers@left C}}
-\xpatchcmd{\FV@Numbers@right}
+\xpatchcmd{\FV@Numbers@right}%
{\hbox to\z@{\kern\FV@NumberSep\theFancyVerbLine\hss}}
{\LWR@FV@septhenline}
{}
{\LWR@patcherror{fvextra}{FV@Numbers@right A}}
-\xpatchcmd{\FV@Numbers@right}
+\xpatchcmd{\FV@Numbers@right}%
{\hbox to\z@{\kern\FV@NumberSep\theFancyVerbLine\hss}}
{\LWR@FV@septhenline}
{}
{\LWR@patcherror{fvextra}{FV@Numbers@right B}}
-\xpatchcmd{\FV@Numbers@right}
+\xpatchcmd{\FV@Numbers@right}%
{\hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}}
{\LWR@FV@linethensep}
{}
{\LWR@patcherror{fvextra}{FV@Numbers@right C}}
-\xpatchcmd{\FV@Numbers@both}
+\xpatchcmd{\FV@Numbers@both}%
{\hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}}
{\LWR@FV@linethensep}
{}
{\LWR@patcherror{fvextra}{FV@Numbers@both A}}
-\xpatchcmd{\FV@Numbers@both}
+\xpatchcmd{\FV@Numbers@both}%
{\hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}}
{\LWR@FV@linethensep}
{}
{\LWR@patcherror{fvextra}{FV@Numbers@both B}}
-\xpatchcmd{\FV@Numbers@both}
+\xpatchcmd{\FV@Numbers@both}%
{\hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}}
{\LWR@FV@linethensep}
{}
{\LWR@patcherror{fvextra}{FV@Numbers@both C}}
-\xpatchcmd{\FV@Numbers@both}
+\xpatchcmd{\FV@Numbers@both}%
{\hbox to\z@{\kern\FV@NumberSep\theFancyVerbLine\hss}}
{\LWR@FV@septhenline}
{}
{\LWR@patcherror{fvextra}{FV@Numbers@both D}}
-\xpatchcmd{\FV@Numbers@both}
+\xpatchcmd{\FV@Numbers@both}%
{\hbox to\z@{\kern\FV@NumberSep\theFancyVerbLine\hss}}
{\LWR@FV@septhenline}
{}
{\LWR@patcherror{fvextra}{FV@Numbers@both E}}
-\xpatchcmd{\FV@Numbers@both}
+\xpatchcmd{\FV@Numbers@both}%
{\hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}}
{\LWR@FV@linethensep}
{}
{\LWR@patcherror{fvextra}{FV@Numbers@both F}}
% \end{macrocode}
+
+% \begin{noindmacro}{\FVC@SaveVerb@Extra@ii} \marg{name} \marg{raw text} \marg{text}
%
+% Modified to add \cs{LWR@HTMLsanitize@use@tmb} to the stored macro.
+% This is used on recall to sanitize for \HTML\ unless in a \env{lateximage}.
+% \changes{v0.913}{2023/10/01}{\pkg{fvextra}: Improved \HTML\ sanitization.}
+% \begin{macrocode}
+\def\FVC@SaveVerb@Extra@ii#1#2#3{%
+ \global\let\FV@AfterSave\FancyVerbAfterSave
+ \endgroup
+% \@namedef{FV@SV@#1}{#3}%
+ \@namedef{FV@SV@#1}{\LWR@HTMLsanitize@use@tmpb{#3}}% lwarp
+% \@namedef{FV@SVRaw@#1}{#2}%
+ \@namedef{FV@SVRaw@#1}{\LWR@HTMLsanitize@use@tmpb{#2}}% lwarp
+ \FV@AfterSave}%
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\FV@UseVerb@Extra} \marg{text}
+%
+% Adds the opening and closing tags.
+% \begin{macrocode}
+\def\FV@UseVerb@Extra#1{%
+ \ifbool{LWR@verbtags}% lwarp
+ {\LWR@htmltag{span class=\textquotedbl{}fancyvrb\textquotedbl}}% lwarp
+ {}% lwarp
+ \ifFV@breaklines
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\FV@InsertBreaks{\FancyVerbFormatInline}{#1}}%
+ {\mbox{#1}}%
+ \ifbool{LWR@verbtags}% lwarp
+ {\LWR@htmltag{/span}}% lwarp
+ {}% lwarp
+ \endgroup}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\FVC@Verb@Extra@ii} \marg{text}
+%
+% Sanitize \HTML.
+% \begin{macrocode}
+\def\FVC@Verb@Extra@ii#1{%
+ \def\tmpb{#1}% lwarp
+ \ifbool{LWR@verbtags}% lwarp
+ {\LWR@htmltag{span class=\textquotedbl{}fancyvrb\textquotedbl}}% lwarp
+ {}% lwarp
+ \LWR@HTMLsanitize@tmpb% lwarp
+ \ifFV@breaklines
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\FV@InsertBreaks{\FancyVerbFormatInline}{\tmpb}}% lwarp
+ {\mbox{\tmpb}}% lwarp
+ \ifbool{LWR@verbtags}% lwarp
+ {\LWR@htmltag{/span}}% lwarp
+ {}% lwarp
+ \endgroup}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\FVC@EscVerb@ii} \marg{text}
+%
+% Santize \HTML.
+% \changes{v0.913}{2023/12/07}{\pkg{fvextra}: Updated to v1.6.1.}
+% \begin{macrocode}
+\def\FVC@EscVerb@ii#1{%
+ \def\tmpb{#1}% lwarp
+ \ifbool{LWR@verbtags}% lwarp
+ {\LWR@htmltag{span class=\textquotedbl{}fancyvrb\textquotedbl}}% lwarp
+ {}% lwarp
+ \LWR@HTMLsanitize@tmpb% lwarp
+ \ifFV@breaklines
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+% {\FV@InsertBreaks{\FancyVerbFormatInline}{#1}}%
+% {\mbox{#1}}%
+ {\FV@InsertBreaks{\FancyVerbFormatInline}{\tmpb}}% lwarp
+ {\mbox{\tmpb}}% lwarp
+ \ifbool{LWR@verbtags}% lwarp
+ {\LWR@htmltag{/span}}% lwarp
+ {}% lwarp
+ \endgroup}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\FVB@VerbatimWrite}
+% Disable santizing \HTML\ while writing the file.
+% \HTML\ will be sanitized on \cs{VerbatimInput}.
+% \changes{v0.913}{2023/12/07}{\pkg{fvextra}: Updated to v1.6.1.}
+% \begin{macrocode}
+\xpatchcmd{\FVB@VerbatimWrite}
+ {\FV@Scan}
+ {\boolfalse{LWR@HTMLsanitize@tmpb@enable}\FV@Scan}
+ {}
+ {\LWR@patcherror{fvextra}{FVB@VerbatimWrite}}
+% \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\FVB@VerbatimBuffer}
+% Disable santizing \HTML\ while writing the buffer.
+% \HTML\ will be sanitized on \cs{VerbatimInsertBuffer}.
+% \changes{v0.913}{2023/12/07}{\pkg{fvextra}: Updated to v1.6.1.}
+% \begin{macrocode}
+\xpatchcmd{\FVB@VerbatimBuffer}
+ {\FV@Scan}
+ {\boolfalse{LWR@HTMLsanitize@tmpb@enable}\FV@Scan}
+ {}
+ {\LWR@patcherror{fvextra}{FVB@VerbatimBuffer}}
+% \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\VerbatimInsertBuffer}
+% \changes{v0.913}{2023/12/28}{\pkg{fvextra}: Updated to v1.6.1.}
+% \begin{macrocode}
+\renewcommand{\VerbatimInsertBuffer}[1][]{%
+ \begingroup
+ \def\FV@KeyValues{#1}%
+ \def\FV@Scan{%
+ \FV@CatCodes
+ \xdef\FV@EnvironName{Verbatim}%
+ \ifnum\expandafter\value\expandafter{\FV@bufferlengthname}=\z@\relax
+ \PackageError{fvextra}%
+ {Buffer length counter \FV@bufferlengthname\space is invalid or zero}%
+ {}%
+ \let\FV@GetLine\relax
+ \fi
+ \FV@GetLine}%
+ \let\FV@CheckScan\relax
+ \setcounter{FancyVerbBufferIndex}{1}%
+ \def\VerbatimInsertBuffer@def@FV@Line##1{%
+ \FVExtraRetokenizeVArg{\def\FV@Line}{}{##1}%
+ \LetLtxMacro\tmpb\FV@Line% lwarp
+ \LWR@HTMLsanitize@tmpb% lwarp
+ \LetLtxMacro\FV@Line\tmpb% lwarp
+ }%
+ \def\FancyVerbGetLine{%
+ \ifnum\value{FancyVerbBufferIndex}>%
+ \expandafter\value\expandafter{\FV@bufferlengthname}\relax
+ \global\let\FV@EnvironName\relax
+ \let\next\relax
+ \else
+ \ifcsname \FancyVerbBufferLineName\arabic{FancyVerbBufferIndex}\endcsname
+ \expandafter\let\expandafter\FV@Line@Buffer
+ \csname\FancyVerbBufferLineName\arabic{FancyVerbBufferIndex}\endcsname
+ \expandafter\VerbatimInsertBuffer@def@FV@Line\expandafter{\FV@Line@Buffer}%
+ \def\next{\FV@PreProcessLine\FV@GetLine}%
+ \stepcounter{FancyVerbBufferIndex}%
+ \else
+ \def\next{%
+ \PackageError{fvextra}%
+ {Buffer with line macro named
+ "\FancyVerbBufferLineName\arabic{FancyVerbBufferIndex}" does not exist}%
+ {Check bufferlinename, bufferlengthname, and globalbuffer settings}%
+ }%
+ \fi
+ \fi
+ \next}%
+ \FVB@Verbatim
+ \FVE@Verbatim
+ \setcounter{FancyVerbBufferIndex}{0}%
+ \endgroup}
+% \end{macrocode}
+% \end{noindmacro}
+
% \iffalse
%</fvextra>
% \fi
@@ -61292,7 +62490,7 @@ solid {\FancyVerbRuleColor{\LWR@origpound\LWR@tempcolor}} ; % space
% \end{macrocode}
% Start the image tag on a new line, allow \PDF\ output word wrap:
% \begin{macrocode}
- \LWR@origtilde \LWR@orignewline%
+ \LWR@orignobreakspace \LWR@orignewline%
% \end{macrocode}
% Temporarily compute \cs{linewidth}, \cs{textwidth}, \cs{textheight} arguments with a 6x9 inch size
% until the next \cs{endgroup}.
@@ -61397,9 +62595,11 @@ solid {\FancyVerbRuleColor{\LWR@origpound\LWR@tempcolor}} ; % space
%
% Create the \HTML\ reference with the graphicspath, filename, extension,
% alt tag, style, and class:
+% \changes{v0.913}{2023/11/25}{\pkg{graphics}: \bool{LWR@HTMLsanitize@tmpb@removebackslash} added.}
% \begin{macrocode}
\LWR@traceinfo{LWR@includegraphicsb: about to create href}%
- \LWR@href{\LWR@parsedfilename}%
+ \boolfalse{LWR@HTMLsanitize@tmpb@removebackslash}%
+ \LWR@href@partsanitized{\LWR@parsedfilename}%
{% start of href
\LWR@traceinfo{LWR@includegraphicsb: about to LWR@htmltag}%
\LWR@htmltag{\LWR@ig@htmltag}%
@@ -62641,13 +63841,14 @@ do not attempt to patch lwarp's version of `hyperref'.)\MessageBreak}
% \changes{v0.45}{2017/12/29}{\pkg{hyperref}: Fix: Underscore in \URL.}
% \changes{v0.52}{2018/03/26}{\pkg{hyperref}: Fix: \progcode{\#}, \progcode{\%}, \progcode{\&}, \progcode{\~}, \progcode{\_} in \URL.}
% \changes{v0.895}{2021/01/14}{Improved \HTML\ quotes.}
+% \changes{v0.913}{2023/10/01}{Improved \HTML\ sanitization.}
% \begin{macrocode}
\NewDocumentCommand{\LWR@hyperimageb}{m +m}{%
\LWR@ensuredoingapar%
- \def\LWR@templink{#1}%
- \@onelevel@sanitize\LWR@templink%
+ \edef\tmpb{#1}%
+ \LWR@HTMLsanitize@tmpb%
\LWR@htmltag{%
- img src=\textquotedbl\LWR@templink\textquotedbl\ %
+ img src=\textquotedbl\tmpb\textquotedbl\ %
alt=\textquotedbl#2\textquotedbl\ %
class=\textquotedbl{}hyperimage\textquotedbl%
}%
@@ -70440,13 +71641,16 @@ background:
% \changes{v0.892}{2020/10/07}{\pkg{minted}: Added.}
% \changes{v0.903}{2022/01/02}{\pkg{minted}: Updated to v2.6.}
% \changes{v0.910}{2022/12/15}{\pkg{minted}: Updated to v2.7.}
+% \changes{v0.913}{2023/11/17}{\pkg{minted}: Updated to v2.8.}
+% \changes{v0.913}{2023/11/17}{\pkg{minted}: Added \HTML\ sanitization.}
%
% \codehtml
%
% \begin{macrocode}
-\LWR@ProvidesPackagePass{minted}[2022/12/12]
+\LWR@ProvidesPackagePass{minted}[2023/09/12]
% \end{macrocode}
%
+% Several options are forced, since they are unsupported by \pkg{lwarp}.
% \begin{macrocode}
\renewcommand{\setminted}[2][]{%
\ifthenelse{\equal{#1}{}}%
@@ -70471,7 +71675,14 @@ background:
#2,
mathescape=false,breaklines,texcomments=false,highlightlines={}% lwarp
}}}
-
+% \end{macrocode}
+%
+% \bool{LWR@HTMLsanitize@tmpb@enable} is used to turn off
+% \HTML\ sanitization early in the verbatim conversion,
+% otherwise \pkg{minted} would then colorize the sanitized results,
+% breaking the \HTML\ entities in \pkg{lwarp}'s \HTML\ output.
+%
+% \begin{macrocode}
\xpatchcmd{\RobustMintInlineProcess}
{\setkeys{minted@opt@cmd}{#1}}
{%
@@ -70479,6 +71690,9 @@ background:
#1,%
mathescape=false,breaklines,texcomments=false,highlightlines={}%
}%
+ \ifbool{minted@draft}%
+ {\booltrue{LWR@HTMLsanitize@tmpb@enable}}%
+ {\boolfalse{LWR@HTMLsanitize@tmpb@enable}}%
}
{}
{\LWR@patcherror{minted}{minted}}
@@ -70490,6 +71704,9 @@ background:
#1,%
mathescape=false,breaklines,texcomments=false,highlightlines={}%
}%
+ \ifbool{minted@draft}%
+ {\booltrue{LWR@HTMLsanitize@tmpb@enable}}%
+ {\boolfalse{LWR@HTMLsanitize@tmpb@enable}}%
}
{}
{\LWR@patcherror{minted}{minted}}
@@ -70501,6 +71718,9 @@ background:
#1,%
mathescape=false,breaklines,texcomments=false,highlightlines={}%
}%
+ \ifbool{minted@draft}%
+ {\booltrue{LWR@HTMLsanitize@tmpb@enable}}%
+ {\boolfalse{LWR@HTMLsanitize@tmpb@enable}}%
}
{}
{\LWR@patcherror{minted}{minted}}
@@ -70511,33 +71731,16 @@ background:
#1,%
mathescape=false,breaklines,texcomments=false,highlightlines={}%
}%
+ \ifbool{minted@draft}%
+ {\booltrue{LWR@HTMLsanitize@tmpb@enable}}%
+ {\boolfalse{LWR@HTMLsanitize@tmpb@enable}}%
}
{}
{\LWR@patcherror{minted}{inputminted}}
+% \end{macrocode}
-
-%\xpatchcmd{\mintinline}
-% {\setkeys{minted@opt@cmd}{#1}}
-% {\setkeys{minted@opt@cmd}{%
-% #1,%
-% mathescape=false,breaklines,texcomments=false,highlightlines={}%
-% }%
-% }
-% {}
-% {\LWR@patcherror{minted}{mintinline}}
-
-%\xpatchcmd{\mint}
-% {\setkeys{minted@opt@cmd}{#1}}
-% {%
-% \setkeys{minted@opt@cmd}{%
-% #1,%
-% mathescape=false,breaklines,texcomments=false,highlightlines={}%
-% }%
-% }
-% {}
-% {\LWR@patcherror{minted}{mint}}
-
+% \begin{macrocode}
\renewenvironment{minted@snugshade*}[1]%
{%
\colorlet{shadecolor}{#1}%
@@ -70547,6 +71750,34 @@ background:
\end{snugshade*}%
}
% \end{macrocode}
+
+
+% To add sanitization during the final output,
+% adjust several characters to use \HTML\ entities
+% when loading the pygmentized results,
+% \begin{macrocode}
+\xpatchcmd{\minted@input}
+ {\input{#1}}
+ {%
+ \LWR@minted@overrides%
+ \input{#1}%
+ }
+ {}
+ {\LWR@patcherror{minted}{minted@input}}
+% \end{macrocode}
+
+% These macros are used inside the \filenm{*.pygtex} files
+% to format several individual characters.
+% These are revised to use \HTML\ entities.
+% The backquote |grave| is not supported by \pkg{pygments}.
+% \begin{macrocode}
+\newcommand*{\LWR@minted@overrides}{
+\def\PYGZam{\char`\&amp;}
+\def\PYGZlt{\char`\&lt;}
+\def\PYGZgt{\char`\&gt;}
+\def\PYGZsq{\char`\&apos;}
+}
+% \end{macrocode}
%
% \iffalse
%</minted>
@@ -71664,6 +72895,7 @@ background:
% \changes{v0.62}{2017/11/12}{\pkg{musicography}: Added.}
% \changes{v0.73}{2019/06/09}{\pkg{musicography}: Updated to 2019/05/28.
% Now supports \env{lateximage}s.}
+% \changes{v0.913}{2023/11/24}{\pkg{musicography}: Fix for \cs{musMeter}.}
%
% \codehtml
%
@@ -71706,7 +72938,7 @@ background:
\LWR@formatted{musDottedNote}
\NewDocumentCommand{\LWR@HTML@musMeter}{ m m }{%
-\begin{lateximage}*[#1/#2][#1#2]*%
+\begin{lateximage}*[#1/#2]*[#1#2]%
\musStack{#1 #2}\kern0.05em%
\end{lateximage}%
}
@@ -79766,11 +80998,12 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
% \pkg{simplebnf} is patched for use by \pkg{lwarp}.
%
% \changes{v0.893}{2020/10/29}{\pkg{simplebnf}: Added.}
+% \changes{v0.913}{2023/12/08}{\pkg{simplebnf}: Updated to v1.0.0.}
%
% \codehtml
%
% \begin{macrocode}
-\LWR@ProvidesPackagePass{simplebnf}[2022/05/08]
+\LWR@ProvidesPackagePass{simplebnf}[2023-11-25]
% \end{macrocode}
%
% The entire object is placed inside a \env{lateximage} whose
@@ -79778,78 +81011,32 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
% \begin{macrocode}
\ExplSyntaxOn
-\RenewDocumentEnvironment { bnfgrammar } { O{llcll} O{[^\|]\|[^\|]} O{\|\|} +b }
+\RenewDocumentEnvironment { bnf } { d() O{llcll} +b }
{
- \regex_gset:Nn \g_simplebnf_rhs_newline_r { #2 }
- \regex_gset:Nn \g_simplebnf_rhs_nb_r { #3 }
+ \begin{lateximage}[bnf:\space\detokenize{#3}]% lwarp
- %% \l__input_seq is a list of term definitions.
- \regex_split:nnN { ;; } { #4 } \l__input_seq
- \begin{center}
- \begin{lateximage}[#4]% lwarp
- \tl_set:Nn \l__table_tl
- {
- \begin{tabular}{#1}
- }
+ \IfNoValueF { #1 }
+ { \keys_set:nn { simplebnf } { #1 } }
- \bool_set_true:N \l_tmp_first_term % Is this the first term in this grammar?
- \seq_map_inline:Nn \l__input_seq
- {
- %% If not-first, add newline
- \bool_if:NTF \l_tmp_first_term
- {
- \bool_set_false:N \l_tmp_first_term
- }
- {
- \tl_put_right:Nn \l__table_tl { \\ }
- }
-
- \regex_split:nnNTF { ::= } { ##1 } \l__term_seq
- % Parse a ::= definition
- {
- %% \l__term_seq - (lhs, rhses)...
- %% \l__term_tl - lhs
- %% \l__keypairs_tl - rhses
- \seq_pop_left:NN \l__term_seq \l__term_tl
- \seq_pop_left:NN \l__term_seq \l__keypairs_tl
-
- \simplebnf_typeset_lhs:n{\l__term_tl}
- \tl_put_right:Nn \l__table_tl
- {
- & \SimpleBNFDefEq &
- }
- %% \l__keypairs_seq - (rhs:annot | rhs)...
- \regex_split:NVN \g_simplebnf_rhs_newline_r \l__keypairs_tl \l__keypairs_seq
+ \__simplebnf_build_grammar:n { #3 }
- \bool_set_true:N \l__first_rhs
- \seq_map_function:NN \l__keypairs_seq \simplebnf_typeset_rhs:n
- }
- {
- % Else, parse a \in declaration
- \regex_split:nnNTF { \c{in} } { ##1 } \l__term_seq
- {
- %% \l__term_seq - (lhs, rhs)
- \seq_pop_left:NN \l__term_seq \l_tmpa_tl
-
- \simplebnf_typeset_lhs:n{\l_tmpa_tl}
- \tl_put_right:Nn \l__table_tl
- {
- & $\in$ & $
- }
- \seq_pop_left:NN \l__term_seq \l_tmpa_tl
- \tl_put_right:NV \l__table_tl \l_tmpa_tl
- \tl_put_right:Nn \l__table_tl
- {
- $ &
- }
- }
- { \msg_error:nn {simplebnf} { Could not parser ##1 } }
- }
- }
+ \begin{@simplebnf_tblr_env}[expand=\l__simplebnf_table_tl]{#2}
+ \tl_use:N \l__simplebnf_table_tl
+ \end{@simplebnf_tblr_env}
+ \end{lateximage}% lwarp
+ }
+ { }
- \tl_put_right:Nn \l__table_tl { \end{tabular} }
- \tl_use:N \l__table_tl
- \end{lateximage}% lwarp
+\RenewDocumentEnvironment { bnfgrammar } { O{llcll} O{[^\|]\|[^\|]} O{\|\|} +b }
+ {
+ \msg_warning:nn { simplebnf } { dep }
+ \begin{center}
+ \begin{lateximage}[bnf:\space\detokenize{#4}]% lwarp
+ \begin{tabular}{#1}
+ \@dep__simplebnf_typeset_grammar:nnn { #2 } { #3 } { #4 }
+ \tl_use:N \l__simplebnf_table_tl
+ \end{tabular}
+ \end{lateximage}% lwarp
\end{center}
}
{ }
@@ -79888,8 +81075,8 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
% since \cs{ensuremath} is used in the original defintions,
% and \cs{ensuremath} often has expressions which do not work well in \MathJax,
% so it is always forced to an \SVG\ image.
-% If, however, \cs{unit} is used, the result is expressed with \MathJax
-% instead of an \SVG\ image.
+% If, however, \cs{unit} is used, the result is expressed with \MathJax\ instead
+% of an \SVG\ image.
%
% \changes{v0.59}{2018/07/11}{\pkg{SIunits}: Added.}
% \changes{v0.81}{2020/02/23}{\pkg{SIunits}: Improved \cs{unit}. Fixed in math mode.
@@ -79906,6 +81093,8 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
% \begin{macrocode}
\ifbool{mathjax}{
\DeclareRobustCommand{\LWR@HTML@unit}[2]{%
+ \begingroup%
+ \boolfalse{LWR@HTMLsanitize@tmpb@removebackslash}%
\LWR@subsingledollar*% lwarp
{% alt tag
\textbackslash{}unit%
@@ -79916,6 +81105,7 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
{%
#1\,{#2}%
}% contents
+ \endgroup%
}
}{% not MathJax
\DeclareRobustCommand{\LWR@HTML@unit}[2]{%
@@ -80378,6 +81568,7 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
%
% \changes{v0.897}{2021/05/23}{\pkg{siunitx}: Rollback for v2.}
% \changes{v0.904}{2022/02/19}{\pkg{siunitx}: Added v3.}
+% \changes{v0.913}{2023/11/24}{\pkg{siunitx}: Updated to v3.3.9.}
%
% \codehtml
%
@@ -80391,7 +81582,7 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
\RequirePackage{xcolor}% for \convertcolorspec
-\LWR@ProvidesPackagePass{siunitx}[2022-02-15]
+\LWR@ProvidesPackagePass{siunitx}[2023-11-14]
\ExplSyntaxOn
% \end{macrocode}
@@ -80441,13 +81632,14 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
{
\tl_set:Nn \l__siunitx_number_outputted_tl
{
+ \boolfalse{mathjax}% lwarp
\LWR@subsingledollar{% lwarp
- \textbackslash( % space
+ \textbackslash( % space lwarp ALT text
\LWR@HTMLsanitizedetokenized{%
\detokenize{#1}%
} \textbackslash)% lwarp
}%
- {siunitx unparsed}%
+ {siunitx unparsed}% lwarp add'l hashing
{\ensuremath{#1}}% lwarp
}
}
@@ -80463,13 +81655,14 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
\tl_if_blank:nF {#1}
{ \seq_put_right:Nn \l__siunitx_compound_tmp_seq
{
+ \boolfalse{mathjax}% lwarp
\LWR@subsingledollar{% lwarp
- \textbackslash( % space
+ \textbackslash( % space lwarp ALT tag
\LWR@HTMLsanitizedetokenized{%
\detokenize{#1}%
} \textbackslash)% lwarp
}%
- {siunitx unparsed}%
+ {siunitx unparsed}% lwarp add'l hashing
{\ensuremath{#1}}% lwarp
}
}
@@ -80477,60 +81670,79 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
% \end{macrocode}
%
%
+% \begin{noindmacro}{\LWR@siunitx@mathrm} \marg{text}
+%
+% If in text mode, use \cs{textrm} instead.
+% Avoids crashing while using \cs{mathrm} in text mode.
+% \begin{macrocode}
+\LetLtxMacro\LWR@siunitx@orig@mathrm\mathrm
+
+\newcommand*{\LWR@siunitx@mathrm}[1]{%
+ \ifmmode{\LWR@siunitx@orig@mathrm{#1}}\else{#1}\fi%
+}
+% \end{macrocode}
+% \end{noindmacro}
+%
% If not in a \env{lateximage}, always use text mode.
% Ignore current text font if resetting text family, series, and shape.
% \begin{macrocode}
\cs_set_protected:Npn \__siunitx_print_aux:nn #1#2
{
- \tl_if_empty:cTF { l__siunitx_print_ #1 _color_tl }
- { \use:n }
- { \exp_args:Nv \textcolor { l__siunitx_print_ #1 _color_tl } }
- {
- \ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}% lwarp
- {
- \use:c
- {
- siunitx_print_
- \tl_use:c { l__siunitx_print_ #1 _mode_tl } :n
- }
- {#2}
- }
+ \LetLtxMacro\mathrm\LWR@siunitx@mathrm% lwarp
+ \tl_if_empty:oF {#2}
+ {
+ \tl_if_empty:cTF { l__siunitx_print_ #1 _color_tl }
+ { \use:n }
+ { \exp_args:Nv \textcolor { l__siunitx_print_ #1 _color_tl } }
{
- \bool_lazy_all:nTF% lwarp
- {
- {\l__siunitx_print_text_family_bool}
- {\l__siunitx_print_text_series_bool}
- {\l__siunitx_print_text_shape_bool}
- }
- {% No font control if reset-text-family/series/shape
- \use:c
- {
- siunitx_print_% lwarp
- text% lwarp
- :n% lwarp
- }% lwarp
- {#2}% lwarp
- }
- {
- \LWR@textcurrentfont{% lwarp
+ \ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}% lwarp
+ {
+ \use:c
+ {
+ siunitx_print_
+ \tl_use:c { l__siunitx_print_ #1 _mode_tl } :n
+ }
+ {#2}
+ }
+ {
+ \bool_lazy_all:nTF% lwarp
+ {
+ {\l__siunitx_print_text_family_bool}
+ {\l__siunitx_print_text_series_bool}
+ {\l__siunitx_print_text_shape_bool}
+ }
+ {% No font control if reset-text-family/series/shape
\use:c
{
- siunitx_print_% lwarp
- text% lwarp
- :n% lwarp
- }% lwarp
- {#2}% lwarp
+ siunitx_print_% lwarp
+ text% lwarp
+ :n% lwarp
+ }% lwarp
+ {#2}% lwarp
}
- }
+ {
+ \LWR@textcurrentfont{% lwarp
+ \use:c
+ {
+ siunitx_print_% lwarp
+ text% lwarp
+ :n% lwarp
+ }% lwarp
+ {#2}% lwarp
+ }
+ }
+ }
}
- }
- }
+ }
+}
% \end{macrocode}
%
%
% To determine whether to make a complex root be italic or upright,
% \cs{l\_\_siunitx\_complex\_output\_root\_tl} is compared to
-% \cs{LWR@siunitx@complexrm<i/j>}, and the \CSS\ style is set appropriately.
+% \cs{LWR@siunitx@complexrm<i/j>}, and the \CSS\ style for i,j is set
+% to |ijit| or |ijup|.
+% \changes{v0.913}{2023/11/24}{\pkg{siunitx}: \CSS\ for complex number i,j.}
% \begin{macrocode}
\newcommand*{\LWR@siunitx@complexrootstyle}{textrm}
@@ -80538,21 +81750,21 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
\newcommand*{\LWR@siunitx@complexrmj}{\mathrm{j}}
\newcommand*{\LWR@siunitx@setcomplexroot}{%
- \renewcommand*{\LWR@siunitx@complexrootstyle}{textit}%
+ \renewcommand*{\LWR@siunitx@complexrootstyle}{ijit}%
\ifdefequal{\l__siunitx_complex_output_root_tl}{\LWR@siunitx@complexrmi}%
- {\renewcommand*{\LWR@siunitx@complexrootstyle}{textrm}}%
+ {\renewcommand*{\LWR@siunitx@complexrootstyle}{ijup}}%
{}%
\ifdefequal{\l__siunitx_complex_output_root_tl}{\LWR@siunitx@complexrmj}%
- {\renewcommand*{\LWR@siunitx@complexrootstyle}{textrm}}%
+ {\renewcommand*{\LWR@siunitx@complexrootstyle}{ijup}}%
{}%
}
% \end{macrocode}
%
% \begin{macrocode}
-\cs_set_protected:Npn \__siunitx_complex_format_auxii:n #1
+\cs_set_protected:Npn \__siunitx_complex_format_cartesian_auxii:n #1
{
\LWR@siunitx@setcomplexroot% lwarp
- \__siunitx_complex_format_units:n {#1}
+ \__siunitx_complex_format_cartesian_units:n {#1}
\tl_if_empty:NF \l__siunitx_complex_real_tl
{ \exp_after:wN \__siunitx_complex_drop_exponent:nnnnnnn \l__siunitx_complex_real_tl }
\exp_after:wN \__siunitx_complex_format_sign:nnnnnnn \l__siunitx_complex_img_tl
@@ -80763,13 +81975,14 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
{ \__siunitx_quantity_parsed:nn {#1} {#2} }
{
\tl_set:Nn \l__siunitx_quantity_number_tl {
+ \boolfalse{mathjax}% lwarp
\LWR@subsingledollar{% lwarp
- \textbackslash( % space
+ \textbackslash( % space lwaro ALT tag
\LWR@HTMLsanitizedetokenized{%
\detokenize{#1}%
} \textbackslash)% lwarp
}%
- {siunitx unparsed}%
+ {siunitx unparsed}% lwarp add'l hashing
{\ensuremath{#1}}% lwarp
}
\siunitx_unit_format:nN {#2} \l__siunitx_quantity_unit_tl
@@ -85536,7 +86749,7 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
% \codehtml
%
% \begin{macrocode}
-\LWR@ProvidesPackagePass{tcolorbox}[2023/02/12]
+\LWR@ProvidesPackagePass{tcolorbox}[2023/06/19]
% \end{macrocode}
%
% \begin{macrocode}
@@ -91741,8 +92954,8 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
\newcommand*{\LWR@currenttextcolorstyle}{%
\LWR@findcurrenttextcolor%
\ifdefstring{\LWR@tempcolor}{000000}%
- {}%
- {color: \LWR@origpound\LWR@tempcolor ; }%
+ {}%
+ {color: \LWR@origpound\LWR@tempcolor ; }%
}
% \end{macrocode}
% \end{noindmacro}
@@ -92138,90 +93351,6 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
% \end{macrocode}
% \end{macro}
%
-%
-% \subsection{Row colors}
-% \changes{v0.49}{2018/02/17}{\pkg{xcolor}: Added tabular row colors.}
-% \changes{v0.79}{2020/01/18}{\pkg{xcolor}: Fix: Nested \env{tabular}s.}
-%
-% \begin{noindmacro}{\rowc@l@rs} \oarg{cmds} \marg{startrow} \marg{odd color} \marg{even color}
-% \begin{macrocode}
-\newcommand*{\LWR@xcolortempcolor}{}
-
-\def\rowc@l@rs[#1]#2#3#4%
-{%
- \rownum=1%
- \@rowcolorstrue%
- \@ifxempty{#3}%
- {\def\@oddrowcolor{\@norowcolor}}%
- {%
- \convertcolorspec{named}{#3}{HTML}\LWR@xcolortempcolor%
- \edef\@oddrowcolor{%
- \csdef{LWR@xcolorrowHTMLcolor}{\LWR@xcolortempcolor}%
- }%
- }%
- \@ifxempty{#4}%
- {\def\@evenrowcolor{\@norowcolor}}%
- {%
- \convertcolorspec{named}{#4}{HTML}\LWR@xcolortempcolor%
- \edef\@evenrowcolor{%
- \csdef{LWR@xcolorrowHTMLcolor}{\LWR@xcolortempcolor}%
- }%
- }%
- \if@rowcmd
- \def\@rowcolors
- {%
-% #1%
- \if@rowcolors
-% \noalign{%
- \relax\ifnum\rownum<#2\@norowcolor\else
- \ifodd\rownum\@oddrowcolor\else\@evenrowcolor\fi\fi%
-% }%
- \fi%
- }%
- \else
- \def\@rowcolors
- {%
- \if@rowcolors
- \ifnum\rownum<#2%
-% \noalign{%
- \@norowcolor
-% }
- \else
-% #1%
-% \noalign{%
- \ifodd\rownum\@oddrowcolor\else\@evenrowcolor\fi%
-% }%
- \fi
- \fi%
- }%
- \fi
- \ignorespaces%
-}
-% \end{macrocode}
-% \end{noindmacro}
-%
-% \begin{noindmacro}{\@norowcolor} Turns off color for this row.
-% \begin{macrocode}
-\def\@norowcolor{%
- \renewcommand{\LWR@xcolorrowHTMLcolor}{}%
-}
-% \end{macrocode}
-% \end{noindmacro}
-%
-
-% \begin{noindmacro}{\@rowc@lors} Executed at the end of each row.
-% \changes{v0.79}{2020/01/18}{\pkg{xcolor}: Fix: Nested \env{tabular}s.}
-% \begin{macrocode}
-\def\@rowc@lors{%
-% \noalign{%
- \advance\rownum\@ne%
-% }%
- \@rowcolors%
-}
-% \end{macrocode}
-% \end{noindmacro}
-%
-%
% \iffalse
%</xcolor>
% \fi
@@ -94628,13 +95757,19 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
\renewcommand*{\hangsubcaption}{}
\renewcommand*{\shortsubcaption}{}
\renewcommand*{\normalsubcaption}{}
+% \end{macrocode}
+% \cs{AfterEndPreamble} now required for \env{sidecaption}.
+% \changes{v0.913}{2023/11/23}{\pkg{lwarp-patch-memoir}: Fixed change in \env{sidecaption}.}
+% \begin{macrocode}
+\AfterEndPreamble{%
\RenewDocumentEnvironment{sidecaption}{o m o}
{}
{%
\IfValueTF{#1}{\caption[#1]{#2}}{\caption{#2}}%
\IfValueT{#3}{\label{#3}}%
}
+}
% \newlength{\sidecapwidth}
% \newlength{\sidecapsep}
diff --git a/macros/latex/contrib/lwarp/lwarp.ins b/macros/latex/contrib/lwarp/lwarp.ins
index fde9f9f976..a16143215b 100644
--- a/macros/latex/contrib/lwarp/lwarp.ins
+++ b/macros/latex/contrib/lwarp/lwarp.ins
@@ -57,6 +57,7 @@ version 2005/12/01 or later.
\file{lwarp-anonchap.sty}{\from{lwarp.dtx}{anonchap}}
\file{lwarp-anysize.sty}{\from{lwarp.dtx}{anysize}}
\file{lwarp-appendix.sty}{\from{lwarp.dtx}{appendix}}
+\file{lwarp-apxproof.sty}{\from{lwarp.dtx}{apxproof}}
\file{lwarp-ar.sty}{\from{lwarp.dtx}{ar}}
\file{lwarp-arabicfront.sty}{\from{lwarp.dtx}{arabicfront}}
\file{lwarp-array.sty}{\from{lwarp.dtx}{array}}
diff --git a/macros/latex/contrib/lwarp/lwarp.pdf b/macros/latex/contrib/lwarp/lwarp.pdf
index 550c9096d7..1b5170fb92 100644
--- a/macros/latex/contrib/lwarp/lwarp.pdf
+++ b/macros/latex/contrib/lwarp/lwarp.pdf
Binary files differ
diff --git a/macros/latex/contrib/lwarp/lwarpmk.lua b/macros/latex/contrib/lwarp/lwarpmk.lua
index 1d47893217..2c1709a5b9 100755
--- a/macros/latex/contrib/lwarp/lwarpmk.lua
+++ b/macros/latex/contrib/lwarp/lwarpmk.lua
@@ -1,8 +1,8 @@
#!/usr/bin/env texlua
--- Copyright 2016-2023 Brian Dunn
+-- Copyright 2016-2024 Brian Dunn
-printversion = "v0.912"
+printversion = "v0.913"
requiredconfversion = "2" -- also at *lwarpmk.conf
function printhelp ()
diff --git a/macros/latex/contrib/morewrites/README.md b/macros/latex/contrib/morewrites/README.md
index aa31c5370a..eca82dee12 100644
--- a/macros/latex/contrib/morewrites/README.md
+++ b/macros/latex/contrib/morewrites/README.md
@@ -1,16 +1,16 @@
-Provide more writing streams in LaTeX
+Always room for a new write stream
=====================================
-* E-mail: blflatex+morewrites@gmail.com
+* E-mail: blflatex@gmail.com
* Released under the LaTeX Project Public License v1.3c or later
See http://www.latex-project.org/lppl.txt
-The morewrites LaTeX package should be used when encountering the
-`No room for a new \write ` error. This is done by redefining a
-few TeX primitives related to output.
+The morewrites package silently hooks into the TeX primitives
+responsible for writing to files to lift the restriction on
+the number of files open at the same time (16). Load the package
+with `\usepackage{morewrites}` as early as possible to avoid the
+`No room for a new \write ` error.
-This package uses the `l3kernel` bundle.
-
-This is work in progress, all suggestions/comments/bug reports
-are welcome! See https://github.com/blefloch/latex-morewrites
+Suggestions/comments/bug reports welcome at
+https://github.com/blefloch/latex-morewrites
diff --git a/macros/latex/contrib/morewrites/morewrites.dtx b/macros/latex/contrib/morewrites/morewrites.dtx
index 6e52eff394..1bd5e0f6b3 100644
--- a/macros/latex/contrib/morewrites/morewrites.dtx
+++ b/macros/latex/contrib/morewrites/morewrites.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-%% File: morewrites.dtx Copyright (C) 2011-2018 Bruno Le Floch
+%% File: morewrites.dtx Copyright (C) 2011-2024 Bruno Le Floch
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -28,7 +28,7 @@
% \title{The \textsf{morewrites} package: \\
% Always room for a new \tn{write}}
% \author{Bruno Le Floch}
-% \date{2018/12/29}
+% \date{2024/01/05}
%
% \maketitle
% \tableofcontents
@@ -60,11 +60,13 @@
% \item This package loads the \pkg{expl3} package, hence the
% \pkg{l3kernel} bundle needs to be up to date.
% \item This package uses an auxiliary file, \meta{job~name}|.mw|,
-% which can safely be deleted. Versions from 2015 and later will only
-% use the auxiliary file if it is originally empty, to avoid
-% destroying data (such as |.mw| files used by Maple). This means
-% that |.mw| files generated by versions before 2015 should be
-% deleted by hand.
+% which can safely be deleted. The package only overwrites this
+% auxiliary file if it is empty, and otherwise uses a modified
+% file name, obtained by adding an integer to the name (previously
+% it was obtained by appending additional copies of |.mw| to the
+% name). Such files can be safely deleted. Be careful though to
+% not delete a Maple worksheet by accident when cleaning up your
+% files.
% \item \LuaTeX{} allows $128$ \tn{write} streams, so this package does
% nothing (with a warning) when used with \LuaTeX{}.
% \end{itemize}
@@ -88,7 +90,7 @@
% \pkg{morewrites}.
% \end{function}
%
-% \begin{function}[added = 2014-07-26, updated = 2015-08-01]{file}
+% \begin{function}[added = 2014-07-26, updated = 2024-01-05]{file}
% \begin{syntax}
% \cs{morewritessetup} |{| |file| |=| \meta{file name} |}|
% \end{syntax}
@@ -100,13 +102,23 @@
% remaining.
% \end{function}
%
+% \begin{function}[added = 2024-01-05]{verbose}
+% \begin{syntax}
+% \cs{morewritessetup} |{| |verbose| |}|
+% \end{syntax}
+% This boolean option (\texttt{false} by default) makes the package
+% write to the terminal all of the operations that it performs. This
+% can render \pkg{morewrites} useful for debugging some file-writing
+% operations.
+% \end{function}
+%
% \begin{function}[updated = 2015-08-01]{\newwrite}
% This macro is redefined by \pkg{morewrites}. Since \pkg{morewrites}
% allows more than~$16$ write streams, it removes the corresponding
% restrictions in \tn{newwrite}.
% \begin{texnote}
% The revised \tn{newwrite} allocate stream numbers starting at
-% $19$. This might break some code that expects stream numbers to
+% $129$. This might break some code that expects stream numbers to
% be less than $16$.
% \end{texnote}
% \end{function}
@@ -153,10 +165,9 @@
%
%<*package>
% \begin{macrocode}
-\RequirePackage {expl3} [2018/02/21]
-\RequirePackage {primargs} [2018/12/29]
+\RequirePackage {primargs} [2024/01/05]
\ProvidesExplPackage
- {morewrites} {2018/12/29} {} {Always room for a new write}
+ {morewrites} {2024/01/05} {} {Always room for a new write}
% \end{macrocode}
%
% Quit early under \LuaTeX{}.
@@ -195,15 +206,18 @@
%
% Henceforth, ``\TeX{} stream'' will refer to stream numbers in the
% range $[0,15]$ provided to \TeX{}'s write primitives, while
-% ``user stream'' will denote stream numbers in $[0,15]\cup[19,\infty)$
+% ``user stream'' will denote stream numbers in $[0,15]\cup[129,\infty)$
% manipulated by the redefined \tn{openout}, \tn{write}, \tn{closeout},
% and \tn{newwrite}. A user stream in $[0,15]$ (reserved by \LaTeXe{}
% or allocated by \pkg{expl3}) is mapped to the same \TeX{} stream
-% number, while a user stream in $[19,\infty)$ is mapped to a \TeX{}
+% number, while a user stream in $[129,\infty)$ is mapped to a \TeX{}
% stream according to the property list (with integer keys and values)
% \cs{l_@@_write_prop}. Stream numbers $16$,
% $17$ and $18$ are unused because \tn{write}16 is often used to write
% to the terminal, and \tn{write}18 sends its argument to a shell.
+% The stream number $128$ is also often used like $16$ to avoid
+% distinguishing \LuaTeX{}. Rather than special-casing it we skip
+% directly to larger stream numbers.
%
% The primitives \tn{openout}, \tn{write}, and \tn{closeout} expect to
% be followed by an \meta{integer}, normally in the range $[0,15]$, then
@@ -313,21 +327,20 @@
%
% \subsubsection{Variants}
%
-% \begin{macro}{\prop_gpop:NVNT, \prop_gput:NVx, \tl_gput_right:Nv}
% We need these variants.
% \begin{macrocode}
\cs_generate_variant:Nn \prop_gpop:NnNT { NV }
\cs_generate_variant:Nn \prop_gput:Nnn { NVx }
\cs_generate_variant:Nn \tl_gput_right:Nn { Nv }
% \end{macrocode}
-% \end{macro}
%
% \subsubsection{Variables}
%
-% \begin{variable}{\l_@@_internal_tl}
+% \begin{variable}{\l_@@_internal_tl, \l_@@_internal_seq}
% Used for temporary scratch purposes.
% \begin{macrocode}
\tl_new:N \l_@@_internal_tl
+\seq_new:N \l_@@_internal_seq
% \end{macrocode}
% \end{variable}
%
@@ -338,6 +351,13 @@
% \end{macrocode}
% \end{variable}
%
+% \begin{variable}{\l_@@_verbose_bool}
+% When this boolean is set true, \pkg{morewrites} will print to the terminal all of the operations that it does.
+% \begin{macrocode}
+\bool_new:N \l_@@_verbose_bool
+% \end{macrocode}
+% \end{variable}
+%
% \begin{variable}{\g_@@_later_int}
% The integer \cs{g_@@_later_int} labels the various
% non-immediate operations in the order in which they appear in the
@@ -458,12 +478,25 @@
% \end{macrocode}
% \end{variable}
%
+% \subsubsection{Verbosity}
+%
+% \begin{macro}{\@@_verbose:n}
+% Messages to put in the terminal if the \texttt{verbose} option is
+% selected.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_verbose:n #1
+ { \bool_if:NT \l_@@_verbose_bool { \iow_term:e { morewrites:~#1 } } }
+% \end{macrocode}
+% \end{macro}
+%
% \subsubsection{Helpers for auxiliary file}
%
% \begin{macro}{\@@_set_file:n}
% Sets \cs{g_@@_tmp_file_tl} to the given value (initially
-% \cs{c_sys_jobname_str}|.mw|). Mark that the file has not been
-% checked.
+% \cs{c_sys_jobname_str}|.mw|). We do not yet expand, delaying that
+% to the time where we start opening/closing the file, in case |#1|
+% contains something that has not yet been fixed. Mark that the file
+% has not been checked.
% \begin{macrocode}
\cs_new_protected:Npn \@@_set_file:n #1
{
@@ -474,7 +507,7 @@
% \end{macro}
%
% \begin{macro}{\@@_empty_file:n}
-% Empties the file \cs{g_@@_tmp_file_tl} by opening it and closing it
+% Empties a file by opening it and closing it
% right away. This is used when performing \tn{immediate}
% \tn{openout}. It is also used to ensure the file used by
% \pkg{morewrites} is left empty. We do this every time the auxiliary
@@ -483,7 +516,7 @@
\cs_new_protected:Npn \@@_empty_file:n #1
{
\@@_tex_immediate:w \@@_tex_openout:w
- \g_@@_iow = #1 \scan_stop:
+ \g_@@_iow = {#1} \scan_stop:
\@@_tex_immediate:w \@@_tex_closeout:w
\g_@@_iow
}
@@ -503,7 +536,7 @@
\prg_new_conditional:Npnn \@@_if_file_trivial:n #1 { TF }
{
\group_begin:
- \tex_openin:D \g_@@_ior = #1 \scan_stop:
+ \tex_openin:D \g_@@_ior = {#1}
\if_eof:w \g_@@_ior
\cs_gset_eq:NN \@@_tmp:w \prg_return_true:
\else:
@@ -523,22 +556,41 @@
% \end{macro}
%
% \begin{macro}{\@@_chk_file:}
-% Check that the file \cs{g_@@_tmp_file_tl} does not exist or is blank.
-% If not, try the file name obtained by adding |.mw|.
+% Expand the file name in \cs{g_@@_tmp_file_tl} once and for all.
+% Check that the file does not exist or is
+% blank. If not, try another file name obtained as follows: if it
+% ends with |.mw| pick up any number that lies just before |.mw| and
+% increment it, and otherwise just add |.mw| at the end of the file.
% This avoids clobbering files that the user would not want to lose.
% \begin{macrocode}
\cs_new_protected:Npn \@@_chk_file:
{
+ \tl_gset:Ne \g_@@_tmp_file_tl
+ { \tl_to_str:e { \g_@@_tmp_file_tl } }
\@@_if_file_trivial:nTF { \g_@@_tmp_file_tl }
{ \bool_gset_true:N \g_@@_tmp_file_bool }
{
+ \@@_chk_file_aux:
\msg_warning:nnxx { morewrites } { file-exists }
- { \g_@@_tmp_file_tl }
- { \g_@@_tmp_file_tl .mw }
- \tl_gput_right:Nn \g_@@_tmp_file_tl { .mw }
+ { \g_@@_tmp_file_tl } { \l_@@_internal_tl }
+ \tl_gset_eq:NN \g_@@_tmp_file_tl \l_@@_internal_tl
\@@_chk_file:
}
}
+\cs_new_protected:Npn \@@_chk_file_aux:
+ {
+ \regex_extract_once:nVNTF
+ { \A (\D*) (\d*) .mw \Z } \g_@@_tmp_file_tl \l_@@_internal_seq
+ {
+ \tl_set:Ne \l_@@_internal_tl
+ {
+ \seq_item:Nn \l_@@_internal_seq { 2 }
+ \int_eval:n { \seq_item:Nn \l_@@_internal_seq { 3 } + 1 }
+ .mw
+ }
+ }
+ { \tl_set:Ne \l_@@_internal_tl { \g_@@_tmp_file_tl .mw } }
+ }
\msg_new:nnnn { morewrites } { file-exists }
{ File~'#1'~exists,~using~'#2'~instead. }
{
@@ -564,7 +616,7 @@
\cs_new_protected:Npn \@@_equals_file:N #1
{
\group_begin:
- \tex_aftergroup:D \primargs_get_file_name:N
+ \tex_aftergroup:D \primargs_get_input_file_name:N
\tex_aftergroup:D #1
\primargs_remove_equals:N \group_end:
}
@@ -588,9 +640,9 @@
% \begin{macro}{\@@_user_to_tstr:NTF}
% The goal is to go from a user stream \cs{l_@@_user_int} to a \TeX{}
% stream \cs{l_@@_tstr_tl} (it defaults to the user stream). Streams
-% less than $19$ are not managed by \pkg{morewrites}: actual \TeX{}
+% less than $129$ are not managed by \pkg{morewrites}: actual \TeX{}
% streams in $[0,15]$; negative for writing to \texttt{log}; $16$,
-% $17$ for writing to terminal; $18$ for shell escape. Larger stream
+% $17$, $128$ for writing to terminal; $18$ for shell escape. Larger stream
% numbers are looked up in the property list |#1|, namely
% \cs{g_@@_write_prop}. If present, use the corresponding value as
% the \TeX{} stream, otherwise run the \texttt{false} branch.
@@ -598,7 +650,7 @@
\cs_new_protected:Npn \@@_user_to_tstr:NTF #1
{
\tl_set:NV \l_@@_tstr_tl \l_@@_user_int
- \int_compare:nNnTF { \l_@@_user_int } < { 19 }
+ \int_compare:nNnTF { \l_@@_user_int } < { 129 }
{ \use_i:nn }
{ \prop_get:NVNTF #1 \l_@@_user_int \l_@@_tstr_tl }
}
@@ -724,9 +776,10 @@
% then test for \tn{openout}, \tn{write}, and \tn{closeout}. More
% precisely we test for the marker \cs{s_@@} and run the appropriate
% code as described above. Otherwise we call the primitive, for cases
-% where the next token is \tn{pdfobj} or similar. This code performs
-% too much expansion for some nonsensical uses of \tn{noexpand} after
-% \tn{immediate}.
+% where the next token is \tn{pdfobj} or similar. In contrived
+% situations involving nonsensical uses of \tn{noexpand} after
+% \tn{immediate}, this code does not perfectly match how \TeX{}
+% expands.
% \begin{macrocode}
\cs_new_protected:Npn \@@_immediate:w
{ \primargs_read_x_token:N \@@_immediate_auxii: }
@@ -734,7 +787,11 @@
{
\token_if_eq_meaning:NNTF \g_primargs_token \s_@@
{ \@@_immediate_auxiii:N }
- { \@@_tex_immediate:w }
+ {
+ \@@_verbose:n
+ { \tl_to_str:n { \immediate } \token_to_meaning:N \g_primargs_token }
+ \@@_tex_immediate:w
+ }
}
\cs_new_protected:Npn \@@_immediate_auxiii:N #1
{ \str_if_eq:nnTF { #1 } { \s_@@ } { \use_iii:nnn } { #1 } }
@@ -746,9 +803,10 @@
%
% The \tn{openout}, \tn{write}, and \tn{closeout} primitive can be
% either delayed or immediate. In all cases they begin by looking for a
-% user stream. Here, we implement the immediate versions only.
+% user stream. In this subsubsection we implement the immediate versions
+% only.
%
-% \begin{macro}{\@@_closeout:w, \@@_closeout_now:, \@@_closeout_now:nn}
+% \begin{macro}{\@@_closeout:w, \@@_closeout_now:, \@@_closeout_now_silent:, \@@_closeout_now:nn}
% In the immediate case \cs{@@_closeout_now:}, there are three cases.
% The stream may point to a \TeX{} stream, in which case it is closed,
% removed from \cs{g_@@_write_prop}, and put back in the list of
@@ -771,6 +829,11 @@
}
\cs_new_protected:Npn \@@_closeout_now:
{
+ \@@_verbose:n { \tl_to_str:n { \immediate \closeout } \int_use:N \l_@@_user_int }
+ \@@_closeout_now_silent:
+ }
+\cs_new_protected:Npn \@@_closeout_now_silent:
+ {
\@@_user_to_tstr:NTF \g_@@_write_prop
{
\@@_tex_immediate:w \@@_tex_closeout:w \l_@@_tstr_tl \exp_stop_f:
@@ -787,7 +850,7 @@
}
\cs_new_protected:Npn \@@_closeout_now:nn #1#2
{
- \@@_tex_immediate:w \@@_tex_openout:w \g_@@_iow = #2 \scan_stop:
+ \@@_tex_immediate:w \@@_tex_openout:w \g_@@_iow = {#2}
\group_begin:
\int_set:Nn \tex_newlinechar:D { -1 }
\tl_use:c { \@@_user_tl_name:n {#1} }
@@ -798,7 +861,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_openout:w, \@@_openout_now:n}
+% \begin{macro}{\@@_openout:w, \@@_openout_now:n, \@@_openout_now_silent:n}
% In the immediate case find a file name, then allocate a \TeX{}
% stream if possible, and otherwise point the user stream to a token
% list. In all cases, close the stream to avoid losing any material
@@ -814,18 +877,28 @@
}
\cs_new_protected:Npn \@@_openout_now:n #1
{
- \@@_closeout_now:
- \int_compare:nNnTF { \l_@@_user_int } < { 19 }
+ \@@_verbose:n
+ {
+ \tl_to_str:n { \immediate\openout }
+ \int_use:N \l_@@_user_int
+ \c_space_tl = ~ {#1}
+ }
+ \@@_openout_now_silent:n {#1}
+ }
+\cs_new_protected:Npn \@@_openout_now_silent:n #1
+ {
+ \@@_closeout_now_silent:
+ \int_compare:nNnTF { \l_@@_user_int } < { 129 }
{
\@@_tex_immediate:w \@@_tex_openout:w \l_@@_user_int
- = \tl_to_str:n {#1} \scan_stop:
+ = { \tl_to_str:n {#1} }
}
{
\seq_gpop:NNTF \g_@@_write_seq \l_@@_tstr_tl
{
\prop_gput:NVV \g_@@_write_prop \l_@@_user_int \l_@@_tstr_tl
\@@_tex_immediate:w \@@_tex_openout:w \l_@@_tstr_tl \exp_stop_f:
- = \tl_to_str:n {#1} \scan_stop:
+ = { \tl_to_str:n {#1} }
}
{
\@@_empty_file:n {#1}
@@ -854,14 +927,41 @@
\cs_new_protected:Npn \@@_write_now:w
{
\@@_user_to_tstr:NTF \g_@@_write_prop
- { \@@_tex_immediate:w \@@_tex_write:w \l_@@_tstr_tl \exp_stop_f: }
+ {
+ \int_compare:nNnT \l_@@_user_int = { 18 } { \use_iii:nnn }
+ \int_compare:nT { -1 < \l_@@_user_int < 16 }
+ {
+ \@@_verbose:n
+ {
+ \tl_to_str:n { \immediate \write }
+ \int_use:N \l_@@_user_int
+ }
+ }
+ \@@_tex_immediate:w \@@_tex_write:w \l_@@_tstr_tl \exp_stop_f:
+ }
{ \primargs_get_general_text:N \@@_write_now:n }
}
-\cs_new_protected:Npn \@@_write_now:n
+\cs_new_protected:Npn \@@_write_now:n #1
{
\prop_get:NVNTF \g_@@_write_file_prop \l_@@_user_int \l_@@_internal_tl
- { \@@_write_now_open:n }
- { \@@_tex_immediate:w \@@_tex_write:w 16 }
+ {
+ \@@_verbose:n
+ {
+ \tl_to_str:n { \immediate \write }
+ \int_use:N \l_@@_user_int
+ \tl_to_str:n { ~ {#1} }
+ }
+ \@@_write_now_open:n {#1}
+ }
+ {
+ \@@_verbose:n
+ {
+ \tl_to_str:n { \immediate \write }
+ \int_use:N \l_@@_user_int
+ \tl_to_str:n { ~ (closed) ~ {#1} }
+ }
+ \@@_tex_immediate:w \@@_tex_write:w 16 {#1}
+ }
}
% \end{macrocode}
% \end{macro}
@@ -885,14 +985,14 @@
{
\bool_if:NF \g_@@_tmp_file_bool { \@@_chk_file: }
\@@_tex_immediate:w \@@_tex_openout:w
- \g_@@_iow = \g_@@_tmp_file_tl \scan_stop:
+ \g_@@_iow = { \g_@@_tmp_file_tl }
\@@_tex_immediate:w \@@_tex_write:w
\g_@@_iow {#1}
\@@_tex_immediate:w \@@_tex_closeout:w
\g_@@_iow
\group_begin:
\int_set:Nn \tex_endlinechar:D { -1 }
- \tex_openin:D \g_@@_ior = \g_@@_tmp_file_tl \scan_stop:
+ \tex_openin:D \g_@@_ior = { \g_@@_tmp_file_tl }
\@@_write_now_loop:
\tex_closein:D \g_@@_ior
\@@_collect_gput_right:c
@@ -949,29 +1049,41 @@
%
% \begin{macro}{\@@_closeout_later:}
% If the user stream is a \TeX{} stream, use the primitive, otherwise
-% save \cs{@@_closeout_now:} for later.
+% save \cs{@@_closeout_now_silent:} for later.
% \begin{macrocode}
\cs_new_protected:Npn \@@_closeout_later:
{
- \int_compare:nNnTF \l_@@_user_int < { 19 }
+ \@@_verbose:n { \tl_to_str:n { \closeout (later) ~ } \int_use:N \l_@@_user_int }
+ \int_compare:nNnTF \l_@@_user_int < { 129 }
{ \@@_tex_closeout:w \l_@@_user_int }
- { \@@_later:n { \@@_closeout_now: } }
+ { \@@_later:n { \@@_closeout_now_silent: } }
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_openout_later:w, \@@_openout_later:n}
% If the user stream is a \TeX{} stream use the primitive, otherwise
-% find a file name and call \cs{@@_openout_now:n} later.
+% find a file name and call \cs{@@_openout_now_silent:n} later.
% \begin{macrocode}
\cs_new_protected:Npn \@@_openout_later:w
{
- \int_compare:nNnTF \l_@@_user_int < { 19 }
- { \@@_tex_openout:w \l_@@_user_int }
+ \int_compare:nNnTF \l_@@_user_int < { 129 }
+ {
+ \@@_verbose:n { \tl_to_str:n { \openout (later) ~ } \int_use:N \l_@@_user_int }
+ \@@_tex_openout:w \l_@@_user_int
+ }
{ \@@_equals_file:N \@@_openout_later:n }
}
\cs_new_protected:Npn \@@_openout_later:n #1
- { \@@_later:n { \@@_openout_now:n {#1} } }
+ {
+ \@@_verbose:n
+ {
+ \tl_to_str:n { \openout (later)~ }
+ \int_use:N \l_@@_user_int
+ \c_space_tl = ~ {#1}
+ }
+ \@@_later:n { \@@_openout_now_silent:n {#1} }
+ }
% \end{macrocode}
% \end{macro}
%
@@ -982,17 +1094,32 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_write_later:w
{
- \int_compare:nNnTF \l_@@_user_int < { 19 }
- { \@@_tex_write:w \l_@@_user_int }
+ \int_compare:nNnTF \l_@@_user_int < { 129 }
+ {
+ \@@_verbose:n { \tl_to_str:n { \write (later)~ } \int_use:N \l_@@_user_int }
+ \@@_tex_write:w \l_@@_user_int
+ }
{ \primargs_get_general_text:N \@@_write_later:n }
}
\cs_new_protected:Npn \@@_write_later:n #1
- { \@@_later:n { \@@_write_later_aux:n {#1} } }
+ {
+ \@@_verbose:n
+ {
+ \tl_to_str:n { \write (later)~ }
+ \int_use:N \l_@@_user_int
+ \tl_to_str:n { ~ {#1} }
+ }
+ \@@_later:n { \@@_write_later_aux:n {#1} }
+ }
\cs_new_protected:Npn \@@_write_later_aux:n
{
\@@_user_to_tstr:NTF \g_@@_write_prop
{ \@@_tex_immediate:w \@@_tex_write:w \l_@@_tstr_tl \exp_stop_f: }
- { \@@_write_now:n }
+ {
+ \prop_get:NVNTF \g_@@_write_file_prop \l_@@_user_int \l_@@_internal_tl
+ { \@@_write_now_open:n }
+ { \@@_tex_immediate:w \@@_tex_write:w 16 \exp_stop_f: }
+ }
}
% \end{macrocode}
% \end{macro}
@@ -1022,7 +1149,7 @@
{
\bool_if:NF \g_@@_tmp_file_bool { \@@_chk_file: }
\@@_tex_immediate:w \@@_tex_openout:w
- \g_@@_iow = \g_@@_tmp_file_tl \scan_stop:
+ \g_@@_iow = { \g_@@_tmp_file_tl }
}
% \end{macrocode}
% \end{macro}
@@ -1059,7 +1186,7 @@
\tl_set:Nx \l_@@_internal_tl
{
\exp_after:wN \@@_after_shipout_loop:ww
- \tex_input:D \g_@@_tmp_file_tl \c_space_tl
+ \tex_input:D { \g_@@_tmp_file_tl }
}
\@@_empty_file:n { \g_@@_tmp_file_tl }
\exp_args:NNo
@@ -1165,7 +1292,10 @@
\cs_new_protected:Npn \@@_close_all:
{
\prop_map_inline:Nn \g_@@_write_prop
- { \@@_tex_immediate:w \@@_tex_closeout:w ##2 \scan_stop: }
+ {
+ \@@_verbose:n { \tl_to_str:n { \immediate \closeout } ##1 ~ (at~end) }
+ \@@_tex_immediate:w \@@_tex_closeout:w ##2 \scan_stop:
+ }
\prop_gclear:N \g_@@_write_prop
\prop_map_function:NN \g_@@_write_file_prop
\@@_closeout_now:nn
@@ -1197,13 +1327,16 @@
% \subsubsection{Modified \tn{newwrite}}
%
% \begin{variable}{\g_@@_alloc_write_int}
-% Counter to allocate user streams. Initialized to $18$ so that the
-% first user stream allocated by \pkg{morewrites} is $19$. Indeed,
-% $18$ is reserved for shell commands and packages may expect $16$ or
-% $17$ to write to the terminal.
+% Counter to allocate user streams. We used to initialize it to $18$
+% so that the first user stream allocated by \pkg{morewrites} was
+% $19$. Indeed, $18$ is reserved for shell commands and packages may
+% expect $16$ or $17$ to write to the terminal. This is now changed
+% to start allocation at $129$, since some packages that do not want
+% to distinguish \LuaTeX{} from other engines simply use $128$ as a
+% never-open stream.
% \begin{macrocode}
\int_new:N \g_@@_alloc_write_int
-\int_gset:Nn \g_@@_alloc_write_int { 18 }
+\int_gset:Nn \g_@@_alloc_write_int { 128 }
% \end{macrocode}
% \end{variable}
%
@@ -1265,7 +1398,8 @@
{
allocate .code:n = \@@_allocate:n {#1} ,
file .code:n = \@@_set_file:n {#1} ,
- file .initial:n = \c_sys_jobname_str .mw
+ file .initial:n = \c_sys_jobname_str .mw ,
+ verbose .bool_set:N = \l_@@_verbose_bool
}
% \end{macrocode}
% \end{macro}
diff --git a/macros/latex/contrib/morewrites/morewrites.ins b/macros/latex/contrib/morewrites/morewrites.ins
index d9e17d55e0..6cb78787a2 100644
--- a/macros/latex/contrib/morewrites/morewrites.ins
+++ b/macros/latex/contrib/morewrites/morewrites.ins
@@ -1,6 +1,6 @@
\iffalse meta-comment
-File morewrites.ins Copyright (C) 2012 Bruno Le Floch
+File morewrites.ins Copyright (C) 2012-2024 Bruno Le Floch
It may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -22,8 +22,8 @@ The released version of this bundle is available from CTAN.
\preamble
-Communicate any suggestions for changing this package
-to Bruno Le Floch (blflatex@gmail.com).
+Suggestions/comments/bug reports welcome at
+https://github.com/blefloch/latex-morewrites
\endpreamble
% stop docstrip adding \endinput
diff --git a/macros/latex/contrib/morewrites/morewrites.pdf b/macros/latex/contrib/morewrites/morewrites.pdf
index 4b838b6779..20632fc76d 100644
--- a/macros/latex/contrib/morewrites/morewrites.pdf
+++ b/macros/latex/contrib/morewrites/morewrites.pdf
Binary files differ
diff --git a/macros/latex/contrib/morewrites/primargs.dtx b/macros/latex/contrib/morewrites/primargs.dtx
index 5ba63d5e85..132b01e6b6 100644
--- a/macros/latex/contrib/morewrites/primargs.dtx
+++ b/macros/latex/contrib/morewrites/primargs.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-%% File: primargs.dtx Copyright (C) 2012-2018 Bruno Le Floch
+%% File: primargs.dtx Copyright (C) 2012-2024 Bruno Le Floch
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -25,7 +25,7 @@
% \title{The \textsf{primargs} package: \\
% Parsing arguments of primitives}
% \author{Bruno Le Floch}
-% \date{2018/12/29}
+% \date{2024/01/05}
%
% \maketitle
% \tableofcontents
@@ -167,17 +167,19 @@
% argument.
% \end{function}
%
-% \begin{function}[updated = 2017-04-10, tested = primargs004]{\primargs_get_file_name:N, \primargs_get_input_file_name:N}
+% \begin{function}[updated = 2024-01-05, tested = primargs004]{\primargs_get_file_name:N, \primargs_get_input_file_name:N}
% \begin{syntax}
% \cs{primargs_get_file_name:N} \meta{function}
% \cs{primargs_get_input_file_name:N} \meta{function}
% \end{syntax}
% Reads a \meta{file name} following the \meta{function} and calls the
% \meta{function} with this \meta{file name} as a braced argument.
-% The two functions are identical except in the \LuaTeX{} engine where
-% \cs{primargs_get_input_file_name:N} allows braced file names:
-% \LuaTeX{} allows such braced file names for some primitives (\tn{input}
-% and \tn{openin}) but not others (\tn{openout}).
+% The first function only allows for the historical unbraced file
+% names that plain \TeX{} supports. The second one also allows braced
+% file names. Historically this was first supported in \LuaTeX{} for
+% \tn{input} and related primitives, hence the name. Now all main
+% engines (in \TeX{}Live at least) support both syntaxes for all
+% primitives that take file names.
% \begin{texnote}
% When braced file names are disallowed, the file name is obtained
% by discarding \meta{optional spaces} then repeatedly doing the
@@ -250,9 +252,8 @@
%
%<*package>
% \begin{macrocode}
-\RequirePackage {expl3} [2018/02/21]
\ProvidesExplPackage
- {primargs} {2018/12/29} {} {Parsing arguments of primitives}
+ {primargs} {2024/01/05} {} {Parsing arguments of primitives}
% \end{macrocode}
%
% \begin{macrocode}
@@ -801,7 +802,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_get_file_name_char:
{
- \token_if_eq_charcode:NNT " \g_primargs_token
+ \token_if_eq_charcode:NNT " \g_primargs_token % "
{
\tl_gset:Nx \g_@@_file_name_level_tl
{ \int_eval:n { 1 - \g_@@_file_name_level_tl } }
@@ -828,8 +829,11 @@
% \@@_get_input_file_name_loop:, \@@_get_input_file_name_test:,
% \@@_get_input_file_name_brace:, \@@_get_input_file_name_aux:N
% }
-% For most engines this is an alias of \cs{primargs_get_file_name:N}.
-% In \LuaTeX{} we test for a catcode $1$ token (after a filler) then
+% In addition to file names detected by \cs{primargs_get_file_name:N}
+% this allows for braced file names. The weird indentation is because
+% historically we had to distinguish \LuaTeX{}, allowing braced file
+% names, from other engines.
+% We test for a catcode $1$ token (after a filler) then
% expand and collect tokens (turned to strings) one by one, counting
% begin-group and end-group tokens in \cs{g_@@_file_name_level_tl}.
% The control sequence \tn{par} is ignored. After removing a filler
@@ -837,8 +841,6 @@
% the tests are safe. We use primitives to cope with outer macro
% hidden by \tn{noexpand} upon first expansion.
% \begin{macrocode}
-\sys_if_engine_luatex:TF
- {
\cs_new_protected:Npn \primargs_get_input_file_name:N #1
{
\group_begin:
@@ -905,8 +907,6 @@
}
\@@_get_input_file_name_loop:
}
- }
- { \cs_new_eq:NN \primargs_get_input_file_name:N \primargs_get_file_name:N }
% \end{macrocode}
% \end{macro}
% \end{macro}
diff --git a/macros/latex/contrib/morewrites/primargs.pdf b/macros/latex/contrib/morewrites/primargs.pdf
index d63d7f97a2..0c3a84562a 100644
--- a/macros/latex/contrib/morewrites/primargs.pdf
+++ b/macros/latex/contrib/morewrites/primargs.pdf
Binary files differ
diff --git a/macros/latex/contrib/unbtex/README.md b/macros/latex/contrib/unbtex/README.md
index 7b8bf46c1c..61176f44e8 100644
--- a/macros/latex/contrib/unbtex/README.md
+++ b/macros/latex/contrib/unbtex/README.md
@@ -1,8 +1,8 @@
# UnBTeX: A class for bachelor, master, and doctoral thesis at the
# University of Brasilia (UnB), Brazil.
-# Version 1.4.3 2023/12/22
+# Version 1.4.4 2024/01/05
-Copyright (C) 2021-2023 by Henrique C. Ferreira <hcferreira@unb.br>
+Copyright (C) 2021-2024 by Henrique C. Ferreira <hcferreira@unb.br>
The package provides a class based on abnTeX and compatible with pdflatex
and bibtex to prepare theses for the University of Brasilia (UnB), Brazil.
@@ -92,6 +92,10 @@ Here is a history of changes:
. Keywords in English have been included on the copyright page if the
document is written in this language
. Examples of long tables and rotated tables have been included
+ 1.4.4 (2024-01-05):
+ . The pdfpages package has been used to include pages from PDF documents
+ . The sans-serif font Helvetica (helvet package) has been replaced by the
+ TeX Gyre Heros font (tgheros package)
## Overleaf
diff --git a/macros/latex/contrib/unbtex/unbtex-example.pdf b/macros/latex/contrib/unbtex/unbtex-example.pdf
index 03972cb0fb..9e44543fa5 100644
--- a/macros/latex/contrib/unbtex/unbtex-example.pdf
+++ b/macros/latex/contrib/unbtex/unbtex-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/unbtex/unbtex-example.tex b/macros/latex/contrib/unbtex/unbtex-example.tex
index 909bad49ac..00082e7908 100644
--- a/macros/latex/contrib/unbtex/unbtex-example.tex
+++ b/macros/latex/contrib/unbtex/unbtex-example.tex
@@ -1,8 +1,8 @@
%%
%% UnBTeX: A class for bachelor, master, and doctoral thesis at the
%% University of Brasilia (UnB), Brazil
-%% Version 1.4.3 2023/12/22
-%% Copyright (C) 2021-2023 by Henrique C. Ferreira <hcferreira@unb.br>
+%% Version 1.4.4 2024/01/05
+%% Copyright (C) 2021-2024 by Henrique C. Ferreira <hcferreira@unb.br>
%%
%% This class file may be distributed and/or modified under the conditions
%% of the LaTeX Project Public License, either version 1.3 of this license
@@ -33,14 +33,20 @@
% Pacotes básicos (Adicione abaixo pacotes úteis para o seu trabalho)
% ---
-\RequirePackage{longtable} % Pacote para tabelas que ocupam mais de uma página
-\RequirePackage{rotating} % Pacote para girar tabelas (e outros objetos)
-\RequirePackage{pdfpages} % Pacote para incluir documentos pdf
+\usepackage{longtable} % Pacote para tabelas que ocupam mais de uma página
+\usepackage{rotating} % Pacote para girar tabelas (e outros objetos)
+\usepackage{pdfpages} % Pacote para incluir documentos pdf
% Lista na bibliografia o número das páginas que cada referência é citada
\RequirePackage[hyperpageref]{backref}
% Bibliografia nas normas da ABNT, formato autor-data
-\RequirePackage[alf,abnt-etal-list=0,abnt-etal-cite=3,abnt-emphasize=bf,bibjustif]{abntex2cite}
+\RequirePackage[
+ alf,
+ abnt-etal-list=0,
+ abnt-etal-cite=3,
+ abnt-emphasize=bf,
+ bibjustif
+ ]{abntex2cite}
\addtociteoptionlist{abnt-url-package=url}
% retira os limitadores < e > dos hiperlinks
\def\UrlLeft{}
@@ -135,11 +141,11 @@
%\instituicao[Universidade de Brasília]{Faculdade de Tecnologia}{Departamento de Engenharia Elétrica} % comente a linha acima e retire o comentário desta linha caso queira incluir o departamento da unidade acadêmica
% Use português mesmo que o trabalho seja em inglês.
-% Local e data
+% Local e data da defesa
\local{Brasília}
-\dia{22}
-\mes{dezembro}
-\ano{2023}
+\dia{5}
+\mes{janeiro}
+\ano{2024}
% Palavras-chave (pelo menos três devem ser informadas)
\pchavei{Palavra chave 1}
diff --git a/macros/latex/contrib/unbtex/unbtex-example/anexo-a.tex b/macros/latex/contrib/unbtex/unbtex-example/anexo-a.tex
index 0a90ec65eb..5af76406ce 100644
--- a/macros/latex/contrib/unbtex/unbtex-example/anexo-a.tex
+++ b/macros/latex/contrib/unbtex/unbtex-example/anexo-a.tex
@@ -81,7 +81,8 @@ Non-Western Cape & 59.9 & 46.8 & (41.9) & 8.6 & (17.2) & 44.6 & (41.0) \\
\small
\caption{Tabela rotacionada}\label{tab:rot}
\setlength\tabcolsep{3pt} % controla o espaço entre colunas
-\begin{tabular}{L{1.1cm}L{1.6cm}L{1.6cm}L{1.6cm}L{1.6cm}L{1.6cm}L{1.6cm}L{1.6cm}L{1.6cm}L{1.6cm}L{1.6cm}L{1.6cm}L{1.6cm}}\toprule
+\begin{tabular}{@{}L{1.1cm}L{1.6cm}L{1.6cm}L{1.6cm}L{1.6cm}L{1.6cm}L{1.6cm}L{1.6cm}L{1.6cm}L{1.6cm}L{1.6cm}L{1.6cm}L{1.6cm}@{}} % @{} elimina o espaço nas bordas laterais
+\toprule
Sv,ieq & 000436xa & 000594xa & 001715xa & 001932ya & 006040ya & 006263xa & 007162ya & 007257ya & IT0605ya & IT0790xa & emiliaeo-retro & emilians-retro \\ \midrule
0.4 & 2.447 & 2.177 & 2.304 & 4.921 & 4.298 & 2.121 & 3.928 & 3.478 & 3.462 & 1.751 & 0.875 & 0.525 \\
0.8 & 4.894 & 4.354 & 4.609 & 9.843 & 8.597 & 4.241 & 7.857 & 6.957 & 6.924 & 3.502 & 1.750 & 1.049 \\
diff --git a/macros/latex/contrib/unbtex/unbtex-example/anexo-b.tex b/macros/latex/contrib/unbtex/unbtex-example/anexo-b.tex
index b5ba38f064..9f2658e15a 100644
--- a/macros/latex/contrib/unbtex/unbtex-example/anexo-b.tex
+++ b/macros/latex/contrib/unbtex/unbtex-example/anexo-b.tex
@@ -2,10 +2,15 @@
\chapter{Paleta de cores UnB}\label{anx:coresunb}
% ----------------------------------------------------------
-A página a seguir foi extraída do \emph{manual de identidade visual}\footnote{Disponível em \url{http://marca.unb.br}} da UnB.
+A \cpageref{marcaunb.1}, a seguir, foi extraída do \emph{manual de identidade visual}\footnote{Disponível em \url{http://marca.unb.br}} da UnB.
+
+\newcounter{includepdfpage} % para referenciar no texto páginas pdf incluídas
\includepdf[
- pages=-, % intervalo das páginas do pdf que serão incluídas
+ pages=-, % intervalo das páginas do arquivo pdf que serão incluídas
scale=1, % controla o tamanho da página inserida
- pagecommand={\thispagestyle{simple}}, % numeração da página
+ pagecommand={\thispagestyle{simple} % imprime o número da página
+ \refstepcounter{includepdfpage} % conta a página incluída
+ \label{marcaunb.\theincludepdfpage} % marcaunb.n, n número da página
+ },
]{unbtex-example/figuras/coresunb} \cleardoublepage \ No newline at end of file
diff --git a/macros/latex/contrib/unbtex/unbtex-example/capitulo2.tex b/macros/latex/contrib/unbtex/unbtex-example/capitulo2.tex
index bb27c530fe..a453309354 100644
--- a/macros/latex/contrib/unbtex/unbtex-example/capitulo2.tex
+++ b/macros/latex/contrib/unbtex/unbtex-example/capitulo2.tex
@@ -133,6 +133,8 @@ O número do capítulo indicado é \ref{cap:exemplos}, que se inicia à
pode ser obtida também assim: \pageref{cap:exemplos}.}.
\end{verbatim}
+O pacote \textsf{cleveref} foi utilizado para fazer as remissões internas. Mais opções de uso (e de comandos) podem ser encontradas em seu manual\footnote{Disponível em \url{https://linorg.usp.br/CTAN/macros/latex/contrib/cleveref/cleveref.pdf}}.
+
% ---
\section{Referências bibliográficas}
% ---
@@ -162,11 +164,14 @@ Normalmente não há problemas em usar caracteres acentuados em arquivos bibliog
\begin{center}
\caption{Tabela de conversão de acentuação}
\label{tab:acentos}
-\begin{tabular}{ll} \toprule
-acento & bibtex \\ \midrule
-à á ã & \verb|\`a| \verb|\'a| \verb|\~a| \\
-í & \verb|{\'\i}| \\
-ç & \verb|{\c c}| \\ \bottomrule
+\begin{tabular}{llllllll} \toprule
+\multicolumn{4}{l}{acento} & \multicolumn{4}{l}{bibtex} \\ \midrule
+\`a & \'a & \~a & \^a & \verb|\`a| & \verb|\'a| & \verb|\~a| & \verb|\^a| \\
+\'e & \^e & & & \verb|\'e| & \verb|\^e| & & \\
+í & & & & \multicolumn{2}{l}{\Verb{{\'i}}} & & \\
+\'o & \~o & \^o & & \verb|\'o| & \verb|\~o| & \verb|\^o| & \\
+\'u & & & & \verb|\'u| & & & \\
+{\c c} & & & & \multicolumn{2}{l}{\Verb{{\c c}}} & & \\ \bottomrule
\end{tabular}
\end{center}
\end{table}
diff --git a/macros/latex/contrib/unbtex/unbtex-example/capitulo3.tex b/macros/latex/contrib/unbtex/unbtex-example/capitulo3.tex
index be47541a1b..f6f1aa89dc 100644
--- a/macros/latex/contrib/unbtex/unbtex-example/capitulo3.tex
+++ b/macros/latex/contrib/unbtex/unbtex-example/capitulo3.tex
@@ -56,7 +56,7 @@ CIC0090 & Estruturas de Dados & 30 & 30 & 0 & 0 & 60 & CIC0004 \\ \hline%
\caption{Um Exemplo de tabela alinhada que pode ser longa ou curta, conforme padrão IBGE}%
\label{tab:ibge}
}{%
- \begin{tabular}{ccc}
+ \begin{tabular}{@{}ccc@{}} % @{} elimina o espaço nas bordas laterais
\toprule
\textbf{Nome} & \textbf{Nascimento} & \textbf{Documento} \\ \midrule
Maria da Silva & 11/11/1111 & 111.111.111-11 \\[3pt]
@@ -177,7 +177,7 @@ Crie no Overleaf um projeto nomeado \texttt{blockdiagram} e que tenha, dentro de
\lstinputlisting[numbers=none,float,caption={\texttt{blockdiagram.tex}},label={cod:tex}]{unbtex-example/codigos/blockdiagram.tex}
-No menu do Overleaf, defina \texttt{LaTeX} como compilador e o arquivo \texttt{blockdiagram.tex} como principal. Coloque dentro do projeto o arquivo \texttt{blockdiagram.eps} e compile o projeto. A saída gerada corresponde à \cref{fig:psfrag1} e deverá ser salva como \texttt{blockdiagram.pdf}. Este arquivo poderá ser carregado no projeto do texto do trabalho (TCC, dissertação ou tese) que você estiver escrevendo com o UnB\TeX\ (que usa o \texttt{pdfLaTeX} como compilador).
+No menu do Overleaf, altere o compilador de \texttt{pdfLaTeX} para \texttt{LaTeX} e defina o arquivo \texttt{blockdiagram.tex} como principal. Coloque dentro do projeto o arquivo \texttt{blockdiagram.eps} e compile. A saída gerada, corresponde à \cref{fig:psfrag1}, deve ser salva como \texttt{blockdiagram.pdf}. Este arquivo poderá ser carregado no projeto do texto do trabalho (TCC, dissertação ou tese) que você estiver escrevendo com o UnB\TeX\ (que usa o \texttt{pdfLaTeX} como compilador).
Note no \cref{cod:tex} que o pacote \textsf{psfrag} substitui, por meio do comando
\begin{verbatim}
diff --git a/macros/latex/contrib/unbtex/unbtex-example/codigos/blockdiagram.tex b/macros/latex/contrib/unbtex/unbtex-example/codigos/blockdiagram.tex
index 0af68cc6e0..b22a71ec3e 100644
--- a/macros/latex/contrib/unbtex/unbtex-example/codigos/blockdiagram.tex
+++ b/macros/latex/contrib/unbtex/unbtex-example/codigos/blockdiagram.tex
@@ -2,7 +2,8 @@
\usepackage{stickstootext}
\usepackage[stickstoo,vvarbb]{newtxmath}
-\usepackage[scaled=0.88]{helvet}
+\usepackage[scale=0.88]{tgheros}
+\usepackage[scale=1.03]{inconsolata}
\usepackage[displaymath,tightpage]{pst-pdf}
\usepackage{psfrag}
\usepackage{icomma}
diff --git a/macros/latex/contrib/unbtex/unbtex-example/figuras/bodediagram.pdf b/macros/latex/contrib/unbtex/unbtex-example/figuras/bodediagram.pdf
index 0ae0b0048a..79d673c84f 100644
--- a/macros/latex/contrib/unbtex/unbtex-example/figuras/bodediagram.pdf
+++ b/macros/latex/contrib/unbtex/unbtex-example/figuras/bodediagram.pdf
Binary files differ
diff --git a/macros/latex/contrib/unbtex/unbtex-example/referencias.bib b/macros/latex/contrib/unbtex/unbtex-example/referencias.bib
index 6539a93470..39396ade56 100644
--- a/macros/latex/contrib/unbtex/unbtex-example/referencias.bib
+++ b/macros/latex/contrib/unbtex/unbtex-example/referencias.bib
@@ -9,7 +9,7 @@
Date-Modified = {2013-08-21 13:56:10 +0000},
Edition = {3},
Organization = {http://biblioteca.ibge.gov.br/visualizacao/livros/liv23907.pdf},
- Publisher = {Centro de Documenta{\c c}\~ao e Dissemina{\c c}\~ao de Informa{\c c}ões. Funda{\c c}\~ao Instituto Brasileiro de Geografia e Estat\'istica},
+ Publisher = {Centro de Documenta{\c c}\~ao e Dissemina{\c c}\~ao de Informa{\c c}ões. Funda{\c c}\~ao Instituto Brasileiro de Geografia e Estat{\'i}stica},
Title = {Normas de apresenta{\c c}\~ao tabular},
urldate = {2013-08-21},
Year = {1993}}
@@ -54,7 +54,7 @@
Date-Added = {2013-01-15 00:10:35 +0000},
Date-Modified = {2015-04-27 22:43:13 +0000},
Organization = {Equipe abnTeX2},
- Title = {Modelo Can\^onico de Artigo Cient\'ifico com abnTeX2},
+ Title = {Modelo Can\^onico de Artigo Cient{\'i}fico com abnTeX2},
Url = {http://www.abntex.net.br/},
Year = {2015},
Bdsk-Url-1 = {http://www.abntex.net.br/}}
@@ -65,7 +65,7 @@
Date-Added = {2013-01-15 00:05:34 +0000},
Date-Modified = {2015-04-27 22:43:18 +0000},
Organization = {Equipe abnTeX2},
- Title = {Modelo Can\^onico de Relat\'orio T\'ecnico e/ou Cient\'ifico com abnTeX2},
+ Title = {Modelo Can\^onico de Relat\'orio T\'ecnico e/ou Cient{\'i}fico com abnTeX2},
Url = {http://www.abntex.net.br/},
Year = {2015},
Bdsk-Url-1 = {http://www.abntex.net.br/}}
@@ -82,13 +82,13 @@
Bdsk-Url-1 = {http://www.abntex.net.br/}}
@mastersthesis{araujo2012,
- Address = {Bras\'ilia},
+ Address = {Bras{\'i}lia},
Author = {Lauro C\'esar Araujo},
Date-Added = {2013-01-09 11:04:42 +0000},
Date-Modified = {2013-01-09 11:04:42 +0000},
Month = {03},
- School = {Universidade de Bras\'ilia},
- Subtitle = {uma perspectiva de {A}rquitetura da {I}nforma{\c c}\~ao da {E}scola de {B}ras\'ilia},
+ School = {Universidade de Bras{\'i}lia},
+ Subtitle = {uma perspectiva de {A}rquitetura da {I}nforma{\c c}\~ao da {E}scola de {B}ras{\'i}lia},
Title = {Configura{\c c}\~ao},
Year = {2012}}
@@ -98,7 +98,7 @@
Date-Added = {2013-01-09 10:37:45 +0000},
Date-Modified = {2015-04-27 22:43:38 +0000},
Organization = {Equipe abnTeX2},
- Title = {O pacote abntex2cite: Estilos bibliogr{\'a}ficos compat{\'\i}veis com a ABNT NBR 6023},
+ Title = {O pacote abntex2cite: Estilos bibliogr{\'a}ficos compat{\'i}veis com a ABNT NBR 6023},
Url = {http://www.abntex.net.br/},
Year = {2015},
Bdsk-Url-1 = {http://www.abntex.net.br/}}
@@ -109,7 +109,7 @@
Date-Added = {2013-01-09 10:37:45 +0000},
Date-Modified = {2015-04-27 22:43:44 +0000},
Organization = {Equipe abnTeX2},
- Title = {O pacote abntex2cite: t{\'o}picos espec{\'\i}ficos da ABNT NBR 10520:2002 e o estilo bibliogr{\'a}fico alfab{\'e}tico (sistema autor-data)},
+ Title = {O pacote abntex2cite: t{\'o}picos espec{\'i}ficos da ABNT NBR 10520:2002 e o estilo bibliogr{\'a}fico alfab{\'e}tico (sistema autor-data)},
Url = {http://www.abntex.net.br/},
Year = {2015},
Bdsk-Url-1 = {http://www.abntex.net.br/}}
@@ -149,7 +149,7 @@
Date-Added = {2013-01-09 10:37:38 +0000},
Date-Modified = {2015-04-27 22:42:47 +0000},
Organization = {Equipe abnTeX2},
- Title = {A classe abntex2: Modelo can\^onico de trabalhos acad\^emicos brasileiros compat\'ivel com as normas ABNT NBR 14724:2011, ABNT NBR 6024:2012 e outras},
+ Title = {A classe abntex2: Modelo can\^onico de trabalhos acad\^emicos brasileiros compat{\'i}vel com as normas ABNT NBR 14724:2011, ABNT NBR 6024:2012 e outras},
Url = {http://www.abntex.net.br/},
Year = {2015},
Bdsk-Url-1 = {http://www.abntex.net.br/}}
@@ -291,8 +291,8 @@
Date-Added = {2012-04-23 11:35:13 +0000},
Date-Modified = {2012-04-23 11:35:13 +0000},
Keywords = {arquitetura da informa{\c c}\~ao},
- School = {Universidade de Bras\'ilia},
- Title = {Arquitetura da Informa{\c c}\~ao: aspectos epistemol\'ogicos, cient\'ificos e pr\'aticos.},
+ School = {Universidade de Bras{\'i}lia},
+ Title = {Arquitetura da Informa{\c c}\~ao: aspectos epistemol\'ogicos, cient{\'i}ficos e pr\'aticos.},
Type = {Disserta{\c c}\~ao de Mestrado},
Year = {2005}}
@@ -374,7 +374,7 @@
author = {{Wikimedia Commons}},
title = {File: {\normalfont LaTeX logo.svg}},
year = {2008},
- note = {Upload de EmilJ. Dispon\'ivel em: \url{https://upload.wikimedia.org/wikipedia/commons/9/92/LaTeX_logo.svg} -- acesso em 24 jan. 2019.}
+ note = {Upload de EmilJ. Dispon{\'i}vel em: \url{https://upload.wikimedia.org/wikipedia/commons/9/92/LaTeX_logo.svg} -- acesso em 24 jan. 2019.}
}
@misc{Castro2019,
@@ -383,7 +383,7 @@
howpublished = {\url{https://www.overleaf.com/latex/templates/modelo-de-livro-para-editora-unb/trznrgjcsyfg}},
month = {1},
year = {2019},
- note = {Dispon\'ivel como template no Overleaf}
+ note = {Dispon{\'i}vel como template no Overleaf}
}
@article{greenwade93,
diff --git a/macros/latex/contrib/unbtex/unbtex.cls b/macros/latex/contrib/unbtex/unbtex.cls
index 07bb157750..aa289ec887 100644
--- a/macros/latex/contrib/unbtex/unbtex.cls
+++ b/macros/latex/contrib/unbtex/unbtex.cls
@@ -1,8 +1,8 @@
%%
%% UnBTeX: A class for bachelor, master, and doctoral thesis at the
%% University of Brasilia (UnB), Brazil
-%% Version 1.4.3 2023/12/22
-%% Copyright (C) 2021-2023 by Henrique C. Ferreira <hcferreira@unb.br>
+%% Version 1.4.4 2024/01/05
+%% Copyright (C) 2021-2024 by Henrique C. Ferreira <hcferreira@unb.br>
%%
%% This class file may be distributed and/or modified under the conditions
%% of the LaTeX Project Public License, either version 1.3 of this license
@@ -22,7 +22,7 @@
%%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{unbtex}[2023/12/22 v1.4.3 Modelo da Universidade de Brasília baseado em abnTeX2]
+\ProvidesClass{unbtex}[2024/01/05 v1.4.4 Modelo da Universidade de Brasília baseado em abnTeX2]
% ---
% Repassa todos os parâmetros a classe abntex2,
@@ -53,9 +53,9 @@
% Pacotes de fontes tipográficas
% ---
\RequirePackage{stickstootext} % Fonte principal (Stix2)
-\RequirePackage[stickstoo,vvarbb]{newtxmath}
-\RequirePackage[scale=0.88]{tgheros} % Fonte sans serif
-\RequirePackage[scaled=1.03]{inconsolata} % Fonte monoespaçada
+\RequirePackage[stickstoo,vvarbb]{newtxmath}% Fonte matemática (Stix2)
+\RequirePackage[scale=0.88]{tgheros} % Fonte sans serif (TeX Gyre Heros)
+\RequirePackage[scale=1.03]{inconsolata} % Fonte monoespaçada
% ---
% ---
@@ -330,10 +330,13 @@
\theoremstyle{definition}
\mdfdefinestyle{defnSty}{hidealllines=true,backgroundcolor=azulunb!10}
\newmdtheoremenv[style=defnSty]{definition}{\dfname}[chapter]
-\newmdtheoremenv[style=defnSty]{assumption}{\asptname}[chapter]
-\newmdtheoremenv[style=defnSty]{example}{\epname}[chapter]
-\newmdtheoremenv[style=defnSty]{exercise}{\ecname}[chapter]
-\newmdtheoremenv[style=defnSty]{problem}{\pbname}[chapter]
+\newmdtheoremenv[style=defnSty]{assumption}{\aptname}[chapter]
+\newmdtheoremenv[style=defnSty]{axiom}{\axname}[chapter]
+\newmdtheoremenv[style=defnSty]{conjecture}{\cjcname}[chapter]
+\newmdtheoremenv[style=defnSty]{property}{\prpname}[chapter]
+\newmdtheoremenv[style=defnSty]{example}{\expname}[chapter]
+\newmdtheoremenv[style=defnSty]{exercise}{\excname}[chapter]
+\newmdtheoremenv[style=defnSty]{problem}{\prbname}[chapter]
\theoremstyle{remark}
\let\proof\relax
@@ -346,17 +349,22 @@
\let\endproof\relax
\newmdtheoremenv[linecolor=verdeunb,linewidth=1pt,hidealllines=false]{proof}{\proofname.}
\AtEndEnvironment{proof}{\hfill$\square$}
+\newmdtheoremenv[linecolor=azulunb,linewidth=1pt,hidealllines=false]{solution}{\sltname.}
\newcommand{\thmnameen}{
\newcommand{\thname}{Theorem}
\newcommand{\lmname}{Lemma}
\newcommand{\prname}{Proposition}
\newcommand{\crname}{Corollary}
-\newcommand{\asptname}{Assumption}
+\newcommand{\aptname}{Assumption}
\newcommand{\dfname}{Definition}
-\newcommand{\epname}{Example}
-\newcommand{\ecname}{Exercise}
-\newcommand{\pbname}{Problem}
+\newcommand{\axname}{Axiom}
+\newcommand{\cjcname}{Conjecture}
+\newcommand{\prpname}{Property}
+\newcommand{\expname}{Example}
+\newcommand{\excname}{Exercise}
+\newcommand{\prbname}{Problem}
+\newcommand{\sltname}{Solution}
\newcommand{\rmname}{Remark}
\renewcommand{\proofname}{Proof}
\renewcommand{\lstlistingname}{Code}
@@ -370,11 +378,15 @@
\newcommand{\lmname}{Lema}
\newcommand{\prname}{Proposição}
\newcommand{\crname}{Corolário}
+\newcommand{\aptname}{Hipótese}
\newcommand{\dfname}{Definição}
-\newcommand{\asptname}{Hipótese}
-\newcommand{\epname}{Exemplo}
-\newcommand{\ecname}{Exercício}
-\newcommand{\pbname}{Problema}
+\newcommand{\axname}{Axioma}
+\newcommand{\cjcname}{Conjectura}
+\newcommand{\prpname}{Propriedade}
+\newcommand{\expname}{Exemplo}
+\newcommand{\excname}{Exercício}
+\newcommand{\prbname}{Problema}
+\newcommand{\sltname}{Solução}
\newcommand{\rmname}{Observação}
\renewcommand{\proofname}{Demonstração}
\renewcommand{\lstlistingname}{Código}
diff --git a/macros/latex/contrib/unravel/README.md b/macros/latex/contrib/unravel/README.md
index 97a261e8ae..d9e74f09ed 100644
--- a/macros/latex/contrib/unravel/README.md
+++ b/macros/latex/contrib/unravel/README.md
@@ -26,9 +26,6 @@ step by step.
Some parts of TeX are not covered. In particular, category codes
are fixed for the whole argument of `\unravel` when it is read.
-This package requires up-to-date versions of the `l3kernel`,
-`l3packages` and `l3experimental` bundles.
-
The package is extracted by running `pdflatex unravel.ins`.
For the documentation, run `pdflatex unravel.dtx` twice.
diff --git a/macros/latex/contrib/unravel/unravel.dtx b/macros/latex/contrib/unravel/unravel.dtx
index d69e7a2552..b603c256c8 100644
--- a/macros/latex/contrib/unravel/unravel.dtx
+++ b/macros/latex/contrib/unravel/unravel.dtx
@@ -1,5 +1,5 @@
% \iffalse
-%% File: unravel.dtx Copyright (C) 2013, 2015, 2018-2019, 2021 Bruno Le Floch
+%% File: unravel.dtx Copyright (C) 2013, 2015, 2018-2019, 2021, 2024 Bruno Le Floch
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -23,9 +23,9 @@
%
% \title{The \textsf{unravel} package: \\
% watching TeX digest tokens\thanks{This
-% file has version number 0.3a, last revised 2021/05/11.}}
+% file has version number 0.3c, last revised 2024/01/05.}}
% \author{Bruno Le Floch}
-% \date{2021/05/11}
+% \date{2024/01/05}
%
% \maketitle
% \tableofcontents
@@ -208,9 +208,18 @@
% \end{function}
%
% \begin{function}{online}
-% Integer option determining where to write the output: terminal and
-% log if the option is positive, log only if the option is zero,
-% neither if the option is negative.
+% Integer option (default~$1$) determining where to write the output:
+% terminal and log if the option is positive, log only if the option
+% is zero, neither if the option is negative.
+% \end{function}
+%
+% \begin{function}{output-file}
+% Name of a file where the output is written instead of the log file.
+% Setting this option also sets \texttt{online} to zero. If
+% \texttt{online} is further modified to be positive then the output
+% is written to the terminal as well (hence inevitably to the log
+% file), while if it is made negative then the output is written
+% nowhere.
% \end{function}
%
% \begin{function}{prompt-input}
@@ -530,14 +539,9 @@
\expandafter \endgroup \@@_setup_latexe:
% \end{macrocode}
%
-% Load a few dependencies: \pkg{expl3}, \pkg{xparse}, \pkg{gtl}.
-% Load \pkg{l3str} if \pkg{expl3} is too old and does not define
-% \cs{str_range:nnn}. Otherwise loading \pkg{l3str} would give
-% an error.
+% Load the \pkg{gtl} dependency.
% \begin{macrocode}
-\RequirePackage{expl3,xparse}[2021/01/01]
-\RequirePackage{gtl}[2018/12/28]
-\csname cs_if_exist:cF\endcsname{str_range:nnn}{\RequirePackage{l3str}}
+\RequirePackage{gtl}[2024/01/04]
% \end{macrocode}
%
% Before loading \pkg{unravel}, restore catcodes, so that the implicit
@@ -554,7 +558,7 @@
{%
\csname @@_setup_restore:\endcsname
\ProvidesExplPackage
- {unravel} {2021/05/11} {0.3a} {Watching TeX digest tokens}%
+ {unravel} {2024/01/05} {0.3c} {Watching TeX digest tokens}%
\csname @@_setup_unravel:\endcsname
}%
% \end{macrocode}
@@ -661,26 +665,6 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{variable}{\l_@@_exp_tl}
-% \begin{macro}{\@@_exp_args:Nx, \@@_exp_args:NNx}
-% Low-level because \cs{exp_args:Nx} redefines an internal
-% \pkg{l3expan} variable which may be appearing in code that we debug.
-% \begin{macrocode}
-\tl_new:N \l_@@_exp_tl
-\cs_new_protected:Npn \@@_exp_args:Nx #1#2
- {
- \cs_set_nopar:Npx \l_@@_exp_tl { \exp_not:N #1 {#2} }
- \l_@@_exp_tl
- }
-\cs_new_protected:Npn \@@_exp_args:NNx #1#2#3
- {
- \cs_set_nopar:Npx \l_@@_exp_tl { \exp_not:N #1 \exp_not:N #2 {#3} }
- \l_@@_exp_tl
- }
-% \end{macrocode}
-% \end{macro}
-% \end{variable}
-%
% \subsubsection{Miscellanous helpers}
%
% \begin{macro}{\@@_tmp:w}
@@ -706,7 +690,7 @@
\cs_new_protected:Npn \@@_file_get_aux:wN ##1 #1 ##2
{
\group_end:
- \tl_set:Nx ##2
+ \tl_set:Ne ##2
{ \exp_not:o {##1} \exp_not:V \@@_everyeof:w }
}
}
@@ -771,7 +755,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_prompt_input:Nn #1#2
{
- \clist_gset:Nx #1
+ \clist_gset:Ne #1
{ \@@_prompt_input:w \prg_do_nothing: #2 , \q_@@_recursion_tail , }
}
\cs_new:Npn \@@_prompt_input:w #1 ,
@@ -941,7 +925,7 @@
{
\group_begin:
\char_set_active_eq:nN {#1} \scan_stop:
- \use:x
+ \use:e
{
\group_end:
\exp_not:n {#2} { \char_generate:nn {#1} { 13 } }
@@ -1023,7 +1007,7 @@
{ TF }
{
\group_begin:
- \@@_exp_args:Nx \char_set_lccode:nn
+ \exp_args:Ne \char_set_lccode:nn
{ ` \exp_args:No \str_head:n { \token_to_str:N #1 } }
{ ` Z }
\tex_lowercase:D { \tl_if_eq:nnTF {#1} } { Z }
@@ -1055,7 +1039,7 @@
{
\group_begin:
\@@_set_escapechar:n { 92 }
- \tl_set:Nx \l_@@_tmpa_tl
+ \tl_set:Ne \l_@@_tmpa_tl
{ \exp_args:No \str_tail:n { \token_to_str:N #1 } }
\tl_if_empty:NTF \l_@@_tmpa_tl
{
@@ -1141,7 +1125,7 @@
\cs_new_protected:Npn \@@_prev_input_gpush_gtl:N
{ \@@_prev_input_gpush_aux:NN G }
\cs_new_protected:Npn \@@_prev_input_gpush_aux:NN #1#2
- { \seq_gput_right:Nx \g_@@_prev_input_seq { #1 { \exp_not:o {#2} } } }
+ { \seq_gput_right:Ne \g_@@_prev_input_seq { #1 { \exp_not:o {#2} } } }
% \end{macrocode}
% \end{macro}
%
@@ -1172,7 +1156,7 @@
{
\token_if_eq_meaning:NNTF #1#3
{ \tl_set:Nn }
- { \msg_error:nnnnnn { unravel } { prev-input } {#1} {#3} }
+ { \@@_error:nnnnn { prev-input } {#1} {#3} }
#2
}
% \end{macrocode}
@@ -1183,13 +1167,13 @@
% {
% \@@_prev_input_silent:n,
% \@@_prev_input_silent:V,
-% \@@_prev_input_silent:x
+% \@@_prev_input_silent:e
% }
% \begin{macro}
% {
% \@@_prev_input:n,
% \@@_prev_input:V,
-% \@@_prev_input:x
+% \@@_prev_input:e
% }
% \begin{macrocode}
\cs_new_protected:Npn \@@_prev_input_silent:n #1
@@ -1198,17 +1182,13 @@
\tl_put_right:Nn \l_@@_prev_input_tl {#1}
\@@_prev_input_gpush:N \l_@@_prev_input_tl
}
-\cs_generate_variant:Nn \@@_prev_input_silent:n { V }
-\cs_new_protected:Npn \@@_prev_input_silent:x
- { \@@_exp_args:Nx \@@_prev_input_silent:n }
+\cs_generate_variant:Nn \@@_prev_input_silent:n { V , e }
\cs_new_protected:Npn \@@_prev_input:n #1
{
\@@_prev_input_silent:n {#1}
- \@@_print_action:x { \tl_to_str:n {#1} }
+ \@@_print_action:e { \tl_to_str:n {#1} }
}
-\cs_generate_variant:Nn \@@_prev_input:n { V }
-\cs_new_protected:Npn \@@_prev_input:x
- { \@@_exp_args:Nx \@@_prev_input:n }
+\cs_generate_variant:Nn \@@_prev_input:n { V , e }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1248,7 +1228,7 @@
{
\@@_prev_input_gpop:N \l_@@_head_tl
\@@_prev_input_gpop:N \l_@@_tmpa_tl
- \tl_set:Nx #4 { #1 { \l_@@_tmpa_tl #2 \l_@@_head_tl #3 } }
+ \tl_set:Ne #4 { #1 { \l_@@_tmpa_tl #2 \l_@@_head_tl #3 } }
}
% \end{macrocode}
% \end{macro}
@@ -1258,6 +1238,19 @@
%
% \subsubsection{User interaction}
%
+% \begin{variable}{\g_@@_iow, \g_@@_current_output_file_tl}
+% The stream is used to implement the \texttt{output-file} option. At
+% any given time it points to the file named
+% \cs{g_@@_current_output_file_tl}, unless that is empty, in which
+% case the stream is closed. The idea is that we do not want to close
+% the file in between different \cs{unravel} calls since file writing
+% is not additive in \TeX{}.
+% \begin{macrocode}
+\iow_new:N \g_@@_iow
+\tl_new:N \g_@@_current_output_file_tl
+% \end{macrocode}
+% \end{variable}
+%
% \begin{variable}{\g_@@_before_print_state_tl, \g_@@_before_prompt_tl}
% Code to run before printing the state or before the prompt.
% \begin{macrocode}
@@ -1279,12 +1272,21 @@
% \end{macrocode}
% \end{variable}
%
+% \begin{variable}{\g_@@_current_online_int}
+% Temporary value replacing \cs{g_@@_online_int} and that can be set
+% through the prompt.
+% \begin{macrocode}
+\int_new:N \g_@@_current_online_int
+% \end{macrocode}
+% \end{variable}
+%
% \begin{variable}
% {
% \g_@@_default_explicit_prompt_bool , \g_@@_explicit_prompt_bool ,
% \g_@@_default_internal_debug_bool , \g_@@_internal_debug_bool ,
% \g_@@_default_number_steps_bool , \g_@@_number_steps_bool ,
% \g_@@_default_online_int , \g_@@_online_int ,
+% \g_@@_default_output_file_tl , \g_@@_output_file_tl ,
% \g_@@_default_prompt_input_clist , \g_@@_prompt_input_clist ,
% \g_@@_default_trace_assigns_bool , \g_@@_trace_assigns_bool ,
% \g_@@_default_trace_expansion_bool , \g_@@_trace_expansion_bool ,
@@ -1301,6 +1303,7 @@
\bool_new:N \g_@@_default_internal_debug_bool
\bool_new:N \g_@@_default_number_steps_bool
\int_new:N \g_@@_default_online_int
+\tl_new:N \g_@@_default_output_file_tl
\clist_new:N \g_@@_default_prompt_input_clist
\bool_new:N \g_@@_default_trace_assigns_bool
\bool_new:N \g_@@_default_trace_expansion_bool
@@ -1316,6 +1319,7 @@
\bool_new:N \g_@@_internal_debug_bool
\bool_new:N \g_@@_number_steps_bool
\int_new:N \g_@@_online_int
+\tl_new:N \g_@@_output_file_tl
\clist_new:N \g_@@_prompt_input_clist
\bool_new:N \g_@@_trace_assigns_bool
\bool_new:N \g_@@_trace_expansion_bool
@@ -1333,7 +1337,7 @@
%
% \begin{variable}{\g_@@_action_text_str}
% Text describing the action, displayed at each step. This should
-% only be altered through \cs{@@_set_action_text:x}, which sets the
+% only be altered through \cs{@@_set_action_text:e}, which sets the
% escape character as appropriate before converting the argument to a
% string.
% \begin{macrocode}
@@ -1478,12 +1482,13 @@
% \begin{variable}{\l_@@_defined_tl, \l_@@_defining_tl}
% The token that is defined by the prefixed command (such as
% \tn{chardef} or \tn{futurelet}), and the code to define it. We do
-% not use the the previous-input sequence to store that code: rather,
+% not use the the previous-input sequence to store that code because
% this sequence contains a string representation of the code, which is
-% not suitable for the definition. This is safe, as definitions
-% cannot be nested. This is needed for expanding assignments, as
-% expansion should be shown to the user, but then later should not be
-% performed again when defining.
+% not suitable for the definition. Using a single variable here is
+% safe, as definitions cannot be nested. This is needed for expanding
+% assignments, as expansion should be shown to the user, but then
+% later should not be performed again when defining. It is also
+% helpful in tracking some register assignments.
% \begin{macrocode}
\tl_new:N \l_@@_defined_tl
\tl_new:N \l_@@_defining_tl
@@ -1531,8 +1536,8 @@
% Used to determine if a macro has simple parameters or not.
% \begin{macrocode}
\group_begin:
- \cs_set:Npx \@@_tmp:w #1 { \c_hash_str #1 }
- \tl_const:Nx \c_@@_parameters_tl
+ \cs_set_nopar:Npe \@@_tmp:w #1 { \c_hash_str #1 }
+ \tl_const:Ne \c_@@_parameters_tl
{ ^ \tl_map_function:nN { 123456789 } \@@_tmp:w }
\group_end:
% \end{macrocode}
@@ -1612,7 +1617,7 @@
\tl_const:Nn \c_@@_over_tl { / }
\tl_const:Nn \c_@@_lq_tl { ` }
\tl_const:Nn \c_@@_rq_tl { ' }
-\tl_const:Nn \c_@@_dq_tl { " }
+\tl_const:Nn \c_@@_dq_tl { " } %"
\tl_const:Nn \c_@@_lp_tl { ( }
\tl_const:Nn \c_@@_rp_tl { ) }
\tl_const:Nn \c_@@_eq_tl { = }
@@ -1624,7 +1629,7 @@
% \begin{variable}{\c_@@_frozen_relax_gtl}
% \TeX{}'s |frozen_relax|, inserted by \cs{@@_insert_relax:}.
% \begin{macrocode}
-\gtl_const:Nx \c_@@_frozen_relax_gtl { \if_int_compare:w 0 = 0 \fi: }
+\gtl_const:Ne \c_@@_frozen_relax_gtl { \if_int_compare:w 0 = 0 \fi: }
% \end{macrocode}
% \end{variable}
%
@@ -1686,7 +1691,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_tex_primitive:nnn #1#2#3
{
- \tl_const:cx { c_@@_tex_#1_tl }
+ \tl_const:ce { c_@@_tex_#1_tl }
{ { \@@_tex_use:n {#2} } {#3} }
}
\cs_new_protected:Npn \@@_tex_primitive_pdf:nnn #1#2#3
@@ -2426,7 +2431,7 @@
\@@_tex_primitive:nnn { expanded } { convert } { 34 }
\sys_if_engine_luatex:T
{ \@@_tex_primitive:nnn { luaescapestring } { convert } { 35 } }
-\sys_if_engine_xetex:T
+\bool_if:nT { \sys_if_engine_xetex_p: || \sys_if_engine_ptex_p: || \sys_if_engine_uptex_p: }
{
\@@_tex_primitive:nnn { Ucharcat } { convert } { 40 }
}
@@ -2483,7 +2488,7 @@
\gtl_head_do:NN \l_@@_head_gtl \@@_get_next_aux:w
\gtl_if_tl:NTF \l_@@_head_gtl
{
- \tl_set:Nx \l_@@_head_tl
+ \tl_set:Ne \l_@@_head_tl
{ \gtl_head:N \l_@@_head_gtl }
\token_if_eq_meaning:NNT
\l_@@_head_token \@@_special_relax:
@@ -2522,7 +2527,7 @@
\tl_if_eq:onTF { \l_@@_head_tl } { \@@_unravel_marker: }
{ \@@_get_next_marker: }
{
- \@@_exp_args:NNx \use:nn \@@_notexpanded_test:w
+ \exp_args:NNe \use:nn \@@_notexpanded_test:w
{ \scan_stop: \exp_after:wN \cs_to_str:N \l_@@_head_tl Z }
\q_mark \@@_notexpanded_expand:n
#1 Z \q_mark \use_none:n
@@ -2533,12 +2538,12 @@
##1 #1 ##2 Z \q_mark ##3##4 \q_stop
{ ##3 {##2} }
}
-\exp_args:Nx \@@_tmp:w { \scan_stop: \tl_to_str:n { notexpanded: } }
+\exp_args:Ne \@@_tmp:w { \scan_stop: \tl_to_str:n { notexpanded: } }
\group_begin:
\char_set_catcode_active:n { 0 }
\cs_new_protected:Npn \@@_notexpanded_expand:n #1
{
- \@@_exp_args:Nx \tl_if_empty:nTF { \str_tail:n {#1} }
+ \exp_args:Ne \tl_if_empty:nTF { \str_tail:n {#1} }
{
\group_begin:
\char_set_lccode:nn { 0 } { `#1 }
@@ -2571,14 +2576,14 @@
{
\@@_get_next:
\tl_if_eq:onTF \l_@@_head_tl { \@@:nn }
- { \@@_error:nxxxx { nested-unravel } { } { } { } { } }
- { \@@_error:nxxxx { internal } { marker~unknown } { } { } { } }
+ { \@@_error:neeee { nested-unravel } { } { } { } { } }
+ { \@@_error:neeee { internal } { marker~unknown } { } { } { } }
\@@_input_gpop_item:NF \l_@@_argi_tl
- { \@@_error:nxxxx { internal } { marker~1 } { } { } { } }
+ { \@@_error:neeee { internal } { marker~1 } { } { } { } }
\@@_input_gpop_item:NF \l_@@_argii_tl
- { \@@_error:nxxxx { internal } { marker~2 } { } { } { } }
+ { \@@_error:neeee { internal } { marker~2 } { } { } { } }
\exp_args:Nno \keys_set:nn { unravel } \l_@@_argi_tl
- \@@_exp_args:Nx \@@_back_input:n
+ \exp_args:Ne \@@_back_input:n
{ \exp_not:N \exp_not:n { \exp_not:o \l_@@_argii_tl } }
\@@_get_next:
}
@@ -2641,22 +2646,22 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_set_cmd_aux_meaning:
{
- \tl_set:Nx \l_@@_head_meaning_tl
+ \tl_set:Ne \l_@@_head_meaning_tl
{
\exp_after:wN \@@_strip_escape:w
\token_to_meaning:N \l_@@_head_token
\tl_to_str:n { : }
}
- \tl_set:Nx \l_@@_head_meaning_tl
+ \tl_set:Ne \l_@@_head_meaning_tl
{
\exp_after:wN \@@_set_cmd_aux_meaning:w
\l_@@_head_meaning_tl \q_stop
}
}
-\use:x
+\use:e
{
\cs_new:Npn \exp_not:N \@@_set_cmd_aux_meaning:w
- ##1 \token_to_str:N : ##2 \exp_not:N \q_stop {##1}
+ #1 \token_to_str:N : #2 \exp_not:N \q_stop {#1}
}
% \end{macrocode}
% \end{macro}
@@ -2714,7 +2719,7 @@
{ \tl_to_str:n { xpandable~luacall } }
{ }
{
- \@@_error:nxxxx { unknown-primitive }
+ \@@_error:neeee { unknown-primitive }
{ \l_@@_head_meaning_tl } { } { } { }
}
}
@@ -2724,7 +2729,7 @@
{
\exp_last_unbraced:NV \@@_set_cmd_aux_primitive:nn
\c_@@_tex_relax_tl
- \@@_error:nxxxx { unknown-primitive }
+ \@@_error:neeee { unknown-primitive }
{ \l_@@_head_meaning_tl } { } { } { }
}
}
@@ -2777,7 +2782,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_set_cmd_aux_numeric:
{
- \tl_set:Nx \l_@@_tmpa_tl
+ \tl_set:Ne \l_@@_tmpa_tl
{
\exp_after:wN \@@_set_cmd_aux_numeric:N
\l_@@_head_meaning_tl + 0
@@ -2831,13 +2836,13 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_set_cmd_aux_char:
{
- \tl_set:Nx \l_@@_head_meaning_tl
+ \tl_set:Ne \l_@@_head_meaning_tl
{ \token_to_meaning:N \l_@@_head_token }
\token_if_eq_catcode:NNT \l_@@_head_token \c_catcode_other_token
{ \tl_set:Nn \l_@@_head_meaning_tl { other~ } }
\exp_after:wN \@@_set_cmd_aux_char:w
\l_@@_head_meaning_tl \q_stop
- \@@_exp_args:NNx \int_set:Nn \l_@@_head_char_int
+ \exp_args:NNe \int_set:Nn \l_@@_head_char_int
{ ` \@@_token_to_char:N \l_@@_head_token }
}
\cs_new_protected:Npn \@@_set_cmd_aux_char:w #1 ~ #2 \q_stop
@@ -2897,7 +2902,7 @@
% \begin{macro}{\@@_input_split:}
% If the input is completely flat, and is a token list starting with
% an |N|-type token, try to unflatten it by splitting at each
-% occurence of that first character
+% occurence of that first token.
% \begin{macrocode}
\cs_new_protected:Npn \@@_input_split:
{
@@ -2913,8 +2918,8 @@
{
\gtl_if_head_is_N_type:NT #1
{
- \tl_set:Nx \l_@@_input_tmpa_tl { \gtl_left_tl:N #1 }
- \@@_exp_args:NNx \use:nn
+ \tl_set:Ne \l_@@_input_tmpa_tl { \gtl_left_tl:N #1 }
+ \exp_args:NNe \use:nn
\@@_input_split_auxii:N
{ \tl_head:N \l_@@_input_tmpa_tl }
}
@@ -2987,7 +2992,7 @@
{
\int_compare:nNnF {#1} = 0
{
- \tl_set:Nx \l_@@_input_get_left_tl
+ \tl_set:Ne \l_@@_input_get_left_tl
{ \gtl_left_tl:c { g_@@_input_#1_gtl } }
\tl_concat:NNN #2 #2 \l_@@_input_get_left_tl
\gtl_if_tl:cT { g_@@_input_#1_gtl }
@@ -3095,7 +3100,7 @@
{
\gtl_if_tl:NTF #1
{
- \tl_put_right:Nx #2 { \gtl_left_tl:N #1 }
+ \tl_put_right:Ne #2 { \gtl_left_tl:N #1 }
\gtl_gclear:N #1
\int_gdecr:N \g_@@_input_int
\@@_input_gpop_tl_aux:N #2
@@ -3105,7 +3110,7 @@
{ \int_compare:nNnTF { \gtl_extra_end:N #1 } > 0 }
{ \use_i:nn }
{
- \tl_put_right:Nx #2 { \gtl_left_tl:N #1 }
+ \tl_put_right:Ne #2 { \gtl_left_tl:N #1 }
\gtl_gpop_left_tl:N #1
}
{
@@ -3117,7 +3122,26 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_back_input:n, \@@_back_input:x}
+% \begin{macro}[TF]{\@@_input_if_head_is_group_begin:}
+% Call \cs{@@_input_if_empty:TF} to remove empty levels from the input
+% stack, then check if the left-most non-empty level starts with an
+% explicit begin-group character token.
+% \begin{macrocode}
+\prg_new_protected_conditional:Npnn \@@_input_if_head_is_group_begin: { T , F , TF }
+ {
+ \@@_input_if_empty:TF
+ { \prg_return_false: }
+ {
+ \exp_args:Nc \gtl_if_head_is_group_begin:NTF
+ { g_@@_input_ \int_use:N \g_@@_input_int _gtl }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_back_input:n, \@@_back_input:V, \@@_back_input:o}
% Insert a token list back into the input. Use \cs{gtl_gclear_new:c}
% to define the gtl variable if necessary: this happens whenever a
% new largest value of \cs{g_@@_input_int} is reached.
@@ -3129,8 +3153,6 @@
\gtl_gset:cn { g_@@_input_ \int_use:N \g_@@_input_int _gtl }
}
\cs_generate_variant:Nn \@@_back_input:n { V , o }
-\cs_new_protected:Npn \@@_back_input:x
- { \@@_exp_args:Nx \@@_back_input:n }
% \end{macrocode}
% \end{macro}
%
@@ -3140,7 +3162,7 @@
\cs_new_protected:Npn \@@_back_input_gtl:N #1
{
\gtl_if_tl:NTF #1
- { \@@_back_input:x { \gtl_left_tl:N #1 } }
+ { \exp_args:Ne \@@_back_input:n { \gtl_left_tl:N #1 } }
{
\gtl_gconcat:cNc
{ g_@@_input_ \int_use:N \g_@@_input_int _gtl }
@@ -3166,10 +3188,10 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_back_input_tl_o:
{
- \tl_set:Nx \l_@@_tmpa_tl
+ \tl_set:Ne \l_@@_tmpa_tl
{ \exp_args:NV \exp_not:o \l_@@_head_tl }
\@@_back_input:V \l_@@_tmpa_tl
- \@@_print_expansion:x
+ \@@_print_expansion:e
{ \tl_to_str:N \l_@@_head_tl = \tl_to_str:N \l_@@_tmpa_tl }
}
% \end{macrocode}
@@ -3228,7 +3250,7 @@
% \@@_macro_replacement:N
% }
% \begin{macrocode}
-\use:x
+\use:e
{
\exp_not:n { \cs_new:Npn \@@_macro_split_do:NN #1 }
{
@@ -3258,20 +3280,22 @@
% \@@_macro_call_safe:,
% \@@_macro_call_quick:,
% \@@_macro_call_quick_loop:NNN,
+% \@@_macro_call_quick_loop:NN,
% \@@_macro_call_quick_runaway:Nw,
% }
% Macros are simply expanded once. We cannot determine precisely
% which tokens a macro will need for its parameters, but we know that
% it must form a balanced token list. Thus we can be safe by
% extracting the longest balanced prefix in the input and working with
-% that.
+% that. We need to check if the argument was braced, to improve the
+% error recovery for a non-\tn{long} macro receiving \tn{par}.
% \begin{macrocode}
\cs_new_protected:Npn \@@_macro_call:
{
\bool_if:NTF \g_@@_speedup_macros_bool
{
- \tl_set:Nx \l_@@_tmpa_tl
- {^ \exp_after:wN \@@_macro_parameter:N \l_@@_head_tl }
+ \tl_set:Ne \l_@@_tmpa_tl
+ { ^ \exp_after:wN \@@_macro_parameter:N \l_@@_head_tl }
\@@_tl_if_in:ooTF \c_@@_parameters_tl \l_@@_tmpa_tl
{ \@@_macro_call_quick: } { \@@_macro_call_safe: }
}
@@ -3292,16 +3316,23 @@
\cs_new_protected:Npn \@@_macro_call_quick_loop:NNN #1#2#3
{
\use_none:n #2
+ \@@_input_if_head_is_group_begin:TF
+ { \@@_macro_call_quick_loop:NN \prg_do_nothing: }
+ { \@@_macro_call_quick_loop:NN \use:n }
+ #3
+ }
+\cs_new_protected:Npn \@@_macro_call_quick_loop:NN #1#2
+ {
\@@_input_gpop_item:NF \l_@@_tmpa_tl
- { \@@_macro_call_quick_runaway:Nw #3 }
- \tl_put_right:Nx \l_@@_head_tl
- { { \exp_not:V \l_@@_tmpa_tl } }
+ { \@@_macro_call_quick_runaway:Nw #2 }
+ \tl_put_right:Ne \l_@@_head_tl
+ { #1 { \exp_not:V \l_@@_tmpa_tl } }
\@@_macro_call_quick_loop:NNN
- #3
+ #2
}
\cs_new_protected:Npn \@@_macro_call_quick_runaway:Nw #1#2 \q_stop
{
- \@@_error:nxxxx { runaway-macro-parameter }
+ \@@_error:neeee { runaway-macro-parameter }
{ \tl_to_str:N \l_@@_head_tl } { \tl_to_str:n {#1} } { } { }
}
% \end{macrocode}
@@ -3337,7 +3368,7 @@
\bool_if:NT \g_@@_internal_debug_bool
{
\@@_set_cmd:
- \@@_exp_args:Nx \iow_term:n { Exp:~\int_to_arabic:n { \l_@@_head_cmd_int } }
+ \exp_args:Ne \iow_term:n { Exp:~\int_to_arabic:n { \l_@@_head_cmd_int } }
}
\token_if_macro:NTF \l_@@_head_token
{ \@@_macro_call: }
@@ -3362,7 +3393,7 @@
{
\cs_if_exist_use:cF
{ @@_expandable_ \int_use:N \l_@@_head_cmd_int : }
- { \@@_error:nxxxx { internal } { expandable } { } { } { } }
+ { \@@_error:neeee { internal } { expandable } { } { } { } }
}
{
\@@_set_cmd_aux_unknown:
@@ -3570,7 +3601,7 @@
\quark_if_recursion_tail_stop_do:nn {#2}
{ \@@_scan_keyword_true: }
\quark_if_recursion_tail_stop_do:nn {#3}
- { \@@_error:nxxxx { internal } { odd-keyword-length } { } { } { } }
+ { \@@_error:neeee { internal } { odd-keyword-length } { } { } { } }
\@@_get_x_next:
\@@_scan_keyword_test:NNTF #2#3
{
@@ -3605,7 +3636,7 @@
\cs_new_protected:Npn \@@_scan_keyword_true:
{
\@@_prev_input_gpop_gtl:N \l_@@_tmpb_gtl
- \@@_prev_input:x { \gtl_to_str:N \l_@@_tmpb_gtl }
+ \@@_prev_input:e { \gtl_to_str:N \l_@@_tmpb_gtl }
\prg_return_true:
}
\cs_new_protected:Npn \@@_scan_keyword_false:w
@@ -3773,7 +3804,7 @@
}
\int_compare:nNnTF {#3} < { 4 }
{ \@@_thing_use_get:nnNN {#1} {#3} \l_@@_head_tl \l_@@_tmpa_tl }
- { \tl_set:Nx \l_@@_tmpa_tl { \@@_the:w \l_@@_head_tl } }
+ { \tl_set:Ne \l_@@_tmpa_tl { \@@_the:w \l_@@_head_tl } }
\@@_rescan_something_internal_auxii:Vn \l_@@_tmpa_tl {#1}
\@@_break_point:
\int_compare:nNnT {#3} < { 4 } { \@@_print_action: }
@@ -3782,7 +3813,7 @@
{
\@@_prev_input_silent:n {#1}
\@@_set_action_text:
- \@@_set_action_text:x
+ \@@_set_action_text:e
{ \g_@@_action_text_str \use:n { ~ => ~ } \tl_to_str:n {#1} }
\int_gset:Nn \g_@@_val_level_int {#2}
}
@@ -3796,8 +3827,9 @@
% This expands to a digit (the level generated by whatever token is
% the current |head|), followed by some code to fetch necessary
% operands. In most cases, this can be done by simply looking at the
-% |cmd| integer, but for |last_item|, |set_aux| and |register|, the level of the
-% token depends on the |char| integer. When the token is not allowed
+% |cmd| integer, but for |last_item|, |set_aux|, |set_shape| and
+% |register|, the level of the token, or what has to be scanned,
+% depends on the |char| integer. When the token is not allowed
% after \tn{the} (or at any other position where
% \cs{@@_rescan_something_internal:n} is called), the resulting level
% is~$8$, large enough so that the main function knows it is
@@ -3823,7 +3855,7 @@
{ 81 } { 1 } % set_page_dimen
{ 82 } { 0 } % set_page_int
{ 83 } { 1 \@@_scan_int: } % set_box_dimen
- { 84 } { 0 \@@_scan_int: } % set_shape
+ { 84 } { \@@_thing_set_shape: } % set_shape
{ 85 } { 0 \@@_scan_int: } % def_code
{ 86 } { 4 \@@_scan_int: } % def_family
{ 87 } { 4 } % set_font
@@ -3836,6 +3868,8 @@
}
\cs_new:Npn \@@_thing_set_aux:
{ \int_compare:nNnTF \l_@@_head_char_int = { 1 } { 1 } { 0 } }
+\cs_new:Npn \@@_thing_set_shape:
+ { \int_compare:nNnTF \l_@@_head_char_int = 0 { 0 } { 0 \@@_scan_int: } }
\cs_new:Npn \@@_thing_last_item:
{
\int_compare:nNnTF \l_@@_head_char_int < { 26 }
@@ -3910,7 +3944,7 @@
{
\int_compare:nNnT {#1} = { 3 }
{ \@@_tex_error:nV { incompatible-units } #3 }
- \tl_set:Nx #4
+ \tl_set:Ne #4
{
\int_case:nn { \int_min:nn {#1} {#2} }
{
@@ -3924,12 +3958,12 @@
{
\int_case:nnF {#1}
{
- { 0 } { \tl_set:Nx #4 { \int_eval:n {#3} } }
- { 3 } { \tl_set:Nx #4 { \muskip_eval:n {#3} } }
+ { 0 } { \tl_set:Ne #4 { \int_eval:n {#3} } }
+ { 3 } { \tl_set:Ne #4 { \muskip_eval:n {#3} } }
}
{
\@@_tex_error:nV { incompatible-units } #3
- \tl_set:Nx #4 { \muskip_eval:n { \tex_gluetomu:D #3 } }
+ \tl_set:Ne #4 { \muskip_eval:n { \tex_gluetomu:D #3 } }
}
}
}
@@ -3950,7 +3984,7 @@
\cs_new_protected:Npn \@@_scan_expr_op:NN #1#2
{
\@@_get_x_non_blank:
- \tl_case:NnF \l_@@_head_tl
+ \token_case_meaning:NnF \l_@@_head_tl
{
\c_@@_plus_tl
{
@@ -4049,7 +4083,7 @@
}
\cs_new_protected:Npn \@@_scan_int_char:
{
- \tl_case:NnF \l_@@_head_tl
+ \token_case_meaning:NnF \l_@@_head_tl
{
\c_@@_lq_tl { \@@_scan_int_lq: }
\c_@@_rq_tl
@@ -4062,7 +4096,7 @@
{
\@@_prev_input:V \l_@@_head_tl
\@@_get_x_next:
- \@@_scan_int_explicit:Nn \c_false_bool { " }
+ \@@_scan_int_explicit:Nn \c_false_bool { " } % "
}
}
{ \@@_scan_int_explicit:Nn \c_false_bool { } }
@@ -4072,13 +4106,13 @@
\@@_get_next:
\@@_gtl_if_head_is_definable:NF \l_@@_head_gtl
{
- \tl_set:Nx \l_@@_head_tl
+ \tl_set:Ne \l_@@_head_tl
{ \@@_token_to_char:N \l_@@_head_token }
}
- \tl_set:Nx \l_@@_tmpa_tl
+ \tl_set:Ne \l_@@_tmpa_tl
{ \int_eval:n { \exp_after:wN ` \l_@@_head_tl } }
\@@_prev_input_silent:V \l_@@_tmpa_tl
- \@@_print_action:x
+ \@@_print_action:e
{ ` \gtl_to_str:N \l_@@_head_gtl = \l_@@_tmpa_tl }
\@@_skip_optional_space:
}
@@ -4314,7 +4348,7 @@
\@@_gtl_if_head_is_definable:NTF \l_@@_head_gtl
{ \@@_back_input: }
{
- \tl_set:Nx \l_@@_tmpa_tl
+ \tl_set:Ne \l_@@_tmpa_tl
{ \@@_token_to_char:N \l_@@_head_token }
\tl_if_eq:NNT \l_@@_tmpa_tl \c_@@_dq_tl
{
@@ -4363,7 +4397,7 @@
\@@_prev_input_gpush:
\@@_scan_toks:NN \c_false_bool \c_true_bool
\@@_prev_input_gpop:N \l_@@_tmpa_tl
- \@@_prev_input_silent:x
+ \@@_prev_input_silent:e
{ { \exp_after:wN \tl_to_str:n \l_@@_tmpa_tl } }
}
% \end{macrocode}
@@ -4376,7 +4410,7 @@
\@@_prev_input_gpush:
\@@_scan_toks:NN \c_false_bool \c_true_bool
\@@_prev_input_gpop:N \l_@@_tmpa_tl
- \@@_prev_input_silent:x
+ \@@_prev_input_silent:e
{ { \exp_not:N \exp_not:n \exp_not:V \l_@@_tmpa_tl } }
}
% \end{macrocode}
@@ -4440,7 +4474,7 @@
\@@_error:nnnnn { runaway-text } { } { } { } { }
\@@_exit_hard:w
}
- \tl_set:Nx \l_@@_head_tl { { \exp_not:V \l_@@_head_tl } }
+ \tl_set:Ne \l_@@_head_tl { { \exp_not:V \l_@@_head_tl } }
\bool_if:NT #1
{ \tl_put_right:NV \l_@@_defining_tl \l_@@_head_tl }
\@@_prev_input_silent:V \l_@@_head_tl
@@ -4467,7 +4501,7 @@
\@@_prev_input_gtl:N \l_@@_head_gtl
\@@_scan_group_x:n { 1 }
\@@_prev_input_gpop_gtl:N \l_@@_tmpb_gtl
- \@@_prev_input_silent:x
+ \@@_prev_input_silent:e
{ \gtl_left_tl:N \l_@@_tmpb_gtl }
}
}
@@ -4498,7 +4532,7 @@
}
{
\@@_prev_input_silent:V \l_@@_head_tl
- \tl_put_right:Nx \l_@@_defining_tl
+ \tl_put_right:Ne \l_@@_defining_tl
{ \exp_not:N \exp_not:N \exp_not:V \l_@@_head_tl }
\@@_scan_group_xdef:n {#1}
}
@@ -4625,7 +4659,7 @@
\@@_back_input:
\@@_error:nnnnn { missing-box } { } { } { } { }
\@@_prev_input_gpop:N \l_@@_head_tl
- \@@_print_action:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_head_tl }
}
% \end{macrocode}
% \end{macro}
@@ -4675,7 +4709,7 @@
{ \@@_prepare_mag: }
\tl_use:N \l_@@_head_tl \scan_stop:
\gtl_gput_right:NV \g_@@_output_gtl \l_@@_head_tl
- \@@_print_action:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_head_tl }
}
}
% \end{macrocode}
@@ -4698,7 +4732,7 @@
\@@_back_input:
\@@_error:nnnnn { improper-leaders } { } { } { } { }
\@@_prev_input_gpop:N \l_@@_head_tl
- \@@_print_action:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_head_tl }
}
}
% \end{macrocode}
@@ -4729,7 +4763,7 @@
{ \@@_box_hook:N \tex_everyvbox:D }
\@@_scan_spec:
\@@_prev_input_gpop:N \l_@@_head_tl
- \@@_set_action_text:x
+ \@@_set_action_text:e
{ \tl_to_str:N \l_@@_head_tl \iow_char:N \{ }
\seq_push:Nf \l_@@_leaders_box_seq
{ \bool_if:NTF #1 { \mode_if_vertical:TF { v } { h } } { Z } }
@@ -4755,7 +4789,7 @@
\str_if_eq:eeF
{ \tl_head:N \l_@@_tmpa_tl } { \exp_not:N \@@_box_hook:w }
{
- \@@_exp_args:Nx #1
+ \exp_args:Ne #1
{
\exp_not:n { \@@_box_hook:w \prg_do_nothing: }
\exp_not:V #1
@@ -4768,7 +4802,7 @@
\gtl_clear:N \l_@@_after_group_gtl
\@@_print_action:
\@@_back_input:o {##1}
- \@@_set_action_text:x
+ \@@_set_action_text:e
{ \token_to_meaning:N #1 = \tl_to_str:o {##1} }
\tl_if_empty:oF {##1} { \@@_print_action: }
}
@@ -4812,33 +4846,31 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_char:n, \@@_char:V, \@@_char:x}
+% \begin{macro}{\@@_char:n, \@@_char:V, \@@_char:e}
% \begin{macrocode}
\cs_new_protected:Npn \@@_char:n #1
{
\tex_char:D #1 \scan_stop:
\@@_charcode_if_safe:nTF {#1}
{
- \tl_set:Nx \l_@@_tmpa_tl { \char_generate:nn {#1} { 12 } }
+ \tl_set:Ne \l_@@_tmpa_tl { \char_generate:nn {#1} { 12 } }
\gtl_gput_right:NV \g_@@_output_gtl \l_@@_tmpa_tl
- \@@_print_action:x { \tl_to_str:N \l_@@_tmpa_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_tmpa_tl }
}
{
- \tl_set:Nx \l_@@_tmpa_tl
+ \tl_set:Ne \l_@@_tmpa_tl
{ \exp_not:N \char \int_eval:n {#1} ~ }
\gtl_gput_right:NV \g_@@_output_gtl \l_@@_tmpa_tl
- \@@_print_action:x
+ \@@_print_action:e
{ " \char_generate:nn {#1} { 12 } " = \tl_to_str:N \l_@@_tmpa_tl }
}
}
-\cs_generate_variant:Nn \@@_char:n { V }
-\cs_new_protected:Npn \@@_char:x
- { \@@_exp_args:Nx \@@_char:n }
+\cs_generate_variant:Nn \@@_char:n { V , e }
% \end{macrocode}
% \end{macro}
%
% \begin{macro}
-% {\@@_char_in_mmode:n, \@@_char_in_mmode:V, \@@_char_in_mmode:x}
+% {\@@_char_in_mmode:n, \@@_char_in_mmode:V, \@@_char_in_mmode:e}
% \begin{macrocode}
\cs_new_protected:Npn \@@_char_in_mmode:n #1
{
@@ -4847,30 +4879,27 @@
{ % math active
\@@_active_do:nn {#1} { \gtl_set:Nn \l_@@_head_gtl }
\@@_back_input:
- \@@_print_action:x
+ \@@_print_action:e
{ \char_generate:nn {#1} { 12 } ~ active }
}
{ \@@_char:n {#1} }
}
-\cs_generate_variant:Nn \@@_char_in_mmode:n { V }
-\cs_new_protected:Npn \@@_char_in_mmode:x
- { \@@_exp_args:Nx \@@_char_in_mmode:n }
+\cs_generate_variant:Nn \@@_char_in_mmode:n { V , e }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_mathchar:n, \@@_mathchar:x}
+% \begin{macro}{\@@_mathchar:n, \@@_mathchar:e}
% ^^A todo: \omathchar support
% \begin{macrocode}
\cs_new_protected:Npn \@@_mathchar:n #1
{
\tex_mathchar:D #1 \scan_stop:
- \tl_set:Nx \l_@@_tmpa_tl
- { \exp_not:N \mathchar " \int_to_hex:n {#1} ~ }
+ \tl_set:Ne \l_@@_tmpa_tl
+ { \exp_not:N \mathchar " \int_to_hex:n {#1} ~ } % "
\gtl_gput_right:NV \g_@@_output_gtl \l_@@_tmpa_tl
- \@@_print_action:x { \tl_to_str:N \l_@@_tmpa_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_tmpa_tl }
}
-\cs_new_protected:Npn \@@_mathchar:x
- { \@@_exp_args:Nx \@@_mathchar:n }
+\cs_generate_variant:Nn \@@_mathchar:n { e }
% \end{macrocode}
% \end{macro}
%
@@ -4888,7 +4917,7 @@
\bool_if:NTF #1 { \tex_indent:D } { \tex_noindent:D }
\exp_args:NV \@@_everypar:w \l_@@_tmpa_tl
\@@_back_input:V \l_@@_tmpa_tl
- \@@_print_action:x
+ \@@_print_action:e
{
\g_@@_action_text_str \c_space_tl : ~
\token_to_str:N \everypar = { \tl_to_str:N \l_@@_tmpa_tl }
@@ -4912,7 +4941,7 @@
{
\tex_par:D
\gtl_gput_right:Nn \g_@@_output_gtl { \par }
- \@@_print_action:x { Paragraph~end. }
+ \@@_print_action:e { Paragraph~end. }
}
% \end{macrocode}
% \end{macro}
@@ -5062,7 +5091,7 @@
{
\@@_back_input_gtl:N \l_@@_after_group_gtl
\c_group_end_token
- \@@_print_action:x
+ \@@_print_action:e
{ \token_to_str:N #2 \prg_replicate:nn { #1 + 1 } { {...} } }
}
{ \exp_args:NV \@@_end_choice_group:nN \l_@@_choice_int #2 }
@@ -5077,7 +5106,7 @@
\use:n \c_group_begin_token
\int_set:Nn \l_@@_choice_int { #1 + 1 }
\gtl_clear:N \l_@@_after_group_gtl
- \@@_print_action:x
+ \@@_print_action:e
{
\token_to_str:N #2
\prg_replicate:nn {#1} { { ... } }
@@ -5093,7 +5122,7 @@
{
\int_compare:nNnTF \@@_currentgrouptype: = { 0 }
{ % bottom-level
- \@@_error:nxxxx { extra-close }
+ \@@_error:neeee { extra-close }
{ \token_to_meaning:N \l_@@_head_token } { } { } { }
}
{
@@ -5109,7 +5138,7 @@
}
{ \gtl_set_eq:NN \l_@@_head_gtl \c_group_end_gtl }
\@@_back_input:
- \@@_error:nxxxx { off-save }
+ \@@_error:neeee { off-save }
{ \gtl_to_str:N \l_@@_head_gtl } { } { } { }
}
}
@@ -5267,7 +5296,7 @@
{
\exp_after:wN \@@_token_if_expandable:NTF \l_@@_head_tl
{
- \@@_set_action_text:x
+ \@@_set_action_text:e
{ \iow_char:N \\notexpanded: \g_@@_action_text_str }
}
{ }
@@ -5392,7 +5421,7 @@
\g_@@_output_gtl \c_group_begin_gtl
\tl_use:N \l_@@_head_tl \c_group_begin_token
}
- \@@_print_action:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_head_tl }
}
% \end{macrocode}
%
@@ -5427,7 +5456,7 @@
{
\@@_mode_non_vertical:n
{
- \tl_set:Nx \l_@@_tmpa_tl
+ \tl_set:Ne \l_@@_tmpa_tl
{ ` \@@_token_to_char:N \l_@@_head_token }
\mode_if_math:TF
{ \@@_char_in_mmode:V \l_@@_tmpa_tl }
@@ -5475,7 +5504,7 @@
\tex_penalty:D - '10000000000 ~
}
\@@_build_page:
- \@@_print_action:x { End~everything! }
+ \@@_print_action:e { End~everything! }
}
{
\@@_print_outcome:
@@ -5496,7 +5525,7 @@
\@@_scan_int:
\@@_prev_input_gpop:N \l_@@_head_tl
\tl_use:N \l_@@_head_tl \scan_stop:
- \@@_print_action:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_head_tl }
}
}
% \end{macrocode}
@@ -5542,8 +5571,8 @@
\@@_scan_int:
\@@_prev_input_gpop:N \l_@@_head_tl
\mode_if_math:TF
- { \@@_char_in_mmode:x { \tl_tail:N \l_@@_head_tl } }
- { \@@_char:x { \tl_tail:N \l_@@_head_tl } }
+ { \@@_char_in_mmode:e { \tl_tail:N \l_@@_head_tl } }
+ { \@@_char:e { \tl_tail:N \l_@@_head_tl } }
}
}
% \end{macrocode}
@@ -5560,7 +5589,7 @@
\@@_print_action:
\@@_scan_int:
\@@_prev_input_gpop:N \l_@@_head_tl
- \@@_mathchar:x { \tl_tail:N \l_@@_head_tl }
+ \@@_mathchar:e { \tl_tail:N \l_@@_head_tl }
}
}
% \end{macrocode}
@@ -5576,9 +5605,9 @@
\@@_scan_toks:NN \c_false_bool \c_true_bool
\@@_prev_input_gpop:N \l_@@_tmpa_tl
\@@_prev_input_gpop:N \l_@@_head_tl
- \@@_print_action:x
+ \@@_print_action:e
{ \tl_to_str:N \l_@@_head_tl \tl_to_str:N \l_@@_tmpa_tl }
- \tl_put_right:Nx \l_@@_head_tl
+ \tl_put_right:Ne \l_@@_head_tl
{ { \exp_not:N \exp_not:n \exp_not:V \l_@@_tmpa_tl } }
\tl_use:N \l_@@_head_tl
}
@@ -5616,7 +5645,7 @@
\@@_get_x_next:
\@@_rescan_something_internal:n { 5 }
\@@_prev_input_gpop:N \l_@@_head_tl
- \@@_exp_args:Nx \use:n
+ \exp_args:Ne \use:n % better display than \use:e
{ \tex_showtokens:D { \tl_tail:N \l_@@_head_tl } }
}
}
@@ -5683,7 +5712,7 @@
\@@_scan_int:
\@@_prev_input_gpop:N \l_@@_head_tl
\tl_use:N \l_@@_head_tl \scan_stop:
- \@@_print_action:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_head_tl }
}
% \end{macrocode}
% \end{macro}
@@ -5735,7 +5764,7 @@
{ \int_eval:n { \l_@@_head_char_int - 2 } }
\@@_prev_input_gpop:N \l_@@_head_tl
\tl_use:N \l_@@_head_tl \scan_stop:
- \@@_print_action:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_head_tl }
}
}
% \end{macrocode}
@@ -5774,7 +5803,7 @@
{ \@@_scan_dimen:nN { 3 } \c_false_bool }
\@@_prev_input_gpop:N \l_@@_head_tl
\tl_use:N \l_@@_head_tl \scan_stop:
- \@@_print_action:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_head_tl }
}
% \end{macrocode}
% \end{macro}
@@ -5846,7 +5875,7 @@
\@@_scan_alt_rule:
\@@_prev_input_gpop:N \l_@@_head_tl
\tl_use:N \l_@@_head_tl \scan_stop:
- \@@_print_action:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_head_tl }
}
% \end{macrocode}
%
@@ -5877,7 +5906,7 @@
\gtl_gconcat:NNN \g_@@_output_gtl
\g_@@_output_gtl \c_group_begin_gtl
\tl_use:N \l_@@_head_tl \c_group_begin_token
- \@@_print_action:x
+ \@@_print_action:e
{ \tl_to_str:N \l_@@_head_tl \iow_char:N \{ }
}
% \end{macrocode}
@@ -5902,7 +5931,7 @@
\tl_set_eq:NN \l_@@_tmpa_tl \l_@@_head_tl
\@@_get_next:
\gtl_gset_eq:NN \g_@@_after_assignment_gtl \l_@@_head_gtl
- \@@_print_action:x
+ \@@_print_action:e
{
Afterassignment:~\tl_to_str:N \l_@@_tmpa_tl
\gtl_to_str:N \l_@@_head_gtl
@@ -5920,7 +5949,7 @@
\@@_get_next:
\int_compare:nNnTF \@@_currentgrouptype: = 0
{
- \@@_print_action:x
+ \@@_print_action:e
{
Aftergroup~(level~0~=>~dropped):~
\tl_to_str:N \l_@@_tmpa_tl
@@ -5930,7 +5959,7 @@
{
\gtl_concat:NNN \l_@@_after_group_gtl
\l_@@_after_group_gtl \l_@@_head_gtl
- \@@_print_action:x
+ \@@_print_action:e
{
Aftergroup:~\tl_to_str:N \l_@@_tmpa_tl
\gtl_to_str:N \l_@@_head_gtl
@@ -5948,7 +5977,7 @@
\@@_scan_int:
\@@_prev_input_gpop:N \l_@@_head_tl
\tl_use:N \l_@@_head_tl \scan_stop:
- \@@_print_action:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_head_tl }
}
% \end{macrocode}
%
@@ -6011,7 +6040,7 @@
\@@_prev_input_gpop:N \l_@@_head_tl
\gtl_gput_right:NV \g_@@_output_gtl \l_@@_head_tl
\tl_use:N \l_@@_head_tl \scan_stop:
- \@@_print_action:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_head_tl }
\@@_break_point:
}
% \end{macrocode}
@@ -6109,7 +6138,7 @@
{
\gtl_gput_right:NV \g_@@_output_gtl \l_@@_head_tl
\tl_use:N \l_@@_head_tl \scan_stop:
- \@@_print_action:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_head_tl }
}
{
\int_case:nnF \tex_currentgrouptype:D
@@ -6124,7 +6153,7 @@
\gtl_clear:N \l_@@_after_group_gtl
}
{ \tl_use:N \l_@@_head_tl \scan_stop: }
- \@@_print_action:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_head_tl }
}
{ 15 }
{ % todo: this is a TeX error
@@ -6200,7 +6229,7 @@
\tl_use:N \l_@@_head_tl \c_group_begin_token
\gtl_clear:N \l_@@_after_group_gtl
\int_set:Nn \l_@@_choice_int { 1 }
- \@@_print_action:x
+ \@@_print_action:e
{ \tl_to_str:N \l_@@_head_tl \iow_char:N \{ }
}
% \end{macrocode}
@@ -6245,7 +6274,7 @@
\cs_new_protected:Npn \@@_case_shift:Nn #1#2
{
#1 { \@@_back_input:n {#2} }
- \@@_print_action:x
+ \@@_print_action:e
{ \token_to_meaning:N #1 ~ \tl_to_str:n { {#2} } }
}
% \end{macrocode}
@@ -6258,7 +6287,7 @@
\@@_scan_toks_to_str:
\@@_prev_input_gpop:N \l_@@_head_tl
\tl_use:N \l_@@_head_tl
- \@@_print_action:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_head_tl }
}
% \end{macrocode}
%
@@ -6271,7 +6300,7 @@
\@@_scan_extension_operands:
\@@_prev_input_gpop:N \l_@@_head_tl
\tl_use:N \l_@@_head_tl \scan_stop:
- \@@_print_action:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_head_tl }
}
% \end{macrocode}
%
@@ -6289,7 +6318,7 @@
{ \@@_scan_int: }
\@@_prev_input_gpop:N \l_@@_head_tl
\tl_use:N \l_@@_head_tl \scan_stop:
- \@@_print_action:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_head_tl }
}
% \end{macrocode}
%
@@ -6362,7 +6391,7 @@
\@@_new_tex_cmd:nn { math_given } % 69
{
\@@_mode_math:n
- { \@@_mathchar:x { \int_use:N \l_@@_head_char_int } }
+ { \@@_mathchar:e { \int_use:N \l_@@_head_char_int } }
}
% \end{macrocode}
%
@@ -6683,7 +6712,7 @@
{
\@@_back_input:
\@@_prev_input_gpop:N \l_@@_head_tl
- \@@_print_action:x { \tl_to_str:N \l_@@_head_tl ignored }
+ \@@_print_action:e { \tl_to_str:N \l_@@_head_tl ignored }
\@@_prev_input_gpush:
}
@@ -6780,7 +6809,7 @@
> { \@@_tex_use:n { max_non_prefixed_command } }
{
\@@_prev_input_gpop:N \l_@@_tmpa_tl
- \@@_error:nxxxx { erroneous-prefixes }
+ \@@_error:neeee { erroneous-prefixes }
{ \tl_to_str:N \l_@@_tmpa_tl }
{ \tl_to_str:N l_@@_head_tl }
{ } { }
@@ -6859,7 +6888,7 @@
\tl_if_empty:nF {#1}
{
\@@_prev_input_gpush:N \l_@@_head_tl
- \@@_print_action:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_head_tl }
#1
\@@_prev_input_gpop:N \l_@@_head_tl
}
@@ -6955,20 +6984,37 @@
}
% \end{macrocode}
%
+% This is a variant of \cs{@@_assign_value:nn}, with a bit more complication
+% because the syntax of \tn{parshape} and of \eTeX{} primitives such as
+% \tn{interlinepenalties} is a bit different.
% \begin{macrocode}
\@@_prefixed_new:nn { set_shape } % 84
{
- \@@_assign_value:nn { \@@_scan_int: }
+ \@@_prev_input:V \l_@@_head_tl
+ \tl_set_eq:NN \l_@@_defined_tl \l_@@_head_tl
+ \tl_if_head_eq_meaning:VNTF \l_@@_defined_tl \tex_parshape:D
{
- \prg_replicate:nn
- {
- \tl_if_head_eq_meaning:VNT
- \l_@@_defined_tl \tex_parshape:D { 2 * }
- \tl_tail:N \l_@@_defined_tl
- }
- { \@@_scan_int: }
+ \@@_set_shape:NN 2 \@@_scan_normal_dimen:
+ \@@_print_assigned_parshape:
+ }
+ {
+ \@@_set_shape:NN 1 \@@_scan_int:
+ \@@_print_assigned_set_shape:
}
}
+\cs_new_protected:Npn \@@_set_shape:NN #1#2
+ {
+ \@@_scan_optional_equals:
+ \@@_prev_input_gpush:
+ \@@_scan_int:
+ \@@_prev_input_gpop:N \l_@@_tmpa_tl
+ \@@_prev_input_silent:V \l_@@_tmpa_tl
+ \prg_replicate:nn
+ { \int_max:nn { 0 } { #1 * \l_@@_tmpa_tl } }
+ { \@@_prev_input_silent:n { ~ } #2 }
+ \@@_prev_input_gpop:N \l_@@_tmpa_tl
+ \tl_use:N \l_@@_tmpa_tl \scan_stop:
+ }
% \end{macrocode}
%
% \begin{macrocode}
@@ -6993,9 +7039,9 @@
\@@_prefixed_new:nn { def_font } % 88
{
\@@_prev_input_silent:V \l_@@_head_tl
- \@@_set_action_text:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_set_action_text:e { \tl_to_str:N \l_@@_head_tl }
\@@_scan_r_token:
- \@@_print_action:x
+ \@@_print_action:e
{ \g_@@_action_text_str \tl_to_str:N \l_@@_defined_tl }
\@@_scan_optional_equals:
\@@_scan_file_name:
@@ -7024,7 +7070,7 @@
{ % |let|
\@@_scan_r_token:
\@@_prev_input_get:N \l_@@_tmpa_tl
- \@@_print_action:x { \tl_to_str:N \l_@@_tmpa_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_tmpa_tl }
\@@_get_next:
\bool_while_do:nn
{ \token_if_eq_catcode_p:NN \l_@@_head_token \c_space_token }
@@ -7037,7 +7083,7 @@
{ % |futurelet|
\@@_scan_r_token:
\@@_prev_input_get:N \l_@@_tmpa_tl
- \@@_print_action:x { \tl_to_str:N \l_@@_tmpa_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_tmpa_tl }
\@@_get_next:
\gtl_set_eq:NN \l_@@_tmpb_gtl \l_@@_head_gtl
\@@_get_next:
@@ -7048,7 +7094,7 @@
\@@_prev_input_gpop:N \l_@@_tmpa_tl
\tl_put_right:Nn \l_@@_tmpa_tl { = ~ \l_@@_head_token }
\@@_prev_input_gpop:N \l_@@_head_tl
- \@@_exp_args:Nx \use:n
+ \use:e
{
\exp_not:V \l_@@_head_tl
\tex_let:D \tl_tail:N \l_@@_tmpa_tl
@@ -7061,10 +7107,10 @@
\@@_prefixed_new:nn { shorthand_def } % 95
{
\@@_prev_input_silent:V \l_@@_head_tl
- \tl_set:Nx \l_@@_prev_action_tl
+ \tl_set:Ne \l_@@_prev_action_tl
{ \tl_to_str:N \l_@@_head_tl }
\@@_scan_r_token:
- \@@_print_action:x
+ \@@_print_action:e
{ \l_@@_prev_action_tl \tl_to_str:N \l_@@_defined_tl }
\exp_after:wN \cs_set_eq:NN \l_@@_defined_tl \scan_stop:
\@@_just_print_assigned_token:
@@ -7087,7 +7133,7 @@
\@@_prefixed_new:nn { read_to_cs } % 96
{
\@@_prev_input_silent:V \l_@@_head_tl
- \@@_print_action:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_print_action:e { \tl_to_str:N \l_@@_head_tl }
\@@_scan_int:
\@@_scan_to:
\@@_scan_r_token:
@@ -7186,7 +7232,7 @@
\@@_prev_input_gpop:N \l_@@_tmpa_tl
\tl_put_left:NV \l_@@_head_tl \l_@@_tmpa_tl
\tl_use:N \l_@@_head_tl \scan_stop:
- \@@_print_assignment:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_print_assignment:e { \tl_to_str:N \l_@@_head_tl }
}
% \end{macrocode}
%
@@ -7194,9 +7240,9 @@
\@@_prefixed_new:nn { letterspace_font } % 101
{
\@@_prev_input_silent:V \l_@@_head_tl
- \@@_set_action_text:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_set_action_text:e { \tl_to_str:N \l_@@_head_tl }
\@@_scan_r_token:
- \@@_print_action:x
+ \@@_print_action:e
{ \g_@@_action_text_str \tl_to_str:N \l_@@_defined_tl }
\exp_after:wN \cs_set_eq:NN \l_@@_defined_tl \@@_nullfont:
\@@_just_print_assigned_token:
@@ -7211,9 +7257,9 @@
\@@_prefixed_new:nn { pdf_copy_font } % 102
{
\@@_prev_input_silent:V \l_@@_head_tl
- \@@_set_action_text:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_set_action_text:e { \tl_to_str:N \l_@@_head_tl }
\@@_scan_r_token:
- \@@_print_action:x
+ \@@_print_action:e
{ \g_@@_action_text_str \tl_to_str:N \l_@@_defined_tl }
\exp_after:wN \cs_set_eq:NN \l_@@_defined_tl \@@_nullfont:
\@@_just_print_assigned_token:
@@ -7327,7 +7373,7 @@
{ 3 } { \@@_scan_normal_glue: } % glue
{ 4 } { \@@_scan_mu_glue: } % muglue
}
- { \@@_error:nxxxx { internal } { do-reg=#2 } { } { } { } }
+ { \@@_error:neeee { internal } { do-reg=#2 } { } { } { } }
}
{ \@@_scan_int: }
\@@_assign_register:
@@ -7384,7 +7430,7 @@
% \tn{pdffiledump}, \tn{pdfmatch}, \tn{pdflastmatch},
% \tn{pdfuniformdeviate}, \tn{pdfnormaldeviate}, \tn{pdfinsertht},
% \tn{pdfximagebbox}, \tn{jobname}, \tn{expanded}, and in
-% \LuaTeX{} \tn{directlua}, \tn{luaescapestring}, and in \XeTeX{} \tn{Ucharcat}.
+% \LuaTeX{} \tn{directlua}, \tn{luaescapestring}, and in \XeTeX{}/(u)p\TeX{} \tn{Ucharcat}.
% \item |the=111| for \tn{the}, \tn{unexpanded}, and \tn{detokenize}.
% \item |top_bot_mark=112| \tn{topmark}, \tn{firstmark}, \tn{botmark},
% \tn{splitfirstmark}, \tn{splitbotmark}, \tn{topmarks},
@@ -7414,13 +7460,13 @@
\gtl_concat:NNN \l_@@_head_gtl
\l_@@_tmpb_gtl \l_@@_head_gtl
\@@_prev_input_gpush_gtl:N \l_@@_head_gtl
- \@@_print_expansion:x { \gtl_to_str:N \l_@@_head_gtl }
+ \@@_print_expansion:e { \gtl_to_str:N \l_@@_head_gtl }
\@@_get_next:
\@@_token_if_expandable:NTF \l_@@_head_token
{ \@@_expand_do:N \prg_do_nothing: }
{ \@@_back_input: }
\@@_prev_input_gpop_gtl:N \l_@@_head_gtl
- \@@_set_action_text:x
+ \@@_set_action_text:e
{ back_input: ~ \gtl_to_str:N \l_@@_head_gtl }
\gtl_pop_left:N \l_@@_head_gtl
\@@_back_input:
@@ -7428,6 +7474,7 @@
}
\cs_new_protected:Npn \@@_unless:
{
+ \gtl_set_eq:NN \l_@@_tmpb_gtl \l_@@_head_gtl
\@@_get_token:
\int_compare:nNnTF
\l_@@_head_cmd_int = { \@@_tex_use:n { if_test } }
@@ -7435,8 +7482,8 @@
\token_if_eq_meaning:NNTF \l_@@_head_token \tex_ifcase:D
{ \@@_unless_bad: }
{
- \tl_put_left:Nn \l_@@_head_tl { \reverse_if:N }
- % \int_add:Nn \l_@@_head_char_int { 32 }
+ \tl_put_left:Ne \l_@@_head_tl
+ { \gtl_head_do:NN \l_@@_tmpb_gtl \exp_not:N }
\@@_expand_nonmacro:
}
}
@@ -7546,19 +7593,21 @@
\@@_prev_input_gpush:
\@@_scan_toks:NN \c_false_bool \c_false_bool
\@@_prev_input_gpop:N \l_@@_tmpa_tl
- \tl_set_rescan:Nno \l_@@_head_tl { } \l_@@_tmpa_tl
+ \exp_last_unbraced:NNNo \tl_set_rescan:Nnn
+ \l_@@_head_tl \prg_do_nothing: \l_@@_tmpa_tl
+ \@@_back_input:V \@@_everyeof:w
\@@_back_input:V \l_@@_head_tl
- \@@_print_expansion:x { \tl_to_str:N \l_@@_tmpa_tl }
+ \@@_print_expansion:e { \tl_to_str:N \l_@@_tmpa_tl }
}
\cs_new_protected:Npn \@@_input:
{
\@@_prev_input_gpush:N \l_@@_head_tl
\@@_scan_file_name:
\@@_prev_input_gpop:N \l_@@_head_tl
- \tl_set:Nx \l_@@_tmpa_tl { \tl_tail:N \l_@@_head_tl }
+ \tl_set:Ne \l_@@_tmpa_tl { \tl_tail:N \l_@@_head_tl }
\@@_file_get:nN \l_@@_tmpa_tl \l_@@_tmpa_tl
\@@_back_input:V \l_@@_tmpa_tl
- \@@_print_expansion:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_print_expansion:e { \tl_to_str:N \l_@@_head_tl }
}
% \end{macrocode}
% \end{macro}
@@ -7579,7 +7628,7 @@
}
{
\@@_back_input:V \g_@@_lastnamedcs_tl
- \@@_print_expansion:x
+ \@@_print_expansion:e
{ \tl_to_str:N \l_@@_head_tl = \tl_to_str:N \g_@@_lastnamedcs_tl }
}
}
@@ -7596,7 +7645,7 @@
}
}
{
- \@@_prev_input_silent:x
+ \@@_prev_input_silent:e
{ \@@_token_to_char:N \l_@@_head_token }
\@@_csname_loop:
}
@@ -7606,9 +7655,11 @@
\group_begin:
\@@_prev_input_get:N \l_@@_head_tl
\tl_gset:No \g_@@_lastnamedcs_tl
- { \cs:w \exp_after:wN \use_none:n \l_@@_head_tl }
+ { \cs:w \exp_after:wN \@@_get_lastnamedcs_check:N \l_@@_head_tl }
\group_end:
}
+\cs_new:Npn \@@_get_lastnamedcs_check:N #1
+ { \if_meaning:w \reverse_if:N #1 \use_i:nn \fi: }
% \end{macrocode}
% \end{macro}
%
@@ -7667,7 +7718,7 @@
{
\@@_get_next:
\tl_if_empty:NTF \l_@@_head_tl
- { \@@_prev_input:x { \gtl_to_str:N \l_@@_head_gtl } }
+ { \@@_prev_input:e { \gtl_to_str:N \l_@@_head_gtl } }
{ \@@_prev_input:V \l_@@_head_tl }
}
\cs_new_protected:Npn \@@_convert_meaning:w
@@ -7680,11 +7731,11 @@
\@@_prev_input_gpop:N \l_@@_prev_input_tl
\exp_args:NNV \gtl_put_left:Nn \l_@@_tmpb_gtl \l_@@_prev_input_tl
\@@_prev_input_gpush_gtl:N \l_@@_tmpb_gtl
- \@@_print_action:x { \gtl_to_str:N \l_@@_tmpb_gtl }
+ \@@_print_action:e { \gtl_to_str:N \l_@@_tmpb_gtl }
\@@_prev_input_gpop_gtl:N \l_@@_tmpb_gtl
- \tl_set:Nx \l_@@_tmpa_tl { \gtl_head_do:NN \l_@@_head_gtl \tex_meaning:D }
+ \tl_set:Ne \l_@@_tmpa_tl { \gtl_head_do:NN \l_@@_head_gtl \tex_meaning:D }
\@@_back_input:V \l_@@_tmpa_tl
- \@@_print_expansion:x
+ \@@_print_expansion:e
{ \gtl_to_str:N \l_@@_tmpb_gtl = \tl_to_str:N \l_@@_tmpa_tl }
}
{
@@ -7754,34 +7805,34 @@
{ % \unexpanded, \detokenize
\@@_scan_toks:NN \c_false_bool \c_false_bool
\@@_prev_input_gpop:N \l_@@_head_tl
- \@@_set_action_text:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_set_action_text:e { \tl_to_str:N \l_@@_head_tl }
}
{ % \the
\@@_get_x_next:
\@@_rescan_something_internal:n { 5 }
\@@_prev_input_gpop:N \l_@@_head_tl
- \@@_set_action_text:x
+ \@@_set_action_text:e
{
\tl_head:N \l_@@_head_tl
=> \tl_tail:N \l_@@_head_tl
}
- \tl_set:Nx \l_@@_head_tl
+ \tl_set:Ne \l_@@_head_tl
{ \exp_not:N \exp_not:n { \tl_tail:N \l_@@_head_tl } }
}
\cs_if_eq:NNTF #1 \@@_get_token_xdef:
{
\tl_put_right:NV \l_@@_defining_tl \l_@@_head_tl
- \@@_prev_input_silent:x { \l_@@_head_tl }
+ \@@_prev_input_silent:e { \l_@@_head_tl }
\@@_print_action:
}
{
\cs_if_eq:NNTF #1 \@@_get_token_x:
{
- \@@_exp_args:NNx \gtl_set:Nn \l_@@_tmpb_gtl { \l_@@_head_tl }
+ \exp_args:NNe \gtl_set:Nn \l_@@_tmpb_gtl { \l_@@_head_tl }
\@@_prev_input_gtl:N \l_@@_tmpb_gtl
}
{
- \tl_set:Nx \l_@@_tmpa_tl { \exp_args:NV \exp_not:o \l_@@_head_tl }
+ \tl_set:Ne \l_@@_tmpa_tl { \exp_args:NV \exp_not:o \l_@@_head_tl }
\@@_back_input:V \l_@@_tmpa_tl
}
\@@_print_expansion:
@@ -7894,7 +7945,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_cond_push:
{
- \tl_gput_left:Nx \g_@@_if_limit_tl
+ \tl_gput_left:Ne \g_@@_if_limit_tl
{ { \int_use:N \g_@@_if_limit_int } }
\int_gincr:N \g_@@_if_depth_int
\int_gzero:N \g_@@_if_limit_int
@@ -7904,7 +7955,7 @@
\fi:
\int_gset:Nn \g_@@_if_limit_int
{ \tl_head:N \g_@@_if_limit_tl }
- \tl_gset:Nx \g_@@_if_limit_tl
+ \tl_gset:Ne \g_@@_if_limit_tl
{ \tl_tail:N \g_@@_if_limit_tl }
\int_gdecr:N \g_@@_if_depth_int
}
@@ -7921,12 +7972,12 @@
\tl_clear:N \l_@@_tmpa_tl
\prg_replicate:nn { \g_@@_if_depth_int - #2 - 1 }
{
- \tl_put_right:Nx \l_@@_tmpa_tl
+ \tl_put_right:Ne \l_@@_tmpa_tl
{ { \tl_head:N \g_@@_if_limit_tl } }
- \tl_gset:Nx \g_@@_if_limit_tl
+ \tl_gset:Ne \g_@@_if_limit_tl
{ \tl_tail:N \g_@@_if_limit_tl }
}
- \tl_gset:Nx \g_@@_if_limit_tl
+ \tl_gset:Ne \g_@@_if_limit_tl
{ \l_@@_tmpa_tl {#1} \tl_tail:N \g_@@_if_limit_tl }
}
}
@@ -7980,7 +8031,7 @@
{ 24 } { \@@_scan_font_ident: } % ifjfont, iftfont
}
\@@_prev_input_gpop:N \l_@@_head_tl
- \@@_set_action_text:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_set_action_text:e { \tl_to_str:N \l_@@_head_tl }
\l_@@_head_tl \scan_stop:
\@@_cond_true:NNNn
\else:
@@ -7997,7 +8048,7 @@
\cs_new_protected:Npn \@@_cond_true:NNNn #1#2#3#4
{
\@@_change_if_limit:nn { 3 } {#4} % wait for else/fi
- \@@_print_expansion:x { \g_@@_action_text_str = true }
+ \@@_print_expansion:e { \g_@@_action_text_str = true }
}
% \end{macrocode}
% \end{macro}
@@ -8009,7 +8060,7 @@
{
\@@_cond_false_loop:n {#2}
\@@_cond_false_common:
- \@@_print_expansion:x
+ \@@_print_expansion:e
{
\g_@@_action_text_str = false ~
=> ~ skip ~ to ~ \tl_to_str:N \l_@@_head_tl
@@ -8069,7 +8120,7 @@
\@@_test_two_chars_get:n {#1}
\@@_test_two_chars_get:n {#1}
\@@_prev_input_gpop_gtl:N \l_@@_head_gtl
- \@@_set_action_text:x { \gtl_to_str:N \l_@@_head_gtl }
+ \@@_set_action_text:e { \gtl_to_str:N \l_@@_head_gtl }
\gtl_pop_left_item:NNTF \l_@@_head_gtl \l_@@_head_tl { } { }
\exp_args:No \tl_if_head_eq_meaning:nNT \l_@@_head_tl \reverse_if:N
{
@@ -8091,14 +8142,14 @@
\int_compare:nNnT {#1} = 0
{
\gtl_if_head_is_N_type:NF \l_@@_head_gtl
- { \gtl_set:Nx \l_@@_head_gtl { \gtl_to_str:N \l_@@_head_gtl } }
+ { \gtl_set:Ne \l_@@_head_gtl { \gtl_to_str:N \l_@@_head_gtl } }
}
\@@_prev_input_gtl:N \l_@@_head_gtl
- \@@_print_action:x { \gtl_to_str:N \l_@@_head_gtl }
+ \@@_print_action:e { \gtl_to_str:N \l_@@_head_gtl }
}
\cs_new_protected:Npn \@@_test_two_chars_gtl:N #1
{
- \tl_put_right:Nx \l_@@_head_tl
+ \tl_put_right:Ne \l_@@_head_tl
{
\gtl_if_head_is_group_begin:NTF #1 { \c_group_begin_token }
{
@@ -8136,7 +8187,7 @@
\cs_set_eq:NN \l_@@_tmpb_token \l_@@_head_token
\@@_get_next:
\@@_prev_input_gpop:N \l_@@_tmpa_tl
- \@@_set_action_text:x
+ \@@_set_action_text:e
{
Compare:~ \tl_to_str:N \l_@@_tmpa_tl
\@@_test_ifx_str:NN \l_@@_tmpb_token \l_@@_tmpb_gtl
@@ -8184,7 +8235,7 @@
\bool_if:NT \g_@@_internal_debug_bool { \iow_term:n { {\ifcase level~#1} } }
\@@_scan_int:
\@@_prev_input_get:N \l_@@_head_tl
- \tl_set:Nx \l_@@_head_tl { \tl_tail:N \l_@@_head_tl }
+ \tl_set:Ne \l_@@_head_tl { \tl_tail:N \l_@@_head_tl }
% ^^A does text_case_aux use prev_input_seq?
\int_compare:nNnF { \l_@@_head_tl } = 0
{
@@ -8194,7 +8245,7 @@
}
\exp_args:No \@@_test_case_aux:nn { \l_@@_head_tl } {#1}
\@@_prev_input_gpop:N \l_@@_head_tl
- \@@_print_expansion:x { \tl_to_str:N \l_@@_head_tl }
+ \@@_print_expansion:e { \tl_to_str:N \l_@@_head_tl }
}
\cs_new_protected:Npn \@@_test_case_aux:nn #1#2
{
@@ -8243,12 +8294,12 @@
{ \@@_pass_text_empty: }
{
\@@_input_gpop:N \l_@@_tmpb_gtl
- \@@_set_action_text:x
+ \@@_set_action_text:e
{
Conditional:~ \tl_to_str:N \l_@@_head_tl
\gtl_to_str:N \l_@@_tmpb_gtl
}
- \@@_prev_input:x
+ \@@_prev_input:e
{
\gtl_if_tl:NTF \l_@@_tmpb_gtl
{ \gtl_head:N \l_@@_tmpb_gtl }
@@ -8288,7 +8339,7 @@
\int_compare:nNnF \l_@@_head_char_int = 2
{
\@@_fi_or_else_loop:
- \@@_set_action_text:x
+ \@@_set_action_text:e
{
\g_@@_action_text_str \c_space_tl
=> ~ skip ~ to ~ \tl_to_str:N \l_@@_head_tl
@@ -8326,7 +8377,7 @@
\tl_new:N \l_@@_print_tl
\sys_if_engine_luatex:TF
{
- \cs_new_protected:Npx \@@_print_normalize_null:
+ \cs_new_protected:Npe \@@_print_normalize_null:
{
\tl_replace_all:Nnn \exp_not:N \l_@@_print_tl
{ \char_generate:nn { 0 } { 12 } }
@@ -8338,21 +8389,40 @@
% \end{variable}
% \end{macro}
%
-% \begin{macro}{\@@_print:n, \@@_print:x, \@@_log:n}
+% \begin{macro}{\@@_print:n, \@@_print:e, \@@_log:n}
% \begin{macrocode}
\cs_new_protected:Npn \@@_print:n #1
{
\tl_set:Nn \l_@@_print_tl {#1}
\@@_print_normalize_null:
- \@@_exp_args:Nx \iow_term:n { \l_@@_print_tl }
+ \iow_term:e { \l_@@_print_tl }
+ \tl_if_empty:NF \g_@@_output_file_tl
+ { \iow_now:Ne \g_@@_iow { \l_@@_print_tl } }
}
-\cs_new_protected:Npn \@@_print:x
- { \@@_exp_args:Nx \@@_print:n }
+\cs_generate_variant:Nn \@@_print:n { e }
\cs_new_protected:Npn \@@_log:n #1
{
\tl_set:Nn \l_@@_print_tl {#1}
\@@_print_normalize_null:
- \@@_exp_args:Nx \iow_log:n { \l_@@_print_tl }
+ \tl_if_empty:NTF \g_@@_output_file_tl
+ { \iow_log:e { \l_@@_print_tl } }
+ { \iow_now:Ne \g_@@_iow { \l_@@_print_tl } }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_print_step:n}
+% Steps are printed or not according to the option value, unaffected
+% by a prompt such as |s10|.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_print_step:n #1
+ {
+ \int_compare:nNnF \g_@@_online_int < 0
+ {
+ \int_compare:nNnTF \g_@@_online_int = 0
+ { \@@_log:n {#1} }
+ { \@@_print:n {#1} }
+ }
}
% \end{macrocode}
% \end{macro}
@@ -8361,13 +8431,14 @@
% The message to be printed should come already detokenized, as~|#2|.
% It will be wrapped to 80 characters per line, with~|#1| before each
% line. The message is properly suppressed (or sent only to the log)
-% according to \cs{g_@@_online_int}.
+% according to \cs{g_@@_current_online_int} so as to be sensitive to
+% the prompt.
% \begin{macrocode}
\cs_new_protected:Npn \@@_print_message:nn #1 #2
{
- \int_compare:nNnF \g_@@_online_int < 0
+ \int_compare:nNnF \g_@@_current_online_int < 0
{
- \int_compare:nNnTF \g_@@_online_int = 0
+ \int_compare:nNnTF \g_@@_current_online_int = 0
{ \iow_wrap:nnnN { #1 #2 } { #1 } { } \@@_log:n }
{ \iow_wrap:nnnN { #1 #2 } { #1 } { } \@@_print:n }
}
@@ -8375,13 +8446,13 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_set_action_text:x}
+% \begin{macro}{\@@_set_action_text:e}
% \begin{macrocode}
-\cs_new_protected:Npn \@@_set_action_text:x #1
+\cs_new_protected:Npn \@@_set_action_text:e #1
{
\group_begin:
\@@_set_escapechar:n { 92 }
- \str_gset:Nx \g_@@_action_text_str {#1}
+ \str_gset:Ne \g_@@_action_text_str {#1}
\group_end:
}
% \end{macrocode}
@@ -8391,7 +8462,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_set_action_text:
{
- \@@_set_action_text:x
+ \@@_set_action_text:e
{
\tl_to_str:N \l_@@_head_tl
\tl_if_single_token:VT \l_@@_head_tl
@@ -8408,7 +8479,7 @@
\group_begin:
\@@_set_escapechar:n { 92 }
\tl_use:N \g_@@_before_print_state_tl
- \int_compare:nNnT \g_@@_online_int > 0
+ \int_compare:nNnF \g_@@_current_online_int < 0
{
\@@_print_state_output:
\@@_print_state_prev:
@@ -8426,14 +8497,14 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_print_state_output:
{
- \@@_exp_args:Nx \@@_print_state_output:n
+ \exp_args:Ne \@@_print_state_output:n
{ \gtl_to_str:N \g_@@_output_gtl }
}
\cs_new_protected:Npn \@@_print_state_output:n #1
{
\tl_if_empty:nF {#1}
{
- \@@_print_message:nn { <| ~ }
+ \@@_print_message:nn { <| ~ } % |
{ \@@_str_truncate_left:nn {#1} { \g_@@_max_output_int } }
}
}
@@ -8445,7 +8516,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_print_state_prev:
{
- \seq_set_map_x:NNn \l_@@_tmpa_seq \g_@@_prev_input_seq
+ \seq_set_map_e:NNn \l_@@_tmpa_seq \g_@@_prev_input_seq
{ \@@_to_str:Nn ##1 }
\seq_remove_all:Nn \l_@@_tmpa_seq { }
\seq_if_empty:NTF \l_@@_tmpa_seq
@@ -8467,12 +8538,12 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_print_state_input:
{
- \@@_exp_args:Nx \@@_print_state_input:n
+ \exp_args:Ne \@@_print_state_input:n
{ \@@_input_to_str: }
}
\cs_new_protected:Npn \@@_print_state_input:n #1
{
- \@@_print_message:nn { |> ~ }
+ \@@_print_message:nn { |> ~ } % |
{ \@@_str_truncate_right:nn {#1} { \g_@@_max_input_int } }
}
% \end{macrocode}
@@ -8496,29 +8567,29 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_print_action:, \@@_print_action:x, \@@_print_assignment:, \@@_print_assignment:x, \@@_print_expansion:, \@@_print_expansion:x, \@@_print_action_aux:N}
+% \begin{macro}{\@@_print_action:, \@@_print_action:e, \@@_print_assignment:, \@@_print_assignment:e, \@@_print_expansion:, \@@_print_expansion:e, \@@_print_action_aux:N}
% Some of these commands are currently synonyms but we may decide to
% make some options act differently on them.
% \begin{macrocode}
\cs_new_protected:Npn \@@_print_action:
{ \@@_print_action_aux:N \g_@@_trace_other_bool }
-\cs_new_protected:Npn \@@_print_action:x #1
+\cs_new_protected:Npn \@@_print_action:e #1
{
- \@@_set_action_text:x {#1}
+ \@@_set_action_text:e {#1}
\@@_print_action:
}
\cs_new_protected:Npn \@@_print_assignment:
{ \@@_print_action_aux:N \g_@@_trace_assigns_bool }
-\cs_new_protected:Npn \@@_print_assignment:x #1
+\cs_new_protected:Npn \@@_print_assignment:e #1
{
- \@@_set_action_text:x {#1}
+ \@@_set_action_text:e {#1}
\@@_print_assignment:
}
\cs_new_protected:Npn \@@_print_expansion:
{ \@@_print_action_aux:N \g_@@_trace_expansion_bool }
-\cs_new_protected:Npn \@@_print_expansion:x #1
+\cs_new_protected:Npn \@@_print_expansion:e #1
{
- \@@_set_action_text:x {#1}
+ \@@_set_action_text:e {#1}
\@@_print_expansion:
}
\cs_new_protected:Npn \@@_print_action_aux:N #1
@@ -8527,7 +8598,7 @@
\int_gincr:N \g_@@_step_int
\bool_if:NT #1
{
- \@@_print:x
+ \exp_args:Ne \@@_print_step:n
{
[=====
\bool_if:NT \g_@@_number_steps_bool
@@ -8549,11 +8620,12 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_just_print_assigned_token:, \@@_print_assigned_token:, \@@_print_assigned_register:}
+% \begin{macro}{\@@_just_print_assigned_token:, \@@_print_assigned_token:, \@@_print_assigned_register:, \@@_print_assigned_parshape:, \@@_print_assigned_set_shape:}
+% \begin{macro}[EXP]{\@@_print_assigned_set_shape_aux:n}
% \begin{macrocode}
\cs_new_protected:Npn \@@_just_print_assigned_token:
{
- \@@_print_assignment:x
+ \@@_print_assignment:e
{
Set~ \exp_after:wN \token_to_str:N \l_@@_defined_tl
= \exp_after:wN \token_to_meaning:N \l_@@_defined_tl
@@ -8565,23 +8637,52 @@
\@@_just_print_assigned_token:
\@@_omit_after_assignment:w
}
+\cs_new:Npn \@@_print_assigned_aux_name:
+ {
+ Set~ \exp_after:wN \token_to_str:N \l_@@_defined_tl
+ \tl_if_single:NT \l_@@_defined_tl
+ { ( \exp_after:wN \token_to_meaning:N \l_@@_defined_tl ) }
+ }
\cs_new_protected:Npn \@@_print_assigned_register:
{
\@@_after_assignment:
- \@@_exp_args:Nx \@@_print_assignment:x
+ \exp_args:Ne \@@_print_assignment:e % needed to stringify a \toks
{
- \exp_not:n
- {
- Set~ \exp_after:wN \token_to_str:N \l_@@_defined_tl
- \tl_if_single:NT \l_@@_defined_tl
- { ( \exp_after:wN \token_to_meaning:N \l_@@_defined_tl ) }
- }
+ \exp_not:N \@@_print_assigned_aux_name:
= \exp_not:N \tl_to_str:n { \@@_the:w \l_@@_defined_tl }
}
\@@_omit_after_assignment:w
}
+\cs_new_protected:Npn \@@_print_assigned_parshape:
+ {
+ \@@_after_assignment:
+ \tl_set:Nn \l_@@_tmpa_tl { \tex_parshapedimen:D }
+ \@@_print_assignment:e
+ {
+ \@@_print_assigned_aux_name: = \@@_the:w \l_@@_defined_tl
+ \int_step_function:nN { 2 * \l_@@_defined_tl }
+ \@@_print_assigned_set_shape_aux:n
+ }
+ \@@_omit_after_assignment:w
+ }
+\cs_new_protected:Npn \@@_print_assigned_set_shape:
+ {
+ \@@_after_assignment:
+ \tl_set_eq:NN \l_@@_tmpa_tl \l_@@_defined_tl
+ \@@_print_assignment:e
+ {
+ \@@_print_assigned_aux_name:
+ = \@@_the:w \l_@@_defined_tl 0 \exp_stop_f:
+ \int_step_function:nN { \l_@@_defined_tl 0 }
+ \@@_print_assigned_set_shape_aux:n
+ }
+ \@@_omit_after_assignment:w
+ }
+\cs_new:Npn \@@_print_assigned_set_shape_aux:n #1
+ { ~ \@@_the:w \l_@@_tmpa_tl #1 \exp_stop_f: }
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
% \begin{macro}{\@@_print_welcome:}
% Welcome message.
@@ -8659,7 +8760,7 @@
\clist_gpop:NN \g_@@_prompt_input_clist \l_@@_tmpa_tl
\group_begin:
\@@_set_escapechar:n { 92 }
- \@@_print:x
+ \@@_print:e
{
\bool_if:NT \g_@@_explicit_prompt_bool { Your~input= }
\tl_to_str:N \l_@@_tmpa_tl
@@ -8672,12 +8773,12 @@
{
\tl_if_empty:nF {#1}
{
- \@@_exp_args:Nx \str_case:nnF { \tl_head:n {#1} }
+ \str_case:enF { \tl_head:n {#1} }
{
{ m } { \@@_print_meaning: \@@_prompt_aux: }
{ q }
{
- \int_gset:Nn \g_@@_online_int { -1 }
+ \int_gset:Nn \g_@@_current_online_int { -1 }
\int_gzero:N \g_@@_nonstop_int
}
{ x }
@@ -8693,10 +8794,10 @@
{ s } { \@@_prompt_scan_int:nn {#1}
\@@_prompt_silent_steps:n }
{ o } { \@@_prompt_scan_int:nn {#1}
- { \int_gset:Nn \g_@@_online_int } }
+ { \int_gset:Nn \g_@@_current_online_int } }
{ C }
{
- \@@_exp_args:Nx \use:n
+ \use:e
{
\tl_gset_rescan:Nnn \exp_not:N \g_@@_tmpc_tl
{ \exp_not:N \ExplSyntaxOn } { \tl_tail:n {#1} }
@@ -8706,7 +8807,8 @@
\group_insert_after:N \g_@@_tmpc_tl
\group_insert_after:N \@@_prompt:
}
- { | } { \@@_prompt_scan_int:nn {#1}
+ { | } % |
+ { \@@_prompt_scan_int:nn {#1}
\@@_prompt_vert:n }
{ u } { \@@_prompt_until:n {#1} }
{ a } { \@@_prompt_all: }
@@ -8744,10 +8846,10 @@
{
\int_compare:nNnF {#1} < 0
{
- \int_gset:Nn \g_@@_online_int { -1 }
+ \int_gset:Nn \g_@@_current_online_int { -1 }
\tl_gset:Nn \g_@@_before_prompt_tl
{
- \int_gset:Nn \g_@@_online_int { 1 }
+ \int_gset_eq:NN \g_@@_current_online_int \g_@@_online_int
\tl_gclear:N \g_@@_before_prompt_tl
}
\int_gset:Nn \g_@@_nonstop_int {#1}
@@ -8761,7 +8863,7 @@
}
\cs_new_protected:Npn \@@_prompt_vert:Nn #1#2
{
- \int_gset:Nn \g_@@_online_int { -1 }
+ \int_gset:Nn \g_@@_current_online_int { -1 }
\tl_gset:Nf \g_@@_before_print_state_tl
{
\exp_args:NNf \exp_stop_f: \int_compare:nNnTF
@@ -8772,14 +8874,14 @@
{ \int_max:nn { \g_@@_nonstop_int } { 2 } }
}
{
- \int_gset:Nn \g_@@_online_int { 1 }
+ \int_gset_eq:NN \g_@@_current_online_int \g_@@_online_int
\tl_gclear:N \g_@@_before_print_state_tl
}
}
}
\cs_new_protected:Npn \@@_prompt_all:
{
- \tl_gset:Nx \g_@@_tmpc_tl
+ \tl_gset:Ne \g_@@_tmpc_tl
{
\exp_not:n
{
@@ -8808,12 +8910,12 @@
\tl_new:N \g_@@_until_tl
\cs_new_protected:Npn \@@_prompt_until:n #1
{
- \tl_gset:Nx \g_@@_until_tl { \tl_tail:n {#1} }
- \int_gset:Nn \g_@@_online_int { -1 }
+ \tl_gset:Ne \g_@@_until_tl { \tl_tail:n {#1} }
+ \int_gset:Nn \g_@@_current_online_int { -1 }
\tl_gset:Nn \g_@@_before_print_state_tl
{
\@@_input_get_left:N \l_@@_tmpa_tl
- \@@_exp_args:Nx \use:n
+ \use:e
{
\exp_not:N \tl_if_in:nnTF
{ \exp_not:N \@@:nn \tl_to_str:N \l_@@_tmpa_tl }
@@ -8821,7 +8923,7 @@
}
{
\int_gzero:N \g_@@_nonstop_int
- \int_gset:Nn \g_@@_online_int { 1 }
+ \int_gset_eq:NN \g_@@_current_online_int \g_@@_online_int
\tl_gclear:N \g_@@_before_print_state_tl
}
{
@@ -8843,7 +8945,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_error:nnnnn, \@@_error:nxxxx}
+% \begin{macro}{\@@_error:nnnnn, \@@_error:neeee}
% Errors within a group to make sure that none of the \pkg{l3msg}
% variables (or others) that may be currently in use in the code being
% debugged are modified.
@@ -8854,10 +8956,10 @@
\msg_error:nnnnnn { unravel } {#1} {#2} {#3} {#4} {#5}
\group_end:
}
-\cs_new_protected:Npn \@@_error:nxxxx #1#2#3#4#5
+\cs_new_protected:Npn \@@_error:neeee #1#2#3#4#5
{
\group_begin:
- \msg_error:nnxxxx { unravel } {#1} {#2} {#3} {#4} {#5}
+ \msg_error:nneeee { unravel } {#1} {#2} {#3} {#4} {#5}
\group_end:
}
% \end{macrocode}
@@ -8880,12 +8982,11 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_tex_error:nn #1#2
{
- \group_begin:
- \msg_error:nnxxx { unravel } { tex-error }
+ \@@_error:neeee { tex-error }
{ \tl_to_str:n {#2} }
{ \use:c { @@_tex_msg_error_#1: } }
{ \use:c { @@_tex_msg_help_#1: } }
- \group_end:
+ { }
}
\cs_generate_variant:Nn \@@_tex_error:nn { nV }
% \end{macrocode}
@@ -8898,7 +8999,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_tex_fatal_error:nn #1#2
{
- \@@_error:nxxxx { tex-fatal }
+ \@@_error:neeee { tex-fatal }
{ \tl_to_str:n {#2} }
{ \use:c { @@_tex_msg_error_#1: } }
{ \use:c { @@_tex_msg_help_#1: } }
@@ -8925,6 +9026,10 @@
max-input .int_gset:N = \g_@@_default_max_input_int ,
number-steps .bool_gset:N = \g_@@_default_number_steps_bool ,
online .int_gset:N = \g_@@_default_online_int ,
+ output-file .code:n = {
+ \int_gzero:N \g_@@_default_online_int
+ \tl_gset:Nn \g_@@_default_output_file_tl {#1}
+ } ,
prompt-input .code:n
= \@@_prompt_input:Nn \g_@@_default_prompt_input_clist {#1} ,
trace-assigns .bool_gset:N = \g_@@_default_trace_assigns_bool ,
@@ -8941,6 +9046,10 @@
max-input .int_gset:N = \g_@@_max_input_int ,
number-steps .bool_gset:N = \g_@@_number_steps_bool ,
online .int_gset:N = \g_@@_online_int ,
+ output-file .code:n = {
+ \int_gzero:N \g_@@_online_int
+ \tl_gset:Nn \g_@@_output_file_tl {#1}
+ } ,
prompt-input .code:n
= \@@_prompt_input:Nn \g_@@_prompt_input_clist {#1} ,
trace-assigns .bool_gset:N = \g_@@_trace_assigns_bool ,
@@ -9040,7 +9149,7 @@
\cs_new_protected:Npn \unravel_get:nnN #1#2#3
{
\unravel:nn {#1} {#2}
- \tl_set:Nx #3 { \gtl_left_tl:N \g_@@_output_gtl }
+ \tl_set:Ne #3 { \gtl_left_tl:N \g_@@_output_gtl }
}
% \end{macrocode}
% \end{macro}
@@ -9056,6 +9165,7 @@
\bool_gset_eq:NN \g_@@_internal_debug_bool \g_@@_default_internal_debug_bool
\bool_gset_eq:NN \g_@@_number_steps_bool \g_@@_default_number_steps_bool
\int_gset_eq:NN \g_@@_online_int \g_@@_default_online_int
+ \tl_gset_eq:NN \g_@@_output_file_tl \g_@@_default_output_file_tl
\clist_gset_eq:NN \g_@@_prompt_input_clist \g_@@_default_prompt_input_clist
\bool_gset_eq:NN \g_@@_trace_assigns_bool \g_@@_default_trace_assigns_bool
\bool_gset_eq:NN \g_@@_trace_expansion_bool \g_@@_default_trace_expansion_bool
@@ -9065,6 +9175,8 @@
\int_gset_eq:NN \g_@@_max_output_int \g_@@_default_max_output_int
\int_gset_eq:NN \g_@@_max_input_int \g_@@_default_max_input_int
\int_gzero:N \g_@@_nonstop_int
+ \tl_gclear:N \g_@@_before_print_state_tl
+ \tl_gclear:N \g_@@_before_prompt_tl
}
% \end{macrocode}
% \end{macro}
@@ -9076,6 +9188,13 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_init_vars:
{
+ \int_gset_eq:NN \g_@@_current_online_int \g_@@_online_int
+ \tl_if_eq:NNF \g_@@_output_file_tl \g_@@_current_output_file_tl
+ {
+ \iow_close:N \g_@@_iow
+ \iow_open:Nn \g_@@_iow \g_@@_output_file_tl
+ \tl_gset_eq:NN \g_@@_current_output_file_tl \g_@@_output_file_tl
+ }
\seq_gclear:N \g_@@_prev_input_seq
\gtl_gclear:N \g_@@_output_gtl
\int_gzero:N \g_@@_step_int
@@ -9125,10 +9244,10 @@
{
\@@_set_action_text:
\bool_if:NT \g_@@_internal_debug_bool
- { \@@_exp_args:Nx \iow_term:n { Cmd:~\int_to_arabic:n { \l_@@_head_cmd_int } } }
+ { \iow_term:e { Cmd:~\int_to_arabic:n { \l_@@_head_cmd_int } } }
\cs_if_exist_use:cF
{ @@_cmd_ \int_use:N \l_@@_head_cmd_int : }
- { \@@_error:nxxxx { internal } { unknown-command } { } { } { } }
+ { \@@_error:neeee { internal } { unknown-command } { } { } { } }
}
% \end{macrocode}
% \end{macro}
@@ -9161,12 +9280,12 @@
\cs_new_protected:Npn \@@_final_conditionals:
{
\group_begin:
- \msg_warning:nnx { unravel } { dangling-conditionals }
+ \msg_warning:nne { unravel } { dangling-conditionals }
{ \tl_count:N \g_@@_if_limit_tl }
\group_end:
\tl_greverse:N \g_@@_if_limit_tl
\tl_gput_right:NV \g_@@_if_limit_tl \g_@@_if_limit_int
- \tl_gset:Nx \g_@@_if_limit_tl { \tl_tail:N \g_@@_if_limit_tl } % remove the {0}
+ \tl_gset:Ne \g_@@_if_limit_tl { \tl_tail:N \g_@@_if_limit_tl } % remove the {0}
\prg_replicate:nn { \tl_count:N \g_@@_if_limit_tl } { \fi: }
\tl_map_function:NN \g_@@_if_limit_tl \@@_final_cond_aux:n
}
diff --git a/macros/latex/contrib/unravel/unravel.pdf b/macros/latex/contrib/unravel/unravel.pdf
index e21bda64ef..8dadcfd811 100644
--- a/macros/latex/contrib/unravel/unravel.pdf
+++ b/macros/latex/contrib/unravel/unravel.pdf
Binary files differ
diff --git a/macros/luatex/latex/autotype/README b/macros/luatex/latex/autotype/README
index 8037418468..dfe3ca6291 100644
--- a/macros/luatex/latex/autotype/README
+++ b/macros/luatex/latex/autotype/README
@@ -5,8 +5,8 @@ German (old and new orthography).
Package authors: S. Hennig and K. Wehr
Current maintainer: K. Wehr
-Version: 0.4
-Date: 30 October 2023
+Version: 0.5
+Date: 5 January 2024
Bug tracker: https://codeberg.org/wehr/autotype/issues
The files of the autotype package are subject to different licences as
diff --git a/macros/luatex/latex/autotype/autotype-de.pdf b/macros/luatex/latex/autotype/autotype-de.pdf
index 83f0597650..7356d988d8 100644
--- a/macros/luatex/latex/autotype/autotype-de.pdf
+++ b/macros/luatex/latex/autotype/autotype-de.pdf
Binary files differ
diff --git a/macros/luatex/latex/autotype/autotype-de.tex b/macros/luatex/latex/autotype/autotype-de.tex
index 8ac83287e7..db99e7f55f 100644
--- a/macros/luatex/latex/autotype/autotype-de.tex
+++ b/macros/luatex/latex/autotype/autotype-de.tex
@@ -1,24 +1,14 @@
% autotype package: German manual
-% Version 0.4
-% Date: 30. Oktober 2023
+% Version 0.5
+% Date: 5. Januar 2024
\PassOptionsToPackage{hyphens}{url}
\documentclass{scrartcl}
\usepackage[german,ngerman]{babel}
\usepackage{autotype}
\usepackage{fontspec}
\usepackage{biblatex}
-% Vermeide einen Konflikt zwischen biblatex und musixtex.
-% Siehe https://tex.stackexchange.com/questions/443853/biblatex-and-musixtex-clash
-\makeatletter
-\let\blx@imc@addspace\addspace
-\blx@regimcs{\addspace}
-\makeatother
\usepackage{csquotes}
-\usepackage{cnltx-example}
-\usepackage{musixtex}
-\input musixlyr
-\usepackage{yfonts-otf}
-\usepackage{suetterl}
+\usepackage{hvextern}
\usepackage{paracol}
\usepackage[right]{lineno}
\usepackage[colorlinks=true,
@@ -35,16 +25,7 @@
\addbibresource{blackletter.bib}
\addbibresource{dtk-bibliography.bib}
-\setcnltx{
- add-cmds = {autotypelangoptions,autotypefontoptions,noligbreak,frakfamily,addfontfeature,suetterlin},
- color-scheme = blue,
- add-listings-options = {numbers=none},
-}
-
-\makeatletter
-\setlength{\cnltx@before@skip}{5pt plus1pt minus1pt}
-\setlength{\cnltx@after@skip}{5pt plus1pt minus1pt}
-\makeatother
+\setkeys{hv}{compiler=lualatex,force=true,crop=true,code=true,aboveskip=0.7ex,belowpreambleskip=1ex,lstOptions={basicstyle=\ttfamily,breaklines=true},BGbody=blue!20,BObody=blue!20,mpvalign=c}
\setmonofont{Deja Vu Sans Mono}[Scale=MatchLowercase]
\autotypelangoptions{ngerman}{ligbreak,hyphenation=weighted}
@@ -57,14 +38,14 @@
\newcommand\EMailDomain{dante}
\newcommand*\file[1]{\texttt{#1}}
\newcommand*\package[1]{\textsc{#1}}
-\newcommand\autotype{\textcolor{cnltx}{\package{auto\-type}}}
+\newcommand\autotype{\textcolor{blue!50!black}{\package{auto\-type}}}
\newcommand\TrennmusterWiki{\url{https://wiki.dante.de/doku.php?id=trennmuster:trennmuster}}
\newcommand\TrennmusterMailingList{\texttt{\EMail@\EMailDomain.de}}
-\newcommand\FrakturSize{\Large}
-\newcommand\FrakturFont{\fontspec{yfrak.otf}}
-\newcommand\SuetterlinSize{\LARGE}
-\newcommand\fraktur{\FrakturSize\FrakturFont}
-\newcommand\BspFrak[1]{\bgroup\FrakturFont #1\egroup}
+\newcommand*\command[1]{\mbox{\texttt{\textbackslash\textcolor{red!40!black}{#1}}}}
+\newcommand*\meta[1]{\bgroup\rmfamily$\langle$\emph{#1}$\rangle$\egroup}
+\newcommand*\marg[1]{\texttt{\{}\meta{#1}\texttt{\}}}
+\newcommand*\option[1]{\texttt{\textcolor{green!40!black}{#1}}}
+\newcommand*\BspFrak[1]{\bgroup\fontspec{yfrak.otf}#1\egroup}
\newenvironment{commandlist}{%
\begin{list}{}{%
@@ -89,7 +70,7 @@
\NewDocumentCommand \commanddescription {mo}
{
\item
- \cs {#1}
+ \command {#1}
\IfValueT {#2} {#2}
\\
}
@@ -116,7 +97,7 @@
Automatische sprachspezifische Typographie mit Lua\LaTeX
\medskip
-Version 0.4
+Version 0.5
\medskip
\normalsize
@@ -167,7 +148,7 @@ Seit Version 0.4 ist \autotype\ auf dem CTAN verfügbar.\footnote{\url{https://c
\begin{commandlist}
\commanddescription{autotypelangoptions}[\marg{Sprache}\marg{Optionen}]
Legt sprachspezifische Optionen fest.
-Die \meta{Sprache} ist dabei die vom Sprachpaket verwendete Sprachbezeichnung. Für das Deutsche ist dies mit \package{polyglossia} immer \code{german}, mit \package{babel} \code{ngerman}, \code{naustrian} oder anders, je nach gewählter Varietät. Die Beispiele in dieser Anleitung setzen die Verwendung von \package{babel} voraus. Die folgenden Optionen stehen zur Verfügung:
+Die \meta{Sprache} ist dabei die vom Sprachpaket verwendete Sprachbezeichnung. Für das Deutsche ist dies mit \package{polyglossia} immer \texttt{german}, mit \package{babel} \texttt{ngerman}, \texttt{naustrian} oder anders, je nach gewählter Varietät. Die Beispiele in dieser Anleitung setzen die Verwendung von \package{babel} voraus. Die folgenden Optionen stehen zur Verfügung:
\begin{optionlist}
\optiondescription{hyphenation}{default,primary,weighted}[default]
Silbentrennverfahren: \texttt{default} ist des Standardverfahren von \TeX, \texttt{primary} bedeutet eine Trennung nur an den Wortfugen mit der geringsten Bindungsstärke (Primärtrennstellen), \texttt{weighted} aktiviert einen Trennalgorithmus, der günstigere Trennstellen bevorzugt. Für das Nähere siehe Abschnitt \ref{hyphenation}.
@@ -201,7 +182,7 @@ Das gewöhnliche \TeX-Verfahren zur Silbentrennung behandelt alle Trennstellen i
\autotype\ unterscheidet zwischen Primär-, Sekundär- und Tertiärtrennstellen. Primärtrennstellen liegen in zusammengesetzten Wörtern sowie Wörtern mit Vor- oder Nachsilben an den Fugen mit der geringsten Bindungsstärke. Sekundärtrennstellen liegen an Fugen der nächstgrößeren Bindungsstärke und Tertiärtrennstellen sind alle übrigen. Die Unterscheidung zwischen den Trennstellenarten erfolgt auf der Grundlage von drei verschiedenen Trennmustersätzen, die vom deutschsprachigen Trennmusterprojekt\footnote{\TrennmusterWiki} zur Verfügung gestellt werden.
-In den folgenden Beispielwörtern sind Primärtrennstellen grün, Sekundärtrennstellen blau und Tertiärtrennstellen orange markiert:
+In den folgenden Beispielwörtern sind Primärtrennstellen durch einen langen grünen Strich, Sekundärtrennstellen durch einen kurzen blauen Strich unten und Tertiärtrennstellen durch einen kurzen orangen Strich oben markiert:
\bgroup
\autotypelangoptions{ngerman}{mark-hyph}%
Mineralwasser,
@@ -210,15 +191,23 @@ Müdigkeit,
Bilderbuchsommer,
Botaniklehrbuch,
Dienstaufsichtsbeschwerde,
-Bäckereien.
+Bäckereien,
+Bedeutung,
+Philosophiestudium.
\egroup
-%\autotypelangoptions{ngerman}{mark-hyph=off}
\subsection{Auswahl des Trennverfahrens}
Mit der Sprachoption \option{hyphenation=weighted} wird ein gewichtetes Trennverfahren aktiviert.
-\begin{sourcecode}
- \autotypelangoptions{ngerman}{hyphenation=weighted}
-\end{sourcecode}
+\begin{externalDocument}[showoutput=false]{hyphenation}
+\documentclass{article}
+\usepackage[ngerman]{babel}
+\usepackage{autotype}
+\begin{document}
+\autotypelangoptions{ngerman}{hyphenation=weighted}
+\end{document}
+\end{externalDocument}
+
+\medskip
Dabei stehen alle Trennstellen des gewöhnlichen Trennverfahrens zur Verfügung; sie erhalten jedoch unterschiedlich viele Strafpunkte (\emph{penalties}) und werden daher mit unterschiedlichen Wahrscheinlichkeiten zur Trennung ausgewählt. Während beim Standardtrennverfahren alle Trennstellen mit 50 Strafpunkten versehen werden, wichtet \autotype\ Primärtrennstellen mit \directlua{tex.print(autotype.get_penalty(1))}, Sekundärtrennstellen mit \directlua{tex.print(autotype.get_penalty(2))} und Tertiärtrennstellen mit \directlua{tex.print(autotype.get_penalty(3))} Strafpunkten.
In Wörtern mit Bindestrichen (z.\,B. »Konrad-Adenauer-Allee«) gelten die Bindestriche als Primärtrennstellen. Anders als beim Standardtrennverfahren werden auch innerhalb der Teilwörter Trennstellen eingefügt, die unterschiedslos als Tertiärtrennstellen behandelt werden.
@@ -226,41 +215,79 @@ In Wörtern mit Bindestrichen (z.\,B. »Konrad-Adenauer-Allee«) gelten die Bind
Der Anhang \ref{Kant} stellt die Ergebnisse des gewichteten Trennalgorithmus denen des Standardtrennalgorithmus anhand eines philosophischen Textes von Immanuel Kant gegenüber.
Mit \option{hyphenation=primary} werden die möglichen Trennstellen auf die Primärtrennstellen beschränkt. Das erhöht die Lesbarkeit, ist aber nur in Texten mit hinreichend langen Zeilen empfehlenswert.
-\begin{sourcecode}
- \autotypelangoptions{ngerman}{hyphenation=primary}
-\end{sourcecode}
+\begin{externalDocument}[showoutput=false]{hyphenation}
+\documentclass{article}
+\usepackage[ngerman]{babel}
+\usepackage{autotype}
+\begin{document}
+\autotypelangoptions{ngerman}{hyphenation=primary}
+\end{document}
+\end{externalDocument}
+\medskip
Außerdem ist es möglich, wieder zum Standardtrennverfahren zurückzukehren.
-\begin{sourcecode}
- \autotypelangoptions{ngerman}{hyphenation=default}
-\end{sourcecode}
+\begin{externalDocument}[showoutput=false]{hyphenation}
+\documentclass{article}
+\usepackage[ngerman]{babel}
+\usepackage{autotype}
+\begin{document}
+\autotypelangoptions{ngerman}{hyphenation=default}
+\end{document}
+\end{externalDocument}
+\medskip
Wenn für die Option \option{hyphenation} innerhalb des Dokuments ein neuer Wert gewählt wird, gilt dieser immer rückwirkend ab dem Anfang des Absatzes.
\subsection{Anzeige der Trennstellen}
Zum Anzeigen von Trennstellen existieren die Pakete \package{showhyphens}\footnote{\url{https://ctan.org/pkg/showhyphens}} und \package{showhyphenation}\footnote{\url{https://ctan.org/pkg/showhyphenation}}. Mit beiden ist es aber nicht möglich, die Trennstellenanzeige innerhalb des Dokuments ein- und auszuschalten und die Trennstellen nach Strafpunkten (\emph{penalties}) differenziert anzuzeigen.
-Daher bietet \autotype\ die Option \option{mark-hyph}, mit der Primärtrennstellen grün, Sekundärtrennstellen blau, Tertiärtrennstellen orange und sonstige Trennstellen rot markiert werden. \option{mark-hyph} kann auch für andere Sprachen als Deutsch verwendet werden.
-\begin{example}[pre-code={\raggedright}]
- \autotypelangoptions{ngerman}{hyphenation=weighted,mark-hyph}
- Bundesausbildungsförderungsgesetz Konrad-Adenauer-Allee\par
- \autotypelangoptions{ngerman}{hyphenation=default}
- Bundesausbildungsförderungsgesetz Konrad-Adenauer-Allee\\
- \autotypelangoptions{ngerman}{mark-hyph=off}
- Bundesausbildungsförderungsgesetz Konrad-Adenauer-Allee
-\end{example}
-
+Daher bietet \autotype\ die Option \option{mark-hyph}, mit der Primärtrennstellen grün (langer Strich), Sekundärtrennstellen blau (kurzer Strich unten), Tertiärtrennstellen orange und sonstige Trennstellen rot markiert werden (jeweils kurzer Strich oben). \option{mark-hyph} kann auch für andere Sprachen als Deutsch verwendet werden.%
+\begin{externalDocument}{hyphenation}
+\documentclass[11pt]{article}
+\usepackage[ngerman]{babel}
+\usepackage{autotype}
+\pagestyle{empty}
+\setlength\parindent{0pt}
+\begin{document}
+\autotypelangoptions{ngerman}{hyphenation=weighted,mark-hyph}
+Sozialhilferegelsatz Konrad-Adenauer-Allee\par
+\autotypelangoptions{ngerman}{hyphenation=default}
+Sozialhilferegelsatz Konrad-Adenauer-Allee\\
+\autotypelangoptions{ngerman}{mark-hyph=off}
+Sozialhilferegelsatz Konrad-Adenauer-Allee
+\end{document}
+\end{externalDocument}
\subsection{Bekannte Probleme}
\begin{itemize}
\item Die Übersetzung des Dokuments verlangsamt sich bei Verwendung des gewichteten Trennalgorithmus (Option \option{hyphenation=weighted}) erheblich.
-\item Die Werte von \cs{lefthyphenmin} und \cs{righthyphenmin} liegen mit \option{hyphenation=weighted} und \option{hyphenation=primary} konstant bei \texttt{2}. Sie sollten besser aus dem Sprachpaket übernommen werden, um anpassbar zu sein.
+\item Die Werte von \command{lefthyphenmin} und \command{righthyphenmin} liegen mit \option{hyphenation=\mbox{weighted}} und \option{hyphenation=primary} konstant bei \texttt{2}. Sie sollten besser aus dem Sprachpaket übernommen werden, um anpassbar zu sein.
+\item Mit \option{hyphenation=weighted} und \option{hyphenation=primary} werden auch Textteile in Schreibmaschinenschrift getrennt, was in \LaTeX\ eigentlich nicht vorgesehen ist, da für solche Schriften der Wert von \command{hyphenchar} auf \texttt{-1} gesetzt wird.
+\begin{externalDocument}{hyphenation}
+\documentclass[11pt]{article}
+\usepackage[ngerman]{babel}
+\usepackage{autotype}
+\pagestyle{empty}
+\begin{document}
+\autotypelangoptions{ngerman}{mark-hyph=on}
+Botaniklehrbuch \texttt{Botaniklehrbuch}\par
+\autotypelangoptions{ngerman}{hyphenation=weighted}
+Botaniklehrbuch \texttt{Botaniklehrbuch}
+\end{document}
+\end{externalDocument}
\item Nach einem explizit eingegebenen Gedankenstrich/Streckenstrich (\texttt{U+2013}) wird bei allen Trennverfahren keine Trennstelle eingefügt. Falls hier ein Umbruch gewünscht wird, muss der \package{babel}-Shorthand \verb:"": oder die alternative Eingabe \verb:--: verwendet werden.
-\begin{sidebyside}
- Freitag ist auf der Strecke Hamburg–Berlin mit Stau zu rechnen.\\
- Freitag ist auf der Strecke Hamburg–""Berlin mit Stau zu rechnen.\\
- Freitag ist auf der Strecke Hamburg--Berlin mit Stau zu rechnen.
-\end{sidebyside}
+\begin{externalDocument}{hyphenation}
+\documentclass[11pt]{article}
+\usepackage[ngerman]{babel}
+\pagestyle{empty}
+\begin{document}
+\begin{minipage}{6cm}
+Heute ist auf der Strecke Hamburg–Berlin mit Stau zu rechnen.\\
+Heute ist auf der Strecke Hamburg–""Berlin mit Stau zu rechnen.\\
+Heute ist auf der Strecke Hamburg--Berlin mit Stau zu rechnen.
+\end{minipage}
+\end{document}
+\end{externalDocument}
\end{itemize}
\section{Ligaturaufbruch\label{ligbreak}}
@@ -270,34 +297,62 @@ Die Pseudotrennmuster für den Ligaturaufbruch werden vom deutschsprachigen Tren
\subsection{Anwendung}
Der automatische Ligaturaufbruch wird durch die Option \option{ligbreak} aktiviert.
-\begin{example}[pre-code={\raggedright\autotypelangoptions{ngerman}{ligbreak=off}}]
- Auffahrt Auflage Tarifinformation Kunststoffindustrie\\
- \autotypelangoptions{ngerman}{ligbreak}
- Auffahrt Auflage Tarifinformation Kunststoffindustrie
-\end{example}
+\begin{externalDocument}{ligbreak}
+\documentclass[11pt]{article}
+\usepackage[ngerman]{babel}
+\usepackage{autotype}
+\pagestyle{empty}
+\setlength\parindent{0pt}
+\begin{document}
+Auffahrt Auflage Tarifinformation Kunststoffindustrie\\
+\autotypelangoptions{ngerman}{ligbreak}
+Auffahrt Auflage Tarifinformation Kunststoffindustrie
+\end{document}
+\end{externalDocument}
Zwar kommen Ligaturen mit \emph{f} als erstem Buchstaben am häufigsten vor, doch sind die verwendeten Muster nicht auf solche beschränkt, sondern verhindern auch exotischere Ligaturen.
-\begin{example}[pre-code={\raggedright\autotypelangoptions{ngerman}{ligbreak=off}}]
- \setmainfont{Libertinus Serif}[Ligatures=Rare,Ligatures=Historic]
- Abgastest Tagestourist Besetztzeichen Leitzinssatz\\
- \autotypelangoptions{ngerman}{ligbreak}
- Abgastest Tagestourist Besetztzeichen Leitzinssatz
-\end{example}
-
-Falls eine Ligatur nicht wie erwartet aufgebrochen wird, steht der herkömmliche \package{babel}-Shorthand \verb:"|: für diesen Zweck zur Verfügung. Falls eine Ligatur fälschlich aufgebrochen wird, kann mit dem Befehl \cs{noligbreak}, der als Argument ein Wort oder eine Buchstabengruppe erwartet, der Aufbruch verhindert werden; alternativ ist es möglich, an der Wortfuge einen der \package{babel}-Shorthands \verb:"|: oder \verb:"-: zu setzen.
-\begin{example}[pre-code={\raggedright}]
- \autotypelangoptions{ngerman}{ligbreak}
- Graufliege \noligbreak{Graufliege} Grau"|fliege Grau"-fliege
-\end{example}
+\begin{externalDocument}{ligbreak}
+\documentclass[11pt]{article}
+\usepackage[ngerman]{babel}
+\usepackage{fontspec}
+\usepackage{autotype}
+\pagestyle{empty}
+\setlength\parindent{0pt}
+\begin{document}
+\fontspec{Libertinus Serif}[Ligatures=Rare,Ligatures=Historic]
+Abgastest Tagestourist Besetztzeichen Leitzinssatz\\
+\autotypelangoptions{ngerman}{ligbreak}
+Abgastest Tagestourist Besetztzeichen Leitzinssatz
+\end{document}
+\end{externalDocument}
+
+Falls eine Ligatur nicht wie erwartet aufgebrochen wird, steht der herkömmliche \package{babel}-Shorthand \verb:"|: für diesen Zweck zur Verfügung. Falls eine Ligatur fälschlich aufgebrochen wird, kann mit dem Befehl \command{noligbreak}, der als Argument ein Wort oder eine Buchstabengruppe erwartet, der Aufbruch verhindert werden; alternativ ist es möglich, an der Wortfuge einen der \package{babel}-Shorthands \verb:"|: oder \verb:"-: zu setzen.
+\begin{externalDocument}{ligbreak}
+\documentclass[11pt]{article}
+\usepackage[ngerman]{babel}
+\usepackage{autotype}
+\pagestyle{empty}
+\begin{document}
+\autotypelangoptions{ngerman}{ligbreak}
+Graufliege \noligbreak{Graufliege} Grau"|fliege Grau"-fliege
+\end{document}
+\end{externalDocument}
Betroffene Wörter sollten in beiden Fällen an das deutschsprachige Trennmusterprojekt\footnote{\TrennmusterMailingList} gemeldet werden, damit die Muster verbessert werden können.
Um den automatischen Ligaturaufbruch gänzlich wieder abzuschalten, gibt es die Option \option{ligbreak=off}.
-\begin{example}[pre-code={\raggedright}]
- \autotypelangoptions{ngerman}{ligbreak}
- Schaffell Zupfinstrument Topflappen\\
- \autotypelangoptions{ngerman}{ligbreak=off}
- Schaffell Zupfinstrument Topflappen
-\end{example}
+\begin{externalDocument}{ligbreak}
+\documentclass[11pt]{article}
+\usepackage[ngerman]{babel}
+\usepackage{autotype}
+\pagestyle{empty}
+\setlength\parindent{0pt}
+\begin{document}
+\autotypelangoptions{ngerman}{ligbreak}
+Schaffell Zupfinstrument Topflappen\\
+\autotypelangoptions{ngerman}{ligbreak=off}
+Schaffell Zupfinstrument Topflappen
+\end{document}
+\end{externalDocument}
\subsection{Bekannte Probleme und offene Fragen}
\begin{itemize}
@@ -313,11 +368,19 @@ Es wäre ein Leichtes für \autotype, an solchen Stellen einen kleinen Zusatzabs
\item Wenn eine Dreierligatur (zu denken ist in erster Linie an \emph{ffi}, \emph{ſſi} und \emph{ffl}) möglich ist, die Schrift aber nur Zweierligaturen kennt, werden die ersten beiden Buchstaben ligiert. Wenn allerdings nach dem ersten Buchstaben der Dreiergruppe eine Silbentrennstelle vorliegt, sollten stattdessen der zweite und dritte Buchstabe ligiert werden. Beispiele hierfür wären \emph{Offizier, Meſſias, Soufflé}.
Da die meisten Digitalschriften über die Dreierligatur verfügen, wenn auch die entsprechenden Zweierligaturen vorhanden sind, ergibt sich das Problem nur selten. Das einzige bekannte Beispiel ist die recht spezielle Schrift \emph{Missaali}, eine spätmittelalterliche gotische Druckschrift (vgl. auch Abschnitt \ref{missaali}).
-\begin{sidebyside}[pre-output={\FrakturSize}]
- \fontspec{Missaali}
- Offizier Meſſias Soufflé\\
- Of"|fizier Meſ"|ſias Souf"|flé
-\end{sidebyside}
+
+\begin{externalDocument}[mpwidth=0.5\textwidth]{long-s}
+\documentclass[DIV=8,fontsize=16pt]{scrartcl}
+\usepackage[german]{babel}
+\usepackage{fontspec}
+\pagestyle{empty}
+\setlength\parindent{0pt}
+\begin{document}
+\fontspec{Missaali}
+Offizier Meſſias Soufflé\\
+Of"|fizier Meſ"|ſias Souf"|flé
+\end{document}
+\end{externalDocument}
\end{itemize}
\section{Lang-s und Rund-s\label{long-s}}
@@ -329,38 +392,76 @@ In der frühen Neuzeit war das Lang-s auch in Antiqua-Schriften üblich, wenn au
\subsection{Anwendung}
Die automatische Lang- und Rund-s-Schreibung wird durch die Option \option{long-s} aktiviert. Diese sollte immer mit der Option \option{ligbreak} kombiniert werden, da die korrekte Verwendung der Ligaturen im Fraktursatz noch wichtiger ist als im Antiquasatz. Für die folgenden Beispiele verwenden wir die Schrift \texttt{yfrak.otf} (vgl. Abschnitt \ref{yfonts}).
-\begin{example}[pre-output={\selectlanguage{german}\fraktur\raggedright}]
- aussichtslos Abschiedsbesuch Atemschutzmaske Massenarbeitslosigkeit\\
- \autotypelangoptions{german}{ligbreak,long-s}
- aussichtslos Abschiedsbesuch Atemschutzmaske Massenarbeitslosigkeit
-\end{example}
-
-Falls die automatische Ersetzung nicht zum richtigen Ergebnis führt, können die Befehle \cs{autotypelongs} und \cs{autotyperounds} verwendet werden, um manuell ein Lang- bzw. Rund-s einzufügen. Das ist etwa im folgenden Beispiel nützlich, wenn es sich um eine \emph{Wachs-Tube} und keine \emph{Wach-Stube} handelt. Alternativ helfen hier auch die \package{babel}-Shorthands \verb:"|: und \verb:"-: an der Wortfuge.
-\begin{sidebyside}[pre-output={\autotypelangoptions{ngerman}{long-s}\fraktur}]
- Wachstube\\
- Wach\autotyperounds tube\\
- Wachs"|tube\\
- Wachs"-tube
-\end{sidebyside}
+\begin{externalDocument}{long-s}
+\documentclass[DIV=8,fontsize=15pt]{scrartcl}
+\usepackage[german]{babel}
+\usepackage{fontspec}
+\usepackage{autotype}
+\setmainfont{yfrak.otf}
+\pagestyle{empty}
+\setlength\parindent{0pt}
+\begin{document}
+aussichtslos Abschiedsbesuch Atemschutzmaske Massenarbeitslosigkeit\\
+\autotypelangoptions{german}{ligbreak,long-s}
+aussichtslos Abschiedsbesuch Atemschutzmaske Massenarbeitslosigkeit
+\end{document}
+\end{externalDocument}
+
+Falls die automatische Ersetzung nicht zum richtigen Ergebnis führt, können die Befehle \command{autotypelongs} und \command{autotyperounds} verwendet werden, um manuell ein Lang- bzw. Rund-s einzufügen. Das ist etwa im folgenden Beispiel nützlich, wenn es sich um eine \emph{Wachs-Tube} und keine \emph{Wach-Stube} handelt. Alternativ helfen hier auch die \package{babel}-Shorthands \verb:"|: und \verb:"-: an der Wortfuge.\\
+\begin{externalDocument}[mpwidth=0.5\textwidth]{long-s}
+\documentclass[DIV=8,fontsize=15pt]{scrartcl}
+\usepackage[german]{babel}
+\usepackage{fontspec}
+\usepackage{autotype}
+\setmainfont{yfrak.otf}
+\autotypelangoptions{german}{long-s}
+\pagestyle{empty}
+\setlength\parindent{0pt}
+\begin{document}
+Wachstube\\
+Wach\autotyperounds tube\\
+Wachs"|tube\\
+Wachs"-tube
+\end{document}
+\end{externalDocument}
+\\
Betroffene Wörter sollten außer bei Homographen wie den oben genannten an das deutschsprachige Trennmusterprojekt\footnote{\TrennmusterMailingList} gemeldet werden, damit die Muster verbessert werden können.
-Die automatische Ersetzung kann mit der Option \option{long-s=off} wieder abgeschaltet werden. Die Befehle \cs{autotypelongs} und \cs{autotyperounds} bleiben auch dann verfügbar.
+Die automatische Ersetzung kann mit der Option \option{long-s=off} wieder abgeschaltet werden. Die Befehle \command{autotypelongs} und \command{autotyperounds} bleiben auch dann verfügbar.
Falls keine weiteren Einstellungen vorgenommen wurden, geht \autotype\ davon aus, dass sich Lang- und Rund-s auf den durch Unicode definierten Codepositionen befinden, nämlich 383 (\texttt{U+017F}) für das Lang-s und 115 (\texttt{U+0073}) für das Rund-s. Für Opentype-Schriften ist diese Annahme zutreffend, für andere Schriftformate typischerweise nicht. Für solche Schriften müssen die Codepositionen daher mit Hilfe der Schriftoptionen \option{long-s-codepoint} und \option{round-s-codepoint} angegeben werden. Beispielsweise lautet für die Sütterlinschrift \texttt{schwell} (vgl. Abschnitt \ref{suetterlin}) der nötige Befehl:
-\begin{sourcecode}
- \autotypefontoptions{schwell}{long-s-codepoint=115,round-s-codepoint=28}
-\end{sourcecode}
+\begin{externalDocument}[showoutput=false]{long-s}
+\documentclass{article}
+\usepackage{autotype}
+\begin{document}
+\autotypefontoptions{schwell}{long-s-codepoint=115,round-s-codepoint=28}
+\end{document}
+\end{externalDocument}
+
+\medskip
Alternativ ist die hexadezimale Schreibweise möglich.
-\begin{sourcecode}
- \autotypefontoptions{schwell}{long-s-codepoint=0x73,round-s-codepoint=0x1C}
-\end{sourcecode}
+\begin{externalDocument}[showoutput=false]{long-s}
+\documentclass{article}
+\usepackage{autotype}
+\begin{document}
+\autotypefontoptions{schwell}{long-s-codepoint=0x73,round-s-codepoint=0x1C}
+\end{document}
+\end{externalDocument}
Für spezielle Anwendungen wird zusätzlich noch die Option \option{final-round-s-codepoint} benötigt, siehe Abschnitt \ref{suetterlin}.
Für den Satz mit gebrochenen Schriften ist generell die deutsche Rechtschreibregelung von 1901 (»alte Rechtschreibung«) vorzuziehen, da die Schreibung der s-Laute hier besser ins Schriftbild passt. Bei Verwendung der Konventionen von 1996 (»neue Rechtschreibung«) wird ein Doppel-s am Wortende als \BspFrak{\autotypelongs\autotyperounds} wiedergegeben.
-\begin{example}[pre-output={\fraktur\raggedright}]
- \autotypelangoptions{ngerman}{ligbreak,long-s}
- Abschiedskuss Kongressbeschluss Messstelle
-\end{example}
+\begin{externalDocument}{long-s}
+\documentclass[DIV=8,fontsize=15pt]{scrartcl}
+\usepackage[ngerman]{babel}
+\usepackage{fontspec}
+\usepackage{autotype}
+\setmainfont{yfrak.otf}
+\pagestyle{empty}
+\begin{document}
+\autotypelangoptions{ngerman}{ligbreak,long-s}
+Abschiedskuss Kongressbeschluss Messstelle
+\end{document}
+\end{externalDocument}
\subsection{Beispiele}
Wir stellen die konkrete Anwendung der Option \option{long-s} mit verschiedenen frei verfügbaren gebrochenen Schriften vor.
@@ -369,119 +470,210 @@ Wir stellen die konkrete Anwendung der Option \option{long-s} mit verschiedenen
Diese Schriften von Yannis Haralambous -- ursprünglich mit Metafont entworfen \cite{haralambous}, dann nach Type1 konvertiert \cite{dtk03.2:bronger:einfaches,dtk03.3:hoffmann-axthelm:fraktur} -- liegen seit 2022 auch im Opentype-Format\footnote{\url{https://ctan.org/pkg/yfonts-otf}} vor.
Bei \texttt{ygoth} handelt es sich um eine gotische Schrift nach dem Vorbild der Schrift Gutenbergs und anderer Druckschriften des 15. Jahrhunderts.
-\begin{example}[pre-output={\selectlanguage{german}\FrakturSize\raggedright}]
- \autotypelangoptions{german}{ligbreak,long-s}
- \fontspec{ygoth.otf}
- Oskar entschied sich angesichts des aussichtslosen Wassermangels zur Umsiedlung von Moskau nach Minsk.
-\end{example}
+\begin{externalDocument}{long-s}
+\documentclass[DIV=8,fontsize=15pt]{scrartcl}
+\usepackage[german]{babel}
+\usepackage{fontspec}
+\usepackage{autotype}
+\pagestyle{empty}
+\setlength\parindent{0pt}
+\begin{document}
+\autotypelangoptions{german}{ligbreak,long-s}
+\fontspec{ygoth.otf}
+Oskar entschied sich angesichts des aussichtslosen Wassermangels zur Umsiedlung von Moskau nach Minsk.
+\end{document}
+\end{externalDocument}
\texttt{yswab} ist eine Schwabacher Schrift nach Vorlagen des 18. Jahrhunderts.
-\begin{example}[pre-output={\selectlanguage{german}\FrakturSize\raggedright}]
- \autotypelangoptions{german}{ligbreak,long-s}
- \fontspec{yswab.otf}
- Oskar entschied sich angesichts des aussichtslosen Wassermangels zur Umsiedlung von Moskau nach Minsk.
-\end{example}
+\begin{externalDocument}{long-s}
+\documentclass[DIV=8,fontsize=15pt]{scrartcl}
+\usepackage[german]{babel}
+\usepackage{fontspec}
+\usepackage{autotype}
+\pagestyle{empty}
+\setlength\parindent{0pt}
+\begin{document}
+\autotypelangoptions{german}{ligbreak,long-s}
+\fontspec{yswab.otf}
+Oskar entschied sich angesichts des aussichtslosen Wassermangels zur Umsiedlung von Moskau nach Minsk.
+\end{document}
+\end{externalDocument}
Die Schrift \texttt{yfrak} ist eine digitalisierte Variante der Breitkopf-Fraktur aus der Mitte des 18. Jahrhunderts, einer bis ins 20. Jahrhundert vielfach genutzten Frakturschrift.
-\begin{example}[pre-output={\selectlanguage{german}\FrakturSize\raggedright}]
- \autotypelangoptions{german}{ligbreak,long-s}
- \fontspec{yfrak.otf}
- Oskar entschied sich angesichts des aussichtslosen Wassermangels zur Umsiedlung von Moskau nach Minsk.
-\end{example}
-
-Das Paket \package{yfonts-otf.sty} stellt zur Schriftauswahl die Befehle \cs{gothfamily}, \cs{swabfamily} und \cs{frakfamily} zur Verfügung. Zur Verwendung mit \autotype\ sind diese aber weniger geeignet, da mit ihnen auch das Opentype-Merkmal \texttt{ss11} aktiviert wird, hinter dem sich ein eigener Algorithmus zum Lang- und Rund-s-Satz verbirgt, dessen Fehler \autotype\ nicht in allen Fällen korrigieren kann. Wenn jene Befehle gemeinsam mit \autotype\ verwendet werden sollen, muss anschließend jeweils das Merkmal \texttt{ss11} deaktivert werden.
-\begin{example}[pre-output={\selectlanguage{german}\FrakturSize\raggedright}]
- \autotypelangoptions{german}{ligbreak,long-s}
- \frakfamily
- % falsche s-Schreibung mit ss11
- Aischylos Couscous Disco Eschatologie Ischias Ismaning Sanskrit \\
- \addfontfeature{RawFeature=-ss11}
- % richtige s-Schreibung mit autotype
- Aischylos Couscous Disco Eschatologie Ischias Ismaning Sanskrit
-\end{example}
+\begin{externalDocument}{long-s}
+\documentclass[DIV=8,fontsize=15pt]{scrartcl}
+\usepackage[german]{babel}
+\usepackage{fontspec}
+\usepackage{autotype}
+\pagestyle{empty}
+\setlength\parindent{0pt}
+\begin{document}
+\autotypelangoptions{german}{ligbreak,long-s}
+\fontspec{yfrak.otf}
+Oskar entschied sich angesichts des aussichtslosen Wassermangels zur Umsiedlung von Moskau nach Minsk.
+\end{document}
+\end{externalDocument}
+
+Das Paket \package{yfonts-otf.sty} stellt zur Schriftauswahl die Befehle \command{gothfamily}, \command{swabfamily} und \command{frakfamily} zur Verfügung. Zur Verwendung mit \autotype\ sind diese aber weniger geeignet, da mit ihnen auch das Opentype-Merkmal \texttt{ss11} aktiviert wird, hinter dem sich ein eigener Algorithmus zum Lang- und Rund-s-Satz verbirgt, dessen Fehler \autotype\ nicht in allen Fällen korrigieren kann. Wenn jene Befehle gemeinsam mit \autotype\ verwendet werden sollen, muss anschließend jeweils das Merkmal \texttt{ss11} deaktiviert werden.%
+\begin{externalDocument}{long-s}
+\documentclass[DIV=8,fontsize=15pt]{scrartcl}
+%StartVisiblePreamble
+\usepackage[german]{babel}
+\usepackage{yfonts-otf}
+\usepackage{autotype}
+%StopVisiblePreamble
+\pagestyle{empty}
+\setlength\parindent{0pt}
+\begin{document}
+\autotypelangoptions{german}{ligbreak,long-s}
+\frakfamily % falsche s-Schreibung mit ss11
+Aischylos Couscous Disco Eschatologie Ischias Ismaning Sanskrit \\
+\addfontfeature{RawFeature=-ss11} % richtige s-Schreibung mit autotype
+Aischylos Couscous Disco Eschatologie Ischias Ismaning Sanskrit
+\end{document}
+\end{externalDocument}
\subsubsection{Missaali\label{missaali}}
\emph{Missaali} von Tommi Syrjänen ist eine freie gebrochene Schrift im Opentype-Format. Vorlage ist die gotische Schrift eines im späten Mittelalter für Finnland gedruckten Messbuchs. Eine umfangreiche Dokumentation liegt vor.\footnote{\url{https://ctan.org/pkg/missaali}}
Nach historischem Vorbild setzt \emph{Missaali} ein Lang-s im Wortinnern und ein Rund"~s am Wortende, wofür das Opentype-Merkmal \texttt{calt} (Contextual Alternates) genutzt wird. Sollen Lang- und Rund-s stattdessen nach den komplexeren deutschen Regeln gesetzt werden, muss dieses Merkmal mit Hilfe der entsprechenden \package{fontspec}-Option ausgeschaltet werden. Dadurch geht allerdings auch die automatische Einfügung des Rund-r an bestimmten Stellen\footnote{Vgl. \package{Missaali}-Anleitung, Abschnitt 3, S. 21 unten.} verloren.
-\begin{example}[pre-output={\selectlanguage{german}\FrakturSize\raggedright}]
- \fontspec{Missaali}[Contextuals=AlternateOff]
- \autotypelangoptions{german}{ligbreak,long-s}
- Oskar entschied sich angesichts des aussichtslosen Wassermangels zur Umsiedlung von Moskau nach Minsk.
-\end{example}
+\begin{externalDocument}{long-s}
+\documentclass[DIV=8,fontsize=16pt]{scrartcl}
+\usepackage[german]{babel}
+\usepackage{fontspec}
+\usepackage{autotype}
+\pagestyle{empty}
+\setlength\parindent{0pt}
+\begin{document}
+\fontspec{Missaali}[Contextuals=AlternateOff]
+\autotypelangoptions{german}{ligbreak,long-s}
+Oskar entschied sich angesichts des aussichtslosen Wassermangels zur Umsiedlung von Moskau nach Minsk.
+\end{document}
+\end{externalDocument}
\subsubsection{Ligafaktur-Schriften\label{ligafaktur}}
Auf der Seite \url{https://www.ligafaktur.de} wird eine Reihe von Frakturschriften in drei unterschiedlichen Varianten bezüglich der vorhandenen Ligaturen angeboten: LUC, LOB und LOV. Für die Verwendung mit \autotype\ sind die LOB-Schriften am besten geeignet.
-\begin{example}[pre-code={\raggedright\selectlanguage{german}\FrakturSize}]
- \autotypelangoptions{german}{ligbreak,long-s}
- \fontspec{LOB.TheuerdankFraktur}
- Oskar entschied sich angesichts des aussichtslosen Wassermangels zur Umsiedlung von Moskau nach Minsk.
-\end{example}
+\begin{externalDocument}{long-s}
+\documentclass[DIV=8,fontsize=15pt]{scrartcl}
+\usepackage[german]{babel}
+\usepackage{fontspec}
+\usepackage{autotype}
+\pagestyle{empty}
+\setlength\parindent{0pt}
+\begin{document}
+\autotypelangoptions{german}{ligbreak,long-s}
+\fontspec{LOB.TheuerdankFraktur}
+Oskar entschied sich angesichts des aussichtslosen Wassermangels zur Umsiedlung von Moskau nach Minsk.
+\end{document}
+\end{externalDocument}
\subsubsection{Sütterlinschrift\label{suetterlin}}
Auf dem CTAN findet man verschiedene Varianten der Sütterlinschrift, die in der ersten Hälfte des 20. Jahrhunderts als Schulausgangsschrift verwendet wurde. Sie wurden von Walter Entenmann\footnote{\url{https://ctan.org/pkg/schulschriften}} und Berthold Ludewig\footnote{\url{https://ctan.org/pkg/sueterlin}} bereitgestellt. Es handelt sich in beiden Fällen um T1-codierte Metafont-Schriften, die ausnahmsweise nicht mit der Option \option{ligbreak} benutzt werden sollten, da diese die Buchstabenverbindungen an den Wortfugen zerstört.
Das Paket \package{schulschriften} von W. Entenmann \cite{dtk12.4:entenmann:schulschriften} stellt eine ganze Sippe von zwölf Sütterlinschriften zur Verfügung, die sich durch die Strichstärke, die Neigung und die Art der Feder unterscheiden. Wir führen im folgenden Beispiel zwei dieser Schriften vor und verweisen für die übrigen auf die Paketanleitung. Die Schriften haben zwei verschiedene Rund-s-Formen: eine Binnenform mit Anschluss an den Folgebuchstaben und eine Schlussform. Die Schlussform muss \autotype\ mit der Schriftoption \option{final-round-s-codepoint} bekannt gemacht werden. Die Codepositionen der s-Formen sind für alle Schriften gleich, müssen aber für jede verwendete Variante separat angegeben werden, da alle Varianten unterschiedliche \TeX-Namen tragen. Die Verdopplung des Doppelpunkts bei Wörtern, die auf \emph{s} enden (vgl. Paketanleitung), entfällt bei Verwendung der \autotype-Option \option{long-s}.
-\begin{example}[pre-output={\selectlanguage{german}\SuetterlinSize\raggedright}]
- \usefont{T1}{wesu}{m}{n}
- \autotypefontoptions{wesu14}{long-s-codepoint=115,round-s-codepoint=24,final-round-s-codepoint=25}
- \autotypelangoptions{german}{long-s}
- Oskar entschied sich angesichts des aussichtslosen Wassermangels zur Umsiedlung von Moskau nach Minsk.\\
- \usefont{T1}{wesu}{b}{sl}
- \autotypefontoptions{wesubsl14}{long-s-codepoint=115,round-s-codepoint=24,final-round-s-codepoint=25}
- Oskar entschied sich angesichts des aussichtslosen Wassermangels zur Umsiedlung von Moskau nach Minsk.
-\end{example}
-
-Die Sütterlinschrift von B. Ludewig gibt es in zwei Varianten: einer aufrechten mit dem Namen \texttt{suet14} und einer geneigten mit dem Namen \texttt{schwell} (siehe auch \cite[39\psqq]{dtk96.1:neugebauer:krakelig}). Die Verwendung wird durch das Hilfspaket \package{suetterl}\footnote{\url{https://ctan.org/pkg/fundus-sueterlin}} erleichtert, das den Schriftauswahlbefehl \cs{suetterlin} bereitstellt und \texttt{schwell} als Kursive von \texttt{suet14} definiert.
-\begin{sourcecode}
- \usepackage{suetterl}
-\end{sourcecode}
-\begin{example}[pre-output={\selectlanguage{german}\huge\raggedright}]
- \autotypefontoptions{suet14}{long-s-codepoint=115,round-s-codepoint=28}
- \autotypefontoptions{schwell}{long-s-codepoint=115,round-s-codepoint=28}
- \autotypelangoptions{german}{long-s}
- \suetterlin
- Oskar entschied sich angesichts des aussichtslosen Wassermangels zur Umsiedlung von Moskau nach Minsk.\\
- \itshape
- Oskar entschied sich angesichts des aussichtslosen Wassermangels zur Umsiedlung von Moskau nach Minsk.
-\end{example}
+\begin{externalDocument}{long-s}
+\documentclass[DIV=8,fontsize=17pt]{scrartcl}
+\setlength\parindent{0pt}
+%StartVisiblePreamble
+\usepackage[german]{babel}
+\usepackage{autotype}
+\autotypefontoptions{wesu14}{long-s-codepoint=115,round-s-codepoint=24,final-round-s-codepoint=25}
+\autotypefontoptions{wesubsl14}{long-s-codepoint=115,round-s-codepoint=24,final-round-s-codepoint=25}
+%StopVisiblePreamble
+\pagestyle{empty}
+\begin{document}
+\autotypelangoptions{german}{long-s}
+\usefont{T1}{wesu}{m}{n}
+Oskar entschied sich angesichts des aussichtslosen Wassermangels zur Umsiedlung von Moskau nach Minsk.\\
+\usefont{T1}{wesu}{b}{sl}
+Oskar entschied sich angesichts des aussichtslosen Wassermangels zur Umsiedlung von Moskau nach Minsk.
+\end{document}
+\end{externalDocument}
+
+Die Sütterlinschrift von B. Ludewig gibt es in zwei Varianten: einer aufrechten mit dem Namen \texttt{suet14} und einer geneigten mit dem Namen \texttt{schwell} (siehe auch \cite[39\psqq]{dtk96.1:neugebauer:krakelig}). Die Verwendung wird durch das Hilfspaket \package{suetterl}\footnote{\url{https://ctan.org/pkg/fundus-sueterlin}} erleichtert, das den Schriftauswahlbefehl \command{suetterlin} bereitstellt und \texttt{schwell} als Kursive von \texttt{suet14} definiert.
+\begin{externalDocument}{long-s}
+\documentclass[DIV=8,fontsize=20pt]{scrartcl}
+\setlength\parindent{0pt}
+%StartVisiblePreamble
+\usepackage[german]{babel}
+\usepackage{autotype}
+\usepackage{suetterl}
+\autotypefontoptions{suet14}{long-s-codepoint=115,round-s-codepoint=28}
+\autotypefontoptions{schwell}{long-s-codepoint=115,round-s-codepoint=28}
+%StopVisiblePreamble
+\pagestyle{empty}
+\begin{document}
+\autotypelangoptions{german}{long-s}
+\suetterlin
+Oskar entschied sich angesichts des aussichtslosen Wassermangels zur Umsiedlung von Moskau nach Minsk.\\
+\itshape
+Oskar entschied sich angesichts des aussichtslosen Wassermangels zur Umsiedlung von Moskau nach Minsk.
+\end{document}
+\end{externalDocument}
\subsection{Bekannte Probleme und offene Fragen}
\begin{itemize}
+\parskip=\dimexpr\baselineskip-3mm-\parsep
\item Die zur Zeit vorliegenden Pseudotrennmuster für die s-Schreibung berücksichtigen zwar die alte und neue deutsche Rechtschreibung, nicht jedoch die Schweizer Orthographie. Bei Wörtern wie »ausser« oder »Stoss« führt dies zu falschen s-Schreibungen (\BspFrak{\autotypelangoptions{ngerman}{long-s}ausser, Stoss}). Fraglich ist, ob die Schreibung mit Doppel-s im Fraktursatz bei solchen Wörtern überhaupt jemals praktiziert wurde oder ob auch in der Schweiz hier das ß genutzt wurde.
\item Bei Verwendung von Gesangstexten in \package{musixtex}/\package{musixlyr} muss der Text mit expliziten Trennstellen eingegeben werden. Dies kann zu falschen s-Schreibungen führen, insbesondere am Silbenende.
-\begin{example}[pre-output={\autotypelangoptions{ngerman}{long-s}\FrakturFont}]
- \begin{music}
- \nobarnumbers
- \generalsignature{1}
- \generalmeter{\meterfrac{2}{4}}
- \setlyrics{Text}{Ging ein Weib-lein Nüs-se schüt-teln}
- \assignlyrics{1}{Text}
- \startextract
- \Notes\ca{g}\ca{g}\ca{f}\ca{e}\en\bar
- \Notes\ca{d}\ca{d}\ca{g}\ca{g}\en
- \endextract
- \end{music}
-\end{example}
+\begin{externalDocument}{long-s}
+\documentclass[12pt]{article}
+%StartVisiblePreamble
+\usepackage[german]{babel}
+\usepackage{fontspec}
+\usepackage{autotype}
+\usepackage{musixtex}
+\input{musixlyr}
+\setmainfont{yfrak.otf}
+\autotypelangoptions{german}{long-s}
+%StopVisiblePreamble
+\pagestyle{empty}
+\begin{document}
+\begin{music}
+\nobarnumbers
+\generalsignature{1}
+\generalmeter{\meterfrac{2}{4}}
+\setlyrics{Text}{Ging ein Weib-lein Nüs-se schüt-teln}
+\assignlyrics{1}{Text}
+\startextract
+\Notes\ca{g}\ca{g}\ca{f}\ca{e}\en\bar
+\Notes\ca{d}\ca{d}\ca{g}\ca{g}\en
+\endextract
+\end{music}
+\end{document}
+\end{externalDocument}
\item Bei Opentype-Schriften, die das Merkmal \texttt{calt} (Contextual Alternates) oder ein anderes Opentype-Merkmal nutzen, um Rund- und Lang-s nach eigenen Regeln zu setzen, funktioniert die s-Ersetzung durch \autotype\ nicht. Das Merkmal muss daher ausgeschaltet werden; siehe den Abschnitt \ref{missaali} für ein Beispiel.
\item Falls in einer Abkürzung ein Lang-s am Wortende stehen soll, kann dieses nicht automatisch gesetzt werden, da die Trennmuster immer nur Stellen zwischen zwei Buchstaben bezeichnen und sich die Markierung im Falle der s-Schreibung vereinbarungsgemäß auf den vorangehenden Buchstaben bezieht. Am Wortende setzt der Algorithmus unabhängig von den Mustern stets ein Rund-s. Ein Beispiel wäre die Abkürzung »StAss« für »Studienassessor«. Fraglich ist, ob solche Abkürzungen überhaupt in Fraktur zu setzen sind.
\item Falls eine Schriftart eine Ligatur aus Rund-s und einem weiteren Buchstaben definiert, deren Glyphe ein Lang-s enthält, führt dies zu falscher s-Schreibung. Zwar wird von \autotype\ zunächst ein Rund-s eingefügt, doch verschwindet dieses anschließend wieder durch die Ligatur. Auch die Option \option{ligbreak} verhindert das in einigen Fällen nicht.
-\begin{example}[pre-output={\selectlanguage{german}\FrakturSize}]
- \fontspec{Missaali}[Contextuals=AlternateOff]
- \autotypelangoptions{german}{long-s}
- Eislauf Auslosung Haustier Breslau Moslem\\
- \autotypelangoptions{german}{ligbreak,long-s}
- Eislauf Auslosung Haustier Breslau Moslem
-\end{example}
+\begin{externalDocument}{long-s}
+\documentclass[DIV=8,fontsize=16pt]{scrartcl}
+\usepackage[german]{babel}
+\usepackage{fontspec}
+\usepackage{autotype}
+\pagestyle{empty}
+\setlength\parindent{0pt}
+\begin{document}
+\fontspec{Missaali}[Contextuals=AlternateOff]
+\autotypelangoptions{german}{long-s}
+Eislauf Auslosung Haustier Breslau Moslem\\
+\autotypelangoptions{german}{ligbreak,long-s}
+Eislauf Auslosung Haustier Breslau Moslem
+\end{document}
+\end{externalDocument}
\item Bei einer Nicht-Opentype-Schriftfamilie mit mehreren Schriften (z.\,B. die Sütterlinschrift aus dem Paket \package{schulschriften}, siehe Abschnitt \ref{suetterlin}) müssen die Codepositionen der s-Glyphen für alle Einzelschriften separat festgelegt werden, da die Schriften unterschiedliche \TeX-Namen haben. Besser wäre eine pauschale Festlegung für die ganze Schriftfamilie. Deren Name ist im \LaTeX-Makro\ \verb:\f@family: abgelegt. Wie er in Lua\TeX\ abgefragt werden kann, muss noch untersucht werden.
-\item Bei den im Abschnitt \ref{suetterlin} beschriebenen Sütterlinschriften wird ein Lang-s vor einem Trennstrich durch ein Rund-s ersetzt. Die geschieht auch ohne die \autotype-Option \option{long-s} und liegt an einer entsprechenden Definition in den Ligaturtabellen der Schriften, die wohl eigentlich für Wörter mit Bindestrich gedacht war.
-\begin{example}[pre-output={\selectlanguage{german}\SuetterlinSize}]
- \usefont{T1}{wesu}{m}{n}
- \autotypefontoptions{wesu14}{long-s-codepoint=115,round-s-codepoint=24,final-round-s-codepoint=25}
- \autotypelangoptions{german}{long-s}
- Wasser Wasser Wasser Wasser Wasser Wasser Wasser
-\end{example}
-
+\item Bei den im Abschnitt \ref{suetterlin} beschriebenen Sütterlinschriften wird ein Lang-s vor einem Trennstrich durch ein Rund-s ersetzt. Die geschieht auch ohne die \autotype-Option \option{long-s} und liegt an einer entsprechenden Definition in den Ligaturtabellen der Schriften, die wohl eigentlich für Wörter mit Bindestrich gedacht war.%
+\begin{externalDocument}{long-s}
+\documentclass[DIV=8,fontsize=17pt]{scrartcl}
+\usepackage[german]{babel}
+\usepackage{autotype}
+\pagestyle{empty}
+\begin{document}
+\usefont{T1}{wesu}{m}{n}
+\autotypefontoptions{wesu14}{long-s-codepoint=115,round-s-codepoint=24,final-round-s-codepoint=25}
+\autotypelangoptions{german}{long-s}
+\parbox{6cm}{Wasser Wasser Wasser Wasser}
+\end{document}
+\end{externalDocument}
\end{itemize}
\printbibliography[heading=subbibnumbered,title={Literatur zum Satz gebrochener Schriften mit \TeX}]
diff --git a/macros/luatex/latex/autotype/autotype.lua b/macros/luatex/latex/autotype/autotype.lua
index b75bc26b64..e7ea16404d 100644
--- a/macros/luatex/latex/autotype/autotype.lua
+++ b/macros/luatex/latex/autotype/autotype.lua
@@ -1,5 +1,5 @@
-- autotype.lua
--- Copyright 2020-2023 Stephan Hennig and Keno Wehr
+-- Copyright 2020-2024 Stephan Hennig and Keno Wehr
--[[
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3
@@ -14,8 +14,8 @@ version 2005/12/01 or later.
luatexbase.provides_module({
name = "autotype",
- version = "0.4",
- date = "2023-10-30",
+ version = "0.5",
+ date = "2024-01-05",
description = "automatic language-specific typography"
})
@@ -52,7 +52,7 @@ local final_round_s_codepoint = {}
local function normalize_font(TeX_font_name)
-- We have to do some normalization of the name of the current font.
-- Examples: The yfrak font at 11pt is called "yfrak at 10.95pt" by TeX, but we need only "yfrak".
- -- The yfrak font becomes something like "yfont+100ls" if it is letterspaced (e.g. with microtype's \textls commmand),
+ -- The yfrak font becomes something like "yfrak+100ls" if it is letterspaced (e.g. with microtype's \textls commmand),
-- but again, we only need "yfrak".
return string.gsub(TeX_font_name, "[ :%+].*", "")
end
@@ -159,11 +159,13 @@ end
local function insert_tertiary_hyphenation_points(head, original_word, start_number, end_number, scan_node_list)
local node_list = NLcopy(original_word.nodes[start_number], original_word.nodes[end_number].next)
local words = scan_node_list(node_list)
- for i, level in ipairs(words[1].levels) do
- local j = start_number + i - 1
- -- Spot with surrounding top-level nodes?
- if (level % 2 == 1) and not original_word.parents[j-1] and not original_word.parents[j] then
- insert_discretionary(head, original_word.nodes[j-1], original_word.nodes[j], PENALTY_III, HYPHEN)
+ if #words > 0 then
+ for i, level in ipairs(words[1].levels) do
+ local j = start_number + i - 1
+ -- Spot with surrounding top-level nodes?
+ if (level % 2 == 1) and not original_word.parents[j-1] and not original_word.parents[j] then
+ insert_discretionary(head, original_word.nodes[j-1], original_word.nodes[j], PENALTY_III, HYPHEN)
+ end
end
end
end
@@ -264,7 +266,13 @@ local function mark_hyphenation_points(head, lang_name)
else
local n = node.new("whatsit", "pdf_literal")
n.mode = 0
- n.data = "q "..colour.." RG 0.7 w 0 2 m 0 8 l S Q"
+ if current.penalty == PENALTY_I then
+ n.data = "q "..colour.." RG 0.7 w 0 -1 m 0 8 l S Q"
+ elseif current.penalty == PENALTY_II then
+ n.data = "q "..colour.." RG 0.7 w 0 -1 m 0 3 l S Q"
+ else
+ n.data = "q "..colour.." RG 0.7 w 0 4 m 0 8 l S Q"
+ end
n.next = current.next
current.next.prev = n
n.prev = current
diff --git a/macros/luatex/latex/autotype/autotype.sty b/macros/luatex/latex/autotype/autotype.sty
index 6275a771d9..245098ff20 100644
--- a/macros/luatex/latex/autotype/autotype.sty
+++ b/macros/luatex/latex/autotype/autotype.sty
@@ -1,5 +1,5 @@
%% autotype.sty
-%% Copyright 2020-2023 Stephan Hennig and Keno Wehr
+%% Copyright 2020-2024 Stephan Hennig and Keno Wehr
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
@@ -8,7 +8,7 @@
% http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
-\ProvidesExplPackage {autotype} {2023-10-30} {0.4} {automatic language-specific typography}
+\ProvidesExplPackage {autotype} {2024-01-05} {0.5} {automatic language-specific typography}
% Variables
\str_new:N \l_autotype_lang_str % for storing a language name