From 949a85bb8707bf1aaa2b23b018e24d5001d38e52 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Sat, 6 Jan 2024 03:01:33 +0000 Subject: CTAN sync 202401060301 --- macros/latex/contrib/easybook/easybook.dtx | 13 +- macros/latex/contrib/easybook/easybook.pdf | Bin 589428 -> 590446 bytes macros/latex/contrib/easybook/easybook.tex | 63 +- macros/latex/contrib/l3backend/CHANGELOG.md | 10 +- macros/latex/contrib/l3backend/README.md | 4 +- .../latex/contrib/l3backend/l3backend-basics.dtx | 18 +- macros/latex/contrib/l3backend/l3backend-box.dtx | 16 +- macros/latex/contrib/l3backend/l3backend-code.pdf | Bin 934856 -> 910529 bytes macros/latex/contrib/l3backend/l3backend-color.dtx | 56 +- macros/latex/contrib/l3backend/l3backend-draw.dtx | 28 +- .../latex/contrib/l3backend/l3backend-graphics.dtx | 24 +- .../latex/contrib/l3backend/l3backend-header.dtx | 176 +- .../latex/contrib/l3backend/l3backend-opacity.dtx | 26 +- macros/latex/contrib/l3backend/l3backend-pdf.dtx | 49 +- macros/latex/contrib/l3backend/l3backend.ins | 6 +- macros/latex/contrib/l3experimental/CHANGELOG.md | 12 +- macros/latex/contrib/l3experimental/README.md | 4 +- .../latex/contrib/l3experimental/l3benchmark.dtx | 6 +- .../latex/contrib/l3experimental/l3benchmark.ins | 4 +- .../latex/contrib/l3experimental/l3benchmark.pdf | Bin 308820 -> 308420 bytes .../latex/contrib/l3experimental/l3draw-boxes.dtx | 4 +- .../latex/contrib/l3experimental/l3draw-code.pdf | Bin 682740 -> 684116 bytes .../latex/contrib/l3experimental/l3draw-layers.dtx | 4 +- .../latex/contrib/l3experimental/l3draw-paths.dtx | 114 +- .../latex/contrib/l3experimental/l3draw-points.dtx | 201 +- .../latex/contrib/l3experimental/l3draw-scopes.dtx | 6 +- .../contrib/l3experimental/l3draw-softpath.dtx | 18 +- .../latex/contrib/l3experimental/l3draw-state.dtx | 4 +- .../contrib/l3experimental/l3draw-transforms.dtx | 60 +- macros/latex/contrib/l3experimental/l3draw.dtx | 21 +- macros/latex/contrib/l3experimental/l3draw.ins | 4 +- macros/latex/contrib/l3experimental/l3draw.pdf | Bin 518932 -> 518609 bytes macros/latex/contrib/l3experimental/l3galley.dtx | 46 +- macros/latex/contrib/l3experimental/l3galley.pdf | Bin 409197 -> 408796 bytes macros/latex/contrib/l3experimental/l3graphics.dtx | 16 +- macros/latex/contrib/l3experimental/l3graphics.ins | 4 +- macros/latex/contrib/l3experimental/l3graphics.pdf | Bin 383921 -> 383526 bytes macros/latex/contrib/l3experimental/l3opacity.dtx | 8 +- macros/latex/contrib/l3experimental/l3opacity.ins | 4 +- macros/latex/contrib/l3experimental/l3opacity.pdf | Bin 313872 -> 313477 bytes .../latex/contrib/l3experimental/l3str-format.dtx | 8 +- .../latex/contrib/l3experimental/l3str-format.pdf | Bin 368314 -> 367974 bytes macros/latex/contrib/l3experimental/l3str.ins | 4 +- .../latex/contrib/l3experimental/l3sys-shell.dtx | 8 +- .../latex/contrib/l3experimental/l3sys-shell.ins | 4 +- .../latex/contrib/l3experimental/l3sys-shell.pdf | Bin 348328 -> 347930 bytes macros/latex/contrib/l3experimental/xcoffins.dtx | 14 +- macros/latex/contrib/l3experimental/xcoffins.ins | 4 +- macros/latex/contrib/l3experimental/xcoffins.pdf | Bin 394766 -> 394367 bytes macros/latex/contrib/l3experimental/xgalley.dtx | 10 +- macros/latex/contrib/l3experimental/xgalley.ins | 4 +- macros/latex/contrib/l3experimental/xgalley.pdf | Bin 299916 -> 299509 bytes macros/latex/contrib/l3kernel/CHANGELOG.md | 34 +- macros/latex/contrib/l3kernel/README.md | 5 +- macros/latex/contrib/l3kernel/expl3.dtx | 6 +- macros/latex/contrib/l3kernel/expl3.pdf | Bin 623156 -> 623018 bytes macros/latex/contrib/l3kernel/interface3.pdf | Bin 1774220 -> 1776647 bytes macros/latex/contrib/l3kernel/interface3.tex | 4 +- macros/latex/contrib/l3kernel/l3.ins | 8 +- macros/latex/contrib/l3kernel/l3basics.dtx | 35 +- macros/latex/contrib/l3kernel/l3bitset.dtx | 172 +- macros/latex/contrib/l3kernel/l3bootstrap.dtx | 6 +- macros/latex/contrib/l3kernel/l3box.dtx | 14 +- macros/latex/contrib/l3kernel/l3candidates.dtx | 34 +- macros/latex/contrib/l3kernel/l3cctab.dtx | 6 +- macros/latex/contrib/l3kernel/l3clist.dtx | 6 +- macros/latex/contrib/l3kernel/l3coffins.dtx | 34 +- macros/latex/contrib/l3kernel/l3color.dtx | 48 +- macros/latex/contrib/l3kernel/l3debug.dtx | 14 +- macros/latex/contrib/l3kernel/l3deprecation.dtx | 19 +- macros/latex/contrib/l3kernel/l3doc.dtx | 140 +- macros/latex/contrib/l3kernel/l3doc.pdf | Bin 563591 -> 563777 bytes macros/latex/contrib/l3kernel/l3docstrip.dtx | 6 +- macros/latex/contrib/l3kernel/l3docstrip.pdf | Bin 151750 -> 150985 bytes macros/latex/contrib/l3kernel/l3expan.dtx | 8 +- macros/latex/contrib/l3kernel/l3file.dtx | 34 +- macros/latex/contrib/l3kernel/l3flag.dtx | 8 +- macros/latex/contrib/l3kernel/l3fp-assign.dtx | 6 +- macros/latex/contrib/l3kernel/l3fp-aux.dtx | 8 +- macros/latex/contrib/l3kernel/l3fp-basics.dtx | 6 +- macros/latex/contrib/l3kernel/l3fp-convert.dtx | 6 +- macros/latex/contrib/l3kernel/l3fp-expo.dtx | 6 +- macros/latex/contrib/l3kernel/l3fp-extended.dtx | 6 +- macros/latex/contrib/l3kernel/l3fp-functions.dtx | 4 +- macros/latex/contrib/l3kernel/l3fp-logic.dtx | 6 +- macros/latex/contrib/l3kernel/l3fp-parse.dtx | 6 +- macros/latex/contrib/l3kernel/l3fp-random.dtx | 16 +- macros/latex/contrib/l3kernel/l3fp-round.dtx | 6 +- macros/latex/contrib/l3kernel/l3fp-symbolic.dtx | 10 +- macros/latex/contrib/l3kernel/l3fp-traps.dtx | 14 +- macros/latex/contrib/l3kernel/l3fp-trig.dtx | 6 +- macros/latex/contrib/l3kernel/l3fp-types.dtx | 4 +- macros/latex/contrib/l3kernel/l3fp.dtx | 16 +- macros/latex/contrib/l3kernel/l3fparray.dtx | 6 +- macros/latex/contrib/l3kernel/l3int.dtx | 6 +- macros/latex/contrib/l3kernel/l3intarray.dtx | 8 +- .../latex/contrib/l3kernel/l3kernel-functions.dtx | 6 +- macros/latex/contrib/l3kernel/l3keys.dtx | 82 +- macros/latex/contrib/l3kernel/l3legacy.dtx | 6 +- macros/latex/contrib/l3kernel/l3luatex.dtx | 6 +- macros/latex/contrib/l3kernel/l3msg.dtx | 36 +- macros/latex/contrib/l3kernel/l3names.dtx | 10 +- macros/latex/contrib/l3kernel/l3news.pdf | Bin 396222 -> 396222 bytes macros/latex/contrib/l3kernel/l3news01.pdf | Bin 122959 -> 122959 bytes macros/latex/contrib/l3kernel/l3news02.pdf | Bin 150919 -> 150919 bytes macros/latex/contrib/l3kernel/l3news03.pdf | Bin 148747 -> 148747 bytes macros/latex/contrib/l3kernel/l3news04.pdf | Bin 114754 -> 114754 bytes macros/latex/contrib/l3kernel/l3news05.pdf | Bin 112524 -> 112524 bytes macros/latex/contrib/l3kernel/l3news06.pdf | Bin 151591 -> 151591 bytes macros/latex/contrib/l3kernel/l3news07.pdf | Bin 128344 -> 128344 bytes macros/latex/contrib/l3kernel/l3news08.pdf | Bin 163484 -> 163484 bytes macros/latex/contrib/l3kernel/l3news09.pdf | Bin 250159 -> 250159 bytes macros/latex/contrib/l3kernel/l3news10.pdf | Bin 150302 -> 150302 bytes macros/latex/contrib/l3kernel/l3news11.pdf | Bin 170102 -> 170102 bytes macros/latex/contrib/l3kernel/l3news12.pdf | Bin 205020 -> 205020 bytes macros/latex/contrib/l3kernel/l3pdf.dtx | 64 +- macros/latex/contrib/l3kernel/l3prefixes.csv | 4 +- macros/latex/contrib/l3kernel/l3prefixes.pdf | Bin 82696 -> 82696 bytes macros/latex/contrib/l3kernel/l3prg.dtx | 6 +- macros/latex/contrib/l3kernel/l3prop.dtx | 6 +- macros/latex/contrib/l3kernel/l3quark.dtx | 6 +- macros/latex/contrib/l3kernel/l3regex.dtx | 16 +- macros/latex/contrib/l3kernel/l3seq.dtx | 14 +- macros/latex/contrib/l3kernel/l3skip.dtx | 10 +- macros/latex/contrib/l3kernel/l3sort.dtx | 6 +- macros/latex/contrib/l3kernel/l3str-convert.dtx | 36 +- macros/latex/contrib/l3kernel/l3str.dtx | 14 +- macros/latex/contrib/l3kernel/l3styleguide.pdf | Bin 296516 -> 296516 bytes macros/latex/contrib/l3kernel/l3styleguide.tex | 2 +- macros/latex/contrib/l3kernel/l3syntax-changes.pdf | Bin 243162 -> 243162 bytes macros/latex/contrib/l3kernel/l3syntax-changes.tex | 2 +- macros/latex/contrib/l3kernel/l3sys.dtx | 10 +- macros/latex/contrib/l3kernel/l3term-glossary.pdf | Bin 218315 -> 218315 bytes macros/latex/contrib/l3kernel/l3term-glossary.tex | 2 +- macros/latex/contrib/l3kernel/l3text-case.dtx | 86 +- macros/latex/contrib/l3kernel/l3text-map.dtx | 6 +- macros/latex/contrib/l3kernel/l3text-purify.dtx | 8 +- macros/latex/contrib/l3kernel/l3text.dtx | 38 +- macros/latex/contrib/l3kernel/l3tl-analysis.dtx | 6 +- macros/latex/contrib/l3kernel/l3tl-build.dtx | 24 +- macros/latex/contrib/l3kernel/l3tl.dtx | 17 +- macros/latex/contrib/l3kernel/l3token.dtx | 6 +- macros/latex/contrib/l3kernel/l3unicode.dtx | 76 +- macros/latex/contrib/l3kernel/source3.pdf | Bin 7510840 -> 7514579 bytes macros/latex/contrib/l3kernel/source3.tex | 4 +- macros/latex/contrib/lwarp/README.txt | 7 +- macros/latex/contrib/lwarp/lwarp.dtx | 2175 +++++++++++++++----- macros/latex/contrib/lwarp/lwarp.ins | 1 + macros/latex/contrib/lwarp/lwarp.pdf | Bin 3405893 -> 3442544 bytes macros/latex/contrib/lwarp/lwarpmk.lua | 4 +- macros/latex/contrib/morewrites/README.md | 18 +- macros/latex/contrib/morewrites/morewrites.dtx | 272 ++- macros/latex/contrib/morewrites/morewrites.ins | 6 +- macros/latex/contrib/morewrites/morewrites.pdf | Bin 715831 -> 748706 bytes macros/latex/contrib/morewrites/primargs.dtx | 32 +- macros/latex/contrib/morewrites/primargs.pdf | Bin 601061 -> 635774 bytes macros/latex/contrib/unbtex/README.md | 8 +- macros/latex/contrib/unbtex/unbtex-example.pdf | Bin 600842 -> 590243 bytes macros/latex/contrib/unbtex/unbtex-example.tex | 26 +- .../contrib/unbtex/unbtex-example/anexo-a.tex | 3 +- .../contrib/unbtex/unbtex-example/anexo-b.tex | 11 +- .../contrib/unbtex/unbtex-example/capitulo2.tex | 15 +- .../contrib/unbtex/unbtex-example/capitulo3.tex | 4 +- .../unbtex/unbtex-example/codigos/blockdiagram.tex | 3 +- .../unbtex/unbtex-example/figuras/bodediagram.pdf | Bin 38806 -> 38649 bytes .../contrib/unbtex/unbtex-example/referencias.bib | 26 +- macros/latex/contrib/unbtex/unbtex.cls | 48 +- macros/latex/contrib/unravel/README.md | 3 - macros/latex/contrib/unravel/unravel.dtx | 749 ++++--- macros/latex/contrib/unravel/unravel.pdf | Bin 880287 -> 908970 bytes 170 files changed, 3716 insertions(+), 2182 deletions(-) (limited to 'macros/latex/contrib') 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 @@ } % %<*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 Binary files a/macros/latex/contrib/easybook/easybook.pdf and b/macros/latex/contrib/easybook/easybook.pdf 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. ----- -

