summaryrefslogtreecommitdiff
path: root/macros
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2024-03-02 03:04:21 +0000
committerNorbert Preining <norbert@preining.info>2024-03-02 03:04:21 +0000
commitb7323fe884f378851ee661babaa5bd644271f348 (patch)
tree8891732393826e5c5893d00fa39cf9a5eb0a3a90 /macros
parent19a826b6e3a0d2ea6bbd1bf733a8e590463275ed (diff)
CTAN sync 202403020304
Diffstat (limited to 'macros')
-rw-r--r--macros/latex/contrib/litetable/doc/litetable-cn.pdfbin303380 -> 299902 bytes
-rw-r--r--macros/latex/contrib/litetable/doc/litetable-cn.tex147
-rw-r--r--macros/latex/contrib/litetable/doc/litetable-demo.pdfbin96154 -> 87775 bytes
-rw-r--r--macros/latex/contrib/litetable/doc/litetable-demo.tex183
-rw-r--r--macros/latex/contrib/litetable/doc/litetable-en.pdfbin177468 -> 179002 bytes
-rw-r--r--macros/latex/contrib/litetable/doc/litetable-en.tex145
-rw-r--r--macros/latex/contrib/litetable/tex/litetable.cls196
-rw-r--r--macros/latex/contrib/metalogox/README.txt2
-rw-r--r--macros/latex/contrib/metalogox/metalogox.dtx6
-rw-r--r--macros/latex/contrib/metalogox/metalogox.pdfbin404029 -> 404214 bytes
-rw-r--r--macros/latex/contrib/minimalist/README.md2
-rw-r--r--macros/latex/contrib/minimalist/minimalist-classical.sty2
-rw-r--r--macros/latex/contrib/minimalist/minimalist-classicthesis.sty2
-rw-r--r--macros/latex/contrib/minimalist/minimalist-default.sty2
-rw-r--r--macros/latex/contrib/minimalist/minimalist-flow.sty2
-rw-r--r--macros/latex/contrib/minimalist/minimalist-plain.sty2
-rw-r--r--macros/latex/contrib/minimalist/minimalist-stream.sty2
-rw-r--r--macros/latex/contrib/minimalist/minimalist.sty2
-rw-r--r--macros/latex/contrib/minimalist/minimart.cls4
-rw-r--r--macros/latex/contrib/minimalist/minimbook.cls4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md6
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/README.md2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx43
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdfbin967216 -> 989061 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx14
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdfbin693802 -> 694334 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdfbin600974 -> 602767 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdfbin513895 -> 515722 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdfbin557427 -> 558678 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdfbin540930 -> 541886 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdfbin542196 -> 543339 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdfbin536366 -> 538288 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdfbin592919 -> 594366 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdfbin515587 -> 516564 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdfbin750635 -> 753675 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx10
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdfbin565531 -> 568140 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdfbin682518 -> 685724 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdfbin831142 -> 838274 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdfbin528830 -> 530392 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdfbin426918 -> 427764 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdfbin586583 -> 587555 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdfbin448398 -> 450200 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx6
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdfbin463315 -> 464420 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty2
-rw-r--r--macros/latex/contrib/projlib/ProjLib.dtx236
-rw-r--r--macros/latex/contrib/projlib/README.md32
-rw-r--r--macros/latex/contrib/ufrgscca/README.md11
-rw-r--r--macros/latex/contrib/ufrgscca/doc/ufrgscca.pdfbin592924 -> 593730 bytes
-rw-r--r--macros/latex/contrib/ufrgscca/doc/ufrgscca.tex16
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-abnt.sty10
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-base-en.def2
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-base-ptBR.def2
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-coord.sty159
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-core.sty70
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-cover-ptBR.tex2
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-cover.sty10
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-curr.sty10
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.sty32
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.tex41
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-lists.sty10
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-ppc.sty10
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-en.tex2
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-ptBR.tex2
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca.cls10
-rw-r--r--macros/latex/contrib/unbtex/README.md5
-rw-r--r--macros/latex/contrib/unbtex/unbtex-example.pdfbin581904 -> 581659 bytes
-rw-r--r--macros/latex/contrib/unbtex/unbtex-example.tex4
-rw-r--r--macros/latex/contrib/unbtex/unbtex-example/anexo-b.tex8
-rw-r--r--macros/latex/contrib/unbtex/unbtex-example/capitulo3.tex4
-rw-r--r--macros/latex/contrib/unbtex/unbtex.cls20
-rw-r--r--macros/latex/required/firstaid/changes.txt7
-rw-r--r--macros/latex/required/firstaid/latex2e-first-aid-for-external-files.dtx47
-rw-r--r--macros/latex/required/firstaid/latex2e-first-aid-for-external-files.pdfbin263670 -> 265925 bytes
-rw-r--r--macros/luatex/generic/luamplib/NEWS9
-rw-r--r--macros/luatex/generic/luamplib/luamplib.dtx58
-rw-r--r--macros/luatex/generic/luamplib/luamplib.pdfbin153451 -> 153704 bytes
-rw-r--r--macros/luatex/generic/minim-mp/README14
-rw-r--r--macros/luatex/generic/minim-mp/minim-mp.doc43
-rw-r--r--macros/luatex/generic/minim-mp/minim-mp.lua37
-rw-r--r--macros/luatex/generic/minim-mp/minim-mp.pdfbin120017 -> 120799 bytes
-rw-r--r--macros/luatex/generic/minim-mp/minim-mp.sty32
-rw-r--r--macros/luatex/generic/minim-mp/minim-mp.tex1
-rw-r--r--macros/luatex/generic/minim-pdf/README31
-rw-r--r--macros/luatex/generic/minim-pdf/minim-pdf.doc165
-rw-r--r--macros/luatex/generic/minim-pdf/minim-pdf.lua103
-rw-r--r--macros/luatex/generic/minim-pdf/minim-pdf.pdfbin126824 -> 145084 bytes
-rw-r--r--macros/luatex/generic/minim-pdf/minim-pdf.tex80
-rw-r--r--macros/luatex/generic/minim/README6
-rw-r--r--macros/luatex/generic/minim/minim-doc.sty36
-rw-r--r--macros/luatex/generic/minim/minim-pdfresources.lua2
-rw-r--r--macros/luatex/generic/minim/minim.doc13
-rw-r--r--macros/luatex/generic/minim/minim.pdfbin365466 -> 383422 bytes
-rw-r--r--macros/luatex/generic/penlightplus/penlightplus.lua120
-rw-r--r--macros/luatex/generic/penlightplus/penlightplus.pdfbin66585 -> 80983 bytes
-rw-r--r--macros/luatex/generic/penlightplus/penlightplus.sty80
-rw-r--r--macros/luatex/generic/penlightplus/penlightplus.tex164
-rw-r--r--macros/unicodetex/latex/einfart/README.md2
-rw-r--r--macros/unicodetex/latex/einfart/demo/einfart-demo-style-classical.pdfbin46844 -> 46970 bytes
-rw-r--r--macros/unicodetex/latex/einfart/demo/einfart-demo-style-classicthesis.pdfbin58291 -> 58421 bytes
-rw-r--r--macros/unicodetex/latex/einfart/demo/einfart-demo-style-default.pdfbin51630 -> 51756 bytes
-rw-r--r--macros/unicodetex/latex/einfart/demo/einfart-demo-style-flow.pdfbin50690 -> 50818 bytes
-rw-r--r--macros/unicodetex/latex/einfart/demo/einfart-demo-style-plain.pdfbin48836 -> 48956 bytes
-rw-r--r--macros/unicodetex/latex/einfart/demo/einfart-demo-style-stream.pdfbin54721 -> 54843 bytes
-rw-r--r--macros/unicodetex/latex/einfart/einfart.cls4
-rw-r--r--macros/unicodetex/latex/simplivre/README.md2
-rw-r--r--macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-classical.pdfbin57987 -> 57976 bytes
-rw-r--r--macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-classical.tex2
-rw-r--r--macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-classicthesis.pdfbin67319 -> 67407 bytes
-rw-r--r--macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-classicthesis.tex2
-rw-r--r--macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-default.pdfbin60760 -> 60754 bytes
-rw-r--r--macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-flow.pdfbin61556 -> 61547 bytes
-rw-r--r--macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-plain.pdfbin57491 -> 57483 bytes
-rw-r--r--macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-stream.pdfbin62963 -> 62951 bytes
-rw-r--r--macros/unicodetex/latex/simplivre/simplivre.cls4
-rw-r--r--macros/xetex/generic/xetexko/ChangeLog6
-rw-r--r--macros/xetex/generic/xetexko/README2
-rw-r--r--macros/xetex/generic/xetexko/xetexko-doc.pdfbin260256 -> 257123 bytes
-rw-r--r--macros/xetex/generic/xetexko/xetexko-doc.tex8
-rw-r--r--macros/xetex/generic/xetexko/xetexko.sty35
138 files changed, 1681 insertions, 980 deletions
diff --git a/macros/latex/contrib/litetable/doc/litetable-cn.pdf b/macros/latex/contrib/litetable/doc/litetable-cn.pdf
index 0ef5ca2aab..61c1752a5e 100644
--- a/macros/latex/contrib/litetable/doc/litetable-cn.pdf
+++ b/macros/latex/contrib/litetable/doc/litetable-cn.pdf
Binary files differ
diff --git a/macros/latex/contrib/litetable/doc/litetable-cn.tex b/macros/latex/contrib/litetable/doc/litetable-cn.tex
index b67605e03f..3843b12293 100644
--- a/macros/latex/contrib/litetable/doc/litetable-cn.tex
+++ b/macros/latex/contrib/litetable/doc/litetable-cn.tex
@@ -11,13 +11,13 @@
\usepackage{geometry,pdfpages,caption,indentfirst,setspace}
\captionsetup[table]{name={\textsc{Table}},labelsep=period}
\usepackage[level]{datetime}
-\usepackage{unicode-math,xeCJK,verbatim}
-\usepackage{authblk,xltxtra}
+\usepackage{unicode-math,xeCJK,fontawesome5}
+\usepackage{authblk,xltxtra,bigfoot,enumitem}
\usepackage{booktabs,diagbox,ragged2e,tabularx}
\renewcommand\tabularxcolumn[1]{>{\Centering}m{#1}}
\usepackage[toc]{multitoc}
\usepackage[mono=false]{libertine}
-\linespread{1.15}
+\setstretch{1.15}
\setCJKmainfont{Chiron Sung HK}
[BoldFont=Chiron Sung HK Bold,
ItalicFont=Kaiti SC]
@@ -34,6 +34,13 @@
\definecolor{H5}{Hsb}{188,.8,.8} % 青藍色 (Hangzhou MTR L 5 )
\definecolor{H6}{Hsb}{207,.8,.8} % 海洋蓝 (Hangzhou Metro 6 )
\definecolor{H7}{Hsb}{290,.8,.8} % 浪漫紫 (Hangzhou Metro 7 )
+\definecolor{W1}{HTML}{CCAD52}
+\definecolor{W2}{HTML}{8FCC52}
+\definecolor{W3}{HTML}{52CC70}
+\definecolor{W4}{HTML}{52CCCC}
+\definecolor{W5}{HTML}{5270CC}
+\definecolor{W6}{HTML}{8F52CC}
+\definecolor{W7}{HTML}{CC52AD}
\hypersetup{colorlinks,urlcolor=H6,linkcolor=H2,filecolor=filecolor,pdfstartview=FitH,pdfview=FitH,pdfcreator=XeTeX output}
\def\pkg#1{\texorpdfstring{\textcolor{pkgcolor}{\textsf{#1}}}{“#1”}}
@@ -49,7 +56,7 @@
\yyyymmdddate
\date{\today}
\affil{\href{mailto:xiamyphys@gmail.com}{\texttt{xiamyphys@gmail.com}}}
-\date{\today\quad Version 2.3a\thanks{%
+\date{\today\quad Version 2.4b\thanks{%
\url{https://github.com/xiamyphys/litetable}}}
\begin{document}
\maketitle
@@ -73,7 +80,7 @@
同样,你也可以加入我的\textsf\LaTeX{} 技術交流群 \href{https://qm.qq.com/q/OnHzbNvVAG}{QQ Group: 760570712} 与我交流,来获取模板的内测版本.
\subsection{所需宏集}
-本模板基于 \pkg{standalone} 文档类开发. 其需要 \pkg{tikz} 宏集去绘制图形,\pkg{kvoptions} 和 \pkg{etoolbox} 宏集用于提供全局模式,\pkg{expl3} 宏集用于支持数组,\pkg{ctex}宏集用于支持中文语言,\pkg{fontawesome5} 宏集提供一系列精美的图标.
+本模板基于 \pkg{standalone} 文档类开发. 其需要 \pkg{tikz} 宏集去绘制图形,\pkg{kvoptions} 和 \pkg{etoolbox} 宏集用于提供全局模式,\pkg{expl3}\footnote{请使用 2023/10/10 及以后版本的 \pkg{expl3} 宏集以支持 e-type 变量展开: \verb|\clist_count:e|} 宏集用于支持数组,\pkg{ctex}宏集用于支持中文语言,\pkg{fontawesome5} 宏集提供一系列精美的图标.
\subsection{安装并载入 \pkg{LiteTable} 模板}
免安装使用方法如下,从 \href{https://github.com/xiamyphys/LiteTable}{GitHub} 或 \href{https://ctan.org/pkg/litetable}{CTAN} 下载最新的 \verb|litetable.cls| 文件并将它保存至你的项目根目录. 这种安装方式是最便捷的,但是当模板更新后,你需要手动替换 \verb|.cls| 文件.
@@ -86,7 +93,7 @@
如果您所在的地区存在网路封锁(如 GFW 干扰),你可以选择合适的镜像网站或其他方法\footnote{请遵守当地的网路条例.}. 欲详细了解,请前往 \href{https://tex.stackexchange.com/questions/55437/how-do-i-update-my-tex-distribution}{How do I update my TEX distribution?}
-本模板提供了三个选项:\mode{style},\mode{direction} 和 \mode{font}. 只需将你要使用的选项模式分别添加在你的 \verb|.tex| 文件中命令 \verb|\documentclass[ ]{litetable}| 的方括号中即可.
+本模板提供了两个选项:\mode{direction} 和 \mode{font}. 只需将你要使用的选项模式分别添加在你的 \verb|.tex| 文件中命令 \verb|\documentclass[ ]{litetable}| 的方括号中即可.
\subsection{兼容性}
所使用的测试环境为 macOS + MacTeX 2023 / Overleaf,都可在 \XeLaTeX{} 编译方式下顺利运行, Windows, Linux 和 Unix 平台兼容性未知.
@@ -96,14 +103,11 @@
\documentclass[options]{litetable}
\end{verbatim}
-\subsection{\mode{style} 选项}
-此选项有两个模式,\mode{round} 和 \mode{sharp},可分别使课程块圆角或直角显示,默认为直角.
-
\subsection{\mode{direction} 选项}
-此选项有两个模式,\mode{portrait} 和 \mode{landscape}, 可分别使课程表以纵向或横向显示.
+此选项有两个模式,\mode{portrait} 和 \mode{landscape}, 可使课程表纵向或横向显示,默认为纵向.
\subsection{\mode{font} 选项}
-此选项有两个模式,\mode{times} 和 \mode{libertinus},可分别使字体为 ``Times New Roman'' 或 ``Libertinus'',默认为 ``Times New Roman''\footnote{在使用 ``Libertinus'' 模式前请确保电脑中已安装该字体.}.
+此选项有两个模式,\mode{times} 和 \mode{libertinus},可使字体为 ``Times New Roman'' 或 ``Libertinus'',默认为 ``Times New Roman''\footnote{在使用 ``Libertinus'' 模式前请确保电脑中已安装该字体.}.
\section{\pkg{LiteTable} 的命令}
@@ -121,53 +125,79 @@
\bfseries\textcolor{W2}{\faIcon{fire}~星期二},
\bfseries\textcolor{W3}{\faIcon{water}~星期三},
\bfseries\textcolor{W4}{\faIcon{tree}~星期四},
- \bfseries\textcolor{W5}{\faIcon{coins}~星期六}
+ \bfseries\textcolor{W5}{\faIcon{coins}~星期五},
+ \bfseries\textcolor{W6}{\faIcon{mountain}~星期六};
+ 0,.175,.35,.525,.7,.875,1
}
\end{verbatim}
-此命令可在课程表顶部添加工作日,你可以自由决定工作日的显示样式,如名称,颜色甚至是前面的 logo\footnote{由 \pkg{fontawesome5} 宏集支持.}.
+此命令可在课程表顶部添加工作日,你可以自由决定显示样式,包括前面的 logo\footnote{由 \pkg{fontawesome5} 宏集支持.}. 你可以自定义课程表中每一列的宽度,如上图所示.
+
+\begin{figure}[!ht]
+ \centering
+ \tikz
+{
+ \tikzset{every node/.style={font=\footnotesize}}
+ \draw [thick,->,>=stealth] ({-1/16*5.1 in},0) -- (5.1 in,0);
+ \draw ({-5.10 in/16},-.1) --++ (0,.2) node [above] {\verb|-1/15|};
+ \draw ({0.00*5.1 in},-.1) --++ (0,.2) node [above] {\verb|0|};
+ \draw ({.175*5.1 in},-.1) --++ (0,.2) node [above] {\verb|.175|};
+ \draw ({.350*5.1 in},-.1) --++ (0,.2) node [above] {\verb|.35|};
+ \draw ({.525*5.1 in},-.1) --++ (0,.2) node [above] {\verb|.525|};
+ \draw ({.700*5.1 in},-.1) --++ (0,.2) node [above] {\verb|.7|};
+ \draw ({.875*5.1 in},-.1) --++ (0,.2) node [above] {\verb|.875|};
+ \draw ({1.00*5.1 in},-.1) --++ (0,.2) node [above] {\verb|1|};
+ \node [above] at ({.0875*5.1 in},0) {\textcolor{W1}{\faIcon{moon}~星期一}};
+ \node [above] at ({.2625*5.1 in},0) {\textcolor{W2}{\faIcon{fire}~星期二}};
+ \node [above] at ({.4375*5.1 in},0) {\textcolor{W3}{\faIcon{water}~星期三}};
+ \node [above] at ({.6125*5.1 in},0) {\textcolor{W4}{\faIcon{tree}~星期四}};
+ \node [above] at ({.7875*5.1 in},0) {\textcolor{W5}{\faIcon{coins}~星期五}};
+ \node [above] at ({.9375*5.1 in},0) {\textcolor{W6}{\faIcon{mountain}~星期六}};
+}
+\caption*{命令 \cmd{weeklist} 中的第二行数组与坐标相对应.}
+\end{figure}
课程表可根据你输入的时间组数自动生成相应的列数. 如上方代码共有 5 个工作日,就会生成 5 列的课程表.
-\subsection{\cmd{timelist} \cmd{classnum} 命令}
+\subsection{\cmd{timelist} 命令}
\begin{verbatim}
- \timelist{
+ \timelist [13] {%
8:05,8:55,10:00,10:50,11:40,13:30,14:20,15:15,16:05,18:30,19:20,20:10;
8:50,9:40,10:45,11:35,12:25,14:15,15:05,16:00,16:50,19:15,20:05,20:55
}
-
- \classnum{14}
+ \timelist [13] {}
\end{verbatim}
-命令 \cmd{timelist} 可将时间添加至课程表的左侧,内容的第一行是每节课程开始时间,第二行是每节课程的结束时间,时间之间用逗号(\verb|,|)分隔,第一行与第二行之间用分号(\verb|;|)分隔.
+命令 \cmd{timelist} 有两个参数,第二个参数 \cmd{\ttfamily\{\#2\}} 可将时间添加至课程表的左侧,内容的第一行是每节课程开始时间,第二行是每节课程的结束时间,时间之间用逗号(\verb|,|)分隔,行之间用分号(\verb|;|)分隔.
课程表可根据你输入的时间组数自动生成相应的行数. 如上方代码共有 12 组时间,就会生成 12 行的课程表.
-命令 \cmd{classnum} 可直接指定课程表上你想要生成的行数并不会在课程表左侧添加时间,左侧只会有一列\emph{在每行竖直居中}的序号.
+第一个可选参数 \cmd{\ttfamily[\#1]} 可直接指定课程表上你想要生成的行数并不会在课程表左侧添加时间,左侧只会有一列\emph{在每行竖直居中}的序号.
-下面的表格整理了两个命令不同使用情况下的不同效果.
\begin{table}[!ht]
\centering
-\caption{命令 \cmd{timelist} and \cmd{classnum} 的使用情况.}
+\caption{两个参数的使用情况.}
\begin{tabularx}{\textwidth}{c >{\raggedright\arraybackslash}X >{\raggedright\arraybackslash}X}
\toprule
- \diagbox{\cmd{classnum}}{\cmd{timelist}} & \multicolumn{1}{c}{使用} & \multicolumn{1}{c}{不使用}\\
+ \diagbox{\cmd{\ttfamily[\#1]}}{\cmd{\ttfamily\{\#2\}}} & \multicolumn{1}{c}{使用} & \multicolumn{1}{c}{不使用}\\
\midrule
使用 &
- 效果和命令 \cmd{timelist} 描述相同\newline 但生成行数由 \cmd{classnum} 决定 &
- 效果和命令 \cmd{classnum} 描述相同\\
+ 效果和 \cmd{\ttfamily\{\#2\}} 描述相同,但生成行数由 \cmd{\ttfamily[\#1]} 决定 &
+ 效果和命令 \cmd{\ttfamily[\#1]} 描述相同\\
\midrule
不使用 &
- 效果和命令 \cmd{timelist} 描述相同 &
- 效果和命令 \cmd{timelist} 描述相同\newline\emph{并默认生成 12 行}.\\
+ 效果和命令 \cmd{\ttfamily\{\#2\}} 描述相同 &
+ 效果和命令 \cmd{\ttfamily[\#1]} 描述相同\newline\emph{并默认生成 12 行}.\\
\bottomrule
\end{tabularx}
\end{table}
+如果你要只使用第一个参数 \cmd{\ttfamily[\#1]},那么请不要在第二个参数 \cmd{\ttfamily\{\#2\}} 中添加任何东西.
+
\begin{itemize}
- \item 若命令 \cmd{timelist} 中有 12 组时间,命令 \cmd{classnum} 传递的数值为 14,那么课程表的左侧会只有 1 -- 12 行有时间标注,最后两行没有时间标注但最后两行的标号仍然偏上方,并不会竖直对齐.
- \item 若命令 \cmd{timelist} 中有 14 组时间,命令 \cmd{classnum} 传递的数值为 12,那么只会生成 12 行的课程表并且左侧均有时间标注,也就是在命令 \cmd{timelist} 中输入的最后两组时间无效.
+ \item 若参数 \cmd{\ttfamily\{\#2\}} 中有 12 组时间,参数 \cmd{\ttfamily[\#1]} 传递的数值为 14,那么课程表的左侧会只有 1 -- 12 行有时间标注,最后两行没有时间标注但最后两行的标号仍然偏上方,并不会竖直对齐.
+ \item 若命令 \cmd{\ttfamily\{\#2\}} 中有 14 组时间,参数 \cmd{\ttfamily[\#1]} 传递的数值为 12,那么只会生成 12 行的课程表并且左侧均有时间标注,也就是在参数 \cmd{\ttfamily\{\#2\}} 中输入的最后两组时间无效.
\end{itemize}
\subsection{\cmd{weeks} 命令}
@@ -185,12 +215,16 @@
此命令共有7个参数.
\begin{itemize}
\item 第 1 个为课程块的颜色,从 ``H1'' 到 ``H9'' 供选择,此参数是可选参数,默认为 ``H1''.
- \item 第 2 个和第 3 个为课程的起始节数和结束节数.
- \item 第 4, 5, 6 个分别为课程的名称,地址和教师的名字.
+ \item 第 2 -- 6 个为课程的起始节数和结束节数、名称,地址和教师的名字.
\item 第 7 个为课程的首末周,此参数是可选参数,默认值由命令 \cmd{weeks} 指定,若未指定则默认值为 ``Week 1 -- 12''.
\end{itemize}
+\subsection{\cmd{corner} 命令}
+\begin{verbatim}
+ \corner{6 pt}
+\end{verbatim}
+此命令可决定课程块的圆角半径.
\subsection{\cmd{newday} 命令}
此命令可切换当前日到第二天,此时课程块会右移一格.
@@ -207,52 +241,25 @@
\end{verbatim}
在使用此命令后页面的右下方会添加一张贴纸.
-\subsection{The \cmd{(re)rotatepage} command}
-\cmd{rotatepage}命令可临时更改课程表的方向,\cmd{rerotatepage} 命令可恢复课程表原来的方向.
-
-\section{已知问题:分辨率溢出}
-\begin{verbatim}
- Dimension too large. <recently read> \pgfmath@x
-\end{verbatim}
-
-当启用 \mode{landscape} 模式并添加 7 个及以上的工作日 (?虽然 `添加7 个以上工作日' 一般碳基生物做不出来这种事),便会给出该报错.
-
-这主要是因为 \emph{\textsf{\TeX} 没有内置的浮点数表示} (Reference: \cprotect{\href{https://tex.stackexchange.com/a/545416/299948}}{How to solve the error `Dimension too large. <recently read> \verb|\pgfmath@x|' while doing the calculations in the table}).
-
-如果你能通过优化算法或其他方式解决该问题,欢迎通过 GitHub: \url{https://github.com/xiamyphys/litetable} 提交你的代码,或通过邮件 \href{mail:xiamyphys@gmail.com}{\ttfamily xiamyphys@gmail.com} 联络我.
-
\section{版本历史}
-课程表的设计源于杭电助手(\href{https://www.hdu.edu.cn}{杭州电子科技大学})学生课表页面(仅本校师生可访问). 页面排版十分精美,于是本人使用\LaTeX{} 复刻出了课程表样式,并制作成模板分享给大家.
-
-\textsf{\bfseries Version 1.0} 于01/09/2023完成开发,并发布在\href{https://www.latexstudio.net/index/details/index/mid/3625.html}{\LaTeX{}工作室} (杭州萧山)和\href{http://xhslink.com/od7Ycw}{小红书}上,赢得了许多人的喜爱.
-
-\textsf{\bfseries Version 2.0a}于01/11/2023完成开发,并发布在\href{https://www.latexstudio.net/index/details/index/mid/3636.html}{\LaTeX{}工作室} (杭州萧山)和\href{http://xhslink.com/od7Ycw}{小红书}上. 此版本使用 \verb|.cls| 文件,使 \verb|main.tex| 文件更简洁. 同时,此版本添加了全局模式,可设置 ``课程块'' 显示为圆角或直角. 此版本也支持一个 \verb|.tex| 文件中生成多张课表.
+课程表的设计源于\href{https://www.hdu.edu.cn}{杭州电子科技大学}杭电助手学生课表页面(仅本校师生可访问). 页面排版十分精美,于是本人使用 \textsf{\LaTeX{}} 复刻出了课程表样式,并制作成模板分享给大家.
-\textsf{\bfseries Version 2.1a} 于05/11/2023完成开发. 支持 libertinus 字体.
+\textsf{\bfseries Version 1.0} 于01/09/2023完成开发,并发布在 \href{https://www.latexstudio.net/index/details/index/mid/3625.html}{\textsf{\LaTeX}工作室} (杭州萧山)上,赢得了许多人的喜爱.
-\textsf{\bfseries Version 2.2a} 于31/01/2024完成开发. 此版本修复了分辨率超出的 bug,更改纸张类型为美国信纸并支持自定义课程起始和结束时间.
-
-\textsf{\bfseries Version 2.3a} 于02/02/2024完成开发. 此版本支持根据所输入的时间组数自动生成相应的行数,并支持课程表以纵向或横向显示.
-
-\textsf{\bfseries Version 2.3b} 于03/02/2024完成开发. 此版本优化坐标计算,提升编译速度.
-
-\textsf{\bfseries Version 2.4a} 于24/02/2024完成开发. 元宵节快乐! 此版本支持自定义工作日显示样式,支持隐藏时间并仅显示竖直对齐课程序号,支持设置默认首末周.
-
-\clearpage
-
-\datechange{01/09/2023}{Version 2.0a}
+\setlist[itemize]{noitemsep, topsep=0pt}
+\datechange{2023/11/01}{Version 2.0a}
\begin{itemize}
\item 支持课程块显示为圆角或直角.
\item 支持一个 \verb|.tex| 文件中生成多张课表.
\end{itemize}
-\datechange{05/11/2023}{Version 2.1a}
+\datechange{2023/11/05}{Version 2.1a}
\begin{itemize}
\item 支持 libertinus 字体.
\end{itemize}
-\datechange{31/01/2024}{Version 2.2a}
+\datechange{2024/01/31}{Version 2.2a}
\begin{itemize}
\item 修复了分辨率超出的 bug.
\item 更改纸张类型为美国信纸.
@@ -272,20 +279,28 @@
\item 优化坐标计算,提升编译速度.
\end{itemize}
-\datechange{\today}{Version 2.4a}
+\datechange{2024/02/24}{Version 2.4a}
\begin{itemize}
\item 支持自定义工作日显示样式.
\item 支持隐藏时间,仅显示竖直对齐课程序号.
\item 支持设置默认首末周.
\end{itemize}
-\appendix
+\datechange{\today}{Version 2.4b}
+\begin{itemize}
+ \item 修复了在 \mode{landscape} 模式中添加超过 7 个工作日时 \emph{分辨率溢出}的错误.
+ \item 支持自定义课程表中每一列的宽度.
+ \item 优化圆角设计,支持自定义圆角半径.
+\end{itemize}
+
+感谢 @egreg 在 \TeX{} Exchange 上提供的 \href{https://tex.stackexchange.com/a/711657/299948}{输出数组中每一列元素个数} 的代码.
+\appendix
+\includepdf[pages={1,3}]{litetable-demo.pdf}
\includepdf[pages={2,4},nup=1x2,pagecommand={
\tikz[remember picture, overlay]
\node [rotate=90,below,yshift=-1em] at (current page.west) {\bfseries\LARGE Document Example: \texttt{litetable-demo.tex}};
}
]{litetable-demo.pdf}
-\includepdf[pages={1,3}]{litetable-demo.pdf}
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/litetable/doc/litetable-demo.pdf b/macros/latex/contrib/litetable/doc/litetable-demo.pdf
index e2c8cf648c..154f6aa089 100644
--- a/macros/latex/contrib/litetable/doc/litetable-demo.pdf
+++ b/macros/latex/contrib/litetable/doc/litetable-demo.pdf
Binary files differ
diff --git a/macros/latex/contrib/litetable/doc/litetable-demo.tex b/macros/latex/contrib/litetable/doc/litetable-demo.tex
index 3423e6787c..86851122dc 100644
--- a/macros/latex/contrib/litetable/doc/litetable-demo.tex
+++ b/macros/latex/contrib/litetable/doc/litetable-demo.tex
@@ -1,23 +1,111 @@
-\documentclass[times,sharp]{litetable}
+\documentclass[times]{litetable}
+% \setCJKfamilyfont{zhhei}{Chiron Sung HK}
+% \renewcommand*{\heiti}{\CJKfamily{zhhei}}
+\corner{6 pt}
+\sticker{favicon}
\begin{document}
+
+\timelist[12]{%
+ 8:05,8:55,10:00,10:50,11:40,13:30,14:20,15:15,16:05,18:30,19:20;
+ 8:50,9:40,10:45,11:35,12:25,14:15,15:05,16:00,16:50,19:15,20:05
+}
+\weeklist{
+ \heiti\bfseries\textcolor{W1}{\faIcon{moon}~星期一},
+ \heiti\bfseries\textcolor{W2}{\faIcon{fire}~星期二},
+ \heiti\bfseries\textcolor{W3}{\faIcon{water}~星期三},
+ \heiti\bfseries\textcolor{W4}{\faIcon{tree}~星期四},
+ \heiti\bfseries\textcolor{W5}{\faIcon{coins}~星期五};
+ 0,.17,.34,.56,.78,1
+}
+\weeks{Week 1 -- 16}
+
+\begin{tikzpicture}
+ \makeframe{Axia\!\texttt{'}\!s Timetable -- Semester 6}
+
+ % Mon.
+ \course[H5]{7}{8}{凝聚态物理}{第6教研楼 · 中225}{Mn Chen}
+
+ \newday % Tue.
+ \course[H1]{8}{9}{群论}{第6教研楼 · 中211}{Li Ge}
+ \course[H5]{10}{11}{介观物理}{第6教研楼 · 中211}{Yuan Li \& Mn Chen}
+
+ \newday % Wed.
+ \course[H6]{1}{2}{工程制图}{第7教研楼 · 中3012}{Hc Wang}
+ \course[H9]{8}{9}{形势与政策6}{第6教研楼 · 北302}{Xr Qi}[Double Week 10 -- 16]
+ \course[H9]{10}{11}{高级创业运营仿真}{第4教研楼 · 411 -- 413}{Li Zhang}[Week 1 -- 8]
+
+ \newday % Thu.
+ \course[H4]{1}{2}{跨文化交际}{第3教研楼 · 422}{Cl Zuo}
+ \course[H2]{3}{4}{无线电测向}{东边田径场}{Ys Yu}
+ \course[H5]{6}{8}{固体物理}{第6教研楼 · 北408}{Kw Sun}
+
+ \newday % Fri.
+ \course[H8]{1}{2}{光电显示技术}{第7教研楼 · 中3012}{Wt Su}
+ \course[H3]{6}{8}{研究生组会}{第6教研楼 · 中}{Yuan Li}
+
+ \more{ · School Start: 04 / 03 / 2024 · Summer Vacation: 05 / 07 / 2024}
+\end{tikzpicture}
+
+\rotatepage
+
+\weeklist{
+ \bfseries\textcolor{W1}{\faIcon{moon}~Monday},
+ \bfseries\textcolor{W2}{\faIcon{fire}~Tuesday},
+ \bfseries\textcolor{W3}{\faIcon{water}~Wednesday},
+ \bfseries\textcolor{W4}{\faIcon{tree}~Thursday},
+ \bfseries\textcolor{W5}{\faIcon{coins}~Friday},
+ \bfseries\textcolor{W6}{\faIcon{mountain}~Saturday},
+ \bfseries\textcolor{W7}{\faIcon{sun}~Sunday};
+ 0,.16,.32,.48,.64,.8,.9,1
+}
+
+\begin{tikzpicture}
+ \makeframe{Axia\!\texttt{'}\!s Timetable -- Semester 6}
+
+ % Mon.
+ \course[H5]{7}{8}{Introduction to Cond.}{Building 6 · Middle 225}{Mn Chen}
+
+ \newday % Tue.
+ \course[H1]{8}{9}{Group Theory}{Building 6 · Middle 211}{Li Ge}
+ \course[H5]{10}{11}{Mesoscopic Physics}{Building 6 · Middle 211}{Yuan Li \& Mn Chen}
+
+ \newday % Wed.
+ \course[H6]{1}{2}{Engineering Drawing}{Building 7 · North 3012}{Hc Wang}
+ \course[H9]{8}{9}{Situation \& Policy 6}{Building 6 · North 302}{Xr Qi}[Double Week 10 -- 16]
+ \course[H9]{10}{11}{Operational Simu.}{Building 4 · 411 -- 413}{Li Zhang}[Week 1 -- 8]
+
+ \newday % Thu.
+ \course[H4]{1}{2}{Intercultural Comm.}{Building 3 · 422}{Cl Zuo}
+ \course[H2]{3}{4}{Radio Direction}{Athletic Field}{Ys Yu}
+ \course[H5]{6}{8}{Solid State Physics}{Building 6 · North 408}{Kw Sun}
+
+ \newday % Fri.
+ \course[H8]{1}{2}{OE. Display}{Building 7 · North 3012}{Wt Su}
+ \course[H3]{6}{8}{Group Meeting}{Building 6 · Middle}{Yuan Li}
+
+ \more{ · School Start: 04 / 03 / 2024 · Summer Vacation: 05 / 07 / 2024}
+\end{tikzpicture}
+
+\rerotatepage
+
\timelist{
8:05,8:55,10:00,10:50,11:40,13:30,14:20,15:15,16:05,18:30,19:20,20:10;
8:50,9:40,10:45,11:35,12:25,14:15,15:05,16:00,16:50,19:15,20:05,20:55
}
-% \classnum{14}
-\weeklist{
+
+\weeklist
+{
\heiti\bfseries\textcolor{W1}{\faIcon{moon}~星期一},
\heiti\bfseries\textcolor{W2}{\faIcon{fire}~星期二},
\heiti\bfseries\textcolor{W3}{\faIcon{water}~星期三},
\heiti\bfseries\textcolor{W4}{\faIcon{tree}~星期四},
\heiti\bfseries\textcolor{W5}{\faIcon{coins}~星期五},
- \heiti\bfseries\textcolor{W6}{\faIcon{mountain}~星期六},
+ \heiti\bfseries\textcolor{W6}{\faIcon{mountain}~星期六};
+ 0,.175,.35,.525,.7,.875,1
}
\weeks{Week 1 -- 18}
-\sticker{favicon}
-
\begin{tikzpicture}
\makeframe{Axia\!\texttt{'}\!s Timetable -- Semester 5} % make title & background
% Mon.
@@ -53,7 +141,8 @@
\bfseries\textcolor{W3}{\faIcon{water}~Wednesday},
\bfseries\textcolor{W4}{\faIcon{tree}~Thursday},
\bfseries\textcolor{W5}{\faIcon{coins}~Friday},
- \bfseries\textcolor{W6}{\faIcon{mountain}~Saturday},
+ \bfseries\textcolor{W6}{\faIcon{mountain}~Saturday};
+ 0,.175,.35,.525,.7,.875,1
}
\begin{tikzpicture}
@@ -83,84 +172,4 @@
· School Starts: 11 / 09 / 2023 · Winter Vacation: 26 / 01 / 2024 }
\end{tikzpicture}
-\rerotatepage
-
-\timelist{
- 8:05,8:55,10:00,10:50,11:40,13:30,14:20,15:15,16:05,18:30,19:20;
- 8:50,9:40,10:45,11:35,12:25,14:15,15:05,16:00,16:50,19:15,20:05,
-}
-\classnum{11}
-\weeklist{
- \heiti\bfseries\textcolor{W1}{\faIcon{moon}~星期一},
- \heiti\bfseries\textcolor{W2}{\faIcon{fire}~星期二},
- \heiti\bfseries\textcolor{W3}{\faIcon{water}~星期三},
- \heiti\bfseries\textcolor{W4}{\faIcon{tree}~星期四},
- \heiti\bfseries\textcolor{W5}{\faIcon{coins}~星期五},
-}
-\weeks{Week 1 -- 16}
-
-\begin{tikzpicture}
- \makeframe{Axia\!\texttt{'}\!s Timetable -- Semester 6}
-
- % Mon.
- \course[H5]{7}{8}{凝聚态物理导论}{第6教研楼 · 中225}{Mn Chen}
-
- \newday % Tue.
- \course[H1]{8}{9}{群论}{第6教研楼 · 中211}{Li Ge}
- \course[H5]{10}{11}{介观物理}{第6教研楼 · 中211}{Yuan Li \& Mn Chen}
-
- \newday % Wed.
- \course[H6]{1}{2}{工程制图}{第7教研楼 · 中3012}{Hc Wang}
- \course[H9]{8}{9}{形势与政策6}{第6教研楼 · 北302}{Xr Qi}[Double Week 10 -- 16]
- \course[H9]{10}{11}{高级创业运营仿真}{第4教研楼 · 411 -- 413}{Li Zhang}[Week 1 -- 8]
-
- \newday % Thu.
- \course[H4]{1}{2}{跨文化交际}{第3教研楼 · 422}{Cl Zuo}
- \course[H2]{3}{4}{无线电测向}{东边田径场}{Ys Yu}
- \course[H5]{6}{8}{固体物理}{第6教研楼 · 北408}{Kw Sun}
-
- \newday % Fri.
- \course[H8]{1}{2}{光电显示技术}{第7教研楼 · 中3012}{Wt Su}
- \course[H3]{6}{8}{研究生组会}{第6教研楼 · 中}{Yuan Li}
-
- \more{ · School Start: 04 / 03 / 2024 · Summer Vacation: 05 / 07 / 2024}
-\end{tikzpicture}
-
-\rotatepage
-
-\weeklist{
- \bfseries\textcolor{W1}{\faIcon{moon}~Monday},
- \bfseries\textcolor{W2}{\faIcon{fire}~Tuesday},
- \bfseries\textcolor{W3}{\faIcon{water}~Wednesday},
- \bfseries\textcolor{W4}{\faIcon{tree}~Thursday},
- \bfseries\textcolor{W5}{\faIcon{coins}~Friday},
-}
-
-\begin{tikzpicture}
- \makeframe{Axia\!\texttt{'}\!s Timetable -- Semester 6}
-
- % Mon.
- \course[H5]{7}{8}{Introduction to Cond.}{Building 6 · Middle 225}{Mn Chen}
-
- \newday % Tue.
- \course[H1]{8}{9}{Group Theory}{Building 6 · Middle 211}{Li Ge}
- \course[H5]{10}{11}{Mesoscopic Physics}{Building 6 · Middle 211}{Yuan Li \& Mn Chen}
-
- \newday % Wed.
- \course[H6]{1}{2}{Engineering Drawing}{Building 7 · North 3012}{Hc Wang}
- \course[H9]{8}{9}{Situation \& Policy 6}{Building 6 · North 302}{Xr Qi}[Double Week 10 -- 16]
- \course[H9]{10}{11}{Operational Simu.}{Building 4 · 411 -- 413}{Li Zhang}[Week 1 -- 8]
-
- \newday % Thu.
- \course[H4]{1}{2}{Intercultural Comm.}{Building 3 · 422}{Cl Zuo}
- \course[H2]{3}{4}{Radio Direction}{Athletic Field}{Ys Yu}
- \course[H5]{6}{8}{Solid State Physics}{Building 6 · North 408}{Kw Sun}
-
- \newday % Fri.
- \course[H8]{1}{2}{OE. Display}{Building 7 · North 3012}{Wt Su}
- \course[H3]{6}{8}{Group Meeting}{Building 6 · Middle}{Yuan Li}
-
- \more{ · School Start: 04 / 03 / 2024 · Summer Vacation: 05 / 07 / 2024}
-\end{tikzpicture}
-
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/litetable/doc/litetable-en.pdf b/macros/latex/contrib/litetable/doc/litetable-en.pdf
index 1e72948243..ea04488807 100644
--- a/macros/latex/contrib/litetable/doc/litetable-en.pdf
+++ b/macros/latex/contrib/litetable/doc/litetable-en.pdf
Binary files differ
diff --git a/macros/latex/contrib/litetable/doc/litetable-en.tex b/macros/latex/contrib/litetable/doc/litetable-en.tex
index aa49231318..5ec75d33d1 100644
--- a/macros/latex/contrib/litetable/doc/litetable-en.tex
+++ b/macros/latex/contrib/litetable/doc/litetable-en.tex
@@ -11,13 +11,13 @@
\usepackage{geometry,pdfpages,caption,indentfirst,setspace}
\captionsetup[table]{name={\textsc{Table}},labelsep=period}
\usepackage[level]{datetime}
-\usepackage{unicode-math,xeCJK}
-\usepackage{authblk,xltxtra}
+\usepackage{unicode-math,xeCJK,fontawesome5}
+\usepackage{authblk,xltxtra,bigfoot,enumitem}
\usepackage{booktabs,diagbox,ragged2e,tabularx}
\renewcommand\tabularxcolumn[1]{>{\Centering}m{#1}}
\usepackage[toc]{multitoc}
\usepackage[mono=false]{libertine}
-% \setstretch{1.25}
+% \setstretch{1.15}
\setCJKmainfont{Chiron Sung HK}
[BoldFont=Chiron Sung HK Bold,
ItalicFont=Kaiti SC]
@@ -34,6 +34,13 @@
\definecolor{H5}{Hsb}{188,.8,.8} % 青藍色 (Hangzhou MTR L 5 )
\definecolor{H6}{Hsb}{207,.8,.8} % 海洋蓝 (Hangzhou Metro 6 )
\definecolor{H7}{Hsb}{290,.8,.8} % 浪漫紫 (Hangzhou Metro 7 )
+\definecolor{W1}{HTML}{CCAD52}
+\definecolor{W2}{HTML}{8FCC52}
+\definecolor{W3}{HTML}{52CC70}
+\definecolor{W4}{HTML}{52CCCC}
+\definecolor{W5}{HTML}{5270CC}
+\definecolor{W6}{HTML}{8F52CC}
+\definecolor{W7}{HTML}{CC52AD}
\hypersetup{colorlinks,urlcolor=H6,linkcolor=H2,filecolor=filecolor,pdfstartview=FitH,pdfview=FitH,pdfcreator=XeTeX output}
\def\pkg#1{\texorpdfstring{\textcolor{pkgcolor}{\textsf{#1}}}{“#1”}}
@@ -44,12 +51,12 @@
\noindent\makebox[0pt][r]{\makebox[-3em][r]{\small\textbf{\textcolor{H7}{#1}}}\;\;}{\sffamily Update: \ignorespaces#2}}
\makeatother
-\title{\bfseries The \pkg{LiteTable} Template}
+\title{\bfseries The \pkg{LiteTable} Template: Colorful Timetable}
\author{Xia Mingyu, \href{https://www.hdu.edu.cn}{Hangzhou Dianzi University}}
\yyyymmdddate
\date{\today}
\affil{\href{mailto:xiamyphys@gmail.com}{\ttfamily xiamyphys@gmail.com}}
-\date{\today\quad Version 2.4a\thanks{%
+\date{\today\quad Version 2.4b\thanks{%
\url{https://github.com/xiamyphys/litetable}}}
\begin{document}
\maketitle
@@ -73,7 +80,7 @@ If you meet bugs when using this template, or you have better suggestions or ide
Also, you can join my \textsf\LaTeX{} Template Discussion \href{https://qm.qq.com/q/OnHzbNvVAG}{QQ Group: 760570712} to communicate with me and get the insider preview edition of the template.
\subsection{Packages required}
-This template is based on the template \pkg{standalone}. And it requires \pkg{tikz} package to plot some graphics, \pkg{kvoptions} and \pkg{etoolbox} packages to provide global options, \pkg{expl3} package to support \cmd{timelist} array, \pkg{xeCJK} package to support the \textbf{Chinese, Simplified} language and \pkg{fontawesome5} package to provide a set of beautiful icons.
+This template is based on the template \pkg{standalone}. And it requires \pkg{tikz} package to plot some graphics, \pkg{kvoptions} and \pkg{etoolbox} packages to provide global options, \pkg{expl3}\footnote{Please use the \pkg{expl3} version after 2023/10/10 to support the e-type variants for expand: \verb|\clist_count:e|.} package to support \cmd{timelist} array, \pkg{xeCJK} package to support the \textbf{Chinese, Simplified} language and \pkg{fontawesome5} package to provide a set of beautiful icons.
\subsection{Installing \pkg{LiteTable} and loading it}
For portable version, simply download latest \verb|litetable.cls| file from \href{https://github.com/xiamyphys/LiteTable}{GitHub} or \href{https://ctan.org/pkg/litetable}{CTAN} and save it under your working directory. This way of installation is simple and convenient, but you have to manually update \verb|.cls| now and then.
@@ -86,19 +93,16 @@ However, I strongly suggest that you should use terminal/cmd to implement the co
If you are in some areas with awful Internet environment (such as GFW), you can choose proper mirror source or use other means\footnote{Please comply with local network regulations.}. To learn more, please refer to \href{https://tex.stackexchange.com/questions/55437/how-do-i-update-my-tex-distribution}{How do I update my \TeX{} distribution?}
-The template provides four options, \mode{style}, \mode{direction} and \mode{font}. Just add the modes of the options you want separately in the square bracket of the command \verb|\documentclass[ ]{litetable}| in your \verb|.tex| file.
+The template provides two options, \mode{direction} and \mode{font}. Just add the modes of the options you want separately in the square bracket of the command \verb|\documentclass[ ]{litetable}| in your \verb|.tex| file.
\subsection{Compatibility}
-The test environments are macOS + MacTeX 2023 / Overleaf and they all work fine for \XeLaTeX{} compiler, Windows, Linux and Unix platforms compatibility unknown.
+The test environments are macOS + Mac\TeX{} 2023 / Overleaf and they all work fine for \XeLaTeX{} compiler, Windows, Linux and Unix platforms compatibility unknown.
\section{Global Options of \pkg{LiteTable}}
\begin{verbatim}
\documentclass[options]{litetable}
\end{verbatim}
-\subsection{The \mode{style} option}
-This option has two modes, \mode{round} and \mode{sharp}, which can make the course block's corners be round or sharp, and the default mode is sharp.
-
\subsection{The \mode{direction} option}
This option has two modes, \mode{portrait} and \mode{landscape}, which can make the timetable displayed portrait or horizontally.
@@ -121,53 +125,79 @@ This command can create an empty class schedule with the title ``Timetable -- Se
\bfseries\textcolor{W2}{\faIcon{fire}~Tuesday},
\bfseries\textcolor{W3}{\faIcon{water}~Wednesday},
\bfseries\textcolor{W4}{\faIcon{tree}~Thursday},
- \bfseries\textcolor{W5}{\faIcon{coins}~Friday}
+ \bfseries\textcolor{W5}{\faIcon{coins}~Friday};
+ 0,.17,.34,.56,.78,1
}
\end{verbatim}
-This command can add workdays to the top side of the timetable, and you can also adjust the format that you like, such as name, color and even the logo\footnote{Supports by the \pkg{fontawesome5} package.} before it.
+
+This command can add workdays to the top side of the timetable, you can also adjust the format that you like, such as name, color and even the icon\footnote{Supports by the \pkg{fontawesome5} package.} before it.
+
+You can also custom every width of the columns in the timetable, just like the Figure above.
+
+\begin{figure}[!ht]
+ \centering
+ \tikz
+{
+ \tikzset{every node/.style={font=\small}}
+ \draw [thick,->,>=stealth] ({-1/16*5.1 in},0) -- (5.1 in,0);
+ \draw ({-5.1 in/16},-.1) --++ (0,.2) node [above] {\verb|-1/15|};
+ \draw ({0.0*5.1 in},-.1) --++ (0,.2) node [above] {\verb|0|};
+ \draw ({.17*5.1 in},-.1) --++ (0,.2) node [above] {\verb|.17|};
+ \draw ({.34*5.1 in},-.1) --++ (0,.2) node [above] {\verb|.34|};
+ \draw ({.56*5.1 in},-.1) --++ (0,.2) node [above] {\verb|.56|};
+ \draw ({.78*5.1 in},-.1) --++ (0,.2) node [above] {\verb|.78|};
+ \draw ({1.0*5.1 in},-.1) --++ (0,.2) node [above] {\verb|1|};
+ \node [above] at ({.085*5.1 in},0) {\sffamily\textcolor{W1}{\faIcon{moon}~Monday}};
+ \node [above] at ({.255*5.1 in},0) {\sffamily\textcolor{W2}{\faIcon{fire}~Tuesday}};
+ \node [above] at ({.45*5.1 in},0) {\sffamily\textcolor{W3}{\faIcon{water}~Wednesday}};
+ \node [above] at ({.67*5.1 in},0) {\sffamily\textcolor{W4}{\faIcon{tree}~Thursday}};
+ \node [above] at ({.89*5.1 in},0) {\sffamily\textcolor{W5}{\faIcon{coins}~Friday}};
+}
+\caption*{The second line of array in the \cmd{weeklist} command corresponds to the axis coordinates.}
+\end{figure}
The timetable can automatically generate the corresponding number of columns based on the number of workdays you enter. For example, the code above has 5 workdays, a 5-column timetable will be generated.
-\subsection{The \cmd{timelist} \cmd{classnum} command}
+\subsection{The \cmd{timelist} command}
\begin{verbatim}
- \timelist{
+ \timelist [13] {%
8:05,8:55,10:00,10:50,11:40,13:30,14:20,15:15,16:05,18:30,19:20,20:10;
8:50,9:40,10:45,11:35,12:25,14:15,15:05,16:00,16:50,19:15,20:05,20:55
}
-
- \classnum{14}
+ \timelist [13] {}
\end{verbatim}
-The command \cmd{timelist} can add time to the left side of the timetable, and the first line of the content is the start time of the classes while the second line of the content is the end time of the classes, each time separates with a comma (\verb|,|), the first line and the second line separates with a semicolon (\verb|;|).
+The command \cmd{timelist} has two variables while the second one \cmd{\ttfamily\{\#2\}} can add time to the left side of the timetable, and the first line of the content is the start time of the classes while the second line of the content is the end time of the classes, each time separates with a comma (\verb|,|), the first line and the second line separates with a semicolon (\verb|;|).
The timetable can automatically generate the corresponding number of rows based on the number of time groups you enter. For example, the code above has 12 groups of times, a 12-row timetable will be generated.
-The command \cmd{classnum} can directly assign the number of rows on the timetable you want without adding time to the left side of the timetable, and there will only be a series of numbers that \emph{aligned vertically to the center of every line}.
+The first optional variable \cmd{\ttfamily[\#1]} can directly assign the number of rows on the timetable you want without adding time to the left side of the timetable, and there will only be a series of numbers that \emph{aligned vertically to the center of every line}.
-The following table shows the effects brought about by the usage of the two commands.
\begin{table}[!ht]
\centering
-\caption{Usage of commands \cmd{timelist} and \cmd{classnum}.}
+\caption{Usage of the two variables.}
\begin{tabularx}{\textwidth}{c >{\raggedright\arraybackslash}X >{\raggedright\arraybackslash}X}
\toprule
- \diagbox{\cmd{classnum}}{\cmd{timelist}} & \multicolumn{1}{c}{To use} & \multicolumn{1}{c}{Not to use}\\
+ \diagbox{\cmd{\ttfamily[\#1]}}{\cmd{\ttfamily\{\#2\}}} & \multicolumn{1}{c}{To use} & \multicolumn{1}{c}{Not to use}\\
\midrule
To use &
- The effect is like the description of command \cmd{timelist}\newline But the number of rows will be assigned by \cmd{classnum} &
- The effect is like the description of command \cmd{classnum} before\\
+ The effect is the description of \cmd{\ttfamily\{\#2\}}, but number of rows assign by \cmd{\ttfamily[\#1]} &
+ The effect is the description of \cmd{\ttfamily[\#1]}\\
\midrule
Not to use &
- The effect is like the description of command \cmd{timelist} before &
- The effect is like the description of command \cmd{timelist} before with \emph{default format of 12 lines}\\
+ The effect is the description of \cmd{\ttfamily\{\#2\}} &
+ The effect is the description of \cmd{\ttfamily[\#1]} before with \emph{default format of 12 lines}\\
\bottomrule
\end{tabularx}
\end{table}
+If you want to use the first variable \cmd{\ttfamily[\#1]} only, not to add anything in the second variable.
+
\begin{itemize}
- \item Assume that \cmd{timelist} has 12 groups of times, and \cmd{classnum} passed a value of 14, then the left side of the timetable will have only 1 -- 12 rows with time while the last two rows without time the label of them is still upward, not vertically aligned in the center.
- \item Assume that \cmd{timelist} has 14 sets of times, and \cmd{classnum} passes a value of 12, then only 12 rows of timetables will be generated with time on the left side of each row, that is, the last two sets of data in \cmd{timelist} will be invalid.
+ \item Assume that \cmd{\ttfamily\{\#2\}} has 12 groups of times, and \cmd{\ttfamily[\#1]} passed a value of 14, then the left side of the timetable will have only 1 -- 12 rows with time while the last two rows without time the label of them is still upward, not vertically aligned in the center.
+ \item Assume that \cmd{\ttfamily\{\#2\}} has 14 sets of times, and \cmd{\ttfamily[\#1]} passes a value of 12, then only 12 rows of timetables will be generated with time on the left side of each row, that is, the last two sets of data in \cmd{\ttfamily\{\#2\}} will be invalid.
\end{itemize}
\subsection{The \cmd{weeks} command}
@@ -185,13 +215,17 @@ This command can assign the default value of the 7th variable of the command \cm
There are 7 variables in this command.
\begin{itemize}
\item The 1st one is the color of the class that you want, from ``H1'' to ``H9'', it's optional and the default value is ``H1''.
- \item The 2nd and 3rd ones is the starting number and ending number of the class.
- \item The 4th one is the name of the class.
- \item The 5th one is the address of the class.
- \item The 6th one is the name of the teacher(s).
+ \item The 2nd -- 6th ones is the starting number and ending number, name, address, teacher(s) of the class.
\item The last one is the start week and end week of the timetable, it's optional and the default value is the value that you've adjusted in the command \cmd{weeks} or it will be ``Week 1 -- 12''.
\end{itemize}
+\subsection{The \cmd{corner} command}
+\begin{verbatim}
+ \corner{6 pt}
+\end{verbatim}
+
+This command determines the corner radius of the course block.
+
\subsection{The \cmd{newday} command}
This command can switch the current weekday to the next day, then the course will move right one grid.
@@ -207,41 +241,14 @@ This command can add remark at the end of the class schedule.
\end{verbatim}
There will be a sticker on the southeast of the page after you add, otherwise it won't.
-\subsection{The \cmd{(re)rotatepage} command}
-The \cmd{rotatepage} command can change the direction of the timetable temporarily while the \cmd{rerotatepage} command can restore it.
-
-\section{Known Issue: Resolution exceed}
-\begin{verbatim}
- Dimension too large. <recently read> \pgfmath@x
-\end{verbatim}
-
-When you choose the \mode{landscape} mode and you've added 7 workdays or more (?although the `above' occasion will not occur), it will return this error.
-
-This is mainly caused by the reason that \emph{\textsf{\TeX} has no built-in floating number representation} (Reference: \cprotect{\href{https://tex.stackexchange.com/a/545416/299948}}{How to solve the error `Dimension too large. <recently read> \verb|\pgfmath@x|' while doing the calculations in the table}).
-
-If one can solve this problem through optimization algorithms or other means, welcome submit your code via GitHub: \url{https://github.com/xiamyphys/litetable}, or contact me via email \href{mail:xiamyphys@gmail.com}{\ttfamily xiamyphys@gmail.com}.
-
\section{Version History}
-The design of this course schedule originated from the student course schedule web page\footnote{Only those studying at or graduated from Hangzhou Dianzi University can have the permission of access.} of the \href{https://www.hduhelp.cn/}{HDUHelp} in \href{https://www.hdu.edu.cn}{Hangzhou Dianzi University}\footnote{https://en.wikipedia.org/wiki/Hangzhou\_Dianzi\_University}. The layout is very beautiful and then I used \LaTeX{} to imitate that style and made a class schedule template to share with everyone.
-
-\textsf{\bfseries Version 1.0} was finished on 1 September, 2023 and released on \href{https://www.latexstudio.net/index/details/index/mid/3625.html}{\LaTeX{} Studio} (Hangzhou) and \href{http://xhslink.com/od7Ycw}{Xiaohongshu}, where won the favor of many people.
-
-\textsf{\bfseries Version 2.0a} was finished developing on 1 November, 2023 and released on \href{https://www.latexstudio.net/index/details/index/mid/3636.html}{\LaTeX{} Studio} (Xiaoshan, Hangzhou) and \href{http://xhslink.com/od7Ycw}{Xiaohongshu}. This version used \verb|.cls| files to make the \verb|main.tex| file more concise. Also, this version has added a global option to choose whether the corners of the ``course Block'' to be round or sharp. And this version support adds multiply class schedules in one \verb|.tex| file.
-
-\textsf{\bfseries Version 2.1a} was finished developing on 5 November, 2023. Supports the libertinus font.
-
-\textsf{\bfseries Version 2.2a} was finished developing on 31 January, 2024. This version fixed the bug of resolution exceeded, changed paper type to US letter and support custom course start time and end time.
-
-\textsf{\bfseries Version 2.3a} was finished developing on 2 February, 2024. This version supports automatically generate the corresponding number of rows based on the number of time groups you enter, and in this version, timetable can be displayed horizontally or portrait as you like.
-
-\textsf{\bfseries Version 2.3b} was finished developing on 3 February, 2024. This version optimized coordinate calculation and improved compilation speed.
+The design of this course schedule originated from the student course schedule web page (only teachers and students of this school can access) of the \href{https://www.hduhelp.cn/}{HDUHelp} in \href{https://www.hdu.edu.cn}{Hangzhou Dianzi University}. The layout is very beautiful and then I used \textsf{\LaTeX} to imitate that style and made a class schedule template to share with everyone.
-\textsf{\bfseries Version 2.4a} was finished developing on 24 February, 2024. Happy Lantern Festival! This version supports custom workday display style, and supports hiding time and only showing course program number vertically aligned.
+\textsf{\bfseries Version 1.0} was finished on 2023/09/01 and released on \href{https://www.latexstudio.net}{\textsf{\LaTeX} Studio} (Hangzhou), where has won the favor of many people.
-\clearpage
-
-\datechange{2023/09/01}{Version 2.0a}
+\setlist[itemize]{noitemsep, topsep=0pt}
+\datechange{2023/11/01}{Version 2.0a}
\begin{itemize}
\item Supports the course block's corners be round or sharp.
\item Supports multiply class schedules in one \verb|.tex| file.
@@ -272,15 +279,23 @@ The design of this course schedule originated from the student course schedule w
\item Optimized coordinate calculation and improved compilation speed.
\end{itemize}
-\datechange{\today}{Version 2.4a}
+\datechange{2024/02/24}{Version 2.4a}
\begin{itemize}
\item Supports custom workday display style.
\item Supports hiding time and only showing course program number vertically aligned.
\item Supports setting default first and last week.
\end{itemize}
-\appendix
+\datechange{\today}{Version 2.4b}
+\begin{itemize}
+ \item Fixed the error of \emph{resolution exceed} in the \mode{landscape} mode and added over 7 workdays.
+ \item Supports custom every width of the columns in the timetable.
+ \item Optimized the design of round corners, supports custom the radius of corners.
+\end{itemize}
+
+\small Thanks for @egreg's code on \TeX{} Exchange for \href{https://tex.stackexchange.com/a/711657/299948}{print number of each rows' elements of an array}.
+\appendix
\includepdf[pages={2,4},nup=1x2,pagecommand={
\tikz[remember picture, overlay]
\node [rotate=90,below,yshift=-1em] at (current page.west) {\bfseries\LARGE Document Example: \texttt{litetable-demo.tex}};
diff --git a/macros/latex/contrib/litetable/tex/litetable.cls b/macros/latex/contrib/litetable/tex/litetable.cls
index 10d6882ff4..f965a8a69c 100644
--- a/macros/latex/contrib/litetable/tex/litetable.cls
+++ b/macros/latex/contrib/litetable/tex/litetable.cls
@@ -14,17 +14,13 @@
\NeedsTeXFormat{LaTeX2e}
\PassOptionsToPackage{quiet}{xeCJK}
\PassOptionsToPackage{no-math}{fontspec}
-\ProvidesClass{litetable}[2024/02/24/ v2.4a LiteTable document class]
+\ProvidesClass{litetable}[2024/02/24/ v2.4b LiteTable document class]
% ---------- 全局选项 ---------- %
\RequirePackage{kvoptions}
\RequirePackage{etoolbox}
\SetupKeyvalOptions{family=LITE, prefix=LITE@, setkeys=\kvsetkeys}
-\DeclareStringOption[sharp]{style}
-\DeclareVoidOption{round}{\kvsetkeys{LITE}{style=round}}
-\DeclareVoidOption{sharp}{\kvsetkeys{LITE}{style=sharp}}
-
\DeclareStringOption[portiait]{direction}
\DeclareVoidOption{portiait}{\kvsetkeys{LITE}{direction=portiait}}
\DeclareVoidOption{landscape}{\kvsetkeys{LITE}{direction=landscape}}
@@ -73,9 +69,7 @@
\definecolor{darkergray}{HTML}{F1F3F5} % 深色块
\definecolor{lightergray}{HTML}{FCFDFE} % 浅色块
\definecolor{blackgray}{HTML}{1A1D21} % 序号颜色
-
\pagecolor{lightergray}
-
\definecolor{H1}{HTML}{74A7A2} % 深绿
\definecolor{H1*}{HTML}{E9EEED}
\definecolor{H1**}{HTML}{009787}
@@ -103,7 +97,6 @@
\definecolor{H9}{HTML}{D09966} % 棕色
\definecolor{H9*}{HTML}{F2E0D0}
\definecolor{H9**}{HTML}{C96F1C}
-
\definecolor{W1}{HTML}{CCAD52}
\definecolor{W2}{HTML}{8FCC52}
\definecolor{W3}{HTML}{52CC70}
@@ -125,6 +118,7 @@
\def\pageheight{-11 in}
}
}{\relax}
+
\ifdefstring{\LITE@direction}{landscape}{
\def\pagewidth{11 in}
\def\pageheight{-8.5 in}
@@ -138,96 +132,84 @@
}
}{\relax}
-\ifdefstring{\LITE@style}{round}{\def\corners{rounded corners}}{\relax}
-\ifdefstring{\LITE@style}{sharp}{\def\corners{}}{\relax}
-
\ExplSyntaxOn % 数组
-\cs_set:Npn \timelist #1 {
- \gdef\@timelist{#1}
- \seq_set_split:Nnn \l_node_row_seq {;} {#1}
- \int_step_inline:nn{\seq_count:N \l_node_row_seq}
- {
- \seq_if_exist:cF {l_node_row_##1_seq}
- {
- \seq_new:c {l_node_row_##1_seq}
- }
- \exp_args:Ncx\seq_set_from_clist:Nn {l_node_row_##1_seq} {\seq_item:Nn \l_node_row_seq{##1}}
- }
-}
+% 1. Set up arrays
+\def\definearray#1#2
+ {
+ \seq_clear_new:c { l__litetable_array_#1_seq }
+ \seq_set_split:cnn { l__litetable_array_#1_seq } { ; } { #2 }
+ }
-\cs_set:Npn \PrintTime [#1][#2] {
- \tl_if_empty:nTF { #1 }
- {
- \tl_if_empty:nTF { #2 }
- {
- \seq_use:Nn \l_node_row_seq {,}
- }
- {
- \int_step_inline:nn{\seq_count:N \l_node_row_seq}
- {
- \seq_put_right:Nn \l_node_tmp_seq {\seq_item:cn {l_node_row_##1_seq}{#2}}
- }
- \seq_use:Nn \l_node_tmp_seq {,}
- }
- }
- {
- \tl_if_empty:nTF {#2}
- {
- \seq_use:cn {l_node_row_#1_seq}{,}
- }
- {
- \seq_item:cn {l_node_row_#1_seq}{#2}
- }
- }
-}
+\cs_generate_variant:Nn \seq_set_split:Nnn { c }
-\cs_set:Npn \weeklist #1 {
- \gdef\@weeklist{#1}
- \gdef\@weeknum{\clist_count:n {#1}} % 计数模块
- \seq_set_split:Nnn \r_node_row_seq {;} {#1}
- \int_step_inline:nn{\seq_count:N \r_node_row_seq}
- {
- \exp_args:Ncx\seq_set_from_clist:Nn {r_node_row_##1_seq} {\seq_item:Nn \r_node_row_seq{##1}}
- }
-}
+% 2. Define commands to work with arrays
+\NewExpandableDocumentCommand{\arraycount}{ o m }
+ {
+ \IfNoValueTF { #1 }
+ {
+ \litetable_array_count_full:n { #2 }
+ }
+ {
+ \litetable_array_count_item:nn { #2 } { #1 }
+ }
+ }
+
+\cs_new:Nn \litetable_array_count_item:nn
+ {
+ \clist_count:e { \seq_item:cn { l__litetable_array_#1_seq } { #2 } }
+ }
+
+\NewExpandableDocumentCommand{\arrayitem}{ m m m }
+ {
+ \clist_item:en { \seq_item:cn { l__litetable_array_#1_seq } { #2 } } { #3 }
+ }
-\cs_set:Npn \PrintWeek [#1] {
- \tl_if_empty:nTF {#1}
- {
- \seq_use:cn {r_node_row_1_seq}{,}
- }
- {
- \seq_item:cn {r_node_row_1_seq}{#1}
- }
-}
\ExplSyntaxOff
-\def\classnum#1{\gdef\@classnum{#1}}
-\ifcsname @classnum\endcsname % 判断`\@classnum'由`\timelist'计数赋值还是`\classnum'直接赋值
- \relax
- \else
- \ifcsname @timelist\endcsname
- \gdef\@classnum{\int_div_round:nn {\clist_count:n {\@timelist}}{2}} % 计数模块
+\NewDocumentCommand{\timelist}{ o m }
+{
+ \gdef\@timelist{#2}
+ \definearray{timelist}{#2}
+ \IfNoValueTF{#1}{
+ \ifnum \arraycount[2]{timelist}<\arraycount[1]{timelist}
+ \def\@classnum{\arraycount[1]{timelist}}
\else
- \def\@classnum{12}
+ \def\@classnum{\arraycount[2]{timelist}}
\fi
+ }{\def\@classnum{#1}}
+}
+\ifcsname @timelist\endcsname
+ \relax
+ \else
+ \def\@classnum{12}
\fi
+\def\weeklist#1{
+ \gdef\@weeklist{#1}
+ \definearray{weeklist}{#1}
+}
+\gdef\@weeknum{\arraycount[1]{weeklist}}
\RequirePackage{fontawesome5}
\newcounter{number}
\def\sticker#1{\gdef\@sticker{#1}}
+\def\corner#1{\gdef\@corner{#1}}
\def\makeframe#1{
+ \ifcsname @corner\endcsname
+ \tikzset{corner/.style={rounded corners=\@corner}}
+ \else
+ \tikzset{corner/.style={}}
+ \fi
\draw [darkergray] (0,0) rectangle (\pagewidth,\pageheight);
- \fill [fill=darkergray,\corners] (0,0) rectangle (\pagewidth,{1.5*\pageheight/(2*\@classnum+3.5)});% 顶部深灰色块
+ \fill [fill=darkergray,corner] (0,0) rectangle (\pagewidth,{1.5*\pageheight/(2*\@classnum+3.5)});% 顶部深灰色块
\node at (.5*\pagewidth,{.75*\pageheight/(2*\@classnum+3.5)}) {\huge\bfseries\sffamily #1}; % 标题
\ifodd\@classnum
\foreach \a in {2,4,...,\@classnum,\@classnum+2}
- \fill [fill=darkergray,yshift=(2*\a-1.5)*\pageheight/(2*\@classnum+3.5),\corners] (0,0) rectangle (\pagewidth,{2*\pageheight/(2*\@classnum+3.5)}); % 中间深灰色块(循环)
+ \fill [fill=darkergray,yshift=(2*\a-1.5)*\pageheight/(2*\@classnum+3.5),corner] (0,0) rectangle (\pagewidth,{2*\pageheight/(2*\@classnum+3.5)}); % 中间深灰色块(循环)
\else
\foreach \a in {2,4,...,\@classnum}
- \fill [fill=darkergray,yshift=(2*\a-1.5)*\pageheight/(2*\@classnum+3.5),\corners] (0,0) rectangle (\pagewidth,{2*\pageheight/(2*\@classnum+3.5)}); % 中间深灰色块(循环)
- \fill [fill=darkergray,yshift=(2.5+2*\@classnum)*\pageheight/(2*\@classnum+3.5),\corners] (0,0) rectangle (\pagewidth,{\pageheight/(2*\@classnum+3.5)}); % 底部深灰色块
+ \fill [fill=darkergray,yshift=(2*\a-1.5)*\pageheight/(2*\@classnum+3.5),corner] (0,0) rectangle (\pagewidth,{2*\pageheight/(2*\@classnum+3.5)}); % 中间深灰色块(循环)
+ \fill [fill=darkergray,yshift=(2.5+2*\@classnum)*\pageheight/(2*\@classnum+3.5),corner] (0,0) rectangle (\pagewidth,{\pageheight/(2*\@classnum+3.5)}); % 底部深灰色块
\fi
\foreach \a in {0,1,2,...,\@classnum}
@@ -235,27 +217,29 @@
% 时间标注
\setcounter{number}{0}
- \ifcsname @timelist\endcsname % 若 `\@timelist == empty', 跳过该函数
- \foreach \x in {1,2,...,\@classnum}
+ \ifcsempty{@timelist}{
+ \foreach \a in {1,2,...,\@classnum}
+ {
+ \node [yshift=(1.5+2*\a)*\pageheight/(2*\@classnum+3.5)] at(\pagewidth/32,0)
+ {\bfseries\large\color{blackgray}\texttt{\refstepcounter{number}\thenumber}};
+ }
+ }{
+ \foreach \x in {1,2,...,\@classnum}
{
\node [yshift=(2*\x+.9)*\pageheight/(2*\@classnum+3.5)] at (\pagewidth/32,0)
{\bfseries\color{blackgray}\texttt{\refstepcounter{number}\thenumber}};
\node[yshift=(2*\x+1.55)*\pageheight/(2*\@classnum+3.5)] at (\pagewidth/32,0)
- {\color{darkgray}\texttt{\PrintTime[1][\x]}};
+ {\color{darkgray}\texttt{\arrayitem{timelist}{1}{\x}}};
\node[yshift=(2*\x+2.1)*\pageheight/(2*\@classnum+3.5)] at (\pagewidth/32,0)
- {\color{darkgray}\texttt{\PrintTime[2][\x]}};
+ {\color{darkgray}\texttt{\arrayitem{timelist}{2}{\x}}};
}
- \else
- \foreach \a in {1,2,...,\@classnum}
- {
- \node [yshift=(1.5+2*\a)*\pageheight/(2*\@classnum+3.5)] at(\pagewidth/32,0)
- {\bfseries\large\color{blackgray}\texttt{\refstepcounter{number}\thenumber}};
}
- \fi
+
% 星期标注
\foreach \a in {1,2,...,\@weeknum}
- \node [xshift=3*\a*\pagewidth/16] at ({\pagewidth/16-\a*(15*\pagewidth/16*(1/5-1/\@weeknum))-7.5*\pagewidth/(16*\@weeknum)},{2*\pageheight/(2*\@classnum+3.5)})
- {\PrintWeek[\a]};
+ \node [xshift=\pagewidth/16] at ({.5*(\arrayitem{weeklist}{2}{\a}+\arrayitem{weeklist}{2}{\a+1})*15*\pagewidth/16},{2*\pageheight/(2*\@classnum+3.5)})
+ {\arrayitem{weeklist}{1}{\a}};
+
\ifcsname @sticker\endcsname
\node [opacity=.3,above left,yshift=(1.5+2*\@classnum)*\pageheight/(2*\@classnum+3.5),inner sep=0pt,outer sep=auto,scale=15] at (\pagewidth,{\pageheight/(2*\@classnum+3.5)}) {\includegraphics[width=\dimeval{\pagewidth/16/\@weeknum}]{\@sticker}};\fi
}
@@ -273,39 +257,41 @@
\NewDocumentCommand{\course}{O{H1} m m m m m O{\@weeks}}
{
- \fill [#1,\corners,
+ \fill [#1,corner,
yshift=(2*(#2-1))*\pageheight/(2*\@classnum+3.5),
- xshift=3*\theweekday*\pagewidth/16]
- ({\pagewidth/16-\theweekday*(15*\pagewidth/16*(1/5-1/\@weeknum))},{2.5*\pageheight/(2*\@classnum+3.5)}) rectangle ++
- ({15*\pagewidth/(16*\@weeknum)},{(2+2*(#3-#2))*\pageheight/(2*\@classnum+3.5)}); % frame
+ xshift=\pagewidth/16]
+ ({\arrayitem{weeklist}{2}{\theweekday+1}*15*\pagewidth/16},{2.5*\pageheight/(2*\@classnum+3.5)}) rectangle ++
+ ({(\arrayitem{weeklist}{2}{\theweekday+2}-\arrayitem{weeklist}{2}{\theweekday+1})*15*\pagewidth/16},{(2+2*(#3-#2))*\pageheight/(2*\@classnum+3.5)}); % frame
- \fill [#1*,\corners,
+ \fill [#1*,
yshift=(2*(#2-1)+.5)*\pageheight/(2*\@classnum+3.5),
- xshift=3*\theweekday*\pagewidth/16]
- ({\pagewidth/16-\theweekday*(15*\pagewidth/16*(1/5-1/\@weeknum))},{2.5*\pageheight/(2*\@classnum+3.5)}) rectangle ++
- ({15*\pagewidth/(16*\@weeknum)},{(1.5+2*(#3-#2))*\pageheight/(2*\@classnum+3.5)}); % content
+ xshift=\pagewidth/16]
+ ({\arrayitem{weeklist}{2}{\theweekday+1}*15*\pagewidth/16},{2.5*\pageheight/(2*\@classnum+3.5)}) --++
+ ({(\arrayitem{weeklist}{2}{\theweekday+2}-\arrayitem{weeklist}{2}{\theweekday+1})*15*\pagewidth/16},0)
+ { [corner] --++ (0,{(1.5+2*(#3-#2))*\pageheight/(2*\@classnum+3.5)}) --++
+ ({(-\arrayitem{weeklist}{2}{\theweekday+2}+\arrayitem{weeklist}{2}{\theweekday+1})*15*\pagewidth/16},0)} -- cycle; % content
\node [#1**,yshift=(#2+#3-1.25)*\pageheight/(2*\@classnum+3.5),
- xshift=3*\theweekday*\pagewidth/16] at
- ({\pagewidth/16-\theweekday*(15*\pagewidth/16*(1/5-1/\@weeknum))+7.5*\pagewidth/(16*\@weeknum)},{2.5*\pageheight/(2*\@classnum+3.5)})
+ xshift=\pagewidth/16] at
+ ({.5*(\arrayitem{weeklist}{2}{\theweekday+1}+\arrayitem{weeklist}{2}{\theweekday+2})*15*\pagewidth/16},{2.5*\pageheight/(2*\@classnum+3.5)})
{\heiti\large\bfseries #4}; % course
\node [#1**,above,
yshift=(#2+#3-.2)*\pageheight/(2*\@classnum+3.5),
- xshift=3*\theweekday*\pagewidth/16] at
- ({\pagewidth/16-\theweekday*(15*\pagewidth/16*(1/5-1/\@weeknum))+7.5*\pagewidth/(16*\@weeknum)},{2.5*\pageheight/(2*\@classnum+3.5)})
+ xshift=\pagewidth/16] at
+ ({.5*(\arrayitem{weeklist}{2}{\theweekday+1}+\arrayitem{weeklist}{2}{\theweekday+2})*15*\pagewidth/16},{2.5*\pageheight/(2*\@classnum+3.5)})
{\heiti\bfseries\small #5}; % location
\node [#1**,below,
yshift=(#2+#3-.2)*\pageheight/(2*\@classnum+3.5),
- xshift=3*\theweekday*\pagewidth/16] at
- ({\pagewidth/16-\theweekday*(15*\pagewidth/16*(1/5-1/\@weeknum))+7.5*\pagewidth/(16*\@weeknum)},{2.5*\pageheight/(2*\@classnum+3.5)})
+ xshift=\pagewidth/16] at
+ ({.5*(\arrayitem{weeklist}{2}{\theweekday+1}+\arrayitem{weeklist}{2}{\theweekday+2})*15*\pagewidth/16},{2.5*\pageheight/(2*\@classnum+3.5)})
{\heiti\bfseries\small #6}; % teacher
\node [#1**,above left,
yshift=2*#3*\pageheight/(2*\@classnum+3.5),
- xshift=3*\theweekday*\pagewidth/16] at
- ({\pagewidth/16-\theweekday*(15*\pagewidth/16*(1/5-1/\@weeknum))+15*\pagewidth/(16*\@weeknum)},{2.5*\pageheight/(2*\@classnum+3.5)})
+ xshift=\pagewidth/16] at
+ ({\arrayitem{weeklist}{2}{\theweekday+2}*15*\pagewidth/16},{2.5*\pageheight/(2*\@classnum+3.5)})
{\heiti\footnotesize #7}; % weeks
}
diff --git a/macros/latex/contrib/metalogox/README.txt b/macros/latex/contrib/metalogox/README.txt
index c89e1096e3..ab28df8636 100644
--- a/macros/latex/contrib/metalogox/README.txt
+++ b/macros/latex/contrib/metalogox/README.txt
@@ -1,7 +1,7 @@
The LaTeX metalogox package
Automatically adjusts the TeX logo and related, depending on the font.
-v1.04
+v1.05
Copyright 2019, 2023–2024 Brian Dunn — https://github.com/bdtc/metalogox
LaTeX Project Public License, version 1.3
diff --git a/macros/latex/contrib/metalogox/metalogox.dtx b/macros/latex/contrib/metalogox/metalogox.dtx
index 25b9bd3ba2..327659cc5b 100644
--- a/macros/latex/contrib/metalogox/metalogox.dtx
+++ b/macros/latex/contrib/metalogox/metalogox.dtx
@@ -16,7 +16,7 @@
% \iffalse
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{metalogox}
-%<package> [2024/01/26 v1.04 Extends the metalogo package with font detection.]
+%<package> [2024/03/01 v1.05 Extends the metalogo package with font detection.]
%
%<*driver>
\documentclass{ltxdoc}
@@ -167,6 +167,7 @@ pageanchor=true,
% Eczar, Ibarra, Inria, Inter, MLModern, Nunito, Oswald.}
% \changes{v1.03}{2024/01/19}{2024/01/19}
% \changes{v1.04}{2024/01/26}{2024/01/26}
+% \changes{v1.05}{2024/03/01}{2024/03/01}
@@ -1261,6 +1262,7 @@ pageanchor=true,
%
% Seach a list of possibilities:
% \changes{v1.03}{2024/01/19}{Updated many fonts for changed family names.}
+% \changes{v1.05}{2024/03/01}{Fixed Erewhon.}
% \begin{macrocode}
\MLX@@detectone{AccanthisADFStdNoThree}{accanthis}{accanthis}%
\MLX@@detectone{AccanthisADFStdNo3}{accanthis}{accanthis}%
@@ -1330,7 +1332,7 @@ pageanchor=true,
\MLX@@detectone{EBGaramond12}{EB Garamond}{garamond}%
\MLX@@detectone{Eczar(0)}{Eczar}{times}%
\MLX@@detectone{erewhon}{erewhon}{utopia}%
-\MLX@@detectone{Erewhon-Regular}{erewhon}{utopia}%
+\MLX@@detectone{Erewhon}{erewhon}{utopia}%
\MLX@@detectone{fbb}{fbb}{baskerville}%
\MLX@@detectone{FiraSans}{Fira Sans}{helvetica}%
\MLX@@detectone{FiraSansBook}{Fira Sans}{helvetica}%
diff --git a/macros/latex/contrib/metalogox/metalogox.pdf b/macros/latex/contrib/metalogox/metalogox.pdf
index 4912b1c319..c0b5025fe5 100644
--- a/macros/latex/contrib/metalogox/metalogox.pdf
+++ b/macros/latex/contrib/metalogox/metalogox.pdf
Binary files differ
diff --git a/macros/latex/contrib/minimalist/README.md b/macros/latex/contrib/minimalist/README.md
index 4e46eb1e0a..a843b3dd93 100644
--- a/macros/latex/contrib/minimalist/README.md
+++ b/macros/latex/contrib/minimalist/README.md
@@ -8,6 +8,8 @@
`minimalist` is a collection of styles and classes that helps you to typeset articles and books with a simple and clear design.
+> Package dependencies: [`amsfonts`](https://ctan.org/pkg/amsfonts), [`amsthm`](https://ctan.org/pkg/amsthm), [`anyfontsize`](https://ctan.org/pkg/anyfontsize), [`bookmark`](https://ctan.org/pkg/bookmark), [`caption`](https://ctan.org/pkg/caption), [*`draftwatermark`*](https://ctan.org/pkg/draftwatermark), [`embrac`](https://ctan.org/pkg/embrac), [`enumitem`](https://ctan.org/pkg/enumitem), [`extramarks`](https://ctan.org/pkg/extramarks), [`fancyhdr`](https://ctan.org/pkg/fancyhdr), [`float`](https://ctan.org/pkg/float), [*`fontspec`*](https://ctan.org/pkg/fontspec), [`geometry`](https://ctan.org/pkg/geometry), [`graphicx`](https://ctan.org/pkg/graphicx), [`hyperref`](https://ctan.org/pkg/hyperref), [`imakeidx`](https://ctan.org/pkg/imakeidx), [`lineno`](https://ctan.org/pkg/lineno), [*`lua-widow-control`*](https://ctan.org/pkg/lua-widow-control), [`indentfirst`](https://ctan.org/pkg/indentfirst), [*`mathpazo`*](https://ctan.org/pkg/mathpazo), [`mathtools`](https://ctan.org/pkg/mathtools), [*`newpx`*](https://ctan.org/pkg/newpx), [*`nowidow`*](https://ctan.org/pkg/nowidow), [`parskip`](https://ctan.org/pkg/parskip), [`pgf`](https://ctan.org/pkg/pgf), [`projlib`](https://ctan.org/pkg/projlib), [`regexpatch`](https://ctan.org/pkg/regexpatch), [`relsize`](https://ctan.org/pkg/relsize), [`silence`](https://ctan.org/pkg/silence), [`tcolorbox`](https://ctan.org/pkg/tcolorbox), [`tikzpagenodes`](https://ctan.org/pkg/tikzpagenodes), [`titlesec`](https://ctan.org/pkg/titlesec), [`titletoc`](https://ctan.org/pkg/titletoc), [`wrapfig2`](https://ctan.org/pkg/wrapfig2), [`ulem`](https://ctan.org/pkg/ulem).
+
It mainly consists of two parts.
- Main part:
diff --git a/macros/latex/contrib/minimalist/minimalist-classical.sty b/macros/latex/contrib/minimalist/minimalist-classical.sty
index 908de05e44..8d5050e581 100644
--- a/macros/latex/contrib/minimalist/minimalist-classical.sty
+++ b/macros/latex/contrib/minimalist/minimalist-classical.sty
@@ -18,7 +18,7 @@
\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesExplPackage
{minimalist-classical}
- {2024/02/23} {}
+ {2024/03/01} {}
{The "classical" style of minimalist}
\IfPackageLoadedTF { minimalist } {}
diff --git a/macros/latex/contrib/minimalist/minimalist-classicthesis.sty b/macros/latex/contrib/minimalist/minimalist-classicthesis.sty
index f22987b5a2..b3c093acf4 100644
--- a/macros/latex/contrib/minimalist/minimalist-classicthesis.sty
+++ b/macros/latex/contrib/minimalist/minimalist-classicthesis.sty
@@ -18,7 +18,7 @@
\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesExplPackage
{minimalist-classicthesis}
- {2024/02/23} {}
+ {2024/03/01} {}
{The "classicthesis" style of minimalist}
\IfPackageLoadedTF { minimalist } {}
diff --git a/macros/latex/contrib/minimalist/minimalist-default.sty b/macros/latex/contrib/minimalist/minimalist-default.sty
index ea3aa22eb9..e90fbeb934 100644
--- a/macros/latex/contrib/minimalist/minimalist-default.sty
+++ b/macros/latex/contrib/minimalist/minimalist-default.sty
@@ -18,7 +18,7 @@
\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesExplPackage
{minimalist-default}
- {2024/02/23} {}
+ {2024/03/01} {}
{The default style of minimalist}
\IfPackageLoadedTF { minimalist } {}
diff --git a/macros/latex/contrib/minimalist/minimalist-flow.sty b/macros/latex/contrib/minimalist/minimalist-flow.sty
index 737d61eaa9..996869fe31 100644
--- a/macros/latex/contrib/minimalist/minimalist-flow.sty
+++ b/macros/latex/contrib/minimalist/minimalist-flow.sty
@@ -18,7 +18,7 @@
\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesExplPackage
{minimalist-flow}
- {2024/02/23} {}
+ {2024/03/01} {}
{The "flow" style of minimalist}
\IfPackageLoadedTF { minimalist } {}
diff --git a/macros/latex/contrib/minimalist/minimalist-plain.sty b/macros/latex/contrib/minimalist/minimalist-plain.sty
index 761cc4f258..a233f5347d 100644
--- a/macros/latex/contrib/minimalist/minimalist-plain.sty
+++ b/macros/latex/contrib/minimalist/minimalist-plain.sty
@@ -18,7 +18,7 @@
\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesExplPackage
{minimalist-plain}
- {2024/02/23} {}
+ {2024/03/01} {}
{The "plain" style of minimalist}
\IfPackageLoadedTF { minimalist } {}
diff --git a/macros/latex/contrib/minimalist/minimalist-stream.sty b/macros/latex/contrib/minimalist/minimalist-stream.sty
index 51acfcbb7f..e99f2c6446 100644
--- a/macros/latex/contrib/minimalist/minimalist-stream.sty
+++ b/macros/latex/contrib/minimalist/minimalist-stream.sty
@@ -18,7 +18,7 @@
\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesExplPackage
{minimalist-stream}
- {2024/02/23} {}
+ {2024/03/01} {}
{The "stream" style of minimalist}
\IfPackageLoadedTF { minimalist } {}
diff --git a/macros/latex/contrib/minimalist/minimalist.sty b/macros/latex/contrib/minimalist/minimalist.sty
index 034a9cc8c6..7d244fc261 100644
--- a/macros/latex/contrib/minimalist/minimalist.sty
+++ b/macros/latex/contrib/minimalist/minimalist.sty
@@ -18,7 +18,7 @@
\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesExplPackage
{minimalist}
- {2024/02/23} {}
+ {2024/03/01} {}
{A simple and clear style for articles and books}
\keys_define:nn { minimalist }
diff --git a/macros/latex/contrib/minimalist/minimart.cls b/macros/latex/contrib/minimalist/minimart.cls
index 67411f25a8..d95ee8b1ac 100644
--- a/macros/latex/contrib/minimalist/minimart.cls
+++ b/macros/latex/contrib/minimalist/minimart.cls
@@ -18,7 +18,7 @@
\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesExplClass
{minimart}
- {2024/02/23} {}
+ {2024/03/01} {}
{A simple and clear article style}
\tl_const:Nn \l__minimclass_base_class_tl { article }
@@ -225,7 +225,7 @@
%%================================
\RequirePackage { graphicx }
\graphicspath { { images/ } }
-\RequirePackage { wrapfig }
+\RequirePackage { wrapfig2 }
\RequirePackage { float }
\RequirePackage { caption }
\captionsetup { font = small }
diff --git a/macros/latex/contrib/minimalist/minimbook.cls b/macros/latex/contrib/minimalist/minimbook.cls
index 727572c73a..cffe40bc95 100644
--- a/macros/latex/contrib/minimalist/minimbook.cls
+++ b/macros/latex/contrib/minimalist/minimbook.cls
@@ -18,7 +18,7 @@
\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesExplClass
{minimbook}
- {2024/02/23} {}
+ {2024/03/01} {}
{A simple and clear book style}
\tl_const:Nn \l__minimclass_base_class_tl { book }
@@ -225,7 +225,7 @@
%%================================
\RequirePackage { graphicx }
\graphicspath { { images/ } }
-\RequirePackage { wrapfig }
+\RequirePackage { wrapfig2 }
\RequirePackage { float }
\RequirePackage { caption }
\captionsetup { font = small }
diff --git a/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md b/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md
index 44ce7a8c55..8d8df7e071 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md
+++ b/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md
@@ -5,6 +5,12 @@ first release 0.95a, 2021-02-23 will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
this project uses date-based 'snapshot' version identifiers.
+## [2024-03-01]
+
+### Changed
+ - format of /F in filespec: use utf8/string for better compability with ZUGFeRD processor.
+ - added /Contents entry to URI and GoTo links for better UA support.
+
## [2024-02-22]
### Changed
diff --git a/macros/latex/contrib/pdfmanagement-testphase/README.md b/macros/latex/contrib/pdfmanagement-testphase/README.md
index 19c948dc5e..8bd1188f1f 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/README.md
+++ b/macros/latex/contrib/pdfmanagement-testphase/README.md
@@ -1,6 +1,6 @@
# LaTeX PDF management testphase bundle
-Version: 0.96e, 2024-02-22
+Version: 0.96f, 2024-03-01
This package is used during a test phase to load the new PDF management code
of LaTeX.
diff --git a/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty
index 51437e01b0..fbb8fb6199 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty
+++ b/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty
@@ -24,7 +24,7 @@
%% This file has the LPPL maintenance status "maintained".
%%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesPackage{color-ltx}[2024-02-22 v0.96e
+\ProvidesPackage{color-ltx}[2024-03-01 v0.96f
Standard LaTeX Color (patched for l3color, part of pdfmanagement-testphase, original version 2022/01/06 v1.3d) (DPC)]
\edef\Gin@codes{%
\catcode`\noexpand\^^A\the\catcode`\^^A\relax
diff --git a/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty
index a18d10afd0..f7325a206f 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty
+++ b/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty
@@ -19,7 +19,7 @@
%
% for those people who are interested.
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
-\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2024-02-22}{0.96e}
+\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2024-03-01}{0.96f}
{temporay patches to for the colorspace package to test pdfresource management ... UF}
% colorspace can define more models, that l3color can't yet handle.
diff --git a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx
index 95b10a0f43..8fbfda14ef 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx
@@ -82,7 +82,7 @@
% }^^A
% }
%
-% \date{Version 0.96e, released 2024-02-22}
+% \date{Version 0.96f, released 2024-03-01}
%
% \maketitle
% \begin{documentation}
@@ -964,7 +964,7 @@
%<@@=hyp>
% \end{macrocode}
% \begin{macrocode}
-\ProvidesFile{hgeneric-testphase.def}[2024-02-22 v0.96e %
+\ProvidesFile{hgeneric-testphase.def}[2024-03-01 v0.96f %
generic Hyperref driver for the LaTeX PDF management testphase bundle]
\RequirePackage{etoolbox} %why?
@@ -1695,6 +1695,32 @@
\tl_set:Nn \l_@@_text_enc_para_print_tl {utf8/string}
% \end{macrocode}
% \end{variable}
+%
+% It is also unclear how the /Contents entry would look at best.
+% So we use sockets. The first argument is the target (url or destination),
+% For GoTo we also pass the text as argument.
+% The sockets should define \cs{l_@@_link_Contents_tl}
+% % \begin{macrocode}
+\tl_new:N\l_@@_link_Contents_tl
+\socket_new:nn {hyp/link/GoTo/Contents}{2}
+\socket_new:nn {hyp/link/URI/Contents}{1}
+\socket_new_plug:nnn {hyp/link/GoTo/Contents}{default}
+ {
+ \@@_text_pdfstring:eoN
+ { Go~to~destination~#1 }
+ { \l_@@_text_enc_info_print_tl }
+ \l_@@_link_Contents_tl
+ }
+\socket_new_plug:nnn {hyp/link/URI/Contents}{default}
+ {
+ \@@_text_pdfstring:eoN
+ { #1 }
+ { \l_@@_text_enc_info_print_tl }
+ \l_@@_link_Contents_tl
+ }
+\socket_assign_plug:nn{hyp/link/GoTo/Contents}{default}
+\socket_assign_plug:nn{hyp/link/URI/Contents}{default}
+% \end{macrocode}
% \begin{variable}{\l_@@_dest_pdfview_tl}
% This hold the destination instructions in a format suitable for
% \cs{pdf_destination:nn}. The special value |fitrbox| indicates a boxed destination.
@@ -2210,6 +2236,12 @@
\Hy@VerboseLinkStart{#1}{#2}
\group_begin:
\tl_set:Nn \l_hyp_current_dest_name_tl {#2}
+% \end{macrocode}
+% this socket defines \cs{l_@@_link_Contents_tl}
+% \begin{macrocode}
+ \socket_use:nnn{hyp/link/GoTo/Contents}{#2}{#3}
+ \pdfannot_dict_put:nne {link/GoTo}{Contents}
+ {\l_@@_link_Contents_tl}
\hook_use:n {hyp/link/#1}
\@@_link_goto_begin:nw {#2}#3\Hy@xspace@end
\@@_link_goto_end:
@@ -2284,11 +2316,16 @@
{
\pdfdict_put:nnn{l_hyp/annot/A/URI}{IsMap}{true}
}
+% \end{macrocode}
+% This socket defines \cs{l_@@_link_Contents_tl}
+% \begin{macrocode}
+ \socket_use:nn{hyp/link/URI/Contents}{#2}
+ \pdfannot_dict_put:nne {link/URI}{Contents}{\l_@@_link_Contents_tl}
\cs_set_eq:NN \# \c_hash_str
\cs_set_eq:NN \% \c_percent_str
\Hy@safe@activestrue
\mode_leave_vertical:
- \pdfannot_dict_put:nne {link/URI}{A}{<<\pdfdict_use:n {l_hyp/annot/A/URI}>>}
+ \pdfannot_dict_put:nne {link/URI}{A}{<<\pdfdict_use:n {l_hyp/annot/A/URI}>>}
\pdfannot_link:nen { URI }
{
}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf
index 0450754ced..3ae39a6a57 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx
index 0ec194a94e..e5a5c8eef4 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx
@@ -45,7 +45,7 @@
% }^^A
% }
%
-% \date{Version 0.96e, released 2024-02-22}
+% \date{Version 0.96f, released 2024-03-01}
%
% \maketitle
%
@@ -56,27 +56,27 @@
% \begin{macrocode}
%<drivers>\ProvidesExplFile
%<*dvipdfmx>
- {l3backend-testphase-dvipdfmx.def}{2024-02-22}{}
+ {l3backend-testphase-dvipdfmx.def}{2024-03-01}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: dvipdfmx}
%</dvipdfmx>
%<*dvips>
- {l3backend-testphase-dvips.def}{2024-02-22}{}
+ {l3backend-testphase-dvips.def}{2024-03-01}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: dvips}
%</dvips>
%<*dvisvgm>
- {l3backend-testphase-dvisvgm.def}{2024-02-22}{}
+ {l3backend-testphase-dvisvgm.def}{2024-03-01}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: dvisvgm}
%</dvisvgm>
%<*luatex>
- {l3backend-testphase-luatex.def}{2024-02-22}{}
+ {l3backend-testphase-luatex.def}{2024-03-01}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (LuaTeX)}
%</luatex>
%<*pdftex>
- {l3backend-testphase-pdftex.def}{2024-02-22}{}
+ {l3backend-testphase-pdftex.def}{2024-03-01}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (pdfTeX)}
%</pdftex>
%<*xdvipdfmx>
- {l3backend-testphase-xetex.def}{2024-02-22}{}
+ {l3backend-testphase-xetex.def}{2024-03-01}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: XeTeX}
%</xdvipdfmx>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf
index d63b4b9e56..4a45caba95 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx
index 51eb9a656e..099640fdb9 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx
@@ -48,7 +48,7 @@
% }^^A
% }
%
-% \date{Version 0.96e, released 2024-02-22}
+% \date{Version 0.96f, released 2024-03-01}
%
% \maketitle
% \begin{documentation}
@@ -432,7 +432,7 @@
% \begin{macrocode}
%<@@=pdfannot>
%<*header>
-\ProvidesExplPackage{l3pdfannot}{2024-02-22}{0.96e}
+\ProvidesExplPackage{l3pdfannot}{2024-03-01}{0.96f}
{PDF-annotations}
\RequirePackage{l3pdfdict}
%</header>
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf
index 3a49e6be75..3c2d3eca0b 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx
index c7cb24371d..c9d51ef555 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96e, released 2024-02-22}
+% \date{Version 0.96f, released 2024-03-01}
%
% \maketitle
% \begin{documentation}
@@ -208,7 +208,7 @@
% \begin{macrocode}
%<@@=pdfdict>
%<*header>
-\ProvidesExplPackage{l3pdfdict}{2024-02-22}{0.96e}
+\ProvidesExplPackage{l3pdfdict}{2024-03-01}{0.96f}
{Tools for PDF dictionaries (LaTeX PDF management testphase bundle)}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf
index bd7ff5e3ff..3d5899d6fd 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx
index 1bb30b3af5..60067dab63 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96e, released 2024-02-22}
+% \date{Version 0.96f, released 2024-03-01}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf
index a64b7de4e5..138ffd1059 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx
index 42b9e91ba6..6b37d1db68 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx
@@ -64,7 +64,7 @@
% }^^A
% }
%
-% \date{Version 0.96e, released 2024-02-22}
+% \date{Version 0.96f, released 2024-03-01}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf
index f7333e6d78..54292479cd 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx
index e7478d06fd..f98e6c3f07 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96e, released 2024-02-22}
+% \date{Version 0.96f, released 2024-03-01}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf
index abbae8d2f8..3e38f90827 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx
index 17e961996b..b76f385207 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx
@@ -55,7 +55,7 @@
% }^^A
% }
%
-% \date{Version 0.96e, released 2024-02-22}
+% \date{Version 0.96f, released 2024-03-01}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf
index 0c5ad08e2d..379145a63a 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx
index bf302f68ca..51bfce9347 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx
@@ -83,7 +83,7 @@
% }^^A
% }
%
-% \date{Version 0.96e, released 2024-02-22}
+% \date{Version 0.96f, released 2024-03-01}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf
index 6ab354c51b..ef1ebfc0ee 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx
index 6680441f39..876bcacb35 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96e, released 2024-02-22}
+% \date{Version 0.96f, released 2024-03-01}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf
index be651fd1af..10cbf0029a 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx
index 7d1a693535..24b0591a27 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx
@@ -69,7 +69,7 @@
% }^^A
% }
%
-% \date{Version 0.96e, released 2024-02-22}
+% \date{Version 0.96f, released 2024-03-01}
%
% \maketitle
% \begin{documentation}
@@ -972,7 +972,7 @@
%<*package>
%<@@=pdffield>
\NeedsTeXFormat{LaTeX2e}
-\ProvidesExplPackage{l3pdffield-testphase}{2024-02-22}{0.96e}%
+\ProvidesExplPackage{l3pdffield-testphase}{2024-03-01}{0.96f}%
{form fields}
% \end{macrocode}
% \subsection{hyperref specific command}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf
index 4a2a565f21..18f43aa4f6 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx
index 8ba40c54ed..a13a4598a1 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96e, released 2024-02-22}
+% \date{Version 0.96f, released 2024-03-01}
%
% \maketitle
% \begin{documentation}
@@ -398,7 +398,7 @@
%
% \begin{macrocode}
%<*header>
-\ProvidesExplPackage{l3pdffile}{2024-02-22}{0.96e}
+\ProvidesExplPackage{l3pdffile}{2024-03-01}{0.96f}
{embedding and referencing files in PDF---LaTeX PDF management testphase bundle}
\RequirePackage{l3pdftools} %temporarly!!
%</header>
@@ -645,8 +645,9 @@
}
{
\group_begin:
- \@@_filename_convert_to_print:nN { #2 } \l_@@_tmpa_str
+ \pdf_string_from_unicode:nnN {utf8/string}{#2}\l_@@_tmpa_str
\pdfdict_put:nne {l_pdffile/Filespec}{F} { \l_@@_tmpa_str }
+ \@@_filename_convert_to_print:nN { #2 } \l_@@_tmpa_str
\pdfdict_put:nne {l_pdffile/Filespec}{UF}{ \l_@@_tmpa_str }
\pdf_object_write:nne { #1 } { dict }
{
@@ -669,8 +670,9 @@
}
{
\group_begin:
- \@@_filename_convert_to_print:nN { #1 } \l_@@_tmpa_str
+ \pdf_string_from_unicode:nnN {utf8/string}{#1}\l__pdffile_tmpa_str
\pdfdict_put:nne {l_pdffile/Filespec}{F} { \l_@@_tmpa_str }
+ \@@_filename_convert_to_print:nN { #1 } \l_@@_tmpa_str
\pdfdict_put:nne {l_pdffile/Filespec}{UF}{ \l_@@_tmpa_str }
\pdf_object_unnamed_write:ne {dict}
{
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf
index 9700e9ab6c..91314688ee 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx
index f7c8ec02d7..4d430bed91 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx
@@ -57,7 +57,7 @@
% }^^A
% }
%
-% \date{Version 0.96e, released 2024-02-22}
+% \date{Version 0.96f, released 2024-03-01}
%
% \maketitle
% \begin{documentation}
@@ -632,7 +632,7 @@
%<@@=pdfmanagement>
%<*header>
%
-\ProvidesExplPackage{l3pdfmanagement}{2024-02-22}{0.96e}
+\ProvidesExplPackage{l3pdfmanagement}{2024-03-01}{0.96f}
{Management of core PDF dictionaries (LaTeX PDF management testphase bundle)}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf
index 0d8542561b..2f9176068b 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx
index 63697bf0b3..a8f9fa8a24 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96e, released 2024-02-22}
+% \date{Version 0.96f, released 2024-03-01}
%
% \maketitle
% \begin{documentation}
@@ -618,7 +618,7 @@
% \begin{macrocode}
%<@@=pdfmeta>
%<*header>
-\ProvidesExplPackage{l3pdfmeta}{2024-02-22}{0.96e}
+\ProvidesExplPackage{l3pdfmeta}{2024-03-01}{0.96f}
{PDF-Standards---LaTeX PDF management testphase bundle}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf
index 47a827a16b..2e988a5912 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx
index acea3f5149..d90a102980 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96e, released 2024-02-22}
+% \date{Version 0.96f, released 2024-03-01}
%
% \maketitle
% \begin{documentation}
@@ -231,7 +231,7 @@
%
% \begin{macrocode}
%<*header>
-\ProvidesExplPackage{l3pdftools}{2024-02-22}{0.96e}
+\ProvidesExplPackage{l3pdftools}{2024-03-01}{0.96f}
{candidate commands for l3pdf---LaTeX PDF management testphase bundle}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf
index aec25b5a8f..af2a4d4365 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx
index 40ef83a7c7..80fbee142b 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx
@@ -48,7 +48,7 @@
% }^^A
% }
%
-% \date{Version 0.96e, released 2024-02-22}
+% \date{Version 0.96f, released 2024-03-01}
%
% \maketitle
% \begin{documentation}
@@ -132,7 +132,7 @@
% \begin{macrocode}
%<@@=pdf>
%<*header>
-\ProvidesExplPackage{l3pdfxform}{2024-02-22}{0.96e}
+\ProvidesExplPackage{l3pdfxform}{2024-03-01}{0.96f}
{command to create xforms (beta)---LaTeX PDF management testphase bundle}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf
index 1b54f22122..0025fa9270 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx
index 0116923ae2..799222500a 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx
@@ -47,7 +47,7 @@
% }^^A
% }
%
-% \date{Version 0.96e, released 2024-02-22}
+% \date{Version 0.96f, released 2024-03-01}
%
% \maketitle
% \begin{documentation}
@@ -220,7 +220,7 @@
% \begin{macrocode}
%<@@=pdfmanagement>
%<*header>
-\ProvidesExplPackage{ltdocinit}{2024-02-22}{0.96e}
+\ProvidesExplPackage{ltdocinit}{2024-03-01}{0.96f}
{Initialize document metadata}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf
index a1cdd6fa05..0fe70bd6bd 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
index bd25244517..04bb26772e 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
@@ -47,7 +47,7 @@
% }^^A
% }
%
-% \date{Version 0.96e, released 2024-02-22}
+% \date{Version 0.96f, released 2024-03-01}
%
% \maketitle
% \begin{documentation}
@@ -63,7 +63,7 @@
% |debug={firstaidoff={name1,name2,...},...}|.
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{pdfmanagement-firstaid}{2024-02-22}{0.96e}
+\ProvidesExplPackage{pdfmanagement-firstaid}{2024-03-01}{0.96f}
{LaTeX PDF management testphase bundle / firstaid-patches}
%<@@=pdfmanagement>
diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf
index e5bfb845c9..b07c412140 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx
index 7d599fd3bd..b04d33035a 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx
@@ -47,7 +47,7 @@
% }^^A
% }
%
-% \date{Version 0.96e, released 2024-02-22}
+% \date{Version 0.96f, released 2024-03-01}
%
% \maketitle
% \begin{documentation}
@@ -394,7 +394,7 @@
% \begin{macrocode}
%<@@=pdf>
%<*package>
-\ProvidesExplPackage{pdfmanagement-testphase}{2024-02-22}{0.96e}
+\ProvidesExplPackage{pdfmanagement-testphase}{2024-03-01}{0.96f}
{LaTeX PDF management testphase bundle}
\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
\IfFormatAtLeastTF{2020-10-01}{}{
@@ -422,7 +422,7 @@
% to allow to set it in the document.
% \begin{macrocode}
%<*header>
-\ProvidesExplFile{pdfmanagement-testphase.ltx}{2024-02-22}{0.96e}
+\ProvidesExplFile{pdfmanagement-testphase.ltx}{2024-03-01}{0.96f}
{PDF~management~code~(testphase)}
% \end{macrocode}
% We define a boolean for the new delayed shipout. This is temporary. At some
diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf
index 3b92f77bf0..56bc534e9c 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty
index 7966d479e3..d96cdbca1d 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty
+++ b/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty
@@ -1,6 +1,6 @@
%% LaTeX2e file `xcolor-patches-tmp-ltx.sty'
%%
-\ProvidesPackage{xcolor-patches-tmp-ltx}[2024-02-22 v0.96e patch xcolor for l3color]
+\ProvidesPackage{xcolor-patches-tmp-ltx}[2024-03-01 v0.96f patch xcolor for l3color]
\@ifundefined{color_set:nn}{\RequirePackage{l3color}}{}
\ExplSyntaxOn
diff --git a/macros/latex/contrib/projlib/ProjLib.dtx b/macros/latex/contrib/projlib/ProjLib.dtx
index d961221c89..50dc24d9fe 100644
--- a/macros/latex/contrib/projlib/ProjLib.dtx
+++ b/macros/latex/contrib/projlib/ProjLib.dtx
@@ -19,84 +19,84 @@
%<*ProjLib>
\ProvidesExplPackage
{ProjLib}
- {2024/02/24} {}
+ {2024/03/01} {}
{Collective interface of the ProjLib toolkit}
%</ProjLib>
%
%<*projlib-author>
\ProvidesExplPackage
{projlib-author}
- {2024/02/24} {}
+ {2024/03/01} {}
{Enhanced author information block}
%</projlib-author>
%
%<*projlib-datetime>
\ProvidesExplPackage
{projlib-datetime}
- {2024/02/24} {}
+ {2024/03/01} {}
{Convert numeric date-time string to natural language}
%</projlib-datetime>
%
%<*projlib-draft>
\ProvidesExplPackage
{projlib-draft}
- {2024/02/24} {}
+ {2024/03/01} {}
{Useful commands during draft stage}
%</projlib-draft>
%
%<*projlib-font>
\ProvidesExplPackage
{projlib-font}
- {2024/02/24} {}
+ {2024/03/01} {}
{Font selection and configuration}
%</projlib-font>
%
%<*projlib-language>
\ProvidesExplPackage
{projlib-language}
- {2024/02/24} {}
+ {2024/03/01} {}
{Multi-language configuration}
%</projlib-language>
%
%<*projlib-logo>
\ProvidesExplPackage
{projlib-logo}
- {2024/02/24} {}
+ {2024/03/01} {}
{The ProjLib logo}
%</projlib-logo>
%
%<*projlib-math>
\ProvidesExplPackage
{projlib-math}
- {2024/02/24} {}
+ {2024/03/01} {}
{Efficient math setup}
%</projlib-math>
%
%<*projlib-paper>
\ProvidesExplPackage
{projlib-paper}
- {2024/02/24} {}
+ {2024/03/01} {}
{Configuration of the paper style}
%</projlib-paper>
%
%<*projlib-text>
\ProvidesExplPackage
{projlib-text}
- {2024/02/24} {}
+ {2024/03/01} {}
{Text-related commands}
%</projlib-text>
%
%<*projlib-theorem>
\ProvidesExplPackage
{projlib-theorem}
- {2024/02/24} {}
+ {2024/03/01} {}
{Configuration of theorem-like environments}
%</projlib-theorem>
%
%<*projlib-titlepage>
\ProvidesExplPackage
{projlib-titlepage}
- {2024/02/24} {}
+ {2024/03/01} {}
{Interface for title page rendering}
%</projlib-titlepage>
@@ -476,27 +476,27 @@
}
}
- \tl_new:N \l_projlib_author_subjclassname_tl
- \tl_new:N \l_projlib_author_subjclass_tl
+ \tl_new:N \l__projlib_author_subjclassname_tl
+ \tl_new:N \l__projlib_author_subjclass_tl
\msg_new:nnn { projlib-author }
{ unknown-msc-edition }
{ Unknown~edition~(#1)~of~Mathematics~Subject~Classification;~using~'2020' }
\NewDocumentCommand \subjclass { O{2020} m }
{
- \tl_set:Nn \l_projlib_author_subjclass_tl { #2 }
+ \tl_set:Nn \l__projlib_author_subjclass_tl { #2 }
\tl_if_exist:cTF { subjclassname_#1 }
{
- \tl_set:Nn \l_projlib_author_subjclassname_tl { \tl_use:c { subjclassname_#1 } }
+ \tl_set:Nn \l__projlib_author_subjclassname_tl { \tl_use:c { subjclassname_#1 } }
}
{
\msg_warning:nnn { projlib-author } { unknown-msc-edition } { #1 }
- \tl_set:Nn \l_projlib_author_subjclassname_tl { \tl_use:c { subjclassname_2020 } }
+ \tl_set:Nn \l__projlib_author_subjclassname_tl { \tl_use:c { subjclassname_2020 } }
}
\projlib_author_pre_thanks:n
{
- \textit{ \l_projlib_author_subjclassname_tl \c_projlib_author_dot_tl }
+ \textit{ \l__projlib_author_subjclassname_tl \c_projlib_author_dot_tl }
\enspace
- \l_projlib_author_subjclass_tl .
+ \l__projlib_author_subjclass_tl .
}
}
\tl_const:cn { subjclassname_1991 } { \textup{1991}~Mathematics~Subject~Classification }
@@ -2199,7 +2199,7 @@
}\ULon { #1 }
}
- \bool_if:NTF \l__projlib_draft_fast_bool
+\bool_if:NTF \l__projlib_draft_fast_bool
{
\tl_const:Nn \l_projlib_draft_plain_box_begin_tl { [ }
\tl_const:Nn \l_projlib_draft_plain_box_after_tl { ] }
@@ -3978,9 +3978,15 @@
, complex-name .initial:n = { true }
, complex~name .bool_set:N = \l__projlib_theorem_complexname_bool
, complex name .bool_set:N = \l__projlib_theorem_complexname_bool
+ , complex-names .bool_set:N = \l__projlib_theorem_complexname_bool
+ , complex~names .bool_set:N = \l__projlib_theorem_complexname_bool
+ , complex names .bool_set:N = \l__projlib_theorem_complexname_bool
, simple-name .bool_set_inverse:N = \l__projlib_theorem_complexname_bool
, simple~name .bool_set_inverse:N = \l__projlib_theorem_complexname_bool
, simple name .bool_set_inverse:N = \l__projlib_theorem_complexname_bool
+ , simple-names .bool_set_inverse:N = \l__projlib_theorem_complexname_bool
+ , simple~names .bool_set_inverse:N = \l__projlib_theorem_complexname_bool
+ , simple names .bool_set_inverse:N = \l__projlib_theorem_complexname_bool
, no-preset-names .bool_set_inverse:N = \l__projlib_theorem_presetname_bool
, no-preset-names .initial:n = { false }
, no~preset~names .bool_set_inverse:N = \l__projlib_theorem_presetname_bool
@@ -4176,11 +4182,11 @@
\crthm_counter_alias:nn { theorem-with-name } { theorem }
% \crthm_counter_alias:nn { proof } { theorem }
-\tl_new:N \l_projlib_theorem_name_of_theorem_with_name_tl
+\tl_new:N \l__projlib_theorem_name_of_theorem_with_name_tl
\CreateTheorem { theorem-with-name_inner }
{
, name = {
- , heading = { \l_projlib_theorem_name_of_theorem_with_name_tl }
+ , heading = { \l__projlib_theorem_name_of_theorem_with_name_tl }
, crefname = {}{}
, Crefname = {}{}
}
@@ -4190,7 +4196,7 @@
\NewDocumentEnvironment { theorem-with-name } { m O{} }
{
- \tl_set:Nn \l_projlib_theorem_name_of_theorem_with_name_tl { #1 }
+ \tl_set:Nn \l__projlib_theorem_name_of_theorem_with_name_tl { #1 }
\begin { theorem-with-name_inner } [ #2 ]
}
{
@@ -4198,7 +4204,7 @@
}
\NewDocumentEnvironment { theorem-with-name* } { m O{} }
{
- \tl_set:Nn \l_projlib_theorem_name_of_theorem_with_name_tl { #1 }
+ \tl_set:Nn \l__projlib_theorem_name_of_theorem_with_name_tl { #1 }
\begin { theorem-with-name_inner* } [ #2 ]
}
{
@@ -4208,15 +4214,15 @@
\SetTheoremBinding { theorem-with-name } { theorem-with-name_inner }
\SetTheoremBinding { theorem-with-name* } { theorem-with-name_inner* }
-\tl_new:N \l_projlib_theorem_name_of_proof_tl
-\CreateTheorem { proof_inner } { name = { heading = { \l_projlib_theorem_name_of_proof_tl } }, create-starred-version, qed, shared-counter = proof }
+\tl_new:N \l__projlib_theorem_name_of_proof_tl
+\CreateTheorem { proof_inner } { name = { heading = { \l__projlib_theorem_name_of_proof_tl } }, create-starred-version, qed, shared-counter = proof }
\cs_undefine:c { proof }
\cs_undefine:c { endproof }
\NewDocumentEnvironment { proof } { O{\proofname} }
{
- \tl_set:Nn \l_projlib_theorem_name_of_proof_tl { #1 }
+ \tl_set:Nn \l__projlib_theorem_name_of_proof_tl { #1 }
\begin { proof_inner }
}
{
@@ -4224,7 +4230,7 @@
}
\NewDocumentEnvironment { proof* } { O{\proofname} }
{
- \tl_set:Nn \l_projlib_theorem_name_of_proof_tl { #1 }
+ \tl_set:Nn \l__projlib_theorem_name_of_proof_tl { #1 }
\begin { proof_inner* }
}
{
@@ -7097,19 +7103,19 @@
\usetikzlibrary { calc }
\ExplSyntaxOn
-\tl_new:N \l_projlib_titlepage_title_page_name_tl
-\tl_new:N \l_projlib_titlepage_license_page_name_tl
-\tl_set:Nn \l_projlib_titlepage_title_page_name_tl { Cover }
-\tl_set:Nn \l_projlib_titlepage_license_page_name_tl { License }
+\tl_new:N \l__projlib_titlepage_title_page_name_tl
+\tl_new:N \l__projlib_titlepage_license_page_name_tl
+\tl_set:Nn \l__projlib_titlepage_title_page_name_tl { Cover }
+\tl_set:Nn \l__projlib_titlepage_license_page_name_tl { License }
-\tl_new:N \l_projlib_titlepage_logo_tl
-\tl_new:N \l_projlib_titlepage_title_tl
-\tl_new:N \l_projlib_titlepage_subtitle_tl
-\tl_new:N \l_projlib_titlepage_author_tl
-\tl_new:N \l_projlib_titlepage_info_tl
-\tl_new:N \l_projlib_titlepage_license_tl
-\tl_new:N \l_projlib_titlepage_date_tl
-\tl_new:N \l_projlib_titlepage_style_tl
+\tl_new:N \l__projlib_titlepage_logo_tl
+\tl_new:N \l__projlib_titlepage_title_tl
+\tl_new:N \l__projlib_titlepage_subtitle_tl
+\tl_new:N \l__projlib_titlepage_author_tl
+\tl_new:N \l__projlib_titlepage_info_tl
+\tl_new:N \l__projlib_titlepage_license_tl
+\tl_new:N \l__projlib_titlepage_date_tl
+\tl_new:N \l__projlib_titlepage_style_tl
\NewDocumentCommand \ProjLibTitlePage { O{} m }
{
@@ -7128,23 +7134,23 @@
\keys_define:nn { projlib-titlepage-config }
{
- , logo .code:n = { \tl_set:Nn \l_projlib_titlepage_logo_tl { \tl_trim_spaces:n { #1 } } }
+ , logo .code:n = { \tl_set:Nn \l__projlib_titlepage_logo_tl { \tl_trim_spaces:n { #1 } } }
, logo .initial:n = { * }
- , title .code:n = { \tl_set:Nn \l_projlib_titlepage_title_tl { \tl_trim_spaces:n { #1 } } }
- , subtitle .code:n = { \tl_set:Nn \l_projlib_titlepage_subtitle_tl { \tl_trim_spaces:n { #1 } } }
- , author .code:n = { \tl_set:Nn \l_projlib_titlepage_author_tl { \tl_trim_spaces:n { #1 } } }
- , date .code:n = { \tl_set:Nn \l_projlib_titlepage_date_tl { \tl_trim_spaces:n { #1 } } }
- , title-page-name .code:n = { \tl_set:Nn \l_projlib_titlepage_title_page_name_tl { \tl_trim_spaces:n { #1 } } }
- , title~page~name .code:n = { \tl_set:Nn \l_projlib_titlepage_title_page_name_tl { \tl_trim_spaces:n { #1 } } }
- , title page name .code:n = { \tl_set:Nn \l_projlib_titlepage_title_page_name_tl { \tl_trim_spaces:n { #1 } } }
- , license-page-name .code:n = { \tl_set:Nn \l_projlib_titlepage_license_page_name_tl { \tl_trim_spaces:n { #1 } } }
- , license~page~name .code:n = { \tl_set:Nn \l_projlib_titlepage_license_page_name_tl { \tl_trim_spaces:n { #1 } } }
- , license page name .code:n = { \tl_set:Nn \l_projlib_titlepage_license_page_name_tl { \tl_trim_spaces:n { #1 } } }
- , info .code:n = { \tl_set:Nn \l_projlib_titlepage_info_tl { \tl_trim_spaces:n { #1 } } }
+ , title .code:n = { \tl_set:Nn \l__projlib_titlepage_title_tl { \tl_trim_spaces:n { #1 } } }
+ , subtitle .code:n = { \tl_set:Nn \l__projlib_titlepage_subtitle_tl { \tl_trim_spaces:n { #1 } } }
+ , author .code:n = { \tl_set:Nn \l__projlib_titlepage_author_tl { \tl_trim_spaces:n { #1 } } }
+ , date .code:n = { \tl_set:Nn \l__projlib_titlepage_date_tl { \tl_trim_spaces:n { #1 } } }
+ , title-page-name .code:n = { \tl_set:Nn \l__projlib_titlepage_title_page_name_tl { \tl_trim_spaces:n { #1 } } }
+ , title~page~name .code:n = { \tl_set:Nn \l__projlib_titlepage_title_page_name_tl { \tl_trim_spaces:n { #1 } } }
+ , title page name .code:n = { \tl_set:Nn \l__projlib_titlepage_title_page_name_tl { \tl_trim_spaces:n { #1 } } }
+ , license-page-name .code:n = { \tl_set:Nn \l__projlib_titlepage_license_page_name_tl { \tl_trim_spaces:n { #1 } } }
+ , license~page~name .code:n = { \tl_set:Nn \l__projlib_titlepage_license_page_name_tl { \tl_trim_spaces:n { #1 } } }
+ , license page name .code:n = { \tl_set:Nn \l__projlib_titlepage_license_page_name_tl { \tl_trim_spaces:n { #1 } } }
+ , info .code:n = { \tl_set:Nn \l__projlib_titlepage_info_tl { \tl_trim_spaces:n { #1 } } }
, info .initial:n = { }
- , license .code:n = { \tl_set:Nn \l_projlib_titlepage_license_tl { \tl_trim_spaces:n { #1 } } }
+ , license .code:n = { \tl_set:Nn \l__projlib_titlepage_license_tl { \tl_trim_spaces:n { #1 } } }
, license .initial:n = { }
- , style .tl_set:N = \l_projlib_titlepage_style_tl
+ , style .tl_set:N = \l__projlib_titlepage_style_tl
, style .initial:n = { default }
, color .code:n = {
\keyval_parse:nnn
@@ -7152,6 +7158,10 @@
{ \projlib_titlepage_set_color:nn }
{ #1 }
}
+ , author-info-on-the-right .bool_set:N = \l__projlib_titlepage_show_author_info_on_the_right_bool
+ , author-info-on-the-right .initial:n = { false }
+ , author~info~on~the~right .bool_set:N = \l__projlib_titlepage_show_author_info_on_the_right_bool
+ , author info on the right .bool_set:N = \l__projlib_titlepage_show_author_info_on_the_right_bool
, unknown .code:n = {}
}
@@ -7160,33 +7170,33 @@
\cs_new_protected:Nn \projlib_titlepage_show_logo:n
{
- \tl_if_eq:NnTF \l_projlib_titlepage_logo_tl { \tl_trim_spaces:n { * } }
+ \tl_if_eq:NnTF \l__projlib_titlepage_logo_tl { \tl_trim_spaces:n { * } }
{
#1
}
{
- \tl_use:N \l_projlib_titlepage_logo_tl
+ \tl_use:N \l__projlib_titlepage_logo_tl
}
}
\cs_new_protected:Nn \projlib_titlepage_render:n
{
\keys_set:nn { projlib-titlepage-config } { #1 }
- \tl_set_eq:NN \thepage \l_projlib_titlepage_title_page_name_tl
+ \tl_set_eq:NN \thepage \l__projlib_titlepage_title_page_name_tl
\begin { titlepage }
- \cs_if_exist_use:c { projlib_titlepage_render_with_style_ \l_projlib_titlepage_style_tl : }
+ \cs_if_exist_use:c { projlib_titlepage_render_with_style_ \l__projlib_titlepage_style_tl : }
\end { titlepage }
- \tl_set_eq:NN \thepage \l_projlib_titlepage_license_page_name_tl
+ \tl_set_eq:NN \thepage \l__projlib_titlepage_license_page_name_tl
\thispagestyle{empty}
\null\vfill
% \begin{flushleft}
\group_begin:
\noindent
- \tl_use:N \l_projlib_titlepage_info_tl
+ \tl_use:N \l__projlib_titlepage_info_tl
\group_end:
% \end{flushleft}
\group_begin:
- \tl_use:N \l_projlib_titlepage_license_tl
+ \tl_use:N \l__projlib_titlepage_license_tl
\group_end:
\cleardoublepage
\setcounter{page}{0}
@@ -7207,10 +7217,10 @@
at ($(current~page.north~west)+(.57\paperwidth,-.15\paperheight)$)
{
\sffamily
- \fontsize{24pt}{36pt}\selectfont
- \textsc{ \textbf{ \l_projlib_titlepage_title_tl } }\\[1.5em]
- \fontsize{18pt}{27pt}\selectfont
- \l_projlib_titlepage_subtitle_tl
+ \fontsize{28pt}{42pt}\selectfont
+ \textsc{ \textbf{ \l__projlib_titlepage_title_tl } }\\[1.5em]
+ \fontsize{20pt}{30pt}\selectfont
+ \l__projlib_titlepage_subtitle_tl
};
% \node[text~width=.5\paperwidth, text~height=.4\paperheight, align=flush~left]
% at ($(current~page.south)+(.135\paperwidth,.35\paperheight)$)
@@ -7220,9 +7230,9 @@
% \color{.!50}
% \begin{flushright}
\fontsize{16pt}{24pt}\selectfont
- \textsc{ \l_projlib_titlepage_author_tl }\\[1em]
+ \textsc{ \l__projlib_titlepage_author_tl }\\[1em]
\fontsize{12pt}{18pt}\selectfont
- \l_projlib_titlepage_date_tl
+ \l__projlib_titlepage_date_tl
% \end{flushright}
};
\end{tikzpicture}
@@ -7243,22 +7253,36 @@
{
\color{white}
\sffamily
- \fontsize{24pt}{36pt}\selectfont
- \textsc{ \l_projlib_titlepage_title_tl }\\[1.5em]
- \fontsize{18pt}{27pt}\selectfont
- \l_projlib_titlepage_subtitle_tl
+ \fontsize{28pt}{42pt}\selectfont
+ \textsc{ \l__projlib_titlepage_title_tl }\\[1.5em]
+ \fontsize{20pt}{30pt}\selectfont
+ \l__projlib_titlepage_subtitle_tl
};
- \node[text~width=.5\paperwidth, text~height=.4\paperheight, align=flush~left]
- at ($(current~page.south)+(.135\paperwidth,.35\paperheight)$)
- {
- \color{white}
- \begin{flushright}
+ \bool_if:NTF \l__projlib_titlepage_show_author_info_on_the_right_bool
+ {
+ \node[text~width=.5\paperwidth, text~height=.4\paperheight, align=flush~left]
+ at ($(current~page.south)+(.135\paperwidth,.4\paperheight)$)
+ {
+ \color{white}
+ \begin{flushright}
+ \fontsize{16pt}{24pt}\selectfont
+ \textsc{ \l__projlib_titlepage_author_tl }\\[1em]
+ \fontsize{12pt}{18pt}\selectfont
+ \l__projlib_titlepage_date_tl
+ \end{flushright}
+ };
+ }
+ {
+ \node[text~width=.5\paperwidth, text~height=.4\paperheight, align=flush~left]
+ at ($(current~page.south~west)+(.38\paperwidth,.4\paperheight)$)
+ {
+ \color{white}
\fontsize{16pt}{24pt}\selectfont
- \textsc{ \l_projlib_titlepage_author_tl }\\[1em]
+ \textsc{ \l__projlib_titlepage_author_tl }\\[1em]
\fontsize{12pt}{18pt}\selectfont
- \l_projlib_titlepage_date_tl
- \end{flushright}
- };
+ \l__projlib_titlepage_date_tl
+ };
+ }
\end{tikzpicture}
}
@@ -7277,19 +7301,19 @@
{
\color{titlepage-main}
\sffamily
- \fontsize{24pt}{36pt}\selectfont
- \textsc{ \l_projlib_titlepage_title_tl }\\[1.5em]
- \fontsize{18pt}{27pt}\selectfont
- \l_projlib_titlepage_subtitle_tl
+ \fontsize{28pt}{42pt}\selectfont
+ \textsc{ \l__projlib_titlepage_title_tl }\\[1.5em]
+ \fontsize{20pt}{30pt}\selectfont
+ \l__projlib_titlepage_subtitle_tl
};
\node[text~width=.5\paperwidth, text~height=.4\paperheight, align=flush~center]
at ($(current~page.south)+(0pt,.36\paperheight)$)
{
\color{white}
\fontsize{16pt}{24pt}\selectfont
- \textsc{ \l_projlib_titlepage_author_tl }\\[1em]
+ \textsc{ \l__projlib_titlepage_author_tl }\\[1em]
\fontsize{12pt}{18pt}\selectfont
- \l_projlib_titlepage_date_tl
+ \l__projlib_titlepage_date_tl
};
\end{tikzpicture}
}
@@ -7311,22 +7335,36 @@
{
\color{titlepage-back}
\sffamily
- \fontsize{24pt}{36pt}\selectfont
- \textsc{ \l_projlib_titlepage_title_tl }\\[1.5em]
- \fontsize{18pt}{27pt}\selectfont
- \l_projlib_titlepage_subtitle_tl
+ \fontsize{28pt}{42pt}\selectfont
+ \textsc{ \l__projlib_titlepage_title_tl }\\[1.5em]
+ \fontsize{20pt}{30pt}\selectfont
+ \l__projlib_titlepage_subtitle_tl
};
- \node[text~width=.5\paperwidth, text~height=.4\paperheight, align=flush~left]
- at ($(current~page.south)+(.135\paperwidth,.35\paperheight)$)
- {
- \color{titlepage-back}
- \begin{flushright}
+ \bool_if:NTF \l__projlib_titlepage_show_author_info_on_the_right_bool
+ {
+ \node[text~width=.5\paperwidth, text~height=.4\paperheight, align=flush~left]
+ at ($(current~page.south)+(.135\paperwidth,.4\paperheight)$)
+ {
+ \color{titlepage-back}
+ \begin{flushright}
+ \fontsize{16pt}{24pt}\selectfont
+ \textsc{ \l__projlib_titlepage_author_tl }\\[1em]
+ \fontsize{12pt}{18pt}\selectfont
+ \l__projlib_titlepage_date_tl
+ \end{flushright}
+ };
+ }
+ {
+ \node[text~width=.5\paperwidth, text~height=.4\paperheight, align=flush~left]
+ at ($(current~page.south~west)+(.433\paperwidth,.4\paperheight)$)
+ {
+ \color{titlepage-back}
\fontsize{16pt}{24pt}\selectfont
- \textsc{ \l_projlib_titlepage_author_tl }\\[1em]
+ \textsc{ \l__projlib_titlepage_author_tl }\\[1em]
\fontsize{12pt}{18pt}\selectfont
- \l_projlib_titlepage_date_tl
- \end{flushright}
- };
+ \l__projlib_titlepage_date_tl
+ };
+ }
\end{tikzpicture}
}
%</projlib-titlepage>
diff --git a/macros/latex/contrib/projlib/README.md b/macros/latex/contrib/projlib/README.md
index 207a68fe12..4ff60d3f87 100644
--- a/macros/latex/contrib/projlib/README.md
+++ b/macros/latex/contrib/projlib/README.md
@@ -5,7 +5,7 @@
# The `ProjLib` Toolkit
-> **This bundle is dated 2024/02/24.**
+> **This bundle is dated 2024/03/01.**
> **New documentations are still being written. For now, only the core code is included in TeX Live 2024 and MiKTeX (old documentations have been removed from the distribution).**
@@ -24,18 +24,18 @@ To get started, simply put this line in your preamble:
## The modules
-> Each module corresponds to a separate package, for example, the module `theorem` is `projlib-theorem.sty`.
+> Each module corresponds to a separate package, for example, the module `theorem` is `projlib-theorem.sty`. These modules are managed by the main package `ProjLib.sty`.
The modules include:
1. module `author` - *Enhanced author information block*
- - Offering `\address`, `\curraddr` and `\email`.
- - Write in the AMS fashion (with option `ams-fashion`):
- - Support `\dedicatory`, `\keywords` and `\subjclass`
+ - Offering `\address`, `\curraddr` and `\email`, etc.
+ - Allow writing in the AMS fashion (with option `ams-fashion`):
+ - support `\dedicatory`, `\keywords` and `\subjclass`;
- `\thanks` can be written outside `\author`;
- - The `abstract` environment can be placed before `\maketitle`.
+ - the `abstract` environment can be placed before `\maketitle`.
1. module `datetime` - *Convert numeric date-time string to natural language*
- `\TheDate` and `\Thedate` for converting numeric date-time string to natural language, with multi-language support (if the command names `\TheDate` or `\Thedate` are occupied, then one can switch to the longer version `\ProjLibDate` and `\ProjLibdate`).
- - `\ProjLibToday` and `\ProjLibToday` (with the module `language` enabled, `\today` is redefined into `\ProjLibToday`, and thus supports the arguments like `only-year-month`).
+ - `\ProjLibToday` and `\ProjLibToday` (with the module `language` enabled, `\today` is redefined into `\ProjLibToday`, and thus supports additional arguments like `only-year-month`).
- Multiple input and output format available.
1. module `draft` - *Useful commands during draft stage*
- `\DNF` for marking unfinished part. In addition, a report of all unfinished places shall be printed at the last of your document.
@@ -60,14 +60,28 @@ The modules include:
- Setting up theorem-like environments based on the package `create-theorem`
- `\CreateTheorem`, `\SetTheorem` and more...
- In particular, supporting the modes `name as is` and `name as context` for the referencing names.
- - Supporting the modes `simple name` and `complex name` for the referencing names.
+ - Offering two modes `complex names` (default) and `simple names` (better visual effect but less correct grammar) for the referencing names of those supported theorem-like environments.
- `\SwitchTheoremNumbering` and `\DisableTheoremNumbering` for manipulating the numbering.
- - Preset environments include: `application`, `assertion`, `assumption`, `axiom`, `claim`, `conclusion`, `conjecture`, `construction`, `convention`, `corollary`, `definition`, `definition-proposition`, `definition-theorem`, `example`, `exercise`, `fact`, `hypothesis`, `lemma`, `notation`, `observation`, `postulate`, `problem`, `property`, `proposition`, `question`, `recall`, `remark`, `theorem`, and the corresponding unnumbered version with an asterisk `*` in the name.
+ - Preset environments include: `application`, `assertion`, `assumption`, `axiom`, `claim`, `commentary`, `conclusion`, `conjecture`, `construction`, `convention`, `corollary`, `definition`, `definition-proposition`, `definition-theorem`, `example`, `exercise`, `fact`, `hypothesis`, `lemma`, `motivation`, `notation`, `observation`, `postulate`, `problem`, `property`, `proposition`, `question`, `recall`, `remark`, `theorem`, their plural version (among the most commonly used are `examples`, `facts` and `notations`), and the corresponding unnumbered version with an asterisk `*` in the name.
1. module `titlepage` - *Interface for title page rendering*
- Currently support four title page styles: `default`, `academic`, `simple` and `fancy`.
> Since the module `theorem` uses `cleveref`, it should be loaded after `varioref` and `hyperref` (same for the main package `ProjLib`).
+> Package dependencies:
+> - module `author`: [`regexpatch`](https://ctan.org/pkg/regexpatch), [`scontents`](https://ctan.org/pkg/scontents); it loads the module `language` internally.
+> - module `datetime`: [`relsize`](https://ctan.org/pkg/relsize).
+> - module `draft`: [`pgf`](https://ctan.org/pkg/pgf), [`ulem`](https://ctan.org/pkg/ulem); it loads the module `language` internally.
+> - module `font`: [`anyfontsize`](https://ctan.org/pkg/anyfontsize), [`microtype`](https://ctan.org/pkg/microtype), [`setspaceenhanced`](https://ctan.org/pkg/setspaceenhanced), and a number of font packages depending on the specified option.
+> - module `language`: [`babel`](https://ctan.org/pkg/babel), [`csquotes`](https://ctan.org/pkg/csquotes), [`setspaceenhanced`](https://ctan.org/pkg/setspaceenhanced), [`silence`](https://ctan.org/pkg/silence).
+> - module `logo`: [`pgf`](https://ctan.org/pkg/pgf).
+> - module `math`: [`amsfonts`](https://ctan.org/pkg/amsfonts), [`mathrsfs`](https://ctan.org/pkg/mathrsfs), [`mathtools`](https://ctan.org/pkg/mathtools).
+> - module `paper`: [`xcolor`](https://ctan.org/pkg/xcolor).
+> - module `text`: it loads the module `paper` internally.
+> - module `theorem`: [`amsthm`](https://ctan.org/pkg/amsthm), [`create-theorem`](https://ctan.org/pkg/create-theorem), [`mathtools`](https://ctan.org/pkg/mathtools), [`silence`](https://ctan.org/pkg/silence); it loads the module `language` internally.
+> - module `titlepage`: [`pgf`](https://ctan.org/pkg/pgf); it loads the modules `logo` and `paper` internally.
+
+
<!-- ## Regarding the files and the compilation of documentations -->
### How to get these files
diff --git a/macros/latex/contrib/ufrgscca/README.md b/macros/latex/contrib/ufrgscca/README.md
index 558ac6e182..dc63bf969a 100644
--- a/macros/latex/contrib/ufrgscca/README.md
+++ b/macros/latex/contrib/ufrgscca/README.md
@@ -107,11 +107,16 @@ The Current Maintainer of this work is Alceu Frigeri
## Changelog
-* Version 2.5 (this)
- - Added PDF bookmarcks to each and every Form/Report page.
+* Version 2.6 (this)
+ - Added other's case (student fate) for record keeping.
+ - Report adjustments (other's case).
+
+* Version 2.5
+ - Added PDF bookmarks to each and every Form/Report page.
- Added \studentReviewerSetCase (see manual)
+ - Some reports fine tuning.
-* Version 2.4/2.4a (this)
+* Version 2.4/2.4a
- a few typos (including [l3kernel prop check](https://github.com/latex3/latex3/issues/1460))
- extended \studentfate possible values (see documentation).
- \makeforms code cleanup. switching to \prop_get:NnNTF instead of \prop_item:Nn
diff --git a/macros/latex/contrib/ufrgscca/doc/ufrgscca.pdf b/macros/latex/contrib/ufrgscca/doc/ufrgscca.pdf
index 5ae4795d7f..b5c3f0418b 100644
--- a/macros/latex/contrib/ufrgscca/doc/ufrgscca.pdf
+++ b/macros/latex/contrib/ufrgscca/doc/ufrgscca.pdf
Binary files differ
diff --git a/macros/latex/contrib/ufrgscca/doc/ufrgscca.tex b/macros/latex/contrib/ufrgscca/doc/ufrgscca.tex
index 0d5cd7d7ad..3ce27a7913 100644
--- a/macros/latex/contrib/ufrgscca/doc/ufrgscca.tex
+++ b/macros/latex/contrib/ufrgscca/doc/ufrgscca.tex
@@ -15,7 +15,7 @@
%%
%% The Current Maintainer of this work is Alceu Frigeri
%%
-%% This is version {2.5} {2024/02/25}
+%% This is version {2.6} {2024/02/29}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -541,6 +541,7 @@ All data is stored in two main \tsobj[pack]{starray} defined as follow:
flag-exam ,
flag-ff ,
flag-dismiss , %%% IF it was the 1st semester.
+ flag-other , %%% "other list", placeholder for 'none of the above' lists.
flag-newpage , %% if it should go in a new page (board)
flag-distinctboard , %% if advisor isn't in the board
flag-approved ,
@@ -624,11 +625,12 @@ Possible values for \tsobj[meta]{coord-field} are: \tsobj[option]{name,title,art
\subsection{Core Auxiliary Commands}
-\begin{codedescribe}[code,new=2023/11/18]{\studentselect}
+\begin{codedescribe}[code,new=2023/11/18]{\studentselect,\studentReviewerSelect}
\begin{codesyntax}%
\tsmacro{\studentselect}{student-hash}
+ \tsmacro{\studentReviewerSelect}{reviewer-hash}
\end{codesyntax}
-Select a student based on it's hash.
+Selects a student or reviewer based on theirs hash.
\end{codedescribe}
@@ -1052,12 +1054,12 @@ Those commands are only of use when using \tsobj[pkg]{ufrgscca-coord}. \tsmacro{
\end{codedescribe}
-\begin{codedescribe}[code,new=2023/11/18,update=2023/12/02,update=2024/01/15,update=2024/02/22]{\studentCase,\studentAdvCase,\studentCoadvCase,\studentDismissCase,\studentNewPageCase,\studentDistinctBoardCase,\studentReviewerCase,\studentReviewerSetCase}
+\begin{codedescribe}[code,new=2023/11/18,update=2023/12/02,update=2024/01/15,update=2024/02/22,update=2024/02/27]{\studentCase,\studentAdvCase,\studentCoadvCase,\studentDismissOtherCase,\studentNewPageCase,\studentDistinctBoardCase,\studentReviewerCase,\studentReviewerSetCase}
\begin{codesyntax}%
\tsmacro{\studentCase}{if-A-B-C,if-D,if-Exam-C,if-Exam-D,if-FF}
\tsmacro{\studentAdvCase}{if-more-than-one,if-not}
\tsmacro{\studentCoadvCase}{if-defined,if-not}
- \tsmacro{\studentDismissCase}{if-dismiss,if-not}
+ \tsmacro{\studentDismissOtherCase}{if-dismiss-other,if-not}
\tsmacro{\studentNewPageCase}{if-newpage,if-not}
\tsmacro{\studentDistinctBoardCase}{if-distinct,if-not}
\tsmacro{\studentReviewerCase}{rev-num,if-marked,if-not}
@@ -1177,11 +1179,11 @@ These are a set of auxiliary conditionals, for instance, \tsobj{\StudentCase} wi
%%%%
\paragraph{Student Specific Commands}\label{student-specific-commands}
-\begin{codedescribe}[code,update=2023/11/18,update=2024/02/15]{\studentfate}
+\begin{codedescribe}[code,update=2023/11/18,update=2024/02/15,update=2024/02/25]{\studentfate}
\begin{codesyntax}%
\tsmacro{\studentfate}[fate]{}
\end{codesyntax}
-This assigns the \tsobj[meta]{fate} of a student, for those cases that one cannot rely on the 'calculated one' (from examiners individual grades). \tsobj[meta]{fate} can be either \emph{exam} (if the student is in exam, but didn't got a grade yet) \emph{C} or \emph{D} (in case a student in exam got graded), \emph{FF} for those that haven't finished the work or \emph{dismiss} for those that, for whatever reason, got dismissed. The default is 'do nothing' (no \tsobj[meta]{fate} assigned)
+This assigns the \tsobj[meta]{fate} of a student, for those cases that one cannot rely on the 'calculated one' (from examiners individual grades). \tsobj[meta]{fate} can be either \emph{exam} (if the student is in exam, but didn't got a grade yet) \emph{C} or \emph{D} (in case a student in exam got graded), \emph{FF} for those that haven't finished the work, \emph{dismiss} for those that, for whatever reason, got dismissed and (finally, 2024/02/25) \emph{other} for all other cases (mainly record keeping). The default is 'do nothing' (no \tsobj[meta]{fate} assigned)
\end{codedescribe}
\begin{tsremark}
(2024/02/15) In case some other, odd, value is assigned, this command will record as if the student is in 'exam', with the given grade \tsobj[oarg]{fate} marked in bold red.
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-abnt.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-abnt.sty
index 9618258cc0..6e008fe159 100644
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-abnt.sty
+++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-abnt.sty
@@ -12,7 +12,7 @@
%%
%% The Current Maintainer of this work is Alceu Frigeri
%%
-%% This is version {2.5} {2024/02/25}
+%% This is version {2.6} {2024/02/29}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -27,8 +27,8 @@
\ProvidesExplPackage
{ufrgscca-abnt}
- {2024/02/25}
- {2.5}
+ {2024/02/29}
+ {2.6}
{UFRGS/CCA ABNT layout}
@@ -42,8 +42,8 @@
{
name .code:n = {ufrgscca-abnt} ,
prefix .code:n = {ufrgscca} ,
- date .code:n = {2024/02/25},
- version .code:n = {2.5} ,
+ date .code:n = {2024/02/29},
+ version .code:n = {2.6} ,
description .code:n = {UFRGS/CCA~ abnt~layout}
}
\cs_if_exist:NF \PkgInfo
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-base-en.def b/macros/latex/contrib/ufrgscca/latex/ufrgscca-base-en.def
index 8bb7ff8ce7..3af375f915 100644
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-base-en.def
+++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-base-en.def
@@ -12,7 +12,7 @@
%%
%% The Current Maintainer of this work is Alceu Frigeri
%%
-%% This is version {2.5} {2024/02/25}
+%% This is version {2.6} {2024/02/29}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-base-ptBR.def b/macros/latex/contrib/ufrgscca/latex/ufrgscca-base-ptBR.def
index 83bb0e06dc..7aba05c370 100644
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-base-ptBR.def
+++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-base-ptBR.def
@@ -12,7 +12,7 @@
%%
%% The Current Maintainer of this work is Alceu Frigeri
%%
-%% This is version {2.5} {2024/02/25}
+%% This is version {2.6} {2024/02/29}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-coord.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-coord.sty
index db572b8c15..e03a338b2f 100644
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-coord.sty
+++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-coord.sty
@@ -12,7 +12,7 @@
%%
%% The Current Maintainer of this work is Alceu Frigeri
%%
-%% This is version {2.5} {2024/02/25}
+%% This is version {2.6} {2024/02/29}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -27,8 +27,8 @@
\ProvidesExplPackage
{ufrgscca-coord}
- {2024/02/25}
- {2.5}
+ {2024/02/29}
+ {2.6}
{UFRGS/CCA coord commands}
@@ -42,8 +42,8 @@
{
name .code:n = {ufrgscca-coord} ,
prefix .code:n = {ufrgscca} ,
- date .code:n = {2024/02/25},
- version .code:n = {2.5} ,
+ date .code:n = {2024/02/29},
+ version .code:n = {2.6} ,
description .code:n = {UFRGS/CCA~ coordination~ report~ commands}
}
\cs_if_exist:NF \PkgInfo
@@ -274,6 +274,14 @@
flag-graded = \c_true_bool ,
}
}
+ {other}
+ {
+ \starray_gset_from_keyval:nn {student}
+ {
+ flag-other = \c_true_bool ,
+ flag-graded = \c_true_bool ,
+ }
+ }
}
{ %% in case of none of above...
\starray_gset_from_keyval:nn {student}
@@ -292,6 +300,7 @@
\tl_new:N \l__ufrgscca_tmpd_tl
\tl_new:N \l__ufrgscca_tmpe_tl
\prg_generate_conditional_variant:Nnn \str_case:nn {en}{T,F,TF}
+
\cs_new_protected:Npn \__ufrgscca_studentgrade:
{
\starray_term_syntax:n {student}
@@ -314,44 +323,52 @@
{
\tl_set:Ne \l__ufrgscca_tmpd_tl
{\fpeval{round(((\l__ufrgscca_tmpb_tl + \l__ufrgscca_tmpc_tl)/2),2,1)}}
+ \__ufrgscca_set_grade:n \l__ufrgscca_tmpd_tl
}
{2}
{
\tl_set:Ne \l__ufrgscca_tmpd_tl
{\fpeval{round(((\l__ufrgscca_tmpa_tl + \l__ufrgscca_tmpb_tl + \l__ufrgscca_tmpc_tl)/3),2,1)}}
+ \__ufrgscca_set_grade:n \l__ufrgscca_tmpd_tl
}
}
- { \tl_set:Nn \l__ufrgscca_tmpd_tl {7.99}
- \starray_gset_prop:nne {student}{reason}{\l__ufrgscca_tmpa_tl-\l__ufrgscca_tmpb_tl-\l__ufrgscca_tmpc_tl-\l__ufrgscca_tmpe_tl}
- }
-
- \starray_gset_prop:nne {student}{gradeavrg}{\l__ufrgscca_tmpd_tl}
- \fp_compare:nNnTF {\l__ufrgscca_tmpd_tl} < {\UseConst{NgradeC}}
- { % D
- \starray_gset_prop:nnn {student}{grade}{D}
- }
- {
- \fp_compare:nNnTF {\l__ufrgscca_tmpd_tl} < {\UseConst{NgradeB}}
- { % C
- \starray_gset_prop:nnn {student}{grade}{C}
- \starray_gset_prop:nnn {student}{flag-approved}{\c_true_bool}
- }
- {
- \fp_compare:nNnTF {\l__ufrgscca_tmpd_tl} < {\UseConst{NgradeA}}
- { % B
- \starray_gset_prop:nnn {student}{grade}{B}
- \starray_gset_prop:nnn {student}{flag-approved}{\c_true_bool}
- }
- { % A
- \starray_gset_prop:nnn {student}{grade}{A}
- \starray_gset_prop:nnn {student}{flag-approved}{\c_true_bool}
- }
- }
+ {
+ \starray_gset_prop:nne {student}{gradeavrg}{0}
+ \starray_gset_prop:nnn {student}{grade}{\color{red}D*}
}
}
\starray_gset_prop:nnn {student}{flag-graded}{\c_true_bool}
}
+
+\cs_new_protected:Npn \__ufrgscca_set_grade:n #1
+ {
+ \starray_gset_prop:nne {student}{gradeavrg}{#1}
+ \fp_compare:nNnTF {#1} < {\UseConst{NgradeC}}
+ { % D
+ \starray_gset_prop:nnn {student}{grade}{D}
+ }
+ {
+ \fp_compare:nNnTF {#1} < {\UseConst{NgradeB}}
+ { % C
+ \starray_gset_prop:nnn {student}{grade}{C}
+ \starray_gset_prop:nnn {student}{flag-approved}{\c_true_bool}
+ }
+ {
+ \fp_compare:nNnTF {#1} < {\UseConst{NgradeA}}
+ { % B
+ \starray_gset_prop:nnn {student}{grade}{B}
+ \starray_gset_prop:nnn {student}{flag-approved}{\c_true_bool}
+ }
+ { % A
+ \starray_gset_prop:nnn {student}{grade}{A}
+ \starray_gset_prop:nnn {student}{flag-approved}{\c_true_bool}
+ }
+ }
+ }
+ }
+
+
\cs_new_protected:Npn \__ufrgscca_set_timeslot:nnnnn #1#2#3#4#5
{
\starray_gset_from_keyval:nn {student}
@@ -448,63 +465,6 @@
-\NewDocumentCommand{\studentCase}{mmmmm}{
- \starray_term_syntax:n{student}
- \bool_case:nF
- {
- {\starray_parsed_get_prop:n{flag-ff}}
- {#5}
- {\starray_parsed_get_prop:n{flag-exam}}
- {
- \bool_if:nTF{\starray_parsed_get_prop:n{flag-approved}}
- {#3}
- {#4}
- }
- }
- {
- \bool_if:nTF{\starray_parsed_get_prop:n{flag-approved}}
- {#1}
- {#2}
- }
-}
-
-\NewDocumentCommand{\studentReviewerCase}{mmm}{
- \starray_term_syntax:n{student.reviewer[#1]}
- \bool_if:nTF {\starray_parsed_get_prop:n{flag-examreview}}
- {#2}
- {#3}
-}
-
-
-\NewDocumentCommand{\studentDismissCase}{mm}{
- \starray_term_syntax:n{student}
- \bool_if:nTF {\starray_parsed_get_prop:n{flag-dismiss}}
- {#1}
- {#2}
-}
-
-\NewDocumentCommand{\studentremark}{m}{
- \starray_gset_prop:nnn {student}{remarks}{#1}
-}
-
-
-
-\NewDocumentCommand{\studentNewPageCase}{mm}
- {
- \starray_term_syntax:n{student}
- \bool_if:nTF {\starray_parsed_get_prop:n{flag-newpage}}
- {#1}
- {#2}
- }
-
-\NewDocumentCommand{\studentnewpage}{O{}}{
- \tl_if_blank:nTF {#1}
- { \starray_gset_prop:nnn {student}{flag-newpage}{\c_true_bool} }
- { \starray_gset_prop:nnn {student[#1]}{flag-newpage}{\c_true_bool} }
-}%
-
-
-
\NewDocumentCommand{\boardtitle}{m}{%%
\SetTerms{%
board.title = {#1} ,
@@ -624,6 +584,7 @@
\seq_new:c {l__ufrgscca_#1_list_ff_seq}
\seq_new:c {l__ufrgscca_#1_list_dismiss_seq}
\seq_new:c {l__ufrgscca_#1_list_graded_seq}
+ \seq_new:c {l__ufrgscca_#1_list_other_seq}
\bool_new:c {l__ufrgscca_#1_classified_bool}
}
@@ -650,6 +611,7 @@
\seq_gclear_new:c {l__ufrgscca_#1_list_seq}
\seq_gclear_new:c {l__ufrgscca_#1_list_ff_seq}
\seq_gclear_new:c {l__ufrgscca_#1_list_dismiss_seq}
+ \seq_gclear_new:c {l__ufrgscca_#1_list_other_seq}
\seq_gclear_new:c {l__ufrgscca_#1_list_graded_seq}
\bool_if_exist:cF {l__ufrgscca_#1_classified_bool}
{ \bool_new:c {l__ufrgscca_#1_classified_bool} }
@@ -671,7 +633,10 @@
\starray_set_iter_from_hash:nn {student}{#1}
\starray_term_syntax:n {student}
\bool_if:nF {\starray_parsed_get_prop:n {flag-graded}}
- { \__ufrgscca_studentgrade: }
+ {
+ \emptytermifnone[3]{student.reviewer}[\starray_gset_prop:nnn {student}{flag-null}{\c_true_bool}]
+ \__ufrgscca_studentgrade:
+ }
}
@@ -683,6 +648,7 @@
{
{\starray_parsed_get_prop:n {flag-ff}}{\seq_gput_right:cn {l__ufrgscca_#1_list_ff_seq}{#2}}
{\starray_parsed_get_prop:n {flag-dismiss}}{\seq_gput_right:cn {l__ufrgscca_#1_list_dismiss_seq}{#2}}
+ {\starray_parsed_get_prop:n {flag-other}}{\seq_gput_right:cn {l__ufrgscca_#1_list_other_seq}{#2}}
}
{\seq_gput_right:cn {l__ufrgscca_#1_list_graded_seq}{#2}}
}
@@ -697,6 +663,7 @@
\seq_gset_eq:Nc \l__ufrgscca_baselist_seq {l__ufrgscca_#2_list_seq}
\seq_gset_eq:Nc \l__ufrgscca_baselist_ff_seq {l__ufrgscca_#2_list_ff_seq}
\seq_gset_eq:Nc \l__ufrgscca_baselist_dismiss_seq {l__ufrgscca_#2_list_dismiss_seq}
+ \seq_gset_eq:Nc \l__ufrgscca_baselist_other_seq {l__ufrgscca_#2_list_other_seq}
\seq_gset_eq:Nc \l__ufrgscca_baselist_graded_seq {l__ufrgscca_#2_list_graded_seq}
\bool_if:NT \l__ufrgscca_attendance_bool
@@ -728,13 +695,13 @@
}
\bool_if:NT \l__ufrgscca_referralI_bool
{
- \studentDismissCase
+ \studentDismissOtherCase
{}
{ \MakeForm{referral-I} }
}
\bool_if:NT \l__ufrgscca_revformsI_bool
{
- \SetReviewer{2}
+ \studentReviewerSelect{2}
\studentReviewerSetCase{2}
{
\eDataSet{student.reviewer}
@@ -744,7 +711,7 @@
\tl_set:Nn \ReviewerBookMarkTL {~-~2}
}
\MakeForm{examinersform-I}
- \SetReviewer{3}
+ \studentReviewerSelect{3}
\studentReviewerSetCase{3}
{
\eDataSet{student.reviewer}
@@ -758,13 +725,13 @@
}
\bool_if:NT \l__ufrgscca_referralII_bool
{
- \studentDismissCase
+ \studentDismissOtherCase
{}
{ \MakeForm{referral-II} }
}
\bool_if:NT \l__ufrgscca_revformsII_bool
{
- \SetReviewer{1}
+ \studentReviewerSelect{1}
\studentReviewerSetCase{1}
{
\eDataSet{student.reviewer}
@@ -775,7 +742,7 @@
}
\MakeForm{examinersform-II}
\MakeForm{correctionsform-II}
- \SetReviewer{2}
+ \studentReviewerSelect{2}
\studentReviewerSetCase{2}
{
\eDataSet{student.reviewer}
@@ -786,7 +753,7 @@
}
\MakeForm{examinersform-II}
\MakeForm{correctionsform-II}
- \SetReviewer{3}
+ \studentReviewerSelect{3}
\studentReviewerSetCase{3}
{
\eDataSet{student.reviewer}
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-core.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-core.sty
index d07c1e4670..7a7f360279 100644
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-core.sty
+++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-core.sty
@@ -12,7 +12,7 @@
%%
%% The Current Maintainer of this work is Alceu Frigeri
%%
-%% This is version {2.5} {2024/02/25}
+%% This is version {2.6} {2024/02/29}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -27,8 +27,8 @@
\ProvidesExplPackage
{ufrgscca-core}
- {2024/02/25}
- {2.5}
+ {2024/02/29}
+ {2.6}
{UFRGS/CCA core commands}
@@ -42,8 +42,8 @@
{
name .code:n = {ufrgscca-core} ,
prefix .code:n = {ufrgscca} ,
- date .code:n = {2024/02/25},
- version .code:n = {2.5} ,
+ date .code:n = {2024/02/29},
+ version .code:n = {2.6} ,
description .code:n = {UFRGS/CCA~core~commands/data}
}
\cs_if_exist:NF \PkgInfo
@@ -129,6 +129,7 @@
flag-exam = \c_false_bool ,
flag-ff = \c_false_bool ,
flag-dismiss = \c_false_bool , %%% IF it was the 1st semester.
+ flag-other = \c_false_bool , %%% "other list", placeholder for 'none of the above' lists.
flag-newpage = \c_false_bool , %% if it should go in a new page (board)
flag-distinctboard = \c_false_bool , %% if advisor isn't in the board
flag-approved = \c_false_bool ,
@@ -394,7 +395,8 @@
\NewDocumentCommand{\DataFields}{mm}{
\starray_get_prop:nn{#1}{#2}
}
-\NewDocumentCommand{\SetReviewer}{m}{
+
+\NewDocumentCommand{\studentReviewerSelect}{m}{
\starray_set_iter:nn {student.reviewer}{#1}
}
%
@@ -413,6 +415,10 @@
{#2}
}
+\NewDocumentCommand{\studentremark}{m}{
+ \starray_gset_prop:nnn {student}{remarks}{#1}
+}
+
\NewDocumentCommand{\distinctboard}{}{
\starray_gset_prop:nnn {student}{flag-distinctboard}{\c_true_bool}
@@ -433,6 +439,58 @@
{#3}
}
+
+
+\NewDocumentCommand{\studentCase}{mmmmm}{
+ \starray_term_syntax:n{student}
+ \bool_case:nF
+ {
+ {\starray_parsed_get_prop:n{flag-ff}}
+ {#5}
+ {\starray_parsed_get_prop:n{flag-exam}}
+ {
+ \bool_if:nTF{\starray_parsed_get_prop:n{flag-approved}}
+ {#3}
+ {#4}
+ }
+ }
+ {
+ \bool_if:nTF{\starray_parsed_get_prop:n{flag-approved}}
+ {#1}
+ {#2}
+ }
+}
+
+
+\NewDocumentCommand{\studentDismissOtherCase}{mm}{
+ \starray_term_syntax:n{student}
+ \bool_if:nTF {\starray_parsed_get_prop:n{flag-dismiss} || \starray_parsed_get_prop:n{flag-other}}
+ {#1}
+ {#2}
+}
+
+\NewDocumentCommand{\studentReviewerCase}{mmm}{
+ \starray_term_syntax:n{student.reviewer[#1]}
+ \bool_if:nTF {\starray_parsed_get_prop:n{flag-examreview}}
+ {#2}
+ {#3}
+}
+
+
+\NewDocumentCommand{\studentnewpage}{O{}}{
+ \tl_if_blank:nTF {#1}
+ { \starray_gset_prop:nnn {student}{flag-newpage}{\c_true_bool} }
+ { \starray_gset_prop:nnn {student[#1]}{flag-newpage}{\c_true_bool} }
+}%
+
+\NewDocumentCommand{\studentNewPageCase}{mm}
+ {
+ \starray_term_syntax:n{student}
+ \bool_if:nTF {\starray_parsed_get_prop:n{flag-newpage}}
+ {#1}
+ {#2}
+ }
+
\NewDocumentCommand{\studentiterate}{m}{
\starray_iterate_over:nn{student}{#1}
}
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover-ptBR.tex b/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover-ptBR.tex
index e661e6184d..e73a06aef2 100644
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover-ptBR.tex
+++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover-ptBR.tex
@@ -12,7 +12,7 @@
%%
%% The Current Maintainer of this work is Alceu Frigeri
%%
-%% This is version {2.5} {2024/02/25}
+%% This is version {2.6} {2024/02/29}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover.sty
index 977fa2917f..0231265c6e 100644
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover.sty
+++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover.sty
@@ -12,7 +12,7 @@
%%
%% The Current Maintainer of this work is Alceu Frigeri
%%
-%% This is version {2.5} {2024/02/25}
+%% This is version {2.6} {2024/02/29}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -27,8 +27,8 @@
\ProvidesExplPackage
{ufrgscca-cover}
- {2024/02/25}
- {2.5}
+ {2024/02/29}
+ {2.6}
{UFRGS/CCA cover commands}
@@ -42,8 +42,8 @@
{
name .code:n = {ufrgscca-cover} ,
prefix .code:n = {ufrgscca} ,
- date .code:n = {2024/02/25},
- version .code:n = {2.5} ,
+ date .code:n = {2024/02/29},
+ version .code:n = {2.6} ,
description .code:n = {UFRGS/CCA~ cover~pages}
}
\cs_if_exist:NF \PkgInfo
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr.sty
index 752ecfb740..afcdb1aabe 100644
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr.sty
+++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr.sty
@@ -12,7 +12,7 @@
%%
%% The Current Maintainer of this work is Alceu Frigeri
%%
-%% This is version {2.5} {2024/02/25}
+%% This is version {2.6} {2024/02/29}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -27,8 +27,8 @@
\ProvidesExplPackage
{ufrgscca-curr}
- {2024/02/25}
- {2.5}
+ {2024/02/29}
+ {2.6}
{UFRGS/CCA curricula commands}
%%%%%%%
@@ -41,8 +41,8 @@
{
name .code:n = {ufrgscca-curr} ,
prefix .code:n = {ufrgscca} ,
- date .code:n = {2024/02/25},
- version .code:n = {2.5} ,
+ date .code:n = {2024/02/29},
+ version .code:n = {2.6} ,
description .code:n = {UFRGS/CCA~ curricula~ commands}
}
\cs_if_exist:NF \PkgInfo
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.sty
index a20c73dd50..7d7916ba0f 100644
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.sty
+++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.sty
@@ -12,7 +12,7 @@
%%
%% The Current Maintainer of this work is Alceu Frigeri
%%
-%% This is version {2.5} {2024/02/25}
+%% This is version {2.6} {2024/02/29}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -27,8 +27,8 @@
\ProvidesExplPackage
{ufrgscca-forms}
- {2024/02/25}
- {2.5}
+ {2024/02/29}
+ {2.6}
{UFRGS/CCA forms commands}
@@ -42,8 +42,8 @@
{
name .code:n = {ufrgscca-forms} ,
prefix .code:n = {ufrgscca} ,
- date .code:n = {2024/02/25},
- version .code:n = {2.5} ,
+ date .code:n = {2024/02/29},
+ version .code:n = {2.6} ,
description .code:n = {UFRGS/CCA~ forms~commands}
}
\cs_if_exist:NF \PkgInfo
@@ -114,12 +114,12 @@
receipts-II.code = {
\bool_if:nTF \l__ufrgscca_emptyforms_bool
{
- \SetReviewer{1}
+ \studentReviewerSelect{1}
\tl_set:Nn \ReviewerBookMarkTL {}
\MakeForm{receipts-II}
}
{
- \SetReviewer{1}
+ \studentReviewerSelect{1}
\studentReviewerSetCase{1}
{
\eDataSet{student.reviewer}
@@ -135,12 +135,12 @@
examinersforms-I.code = {
\bool_if:nTF \l__ufrgscca_emptyforms_bool
{
- \SetReviewer{1}
+ \studentReviewerSelect{1}
\tl_set:Nn \ReviewerBookMarkTL {}
\MakeForm{examinersform-I}
}
{
- \SetReviewer{2}
+ \studentReviewerSelect{2}
\studentReviewerSetCase{2}
{
\eDataSet{student.reviewer}
@@ -150,7 +150,7 @@
\tl_set:Nn \ReviewerBookMarkTL {~-~2}
}
\MakeForm{examinersform-I}
- \SetReviewer{3}
+ \studentReviewerSelect{3}
\studentReviewerSetCase{3}
{
\eDataSet{student.reviewer}
@@ -166,14 +166,14 @@
examinersforms-II.code = {
\bool_if:nTF \l__ufrgscca_emptyforms_bool
{
- \SetReviewer{1}
+ \studentReviewerSelect{1}
\tl_set:Nn \ReviewerBookMarkTL {}
\MakeForm{receipts-II}
\MakeForm{examinersform-II}
\MakeForm{correctionsform-II}
}
{
- \SetReviewer{1}
+ \studentReviewerSelect{1}
\studentReviewerSetCase{1}
{
\eDataSet{student.reviewer}
@@ -185,7 +185,7 @@
\MakeForm{receipts-II}
\MakeForm{examinersform-II}
\MakeForm{correctionsform-II}
- \SetReviewer{2}
+ \studentReviewerSelect{2}
\studentReviewerSetCase{2}
{
\eDataSet{student.reviewer}
@@ -197,7 +197,7 @@
\MakeForm{receipts-II}
\MakeForm{examinersform-II}
\MakeForm{correctionsform-II}
- \SetReviewer{3}
+ \studentReviewerSelect{3}
\studentReviewerSetCase{3}
{
\eDataSet{student.reviewer}
@@ -292,7 +292,9 @@
%
\prop_get:NnNT \l__ufrgscca_forms_prop {#1.opening} \l_tmpa_tl
{
- \vfill
+ \prop_get:NnNTF \l__ufrgscca_forms_prop {#1.preopening} \l_tmpb_tl
+ {\l_tmpb_tl}
+ {\vfill}
\l_tmpa_tl
}
\prop_get:NnNT \l__ufrgscca_forms_prop {#1.body} \l_tmpa_tl
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.tex b/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.tex
index 22a74c03cc..8e225d5edf 100644
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.tex
+++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.tex
@@ -12,7 +12,7 @@
%%
%% The Current Maintainer of this work is Alceu Frigeri
%%
-%% This is version {2.5} {2024/02/25}
+%% This is version {2.6} {2024/02/29}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -105,7 +105,7 @@ Data de Início: {\bf \DataFields{student.internship}{start}}\hfill Previsão de
\begin{itemize}[tcc,nosep]
\item Grupo I - Aspectos Profissionais
\begin{enumerate}[tcc,nosep]
- \item \textbf{Qualidade do Trabalho}:\emptybox\\ {\footnotesize considerar a qualidade do trabalho tendo em vista o que seria desejável}
+ \item \textbf{Qualidade do Trabalho}:\emptybox\\ {\footnotesize considerar a qualidade do trabalho tendo em vista o que seria desejável.}
\item \textbf{Engenhosidade}:\emptybox\\ {\footnotesize capacidade de sugerir, projetar ou executar modificações ou inovações.}
\item \textbf{Conhecimentos}:\emptybox\\ {\footnotesize conhecimento demonstrado no desenvolvimento das atividades programadas.}
\item \textbf{Cumprimentos das Tarefas}:\emptybox\\ {\footnotesize considerar o volume de atividades cumpridas dentro de um padrão razoável.}
@@ -113,10 +113,10 @@ Data de Início: {\bf \DataFields{student.internship}{start}}\hfill Previsão de
\end{enumerate}
\item Grupo II - Aspectos Humanos
\begin{enumerate}[tcc,nosep]
- \item \textbf{Assiduidade}:\emptybox\\ {\footnotesize cumprimento do horário do estágio e ausência de falhas}
+ \item \textbf{Assiduidade}:\emptybox\\ {\footnotesize cumprimento do horário do estágio e ausência de falhas.}
\item \textbf{Disciplina}:\emptybox\\ {\footnotesize observância das normas e regulamentos internos da empresa.}
\item \textbf{Sociabilidade}:\emptybox\\ {\footnotesize facilidade de se integrar com colegas e ambiente de trabalho.}
-\item \textbf{Cooperação}:\emptybox\\ {\footnotesize disposição para cooperar com colegas e para atender a atividades..}
+\item \textbf{Cooperação}:\emptybox\\ {\footnotesize disposição para cooperar com colegas e para atender a atividades.}
\item \textbf{Senso de Responsabilidade}:\emptybox\\ {\footnotesize zelo pelo material, equipamentos e bens da empresa.}
\end{enumerate}
\end{itemize}
@@ -459,7 +459,7 @@ Nome do(a) Aluno(a) --- Email\\
\begin{enumerate}[tcc,nosep]
\item \emptybox\ \textbf{Enquadramento do Tema}. {\footnotesize(peso:2)}\\ {\footnotesize Quão bem o mesmo se enquadra no perfil de um formando em Eng. de Controle e Automação.}
\item \emptybox\ \textbf{Revisão Bibliográfica}. {\footnotesize(peso:2)}\\ {\footnotesize A revisão apresentada é adequada, suficiente, para o tema do trabalho?}
- \item \emptybox\ \textbf{Abordagem/Plano de Trabalho Proposto}. {\footnotesize(peso:2)}\\ {\footnotesize Considerar se a abordagem, plano de trabalho proposto, é adequada e factivel.}
+ \item \emptybox\ \textbf{Abordagem/Plano de Trabalho Proposto}. {\footnotesize(peso:2)}\\ {\footnotesize Considerar se a abordagem, plano de trabalho proposto, é adequada e factível.}
\item \emptybox\ \textbf{Redação}. {\footnotesize(peso:1)}\\ {\footnotesize Considerar a qualidade do trabalho escrito apresentado.}
\item { O Trabalho Submetido}
\begin{enumerate}[tcc,nosep]
@@ -470,7 +470,7 @@ Nome do(a) Aluno(a) --- Email\\
\end{enumerate}
\item[$\Box$ b)] Necessita ser revisto/re-escrito,\footnotemark[3] e:
\begin{enumerate}
- \item[$\Box$ b.1)] basta a revisão final do texto pelo orientador,
+ \item[$\Box$ b.1)] basta a revisão final do texto pelo orientador.
\item[$\Box$ b.2)] revisarei o trabalho depois de corrigido.
\end{enumerate}
\end{enumerate}
@@ -513,10 +513,10 @@ Outras considerações, parecer (se necessário): \BlankLines{5}
%%%
\SetForm{rectifyapproval-I}{closing}{
- \SetReviewer{2}
+ \studentReviewerSelect{2}
\ApprovalSignature{\DataFields{student.reviewer}{name}}\vfill
- \SetReviewer{3}
+ \studentReviewerSelect{3}
\ApprovalSignature{\DataFields{student.reviewer}{name}}\vfill
}
@@ -800,7 +800,7 @@ A nota (variando de zero a dez) atribuída por cada membro da banca examinadora
\item[$\Box$ a)] Está adequado,
\begin{enumerate}
\item[$\Box$ a.1)] dispensando correções do texto.
- \item[$\Box$ a.2)] sendo necessário correções, conforme a seguir (e anotações anexas).
+ \item[$\Box$ a.2)] sendo necessário correções, conforme a seguir (e anotações anexas):
\begin{tabular}{llp{2em}ll}
$\Box$ & Ortográfica & & $\Box$ & Regras de Escrita \\
$\Box$ & Resumo & & $\Box$ & Abstract \\
@@ -855,15 +855,15 @@ A nota (variando de zero a dez) atribuída por cada membro da banca examinadora
\SetForm{rectifyapproval-II}{closing}{
\studentDistinctBoardCase
{
- \SetReviewer{1}
+ \studentReviewerSelect{1}
\ApprovalSignature{\DataFields{student.reviewer}{name}}\vfill
}
{}
- \SetReviewer{2}
+ \studentReviewerSelect{2}
\ApprovalSignature{\DataFields{student.reviewer}{name}}\vfill
- \SetReviewer{3}
+ \studentReviewerSelect{3}
\ApprovalSignature{\DataFields{student.reviewer}{name}}\vfill
@@ -1134,13 +1134,18 @@ A nota (variando de zero a dez) atribuída por cada membro da banca examinadora
\__ufrgscca_miss_case:nnnnn
{7} {report.tabMult.#1}
{\l__ufrgscca_baselist_ff_seq}
- {Desistentes~ com~ conceito~ (2o ~ semestre)}
+ {Desistentes~ com~ conceito~FF~ (2o ~ semestre)}
{red}
\__ufrgscca_miss_case:nnnnn
{7} {report.tabMult.#1}
{\l__ufrgscca_baselist_dismiss_seq}
{Desistentes~ sem~ conceito~ (1o ~ semestre)}
{magenta}
+ \__ufrgscca_miss_case:nnnnn
+ {7} {report.tabMult.#1}
+ {\l__ufrgscca_baselist_other_seq}
+ {Outros~ (não~ matriculados)}
+ {teal}
\end{longtable}
}
@@ -1172,7 +1177,7 @@ A nota (variando de zero a dez) atribuída por cada membro da banca examinadora
\SetForm{report-I}{heading}{\vspace*{-5ex}\UseTerm{title.tccI}~ - ~\textbf{\UseTerm{semester}}\exp_args:Nee \pdfbookmark{\UseTerm{book.report-I}}{\UseTerm{book.report-I}}}
\ExplSyntaxOff
%\SetForm{report-I}{title}{}
-\SetForm{report-I}{opening}{}
+\SetForm{report-I}{preopening}{}
%%%
\SetForm{report-I}{opening}{ %
@@ -1182,7 +1187,7 @@ A nota (variando de zero a dez) atribuída por cada membro da banca examinadora
}
%%%
-\SetForm{report-I}{closing}{}
+%\SetForm{report-I}{closing}{}
%%%%%%%%%%%%%%%
@@ -1195,9 +1200,9 @@ A nota (variando de zero a dez) atribuída por cada membro da banca examinadora
%\SetForm{report-II}{heading}{\vspace*{-5ex}\UseTerm{title.tccII}~ - ~\textbf{\UseTerm{semester}}}
%\SetForm{report-II}{title}{Relatório Acompanhamento - \UseTerm{semester}}
%\SetForm{report-II}{title}{\vspace*{-2ex}\UseTerm{semester}}
-\SetForm{report-II}{opening}{}
-
+%\SetForm{report-II}{opening}{}
+\SetForm{report-II}{preopening}{} %
%%%
\SetForm{report-II}{opening}{ %
{ \vspace{-2ex}\tiny
@@ -1207,7 +1212,7 @@ A nota (variando de zero a dez) atribuída por cada membro da banca examinadora
%%%
-\SetForm{report-II}{closing}{}
+%\SetForm{report-II}{closing}{}
%%%%%%%%%%%%%%%
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-lists.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-lists.sty
index d09a23de34..600d25e920 100644
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-lists.sty
+++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-lists.sty
@@ -12,7 +12,7 @@
%%
%% The Current Maintainer of this work is Alceu Frigeri
%%
-%% This is version {2.5} {2024/02/25}
+%% This is version {2.6} {2024/02/29}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -27,8 +27,8 @@
\ProvidesExplPackage
{ufrgscca-lists}
- {2024/02/25}
- {2.5}
+ {2024/02/29}
+ {2.6}
{UFRGS/CCA auxiliary lists commands}
@@ -42,8 +42,8 @@
{
name .code:n = {ufrgscca-lists} ,
prefix .code:n = {ufrgscca} ,
- date .code:n = {2024/02/25} ,
- version .code:n = {2.5} ,
+ date .code:n = {2024/02/29} ,
+ version .code:n = {2.6} ,
description .code:n = {UFRGS/CCA~Auxiliary~ lists~ commands}
}
\cs_if_exist:NF \PkgInfo
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ppc.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-ppc.sty
index e5ced4a331..eb8b23dcb0 100644
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ppc.sty
+++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-ppc.sty
@@ -12,7 +12,7 @@
%%
%% The Current Maintainer of this work is Alceu Frigeri
%%
-%% This is version {2.5} {2024/02/25}
+%% This is version {2.6} {2024/02/29}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -27,8 +27,8 @@
\ProvidesExplPackage
{ufrgscca-ppc}
- {2024/02/25}
- {2.5}
+ {2024/02/29}
+ {2.6}
{UFRGS/CCA PPC commands}
%%%%%%%
@@ -41,8 +41,8 @@
{
name .code:n = {ufrgscca-ppc} ,
prefix .code:n = {ufrgscca} ,
- date .code:n = {2024/02/25},
- version .code:n = {2.5} ,
+ date .code:n = {2024/02/29},
+ version .code:n = {2.6} ,
description .code:n = {UFRGS/CCA~ auxiliary~ PPC-related~ (indicators)~ commands}
}
\cs_if_exist:NF \PkgInfo
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-en.tex b/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-en.tex
index fcec1b1b7d..8223ae33db 100644
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-en.tex
+++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-en.tex
@@ -12,7 +12,7 @@
%%
%% The Current Maintainer of this work is Alceu Frigeri
%%
-%% This is version {2.5} {2024/02/25}
+%% This is version {2.6} {2024/02/29}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-ptBR.tex b/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-ptBR.tex
index dc42415122..14d59b4505 100644
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-ptBR.tex
+++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-ptBR.tex
@@ -12,7 +12,7 @@
%%
%% The Current Maintainer of this work is Alceu Frigeri
%%
-%% This is version {2.5} {2024/02/25}
+%% This is version {2.6} {2024/02/29}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca.cls b/macros/latex/contrib/ufrgscca/latex/ufrgscca.cls
index 3b57ee521c..5a5af3cbbe 100644
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca.cls
+++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca.cls
@@ -12,7 +12,7 @@
%%
%% The Current Maintainer of this work is Alceu Frigeri
%%
-%% This is version {2.5} {2024/02/25}
+%% This is version {2.6} {2024/02/29}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -27,8 +27,8 @@
\ProvidesExplClass
{ufrgscca}
- {2024/02/25}
- {2.5}
+ {2024/02/29}
+ {2.6}
{UFRGS/CCA class}
@@ -42,8 +42,8 @@
{
name .code:n = {ufrgscca} ,
prefix .code:n = {ufrgscca} ,
- date .code:n = {2024/02/25},
- version .code:n = {2.5} ,
+ date .code:n = {2024/02/29},
+ version .code:n = {2.6} ,
description .code:n = {UFRGS/CCA~a~report~based~class~bundle}
}
\cs_if_exist:NF \PkgInfo
diff --git a/macros/latex/contrib/unbtex/README.md b/macros/latex/contrib/unbtex/README.md
index 64adbbad76..2293f91fe4 100644
--- a/macros/latex/contrib/unbtex/README.md
+++ b/macros/latex/contrib/unbtex/README.md
@@ -1,6 +1,6 @@
# UnBTeX: A class for bachelor, master, and doctoral thesis at the
# University of Brasilia (UnB), Brazil.
-# Version 1.5 2024/02/02
+# Version 1.5.1 2024/03/02
Copyright (C) 2021-2024 by Henrique C. Ferreira <hcferreira@unb.br>
@@ -106,6 +106,9 @@ Here is a history of changes:
length (and number of lines)
. Reorganization of the class source code and improvements in the comments
. The template text has been revised and improved
+ 1.5.1 (2024-03-02):
+ . The approval sheet (folha de aprovação) has been changed
+ . The bottom margin size has been corrected to be consistently adhered to
## Overleaf
diff --git a/macros/latex/contrib/unbtex/unbtex-example.pdf b/macros/latex/contrib/unbtex/unbtex-example.pdf
index eb6c3020ba..f1498c6985 100644
--- a/macros/latex/contrib/unbtex/unbtex-example.pdf
+++ b/macros/latex/contrib/unbtex/unbtex-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/unbtex/unbtex-example.tex b/macros/latex/contrib/unbtex/unbtex-example.tex
index 0a973aab99..1ad0019003 100644
--- a/macros/latex/contrib/unbtex/unbtex-example.tex
+++ b/macros/latex/contrib/unbtex/unbtex-example.tex
@@ -1,7 +1,7 @@
%%
%% UnBTeX: A class for bachelor, master, and doctoral thesis at the
%% University of Brasilia (UnB), Brazil
-%% Version 1.5 2024/02/02
+%% Version 1.5.1 2024/03/02
%% Copyright (C) 2021-2024 by Henrique C. Ferreira <hcferreira@unb.br>
%%
%% This class file may be distributed and/or modified under the conditions
@@ -130,7 +130,7 @@
% ---
\local{Brasília}
\dia{2}
-\mes{fevereiro}
+\mes{março}
\ano{2024}
% ---
diff --git a/macros/latex/contrib/unbtex/unbtex-example/anexo-b.tex b/macros/latex/contrib/unbtex/unbtex-example/anexo-b.tex
index 9f2658e15a..63bad4c7b5 100644
--- a/macros/latex/contrib/unbtex/unbtex-example/anexo-b.tex
+++ b/macros/latex/contrib/unbtex/unbtex-example/anexo-b.tex
@@ -2,7 +2,9 @@
\chapter{Paleta de cores UnB}\label{anx:coresunb}
% ----------------------------------------------------------
-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.
+A \cpageref{marcaunb.1} foi extraída do \emph{manual de identidade visual}\footnote{Disponível em \url{http://marca.unb.br}} da UnB.
+
+\cleardoublepage
\newcounter{includepdfpage} % para referenciar no texto páginas pdf incluídas
@@ -13,4 +15,6 @@ A \cpageref{marcaunb.1}, a seguir, foi extraída do \emph{manual de identidade v
\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
+ ]{unbtex-example/figuras/coresunb}
+
+\cleardoublepage \ No newline at end of file
diff --git a/macros/latex/contrib/unbtex/unbtex-example/capitulo3.tex b/macros/latex/contrib/unbtex/unbtex-example/capitulo3.tex
index 56d4b8c404..30514e0f81 100644
--- a/macros/latex/contrib/unbtex/unbtex-example/capitulo3.tex
+++ b/macros/latex/contrib/unbtex/unbtex-example/capitulo3.tex
@@ -70,13 +70,13 @@ CIC0090 & Estruturas de Dados & 30 & 30 & 0 & 0 & 60 & CIC0004 \\ \hline%
}
\end{table}
-Para alterar a cor de linhas e de células de tabelas, o pacote \textsf{colortbl} foi utilizado. Para mesclar linhas e colunas, como na \cref{tab:fluxo}, utilize o pacote \textsf{multirow}. O pacote \textsf{longtable} pode ser usado para construir tabelas que ocupam mais de uma página e o pacote \textsf{rotating} pode ser usado para rotacionar tabelas. No \cref{anx:tabs} há exemplos de tabelas que os utilizam. Embora poderosos para construir tabelas, os pacotes \textsf{tabularray} e \textsf{nicematrix} não foram utilizados neste documento devido ao elevado tempo necessário para processamento no Overleaf. Faça tabelas usando como base qualquer um dos exemplos apresentados neste documento ou outros que considerar mais adequados e que podem ser facilmente encontrados na internet.
+Para alterar a cor de linhas e de células de tabelas, o pacote \textsf{colortbl} foi utilizado. Para mesclar linhas e colunas, como na \cref{tab:fluxo}, utilize o pacote \textsf{multirow}. O pacote \textsf{longtable} pode ser usado para construir tabelas que ocupam mais de uma página e o pacote \textsf{rotating} pode ser usado para rotacionar tabelas. No \cref{anx:tabs} há exemplos de tabelas que os utilizam. Embora poderosos para construir tabelas, os pacotes \textsf{tabularray} e \textsf{nicematrix} não foram utilizados neste documento devido ao elevado tempo necessário para processamento no Overleaf. Muitos outros exemplos de tabelas feitas com \LaTeX\ podem ser facilmente encontrados na internet.
% ---
\section{Figuras}
% ---
-Se a figura que for incluída se tratar de um diagrama, um gráfico ou uma ilustração que você mesmo produza, priorize o uso de imagens vetoriais no formato \texttt{pdf}. Com isso, o tamanho do arquivo final do trabalho será menor, e as imagens terão uma apresentação melhor, uma vez que imagens vetoriais são perfeitamente escaláveis para qualquer dimensão. A \cref{fig:grafico} foi inserida no texto utilizando-se um arquivo no formato \texttt{pdf}.
+Se a figura que for incluída se tratar de um diagrama, um gráfico ou uma ilustração que você mesmo produza, priorize o uso de imagens vetoriais no formato \texttt{pdf}, como no caso da \cref{fig:grafico}. Assim, o tamanho do arquivo do trabalho será menor e as imagens terão uma apresentação melhor, uma vez que imagens vetoriais são escaláveis para qualquer dimensão.
\begin{figure}[htb]
\centering
diff --git a/macros/latex/contrib/unbtex/unbtex.cls b/macros/latex/contrib/unbtex/unbtex.cls
index 71f58cebba..39f277761d 100644
--- a/macros/latex/contrib/unbtex/unbtex.cls
+++ b/macros/latex/contrib/unbtex/unbtex.cls
@@ -1,7 +1,7 @@
%%
%% UnBTeX: A class for bachelor, master, and doctoral thesis at the
%% University of Brasilia (UnB), Brazil
-%% Version 1.5 2024/02/02
+%% Version 1.5.1 2024/03/02
%% Copyright (C) 2021-2024 by Henrique C. Ferreira <hcferreira@unb.br>
%%
%% This class file may be distributed and/or modified under the conditions
@@ -21,7 +21,7 @@
%%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{unbtex}[2024/02/02 v1.5 Modelo da Universidade de Brasília baseado em abnTeX2]
+\ProvidesClass{unbtex}[2024/03/02 v1.5.1 Modelo da Universidade de Brasília baseado em abnTeX2]
% ------------------------------------------------------------------------
% Opções para a classe
@@ -638,8 +638,10 @@
\imprimirlocal \\ \imprimirano\par}
\end{center}
\end{capa}
-\setlrmarginsandblock{3cm}{2cm}{*} % Reestabelece as margens
-\checkandfixthelayout[nearest]
+% Reestabelece as margens
+\setlrmarginsandblock{3cm}{2cm}{*}
+\setulmarginsandblock{3cm}{2cm}{*}
+\checkandfixthelayout[fixed]
\cleardoublepage
\hypersetup{pageanchor=true}
}
@@ -769,7 +771,7 @@
\end{minipage}%
\end{flushright}
}%
-\vspace{20pt}
+\vspace{24pt}
\raggedright{Trabalho aprovado. \imprimirlocal, \imprimirdia\ de \imprimirmes\ de \imprimirano:}
{%
@@ -779,10 +781,10 @@
\abntex@ifnotempty{\membrodabancaivnome}{\assinatura{\textbf{\membrodabancaivnome} \\ \membrodabancaivfuncaonome}}
\abntex@ifnotempty{\membrodabancavnome}{\assinatura{\textbf{\membrodabancavnome} \\ \membrodabancavfuncaonome}}
}
-\vfill
- \begin{center}
- {\sffamily\large\imprimirlocal \\ \imprimirano\par}
- \end{center}
+%\vfill
+% \begin{center}
+% {\sffamily\large\imprimirlocal \\ \imprimirano\par}
+% \end{center}
\end{center}
\end{folhadeaprovacao}
}
diff --git a/macros/latex/required/firstaid/changes.txt b/macros/latex/required/firstaid/changes.txt
index 8db6a5d0fd..6e53f7f010 100644
--- a/macros/latex/required/firstaid/changes.txt
+++ b/macros/latex/required/firstaid/changes.txt
@@ -1,3 +1,10 @@
+2024-02-29 Joseph Wright <Joseph.Wright@latex-project.org>
+
+ * latex2e-first-aid-for-external-files.dtx:
+ - add firstaid for acro to declare a temporary prop
+ - add firstaid for chemformula to load l3keys2e
+ - add chemnum for acro to declare a temporary prop
+
2023-09-20 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
* latex2e-first-aid-for-external-files.dtx: add firstaid for underscore to
diff --git a/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.dtx b/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.dtx
index ed6c898d65..2317c05141 100644
--- a/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.dtx
+++ b/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.dtx
@@ -111,8 +111,8 @@
% \end{macrocode}
%
% \begin{macrocode}
-\def\LaTeXFirstAidDate{2023/09/20}
-\def\LaTeXFirstAidVersion{v1.1b}
+\def\LaTeXFirstAidDate{2024/02/29}
+\def\LaTeXFirstAidVersion{v1.1c}
% \end{macrocode}
%
% \begin{macrocode}
@@ -602,5 +602,48 @@
%</kernel>
% \end{macrocode}
%
+% \begin{macrocode}
+%<*kernel>
+% \end{macrocode}
+%
+% \subsection{The \pkg{acro} package first aid}
+%
+% The package does not declare a \texttt{prop}, which causes an issue with newer
+% routines in \pkg{expl3}.
+% \begin{macrocode}
+\AddToHook{package/acro/after}[firstaid]{%
+ \FirstAidNeededT{acro}{sty}{2022/04/01 v3.8 typeset acronyms and other abbreviations (CN)}
+ {\UseName{prop_new:c}{l__acro_tmpa_prop}}%
+}
+% \end{macrocode}
+%
+% \subsection{The \pkg{chemformula} package first aid}
+%
+% Package \pkg{chemformula} uses \pkg{l3keys2e} for option processing.
+% This used to be made available as \pkg{chemformula} also loads
+% \pkg{xfrac}, which loaded \pkg{l3keys2e}. However, \pkg{xfrac} has now
+% been updated to use the newer kernel method if available, so loading
+% \pkg{chemformula} fails.
+% \begin{macrocode}
+\AddToHook{package/chemformula/before}[firstaid]{%
+ \RequirePackage{l3keys2e}%
+}
+% \end{macrocode}
+%
+% \subsection{The \pkg{chemnum} package first aid}
+%
+% The package does not declare a \texttt{prop}, which causes an issue with newer
+% routines in \pkg{expl3}.
+% \begin{macrocode}
+\AddToHook{package/chemnum/after}[firstaid]{%
+ \FirstAidNeededT{chemnum}{sty}{2021/01/21 v1.3a a comprehensive approach for the numbering of chemical compounds (CN)}
+ {\UseName{prop_new:c}{l__chemnum_tmpa_prop}}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</kernel>
+% \end{macrocode}
+%
% \Finale
%
diff --git a/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.pdf b/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.pdf
index ffb97f276f..ab5db23f44 100644
--- a/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.pdf
+++ b/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.pdf
Binary files differ
diff --git a/macros/luatex/generic/luamplib/NEWS b/macros/luatex/generic/luamplib/NEWS
index d56d4df857..3e91c9cc67 100644
--- a/macros/luatex/generic/luamplib/NEWS
+++ b/macros/luatex/generic/luamplib/NEWS
@@ -1,5 +1,14 @@
History of the luamplib package
+2024/03/01 2.26.0
+ * when \mplibcachedir{<dir>} is not set, default cache directory will
+ be in the following order:
+ $TEXMFVAR/luamplib_cache
+ $TEXMF_OUTPUT_DIRECTORY/luamplib_cache
+ ./luamplib_cache
+ $TEXMFOUTPUT/luamplib_cache
+ .
+
2024/01/25 2.25.3
* protect "..." even if textextlabel is disabled (revert part of v2.25.0)
diff --git a/macros/luatex/generic/luamplib/luamplib.dtx b/macros/luatex/generic/luamplib/luamplib.dtx
index 3b6aad6e35..8bdbf884e4 100644
--- a/macros/luatex/generic/luamplib/luamplib.dtx
+++ b/macros/luatex/generic/luamplib/luamplib.dtx
@@ -85,7 +85,7 @@ See source file '\inFileName' for licencing and contact information.
%<*driver>
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{luamplib.drv}%
- [2024/01/25 v2.25.3 Interface for using the mplib library]%
+ [2024/03/01 v2.26.0 Interface for using the mplib library]%
\documentclass{ltxdoc}
\usepackage{metalogo,multicol,mdwlist,fancyvrb,xspace}
\usepackage[x11names]{xcolor}
@@ -153,7 +153,7 @@ See source file '\inFileName' for licencing and contact information.
% \author{Hans Hagen, Taco Hoekwater, Elie Roux, Philipp Gesang and Kim Dohyun\\
% Maintainer: LuaLaTeX Maintainers ---
% Support: \email{lualatex-dev@tug.org}}
-% \date{2024/01/25 v2.25.3}
+% \date{2024/03/01 v2.26.0}
%
% \maketitle
%
@@ -328,8 +328,13 @@ See source file '\inFileName' for licencing and contact information.
% |$TEXMFMAIN/metapost/context/base| are already registered by default.
%
% By default, cache files will be stored in |$TEXMFVAR/luamplib_cache| or,
-% if it's not available, in the same directory as where pdf/dvi output file
-% is saved. This however can be changed by the command
+% if it's not available (mostly not writable),
+% in the directory where output files are saved:
+% to be specific, |$TEXMF_OUTPUT_DIRECTORY/luamplib_cache|,
+% |./luamplib_cache|, |$TEXMFOUTPUT/luamplib_cache|, and |.| in this order.
+% (|$TEXMF_OUTPUT_DIRECTORY| is normally the value of |--output-directory|
+% command-line option.)
+% This behavior however can be changed by the command
% |\mplibcachedir{<directory path>}|, where tilde (|~|) is interpreted
% as the user's home directory (on a windows machine as well).
% As backslashes (|\|) should be escaped by users, it would be easier to use
@@ -446,8 +451,8 @@ See source file '\inFileName' for licencing and contact information.
luatexbase.provides_module {
name = "luamplib",
- version = "2.25.3",
- date = "2024/01/25",
+ version = "2.26.0",
+ date = "2024/03/01",
description = "Lua package to typeset Metapost with LuaTeX's MPLib.",
}
@@ -528,7 +533,7 @@ local is_writable = file.is_writable or function(name)
end
end
end
-local mk_full_path = lfs.mkdirs or function(path)
+local mk_full_path = lfs.mkdirp or lfs.mkdirs or function(path)
local full = ""
for sub in path:gmatch("(/*[^\\/]+)") do
full = full .. sub
@@ -549,31 +554,24 @@ local currenttime = os.time()
local outputdir
if lfstouch then
- local texmfvar = kpse.expand_var('$TEXMFVAR')
- if texmfvar and texmfvar ~= "" and texmfvar ~= '$TEXMFVAR' then
- for _,dir in next, texmfvar:explode(os.type == "windows" and ";" or ":") do
- if not lfsisdir(dir) then
- mk_full_path(dir)
- end
- if is_writable(dir) then
- local cached = format("%s/luamplib_cache",dir)
- lfsmkdir(cached)
- outputdir = cached
- break
+ for i,v in ipairs{'TEXMFVAR','TEXMF_OUTPUT_DIRECTORY','.','TEXMFOUTPUT'} do
+ local var = i == 3 and v or kpse.var_value(v)
+ if var and var ~= "" then
+ for _,vv in next, var:explode(os.type == "unix" and ":" or ";") do
+ local dir = format("%s/%s",vv,"luamplib_cache")
+ if not lfsisdir(dir) then
+ mk_full_path(dir)
+ end
+ if is_writable(dir) then
+ outputdir = dir
+ break
+ end
end
+ if outputdir then break end
end
end
end
-if not outputdir then
- outputdir = "."
- for _,v in ipairs(arg) do
- local t = v:match("%-output%-directory=(.+)")
- if t then
- outputdir = t
- break
- end
- end
-end
+outputdir = outputdir or '.'
function luamplib.getcachedir(dir)
dir = dir:gsub("##","#")
@@ -610,7 +608,7 @@ local noneedtoreplace = {
["mp-grph.mpiv"] = true, ["mp-idea.mpiv"] = true, ["mp-luas.mpiv"] = true,
["mp-mlib.mpiv"] = true, ["mp-node.mpiv"] = true, ["mp-page.mpiv"] = true,
["mp-shap.mpiv"] = true, ["mp-step.mpiv"] = true, ["mp-text.mpiv"] = true,
- ["mp-tool.mpiv"] = true,
+ ["mp-tool.mpiv"] = true, ["mp-cont.mpiv"] = true,
}
luamplib.noneedtoreplace = noneedtoreplace
@@ -2061,7 +2059,7 @@ luamplib.colorconverter = colorconverter
\else
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{luamplib}
- [2024/01/25 v2.25.3 mplib package for LuaTeX]
+ [2024/03/01 v2.26.0 mplib package for LuaTeX]
\ifx\newluafunction\@undefined
\input ltluatex
\fi
diff --git a/macros/luatex/generic/luamplib/luamplib.pdf b/macros/luatex/generic/luamplib/luamplib.pdf
index e46210d999..506ec49715 100644
--- a/macros/luatex/generic/luamplib/luamplib.pdf
+++ b/macros/luatex/generic/luamplib/luamplib.pdf
Binary files differ
diff --git a/macros/luatex/generic/minim-mp/README b/macros/luatex/generic/minim-mp/README
index 6c10eeabb2..372e9626e1 100644
--- a/macros/luatex/generic/minim-mp/README
+++ b/macros/luatex/generic/minim-mp/README
@@ -1,4 +1,4 @@
-Version: 2024/1.4
+Version: 2024/1.5
SUMMARY
@@ -19,6 +19,18 @@ In order to obtain the typeset manual of this package, simply say:
HISTORY
+2025/1.5 (in development)
+
+ New features:
+
+ * Add a luamplib compatibility mode to the latex package.
+ * Make default format and math mode configurable.
+
+ Bug fixes:
+
+ * Make metafun not crash immediately.
+ * Comments (% characters) are now handled by metapost, not tex.
+
2024/1.4 (5/1/2024)
* Support the extended graphics state (extgstate)
diff --git a/macros/luatex/generic/minim-mp/minim-mp.doc b/macros/luatex/generic/minim-mp/minim-mp.doc
index 9429544d8e..0cd4ff574e 100644
--- a/macros/luatex/generic/minim-mp/minim-mp.doc
+++ b/macros/luatex/generic/minim-mp/minim-mp.doc
@@ -8,8 +8,8 @@
\else \startmetadata
author {Esger Renkema}
title {minim-mp}
- date {2024-01-05}
- version {2024/1.4}
+ date {2024-02-25}
+ version {2024/1.5}
keywords {LuaTeX; Plain TeX; MetaPost; mplib}
stopmetadata
\maketitle \fi
@@ -29,8 +29,8 @@ a persistent metapost instance. This will also give you more control over image
extraction. See below under „Metapost instances”. The ⟦options⟧ will also be
explained there (for simple cases, you will not need them).
-The logging of the metapost run will be included in the regular log file. If an
-error occurs, the logging will also be shown on the terminal.
+The logs of the metapost run will be included in the regular log file. If an
+error occurs, the log of the last snippet will also be shown on the terminal.
\section As a stand-alone Metapost compiler % 1
@@ -49,16 +49,26 @@ and ⟦\end{document}⟧ will be inserted automatically if omitted.
\section LaTeX compatibility % 1
-An experimental latex package is included in ⟦minim-mp.sty⟧. It accepts no
-options, as it really is a rather thin wrapper around the plain tex package.
-It does, however, provide a proper ⟦*metapost⟧ latex environment as an
+An experimental latex package is included in ⟦minim-mp.sty⟧. It really is
+a rather thin wrapper around the plain tex package,
+but does provide a proper ⟦*metapost⟧ latex environment as an
alternative to ⟦\directmetapost⟧.
-
-The ⟦metapost⟧ environment has no persistent backing instance.
-You can create a similar environment ⟦envname⟧ that does with
+The ⟦metapost⟧ environment has no persistent backing instance,
+but you can create a similar environment ⟦envname⟧ that does with
⟦*\newmetapostenvironment [options] {envname}⟧.
If your demands are even more complex, you should fall back to the plain tex
-commands described below.
+commands described in the next section.
+
+As in luamplib, you can use ⟦*\mpcolor {name}⟧ to insert the proper colour
+values; this macro is only available inside the above environments.
+
+When the package is loaded with the option ⟦luamplib⟧, minim-mp will try and
+act as a drop-in replacement for luamplib. The effort made is not very great
+though, but it will define an ⟦mplibcode⟧ environment, as well as the
+⟦\mplibcodeinherit⟧, ⟦\mplibshowlog⟧, ⟦\mplibsetformat⟧ and
+⟦\mplibnumbersystem⟧ switches.
+Please do note that this is not the recommended way of using minim-mp, which
+remains the interface documented in the next section.
\section Metapost instances % 1
@@ -73,7 +83,7 @@ These are the options you can use:
Option&Default&Description\cr
⟦jobname⟧&⟦':metapost:'⟧&Used in error messages.\cr
⟦format⟧&⟦'plain.mp'⟧&Format to initialise the instance with.\cr
-⟦math⟧&⟦'scaled'⟧&One of ⟦scaled⟧, ⟦decimal⟧ or ⟦double⟧.\cr
+⟦mathmode⟧&⟦'scaled'⟧&One of ⟦scaled⟧, ⟦decimal⟧ or ⟦double⟧.\cr
⟦seed⟧&⟦nil⟧&Random seed for this instance.\cr
⟦catcodes⟧&⟦0⟧&Catcode table for ⟦btex ... etex⟧.\cr
⟦env⟧&copy of ⟦_G⟧&Lua environment; see below.\cr
@@ -103,7 +113,7 @@ tex can parse as a number.
Say ⟦*\remainingmpimages \id⟧ for the number of images not yet retrieved.
Finally, as a shorthand, ⟦*\runmetapostimage \id { code }⟧ will add
-⟦beginfig ... endfig⟧ to your ⟦code⟧ and write the resulting image immediately
+⟦beginfig ... endfig;⟧ to your ⟦code⟧ and write the resulting image immediately
to the current list.
@@ -364,7 +374,7 @@ A transparency group is a special kind of XForm, and these can be created from
withing metapost: ⟦<id> =⟧ ⟦*saveboxresource (<attributes>) <picture>⟧ returns
a number identifying the resource and can be fed attributes in the same way as
⟦setgstate⟧. XForms defined through metapost are available to other metapost
-instances, but not to tex, though the macro painting them, ⟦*boxresource <id>⟧,
+instances but not to tex, though the macro painting them, ⟦*boxresource <id>⟧,
also accepts identifiers of tex-defined box resources. There remains a subtle
difference, however: metapost-defined box resources are placed at their
original origin.
@@ -429,6 +439,11 @@ Each metapost instance is a table containing the following entries:
⟦catcodes⟧&Number of the catcode table used with ⟦btex ... etex⟧.\cr
⟦env⟧&The lua environment for ⟦runscript⟧.\cr}
+Default values for the format and number system are available in the
+⟦M.default_format⟧ and ⟦M.default_mathmode⟧ variables,
+while ⟦M.on_line⟧ controls whether the logs are always printed to the
+terminal.
+
\section Debugging % 1
diff --git a/macros/luatex/generic/minim-mp/minim-mp.lua b/macros/luatex/generic/minim-mp/minim-mp.lua
index 9069ab7147..fba6573239 100644
--- a/macros/luatex/generic/minim-mp/minim-mp.lua
+++ b/macros/luatex/generic/minim-mp/minim-mp.lua
@@ -228,7 +228,7 @@ end
local function parse_lua_table(name, str)
local f, msg = load('return '..str, name, 't')
if msg then return alloc.err(msg) end
- t = f()
+ local t = f()
if not t or type(t) ~= 'table' then
return alloc.err('%s attributes must be given as lua table', name)
end
@@ -772,9 +772,9 @@ local function get_boxresource_center (id)
end
end
-E.set_boxresource_dimensions = set_boxresource_dimensions
-E.get_boxresource_dimensions = get_boxresource_dimensions
-E.get_boxresource_center = get_boxresource_center
+E.set_boxresource_dimensions = set_boxresource_dimensions
+E.get_boxresource_dimensions = get_boxresource_dimensions
+E.get_boxresource_center = get_boxresource_center
local function save_as_boxresource(pic)
-- attributes
@@ -1248,6 +1248,21 @@ function E.quote_for_lua(s)
return E.quote(mkluastring(s))
end
+-- These are here so that luametafun does not bug out immediately. Please note
+-- that using metafun is not otherwise supported or recommended.
+local cct_maketext = alloc.registernumber('minim:mp:catcodes:maketext')
+E.catcodes = { numbers =
+ { inicatcodes = cct_maketext , texcatcodes = cct_maketext
+ , luacatcodes = cct_maketext , notcatcodes = cct_maketext
+ , vrbcatcodes = cct_maketext , prtcatcodes = cct_maketext
+ , ctxcatcodes = cct_maketext , txtcatcodes = cct_maketext
+} }
+E.mp = mp or { } -- all seem nonessential
+E.mp.mf_path_reset = E.mp.mf_path_reset or function() end
+E.mp.mf_finish_saving_data = E.mp.mf_finish_saving_data or function() end
+E.mp.report = E.mp.report or function() end
+
+
-- 2 typesetting with tex
-- The result of the maketext function is fed back into metapost; on that side,
@@ -1330,7 +1345,6 @@ function M.make_glyph(glyphname, fnt)
alloc.err('Font not found: %s (id %s)', fnt, fontid)
return { }, 10
end
- local fontname = thefont.psname
local gid = luaotfload.aux.gid_of_name(fontid, glyphname)
if not gid then
alloc.err('Font %s has no glyph named %s', thefont.psname, glyphname)
@@ -1393,6 +1407,9 @@ M.get_contours = E.get_contours
-- 2 opening, running and and closing instances
+M.default_format = 'plain.mp'
+M.default_mathmode = 'scaled'
+
local function apply_default_instance_opts(t)
return
{ ini_version = true
@@ -1401,7 +1418,7 @@ local function apply_default_instance_opts(t)
, find_file = new_file_finder()
--, script_error = ...
, job_name = t.jobname
- , math_mode = t.math or 'scaled'
+ , math_mode = t.mathmode or t.math or M.default_mathmode
, random_seed = t.seed or nil
-- , file_line_error_style
, make_text = maketext
@@ -1440,14 +1457,18 @@ function M.run (nr, code)
save_image_list(self, picts)
end
-M.init_code = { 'let dump=endinput;', 'input INIT;', 'input minim-mp.mp;', 'input minim.mp;' }
+M.init_code = { 'let dump=endinput;'
+ , 'boolean mplib; mplib:=true;'
+ , 'input INIT;'
+ , 'input minim-mp.mp;'
+ , 'input minim.mp;' }
local maketext_catcodes = alloc.registernumber('minim:mp:catcodes:maketext')
function M.open (t)
local nr = #instances + 1
t.jobname = t.jobname or ':metapost:'
-- creating instance options
- local init = string.gsub(table.concat(M.init_code, ''), 'INIT', t.format or 'plain.mp')
+ local init = string.gsub(table.concat(M.init_code, ''), 'INIT', t.format or M.default_format)
local opts = apply_default_instance_opts(t)
local instance = mplib.new(opts)
-- adding the instance
diff --git a/macros/luatex/generic/minim-mp/minim-mp.pdf b/macros/luatex/generic/minim-mp/minim-mp.pdf
index 9ea6a51612..eae0cd360e 100644
--- a/macros/luatex/generic/minim-mp/minim-mp.pdf
+++ b/macros/luatex/generic/minim-mp/minim-mp.pdf
Binary files differ
diff --git a/macros/luatex/generic/minim-mp/minim-mp.sty b/macros/luatex/generic/minim-mp/minim-mp.sty
index 250e86668e..6240c80b9a 100644
--- a/macros/luatex/generic/minim-mp/minim-mp.sty
+++ b/macros/luatex/generic/minim-mp/minim-mp.sty
@@ -29,7 +29,7 @@
\newmetapostinstance[#1]\mnm@tmp
\expandafter\let\csname #2@instance\endcsname\mnm@tmp
\newenvironment{#2}{%
- \begingroup \catcode`\#=12
+ \begingroup \catcode`\#=12 \catcode`\%=12
\let\mpcolor = \minimpcolor
\csname:#2:\endcsname}
{\csname end:#2:\endcsname \endgroup}%
@@ -50,3 +50,33 @@
\newtoks\mpcolorspectoks \newtoks\mpcolorruntoks \newtoks\mpcolorvaltoks
\mpcolorruntoks{\expandafter\extractcolorspec\the\mpcolorspectoks\mptmpcolor
\expandafter\mpcolorvaltoks\expandafter\@gobble\mptmpcolor}
+
+% as a rather fragile drop-in replacement for luamplib
+\DeclareOption{luamplib}{%
+ \def\mplibtextextlabel#1{} % always enabled
+ \def\mplibshowlog#1{\directlua{
+ require 'minim-mp'.on_line = %
+ \ifcsname minimp@switch@#1\endcsname
+ true \else false \fi }}
+ \newmetapostenvironment[jobname='\jobname']{@mplibcode}
+ \def\mplibcodeinherit#1{%
+ \ifcsname minimp@switch@#1\endcsname
+ \let\mplibcode=\@mplibcode
+ \let\endmplibcode=\@mplibcode
+ \else
+ \let\mplibcode=\metapost
+ \let\endmplibcode=\endmetapost
+ \fi}
+ \mplibcodeinherit{disable}
+ \def\mplibsetformat#1{\directlua{
+ require 'minim-mp'.default_format = '#1.mp' }}
+ \def\mplibnumbersystem#1{\directlua{
+ require 'minim-mp'.default_math = '#1' }}
+} \ProcessOptions*
+
+\let\minimp@switch@@enable=\relax
+\let\minimp@switch@@enabled=\relax
+\let\minimp@switch@@true=\relax
+\let\minimp@switch@@yes=\relax
+
+
diff --git a/macros/luatex/generic/minim-mp/minim-mp.tex b/macros/luatex/generic/minim-mp/minim-mp.tex
index 6d95334677..7b8cef6c6b 100644
--- a/macros/luatex/generic/minim-mp/minim-mp.tex
+++ b/macros/luatex/generic/minim-mp/minim-mp.tex
@@ -16,6 +16,7 @@
\newcatcodetable \minim:mp:catcodes:mpcode
{\catcodetable\minim:initcatcodes
\catcode`\{=1 \catcode`\}=2 \catcode9=10
+ \catcode`\#=12 \catcode`\%=12 \catcode`\~=12
\savecatcodetable\csname minim:mp:catcodes:mpcode\endcsname}
\directlua { require('minim-mp') }
diff --git a/macros/luatex/generic/minim-pdf/README b/macros/luatex/generic/minim-pdf/README
index 0626208f2f..c449a9a2c4 100644
--- a/macros/luatex/generic/minim-pdf/README
+++ b/macros/luatex/generic/minim-pdf/README
@@ -1,4 +1,4 @@
-Version: 2024/1.4
+Version: 2024/1.5
SUMMARY
@@ -27,26 +27,39 @@ In order to obtain the typeset manual of this package, simply say:
HISTORY
+2024/1.5 (in development)
+
+ New features:
+
+ * Add \autotagplainoutput and \sectionstructure.
+ * Allow bookmarks that are not associated to structure elements.
+ * The characters ~#% need no longer be escaped in a \hyperlink url.
+
+ Bug fixes:
+
+ * When writing the document structure is disabled, emit a warning instead
+ of an error for incompatible structure types.
+
2024/1.4 (5/1/2024)
Breaking changes:
- * Table cells and headers now connect automatically in \automarktable
+ * Table cells and headers now connect automatically in \automarktable.
New features:
- * Add support for pdf/ua
- * Re-write \hyperlink, adding many options
- * Add ref and title options to structure elements
- * New helper macros for footnotes
- * Add \withpdfresource
+ * Add support for pdf/ua.
+ * Re-write \hyperlink, adding many options.
+ * Add ref and title options to structure elements.
+ * New helper macros for footnotes.
+ * Add \withpdfresource.
2023/1.3 (20/10/2023)
New features:
- * Add \markcolumnspan and \markrowspan
- * Add \markcolumnhead and \markrowhead
+ * Add \markcolumnspan and \markrowspan.
+ * Add \markcolumnhead and \markrowhead.
2023/1.2 (3/3/2023)
diff --git a/macros/luatex/generic/minim-pdf/minim-pdf.doc b/macros/luatex/generic/minim-pdf/minim-pdf.doc
index 111d8c1423..3dc0349aca 100644
--- a/macros/luatex/generic/minim-pdf/minim-pdf.doc
+++ b/macros/luatex/generic/minim-pdf/minim-pdf.doc
@@ -14,8 +14,8 @@ all other features of the package are described here.
\else \startmetadata
author {Esger Renkema}
title {minim-pdf}
- date {2024-01-05}
- version {2024/1.4}
+ date {2024-02-25}
+ version {2024/1.5}
keywords {LuaTeX; Plain TeX; PDF/A; Tagged PDF; accessibility; a11y;
hypertext; bookmarks; document outline; associated files}
stopmetadata
@@ -40,9 +40,16 @@ Hyperlinks can be made with
With the ⟦name⟧ action, a named destination must be used (see below), while the
⟦user⟧ action will be passed directly to the back-end (as with the pdftex
primitive).
+After the ⟦url⟧ action, the characters \Uchar`\~, \# and \% need not be escaped.
+(Of course, this does nothing for already-tokenised text; be aware of this when
+you wrap ⟦\hyperlink⟧ into another macro.)
+Any spaces after the ⟦<action>⟧ will be ignored.
+
The ⟦*\hyperlinkstyle⟧ token list can be used so set common (pdf) link
attributes; it defaults to ⟦/Border [0 0 0]⟧. The contents of the optional
⟦attr⟧ parameter will be appended to these.
+The ⟦alt⟧ options sets the ⟦/Contents⟧ key that is required by PDF/UA (where it
+has the purpose of an alt text).
A named destination can be created with ⟦*\nameddestination {...}⟧ (also in
horizontal mode, unlike the backend primitive) and if you cannot think of
@@ -53,18 +60,24 @@ generated name.
\section Bookmarks % 1
-Bookmarks (also known as outlines) can be added with ⟦*\outline [open|closed]
-[dest {name}] {title}⟧.
+Bookmarks (also known as outlines) can be added with
+⟦*\outline [level n] [open|closed] [dest {name}] {title}⟧.
Add ⟦open⟧ or ⟦closed⟧ to have the bookmark appear initially open or closed
-(default), and
+(the default), and
say ⟦dest {name}⟧ for having it refer to a specific named destination
(otherwise, a new one will be created where the ⟦\outline⟧ command appears).
-A bookmark is automatically associated with the current structure element and
-the hierarchy of structure elements determines the nesting of bookmarks.
-Therefore, if you want nested bookmarks, you \emph{must} precede the ⟦\outline⟧
-command with a declaration of the current structure element, even if you have
-otherwise disabled tagging. See the next chapter on how to do this.
+In the absence of the ⟦level⟧ option, the bookmark is automatically associated
+with the current structure element and the hierarchy of structure elements
+determines the nesting of bookmarks. This works even if you have otherwise
+disabled tagging and is the recommended way of generating outlines.
+(You can find all relevant macros in next chapter under ‘Document structure’
+and ‘Structure element aliases’.)
+
+As a fallback, outlines specified with the ⟦level n⟧ option will be inserted at
+the end of the current outline list at the specified level (${\tt n}≥1$ and
+need not be contiguous). Both methods can be intertwined, but please use the
+document structure if you can.
\section Page labels % 1
@@ -201,6 +214,46 @@ For a more general introduction to and discussion of tagged pdf, please read
the (excellent) manual of latex’s tagpdf package.
+\section Quick-start guide % 1
+
+The minimal setup for producing tagged pdf from plain tex documents is
+something like the following:
+
+⟦% first update all fonts to TrueType (ttf) or OpenType (otf)
+\input luaotfload.sty
+% ... font redefinitions omitted ...
+\input minim-mp
+\pdfalevel 2a % declare pdf/a conformance, enable tagging
+\autotagplainoutput % update the output routine
+% create section markers and counters
+\sectionstructure { subsection, section, chapter }⟧
+
+You can then update your sectioning macros to look like this:
+
+⟦\def\section#1\par{%
+ % space above
+ \bigskip \goodbreak
+ % structure and outline (this is the new part)
+ \marksection \outline open {#1}
+ % section header
+ \noindent {\bf \the\chapternr.\the\sectionnr. #1}
+ % space below
+ \smallskip \noindent}⟧
+
+Other macros you might have for laying out structural elements, such as tables
+or lists, should of course also be updated. The rest of this chapter describes
+the tools you can use.
+
+Please be advised that producing tagged pdf will likely forever remain
+a fragile and error-prone process.
+You should always validate the resulting pdf.
+An easy-to-use and free validator is \hyperlink alt {The veraPDF website.}
+url {https://verapdf.org/home}veraPDF\endlink.
+For inspecting the document structure, you can use the ⟦pdfinfo⟧ utility that
+comes with the \hyperlink alt {The Poppler website.}
+url {https://poppler.freedesktop.org/}Poppler\endlink\ pdf library.
+
+
\section Purpose, limitations and pitfalls % 1
The main purpose of this package is semi-automatically marking up the
@@ -213,7 +266,7 @@ Furthermore, while the macros in this package are sophisticated enough that
tagging can be done without any manual intervantion, it is quite possible and
rather easy to generate the wrong document structure, or even cause syntax
errors in the resulting pdf code.
-You should always check the result in an external application.
+You should always inspect and validate the result.
This is the full list of limitations, pitfalls and shortcomings:
\startlist
@@ -223,15 +276,13 @@ can mark out-of-order content explicitly if you know what you are doing; see
below).
\item2. The contents of ⟦\localleftbox⟧ and ⟦\localrightbox⟧ must be marked
manually, probably as artifact.
-\item3. You must mark page header, page footer and footnote rule yourself; no
-default is set.
-\item4. There currently is no way of marking xforms or other pdf objects as
+\item3. There currently is no way of marking xforms or other pdf objects as
content items of themselves.
-\item5. The content of xforms (i.e. pdf objects created by ⟦\useboxresource⟧)
+\item4. The content of xforms (i.e. pdf objects created by ⟦\useboxresource⟧)
should not contain tagging commands.
-\item6. Likewise, you should be careful with box reuse: it might work, but you
+\item5. Likewise, you should be careful with box reuse: it might work, but you
should check.
-\item7. This package currently only supports pdf~1.7 tagging and is not yet
+\item6. This package currently only supports pdf~1.7 tagging and is not yet
ready for use with pdf~2.0.
\stoplist
@@ -279,7 +330,7 @@ Use of ⟦ActualText⟧, ⟦Alt⟧ or ⟦Lang⟧ attribute on MCIs, while allowe
pdf standard, is not supported by this package. You should set these on the
structure element instead.
-The begining and ending of a content item can be forced with
+The beginning and ending of a content item can be forced with
⟦*\startcontentitem⟧ and ⟦*\stopcontentitem⟧, while ⟦*\ensurecontentitem⟧ will
only open a new content item if you are currently outside any.
If you need some part to be a single content item, you can use
@@ -336,17 +387,10 @@ All these helpful features can be disabled by setting
will have to be closed by an explicit closing tag, as in xml.
In this case, ⟦\stopelement⟧ and ⟦\ensurestopelement⟧ will be equivalent.
-By default, ⟦P⟧ structure elements are inserted automatically at the start of
-every paragraph. The tag can be changed with ⟦*\nextpartag {Tag}⟧; leaving the
-argument empty will prevent marking the next paragraph.
-Keep in mind that the reassignment is local: if a paragraph marked with
-⟦\nextpartag⟧ starts inside a group, it will not reset.
-Auto-marking paragraphs can be (locally) disabled or enabled by saying
-⟦*\markparagraphsfalse⟧ or ⟦*\markparagraphstrue⟧.
-
You can query the place in the document structure of any point with
⟦*\showdocumentstructure⟧.
+
\section Structure element aliases % 1
New structure element tags can be created with
@@ -360,6 +404,33 @@ Any aliases you declare will be written to the pdf’s ⟦RoleMap⟧ only if the
have actually been used.
+\section Automatic tagging of paragraphs % 1
+
+By default, ⟦P⟧ structure elements are inserted automatically at the start of
+every paragraph. The tag can be changed with ⟦*\nextpartag {Tag}⟧; leaving the
+argument empty will prevent marking the next paragraph.
+Keep in mind that the (internal) reassignment is local: if a paragraph marked
+with ⟦\nextpartag⟧ starts inside a group, it will not reset.
+Hence, to avoid surprises, you should have ⟦\nextpartag⟧ and the start of your
+paragraph at the same grouping level.
+
+Useful structure elements for ⟦\nextpartag⟧ include ⟦H⟧ for headings and ⟦LI⟧
+for list items. Since minim-pdf produces strongly-structured documents, the
+tags ⟦H1⟧, ⟦H2⟧, ⟦H3⟧ etc. should not be used.
+
+Please also note that if you add ⟦\hbox⟧es directly to a vertical list
+(this includes ⟦\line⟧, ⟦\centerline⟧ and the like),
+the ⟦\everypar⟧ token list is not inserted and no new paragraph structure element
+will be opened.
+The contents of the ⟦\hbox⟧ will be added to the current structure element, and
+this may result in an invalid structure hierarchy (and an error messsage
+reading ‘Structure type mismatch’).
+You can make your intentions clear by inserting ⟦\startelement{P}⟧ at the
+appropriate place (see above).
+
+Auto-marking paragraphs can be (locally) disabled or enabled by saying
+⟦*\markparagraphsfalse⟧ or ⟦*\markparagraphstrue⟧.
+
\section Manipulating the logical order % 1
With the process outlined above, the logical order of structure elements has to
@@ -504,7 +575,7 @@ list item. Of course, this only works with two-column tables.
Cells spanning multiple cells or rows can be marked with
⟦*\markcolumnspan {width}⟧ and ⟦*\markrowspan {height}⟧; these statements may not
occur before ⟦\marktablecell⟧. Note that while ⟦\markcolumnspan⟧ properly
-increases the (internal) column number, ⟦\markcolumnrow⟧ does nothing of the
+increases the (internal) column number, ⟦\markrowspan⟧ does nothing of the
sort (and indeed, no general logic can be given in the latter case). Always proceed
with caution when using cells spanning multiple rows, and inspect the resulting
structure carefully.
@@ -529,6 +600,46 @@ For tagging (foot)notes, ⟦*\marknoteref{*}⟧ and ⟦*\marknotelbl{*}⟧, when
around the footnote markers, will insert the proper ⟦Ref⟧, ⟦Note⟧ and ⟦Lbl⟧
tags.
+Helper macros for tagging sections can be setup quickly with
+⟦*\sectionstructure { <section list> }⟧. The ⟦<section list>⟧ should be an
+increasing comma-separated list of section types, e.g.
+⟦{subsection, section, chapter}⟧. This will first reserve the ⟦\count⟧
+registers ⟦\subsectionnr⟧ etc, then create the structure aliases ⟦/Subsection⟧
+etc. and finally define the helper macros ⟦\marksubsection⟧ etc, which will do
+the following:
+\startlist
+\item 1. Call ⟦\ensurestopelement⟧ on all lower section types.
+\item 2. Set all lower section number counts to zero.
+\item 3. Increase the current section type number by one.
+\item 4. Call ⟦\startelement⟧ for the current section type.
+\item 5. Set the ⟦\nextpartag⟧ to ⟦H⟧.
+\stoplist
+The proper place for these helper macros is just before the section heading;
+inbetween those two may come an ⟦\outline⟧ statement (see the previous
+chapter). You can set the ⟦title⟧ option to the internal ⟦\startelement⟧
+statement with an optional argument (e.g.
+⟦\marksection [Section \the\sectionnr]⟧).
+
+\section Tagging the output routine % 1
+
+The command ⟦*\autotagplainoutput⟧ will try and update plain tex’s output routine
+to produce tagged page artifacts and footnotes.
+It redefines ⟦\makeheadline⟧, ⟦\makefootline⟧,
+⟦\footnoterule⟧, ⟦\footnote⟧ and ⟦\vfootnote⟧.
+Headline and footline will not be marked as artifacts if their contents equal
+⟦\hfil⟧; the footnote macros are edited to include the ⟦\marknoteref⟧ and
+⟦\marknotelbl⟧ macros described above.
+Note that the ⟦\topinsert⟧, ⟦\midinsert⟧ and ⟦\pageinsert⟧ macros are left
+untouched; you will have to mark those explicitly.
+
+You can make some changes to the affected macros before calling
+⟦\autotagplainoutput⟧, as it tries to be smart about it.
+Though the redefinitions involve a full expansion,
+most conditionals and common typesetting instructions (⟦\line⟧, ⟦\quad⟧,
+⟦\strut⟧ etc.) are safe-to-use and will not be expanded.
+If you include custom macros of your own, however, it is wise to have those
+⟦\protected⟧.
+
% 
\endmanual
diff --git a/macros/luatex/generic/minim-pdf/minim-pdf.lua b/macros/luatex/generic/minim-pdf/minim-pdf.lua
index 875fd89659..101a548e4b 100644
--- a/macros/luatex/generic/minim-pdf/minim-pdf.lua
+++ b/macros/luatex/generic/minim-pdf/minim-pdf.lua
@@ -229,7 +229,13 @@ local function determine_parent_node(current, se)
end
end
if not c then
- alloc.err('Structure type mismatch: %s in %s', se.struct, current.struct)
+ if tagging_enabled() then
+ alloc.err('Structure type mismatch: %s in %s',
+ pdf_name(se.struct), pdf_name(current.struct))
+ else
+ alloc.msg('Warning (minim-pdf): Structure type mismatch (%s in %s)',
+ pdf_name(se.struct), pdf_name(current.struct))
+ end
end
return c or current
end
@@ -820,6 +826,13 @@ alloc.luadef('lastdestinationname', function() tex.sprint(last_dest_name()) end)
-- provide the arguments to \pdfextension startlink
local link_types = { }
+local function make_link_attr(s)
+ local attr = { 'attr {\\csname minim:linkattr\\endcsname' }
+ if s.attr then table.insert(attr, s.attr) end
+ if s.alt or s.contents then insert_formatted(attr, '/Contents %s', pdf_string(s.alt or s.contents)) end
+ table.insert(attr, '}')
+ return attr
+end
alloc.luadef('hyper:makelink', function()
local s = options_scanner()
:argument('alt'):argument('contents') -- same thing
@@ -832,18 +845,32 @@ alloc.luadef('hyper:makelink', function()
userf = link_types.first
end
local user = userf()
- attr = { 'attr {\\csname minim:linkattr\\endcsname' }
- if s.attr then table.insert(attr, s.attr) end
- if s.alt or s.contents then insert_formatted(attr, '/Contents %s', pdf_string(s.alt or s.contents)) end
- insert_formatted(attr, '} user {%s}', user)
+ local attr = make_link_attr(s)
tex.sprint(table.concat(attr, ' '))
+ tex.sprint('user {')
+ tex.write(user)
+ tex.sprint('}\\ignorespaces')
end)
+local function scan_escaped_argument(chars_to_escape)
+ local stored = { }
+ for char in string.utfvalues(chars_to_escape) do
+ stored[char] = tex.getcatcode(char)
+ tex.setcatcode(char, 12)
+ end
+ local res = token.scan_argument()
+ for char, code in pairs(stored) do
+ tex.setcatcode(char, code)
+ end
+ return res
+end
+
function link_types.dest()
return string.format('/Subtype/Link /A <</S/GoTo /D %s>>', pdf_string(token.scan_argument()))
end
function link_types.url()
- return string.format('/Subtype/Link /A <</S/URI /URI %s>>', pdf_string(token.scan_argument()))
+ local url = scan_escaped_argument ('~#$%^&_')
+ return string.format('/Subtype/Link /A <</S/URI /URI %s>>', pdf_string(url))
end
function link_types.user() return token.scan_argument() end
@@ -855,7 +882,7 @@ function link_types.last() return '/Subtype/Link /A <</S/Named /N/LastPage>>' en
-- 1 bookmarks (outlines)
-- start with a dummy top-level bookmark
-local bookmarks = { { count = 0 } }
+local bookmarks = { { count = 0, level = 0 } }
structure[1].bookmark = bookmarks[1]
local function write_bookmarks()
@@ -870,13 +897,13 @@ local function write_bookmarks()
' <</Type /Outlines /First %s 0 R /Last %s 0 R /Count %s >> ',
bookmarks[2].outline_obj, bookmarks[1].last.outline_obj, #bookmarks - 1))
-- write bookmark objects
- for i=2, #bookmarks do
+ for i=2, #bookmarks do -- skip the root (i=1)
local bm, res = bookmarks[i], { }
insert_formatted(res, '<< /Title %s\n/Parent %s 0 R /Dest %s', pdf_string(bm.title),
bm.parent and bm.parent.outline_obj or bookmarks[1].outline_obj, pdf_string(bm.dest))
if bm.next then insert_formatted(res, '/Next %s 0 R', bm.next.outline_obj) end
if bm.prev then insert_formatted(res, '/Prev %s 0 R', bm.prev.outline_obj) end
- if bm.struct and bm.struct.objnum then
+ if bm.struct and bm.struct.objnum then -- false if no structures are written out
insert_formatted(res, '/SE %s 0 R', bm.struct.objnum)
end
if bm.count > 0 then
@@ -888,37 +915,51 @@ local function write_bookmarks()
end
function M.add_bookmark(bm)
- local se = current_structure_element()
- bm.parent, bm.count = false, 0
- bm.dest = bm.dest or write_new_dest()
- se.bookmark, bm.struct = bm, se
- -- find and update the parent bookmarks
- local p = se.parent
- while p do
- local pbm = p.bookmark
- if pbm then
- if not bm.parent then
- if pbm.last then pbm.last.next = bm end
- bm.parent, bm.prev = pbm, pbm.last
- pbm.first, pbm.last = pbm.first or bm, bm
+ local pbm
+ if bm.level then
+ for i = #bookmarks, 1, -1 do
+ pbm = bookmarks[i]
+ if pbm.level < bm.level then
+ break
end
- -- update the count until the first closed bookmark
- pbm.count = pbm.count + 1
- p = pbm.open and pbm.parent
- else
- p = p.parent
end
+ else
+ local se = current_structure_element()
+ if se.bookmark then
+ return alloc.err('Structure element %s already has a bookmark', pdf_name(se.struct))
+ end
+ se.bookmark, bm.struct = bm, se
+ -- derive parent from strucrure
+ pbm = se.parent
+ while not pbm.bookmark do
+ pbm = pbm.parent
+ end
+ pbm = pbm.bookmark
end
+ -- initial values; links to other bookmarks
+ bm.parent, bm.count = false, 0
+ bm.dest = bm.dest or write_new_dest()
+ if pbm.last then pbm.last.next = bm end
+ bm.parent, bm.prev = pbm, pbm.last
+ pbm.first, pbm.last = pbm.first or bm, bm
+ bm.level = bm.level or (pbm.level + 1)
+ -- update the count until the first closed bookmarks
+ repeat
+ pbm.count = pbm.count + 1
+ pbm = pbm.open and pbm.parent
+ until not pbm
+ -- append to the list
table.insert(bookmarks, bm)
end
alloc.luadef('outline', function()
- local s = options_scanner()
+ local bm = options_scanner()
:keyword('open', 'closed')
:string('dest')
+ :int('level')
:scan()
- s.title = token.scan_string()
- M.add_bookmark(s)
+ bm.title = token.scan_string()
+ M.add_bookmark(bm)
end, 'protected')
@@ -987,7 +1028,7 @@ alloc.luadef('embedfile', function()
t.name = t.file or alloc.err('No name specified for embedded file stream')
end
t.name = pdf_string(t.name or '(unnamed)')
- local fs, ef = M.embed_file(t, t.global)
+ local fs, _ = M.embed_file(t, t.global)
-- where to attach?
if t.global then
table.insert(attached_files, { name = t.name, objnum = fs } )
diff --git a/macros/luatex/generic/minim-pdf/minim-pdf.pdf b/macros/luatex/generic/minim-pdf/minim-pdf.pdf
index 2b2ea69c42..2056601eec 100644
--- a/macros/luatex/generic/minim-pdf/minim-pdf.pdf
+++ b/macros/luatex/generic/minim-pdf/minim-pdf.pdf
Binary files differ
diff --git a/macros/luatex/generic/minim-pdf/minim-pdf.tex b/macros/luatex/generic/minim-pdf/minim-pdf.tex
index 8a5f738063..d5300fd58f 100644
--- a/macros/luatex/generic/minim-pdf/minim-pdf.tex
+++ b/macros/luatex/generic/minim-pdf/minim-pdf.tex
@@ -323,6 +323,84 @@
\markelement{Lbl}{{\stopformulatagging#1}}}
\def\tagging:ensurestopNote{\ensurestopelement{Note}}
+% \sectionstructure { subsection, section, chapter }
+\def\sectionstructure{%
+ \newtoks\tag:sect:resets \tag:sect:resets{}%
+ \splitcommalist\tag:sect:a}
+\def\tag:sect:a#1{\expandafter\tag:sect:b
+ \expandafter{\Uchar\uccode`#1}{#1}}
+\def\tag:sect:b#1#2{% Section section
+ \addstructuretype Sect #1\relax
+ \expandafter\newcount\csname #2nr\endcsname
+ \expandafter\edef\csname mark#2\endcsname{%
+ \noexpand\withoptions[]%
+ \expandafter\noexpand\csname #2:domark\endcsname}%
+ \expandafter\edef\csname #2:domark\endcsname[##1]{%
+ \unexpanded{\ifhmode\errhelp{You should place section markers
+ in the vertical list, before the header.}\errmessage
+ {Section marker in horizontal list}\fi}%
+ \global\advance\expandafter\noexpand
+ \csname #2nr\endcsname1
+ \noexpand\the\expandafter\noexpand
+ \csname #2:resets\endcsname
+ \startelement\noexpand\ifx=##1=\noexpand\else
+ title{##1}\noexpand\fi{#1}%
+ \nextpartag{H}\ignorespaces}%
+ \expandafter\newtoks\csname #2:resets\endcsname
+ \csname #2:resets\endcsname \tag:sect:resets
+ \etoksapp\tag:sect:resets{%
+ \noexpand\ensurestopelement{#1}%
+ \global\expandafter\noexpand\csname#2nr\endcsname0 }}
+
+% tagging the plain output routine
+\begingroup\catcode`\@=11
+\gdef\autotagplainoutput{%
+ \let \vfootnot = \tag:vfootnote
+ \begingroup
+ % these should not be expanded
+ \tag:mkrelax
+ \ifhmode \ifvmode \ifnum \ifdim \ifodd \ifeven
+ \ifcondition \unless \else \fi \next \tmp
+ \strut \strutbox \footstrut
+ \the \number \empty \folio
+ \line \leftline \rightline \centerline
+ \nointerlineskip \offinterlineskip
+ \textindent \narrower \hang \llap \rlap
+ \enspace \thinspace \hidewidth
+ \quad \qquad \enskip
+ \@sf \fo@t \footins
+ \tag:mkrelax
+ % redefine head- and footlines
+ \def\footline{\taggedfootline}%
+ \def\headline{\taggedheadline}%
+ \xdef\makeheadline{\makeheadline}%
+ \xdef\makefootline{\makefootline}%
+ \xdef\footnoterule{\markartifact{Layout}\footnoterule}
+ % redefine vfootnote
+ \def\textindent##1{\noexpand\nextpartag{}%
+ \noexpand\marknotelbl{\noexpand\textindent{##1}}%
+ \noexpand\startelement{P}}%
+ \xdef\vfootnote##1{\vfootnote{##1}}%
+ % redefine footnote
+ \let\vfootnote=\relax \let\textindent=\relax
+ \def\fi##1\@sf{\noexpand\fi\noexpand\marknoteref{##1}\@sf}
+ \xdef\footnote##1{\footnote{##1}}%
+ \endgroup}
+\endgroup
+\def\tag:mkrelax#1{\ifx\tag:mkrelax#1\tag:else
+ \let#1=\relax\expandafter\tag:mkrelax\tag:fi}
+\let\tag:else=\else \let\tag:fi=\fi
+\newtoks \taggedheadline \newtoks \taggedfootline
+\taggedheadline{\tagtoks:nonempty{Pagination /Subtype/Header}\headline}
+\taggedfootline{\tagtoks:nonempty{Pagination /Subtype/Footer}\footline}
+\def\tagtoks:nonempty#1#2{%
+ \edef\tagtoks:tmp{\the#2}%
+ \ifx\tagtoks:tmp\tagtoks:hfil
+ \the#2\else
+ \markartifact{#1}{\the#2}\fi}
+\def\tagtoks:hfil{\hfil}
+
+
% 1 tagging formulas
% \autotagformulas
@@ -408,7 +486,7 @@
% \hyperlink <args> ... \endlink
% args: alt {...} attr {...} <type>
% type: dest {name} | url {url} | next | prev | first | last
-\protected\def\endlink{\pdfextension endlink\stopelement{Link}\relax}
+\protected\def\endlink{\pdfextension endlink\ensurestopelement{Link}\relax}
\protected\def\startlink{\startelement{Link}\pdfextension startlink}
\protected\def\hyperlink{\quitvmode\startlink\hyper:makelink}
diff --git a/macros/luatex/generic/minim/README b/macros/luatex/generic/minim/README
index 4aa90c7cd8..a61e0f74ec 100644
--- a/macros/luatex/generic/minim/README
+++ b/macros/luatex/generic/minim/README
@@ -1,4 +1,4 @@
-Version: 2024/1.4
+Version: 2024/1.5
SUMMARY
@@ -31,6 +31,10 @@ the packages mentioned above.
HISTORY
+2024/1.4 (25/2/2024)
+
+ No changes.
+
2024/1.4 (5/1/2024)
* Documented the pdf resource management module
diff --git a/macros/luatex/generic/minim/minim-doc.sty b/macros/luatex/generic/minim/minim-doc.sty
index 93d807f16a..6f662dced6 100644
--- a/macros/luatex/generic/minim/minim-doc.sty
+++ b/macros/luatex/generic/minim/minim-doc.sty
@@ -42,7 +42,7 @@
\font\tenrm {Latin Modern Roman:script=latn;protrusion=default;} at 10pt
\font\tenbf {Latin Modern Roman/B:script=latn;} at 10pt
\font\tenit {Latin Modern Roman/I:script=latn;} at 10pt
-\font\tentt {Latin Modern Mono:script=latn;+smcp;} at 10pt
+\font\tentt {Latin Modern Mono:script=latn;} at 10pt
\font\title {Latin Modern Roman/B:script=latn;} at 12pt
\font\Title {Latin Modern Roman/B:script=latn;} at 16pt
@@ -122,25 +122,8 @@ endfig;}
% 1 document structure
-% page artifacts
-\edef\tmp{\markartifact{Pagination /Subtype/Footer}{\the\footline}}
-\footline\expandafter{\tmp}
-
-% footnotes
-\edef\footnoterule{\markartifact{Layout}\footnoterule}
-\catcode`\@=11
-\def\footnote#1{\let\@sf\empty % parameter #2 (the text) is read later
- \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
- \marknoteref{#1}\@sf\vfootnote{#1}}
-\def\vfootnote#1{%
- \insert\footins\bgroup
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\ht\strutbox % top baseline for broken footnotes
- \splitmaxdepth\dp\strutbox \floatingpenalty\@MM
- \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip
- \nextpartag{}\marknotelbl{#1}\enspace\startelement{P}%
- \footstrut\futurelet\next\fo@t}
-\catcode`\@=12
+\autotagplainoutput
+\def\textindent#1{\noindent#1\enspace\ignorespaces}
% \startlist \item x. ... \stoplist
\def\listskip{\vskip 3pt plus 2pt\vskip-\parskip}
@@ -151,31 +134,26 @@ endfig;}
\hbox to 2em{\hss\startelement{Lbl}#1.~~}%
\startelement{LBody}\ignorespaces}
+\sectionstructure{section, chapter}
+
% \chapter Title \par
-\addstructuretype Sect Chapter
\protected\def\chapter#1 \par{%
\vfil\break
- \ensurestopelement{Section}%
- \global\advance\chapterno1 \global\sectionno0
- \startelement title{Chapter \the\chapterno}{Chapter}%
+ \markchapter[Chapter \the\chapternr]%
\outline open {#1}%
\addtotoc{\chapter{#1}{\lastdestinationname}}%
\nextpartag{H}\quitvmode
\red{\Title#1\hfill\copy\notehead}\bigskip\nobreak}
-\newcount \chapterno
% \section Title \par
-\addstructuretype Sect Section
\protected\def\section#1 \par{%
\bigskip\penalty-50\relax
- \global\advance\sectionno1
- \startelement title{Section \the\chapterno.\the\sectionno}{Section}%
+ \marksection[Section \the\chapternr.\the\sectionnr]%
\outline closed {#1}%
\addtotoc{\section{#1}{\lastdestinationname}}%
\nextpartag{H}\quitvmode
\red{\title#1}%
\par\nobreak}
-\newcount \sectionno
% table of contents
\newtoks\toc \newif\iftoc \toctrue
diff --git a/macros/luatex/generic/minim/minim-pdfresources.lua b/macros/luatex/generic/minim/minim-pdfresources.lua
index 468da03b48..66d168f4ec 100644
--- a/macros/luatex/generic/minim/minim-pdfresources.lua
+++ b/macros/luatex/generic/minim/minim-pdfresources.lua
@@ -121,7 +121,7 @@ local removal_regex = {
local function update_page_resources(shippingout)
if M.self_destruct then return end
local resources = shippingout and pdf.getpageresources() or pdf.getxformresources() or ''
- for kind, used in pairs(page_resources) do
+ for kind, _ in pairs(page_resources) do
resources = string.gsub(resources, removal_regex[kind], '')
local entry = make_resource_entry(kind)
if entry then
diff --git a/macros/luatex/generic/minim/minim.doc b/macros/luatex/generic/minim/minim.doc
index e975718b1e..ef35a8ea4e 100644
--- a/macros/luatex/generic/minim/minim.doc
+++ b/macros/luatex/generic/minim/minim.doc
@@ -4,8 +4,8 @@
\startmetadata
author {Esger Renkema}
title {minim}
- date {2024-01-05}
- version {2024/1.4}
+ date {2024-02-25}
+ version {2024/1.5}
keywords {LuaTeX; Plain TeX; MetaPost; PDF/A; Tagged PDF; accessibility; a11y;
Unicode mathematics; XMP; metadata; hypertext; bookmarks}
stopmetadata
@@ -39,11 +39,8 @@ For building your own format files, you can re-use the file \red{minim.ini}:
if you define ⟦\fmtname⟧ before inputting this file, no ⟦\dump⟧ will be
performed.
-
-\bigskip
-
-\tocfalse \section Contents \par \bigskip
-\begingroup \parskip1pt
+\tocfalse \section Contents \par
+\smallskip \begingroup \parskip1pt
\protected\def\chapter#1#2#3{%
\stopelement{TOC}\smallskip
\nextpartag{}\red{\tenbf\marktocentry{#2}{}{\strut#1}{\hfill~}{#3}}%
@@ -60,11 +57,9 @@ performed.
One central design goal of minim is to be as unobtrusive as possible: you
should be able to safely ignore any function you do not want to use.
Please get in touch if you find this not the case.
-
Particular care has been taken to be compatible with \red{ltluatex}. All
overlapping functions should produce the same results and ltluatex can be
loaded either before or after minim.
-Earlier incompatibilities with \red{pgf} have been resolved.
\licencesection
diff --git a/macros/luatex/generic/minim/minim.pdf b/macros/luatex/generic/minim/minim.pdf
index 3848cf5103..e632089dfa 100644
--- a/macros/luatex/generic/minim/minim.pdf
+++ b/macros/luatex/generic/minim/minim.pdf
Binary files differ
diff --git a/macros/luatex/generic/penlightplus/penlightplus.lua b/macros/luatex/generic/penlightplus/penlightplus.lua
index 6aa1331fdd..a831c6721d 100644
--- a/macros/luatex/generic/penlightplus/penlightplus.lua
+++ b/macros/luatex/generic/penlightplus/penlightplus.lua
@@ -1,6 +1,6 @@
--% Kale Ewasiuk (kalekje@gmail.com)
---% 2023-12-08
---% Copyright (C) 2021-2023 Kale Ewasiuk
+--% 2024-02-29
+--% Copyright (C) 2021-2024 Kale Ewasiuk
--%
--% Permission is hereby granted, free of charge, to any person obtaining a copy
--% of this software and associated documentation files (the "Software"), to deal
@@ -143,8 +143,9 @@ function penlight.tex.wrth(s1, s2) -- helpful printing, makes it easy to debug,
end
wrt2('\n^^^^^\n')
end
+penlight.wrth = penlight.tex.wrth
+penlight.tex.help_wrt = penlight.tex.wrth
penlight.help_wrt = penlight.tex.wrth
-penlight.wrth = penlight.help_wrt
function penlight.tex.prt_array2d(t)
for _, r in ipairs(t) do
@@ -456,22 +457,18 @@ function str_mt.__index.subpar(s, r)
end
-function str_mt.__index.fmt(s, t, fmt) -- format a $1 string with an array or table and formats
- -- formats can be a luakeys string, or a table
- fmt = fmt or {}
- if type(fmt) == 'string' then
- fmt = penlight.tablex.strinds(penlight.luakeys.parse(fmt, {naked_as_value=true}))
- end
+function str_mt.__index.fmt(s, t, fmt) -- format a $1 and $k string with an array or table and formats
+ -- formats can be a luakeys string, or a table and are applied to table before string is formatted
if type(t) ~= 'table' then t = {t} end
t = penlight.tablex.strinds(t)
- for k, f in pairs(fmt) do -- apply formats
- t[k] = string.format('%'..f, t[tostring(k)])
- end
+ t = penlight.tablex.fmt(t, fmt, true)
return s % t
end
-
-
+function str_mt.__index.parsekv(s, t) -- parsekv string
+ if type(t) ~= 'table' then t = penlight.luakeys.parse(t) end
+ return penlight.luakeys.parse(s, t)
+end
-- -- -- -- function stuff
@@ -532,6 +529,37 @@ function penlight.tablex.strinds(t) -- convert indices that are numbers to strin
end
+function penlight.tablex.listcontains(t, v)
+ return penlight.tablex.find(t, v) ~= nil
+end
+
+
+-- format contents of a table
+function penlight.tablex.fmt(t, fmt, strinds)
+ if fmt == nil then
+ return t
+ end
+ strinds = strinds or false -- if your fmt table should use string indexes
+ if type(fmt) == 'string' then
+ if not fmt:find('=') then -- if no = assume format all same
+ for k, v in pairs(t) do -- apply same format to all
+ if tonumber(v) ~= nil then -- only apply to numeric values
+ t[k] = string.format("%"..fmt, v)
+ end
+ end
+ return t
+ else
+ fmt = fmt:parsekv('naked_as_value') -- make fmt a table from keyval str
+ end
+ end
+ if strinds then fmt = penlight.tablex.strinds(fmt) end -- convert int inds to str inds
+ for k, f in pairs(fmt) do -- apply formatting to table
+ t[k] = string.format("%"..f, tostring(t[k]))
+ end
+ return t
+end
+
+
function penlight.tablex.map_slice(func, T, j1, j2)
if type(j1) == 'string' then
return penlight.array2d.map_slice(func, {T}, ','..j1)[1]
@@ -556,24 +584,25 @@ function penlight.tablex.filterstr(t, exp, case)
end
end
-
+--todo add doc
function penlight.utils.filterfiles(...)
-- f1 is a series of filtering patterns, or condition
-- f2 is a series of filtering patters, or condition
-- (f1_a or f2_...) and (f2 .. ) must match
local args = table.pack(...)
- -- todo -- check where boolean is for recursive or not, set starting argument
+ -- dir, recursive[bool], filt1, filt2 etc...
+ -- OR recursive[bool], filt1, filt2, etc..
+ -- OR filt1, filt2, filt3, etc..
-- this could allow one to omit dir
- -- todo if no boolean at all, assume dir = '.' and r = false
- -- if boolean given, assume dir = '.'
+ -- if boolean given ar arg 1, assume dir = '.'
local nstart = 3
- local r = args[2]
- local dir = args[1]
+ local r = args[2] -- recursive
+ local dir = args[1] -- start dir
if type(args[1]) == 'boolean' then
dir = '.'
r = args[1]
nstart = 2
- elseif type(args[2]) ~= 'boolean' then
+ elseif type(args[2]) ~= 'boolean' then -- if boolean given ar arg 1, assume dir = '.'
dir = '.'
r = false
nstart = 1
@@ -591,7 +620,6 @@ end
-
-- -- -- -- -- -- -- -- functions below extend the array2d module
@@ -808,6 +836,18 @@ function penlight.tex.split2items(s, d)
end
+function penlight.toggle_luaexpr(expr)
+ if expr then
+ tex.sprint('\\toggletrue{luaexpr}')
+ else
+ tex.sprint('\\togglefalse{luaexpr}')
+ end
+end
+
+
+
+
+
penlight.tbls = {}
penlight.rec_tbl = ''
@@ -820,6 +860,11 @@ function penlight.get_tbl_name(s)
return s
end
+function penlight.get_tbl(s)
+ s = penlight.get_tbl_name(s)
+ return penlight.tbls[s]
+end
+
function penlight.get_tbl_index(s)
local tbl = ''
local key = ''
@@ -830,6 +875,7 @@ function penlight.get_tbl_index(s)
elseif s:find('/') then
local tt = s:split('/')
tbl = tt[1]
+ if tbl == '' then tbl = penlight.rec_tbl end
key = tonumber(tonumber(tt[2]))
if key < 0 then key = #penlight.tbls[tbl]+1+key end
else
@@ -837,6 +883,7 @@ function penlight.get_tbl_index(s)
key = tonumber(s) or s
if type(key) == 'number' and key < 0 then key = #penlight.tbls[tbl]+1+key end
end
+ if tbl == '' then tbl = penlight.rec_tbl end
if penlight.tbls[tbl] == nil or penlight.tbls[tbl][key] == nil then
penlight.tex.pkgerror('penlightplus', 'Invalid index of tbl using: "'..s..'"')
end
@@ -881,10 +928,26 @@ function penlight.check_recent_tbl_undefault()
end
end
+function penlight.def_tbl(ind, def, g)
+ local _tbl, _key = penlight.get_tbl_index(ind)
+ if def == '' then def = 'dtbl'.._tbl.._key end
+ token.set_macro(def, tostring(penlight.tbls[_tbl][_key]), g)
+end
+
+function penlight.def_tbl_all(ind, def)
+ local _tbl = penlight.get_tbl_name(ind)
+ if def == '' then def = 'dtbl'.._tbl end
+ for k, v in pairs(penlight.tbls[_tbl]) do
+ token.set_macro(def..k, tostring(v))
+ end
+end
+
-- TODO TODO TODO get error working xy def, and referene which table for key-vals
penlight.tbl_xysep = '%s+' -- spaces separate x-y coordinates
-function penlight.def_tbl_coords(str, def)
- -- todo could definitely make this flexible for a table...
+function penlight.def_tbl_coords(ind, def)
+ local tbl, key = penlight.get_tbl_index(ind)
+ local str = penlight.tbls[tbl][key]
+ if def == '' then def = 'dtbl'..tbl..key end
local x, y = str:strip():splitv(penlight.tbl_xysep)
if (not penlight.hasval(x)) or (not penlight.hasval(y)) then
penlight.tex.pkgerror('penlightplus', 'def_tbl_coords function could not parse coordiantes given as "'..str..'" ensure two numbers separated by space are given!', '', true)
@@ -894,7 +957,14 @@ function penlight.def_tbl_coords(str, def)
end
---
+
+
+
+
+
+
+
+-- global setting type stuff
function penlight.make_tex_global()
for k,v in pairs(penlight.tex) do -- make tex functions global
diff --git a/macros/luatex/generic/penlightplus/penlightplus.pdf b/macros/luatex/generic/penlightplus/penlightplus.pdf
index 17d95268eb..8f4fcb9717 100644
--- a/macros/luatex/generic/penlightplus/penlightplus.pdf
+++ b/macros/luatex/generic/penlightplus/penlightplus.pdf
Binary files differ
diff --git a/macros/luatex/generic/penlightplus/penlightplus.sty b/macros/luatex/generic/penlightplus/penlightplus.sty
index f5ffc0f176..ee7ff3ad11 100644
--- a/macros/luatex/generic/penlightplus/penlightplus.sty
+++ b/macros/luatex/generic/penlightplus/penlightplus.sty
@@ -1,6 +1,6 @@
% Kale Ewasiuk (kalekje@gmail.com)
-% 2023-12-08
-% Copyright (C) 2021-2023 Kale Ewasiuk
+% 2024-02-29
+% Copyright (C) 2021-2024 Kale Ewasiuk
%
% Permission is hereby granted, free of charge, to any person obtaining a copy
% of this software and associated documentation files (the "Software"), to deal
@@ -22,7 +22,7 @@
% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
% OR OTHER DEALINGS IN THE SOFTWARE.
-\ProvidesPackage{penlightplus}[2023-12-08]
+\ProvidesPackage{penlightplus}[2024-02-29]
\RequirePackage{luacode}
\RequirePackage{luakeys}
@@ -84,22 +84,16 @@
\newtoggle{luaexpr}\togglefalse{luaexpr}
\begin{luacode*}
- function toggle_luaexpr(expr)
- if expr then
- tex.sprint('\\toggletrue{luaexpr}')
- else
- tex.sprint('\\togglefalse{luaexpr}')
- end
- end
+
\end{luacode*}
-\NewDocumentCommand{\ifluax}{m m O{}}{%
- \luadirect{toggle_luaexpr(#1)}%
+\NewDocumentCommand{\ifluax}{m m O{}}{% if lua expression is true do {m} if not [o]
+ \luadirect{penlight.toggle_luaexpr(#1)}%
\iftoggle{luaexpr}{#2}{#3}%
\togglefalse{luaexpr}% safety set to false
}
-\NewDocumentCommand{\ifluaxv}{m m O{}}{\ifluax{penlight.hasval(#1)}{#2}[#3]}
+\NewDocumentCommand{\ifluaxv}{m m O{}}{\ifluax{penlight.hasval(#1)}{#2}[#3]}% if lua expression is truthy do {m} else [o]
@@ -116,6 +110,10 @@
penlight.rec_tbl = \luastring{#1}
}}
+\NewDocumentCommand{\tblfrkvCD}{m +m O{}}{\tblfrkv{#1}{#2}[#3]\tblkvundefcheck\tbldefall{}{}}
+%% tbl from key-vals, then check defaults, then define all keys using default format
+\NewDocumentCommand{\tblfrkvNCD}{m +m O{}}{\tblfrkvN{#1}{#2}[#3]\tblkvundefcheck\tbldefall{}{}}
+
\NewDocumentCommand{\tblfrkvN}{m +m O{}}{\luadirect{%
penlight.rec_tbl_opts = penlight.luakeys.parse(\luastring{#3})
penlight.tbls[\luastring{#1}] = penlight.luakeys.parse(string.subpar(\luastringN{#2}), penlight.rec_tbl_opts)
@@ -124,9 +122,38 @@
\NewDocumentCommand{\tblfrcsv}{m +m O{}}{\tblfrkv{#1}{#2}[naked_as_value=true,#3]}
+\NewDocumentCommand{\tblfrcsvN}{m +m O{}}{\tblfrkvN{#1}{#2}[naked_as_value=true,#3]}
+
\NewDocumentCommand{\tblkvundefcheck}{}{\luadirect{penlight.check_recent_tbl_undefault()}}% check defaults list and throw error if foreign keys were used
+
+
+\NewDocumentCommand{\tblapp}{m m}{\luadirect{% append to a table (ie using integer index) with a value (second arg) # todo option for string or number
+ __tbl__ = penlight.get_tbl_name(\luastring{#1})
+ table.insert(penlight.tbls[__tbl__], \luastring{#2})
+}}
+
+\NewDocumentCommand{\tblcon}{m m}{\luadirect{% concatenate to a table (ie using integer index) with a list of comma separated values (second arg) #
+ __tbl__ = penlight.get_tbl_name(\luastring{#1})
+ for k, v in ipairs(penlight.luakeys.parse(string.subpar(\luastring{#2}), {naked_as_value=true})) do
+ table.insert(penlight.tbls[__tbl__], v)
+ end
+}}
+
+\NewDocumentCommand{\tbladd}{m m m}{\luadirect{% add a kv pair to a table
+ __tbl__ = penlight.get_tbl_name(\luastring{#1})
+ penlight.tbls[__tbl__][\luastring{#2}] = \luastring{#3}
+}}
+
+\NewDocumentCommand{\tbladdN}{m m m}{\luadirect{% add a kv pair to a table
+ __tbl__ = penlight.get_tbl_name(\luastring{#1})
+ penlight.tbls[__tbl__][\luastring{#2}] = \luastringN{#3}
+}}
+
+
+
+
\NewDocumentCommand{\tblchg}{ m }{\luadirect{% change recent table
penlight.rec_tbl = \luastring{#1}
}}
@@ -140,36 +167,21 @@
penlight.set_tbl_item(\luastring{#1}, \luastring{#2})
}}
-% todo if no definition is provided, assume <tblname><key>
-\NewDocumentCommand{\tbldef}{ m m }{\luadirect{% define a {table key}{def}
- local _tbl, _key = penlight.get_tbl_index(\luastring{#1})
- local _tbl_def_ = \luastring{#2}
- if _tbl_def_ == '' then _tbl_def_ = 'dtbl'.._tbl.._key end
- token.set_macro(_tbl_def_, tostring(penlight.tbls[_tbl][_key]))
-}}
-\NewDocumentCommand{\tbldefall}{ m m }{\luadirect{% define all {table} keys to {table} \table<key1>
- % todo maybe change tbldef {def} to [def] and make same as table name
- local _tbl = penlight.get_tbl_name(\luastring{#1})
- local _tbl_def_ = \luastring{#2}
- if _tbl_def_ == '' then _tbl_def_ = 'dtbl'.._tbl end
- for k, v in pairs(penlight.tbls[_tbl]) do
- token.set_macro(_tbl_def_..k, tostring(v))
- end
-}}
+\NewDocumentCommand{\tbldef}{ m m }{\luadirect{penlight.def_tbl(\luastring{#1}, \luastring{#2})}}
+% define a table, use * to make global definition
+\NewDocumentCommand{\tblgdef}{ m m }{\luadirect{penlight.def_tbl(\luastring{#1}, \luastring{#2}, 'global')}}
-\NewDocumentCommand{\tblgdef}{ m m }{\luadirect{% define a table, use * to make global definition
- token.set_macro(\luastring{#2}, tostring(penlight.get_tbl_item(\luastring{#1})), 'global')
-}}
-
-\NewDocumentCommand{\tbldefxy}{ m m }{\luadirect{penlight.def_tbl_coords(penlight.get_tbl_item(\luastring{#1}), \luastring{#2})}}% define #2x and #2y from a space delimited x-y pair
+\NewDocumentCommand{\tbldefall}{ m m }{\luadirect{penlight.def_tbl_all(\luastring{#1}, \luastring{#2})}}
+\NewDocumentCommand{\tbldefxy}{ m m }{\luadirect{penlight.def_tbl_coords(\luastring{#1}, \luastring{#2})}}% define #2x and #2y from a space delimited x-y pair
\NewDocumentCommand{\tblif}{m m O{}}{\ifluax{penlight.get_tbl_item(\luastring{#1})}{#2}[#3]}
\NewDocumentCommand{\tblifv}{m m O{}}{\ifluaxv{penlight.get_tbl_item(\luastring{#1})}{#2}[#3]}
+\NewDocumentCommand{\tblprt}{m}{\luadirect{penlight.wrth(penlight.get_tbl(\luastring{#1}),'penlightplus table: '..\luastring{#1})}}
% legacy code, delete this
\let\kvtblundefcheck\tblkvundefcheck
diff --git a/macros/luatex/generic/penlightplus/penlightplus.tex b/macros/luatex/generic/penlightplus/penlightplus.tex
index 988a51bb2a..53488619bf 100644
--- a/macros/luatex/generic/penlightplus/penlightplus.tex
+++ b/macros/luatex/generic/penlightplus/penlightplus.tex
@@ -1,6 +1,6 @@
% Kale Ewasiuk (kalekje@gmail.com)
-% 2023-12-08
-% Copyright (C) 2021-2023 Kale Ewasiuk
+% 2024-02-29
+% Copyright (C) 2021-2024 Kale Ewasiuk
%
% Permission is hereby granted, free of charge, to any person obtaining a copy
% of this software and associated documentation files (the "Software"), to deal
@@ -35,11 +35,11 @@
\setlength\ResultBoxRule{0mm}
\lstset{
language=[LaTeX]TeX,
- basicstyle=\ttfamily\small,
- commentstyle=\ttfamily\small\color{gray},
+ basicstyle=\ttfamily\footnotesize,
+ commentstyle=\ttfamily\footnotesize\color{gray},
frame=none,
numbers=left,
- numberstyle=\ttfamily\small\color{gray},
+ numberstyle=\ttfamily\footnotesize\color{gray},
prebreak=\raisebox{0ex}[0ex][0ex]{\color{gray}\ensuremath{\hookleftarrow}},
extendedchars=true,
breaklines=true,
@@ -53,7 +53,7 @@
\date{\today}
-\RequirePackage{penlightplus}
+\RequirePackage[pl,globals]{penlightplus}
\title{penlightplus}
\subtitle{Additions to the Penlight Lua Libraries}
@@ -97,14 +97,28 @@ The gloals flags below are taken care of in the package options:\\
\cmd{__PL_NO_HYPERREF__} a flag used to change the behaviour of a function, depending on if you don't use the hyperref package\\
\cmd{__PDFmetadata__} a table used to store PDF meta-data
+
+\subsubsection*{global extras}
+If the package option \cmd{globals} is used, many additional globals are set for easier scripting.
+\cmd{pl.hasval}, \cmd{pl.COMP}, \cmd{pl.utils.kpairs}, \cmd{pl.utils.npairs} become globals.
+\cmd{pl.tablex} is aliased as \cmd{pl.tbx and tbx} (which also includes all native Lua table functions), and
+\cmd{pl.array2d} is aliased as \cmd{pl.a2d and a2d}.
+
+If you want global \cmd{pl.tex} funcs and vars, call \cmd{pl.make_tex_global()}\\
+
+
\subsubsection*{penlight additions}
Some functionality is added to penlight and Lua.
\llcmd{pl.hasval(x)} Python-like boolean testing\\
\llcmd{COMP'xyz'()} Python-like comprehensions:\\\url{https://lunarmodules.github.io/Penlight/libraries/pl.comprehension.html}\\
+
+\cmd{clone_function(f)} returns a cloned function\\
+\cmd{operator.strgt(a,b)} compares strings a greater than b (useful for sorting)\\
+\cmd{operator.strlt(a,b)} compares strings a less than b (useful for sorting)\\
+
\llcmd{math.mod(n,d)}, \cmd{math.mod2(n)} math modulous\\
-\\
\llcmd{string.}\cmd{upfirst(s)} uppercase first letter\\
\llcmd{string.}\cmd{delspace(s)} delete all spaces\\
@@ -123,6 +137,16 @@ Some functionality is added to penlight and Lua.
a few improvements. \cmd{t} can be an array (reference items like \cmd{\$1} in the string),
and \cmd{fmt} can be a table of formats (keys correspond to those in \cmd{t}), or a string that
is processed by luakeys.\\
+\llcmd{string.}\cmd{parsekv(s, opts)} parse a string using \cmd{penlight.luakeys}. A string or table can be used for opts.
+
+\llcmd{tablex.}\cmd{fmt(t, f)} format a table with table or key-value string f\\
+\llcmd{tablex.}\cmd{strinds(t)} convert integer indexes to string indices (1 -> '1')\\
+\llcmd{tablex.}\cmd{filterstr(t,e,case)} keep only values in table t that contain expression e, case insensitive by default.\\
+\llcmd{tablex.}\cmd{mapslice(f,t,i1,i2)} map a function to elements between i1 and i2\\
+\llcmd{tablex.}\cmd{listcontains(t,v)} checks if a value is in a array-style list \\
+
+
+
\llcmd{pl.}\cmd{char(n)} return letter corresponding to 1=a, 2=b, etc.\\
\llcmd{pl.}\cmd{Char(n)} return letter corresponding to 1=A, 2=B, etc.\\
@@ -156,17 +180,13 @@ to a package warning saying \cmd{'cs' was declared and used in document, but nev
is true, it will overwrite an existing command (using \cmd{defcmd}), otherwise, it will throw error like \cmd{newcmd}.\\
\llcmd{get_ref_info(l)}accesses the \cmd{\r@label} and returns a table\\
+\subsubsection*{Recording latex input}
+\cmd{penlight.tex.startrecording()} start recording input buffer without printing to latex\\
+\cmd{penlight.tex.stoprecording()} stop recording input buffer\\
+\cmd{penlight.tex.readbuf()} internal-use function that interprets the buffer. This will ignore an environment ending (eg. \cmd{end{envir}})\\\\
+\cmd{penlight.tex.recordedbuf} the string variable where the recorded buffer is stored\\
-\subsubsection*{global extras}
-If the package option \cmd{globals} is used, many additional globals are set for easier scripting.
-\cmd{pl.hasval}, \cmd{pl.COMP}, \cmd{pl.utils.kpairs}, \cmd{pl.utils.npairs} become globals.
-\cmd{pl.tablex} is aliased as \cmd{pl.tbx and tbx} (which also includes all native Lua table functions), and
-\cmd{pl.array2d} is aliased as \cmd{pl.a2d and a2d}.
-
-If you want global \cmd{pl.tex} funcs and vars, call \cmd{pl.make_tex_global()}
-\\
-
\subsection*{Macro helpers}
@@ -224,17 +244,27 @@ no, once, twice, or full expansion. For example, we can control the expansion of
\cmd{\tblchg{t}} changes the 'recent' table\\
\cmd{\tblfrkv{t}{key-val string}[luakeys opts]} new table from key-vals using \cmd{luakeys} \\
\cmd{\tblfrkvN{t}{key-val string}[luakeys opts]} does not expand key-val string \cmd{luakeys} \\
- \cmd{\tblfrcsv} a shorthand \cmd{\tblfrkv{t}{csv}[naked_as_value=true,opts]}, a good way to convert a comma-separated list to an array\\
+\cmd{\tblfrkvCD{t}{key-val string}[luakeys opts]} define tbl from key-val,
+check if any were not defined as defaults (see below), and then push all to definitions\\
+\cmd{\tblkvundefcheck} will throw an error if you use define a table from key-values
+and use a key that was not specified in the luakeys parse options via \cmd{opts.defaults} or \cmd{opts.defs}.
+ \cmd{\tblfrcsv{t}{csv}} a shorthand \cmd{\tblfrkv{t}{csv}[naked_as_value=true,opts]}, a good way to convert a comma-separated list to an array\\
+ \cmd{\tblfrcsvN{t}{csv}} same as above, but the csv is not expanded.
\cmd{\tblset{i}{v}} sets a value of the table/index \cmd{i} to \cmd{v}\\
-\cmd{\tblget{i}} gets the value and \cmd{tex.sprint()}'s it\\
+\cmd{\tblget{i}} gets the value and \cmd{tex.sprint()}s it\\
+\cmd{\tbladd{i}{v}} add a new value to a table using index method\\
+\cmd{\tbladdN{i}{v}} above, but don't expand the value argument\\
+\cmd{\tblcon{t}{csv}} concatenate an array-style csv\\
+\cmd{\tblapp{t}{v}} append a value (integer-wise) to a table\\
\cmd{\tbldef{i}{d}} pushes the value to macro \cmd{d}\\
-\cmd{\tbldefall{t}{d}} define all item in table \cmd{t} (use recent if blank) with format \cmd{d<key>}, if \cmd{d} is blank, commands are defined as \cmd{tbl<t><k>} \\
-\cmd{\tblgdef{i}{d}} pushes the value to a global\\
+\cmd{\tbldefall{t}{d}} define all item in table \cmd{t} (use recent if blank) with format \cmd{d<key>} where d is your prefix. If d is blank, keys will be defined as \cmd{\dtbl<t><k>}
+\cmd{\tblgdef{i}{d}} pushes the defined value to a global\\
\cmd{\tbldefxy{i}{d}} splits the value of item by spaces creates two definitions \cmd{\dx} and \cmd{\dy}. Useful for pasing tikz coordinates like \cmd{xy=0 5}\\
+For definiting tables, if \cmd{d} is blank, commands are defined as \cmd{dtbl<t><k>}\\
\cmd{\iftbl{i}{tr}[fa]} runs code \cmd{ta} if the item is true else \cmd{fr}\\
\cmd{\iftblv{i}{tr}[fa]} runs code \cmd{ta} if the item is truthy else \cmd{fr}\\
-\cmd{\tblkvundefcheck} will throw an error if you use define a table from key-values
-and use a key that was not specified in the luakeys parse options via \cmd{opts.defaults} or \cmd{opts.defs}.
+
+\cmd{\tblprt{t}} print the table in console
There are 3 ways to use the index (placeholder \cmd{{i}} above).
\cmd{t.key} where \cmd{t} is the table name and \cmd{key} is a string key,
@@ -248,6 +278,7 @@ or simply use \cmd{ind} without the table name, where the assumed table is the l
\tblset{a}{tRuE!!}
\tblget{a}\\
\tblget{my.x}\\
+\tblget{.x}\\
\tblif{n}{tr}[fa]\\
\tblifv{n}{TR}[FA]\\
\tblif{my.y}{Tr}[Fa]\\
@@ -263,14 +294,21 @@ or simply use \cmd{ind} without the table name, where the assumed table is the l
\tblset{my.a}{12 36}
\tbldefxy{my.a}{coord} (\coordx,\coordy)
+\tbldefxy{my.a}{} (\dtblmyax,\dtblmyay)
+\tbldefxy{a}{} (\dtblmyax,\dtblmyay)
\tblfrcsv{me}{a,b,"c,see",d,e}
\tblget{me/1},\tblget{2}\\
\tblget{3}\\
-\tblset{me/4}{D}\tblget{me/4}\\
+\tblset{me/4}{D}\tblget{me/4}\tblget{/4}\\
\tblset{5}{E}\tblget{5}\\
\tblget{-2},\tblget{me/-1}\\
+\tblget{/-3}\\
%% \tblget{k} % would throw error
+
+\tblfrkvCD{M}{a=A,b=B,d=D}[defaults={a,b,c,d}]
+\dtblMa \dtblMb \dtblMc \dtblMd
+
\end{LTXexample}
@@ -287,6 +325,38 @@ Note: for this versions: all latex tbl commands are now prefixed with \cmd{tbl},
Old-style commands eg. \cmd{gettbl} will be kept as aliases for a few more releases then removed.
+\subsubsection*{A practical tbl example}
+
+\begin{LTXexample}
+\begin{luacode*}
+ function prt_pyth()
+ t = pl.tbls.pyth
+ if not t.a then
+ pl.tex.pkgerror('must pass a= to \\pyth')
+ elseif not t.b then
+ t.b = (tonumber(t.c)^2 -
+ tonumber(t.a)^2)^0.5
+ elseif not t.c then
+ t.c = (tonumber(t.a)^2 +
+ tonumber(t.b)^2)^0.5
+ end
+ local t = pl.tbx.fmt(t,'.'..t.d..'f') -- format table according to d decimals
+ s = 'Right-angle sides a=$a and b=$b form a hypotenuse of c=$c'
+ pl.tex.prt(s:fmt(t))
+ end
+\end{luacode*}
+\NewDocumentCommand{\pyth}{m}{%
+ \tblfrkv{pyth}{#1}[defaults={a=false,b=false,c=false,d=0,e=extras}]
+ \luadirect{prt_pyth()}%
+}
+
+\pyth{a=3,c=5}\\
+\pyth{a=3.2,b=4.2,d=2}\\
+C: \tblget{c}
+
+\end{LTXexample}
+
+
\subsection*{Splitting strings}
Splitting text (or a cmd) into oxford comma format via:
\cmd{\splittocomma[expansion level]{text}{text to split on}}:
@@ -314,9 +384,20 @@ You can do a similar string split but to \cmd{\item} instead of commas with \cmd
+\subsubsection*{PDF meta data (for pdfx package)}
+\cmd{\writePDFmetadatakv*{m}} Take a key-value string (eg. \cmd{title=whatever, author=me}) and writes to the \cmd{jobname.xmpdata} file, to be used by pdfx. \cmd{*} will first clear the data\\
+\cmd{\writePDFmetadata} runs the lua function \cmd{penlight.tex.writePDFmetadata()},
+which pushes the lua variable \cmd{__PDFmetadata__} (a table) to the xmpdata file.
+
+
+%\pyth{} % erro
+%\begin{luacode*}
+% pl.tex.wrth(('a,b,c=3'):parsekv('!naked_as_value'), 'dumy')
+%\end{luacode*}
+
% \tblfrkv{tbl_def}{kale=cool,paul=gay,craig=fun}
% \tblfrkv{tbl}{kale,paul=gay} %[naked_as_value=true]
%
@@ -338,24 +419,25 @@ You can do a similar string split but to \cmd{\item} instead of commas with \cmd
%
% \THINg[color=blue,size=tiny]{Kale}
%
-%\begin{luacode*}
-%penlight.wrth(('$1'):fmt(5.5,'.8f','XYZ'))
-%function prttol()
-% penlight.tbls.tol[3] = penlight.tbls.tol[3] or 3
-% penlight.tbls.tol[4] = penlight.tbls.tol[1]*(1.0-penlight.tbls.tol[3]/100.0) + 0.0
-% penlight.tbls.tol[5] = penlight.tbls.tol[1]*(1.0+penlight.tbls.tol[3]/100.0) + 0.0
-% penlight.tbls.tol['k'] = 'fuckboi'
-% penlight.wrth(('$k $1\\$2 (\\pmpct{$3} tolerance, $4\\ndash$5\\$2)'):fmt(penlight.tbls.tol, '4=.1f, 5=.1f'), 'XYZ')
-%end
-%\end{luacode*}
-%\NewDocumentCommand{\prttol}{ m }{% {50.0,kV,3} % 50\us (\pmpct{20} tolerance, 40=--60\us)
-%\tblfrcsv{tol}{#1}\luadirect{prttol()}}
-%
-%\prttol{50,kV,3.21}
-%
-%\begin{luacode*}
-%--pl.wrth(('2.23'):gnum())
-%\end{luacode*}
+\begin{luacode*}
+function prttol()
+ local dec = penlight.tbls.tol[4] or 1
+ penlight.wrth(dec,'??')
+ penlight.tbls.tol[3] = penlight.tbls.tol[3] or 3
+ penlight.tbls.tol[4] = penlight.tbls.tol[1]*(1.0-penlight.tbls.tol[3]/100.0) + 0.0
+ penlight.tbls.tol[5] = penlight.tbls.tol[1]*(1.0+penlight.tbls.tol[3]/100.0) + 0.0
+ --penlight.tbls.tol['k'] = 'fuckboi'
+ --ttt = pl.tbx.fmt(penlight.tbls.tol, '.3f')
+ penlight.wrth(('$1\\$2 (\\pmpct{$3} tolerance, $4\\ndash$5\\$2)'):fmt(penlight.tbls.tol, '4=.'..dec..'f, 5=.'..dec..'f'), 'XYZ')
+end
+\end{luacode*}
+\NewDocumentCommand{\prttol}{ m }{\tblfrcsv{tol}{#1}\luadirect{prttol()}}% {50.0,kV,3,P} % 50\us (\pmpct{20} tolerance, 40=--60\us), P is optional and precision of the range (number of decimals)
+
+\prttol{50,kV,3}
+
+\begin{luacode*}
+ pl.wrth(pl.filterfiles('.',true,'.*%.tex'), 'FF')
+\end{luacode*}
\end{document} \ No newline at end of file
diff --git a/macros/unicodetex/latex/einfart/README.md b/macros/unicodetex/latex/einfart/README.md
index f8db51385d..5175469d31 100644
--- a/macros/unicodetex/latex/einfart/README.md
+++ b/macros/unicodetex/latex/einfart/README.md
@@ -10,6 +10,8 @@ Currently, it has native support to Chinese (simplified and traditional), Englis
This is part of the `minimalist` class series.
+> Package dependencies: [`amsfonts`](https://ctan.org/pkg/amsfonts), [`caption`](https://ctan.org/pkg/caption), [`ctex`](https://ctan.org/pkg/ctex), [*`draftwatermark`*](https://ctan.org/pkg/draftwatermark), [`embrac`](https://ctan.org/pkg/embrac), [`float`](https://ctan.org/pkg/float), [`fontspec`](https://ctan.org/pkg/fontspec), [`geometry`](https://ctan.org/pkg/geometry), [`graphicx`](https://ctan.org/pkg/graphicx), [*`lua-widow-control`*](https://ctan.org/pkg/lua-widow-control), [`indentfirst`](https://ctan.org/pkg/indentfirst), [*`mathpazo`*](https://ctan.org/pkg/mathpazo), [`minimalist`](https://ctan.org/pkg/minimalist), [*`nowidow`*](https://ctan.org/pkg/nowidow), [`parskip`](https://ctan.org/pkg/parskip), [`projlib`](https://ctan.org/pkg/projlib), [`regexpatch`](https://ctan.org/pkg/regexpatch), [`silence`](https://ctan.org/pkg/silence), [`tikz-cd`](https://ctan.org/pkg/tikz-cd), [`unicode-math`](https://ctan.org/pkg/unicode-math), [`wrapfig2`](https://ctan.org/pkg/wrapfig2).
+
## Features
Compared with usual document classes, it has the following features:
diff --git a/macros/unicodetex/latex/einfart/demo/einfart-demo-style-classical.pdf b/macros/unicodetex/latex/einfart/demo/einfart-demo-style-classical.pdf
index ad2ebb4667..f2ec9178a1 100644
--- a/macros/unicodetex/latex/einfart/demo/einfart-demo-style-classical.pdf
+++ b/macros/unicodetex/latex/einfart/demo/einfart-demo-style-classical.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/einfart/demo/einfart-demo-style-classicthesis.pdf b/macros/unicodetex/latex/einfart/demo/einfart-demo-style-classicthesis.pdf
index b4c30ec463..15b5d525b7 100644
--- a/macros/unicodetex/latex/einfart/demo/einfart-demo-style-classicthesis.pdf
+++ b/macros/unicodetex/latex/einfart/demo/einfart-demo-style-classicthesis.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/einfart/demo/einfart-demo-style-default.pdf b/macros/unicodetex/latex/einfart/demo/einfart-demo-style-default.pdf
index 08e4cb919a..614198daad 100644
--- a/macros/unicodetex/latex/einfart/demo/einfart-demo-style-default.pdf
+++ b/macros/unicodetex/latex/einfart/demo/einfart-demo-style-default.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/einfart/demo/einfart-demo-style-flow.pdf b/macros/unicodetex/latex/einfart/demo/einfart-demo-style-flow.pdf
index 475a2da1d8..b0fd760979 100644
--- a/macros/unicodetex/latex/einfart/demo/einfart-demo-style-flow.pdf
+++ b/macros/unicodetex/latex/einfart/demo/einfart-demo-style-flow.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/einfart/demo/einfart-demo-style-plain.pdf b/macros/unicodetex/latex/einfart/demo/einfart-demo-style-plain.pdf
index 3dfd68e0ab..aa90db12e6 100644
--- a/macros/unicodetex/latex/einfart/demo/einfart-demo-style-plain.pdf
+++ b/macros/unicodetex/latex/einfart/demo/einfart-demo-style-plain.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/einfart/demo/einfart-demo-style-stream.pdf b/macros/unicodetex/latex/einfart/demo/einfart-demo-style-stream.pdf
index 4edd164588..e0a227b33f 100644
--- a/macros/unicodetex/latex/einfart/demo/einfart-demo-style-stream.pdf
+++ b/macros/unicodetex/latex/einfart/demo/einfart-demo-style-stream.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/einfart/einfart.cls b/macros/unicodetex/latex/einfart/einfart.cls
index 7daea1ac7e..a0076d40f9 100644
--- a/macros/unicodetex/latex/einfart/einfart.cls
+++ b/macros/unicodetex/latex/einfart/einfart.cls
@@ -18,7 +18,7 @@
\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesExplClass
{einfart}
- {2024/02/23} {}
+ {2024/03/01} {}
{A simple and clear article style}
\tl_const:Nn \l__minimclass_base_class_tl { article }
@@ -843,7 +843,7 @@
%%================================
\RequirePackage { graphicx }
\graphicspath { { images/ } }
-\RequirePackage { wrapfig }
+\RequirePackage { wrapfig2 }
\RequirePackage { float }
\RequirePackage { caption }
\captionsetup { font = small }
diff --git a/macros/unicodetex/latex/simplivre/README.md b/macros/unicodetex/latex/simplivre/README.md
index 573563659a..f3d7e6a4dc 100644
--- a/macros/unicodetex/latex/simplivre/README.md
+++ b/macros/unicodetex/latex/simplivre/README.md
@@ -10,6 +10,8 @@ Currently, it has native support to Chinese (simplified and traditional), Englis
This is part of the `minimalist` class series.
+> Package dependencies: [`amsfonts`](https://ctan.org/pkg/amsfonts), [`caption`](https://ctan.org/pkg/caption), [`ctex`](https://ctan.org/pkg/ctex), [*`draftwatermark`*](https://ctan.org/pkg/draftwatermark), [`embrac`](https://ctan.org/pkg/embrac), [`float`](https://ctan.org/pkg/float), [`fontspec`](https://ctan.org/pkg/fontspec), [`geometry`](https://ctan.org/pkg/geometry), [`graphicx`](https://ctan.org/pkg/graphicx), [*`lua-widow-control`*](https://ctan.org/pkg/lua-widow-control), [`indentfirst`](https://ctan.org/pkg/indentfirst), [*`mathpazo`*](https://ctan.org/pkg/mathpazo), [`minimalist`](https://ctan.org/pkg/minimalist), [*`nowidow`*](https://ctan.org/pkg/nowidow), [`parskip`](https://ctan.org/pkg/parskip), [`projlib`](https://ctan.org/pkg/projlib), [`regexpatch`](https://ctan.org/pkg/regexpatch), [`silence`](https://ctan.org/pkg/silence), [`tikz-cd`](https://ctan.org/pkg/tikz-cd), [`unicode-math`](https://ctan.org/pkg/unicode-math), [`wrapfig2`](https://ctan.org/pkg/wrapfig2).
+
## Features
Compared with usual document classes, it has the following features:
diff --git a/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-classical.pdf b/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-classical.pdf
index 497a84ac6b..44fcd101d3 100644
--- a/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-classical.pdf
+++ b/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-classical.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-classical.tex b/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-classical.tex
index cd08d686d1..24544187ff 100644
--- a/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-classical.tex
+++ b/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-classical.tex
@@ -33,7 +33,7 @@
\frontmatter
-\TitlePage [ style = simple ]
+\TitlePage [ style = simple, author info on the right ]
{
% , logo = { } % the logo image
, title = { \fontspec{SourceSansPro}[WordSpace={1.25,1,1}]
diff --git a/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-classicthesis.pdf b/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-classicthesis.pdf
index 4a5675645f..ba3bc1daa2 100644
--- a/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-classicthesis.pdf
+++ b/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-classicthesis.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-classicthesis.tex b/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-classicthesis.tex
index 78578c60d4..b5379c1bda 100644
--- a/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-classicthesis.tex
+++ b/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-classicthesis.tex
@@ -35,7 +35,7 @@
\frontmatter
-\TitlePage [ style = fancy, color = { main = Maroon, back = Goldenrod } ]
+\TitlePage [ style = fancy, color = { main = Maroon, back = Goldenrod }, author info on the right ]
{
% , logo = { } % the logo image
, title = { \fontspec{SourceSansPro}[WordSpace={1.25,1,1}]
diff --git a/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-default.pdf b/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-default.pdf
index cfaab378bc..07dda2849f 100644
--- a/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-default.pdf
+++ b/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-default.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-flow.pdf b/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-flow.pdf
index dbba9df779..8442e4a897 100644
--- a/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-flow.pdf
+++ b/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-flow.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-plain.pdf b/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-plain.pdf
index 67725599d5..a4c77b1010 100644
--- a/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-plain.pdf
+++ b/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-plain.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-stream.pdf b/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-stream.pdf
index 38b0933ac8..a4ad5320bd 100644
--- a/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-stream.pdf
+++ b/macros/unicodetex/latex/simplivre/demo/simplivre-demo-style-stream.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/simplivre/simplivre.cls b/macros/unicodetex/latex/simplivre/simplivre.cls
index cfb01a533d..71157e2783 100644
--- a/macros/unicodetex/latex/simplivre/simplivre.cls
+++ b/macros/unicodetex/latex/simplivre/simplivre.cls
@@ -18,7 +18,7 @@
\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesExplClass
{simplivre}
- {2024/02/23} {}
+ {2024/03/01} {}
{A simple and clear book style}
\tl_const:Nn \l__minimclass_base_class_tl { book }
@@ -843,7 +843,7 @@
%%================================
\RequirePackage { graphicx }
\graphicspath { { images/ } }
-\RequirePackage { wrapfig }
+\RequirePackage { wrapfig2 }
\RequirePackage { float }
\RequirePackage { caption }
\captionsetup { font = small }
diff --git a/macros/xetex/generic/xetexko/ChangeLog b/macros/xetex/generic/xetexko/ChangeLog
index 7d5e352c58..b3e1634cea 100644
--- a/macros/xetex/generic/xetexko/ChangeLog
+++ b/macros/xetex/generic/xetexko/ChangeLog
@@ -1,3 +1,9 @@
+2024-03-01 Dohyun Kim <nomos at ktug org>
+
+ Version 4.3
+
+ * use e-type instead of x-type in EXPL code
+
2022-11-01 Dohyun Kim <nomos at ktug org>
Version 4.2
diff --git a/macros/xetex/generic/xetexko/README b/macros/xetex/generic/xetexko/README
index 5d40215866..9e3648e152 100644
--- a/macros/xetex/generic/xetexko/README
+++ b/macros/xetex/generic/xetexko/README
@@ -1,4 +1,4 @@
-XeTeX-ko Package version 4.2 (2022/11/01)
+XeTeX-ko Package version 4.3 (2024/03/01)
=========================================
XeTeX-ko is a macro package for Xe(La)TeX which supports typesetting
diff --git a/macros/xetex/generic/xetexko/xetexko-doc.pdf b/macros/xetex/generic/xetexko/xetexko-doc.pdf
index 8b93d9d9f1..0c4e8d795f 100644
--- a/macros/xetex/generic/xetexko/xetexko-doc.pdf
+++ b/macros/xetex/generic/xetexko/xetexko-doc.pdf
Binary files differ
diff --git a/macros/xetex/generic/xetexko/xetexko-doc.tex b/macros/xetex/generic/xetexko/xetexko-doc.tex
index 8e71d2514e..8eed817907 100644
--- a/macros/xetex/generic/xetexko/xetexko-doc.tex
+++ b/macros/xetex/generic/xetexko/xetexko-doc.tex
@@ -74,7 +74,7 @@
\title{\xetexko\ 간단 매뉴얼}
\author{Dohyun Kim \normalsize <\texttt{nomos at ktug org}> \and
\normalsize <\url{http://github.com/dohyunkim/xetexko}>}
-\date{Version 4.2\quad 2022/11/01}
+\date{Version 4.3\quad 2024/03/01}
\maketitle
\begin{quote}\small
@@ -152,7 +152,7 @@ main/sans hangul/hanja 폰트에는 따로 \verb|Ligatures=TeX| 옵션을 지시
\bigskip
-※ \vernote{3.1} 및 \vernote{3.4}부터 플레인텍에 주요 변경사항이 있다:
+※ \vernote{3.4}부터 플레인텍에 주요 변경사항이 있다:
\begin{plaintex}
플레인텍에서도 기본값으로 은바탕을 한글에 사용한다. 한글폰트를 지시하는 방법은 다음과 같다.
\begin{verbatim}
@@ -160,16 +160,12 @@ main/sans hangul/hanja 폰트에는 따로 \verb|Ligatures=TeX| 옵션을 지시
\hangulfont="[UnBatang]:mapping=tex-text" at 10pt
\hanjafont ="Naver Dictionary:mapping=tex-text" at 10pt
\end{verbatim}
- \sout{그런데 3.1 버전부터는 이렇게 하면 문서 중간에 영문글꼴을 바꾸더라도
- \cs{hangulfont} 선언시의 영문글꼴이 계속 적용되도록 바뀌었다.}
또한 다음과 같은 새로운 명령을 제공한다.
\begin{verbatim}
\sethangulfont\untaza ="[UnTaza.ttf]" at 10pt
\sethanjafont \undotum="[UnDotum.ttf]" at 10pt
\expandafter\def\expandafter\tt\expandafter{\tt\untaza\undotum}
\end{verbatim}
- \sout{이 경우 \cs{untaza}, \cs{undotum} 명령에 \cs{set...font} 실행시의 현재폰트 명령이
- 자동으로 포함된다. 뒤에서 설명할 글꼴옵션이 포함되는 것과 같은 개념이다.}
그리하여 예의 \cs{tt} 명령으로 이제 한글, 한자, 영문 글꼴을 동시에 바꿀 수 있게 된다.
\end{plaintex}
diff --git a/macros/xetex/generic/xetexko/xetexko.sty b/macros/xetex/generic/xetexko/xetexko.sty
index eb2861d7c4..982c05c117 100644
--- a/macros/xetex/generic/xetexko/xetexko.sty
+++ b/macros/xetex/generic/xetexko/xetexko.sty
@@ -1,6 +1,6 @@
% xetexko.sty
%
-% Copyright (c) 2013-2022 Dohyun Kim <nomos at ktug org>
+% Copyright (c) 2013-2024 Dohyun Kim <nomos at ktug org>
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -15,8 +15,8 @@
\catcode`@=11
\ifdefined\ProvidesPackage
- \NeedsTeXFormat{LaTeX2e}[2021/06/01]
- \ProvidesPackage{xetexko}[2022/11/01 v4.2 typesetting Korean with XeTeX]
+ \NeedsTeXFormat{LaTeX2e}[2021/11/15]
+ \ProvidesPackage{xetexko}[2024/03/01 v4.3 typesetting Korean with XeTeX]
\else
\ifdefined\@tempcnta\else \newcount\@tempcnta \fi
\ifdefined\@sptoken \else
@@ -1137,7 +1137,7 @@
\or \unkern\unkern \XeKo@latincjk % SY AO
\or \unkern\unkern % AA AO
\or \unkern\unkern % AO AO
- \or \unkern\unkern % AC AO
+ \or \unkern\unkern \inhibitglue % AC AO
\or \unkern\unkern % AP AO
\or \unkern\unkern % AM AO
\or \unkern\unkern % AH AO
@@ -2107,7 +2107,7 @@
\cs_new:Nn \__xtxko_assign_font_opts:n
{
\tl_clear:N \l_xtxko_font_opts_tl
- \keys_set_known:nxN { xtxko-font } {#1} \l_xtxko_rest_opts_tl
+ \keys_set_known:neN { xtxko-font } {#1} \l_xtxko_rest_opts_tl
}
\DeclareDocumentCommand \setmainhangulfont { O{} m O{} }
{
@@ -2175,7 +2175,7 @@
\fontencoding \g_fontspec_encoding_tl
\exp_args:Nc \fontfamily { xetexko_user_family_ \cs_to_str:N #1 } \XeKo@selectfont
}
- \cs_set_nopar:cpx { xetexko_user_option_ \cs_to_str:N #1 }
+ \cs_set_nopar:cpe { xetexko_user_option_ \cs_to_str:N #1 }
{
\exp_not:o { \l_xtxko_font_opts_tl }
}
@@ -2200,7 +2200,7 @@
\fontencoding \g_fontspec_encoding_tl
\fontfamily \xetexkohangulfontfamily \XeKo@selectfont
}
- \cs_set_nopar:Npx \xetexkohanguloption
+ \cs_set_nopar:Npe \xetexkohanguloption
{
\exp_not:o { \l_xtxko_font_opts_tl }
}
@@ -2213,9 +2213,9 @@
\group_begin:
\fontseries\seriesdefault\fontshape\shapedefault \xetexkohangulfont
\cs_set_eq:NN \l_xtxko_font_opts_tl \xetexkohanguloption
- \keys_set_known:nxN { xtxko-font } { #1 } \l_xtxko_rest_opts_tl
+ \keys_set_known:neN { xtxko-font } { #1 } \l_xtxko_rest_opts_tl
\addfontfeature { \l_xtxko_rest_opts_tl }
- \use:x
+ \use:e
{
\group_end:
\exp_not:N \cs_set_nopar:Npn \exp_not:N \xetexkohangulfont
@@ -2299,7 +2299,7 @@
\fontencoding \g_fontspec_encoding_tl
\exp_args:Nc \fontfamily { xetexko_user_family_ \cs_to_str:N #1 } \XeKo@selectfont
}
- \cs_set_nopar:cpx { xetexko_user_option_ \cs_to_str:N #1 }
+ \cs_set_nopar:cpe { xetexko_user_option_ \cs_to_str:N #1 }
{
\exp_not:o { \l_xtxko_font_opts_tl }
}
@@ -2324,7 +2324,7 @@
\fontencoding \g_fontspec_encoding_tl
\fontfamily \xetexkohanjafontfamily \XeKo@selectfont
}
- \cs_set_nopar:Npx \xetexkohanjaoption
+ \cs_set_nopar:Npe \xetexkohanjaoption
{
\exp_not:o { \l_xtxko_font_opts_tl }
}
@@ -2337,9 +2337,9 @@
\group_begin:
\fontseries\seriesdefault\fontshape\shapedefault \xetexkohanjafont
\cs_set_eq:NN \l_xtxko_font_opts_tl \xetexkohanjaoption
- \keys_set_known:nxN { xtxko-font } { #1 } \l_xtxko_rest_opts_tl
+ \keys_set_known:neN { xtxko-font } { #1 } \l_xtxko_rest_opts_tl
\addfontfeature { \l_xtxko_rest_opts_tl }
- \use:x
+ \use:e
{
\group_end:
\exp_not:N \cs_set_nopar:Npn \exp_not:N \xetexkohanjafont
@@ -2462,8 +2462,10 @@
\ifdefined\XeKo@hanja@font\else
\let\XeKo@hanja@font \XeKo@hangul@font
\fi
- \@ifpackageloaded{ulem}{\xetexkoulemsupport}{}
- \@ifpackageloaded{hyperref}{\pdfstringdefDisableCommands{%
+ }
+
+\AddToHook{package/ulem/after}{\xetexkoulemsupport}
+\AddToHook{package/hyperref/after}{\pdfstringdefDisableCommands{%
\let\hangulalphs\relax
\let\hangulnums\relax
\let\hangulparens\relax
@@ -2532,8 +2534,7 @@
\def\라{라}%
\def\으{으}%
\def\로{로}%
- \def\hellipsis{...}}}{}
- }
+ \def\hellipsis{...}}}
\newif\if@hangul
\newif\if@hanja