Copyright (C) 2019-2023 The LaTeX Project
+

Copyright (C) 2019-2024 The LaTeX Project
http://latex-project.org/
All rights reserved.

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} % %<*dvips> - {l3backend-dvips.def}{2023-11-09}{} + {l3backend-dvips.def}{2024-01-04}{} {L3 backend support: dvips} % %<*dvisvgm> - {l3backend-dvisvgm.def}{2023-11-09}{} + {l3backend-dvisvgm.def}{2024-01-04}{} {L3 backend support: dvisvgm} % %<*luatex> - {l3backend-luatex.def}{2023-11-09}{} + {l3backend-luatex.def}{2024-01-04}{} {L3 backend support: PDF output (LuaTeX)} % %<*pdftex> - {l3backend-pdftex.def}{2023-11-09}{} + {l3backend-pdftex.def}{2024-01-04}{} {L3 backend support: PDF output (pdfTeX)} % %<*xetex> - {l3backend-xetex.def}{2023-11-09}{} + {l3backend-xetex.def}{2024-01-04}{} {L3 backend support: 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 Binary files a/macros/latex/contrib/l3backend/l3backend-code.pdf and b/macros/latex/contrib/l3backend/l3backend-code.pdf differ diff --git a/macros/latex/contrib/l3backend/l3backend-color.dtx b/macros/latex/contrib/l3backend/l3backend-color.dtx index 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} % @@ -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 } % %<*luatex|pdftex> \__kernel_color_backend_stack_pop:n \c_@@_backend_stack_int % - } + } % \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 % %<*luatex|pdftex> - \__kernel_color_backend_stack_push:nn \c_@@_backend_stack_int + \__kernel_color_backend_stack_push:nn \c_@@_backend_stack_int % - { /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. ----- -

Copyright (C) 1998-2004,2008-2012,2014-2023 The LaTeX Project
+

Copyright (C) 1998-2004,2008-2012,2014-2024 The LaTeX Project
http://latex-project.org/
All rights reserved.

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 Binary files a/macros/latex/contrib/l3experimental/l3benchmark.pdf and b/macros/latex/contrib/l3experimental/l3benchmark.pdf differ diff --git a/macros/latex/contrib/l3experimental/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 Binary files a/macros/latex/contrib/l3experimental/l3draw-code.pdf and b/macros/latex/contrib/l3experimental/l3draw-code.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3draw-layers.dtx b/macros/latex/contrib/l3experimental/l3draw-layers.dtx index 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 Binary files a/macros/latex/contrib/l3experimental/l3draw.pdf and b/macros/latex/contrib/l3experimental/l3draw.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3galley.dtx b/macros/latex/contrib/l3experimental/l3galley.dtx index 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 Binary files a/macros/latex/contrib/l3experimental/l3galley.pdf and b/macros/latex/contrib/l3experimental/l3galley.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3graphics.dtx b/macros/latex/contrib/l3experimental/l3graphics.dtx index 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 Binary files a/macros/latex/contrib/l3experimental/l3graphics.pdf and b/macros/latex/contrib/l3experimental/l3graphics.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3opacity.dtx b/macros/latex/contrib/l3experimental/l3opacity.dtx index 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 Binary files a/macros/latex/contrib/l3experimental/l3opacity.pdf and b/macros/latex/contrib/l3experimental/l3opacity.pdf differ diff --git a/macros/latex/contrib/l3experimental/l3str-format.dtx b/macros/latex/contrib/l3experimental/l3str-format.dtx index 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 Binary files a/macros/latex/contrib/l3experimental/l3str-format.pdf and b/macros/latex/contrib/l3experimental/l3str-format.pdf differ diff --git a/macros/latex/contrib/l3experimental/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 Binary files a/macros/latex/contrib/l3experimental/l3sys-shell.pdf and b/macros/latex/contrib/l3experimental/l3sys-shell.pdf differ diff --git a/macros/latex/contrib/l3experimental/xcoffins.dtx b/macros/latex/contrib/l3experimental/xcoffins.dtx index 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 Binary files a/macros/latex/contrib/l3experimental/xcoffins.pdf and b/macros/latex/contrib/l3experimental/xcoffins.pdf differ diff --git a/macros/latex/contrib/l3experimental/xgalley.dtx b/macros/latex/contrib/l3experimental/xgalley.dtx index 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 Binary files a/macros/latex/contrib/l3experimental/xgalley.pdf and b/macros/latex/contrib/l3experimental/xgalley.pdf differ diff --git a/macros/latex/contrib/l3kernel/CHANGELOG.md b/macros/latex/contrib/l3kernel/CHANGELOG.md index 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: . ----- -

Copyright (C) 1998-2012,2015-2023 The LaTeX Project
+

Copyright (C) 1998-2012,2015-2024 The LaTeX Project
http://latex-project.org/
All rights reserved.

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> % -\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 Binary files a/macros/latex/contrib/l3kernel/expl3.pdf and b/macros/latex/contrib/l3kernel/expl3.pdf differ diff --git a/macros/latex/contrib/l3kernel/interface3.pdf b/macros/latex/contrib/l3kernel/interface3.pdf index b7598e7082..3144931ce4 100644 Binary files a/macros/latex/contrib/l3kernel/interface3.pdf and b/macros/latex/contrib/l3kernel/interface3.pdf differ diff --git a/macros/latex/contrib/l3kernel/interface3.tex b/macros/latex/contrib/l3kernel/interface3.tex index 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 @@ % % \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 @@ % % \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} -% -% \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} % % \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} % % \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 Binary files a/macros/latex/contrib/l3kernel/l3doc.pdf and b/macros/latex/contrib/l3kernel/l3doc.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3docstrip.dtx b/macros/latex/contrib/l3kernel/l3docstrip.dtx index 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 Binary files a/macros/latex/contrib/l3kernel/l3docstrip.pdf and b/macros/latex/contrib/l3kernel/l3docstrip.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3expan.dtx b/macros/latex/contrib/l3kernel/l3expan.dtx index 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 Binary files a/macros/latex/contrib/l3kernel/l3news.pdf and b/macros/latex/contrib/l3kernel/l3news.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news01.pdf b/macros/latex/contrib/l3kernel/l3news01.pdf index 2caf5448b9..ca854aca2d 100644 Binary files a/macros/latex/contrib/l3kernel/l3news01.pdf and b/macros/latex/contrib/l3kernel/l3news01.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news02.pdf b/macros/latex/contrib/l3kernel/l3news02.pdf index 7bf6c3b5b7..abc710c5e8 100644 Binary files a/macros/latex/contrib/l3kernel/l3news02.pdf and b/macros/latex/contrib/l3kernel/l3news02.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news03.pdf b/macros/latex/contrib/l3kernel/l3news03.pdf index 7e790309ac..67c3c65908 100644 Binary files a/macros/latex/contrib/l3kernel/l3news03.pdf and b/macros/latex/contrib/l3kernel/l3news03.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news04.pdf b/macros/latex/contrib/l3kernel/l3news04.pdf index c0e7744a12..aeae2e688f 100644 Binary files a/macros/latex/contrib/l3kernel/l3news04.pdf and b/macros/latex/contrib/l3kernel/l3news04.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news05.pdf b/macros/latex/contrib/l3kernel/l3news05.pdf index 09a8a17473..33026d2cdc 100644 Binary files a/macros/latex/contrib/l3kernel/l3news05.pdf and b/macros/latex/contrib/l3kernel/l3news05.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news06.pdf b/macros/latex/contrib/l3kernel/l3news06.pdf index e17d4ba600..cab5c11273 100644 Binary files a/macros/latex/contrib/l3kernel/l3news06.pdf and b/macros/latex/contrib/l3kernel/l3news06.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news07.pdf b/macros/latex/contrib/l3kernel/l3news07.pdf index ee3855783f..c5a3d300a5 100644 Binary files a/macros/latex/contrib/l3kernel/l3news07.pdf and b/macros/latex/contrib/l3kernel/l3news07.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news08.pdf b/macros/latex/contrib/l3kernel/l3news08.pdf index 8673d4a078..5a5517c002 100644 Binary files a/macros/latex/contrib/l3kernel/l3news08.pdf and b/macros/latex/contrib/l3kernel/l3news08.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news09.pdf b/macros/latex/contrib/l3kernel/l3news09.pdf index 00fff384ee..95f1aa0ee5 100644 Binary files a/macros/latex/contrib/l3kernel/l3news09.pdf and b/macros/latex/contrib/l3kernel/l3news09.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news10.pdf b/macros/latex/contrib/l3kernel/l3news10.pdf index dcac23758d..1b8dc9af29 100644 Binary files a/macros/latex/contrib/l3kernel/l3news10.pdf and b/macros/latex/contrib/l3kernel/l3news10.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news11.pdf b/macros/latex/contrib/l3kernel/l3news11.pdf index 1a3a1038f6..bfb59818be 100644 Binary files a/macros/latex/contrib/l3kernel/l3news11.pdf and b/macros/latex/contrib/l3kernel/l3news11.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3news12.pdf b/macros/latex/contrib/l3kernel/l3news12.pdf index 5ff84d3990..eddbad6dca 100644 Binary files a/macros/latex/contrib/l3kernel/l3news12.pdf and b/macros/latex/contrib/l3kernel/l3news12.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3pdf.dtx b/macros/latex/contrib/l3kernel/l3pdf.dtx index 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 Binary files a/macros/latex/contrib/l3kernel/l3prefixes.pdf and b/macros/latex/contrib/l3kernel/l3prefixes.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3prg.dtx b/macros/latex/contrib/l3kernel/l3prg.dtx index 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 Binary files a/macros/latex/contrib/l3kernel/l3styleguide.pdf and b/macros/latex/contrib/l3kernel/l3styleguide.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3styleguide.tex b/macros/latex/contrib/l3kernel/l3styleguide.tex index 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 Binary files a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf and b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.tex b/macros/latex/contrib/l3kernel/l3syntax-changes.tex index 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 Binary files a/macros/latex/contrib/l3kernel/l3term-glossary.pdf and b/macros/latex/contrib/l3kernel/l3term-glossary.pdf differ diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.tex b/macros/latex/contrib/l3kernel/l3term-glossary.tex index 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 Binary files a/macros/latex/contrib/l3kernel/source3.pdf and b/macros/latex/contrib/l3kernel/source3.pdf differ diff --git a/macros/latex/contrib/l3kernel/source3.tex b/macros/latex/contrib/l3kernel/source3.tex index 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 %\NeedsTeXFormat{LaTeX2e}[1999/12/01] %\ProvidesPackage{lwarp} -% [2023/08/28 v0.912 Allows LaTeX to directly produce HTML5 output.] +% [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 \_html} +% or +% \userentry{biber \_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{} \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{} \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 \_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 \_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 |_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{&}{&}% must be first because & is used for lt, gt, etc. + \LWR@replacestrings{<}{<}% + \LWR@replacestrings{>}{>}% + \LWR@replacestrings{'}{'}% + \LWR@replacestrings{`}{`}% + \LWR@replacestrings{_}{\detokenize{_}}% +% \end{macrocode} +% ^^A \StrSubstitute[100]{\tmpb}{\LWRpercent}{%}[\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{"}{"}}% + }% 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{&}{&}% - \LWR@replacestrings{<}{<}% - \LWR@replacestrings{>}{>}% -% \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{"}{"}}% - \LWR@replacestrings{'}{'}% - \LWR@replacestrings{`}{`}% + \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 +% +% \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 +% +% \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 % % \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 % % \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`\&} +\def\PYGZlt{\char`\<} +\def\PYGZgt{\char`\>} +\def\PYGZsq{\char`\'} +} +% \end{macrocode} % % \iffalse % @@ -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 { \\ } - } + \__simplebnf_build_grammar:n { #3 } - \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 - - \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}, and the \CSS\ style is set appropriately. +% \cs{LWR@siunitx@complexrm}, 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 % % \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 Binary files a/macros/latex/contrib/lwarp/lwarp.pdf and b/macros/latex/contrib/lwarp/lwarp.pdf 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 @@ -770,6 +828,11 @@ { \@@_get_user:n { \@@_closeout_now: } } } \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 { @@ -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 Binary files a/macros/latex/contrib/morewrites/morewrites.pdf and b/macros/latex/contrib/morewrites/morewrites.pdf 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 Binary files a/macros/latex/contrib/morewrites/primargs.pdf and b/macros/latex/contrib/morewrites/primargs.pdf 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 +Copyright (C) 2021-2024 by Henrique C. Ferreira 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 Binary files a/macros/latex/contrib/unbtex/unbtex-example.pdf and b/macros/latex/contrib/unbtex/unbtex-example.pdf 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 +%% Version 1.4.4 2024/01/05 +%% Copyright (C) 2021-2024 by Henrique C. Ferreira %% %% 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 Binary files a/macros/latex/contrib/unbtex/unbtex-example/figuras/bodediagram.pdf and b/macros/latex/contrib/unbtex/unbtex-example/figuras/bodediagram.pdf 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 +%% Version 1.4.4 2024/01/05 +%% Copyright (C) 2021-2024 by Henrique C. Ferreira %% %% 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 Binary files a/macros/latex/contrib/unravel/unravel.pdf and b/macros/latex/contrib/unravel/unravel.pdf differ -- cgit v1.2.3