summaryrefslogtreecommitdiff
path: root/macros/latex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex')
-rw-r--r--macros/latex/contrib/easybook/doc/easybook-demo.pdfbin287471 -> 287389 bytes
-rw-r--r--macros/latex/contrib/easybook/doc/easybook-demo.tex18
-rw-r--r--macros/latex/contrib/easybook/doc/easybook.pdfbin245151 -> 254087 bytes
-rw-r--r--macros/latex/contrib/easybook/doc/easybook.tex97
-rw-r--r--macros/latex/contrib/easybook/easybook.cls161
-rw-r--r--macros/latex/contrib/econlipsum/README.md2
-rw-r--r--macros/latex/contrib/econlipsum/econlipsum.dtx8
-rw-r--r--macros/latex/contrib/econlipsum/econlipsum.pdfbin571558 -> 571397 bytes
-rw-r--r--macros/latex/contrib/eq-fetchbbl/README.md25
-rw-r--r--macros/latex/contrib/eq-fetchbbl/docs/eq-fetchbbl-man.pdfbin0 -> 304477 bytes
-rw-r--r--macros/latex/contrib/eq-fetchbbl/docs/eq-fetchbbl-man.tex511
-rw-r--r--macros/latex/contrib/eq-fetchbbl/docs/eq-fetchbbl.pdfbin0 -> 233456 bytes
-rw-r--r--macros/latex/contrib/eq-fetchbbl/eq-fetchbbl.dtx210
-rw-r--r--macros/latex/contrib/eq-fetchbbl/eq-fetchbbl.ins60
-rw-r--r--macros/latex/contrib/eq-fetchbbl/examples/bible-quiz-rt.tex104
-rw-r--r--macros/latex/contrib/eq-fetchbbl/examples/bible-quiz-uv.tex78
-rw-r--r--macros/latex/contrib/eq-fetchbbl/examples/bible-quiz.pdfbin0 -> 182279 bytes
-rw-r--r--macros/latex/contrib/eq-fetchbbl/examples/bible-quiz.tex120
-rw-r--r--macros/latex/contrib/eq-fetchbbl/examples/doc-exmpls.tex363
-rw-r--r--macros/latex/contrib/eq-fetchbbl/examples/exmpldefs/verses.def74
-rw-r--r--macros/latex/contrib/fetchbibpes/README.md14
-rw-r--r--macros/latex/contrib/fetchbibpes/docs/fetchbibpes.pdfbin252788 -> 291257 bytes
-rw-r--r--macros/latex/contrib/fetchbibpes/docs/fetchbibpes_man.pdfbin493219 -> 703853 bytes
-rw-r--r--macros/latex/contrib/fetchbibpes/docs/fetchbibpes_man.tex125
-rw-r--r--macros/latex/contrib/fetchbibpes/examples/bibpes_tst.pdfbin73912 -> 216945 bytes
-rw-r--r--macros/latex/contrib/fetchbibpes/fetchbibpes.dtx60
-rw-r--r--macros/latex/contrib/fetchbibpes/fetchbibpes.ins2
-rw-r--r--macros/latex/contrib/highlightlatex/LICENSE.txt21
-rw-r--r--macros/latex/contrib/highlightlatex/README.md267
-rw-r--r--macros/latex/contrib/highlightlatex/highlightlatex-manual.pdfbin0 -> 231500 bytes
-rw-r--r--macros/latex/contrib/highlightlatex/highlightlatex.sty525
-rw-r--r--macros/latex/contrib/hvfloat/Changes1
-rw-r--r--macros/latex/contrib/hvfloat/doc/hvfloat.pdfbin22514815 -> 18362517 bytes
-rw-r--r--macros/latex/contrib/hvfloat/doc/hvfloat.tex140
-rw-r--r--macros/latex/contrib/hvfloat/latex/hvfloat.sty69
-rw-r--r--macros/latex/contrib/lectureslides/README.md26
-rw-r--r--macros/latex/contrib/lectureslides/lectureslides-doc.pdfbin0 -> 46715 bytes
-rw-r--r--macros/latex/contrib/lectureslides/lectureslides-doc.tex92
-rw-r--r--macros/latex/contrib/lectureslides/lectureslides.sty74
-rw-r--r--macros/latex/contrib/microtype/README.md2
-rw-r--r--macros/latex/contrib/microtype/microtype-utf.dtx2
-rw-r--r--macros/latex/contrib/microtype/microtype.dtx91
-rw-r--r--macros/latex/contrib/microtype/microtype.pdfbin1801012 -> 1812574 bytes
-rw-r--r--macros/latex/contrib/minimalist/LICENSE416
-rw-r--r--macros/latex/contrib/minimalist/README.md29
-rw-r--r--macros/latex/contrib/minimalist/minimalist-doc.pdfbin0 -> 45936 bytes
-rw-r--r--macros/latex/contrib/minimalist/minimalist-doc.tex210
-rw-r--r--macros/latex/contrib/minimalist/minimalist.sty653
-rw-r--r--macros/latex/contrib/minimalist/minimart.cls132
-rw-r--r--macros/latex/contrib/minimalist/minimbook.cls132
-rw-r--r--macros/latex/contrib/multirow/README6
-rw-r--r--macros/latex/contrib/multirow/multirow.dtx38
-rw-r--r--macros/latex/contrib/multirow/multirow.pdfbin596749 -> 599745 bytes
53 files changed, 4680 insertions, 278 deletions
diff --git a/macros/latex/contrib/easybook/doc/easybook-demo.pdf b/macros/latex/contrib/easybook/doc/easybook-demo.pdf
index 0217ebec00..8fbd749d60 100644
--- a/macros/latex/contrib/easybook/doc/easybook-demo.pdf
+++ b/macros/latex/contrib/easybook/doc/easybook-demo.pdf
Binary files differ
diff --git a/macros/latex/contrib/easybook/doc/easybook-demo.tex b/macros/latex/contrib/easybook/doc/easybook-demo.tex
index 9ad0b579c1..2babe3b6b1 100644
--- a/macros/latex/contrib/easybook/doc/easybook-demo.tex
+++ b/macros/latex/contrib/easybook/doc/easybook-demo.tex
@@ -10,14 +10,14 @@
style =
{
color = seaside,
- % capdash = true,
% multoc = true,
% withpart = true,
% perpart = true,
perpage = true,
% notomath = false,
rulewidth = 0.75pt,
- % uppercase = false
+ % uppercase = false,
+ number-sep = {.}
},
link =
{
@@ -33,7 +33,7 @@
caption = 1,
footnote = 1
},
- elfont =
+ elsefont =
{
table-cap = \sffamily\zihao{5},
figure-cap = \sffamily\zihao{5},
@@ -97,11 +97,11 @@
\url{https://latexstudio.net} \\
\url{https://gitee.com/texl3/easybook}\thanks{Gitee为项目的主要发布地址。}
}
-\date{2021/03/14\hskip\ccwd\relax v1.23q}
+\date{2021/03/15\hskip\ccwd\relax v1.23r}
\frontmatter[roman]
\maketitle
-\tableofcontents
+\tableofcontents[book,multoc = false]
\mainmatter*
\part{使用示例}
@@ -111,9 +111,9 @@
\include{appendix}
\backmatter
-\printbibliography
-\listoffigures
-\listoftables
-\listoflistings
+\printbibliography[book,multoc = false]
+\listoffigures[book,multoc = false]
+\listoftables[book,multoc = false]
+\listoflistings[book,multoc = false]
\printindex
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/easybook/doc/easybook.pdf b/macros/latex/contrib/easybook/doc/easybook.pdf
index 25192edcd6..6a2c1e0cd2 100644
--- a/macros/latex/contrib/easybook/doc/easybook.pdf
+++ b/macros/latex/contrib/easybook/doc/easybook.pdf
Binary files differ
diff --git a/macros/latex/contrib/easybook/doc/easybook.tex b/macros/latex/contrib/easybook/doc/easybook.tex
index b8b375c333..7d5f6e30e2 100644
--- a/macros/latex/contrib/easybook/doc/easybook.tex
+++ b/macros/latex/contrib/easybook/doc/easybook.tex
@@ -2,7 +2,7 @@
\title{\sffamily easybook书籍文档类}
\author{瞿毅}
-\date{2021/03/14\hskip\ccwd\relax v1.23q\thanks{\url{https://gitee.com/texl3/easybook}}}
+\date{2021/03/15\hskip\ccwd\relax v1.23r\thanks{\url{https://gitee.com/texl3/easybook}}}
\begin{document}
\maketitle
@@ -92,13 +92,27 @@
\end{function}
\subsection{文档命令}
-\begin{function}[added = 2021-02-20]{\frontmatter,\mainmatter,\backmatter,\listoffigures,\listoftables,\listoflistings}
+\label{document command}
+\begin{function}[added = 2021-02-20,updated = 2021-03-15]{\frontmatter,\mainmatter,\backmatter,\tableofcontents,\listoffigures,\listoftables,\listoflistings}
\begin{syntax}
- \tn{frontmatter}\oarg{编号格式|(Roman)}
- \tn{printindex}\oarg{索引名}
+ \tn{frontmatter*}\oarg{编号格式|(Roman)}
+ \tn{mainmatter*}
+ \tn{backmatter}
+ \tn{tableofcontents*}\oarg{键值列表}
+ \tn{listoffigures*}\oarg{键值列表}
+ \tn{listoftables*}\oarg{键值列表}
+ \tn{listoflistings*}\oarg{键值列表}
\end{syntax}
-\tn{frontmatter} 为前言区命令,章标题不编号,页码可设置为例如 \opt{roman}、\opt{Alph} 等格式,带有星号的命令 \tn{frontmatter*} 不使用 \tn{cleardoublepage}。\tn{mainmatter} 为主文区命令,章标题正常编号且页码为从1开始计数的阿拉伯数字,\tn{mainmatter*} 命令不使用 \tn{cleardoublepage}。\tn{backmatter} 为后记区命令,页码格式与编号保持不变,章标题不编号。\tn{listoffigures} 命令输出图片目录,\tn{listoftables} 命令输出表格目录,\tn{listoflistings} 命令输出代码目录。
-\changes{v1.23q}{2021/02/20}{重新定义文档结构划分命令。}
+\tn{frontmatter} 为前言区命令,章标题不编号,页码可设置为例如 \opt{roman}、\opt{Alph} 等格式,带有星号的命令 \tn{frontmatter*} 不使用 \tn{cleardoublepage}。\tn{mainmatter} 为主文区命令,章标题正常编号且页码为从1开始计数的阿拉伯数字,\tn{mainmatter*} 命令不使用 \tn{cleardoublepage}。\tn{backmatter} 为后记区命令,页码格式与编号保持不变,章标题不编号。\tn{listoffigures} 命令输出图片目录,\tn{listoftables} 命令输出表格目录,\tn{listoflistings} 命令输出代码目录。带有星号的目录命令不会添加进主文档目录中,目录的键值列表选项如下
+\changes{v1.23r}{2021/02/20}{重新定义文档结构划分命令。}
+\end{function}
+
+\begin{function}{multoc,book,article}
+\begin{syntax}
+ multoc = <true|(false)>
+\end{syntax}
+\opt{multoc} 与 \opt{style/multoc} 选项具有相同的效果,但是具有优先性且可单独设置不同目录是否双栏排版。\opt{book} 选项使目录按照 \opt{chapter} 级别输出,\opt{article} 选项使目录按照 \opt{article} 级别输出,默认为 \opt{chapter} 级别。
+\changes{v1.23r}{2021/03/15}{为几个目录增加键值列表的选项,可设置输出级别以及是否加入主目录。}
\end{function}
\section{接口选项}
@@ -118,10 +132,10 @@
\end{function}
\subsection{风格}
-\begin{function}[EXP,added = 2021-01-05,updated = 2021-02-27]{style/color,style/capdash,style/multoc,style/withpart,style/perpart,style/perpage,style/notomath,style/rulewidth,style/uppercase}
+\begin{function}[EXP,added = 2021-01-05,updated = 2021-03-15]{style/...,color,multoc,withpart,perpart,perpage,notomath,rulewidth,uppercase,figure-sep,table-sep,listing-sep,equation-sep,number-sep}
\begin{syntax}
+ 以下选项路径为 \tn{ctexset}\marg{style/...}
color = <(none)|seaside|energy|cyberpunk>
- capdash = <true|(false)>
multoc = <true|(false)>
withpart = <true|(false)>
perpart = <true|(false)>
@@ -129,11 +143,16 @@
notomath = <(true)|false>
rulewidth = <(0.75pt)>
uppercase = <(true)|false>
+ figure-sep = <(.)>
+ table-sep = <(.)>
+ listing-sep = <(.)>
+ equation-sep = <(.)>
+ number-sep = <(.)>
\end{syntax}
-\opt{style} 选项控制文章的风格。
\changes{v1.10}{2021/01/08}{更改颜色实现方式与选项名。}
-\changes{v1.23q}{2021/02/02}{noto风格的数学字体独立出来,可自定义设置。}
-\changes{v1.23q}{2021/02/09}{增加控制页面横线粗细的选项。}
+\changes{v1.23r}{2021/02/02}{noto风格的数学字体独立出来,可自定义设置。}
+\changes{v1.23r}{2021/02/09}{增加控制页面横线粗细的选项。}
+\changes{v1.23r}{2021/03/15}{增加控制编号连接符的选项。}
\end{function}
\begin{optdesc}
@@ -145,7 +164,6 @@
主题颜色用到这三个颜色,可以使用 \tn{definecolor} 命令进行更改,类似地更改超链接颜色见小节 \ref{hyperlinks}。
\changes{v1.10}{2021/01/08}{可以自定义主题颜色。}
\end{function}
- \item[capdash] 将图表代码标题风格由例如\textbf{图1.1}变为\textbf{图1\textendash 1}的形式。
\item[multoc] 开启双栏目录,可与 \opt{onecolumn} 和 \opt{twocolumn} 选项配合出单栏正文、单栏目录,双栏正文、单栏目录,单栏正文、双栏目录和双栏正文、双栏目录四种方式 。
\item[withpart] 使章跟随每一部分编号,默认不跟随。
\item[perpart] 使脚注跟随每一部分编号,默认不跟随。
@@ -153,12 +171,18 @@
\item[notomath] 使用 \opt{noto} 风格的数学字体,将会加载 \pkg{newtxmath} 宏包。
\item[rulewidth] 调整页眉、定理盒子以及代码框线条的粗细。
\item[uppercase] 使用 \tn{rightmark} 及 \tn{leftmark} 获取标题内容设置页眉页脚时英文是否大小写。
+ \item[figure-sep] 图片标题编号的连接符。
+ \item[table-sep] 表格标题编号的连接符。
+ \item[listing-sep] 代码标题编号的连接符。
+ \item[equation-sep] 公式编号的连接符。
+ \item[number-sep] 统一设置所有编号的连接符。
\end{optdesc}
\subsection{超链接}
\label{hyperlinks}
-\begin{function}[EXP,added = 2021-01-05,updated = 2021-01-08]{link/hyperlink,link/linkcolor,link/linktopage}
+\begin{function}[EXP,added = 2021-01-05,updated = 2021-01-08]{link/...,hyperlink,linkcolor,linktopage}
\begin{syntax}
+ 以下选项路径为 \tn{ctexset}\marg{link/...}
hyperlink = <(edge)|various|none>
linkcolor = <(fresh)|cutepink|skyblue|crimson>
linktopage = <true|(false)>
@@ -180,17 +204,18 @@
\end{optdesc}
\subsection{行距}
-\begin{function}[EXP,added = 2021-01-05,updated = 2021-02-13]{spread/line,spread/table,spread/math,spread/caption,spread/footnote}
+\begin{function}[EXP,added = 2021-01-05,updated = 2021-02-13]{spread/...,line,table,math,caption,footnote}
\begin{syntax}
+ 以下选项路径为 \tn{ctexset}\marg{link/...}
line = <(1.3)>
table = <(1.05)>
math = <(1.05)>
caption = <(1)>
footnote = <(1)>
\end{syntax}
-行距因子用于设置各种行距倍数,只能是浮点数,不能带有长度单位。\tn{ctexset} 原有的行距选项\opt{linespread}失效。各行距既可在导言区全局设置也可正文中设置对后面生效,行距的意义为
+行距因子用于设置各种行距倍数,只能是浮点数,不能带有长度单位。\tn{ctexset} 原有的行距选项 \opt{linespread} 失效。各行距既可在导言区全局设置也可正文中设置对后面生效,行距的意义为
\changes{v1.21}{2021/01/12}{增加脚注线间的距离选项。}
-\changes{v1.23q}{2021/02/09}{取消使用 \pkg{zhlineskip} 宏包设置数学间距。}
+\changes{v1.23r}{2021/02/09}{取消使用 \pkg{zhlineskip} 宏包设置数学间距。}
\end{function}
\begin{optdesc}
@@ -202,8 +227,9 @@
\end{optdesc}
\subsection{其它字体}
-\begin{function}[EXP,added = 2021-01-08,updated = 2021-02-13]{elfont/table-cap,elfont/figure-cap,elfont/listing-cap,elfont/footnote,elfont/marginpart}
+\begin{function}[EXP,added = 2021-01-08,updated = 2021-02-13]{elsefont/...,table-cap,figure-cap,listing-cap,footnote,marginpart}
\begin{syntax}
+ 以下选项路径为 \tn{ctexset}\marg{elsefont/...}
table-cap = <\tn{sffamily}\tn{small}>
figure-cap = <\tn{sffamily}\tn{small}>
listing-cap = <\tn{sffamily}\tn{small}>
@@ -211,7 +237,7 @@
marginpart = <\tn{rmfamily}\tn{footnotesize}>
\end{syntax}
\changes{v1.10}{2021/01/08}{加入自定义非正文字体选项。}
-\changes{v1.23q}{2021/02/08}{修复使用 \tn{zihao} 命令设置字体失效的问题。}
+\changes{v1.23r}{2021/02/08}{修复使用 \tn{zihao} 命令设置字体失效的问题。}
\end{function}
\begin{optdesc}
@@ -223,8 +249,9 @@
\end{optdesc}
\subsection{参考文献}
-\begin{function}[EXP,added = 2021-01-11,updated = 2021-03-08]{bibset/backend,bibset/bib-style,bibset/cite-style,bibset/bibfile,\printbibliography}
+\begin{function}[EXP,added = 2021-01-11,updated = 2021-03-15]{bibset/...,backend,bib-style,cite-style,bibfile,\printbibliography}
\begin{syntax}
+ 以下选项路径为 \tn{ctexset}\marg{bibset/...}
backend = <(bibtex)|biblatex>
bib-style = <(numerical)|authoryear|其它格式>
cite-style = <标注风格>
@@ -232,7 +259,7 @@
\tn{printbibliography}\oarg{键值列表}
\end{syntax}
\changes{v1.21}{2021/01/11}{增加 \opt{bibset} 选项,可以使用 \hologo{BibTeX} 或 \hologo{biber} 编译参考文献。}
-\changes{v1.23q}{2021/02/23}{使用 \opt{bibset} 选项时可设置标注风格。}
+\changes{v1.23r}{2021/02/23}{使用 \opt{bibset} 选项时可设置标注风格。}
\end{function}
\begin{optdesc}
@@ -240,12 +267,20 @@
\item[bib-style] 参考文献格式为中国的参考文献推荐标准GB/T 7714-2015,有顺序编码制和著者-出版年制两种风格,理工科类一般使用顺序编码制,文科类一般使用著者-出版年制。若使用其它格式,使用 \hologo{BibTeX} 处理时需确保正确的 \opt{bst} 文件,使用 \hologo{biber} 处理可使用 \pkg{biblatex} 宏包支持的参考文献风格名称。
\item[cite-style] 标注参考文献的风格,\opt{backend = bibtex} 选项下可使用 \opt{super}(数字上标标注,默认)或 \opt{numbers}(数字标注)等 \pkg{natbib} 宏包带有的标注风格,\opt{backend = biblatex} 选项下可使用 \pkg{biblatex} 宏包支持的标注风格名称。
\item[bibfile] 参考文献的数据文件,使用 \hologo{biber} 处理时要带有 \opt{bib} 后缀,默认为一个以 \opt{refs.bib} 命名的文件。
- \item[\tn{printbibliography}] 两种方式\textbf{均使用}此命令打印参考文献,其中可选项仅在 \hologo{biber} 处理时有效。
+ \item[\tn{printbibliography}] 两种方式\textbf{均使用}此命令打印参考文献,不同处理后端此命令的键值列表不同。使用 \hologo{BibTeX} 处理时选项与小节 \ref{document command} 目录的选项相同,使用 \hologo{biber} 处理时常用的选项如下
+ \begin{function}{heading,title}
+ \begin{syntax}
+ heading = <bibliography|subbibliography|(bibintoc)|subbibintoc>
+ title = <参考文献标题名>
+ \end{syntax}
+ \opt{heading} 为参考文献标题的处理方式,\opt{bibliography} 选项以 \opt{chapter} 级别输出参考文献,不加进目录,\opt{subbibliography} 选项以 \opt{section} 级别输出参考文献,不加进目录,\opt{bibintoc} 选项以 \opt{chapter} 级别输出参考文献,加进目录,\opt{subbibintoc} 选项以 \opt{section} 级别输出参考文献,加进目录。\opt{title} 选项覆盖由 \opt{heading} 选项提供的缺省标题名。除此之外其他支持选项可见 \pkg{biblatex} 宏包说明文档。
+ \end{function}
\end{optdesc}
\subsection{定理样式}
-\begin{function}[EXP,added = 2021-01-12,updated = 2021-03-13]{thmset/thmbox,thmset/numberwith,thmset/headpunct,thmset/bodyfont,thmset/notefont,thmset/headfont,thmset/headindent,thmset/spaceabove,thmset/spacebelow,thmset/spacepost,\newtheorem, \declaretheoremstyle}
+\begin{function}[EXP,added = 2021-01-12,updated = 2021-03-13]{thmset/...,thmbox,numberwith,headpunct,bodyfont,notefont,headfont,headindent,spaceabove,spacebelow,spacepost,\newtheorem, \declaretheoremstyle}
\begin{syntax}
+ 以下选项路径为 \tn{ctexset}\marg{thmset/...}
thmbox = <true|(false)>
numberwith = <(chapter)|section|其它环境|空置>
headpunct = <(未设置)>
@@ -260,7 +295,7 @@
\tn{declaretheoremstyle}\oarg{键值列表}\marg{定理样式名}
\end{syntax}
\changes{v1.21}{2021/01/12}{增加配置定理环境样式的选项。}
-\changes{v1.23q}{2021/03/12}{重新定义了新定理环境命令 \tn{newtheorem}。}
+\changes{v1.23r}{2021/03/12}{重新定义了新定理环境命令 \tn{newtheorem}。}
\end{function}
\begin{optdesc}
@@ -299,8 +334,9 @@
\end{ctexexam}
\subsection{页面边距}
-\begin{function}[EXP,added = 2021-01-13]{geoset/left,geoset/top,geoset/hmargin,geoset/textwidth,geoset/includehead,...}
+\begin{function}[EXP,added = 2021-01-13]{geoset/...,left,top,hmargin,textwidth,includehead,...}
\begin{syntax}
+ 以下选项路径为 \tn{ctexset}\marg{geoset/...}
left = <长度>
top = <长度>
hmargin = \marg{左边距,右边距}
@@ -324,8 +360,9 @@
\end{function}
\subsection{页眉页脚}
-\begin{function}[EXP,added = 2021-01-13,updated = 2021-03-14]{hdrset/head-foot,hdrset/chap-mark,hdrset/sec-mark,hdrset/headrule,hdrset/footrule,hdrset/footnoterule,\easyhead,\easyfoot,...}
+\begin{function}[EXP,added = 2021-01-13,updated = 2021-03-14]{hdrset/...,head-foot,chap-mark,sec-mark,headrule,footrule,footnoterule,\easyhead,\easyfoot,...}
\begin{syntax}
+ 以下选项路径为 \tn{ctexset}\marg{hdrset/...}
head-foot = <页眉页脚中的内容>
chap-mark = <\tn{chaptermark} 标志命令 \tn{markboth} 中的内容>
sec-mark = <\tn{sectionmark} 标志命令 \tn{markright} 中的内容>
@@ -356,8 +393,8 @@
\end{ctexexam}
\changes{v1.21}{2021/01/11}{修复单面文档时页眉横线消失的问题。}
\changes{v1.21}{2021/01/13}{增加配置页眉页脚的选项。}
-\changes{v1.23q}{2021/03/08}{优化页眉页脚设置,增加 \opt{chap-mark} 和 \opt{sec-mark} 选项。}
-\changes{v1.23q}{2021/03/14}{可以手动绘制页眉、页脚和脚注的横线。}
+\changes{v1.23r}{2021/03/08}{优化页眉页脚设置,增加 \opt{chap-mark} 和 \opt{sec-mark} 选项。}
+\changes{v1.23r}{2021/03/14}{可以手动绘制页眉、页脚和脚注的横线。}
\end{function}
\subsection{目录样式}
@@ -471,7 +508,7 @@
\item 习题内容
\end{exercise}
\end{ctexexam}
-\changes{v1.23q}{2021/02/08}{增加准确的习题盒子标题目录锚点。}
+\changes{v1.23r}{2021/02/08}{增加准确的习题盒子标题目录锚点。}
\end{function}
\subsection{盒子}
@@ -521,6 +558,10 @@
\section{其它用法}
+\subsection{article 风格}
+当最高级别的标题命令使用 \tn{section} 而不使用 \tn{chapter} 时,会自动转变为 \opt{article} 风格,与 \cls{article} 文档类的特性相似,可用于短篇幅的文章,此时输出目录时需要配合 \opt{article} 选项使目录以 \opt{section} 级别输出,详情见小节 \ref{document command}。
+\changes{v1.23r}{2021/03/15}{增加 article 文章风格,可用于短篇幅的文章。}
+
\subsection{代码}
\begin{function}[added = 2021-01-05]{\lstinline,lstlisting,\listoflistings}
\begin{syntax}
diff --git a/macros/latex/contrib/easybook/easybook.cls b/macros/latex/contrib/easybook/easybook.cls
index cfb30bc1ca..4d3c1759ca 100644
--- a/macros/latex/contrib/easybook/easybook.cls
+++ b/macros/latex/contrib/easybook/easybook.cls
@@ -9,7 +9,7 @@
%% https://creativecommons.org/licenses/by/4.0/legalcode
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{l3keys2e}
-\ProvidesExplClass{easybook}{2021/03/14}{1.23q}{}
+\ProvidesExplClass{easybook}{2021/03/15}{1.23r}{}
\cs_generate_variant:Nn \keys_define:nn {nx}
\cs_generate_variant:Nn \int_to_arabic:n {v}
@@ -93,7 +93,6 @@
\__put_ctexbook:n {\g__options_clist}
\LoadClass[UTF8]{ctexbook}
-\bool_new:N \l__capdash_bool
\bool_new:N \l__multoc_bool
\bool_new:N \l__chap_withpart_bool
\bool_new:N \l__foot_perpart_bool
@@ -107,7 +106,7 @@
style .meta:nn = {ctex/style}{#1},
link .meta:nn = {ctex/link}{#1},
spread .meta:nn = {ctex/spread}{#1},
- elfont .meta:nn = {ctex/elfont}{#1},
+ elsefont .meta:nn = {ctex/elsefont}{#1},
bibset .meta:nn = {ctex/bibset}{#1},
thmset .meta:nn = {ctex/thmset}{#1},
geoset .meta:nn = {ctex/geoset}{#1},
@@ -119,12 +118,8 @@
}
\__ctex_define:nn {style}
{
- capdash .bool_set:N = \l__capdash_bool,
- capdash .default:n = true,
- capdash .initial:n = false,
multoc .bool_set:N = \l__multoc_bool,
multoc .default:n = true,
- multoc .initial:n = false,
withpart .bool_set:N = \l__chap_withpart_bool,
withpart .default:n = true,
withpart .initial:n = false,
@@ -141,7 +136,17 @@
rulewidth .initial:n = 0.75pt,
uppercase .bool_set:N = \l__uppercase_bool,
uppercase .default:n = true,
- uppercase .initial:n = true
+ uppercase .initial:n = true,
+ figure-sep .tl_set:N = \l__figure_separator_tl,
+ table-sep .tl_set:N = \l__table_separator_tl,
+ listing-sep .tl_set:N = \l__lstlisting_separator_tl,
+ equation-sep .tl_set:N = \l__equation_separator_tl,
+ number-sep .meta:n =
+ {
+ figure-sep = {#1},table-sep = {#1},
+ listing-sep = {#1},equation-sep = {#1}
+ },
+ number-sep .initial:n = {.}
}
\RequirePackage
@@ -531,19 +536,40 @@
}{}
}
}
+
+\tl_set:Nn \l__toc_type_tl{book}
+\keys_define:nn {listoc}
+ {
+ article .code:n = \tl_set:Nn \l__toc_type_tl{article},
+ book .code:n = {},
+ multoc .bool_set:N = \l__multoc_bool,
+ multoc .default:n = true,
+ multoc .initial:n = false
+ }
+
\cs_new_protected:Npn \__title_mark_intoc:n #1
{
- \chapter*{\phantomsection#1}
- \CTEX@addtocline{chapter}{#1}
+ \tl_if_eq:NnTF \l__toc_type_tl{book}
+ {
+ \chapter*{\phantomsection#1}
+ \CTEX@addtocline{chapter}{#1}
+ }{
+ \section*{\phantomsection#1}
+ \CTEX@addtocline{section}{#1}
+ }
\__markboth:n {#1}
}
\cs_new_protected:Npn \__title_mark:n #1
{
- \chapter*{\phantomsection#1}
+ \tl_if_eq:NnTF \l__toc_type_tl{book}
+ {\chapter*{\phantomsection#1}}
+ {\section*{\phantomsection#1}}
\__markboth:n {#1}
}
-\cs_gset:Npn \tableofcontents
+\RenewDocumentCommand{\tableofcontents}{o}
{
+ \group_begin:
+ \IfValueT {#1}{\keys_set:nn {listoc}{#1}}
\if@twocolumn
\@restonecoltrue\onecolumn
\bool_if:NT \l__multoc_bool{\twocolumn}
@@ -559,9 +585,12 @@
\else
\onecolumn
\fi
+ \group_end:
}
-\cs_gset:Npn \listoffigures
+\RenewDocumentCommand{\listoffigures}{so}
{
+ \group_begin:
+ \IfValueT {#2}{\keys_set:nn {listoc}{#2}}
\if@twocolumn
\@restonecoltrue\onecolumn
\bool_if:NT \l__multoc_bool{\twocolumn}
@@ -569,7 +598,9 @@
\@restonecolfalse
\bool_if:NT \l__multoc_bool{\twocolumn}
\fi
- \__title_mark_intoc:n {\listfigurename}
+ \IfBooleanTF {#1}
+ {\__title_mark:n {\listfigurename}}
+ {\__title_mark_intoc:n {\listfigurename}}
\dim_add:NV \l__toc_offset_dim\l__toc_listsoffset_dim
\vspace*{\dim_use:N \l__toc_offset_dim}
\@starttoc{lof}
@@ -578,9 +609,12 @@
\else
\onecolumn
\fi
+ \group_end:
}
-\cs_gset:Npn \listoftables
+\RenewDocumentCommand{\listoftables}{so}
{
+ \group_begin:
+ \IfValueT {#2}{\keys_set:nn {listoc}{#2}}
\if@twocolumn
\@restonecoltrue\onecolumn
\bool_if:NT \l__multoc_bool{\twocolumn}
@@ -588,7 +622,9 @@
\@restonecolfalse
\bool_if:NT \l__multoc_bool{\twocolumn}
\fi
- \__title_mark_intoc:n {\listtablename}
+ \IfBooleanTF {#1}
+ {\__title_mark:n {\listtablename}}
+ {\__title_mark_intoc:n {\listtablename}}
\dim_add:NV \l__toc_offset_dim\l__toc_listsoffset_dim
\vspace*{\dim_use:N \l__toc_offset_dim}
\@starttoc{lot}
@@ -597,9 +633,12 @@
\else
\onecolumn
\fi
+ \group_end:
}
-\cs_new:Npn \listoflistings
+\NewDocumentCommand{\listoflistings}{so}
{
+ \group_begin:
+ \IfValueT {#2}{\keys_set:nn {listoc}{#2}}
\if@twocolumn
\@restonecoltrue\onecolumn
\bool_if:NT \l__multoc_bool{\twocolumn}
@@ -607,7 +646,9 @@
\@restonecolfalse
\bool_if:NT \l__multoc_bool{\twocolumn}
\fi
- \__title_mark_intoc:n {\lstlistlistingname}
+ \IfBooleanTF {#1}
+ {\__title_mark:n {\lstlistlistingname}}
+ {\__title_mark_intoc:n {\lstlistlistingname}}
\dim_add:NV \l__toc_offset_dim\l__toc_listsoffset_dim
\vspace*{\dim_use:N \l__toc_offset_dim}
\@starttoc{lol}
@@ -616,6 +657,7 @@
\else
\onecolumn
\fi
+ \group_end:
}
\makeindex[
@@ -627,9 +669,9 @@
]
\indexsetup
{
- level = \chapter*,
- toclevel = chapter,
- firstpagestyle = plain
+ level = \int_compare:nTF {\c@chapter > 0}{\chapter*}{\section*},
+ toclevel = \int_compare:nTF {\c@chapter > 0}{chapter}{section},
+ firstpagestyle = \int_compare:nTF {\c@chapter > 0}{plain}{fancy}
}
\__patch_cmd:Nnn \imki@indexheaders
{\@mkboth{\MakeUppercase\indexname}{\MakeUppercase\indexname}}
@@ -640,7 +682,7 @@
\tl_new:N \l__font_listing_tl
\tl_new:N \l__font_footnote_tl
-\__ctex_define:nn {elfont}
+\__ctex_define:nn {elsefont}
{
table-cap .tl_set:N = \l__font_table_tl,
table-cap .initial:n = \sffamily\small,
@@ -684,11 +726,47 @@
\cs_new:Npn \__arabic:n #1{\int_to_arabic:v {c@#1}}
\AtBeginDocument
{
- \bool_if:NT \l__capdash_bool
+ \cs_new_protected:Npn \__separator_set:n #1
{
- \cs_gset:Npn \thefigure{\thechapter\textendash\__arabic:n {figure}}
- \cs_gset:Npn \thetable{\thechapter\textendash\__arabic:n {table}}
- \cs_gset:Npn \thelstlisting{\thechapter\textendash\__arabic:n {lstlisting}}
+ \cs_set:cpn {the#1}
+ {
+ \int_compare:nT {\c@chapter > 0}
+ {
+ \thechapter
+ \use:c {l__#1_separator_tl}
+ }
+ \__arabic:n {#1}
+ }
+ }
+ \cs_gset:cpn {thesection}
+ {
+ \int_compare:nT {\c@chapter > 0}{\thechapter.}
+ \__arabic:n {section}
+ }
+ \clist_map_inline:nn
+ {{figure},{table},{lstlisting},{equation}}
+ {\__separator_set:n {#1}}
+ \cs_gset_protected:Npn \appendix
+ {
+ \int_compare:nNnTF {\c@chapter} > {0}
+ {
+ \setcounter{chapter}{0}
+ \setcounter{section}{0}
+ \gdef\thechapter{\@Alph\c@chapter}
+ \gdef\CTEX@prechapter{\CTEX@preappendix}
+ \gdef\CTEX@thechapter{\CTEX@appendix@number}
+ \gdef\CTEX@postchapter{\CTEX@postappendix}
+ \gdef\CTEX@chapter@numbering{\CTEX@appendix@numbering}
+ }{
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \gdef\thesection{\@Alph\c@section}
+ \gdef\CTEX@presection{\CTEX@preappendix}
+ \gdef\CTEX@thesection{\CTEX@appendix@number}
+ \gdef\CTEX@postsection{\CTEX@postappendix}
+ \gdef\CTEX@section@numbering{\CTEX@appendix@numbering}
+ \ctex_set:nn {appendix}{number = {\@Alph\c@section},name = {}}
+ }
}
}
\AtBeginEnvironment{tabularx}
@@ -1094,10 +1172,32 @@
}
\tl_if_empty:NF \l__bib_citestyle_tl
{\exp_args:NV \setcitestyle\l__bib_citestyle_tl}
- \cs_set:Npn \bibsection{\__title_mark_intoc:n \bibname}
\skip_set:Nn \bibsep{0ex}
- \NewDocumentCommand{\printbibliography}{o}
- {\exp_args:NV \bibliography\l__bib_file_tl}
+ \NewDocumentCommand{\printbibliography}{so}
+ {
+ \group_begin:
+ \IfValueT {##2}{\keys_set:nn {listoc}{##2}}
+ \if@twocolumn
+ \@restonecoltrue\onecolumn
+ \bool_if:NT \l__multoc_bool{\twocolumn}
+ \else
+ \@restonecolfalse
+ \bool_if:NT \l__multoc_bool{\twocolumn}
+ \fi
+ \cs_set:Npn \bibsection
+ {
+ \IfBooleanTF {##1}
+ {\__title_mark:n {\bibname}}
+ {\__title_mark_intoc:n {\bibname}}
+ }
+ \exp_args:NV \bibliography\l__bib_file_tl
+ \if@restonecol
+ \twocolumn
+ \else
+ \onecolumn
+ \fi
+ \group_end:
+ }
}
\cs_new_protected:Npn \__put_biblatex:n #1
{\PassOptionsToPackage{#1}{biblatex}}
@@ -1119,7 +1219,8 @@
\cs_new_protected:Npn \__biblatex_after_set:
{
\exp_args:NV \addbibresource\l__bib_file_tl
- \defbibheading{bibliography}[\bibname]{\__title_mark_intoc:n {##1}}
+ \cs_gset:Npn \blx@default@theheading{bibintoc}
+ \defbibheading{bibintoc}[\bibname]{\__title_mark_intoc:n {##1}}
\skip_set:Nn \bibitemsep{0ex}
}
\ctex_at_end_preamble:n
diff --git a/macros/latex/contrib/econlipsum/README.md b/macros/latex/contrib/econlipsum/README.md
index ba3e13ad88..3973944298 100644
--- a/macros/latex/contrib/econlipsum/README.md
+++ b/macros/latex/contrib/econlipsum/README.md
@@ -1,7 +1,7 @@
The `econlipsum` package is a modified version of `kantlipsum` that offers the same functionalities, but instead of nonsense in Kantian style,
it typesets paragraphs infered from the abstracts of some economic articles. The text has been generated from the [Econ Ipsum](https://ipsum.mwt.me/) website, created by [Matthew Wildrick Thomas](https://mattwthomas.com/) and [Maria Fernanda Petri Betto](https://mariabetto.com/).
-The package has been built using `econlipsum` build script, that can be found in the package [Github repo](https://github.com/AlphaJack/econlipsum).
+The package has been built using `antanilipsum` build script, that can be found in the package [Github repo](https://github.com/AlphaJack/antanilipsum).
This released is based on `kantilipsum` version 0.8a.
diff --git a/macros/latex/contrib/econlipsum/econlipsum.dtx b/macros/latex/contrib/econlipsum/econlipsum.dtx
index 492c463aca..efed95106f 100644
--- a/macros/latex/contrib/econlipsum/econlipsum.dtx
+++ b/macros/latex/contrib/econlipsum/econlipsum.dtx
@@ -6,7 +6,7 @@
The `econlipsum` package is a modified version of `kantlipsum` that offers the same functionalities, but instead of nonsense in Kantian style,
it typesets paragraphs infered from the abstracts of some economic articles. The text has been generated from the [Econ Ipsum](https://ipsum.mwt.me/) website, created by [Matthew Wildrick Thomas](https://mattwthomas.com/) and [Maria Fernanda Petri Betto](https://mariabetto.com/).
-The package has been built using `econlipsum` build script, that can be found in the package [Github repo](https://github.com/AlphaJack/econlipsum).
+The package has been built using `antanilipsum` build script, that can be found in the package [Github repo](https://github.com/AlphaJack/antanilipsum).
This released is based on `kantilipsum` version 0.8a.
@@ -202,9 +202,7 @@ This work consists of the file econlipsum.dtx
% \subsection*{Note}
%
% This package aims to only modify the text used by the \pkg{kantlipsum} package
-% and in no way tries to alter how it operates. A public repository is available with
-% a bash script that allows to easily build a custom version of this package by simply
-% replacing the text file it uses.
+% and in no way tries to alter how it operates.
%
% The original \pkg{kantlipsum} is just an exercise for practicing with \LaTeX3
% syntax. It uses the ``experimental'' packages made available by the
@@ -235,7 +233,7 @@ This work consists of the file econlipsum.dtx
\ProvidesExplPackage
{econlipsum}
{2021-03-13}
- {0.8.1}
+ {0.8.2}
{Generate sentences from economic articles}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/econlipsum/econlipsum.pdf b/macros/latex/contrib/econlipsum/econlipsum.pdf
index a60751da16..a02d71e8fc 100644
--- a/macros/latex/contrib/econlipsum/econlipsum.pdf
+++ b/macros/latex/contrib/econlipsum/econlipsum.pdf
Binary files differ
diff --git a/macros/latex/contrib/eq-fetchbbl/README.md b/macros/latex/contrib/eq-fetchbbl/README.md
new file mode 100644
index 0000000000..91234c7fd9
--- /dev/null
+++ b/macros/latex/contrib/eq-fetchbbl/README.md
@@ -0,0 +1,25 @@
+The eq-fetchbbl package
+Author: D. P. Story
+Dated: 2021-03-15
+Version: v1.0
+
+The eq-fetchbbl package is an application to the exerquiz (eq) and
+fetchbibpes (fetchbbl) packages. This package defines several commands and
+two environments that are used to conveniently build quizzes that challenge
+the user to match Bible passages with their corresponding verse references.
+Technically speaking, such quizzes may be built without this package using
+the techniques illustrated in hhttp://www.acrotex.net/blog/?p=1446 (Exerquiz:
+Match-type questions) and in http://www.acrotex.net/blog/?p=1449 (Exerquiz:
+Randomized matching-type questions). However, when working with Biblical
+topics, it is easier to incorporate the fetching capabilities of
+fetchbibpes.
+
+Updated packages required are exerquiz (2021/02/21) and fetchbibpes
+(2021/03/08).
+
+Enjoy the package. Now, I simply must get back to my retirement.
+
+Dr. D. P. Story
+www.acrotex.net
+dpstory@uakron.edu
+dpstory@acrotex.net
diff --git a/macros/latex/contrib/eq-fetchbbl/docs/eq-fetchbbl-man.pdf b/macros/latex/contrib/eq-fetchbbl/docs/eq-fetchbbl-man.pdf
new file mode 100644
index 0000000000..1912a73c71
--- /dev/null
+++ b/macros/latex/contrib/eq-fetchbbl/docs/eq-fetchbbl-man.pdf
Binary files differ
diff --git a/macros/latex/contrib/eq-fetchbbl/docs/eq-fetchbbl-man.tex b/macros/latex/contrib/eq-fetchbbl/docs/eq-fetchbbl-man.tex
new file mode 100644
index 0000000000..c6b6acdc59
--- /dev/null
+++ b/macros/latex/contrib/eq-fetchbbl/docs/eq-fetchbbl-man.tex
@@ -0,0 +1,511 @@
+% D. P. Story
+\RequirePackage[use=forpub]{spdef}
+\documentclass{article}
+\usepackage[fleqn]{amsmath}
+\usepackage[
+ web={centertitlepage,designv,forcolorpaper,tight*,latextoc,pro},
+ exerquiz,
+ aebxmp
+]{aeb_pro}
+\usepackage[ignorecfg,useverses=none]{fetchbibpes}[2021/03/08]
+\usepackage{eq-fetchbbl}
+\addtoBibles{NKJV}
+
+\ifforpub\else\previewOn\pmpvOn\fi
+
+\useBeginQuizButton[\CA{Start}\textColor{blue}]
+\useEndQuizButton[\CA{End}\textColor{blue}]
+
+\usepackage[altbullet]{lucidbry}
+
+%\usepackage{makeidx}
+%\makeindex
+\usepackage{acroman}
+
+\usepackage[active]{srcltx}
+
+\edef\amtIndent{\the\parindent}
+
+\urlstyle{rm}
+
+%\def\tutpath{doc/tutorial}
+%\def\tutpathi{tutorial}
+\def\expath{../examples}
+\let\tops\texorpdfstring
+
+\DeclareDocInfo
+{
+ university={\AcroTeX.Net},
+ title={The \textsf{eq-fetchbbl} Package\tops{\\}{: }%
+ Creating Quizzes to match Bible Passages with Verses},
+ author={D. P. Story},
+ email={dpstory@acrotex.net},
+ subject=Documentation for the eq-fetchbbl package,
+ talksite={\url{www.acrotex.net}},
+ version={1.0, 2021/03/15},
+ Keywords={LaTeX,PDF,Quizzes,Matching,Bible passages},
+ copyrightStatus=True,
+ copyrightNotice={Copyright (C) \the\year, D. P. Story},
+ copyrightInfoURL={http://www.acrotex.net}
+}
+
+\def\dps{$\hbox{$\mathfrak D$\kern-.3em\hbox{$\mathfrak P$}%
+ \kern-.6em \hbox{$\mathcal S$}}$}
+
+\universityLayout{fontsize=Large}
+\titleLayout{fontsize=LARGE}
+\authorLayout{fontsize=Large}
+\tocLayout{fontsize=Large,color=aeb}
+\sectionLayout{indent=-62.5pt,fontsize=large,color=aeb}
+\subsectionLayout{indent=-31.25pt,color=aeb}
+\subsubsectionLayout{indent=0pt,color=aeb}
+\subsubDefaultDing{\texorpdfstring{$\bullet$}{\textrm\textbullet}}
+
+\def\ameta#1{$\langle\textit{\texttt{#1}}\rangle$}
+\def\meta#1{\textit{\texttt{#1}}}
+\let\pkg\textsf
+\let\env\texttt
+\let\opt\texttt
+\let\app\textsf
+
+\def\vissp{{\fontfamily{cmtt}\selectfont\symbol{32}}}
+\def\SUB#1{\ensuremath{{}_{\text{#1}}}}
+
+
+\makeatletter
+\renewcommand*{\theparagraph}{\texorpdfstring{\protect\P\protect\ }{\textparagraph}}
+\renewcommand{\paragraph}
+ {\renewcommand{\@seccntformat}[1]{\theparagraph}%
+ \@startsection{paragraph}{4}{0pt}{6pt}{-3pt}{\color{\aeb@subsubsectioncolor}\bfseries}}
+\renewcommand*\l@paragraph{\@dottedtocline{4}{5.0em}{1em}} %{7.0em}{4.1em}}
+
+\renewcommand{\makeinlinetitle}
+{%
+ \begingroup\parskip0pt\parindent0pt
+ \par\vspace*{6pt}
+ \noindent\makebox[\linewidth][c]{\bfseries
+ \color{\webuniversity@color}\webuniversity}\par\kern6pt\noindent
+ \makebox[\linewidth][c]{\parbox[c]{.75\linewidth}{\centering
+ \bfseries\color{\webtitle@color}\webtitle}}\par\kern12pt
+ \noindent\parbox{\linewidth}{\scriptsize
+ \web@copyright\space\the\year\hfill\thewebemail\\
+ \@date\hfill\@ifundefined{aeb@talksite}{\webversion}
+ {\ifx\aeb@talksite\@empty\webversion
+ \else\aeb@talksite\fi}%
+ }\par
+ \noindent\makebox[\linewidth]{\rule{.67\linewidth}{.4pt}}%
+ \par\endgroup
+}
+\makeatother
+
+%\pagestyle{empty}
+%\parindent0pt
+%\parskip\medskipamount
+
+\chngDocObjectTo{\newDO}{doc}
+\begin{docassembly}
+var titleOfManual="The eq-fetchbbl MANUAL";
+var manualfilename="Manual_BG_Print_eq-fetchbbl.pdf";
+var manualtemplate="Manual_BG_Green.pdf"; // Blue, Green, Brown
+var _pathToBlank="C:/Users/Public/Documents/ManualBGs/"+manualtemplate;
+var doc;
+var buildIt=false;
+if ( buildIt ) {
+ console.println("Creating new " + manualfilename + " file.");
+ doc = \appopenDoc({cPath: _pathToBlank, bHidden: true});
+ var _path=this.path;
+ var pos=_path.lastIndexOf("/");
+ _path=_path.substring(0,pos)+"/"+manualfilename;
+ \docSaveAs\newDO({ cPath: _path });
+ doc.closeDoc();
+ doc = \appopenDoc({cPath: manualfilename, oDoc:this, bHidden: true});
+ f=doc.getField("ManualTitle");
+ f.value=titleOfManual;
+ doc.flattenPages();
+ \docSaveAs\newDO({ cPath: manualfilename });
+ doc.closeDoc();
+} else {
+ console.println("Using the current "+ manualfilename + " file.");
+}
+var _path=this.path;
+var pos=_path.lastIndexOf("/");
+_path=_path.substring(0,pos)+"/"+manualfilename;
+\addWatermarkFromFile({
+ bOnTop:false,
+ bOnPrint:false,
+ cDIPath:_path
+});
+\executeSave();
+\end{docassembly}
+
+\begin{document}
+
+\maketitle
+
+\selectColors{linkColor=black}
+\tableofcontents
+\selectColors{linkColor=webgreen}
+
+\section{Introduction}
+
+The \pkg{eq-fetchbbl} package is an application to the \pkg{exerquiz} (eq)
+and \pkg{fetchbibpes} (fetchbbl) packages. This package defines several
+commands and two environments that are used to \emph{conveniently} build
+quizzes that challenges the user to match Bible passages with their
+corresponding verse references. Technically speaking, such quizzes may be
+built without this package using the techniques illustrated in
+\textsf{\href{http://www.acrotex.net/blog/?p=1446}{Exerquiz: Match-type
+questions}} and in
+\textsf{\href{http://www.acrotex.net/blog/?p=1449}{Exerquiz: Randomized
+matching-type questions}}.\relax
+\footnote{\url{http://www.acrotex.net/blog/?p=1446}}\ensuremath{{}^{\text{,}}}\footnote
+{\url{http://www.acrotex.net/blog/?p=1449}} When working with Biblical
+topics, however, it is easier to incorporate the fetching capabilities of
+\pkg{fetchbibpes}. All the examples given here are reproduced, with
+additional variations, in the sample file \texttt{doc-examples.tex}, found in
+the \texttt{examples} folder of this distribution.
+
+\begin{declareBVs*}
+\BV(Mat 10:26 NKJV) Therefore do not fear them. For there is nothing covered that will not be
+ revealed, and hidden that will not be known.\null
+\BV(Mar 1:11 NKJV) Then a voice came from heaven, \textcolor{red}{``You are My beloved Son, in whom I am well
+ pleased.''}\null
+\BV(Luk 12:2 NKJV) For there is nothing covered that will not be revealed, nor hidden that
+ will not be known.\null
+\BV(Act 10:15 NKJV) dummy entry\null
+\end{declareBVs*}
+\useBookStyle{abbr=none,from=NKJV}
+
+\begin{quiz}{q1}
+Match the quotations (\textsf{NKJV)} with the Bible references on the right.
+Each problem is worth 2 points; passing is 100\%.
+
+\noindent
+\begin{minipage}[t]{.75\linewidth} %{.75\linewidth-18pt}
+%\useNumbersOn
+\begin{questions}
+\begin{BblPsg}
+ \item\PTs*{2}\qFP{Mat 10:26}
+ \item\PTs*{2}\qFP{Mar 1:11}
+ \item\PTs*{2}\qFP{Luk 12:2}
+\end{BblPsg}
+\end{questions}
+\end{minipage}%\kern2.5em
+\hfill
+\begin{minipage}[t][0pt]{.25\linewidth-1em} %{.25\linewidth}
+\begin{questions}[itemsep={0pt},labelwidth={.5em}]
+\begin{BblVrs}
+ \item\qFV{Act 10:15}
+ \item\qFV{Luk 12:2}
+ \item\qFV{Mar 1:11}
+ \item\qFV{Eph 6:1}
+ \item\qFV{Mat 10:26}
+ \item\qFV{Joh 6:20}
+\end{BblVrs}
+\end{questions}
+\end{minipage}\hfill
+\par\medskip
+\end{quiz}\quad\PointsField\currQuiz\olBdry\CorrButton\currQuiz\cgBdry[6pt]
+Answers: \AnswerField[\Q{1}\textColor{blue}\rectW{\widthof{AA}}]{\currQuiz}
+
+\noindent
+Throughout this document, the markup for the above quiz is used to illustrate
+the commands and environments of this package.
+
+\section{Declaring Bible verses and passages}
+
+There are two ways of declaring Bible verses and passages:
+\begin{itemize}
+\item Through a database of verses:
+\begin{Verbatim}
+\usepackage[deffolder=exmpldefs,
+ useverses=verses]{fetchbibpes}[2021/03/08]
+\end{Verbatim}
+ Refer to the demo file \texttt{bible-quiz-uv.tex} for an example of this
+ method.
+\item Through direct specification of passages in the document using the
+ \env{declareBVs} environment. Refer to the demo files \texttt{bible-quiz.tex} and
+ \texttt{bible-quiz-rt.tex}.
+\end{itemize}
+
+\newtopic\noindent
+This documentation earlier declares,\footnote{This is an abbreviated listing, see
+\texttt{bible-quiz.tex} for the complete listing.}\goodbreak
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars={!~@}]
+\begin{declareBVs*}
+\BV(Mat 10:26 NKJV) Therefore do not fear them. For !dots\null
+\BV(Mar 1:11 NKJV) Then a voice came from heaven, !dots\null
+\BV(Luk 12:2 NKJV) For there is nothing covered !dots\null
+\end{declareBVs*}
+\end{Verbatim}
+These passages are used throughout this document.
+
+\section{Basic commands and environments}
+
+For Bible matching-type questions, Bible \emph{passages} are matched with their
+corresponding \emph{verse references}. In the discussion below, it is assumed
+that passages and verse references are within a \env{quiz} or \env{shortquiz}
+environment; they are listed in the \env{questions} environment of the quiz.
+Familiarity with the quizzes of {\AEB} is assumed.
+
+\paragraph*{Passages.} The passages are entered in the \env{BblPsg} (Bible Passages) environment.
+The passages themselves are typeset using the \cs{qFP} command
+(quiz-Fetch-Passage) for a quiz and the \cs{sFP} command
+(short-quiz-Fetch-Passage) for a short-quiz. The syntax is,
+\bVerb\takeMeasure{\quad\cs{item}\cs{qFP}[\ameta{opts\SUB1}]\darg{\ameta{book\SUB1}\vissp\ameta{ch\SUB1}:\ameta{vrs\SUB{1}}}}%
+%\setlength{\dimen0}{\bxSize}%
+\def\1{\rlap{\hskip\linewidth\textsf{(eg, \cs{qFP\darg{Mat 10:26}}\textsf{)}}}}%
+\def\2{\rlap{\hskip\linewidth\textsf{(eg, \cs{qFP\darg{Luk 12:2}}\textsf{)}}}}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\begin{BblPsg}
+!1!quad\item\qFP[!ameta(opts!SUB1)]{!ameta(book!SUB1)!vissp!ameta(ch!SUB1):!ameta(vrs!SUB1)}
+!quad!vdots!vdots!vdots
+!2!quad\item\qFP[!ameta(opts!SUB(n))]{!ameta(book!SUB(n))!vissp!ameta(ch!SUB(n)):!ameta(vrs!SUB(n))}
+\end{BblPsg}
+\end{dCmd}
+\eVerb The optional arguments (\meta{opts}) are passed to the underlying \cs{fetchversestxt}
+command of the \pkg{fetchbibpes} package; read the source file of
+\texttt{bible-quiz-uv.tex} for examples of the optional argument.
+
+
+\paragraph*{Verse References.} The verse references are entered into the \env{BblVrs} (Bible Verses) environment.
+The verses are typeset using the \cs{qFV} command (quiz-Fetch-Verse) for a
+quiz and the \cs{sFV} command (short-quiz-Fetch-Verse) for a short-quiz. The
+syntax is similar to the above.
+\bVerb\takeMeasure{\quad\cs{item}\cs{qFV}[\ameta{opts\SUB1}]\darg{\ameta{book\SUB1}\vissp\ameta{ch\SUB1}:\ameta{vrs\SUB{1}}}}%
+\def\1{\rlap{\hskip\linewidth\textsf{(eg, \cs{qFV\darg{Mat 10:26}}\textsf{)}}}}%
+\def\2{\rlap{\hskip\linewidth\textsf{(eg, \cs{qFV\darg{Luk 12:2}}\textsf{)}}}}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\begin{BblVrs}
+!1!quad\item\qFV[!ameta(opts!SUB1)]{!ameta(book!SUB1)!vissp!ameta(ch!SUB1):!ameta(vrs!SUB1)}
+!quad!vdots!vdots!vdots
+!2!quad\item\qFV[!ameta(opts!SUB(n))]{!ameta(book!SUB(n))!vissp!ameta(ch!SUB(n)):!ameta(vrs!SUB(n))}
+\end{BblVrs}
+\end{dCmd}
+\eVerb It is natural to include \emph{more verse references} than passages as distractions.
+
+\paragraph*{Numbering the passages.} The Bible passages may be presented with or without problem numbers;
+the default is to provide no problem numbers.
+\bVerb\takeMeasure{\string\begin\darg{questions}}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\useNumbersOn
+\useNumbersOff
+\begin{BblPsg}
+!vdots!vdots!vdots
+\end{BblPsg}
+\end{dCmd}
+\endgroup\noindent The command \cs{useNumbersOn} turns on numbering (within the \env{Bblpsg} environment only),
+while \cs{useNumbersOff} turns off numbering. The placement of these commands
+is prior to the opening of the \env{BblPsg} environment. The default is
+\cs{useNumbersOff}.
+
+\paragraph*{Positioning the \cs{CorrAnsButton} and \cs{sqTallyBox} controls.} The \pkg{eq-fetchbbl} package
+for positioning the \cs{CorrAnsButton} and \cs{sqTallyBox} controls.\footnote{Again, we assume familiarly with
+the quiz and short-quiz of \pkg{exerquiz}.}
+\bVerb\takeMeasure{\string\adjCAB[modify\#1]\darg{modify\#2}}%
+\def\1{\rlap{\hskip\linewidth\textsf{(positions \cs{CorrAnsButton})}}}%
+\def\2{\rlap{\hskip\linewidth\textsf{(positions \cs{sqTallyBox})}}}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+!1\adjCAB[modify#1]{modify#2}
+!2\adjTBX[modify#1]{modify#2}
+\end{dCmd}
+\eVerb Here, \texttt{\#1} refers to \cs{hfill} that is inserted following the
+Bible passage, and \texttt{\#2} refers to \cs{CorrAnsButton} (for quiz) and
+\cs{sqTallyBox} (for short-quiz). The defaults are \verb~\adjCAB{#2}~ and
+\verb~\adjTBX{#2}~.
+
+\newtopic\noindent
+Let's go to the examples.
+\begin{itemize}
+ \item \verb!\adjCAB[\space]{#2}! places a space just after the end of the passage followed
+ by the control (either \cs{CorrAnsButton} or \cs{sqTallyBox}),
+ \item \verb!\adjCAB[]{}! removes the control \cs{CorrAnsButton}
+ (\cs{sqTallyBox}) from the quiz (short-quiz).
+ \item \verb!\adjCAB{\makebox[0pt][l]{\enspace#2\enspace}}! pushes control
+ into the right margin.
+\end{itemize}
+The placement of \cs{adjCAB} and \cs{adjTBX} is just above the question it is
+to effect.
+
+\paragraph*{Example.}
+In the quiz below, the commands,
+\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()]
+\begin{questions}
+\useNumbersOn
+\adjCAB{\makebox[0pt][l]{\enspace#2\enspace}}
+\begin{BblPsg}
+!vdots!vdots!vdots
+\end{BblPsg}
+!vdots!vdots!vdots
+\end{questions}
+\end{Verbatim}
+are specified above the \verb~\begin{BblPsg}~ line, as shown. (They can, of
+course, appear above the \env{questions} environment as well.) The space
+between the passages on the left and the verse references on the right is
+increased to accommodate the \cs{CorrAnsButton}.
+
+%\newpage
+
+\begin{quiz*}{q2}
+Match the quotations (\textsf{NKJV)} with the Bible references on the right.
+Each problem is worth 2 points; passing is 100\%.
+
+\setlength{\eflength}{\widthof{\enspace\CorrAnsButton{A}\enspace}} %\previewOn
+\useMCCircles
+
+\noindent
+\begin{minipage}[t]{.75\linewidth-\eflength}
+\begin{questions}
+\useNumbersOn
+\adjCAB{\makebox[0pt][l]{\enspace#2\enspace}}
+\everyRespBoxTxt{\textColor{blue}}
+\begin{BblPsg}
+ \item\PTs*{2}\qFP{Mat 10:26}
+ \item\PTs*{2}\qFP{Mar 1:11}
+ \item\PTs*{2}\qFP{Luk 12:2}
+\end{BblPsg}
+\item\PTs*{2} The quotation ``Treasures of wickedness profit nothing, But righteousness delivers from death''
+is a verse from which of the following books?
+\begin{answers}{4}
+ \bChoices
+ \Ans0 Psalms\eAns
+ \Ans0 Isaiah\eAns
+ \Ans1 Proverbs\eAns
+ \Ans0 Jonah\eAns
+ \eChoices
+\end{answers}
+
+
+\end{questions}
+\end{minipage}%\kern2.5em
+\hfill
+\begin{minipage}[t]{.25\linewidth}
+\begin{questions}[itemsep={0pt},labelwidth={1em}]
+%\begin{minipage}[t]{100pt-\widthof{\enspace}} %{.25\linewidth+\eflength} %{.25\linewidth}
+%\begin{questions}[itemsep={0pt},labelwidthTo={\enspace}]
+\begin{BblVrs}
+ \item\qFV{Act 10:15}
+ \item\qFV{Luk 12:2}
+ \item\qFV{Mar 1:11}
+ \item\qFV{Eph 6:1}
+ \item\qFV{Mat 10:26}
+ \item\qFV{Joh 6:20}
+\end{BblVrs}
+\end{questions}
+\end{minipage}\hfil
+\par\medskip
+\end{quiz*}\quad\PointsField\currQuiz\olBdry\CorrButton\currQuiz\cgBdry[6pt]
+Answers: \AnswerField[\Q{1}\textColor{blue}\rectW{\widthof{AA}}]{\currQuiz}\vcgBdry[6pt]
+
+
+There are two alternate positions for the \cs{CorrAnsButton} or \cs{sqTallyBox}
+controls The insertion point for \cs{priorRBT} is just \emph{prior} to the underlying
+\cs{RespBoxTxt} command, while the insertion point for \cs{priorPsg} is just \emph{prior}
+to the passage.
+\bVerb\takeMeasure{\string\priorRBT\darg{modify\#1}\quad\string\priorPsg\darg{modify\#1}}%
+\def\1{\rlap{\hskip\linewidth\textsf{(positions \cs{CorrAnsButton} or \cs{sqTallyBox})}}}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\priorRBT{modify#1}!quad\priorPsg{modify#1}
+\end{dCmd}
+\eVerb Here, \texttt{\#1} is \cs{CorrAnsButton} for the \env{quiz}
+environment and is \cs{sqTallyBox} for the \env{shortquiz} environment. The
+defaults are \verb!\priorRBT{}! and \verb~\priorPsg{}~, which means there is
+no insertion prior to \cs{RespBoxTxt} or to the passage. For example,
+\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()]
+\useNumbersOn
+\priorRBT{\makebox[0pt][l]{\hspace{\linewidth}\enspace#1\enspace}}
+\adjCAB{} %!textsf( So Ans does not appear at the end of the line)
+\begin{BblPsg} %!textsf( make changes before BblPsg opens)
+\end{Verbatim}
+
+\begin{quiz*}{q3}
+Match the quotations (\textsf{NKJV)} with the Bible references on the right.
+Each problem is worth 2 points; passing is 100\%.
+
+\setlength{\eflength}{\widthof{\enspace\CorrAnsButton{A}\enspace}} %\previewOn
+\useMCCircles
+
+\noindent
+\begin{minipage}[t]{.75\linewidth-\eflength}
+\useNumbersOff
+\priorRBT{\makebox[0pt][l]{\hspace{\RBTWidth}\hspace{\labelsep}\hspace{\linewidth}\enspace#1\enspace}}
+\adjCAB{}
+\everyRespBoxTxt{\textColor{blue}}
+\begin{questions}
+\begin{BblPsg}
+ \item\PTs*{2}\qFP{Mat 10:26}
+ \item\PTs*{2}\qFP{Mar 1:11}
+ \item\PTs*{2}\qFP{Luk 12:2}
+\end{BblPsg}
+
+\end{questions}
+\end{minipage}%\kern2.5em
+\hfill
+\begin{minipage}[t]{.25\linewidth} %{.25\linewidth}
+\begin{questions}[itemsep={0pt},labelwidth={1em}]
+ \begin{BblVrs}
+ \item\qFV{Act 10:15}
+ \item\qFV{Luk 12:2}
+ \item\qFV{Mar 1:11}
+ \item\qFV{Eph 6:1}
+ \item\qFV{Mat 10:26}
+ \item\qFV{Joh 6:20}
+\end{BblVrs}
+\end{questions}
+\end{minipage}\hfil
+\par\medskip
+\end{quiz*}\quad\PointsField\currQuiz\olBdry\CorrButton\currQuiz\cgBdry[6pt]
+Answers: \AnswerField[\Q{1}\textColor{blue}\rectW{\widthof{AA}}]{\currQuiz}\vcgBdry[6pt]
+
+When you take this quiz, you'll notice that the \cs{CorrAnsButton}
+(\textsf{Ans}) button is aligned with the first line of the passage rather
+than the last line of the passage.
+
+The previous quiz used \cs{priorRBT}, the command \cs{priorPsg} is
+illustrated in the \texttt{doc-example.tex} file.
+
+\newtopic\noindent Using a numbering scheme (\cs{useNumbersOn}) allows a consistent
+structure of incorporating other types of questions into the quiz, as shown above.
+
+\newtopic\noindent
+You can change the appearance properties of the underlying \cs{RespBoxTxt} command with the
+\cs{everyRespBoxTxt} command; as was done in the previous quiz, in which
+\verb|\everyRespBoxTxt{\textColor{blue}}| is expanded just below the \cs{adjCAB} command.
+
+\paragraph*{A final note.} For matching, there are two ``blocks'' of items,
+the passages and the verse references. The document author determines how to
+present these two blocks. Originally, I used a \env{multicols} environment;
+later, I switched over to enclosing the two blocks in separate
+\env{minipage}s and placing them side-by-side. Both methods have problems if
+your cross a page boundary.
+
+\section{Other customizations}
+
+The color of the verse references labels is, by default, blue.
+(\textcolor{blue}{A}, \textcolor{blue}{B}, \dots.) Change this color with the
+\pkg{exerquiz} command \cs{quesNumColor}; eg, \cs{quesNumColor\darg{red}}
+changes the verse references labels to the color red. Any other
+changes to the labeling of verse references requires a redefinition of
+\env{BibVrs}. Refer to \texttt{doc-examples.tex} for an example of redefining
+\env{BibVrs}.
+
+\bVerb\takeMeasure{\string\setRBTWidthTo\darg{\ameta{content}}}%
+\def\1{\rlap{\hskip\linewidth\textsf{(both define \cs{RBTWidth})}}}%
+%\def\2{\rlap{\hskip\linewidth\textsf{(eg, \cs{qFP\darg{Luk 12:2}}\textsf{)}}}}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+!1\setRBTWidthTo{!ameta(content)}
+\setRBTWidth{!ameta(length)}
+\end{dCmd}
+\eVerb Both commands define \cs{RBTWidth} to a width determined by their
+arguments. For \cs{setRBTWidthTo}, \ameta{content} is any text; it is
+measured to determine its width and the width becomes the expansion of
+\cs{RBTWidth}. For \cs{setRBTWidth}, \ameta{length} and any length,
+\cs{RBTWidth} then is defined to expand to \ameta{length}. The command
+\cs{RBTWidth} is the width of the \cs{RespBoxTxt} control; its default value
+is \verb~\setRBTWidthTo{AA}~.
+
+\vcgBdry[6pt]
+
+Now, I simply must get back to my retirement. \dps
+
+\end{document}
diff --git a/macros/latex/contrib/eq-fetchbbl/docs/eq-fetchbbl.pdf b/macros/latex/contrib/eq-fetchbbl/docs/eq-fetchbbl.pdf
new file mode 100644
index 0000000000..bbb336f5b6
--- /dev/null
+++ b/macros/latex/contrib/eq-fetchbbl/docs/eq-fetchbbl.pdf
Binary files differ
diff --git a/macros/latex/contrib/eq-fetchbbl/eq-fetchbbl.dtx b/macros/latex/contrib/eq-fetchbbl/eq-fetchbbl.dtx
new file mode 100644
index 0000000000..4570af3beb
--- /dev/null
+++ b/macros/latex/contrib/eq-fetchbbl/eq-fetchbbl.dtx
@@ -0,0 +1,210 @@
+%\iffalse
+%<*copyright>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% eq-fetchbbl.sty package %%
+%% Copyright (C) 2021 %%
+%% dpstory@acrotex.net %%
+%% %%
+%% This program can redistributed and/or modified under %%
+%% the terms of the LaTeX Project Public License %%
+%% Distributed from CTAN archives in directory %%
+%% macros/latex/base/lppl.txt; either version 1 of the %%
+%% License, or (at your option) any later version. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%</copyright>
+%<package>\NeedsTeXFormat{LaTeX2e}[1997/12/01]
+%<package>\ProvidesPackage{eq-fetchbbl}
+%<package> [2021/03/15 v1.0 eq-fetchbbl: Match Bible passages to verses (dps)]
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[colorlinks,hyperindex=false]{hyperref}
+%\pdfstringdefDisableCommands{\let\\\textbackslash}
+%\EnableCrossrefs \CodelineIndex
+\OnlyDescription % comment out for implementation details
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\InputIfFileExists{aebdocfmt.def}{\PackageInfo{web}{Inputting aebdocfmt.def}}
+ {\def\IndexOpt{\DescribeMacro}\def\IndexKey{\DescribeMacro}\let\setupFullwidth\relax
+ \PackageInfo{web}{aebdocfmt.def cannot be found}}
+\begin{document}
+\def\CMD#1{\textbackslash#1}
+\gdef\darg#1{\texttt{\char123\relax#1\char125\relax}}
+\def\CMD#1{\textbackslash#1}
+\let\pkg\textsf
+\let\opt\texttt
+\let\env\texttt
+\let\app\textsf
+\let\uif\textsf
+\def\STRUT{\rule{0pt}{14pt}}
+\def\negSTRUT{\rule[-8pt]{0pt}{0pt}}
+\def\nmpsep#1{\hskip-\marginparsep\texttt{#1}}
+\def\visispace{\symbol{32}}
+\def\ameta#1{\ensuremath{\langle\textit{\texttt{#1}}\rangle}}
+\def\meta#1{\textsl{\texttt{#1}}}
+\def\SUB#1{\ensuremath{{}_{\mbox{\scriptsize\ttfamily#1}}}}
+\addtolength{\marginparwidth}{3pt}
+ \GetFileInfo{eq-fetchbbl.sty}
+ \title{\texorpdfstring{\protect\pkg{eq-fetchbbl}}{eq-fetchbbl}: Match Bible passages to verses}
+ \author{D. P. Story\\
+ Email: \texttt{dpstory@acrotex.net}}
+ \date{processed \today}
+ \maketitle
+ \tableofcontents
+ \DocInput{eq-fetchbbl.dtx}
+\IfFileExists{\jobname.ind}{\newpage\setupFullwidth\par\PrintIndex}{\paragraph*{Index} The index goes here.\\Execute
+ \begin{quote}\texttt{makeindex -s gind.ist -o eq-fetchbbl.ind eq-fetchbbl.idx}\end{quote}
+ on the command line and recompile \texttt{eq-fetchbbl.dtx}.}
+\IfFileExists{\jobname.gls}{\PrintChanges}{\paragraph*{Change History} The list of changes goes here.\\Execute
+ \begin{quote}\texttt{makeindex -s gglo.ist -o eq-fetchbbl.gls eq-fetchbbl.glo}\end{quote}
+ on the command line and recompile \texttt{eq-fetchbbl.dtx}.}
+\end{document}
+%</driver>
+% \fi
+% \MakeShortVerb{|}
+% \InputIfFileExists{aebdonotindex.def}{\PackageInfo{web}{Inputting aebdonotindex.def}}
+% {\PackageInfo{web}{cannot find aebdonotindex.def}}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+% \section{Introduction}
+% This package provides several commands and two environment that make it easy to
+% create quizzes that match Bible passages with their verse reference. This
+% package is an application to the quizzes of \pkg{exerquiz} and to the fetching
+% capability of the \pkg{fetchbibpes} package.
+% \changes{v1.0}{2021/03/15}{First publication date}
+% \begin{macrocode}
+% \end{macrocode}
+% \section{Required Packages}
+% \begin{macrocode}
+\RequirePackage{exerquiz}[2021/02/21]
+\RequirePackage{fetchbibpes}[2021/03/08]
+% \end{macrocode}
+% \section{The environments and commands of \texorpdfstring{\protect\pkg}{}{eq-fetchbbl}}
+% \begin{macrocode}
+\newif\ifeqf@usenumbers\eqf@usenumbersfalse
+% \end{macrocode}
+% Execute \DescribeMacro{\useNumbersOn}\cs{useNumbersOn} to display the natural
+% numbering of the items within the \env{BblPsg} environment; the default is
+% \DescribeMacro{\useNumbersOff}\cs{useNumbersOff}.
+% \begin{macrocode}
+\let\useNumbersOn\eqf@usenumberstrue
+\let\useNumbersOff\eqf@usenumbersfalse
+% \end{macrocode}
+% The \DescribeMacro{\setRBTWidthTo}\cs{setRBTWidthTo} sets the
+% contents of \cs{RBTWidth} to the width of the argument passed to it,
+% \cs{RBTWidth} is used for the width of
+% the underlying \cs{RespBoxTxt} control. The default is |\setRBTWidthTo{AA}|
+% the width of two capital A's. Similarly, \DescribeMacro\setRBTWidth
+% \cs{setRBTWidth} sets the contents of \cs{RBTWidth} based on a dimension
+% passed by its argument (eg, |setRBTWidth{10pt}|).
+% \begin{macrocode}
+\newcommand{\setRBTWidthTo}[1]{\settowidth{\eflength}{#1}\edef
+ \RBTWidth{\the\eflength}}
+\setRBTWidthTo{AA}
+\newcommand{\setRBTWidth}[1]{\setlength{\eflength}{#1}\edef
+ \RBTWidth{\the\eflength}}
+% \end{macrocode}
+% \leavevmode\DescribeMacro{\presetMBbl}
+% We set the default properties of the questions of \cs{RespBoxTxt} (those
+% within the \env{BblPsg} environment). May be redefined.
+% \begin{macrocode}
+\newcommand{\presetMBbl}{\Q{1}\rectW{\RBTWidth}
+ \AddAAKeystroke{event.change=event.change.toUpperCase();}}
+% \end{macrocode}
+% Internal definition of markup common to \cs{@qFP} and \cs{@sFP}.
+% \begin{macrocode}
+\newcommand{\priorRBT}[1]{\def\prior@RBT##1{#1}}
+\priorRBT{}
+\newcommand{\priorPsg}[1]{\def\prior@Psg##1{#1}}
+\priorPsg{}
+\def\CATorTBX#1{\ifx\eqQuizType\isQZ
+ \CorrAnsButton{\txtRef{\currQuiz#1}}\else
+ \sqTallyBox\fi}
+\def\eqf@RBTx#1{\prior@RBT{\CATorTBX{#1}}\RespBoxTxt[%
+ \presets{\presetMBbl}]{0}{0}{1}{\txtRef{\currQuiz#1}}}
+\def\@@qsFP#1#2{\fetchversestxt[typeset,#1]{#2}\strut
+ \ifeqf@usenumbers\efKern{1bp}{0pt}\eqf@RBTx{#2}\space\else
+ \makebox[0pt][r]{\eqf@RBTx{#2}\hskip\labelsep}\ignorespaces\fi
+ \prior@Psg{\CATorTBX{#2}}\passagetxt
+}
+% \end{macrocode}
+% \leavevmode\DescribeMacro{\@qFP}\nmpsep{[\ameta{options}]\darg{\ameta{verse}}}
+% is an internal command that is \cs{let} to \DescribeMacro\qFP\cs{qFP} within the \env{BblPsg} environment.
+% The \ameta{options} are passed to \cs{fetchversestxt} of the \pkg{fetchbibpes} package;
+% \ameta{verse} is the verse of the passage to be used. For example, |\qFP{Mat 10:26}|.
+% \begin{macrocode}
+\newcommand\adjCAB[2][\hfill]{\def\@djCAB##1##2{#1#2}}
+\adjCAB{#2}
+\newcommand{\@qFP}[2][]{\@@qsFP{#1}{#2}\relax
+ \@djCAB{\hfill}{\CorrAnsButton{\txtRef{\currQuiz#2}}}}
+% \end{macrocode}
+% \leavevmode\DescribeMacro{\@qFV}\nmpsep{[\ameta{options}]\darg{\ameta{verse}}}
+% is an internal command that is \cs{let} to \DescribeMacro\qFV\cs{qFV} within the \env{BblPsg} environment.
+% The \ameta{options} are passed to \cs{fetchversestxt} of the \pkg{fetchbibpes} package;
+% \ameta{verse} is the verse of the passage to be used. For example, |\qFV{Mat 10:26}|.
+% \begin{macrocode}
+\newcommand{\@qFV}[2][]{%
+ \fetchversestxt[typeset,#1]{#2}\label{\currQuiz#2}\strut
+ \versetxt
+}
+% \end{macrocode}
+% \leavevmode\DescribeMacro{\@sFP}\nmpsep{[\ameta{options}]\darg{\ameta{verse}}}
+% is an internal command that is \cs{let} to \DescribeMacro\sFP\cs{sFP} within the \env{BblPsg} environment.
+% The \ameta{options} are passed to \cs{fetchversestxt} of the \pkg{fetchbibpes} package;
+% \ameta{verse} is the verse of the passage to be used. For example, |\sFP{Mat 10:26}|.
+% \begin{macrocode}
+\newcommand\adjTBX[2][\hfill]{\def\@djTBX##1##2{#1#2}}
+\adjTBX{#2}
+\newcommand{\@sFP}[2][]{\@@qsFP{#1}{#2}\relax
+ \@djTBX{\hfill}{\sqTallyBox}}
+% \end{macrocode}
+% \leavevmode\DescribeMacro{\@sFV}\nmpsep{[\ameta{options}]\darg{\ameta{verse}}}
+% is an internal command that is \cs{let} to \DescribeMacro\sFP\cs{sFV} within the \env{BblPsg} environment.
+% The \ameta{options} are passed to \cs{fetchversestxt} of the \pkg{fetchbibpes} package;
+% \ameta{verse} is the verse of the passage to be used. For example, |\sFV{Mat 10:26}|.
+% \begin{macrocode}
+\newcommand{\@sFV}[2][]{%
+ \fetchversestxt[typeset,#1]{#2}\label{\currQuiz#2}\strut
+ \versetxt}
+% \end{macrocode}
+% The code of \DescribeMacro{\eqfQorS}\cs{eqfQorS} appears twice, one in
+% \env{BblPsg} and once in \env{BblVrs}. Do not redefine this command.
+% When redefining either \env{BblPsg} or \env{BblVrs}, do not remove
+% this required command.
+% \begin{macrocode}
+\def\eqfQorS{\ifx\eqQuizType\isQZ
+ \let\qFP\@qFP\let\qFV\@qFV\else
+ \let\sFP\@sFP\let\sFV\@sFV\fi}
+% \end{macrocode}
+% \begin{environment}{BblPsg}
+% Enclose the questions (the passages) in the \env{BblPsg} environment. The environment
+% makes some local changes in definitions. It makes a series of \cs{let}s
+% of internal command names to public names; available only within this
+% environment.
+% \begin{macrocode}
+\newenvironment{BblPsg}{\ifeqf@usenumbers\else
+ \renewcommand{\labeleqquestionnoi}{}\fi
+ \eqfQorS
+}{}
+% \end{macrocode}
+% \end{environment}
+% \begin{environment}{BblVrs}
+% Enclose the answers (the verses) in the \env{BblVrs} environment. The environment
+% makes some local changes in definitions. It makes a series of \cs{let}s
+% of internal command names to public names; available only within this
+% environment.
+% \begin{macrocode}
+\newenvironment{BblVrs}{%
+ \renewcommand{\theeqquestionnoi}{\Alph{eqquestionnoi}}%
+ \renewcommand{\labeleqquestionnoi}{%
+ \color{\eq@quesNumCol}\bfseries\theeqquestionnoi}%
+ \eqfQorS
+}{}
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+\endinput
diff --git a/macros/latex/contrib/eq-fetchbbl/eq-fetchbbl.ins b/macros/latex/contrib/eq-fetchbbl/eq-fetchbbl.ins
new file mode 100644
index 0000000000..5924497322
--- /dev/null
+++ b/macros/latex/contrib/eq-fetchbbl/eq-fetchbbl.ins
@@ -0,0 +1,60 @@
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run through
+%% LaTeX or TeX.
+%%
+%% Copyright 1999-2012 D. P. Story
+%%
+%% This file is part of the `AcroTeX eDucation Bundle'.
+%% -------------------------------------------
+%%
+%% It may be distributed under the conditions of the LaTeX Project Public
+%% License, either version 1.2 of this license or (at your option) any
+%% later version. The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.2 or later is part of all distributions of LaTeX
+%% version 1999/12/01 or later.
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\def\filedate{2018/04/26}
+\def\batchfile{eq-fetchbbl.ins}
+
+\input docstrip
+\ifx\generate\undefined
+ \Msg{**********************************************}
+ \Msg{*}
+ \Msg{* This installation requires docstrip}
+ \Msg{* version 2.4 or later.}
+ \Msg{*}
+ \Msg{* An older version of docstrip has been input}
+ \Msg{*}
+ \Msg{**********************************************}
+ \errhelp{Move or rename old docstrip.tex and get a newer one.}
+ \errmessage{Old docstrip in input path}
+ \batchmode
+ \csname @@end\endcsname\end
+\fi
+
+\keepsilent
+\askforoverwritefalse
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\preamble
+\endpreamble
+
+\generate
+{%
+ \file{eq-fetchbbl.sty}{\from{eq-fetchbbl.dtx}{copyright,package}}
+}
+
+\Msg{***************************************************************}
+\Msg{*}
+\Msg{* \space To finish the installation you have to copy the files }
+\Msg{*}
+\Msg{* \space *.sty, *.cfg and *.def into a directory searched by TeX}
+\Msg{*}
+\Msg{***************************************************************}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput
diff --git a/macros/latex/contrib/eq-fetchbbl/examples/bible-quiz-rt.tex b/macros/latex/contrib/eq-fetchbbl/examples/bible-quiz-rt.tex
new file mode 100644
index 0000000000..5c5710b93e
--- /dev/null
+++ b/macros/latex/contrib/eq-fetchbbl/examples/bible-quiz-rt.tex
@@ -0,0 +1,104 @@
+\documentclass[11pt]{article}
+\usepackage{web}
+\screensize{11in}{8.5in}
+\margins{1in}{1in}{1in}{1in}
+\usepackage{exerquiz}[2021/02/15]
+\usepackage{ran_toks}
+\usepackage[ignorecfg,useverses=none]{fetchbibpes}[2021/03/08]
+\usepackage{eq-fetchbbl}
+\addtoBibles{NKJV}
+
+%\useLastAsSeed
+% To reproduce the same pseudo-random sequence, you need to supply a seed
+\useThisSeed{344966662}
+
+
+\title{Matching-type questions for a Quiz\texorpdfstring{\\[1ex]}{: }Randomizing Bible Passages with their Verses}
+\author{D. P. Story}
+\subject{Matching-type questions}
+\date{\today}
+\keywords{AcroTeX, LaTeX, quiz, matching, randomized}
+\version{\url{http://blog.acrotex.net}}
+\versionLabel{}
+\revisionLabel{Published:}
+
+\university
+{%
+ The {Acro\negthinspace\TeX} Blog
+}
+\email{dpstory@acrotex.net}
+
+\useBeginQuizButton[\CA{Start}\textColor{blue}]
+\useEndQuizButton[\CA{End}\textColor{blue}]
+
+\def\cs#1{\texttt{\eqbs#1}}
+
+\PTsHook{($\eqPTs^{\scriptsize\mbox{pts}}$)}
+\showCreditMarkup
+
+\begin{declareBVs*}
+\BV(Mat 10:26 NKJV) Therefore do not fear them. For there is nothing covered
+ that will not be revealed, and hidden that will not be known.\null
+\BV(Mar 1:11 NKJV) Then a voice came from heaven, ``You are My beloved Son,
+ in whom I am well pleased.''\null
+\BV(Luk 12:2 NKJV) For there is nothing covered that will not be revealed,
+ nor hidden that will not be known.\null
+\end{declareBVs*}
+
+\useBookStyle{abbr=none,from=NKJV}
+
+\begin{document}
+
+\maketitle
+
+\section*{Introduction}
+
+Match the Bible quotations in the left column with their reference passages.
+Quotations are taken from the \textsf{New King James Version (NKJV)}.
+
+\section*{The New Testament}
+
+\ranToks{RandomQzQues}
+{%
+ {\PTs*{2}\qFP{Mat 10:26}}
+ {\PTs*{2}\qFP{Mar 1:11}}
+ {\PTs*{2}\qFP{Luk 12:2}}
+}
+\ranToks{RandomQzAlts}
+{%
+ {\qFV{Mat 10:26}}
+ {\qFV{Mar 1:11}}
+ {\qFV{Luk 12:2}}
+ {\qFV{Act 10:15}}
+ {\qFV{Eph 6:1}}
+ {\qFV{Joh 6:20}}
+}
+\showCreditMarkup
+
+
+\begin{quiz}{q2}
+Match the quotations (\textsf{NKJV}) with the Bible references on the right.
+Each problem is worth 2 points.
+
+\noindent
+\begin{minipage}[t]{.75\linewidth}
+\useNumbersOn
+\begin{questions}
+\begin{BblPsg}
+\displayListRandomly[\item]{RandomQzQues}
+\end{BblPsg}
+\end{questions}
+\end{minipage}\hfill
+\begin{minipage}[t]{.25\linewidth-10pt}
+\hideCreditMarkup
+\begin{questions}[itemsep={0pt}]
+\begin{BblVrs}
+\displayListRandomly[\item]{RandomQzAlts}
+\end{BblVrs}
+\end{questions}
+\end{minipage}
+\medskip\par
+\end{quiz}\quad\PointsField\currQuiz\olBdry\CorrButton\currQuiz\cgBdry[6pt]
+Answers: \AnswerField[\Q{1}\textColor{blue}\rectW{\RBTWidth}]{\currQuiz}
+
+\end{document}
diff --git a/macros/latex/contrib/eq-fetchbbl/examples/bible-quiz-uv.tex b/macros/latex/contrib/eq-fetchbbl/examples/bible-quiz-uv.tex
new file mode 100644
index 0000000000..2ebe39e771
--- /dev/null
+++ b/macros/latex/contrib/eq-fetchbbl/examples/bible-quiz-uv.tex
@@ -0,0 +1,78 @@
+\documentclass[11pt]{article}
+\usepackage{web}
+\screensize{11in}{8.5in}
+\margins{1in}{1in}{1in}{1in}
+\usepackage{exerquiz}[2021/02/15]
+\usepackage[deffolder=exmpldefs,ignorecfg,
+ useverses=verses]{fetchbibpes}[2021/03/08]
+\usepackage{eq-fetchbbl}
+
+\title{Matching-type questions for a Quiz\texorpdfstring{\\[1ex]}{: }Bible Passages with their Verses}
+\author{D. P. Story}
+\subject{Matching-type questions}
+\date{\today}
+\keywords{AcroTeX, LaTeX, quiz, matching, randomized}
+\version{\url{http://blog.acrotex.net}}
+\versionLabel{}
+\revisionLabel{Published:}
+\university
+{%
+ The {Acro\negthinspace\TeX} Blog
+}
+\email{dpstory@acrotex.net}
+
+\useBeginQuizButton[\CA{Start}\textColor{blue}]
+\useEndQuizButton[\CA{End}\textColor{blue}]
+
+\def\cs#1{\texttt{\eqbs#1}}
+\let\pkg\textsf
+
+\useBookStyle{abbr=none}
+
+\PTsHook{($\eqPTs^{\scriptsize\mbox{pts}}$)}
+\showCreditMarkup
+
+\begin{document}
+
+\maketitle
+
+\section*{Introduction}
+
+Match the Bible quotations in the left column with their reference passages.
+
+\section*{Various Passages}
+
+\begin{quiz}{q1}
+Match the quotations with the Bible references on the right.
+Each problem is worth 2 points; passing is 100\%.
+
+\noindent
+\begin{minipage}[t]{.75\linewidth}
+\useNumbersOn
+\begin{questions}
+\begin{BblPsg}
+ \item\PTs*{2}\qFP[from=ISV]{Gen 1:1}
+ \item\PTs*{2}\qFP[alt=Alt]{Col 1:6}
+ \item\PTs*{2}\qFP[from=ISV,alt=Alt]{1Ki 1:1}
+\end{BblPsg}
+\end{questions}
+\end{minipage}\hfill
+\begin{minipage}[t][0pt]{.25\linewidth-10pt}
+\hideCreditMarkup
+\begin{questions}[itemsep={0pt}]
+\begin{BblVrs}
+ \item\qFV{Act 10:15}
+ \item\qFV[from=ISV]{Gen 1:1}
+ \item\qFV[alt=Alt]{Col 1:6}
+ \item\qFV{Eph 6:1}
+ \item\qFV[from=ISV,alt=Alt]{1Ki 1:1}
+ \item\qFV{Joh 6:20}
+\end{BblVrs}
+\end{questions}
+\end{minipage}
+\par\medskip
+\end{quiz}\quad\PointsField\currQuiz\olBdry\CorrButton\currQuiz\cgBdry[6pt]
+Answers: \AnswerField[\Q{1}\textColor{blue}\rectW{\RBTWidth}]{\currQuiz}
+
+\end{document}
+
diff --git a/macros/latex/contrib/eq-fetchbbl/examples/bible-quiz.pdf b/macros/latex/contrib/eq-fetchbbl/examples/bible-quiz.pdf
new file mode 100644
index 0000000000..c097f00a0e
--- /dev/null
+++ b/macros/latex/contrib/eq-fetchbbl/examples/bible-quiz.pdf
Binary files differ
diff --git a/macros/latex/contrib/eq-fetchbbl/examples/bible-quiz.tex b/macros/latex/contrib/eq-fetchbbl/examples/bible-quiz.tex
new file mode 100644
index 0000000000..ecd772940b
--- /dev/null
+++ b/macros/latex/contrib/eq-fetchbbl/examples/bible-quiz.tex
@@ -0,0 +1,120 @@
+\documentclass[11pt]{article}
+\usepackage{web}
+\screensize{11in}{8.5in}
+\margins{1in}{1in}{1in}{1in}
+\usepackage{exerquiz}[2021/02/15]
+\usepackage[ignorecfg,useverses=none]{fetchbibpes}[2021/03/08]
+\usepackage{eq-fetchbbl}
+\addtoBibles{NKJV}
+
+\title{Matching-type questions for a Quiz\texorpdfstring{\\[1ex]}{: }Bible Passages with their Verses}
+\author{D. P. Story}
+\subject{Matching-type questions}
+\date{\today}
+\keywords{AcroTeX, LaTeX, quiz, matching, randomized}
+\version{\url{http://blog.acrotex.net}}
+\versionLabel{}
+\revisionLabel{Published:}
+\university
+{%
+ The {Acro\negthinspace\TeX} Blog
+}
+\email{dpstory@acrotex.net}
+
+\useBeginQuizButton[\CA{Start}\textColor{blue}]
+\useEndQuizButton[\CA{End}\textColor{blue}]
+
+\def\cs#1{\texttt{\eqbs#1}}
+\let\pkg\textsf
+
+\begin{declareBVs*}
+\BV(Mat 10:26 NKJV) Therefore do not fear them. For there is nothing covered that will not be
+ revealed, and hidden that will not be known.\null
+\BV(Mar 1:11 NKJV) Then a voice came from heaven, \textcolor{red}{``You are My beloved Son, in whom I am well
+ pleased.''}\null
+\BV(Luk 12:2 NKJV) For there is nothing covered that will not be revealed, nor hidden that
+ will not be known.\null
+\BV(Act 10:15 NKJV) dummy entry\null
+\end{declareBVs*}
+
+\useBookStyle{abbr=none,from=NKJV}
+
+\PTsHook{($\eqPTs^{\scriptsize\mbox{pts}}$)}
+\showCreditMarkup
+
+\begin{document}
+
+\maketitle
+
+\section*{Introduction}
+
+Match the Bible quotations in the left column with their reference passages.
+Quotations are taken from the \textsf{New King James Version (NKJV)}.
+
+\section*{The New Testament}
+
+\begin{quiz}{q1}
+Match the quotations (\textsf{NKJV)} with the Bible references on the right.
+Each problem is worth 2 points; passing is 100\%.
+
+\noindent
+\begin{minipage}[t]{.75\linewidth}
+\useNumbersOn
+\begin{questions}
+\begin{BblPsg}
+ \item\PTs*{2}\qFP{Mat 10:26}
+ \item\PTs*{2}\qFP{Mar 1:11}
+ \item\PTs*{2}\qFP{Luk 12:2}
+\end{BblPsg}
+\end{questions}
+\end{minipage}\hfill
+\begin{minipage}[t][0pt]{.25\linewidth-10pt}
+\hideCreditMarkup
+\begin{questions}[itemsep={0pt}]
+\begin{BblVrs}
+ \item\qFV{Act 10:15}
+ \item\qFV{Luk 12:2}
+ \item\qFV{Mar 1:11}
+ \item\qFV{Eph 6:1}
+ \item\qFV{Mat 10:26}
+ \item\qFV{Joh 6:20}
+\end{BblVrs}
+\end{questions}
+\end{minipage}
+\par\medskip
+\end{quiz}\quad\PointsField\currQuiz\olBdry\CorrButton\currQuiz\cgBdry[6pt]
+Answers: \AnswerField[\Q{1}\textColor{blue}\rectW{\RBTWidth}]{\currQuiz}
+
+\section*{A short-quiz with matching}
+
+\begin{shortquiz}
+Match the quotations (\textsf{NKJV)} with the Bible references on the right.
+Passing is to have no errors.
+
+\noindent
+\begin{minipage}[t]{.75\linewidth}
+%\useNumbersOn
+\begin{questions}[labelsep={3bp}]
+\begin{BblPsg}
+ \item\PTs*{2}\sFP{Mat 10:26}
+ \item\PTs*{2}\sFP{Mar 1:11}
+ \item\PTs*{2}\sFP{Luk 12:2}
+\end{BblPsg}
+\end{questions}
+\hfill\sqClearButton\olBdry\sqTallyTotal
+\end{minipage}\hfill
+\begin{minipage}[t]{.25\linewidth-10pt}
+\begin{questions}[itemsep=0pt]
+\begin{BblVrs}
+ \item\sFV{Act 10:15}
+ \item\sFV{Luk 12:2}
+ \item\sFV{Mar 1:11}
+ \item\sFV{Eph 6:1}
+ \item\sFV{Mat 10:26}
+ \item\sFV{Joh 6:20}
+\end{BblVrs}
+\end{questions}
+\end{minipage}
+\end{shortquiz}
+
+\end{document}
diff --git a/macros/latex/contrib/eq-fetchbbl/examples/doc-exmpls.tex b/macros/latex/contrib/eq-fetchbbl/examples/doc-exmpls.tex
new file mode 100644
index 0000000000..d6ab8d9860
--- /dev/null
+++ b/macros/latex/contrib/eq-fetchbbl/examples/doc-exmpls.tex
@@ -0,0 +1,363 @@
+\documentclass[11pt]{article}
+\usepackage{web}
+\screensize{11in}{8.5in}
+\margins{1in}{1in}{1in}{1in}
+\usepackage{exerquiz}[2021/02/15]
+\usepackage[ignorecfg,useverses=none]{fetchbibpes}[2021/03/08]
+\usepackage{eq-fetchbbl}
+\addtoBibles{NKJV}
+
+\title{Matching-type questions for a Quiz\texorpdfstring{\\[1ex]}{: }Bible Passages with their Verses}
+\author{D. P. Story}
+\subject{Matching-type questions}
+\date{\today}
+\keywords{AcroTeX, LaTeX, quiz, matching, randomized}
+\version{\url{http://blog.acrotex.net}}
+\versionLabel{}
+\revisionLabel{Published:}
+\university
+{%
+ The {Acro\negthinspace\TeX} Blog
+}
+\email{dpstory@acrotex.net}
+
+\useBeginQuizButton[\CA{Start}\textColor{blue}]
+\useEndQuizButton[\CA{End}\textColor{blue}]
+
+\def\cs#1{\texttt{\eqbs#1}}
+\let\pkg\textsf
+\let\env\texttt
+
+\begin{declareBVs*}
+\BV(Mat 10:26 NKJV) Therefore do not fear them. For there is nothing covered that will not be
+ revealed, and hidden that will not be known.\null
+\BV(Mar 1:11 NKJV) Then a voice came from heaven, \textcolor{red}{``You are My beloved Son, in whom I am well
+ pleased.''}\null
+\BV(Luk 12:2 NKJV) For there is nothing covered that will not be revealed, nor hidden that
+ will not be known.\null
+\BV(Act 10:15 NKJV) dummy entry\null
+\end{declareBVs*}
+
+\useBookStyle{abbr=none,from=NKJV}
+
+\PTsHook{($\eqPTs^{\scriptsize\mbox{pts}}$)}
+
+\begin{document}
+
+\maketitle
+
+\section*{Examples that appear in the documentation}
+
+Match the Bible quotations in the left column with their reference passages.
+Quotations are taken from the \textsf{New King James Version (NKJV)}.
+
+\section*{First Example}
+
+\begin{quiz}{q1}
+Match the quotations (\textsf{NKJV)} with the Bible references on the right.
+Each problem is worth 2 points; passing is 100\%.
+
+The \textsf{Ans} button (\cs{CorrAnsButton}) appears in its default location
+on the last line and up against the right margin. This may be a problem if
+one or more Bible passages ends close to the right margin; the use of
+\cs{adjCAB} or of \cs{priorRBT} may be needed.
+
+
+\noindent
+\begin{minipage}[t]{.75\linewidth}
+%\useNumbersOn
+\begin{questions}
+\begin{BblPsg}
+ \item\PTs*{2}\qFP{Mat 10:26}
+ \item\PTs*{2}\qFP{Mar 1:11}
+ \item\PTs*{2}\qFP{Luk 12:2}
+\end{BblPsg}
+\end{questions}
+\end{minipage}
+\hfill
+\begin{minipage}[t][0pt]{.25\linewidth-1em}
+\begin{questions}[itemsep={0pt},labelwidth={.5em}]
+\begin{BblVrs}
+ \item\qFV{Act 10:15}
+ \item\qFV{Luk 12:2}
+ \item\qFV{Mar 1:11}
+ \item\qFV{Eph 6:1}
+ \item\qFV{Mat 10:26}
+ \item\qFV{Joh 6:20}
+\end{BblVrs}
+\end{questions}
+\end{minipage}\hfill
+\par\medskip
+\end{quiz}\quad\PointsField\currQuiz\olBdry\CorrButton\currQuiz\cgBdry[6pt]
+Answers: \AnswerField[\Q{1}\textColor{blue}\rectW{\RBTWidth}]{\currQuiz}
+
+
+\section*{Second Example}
+
+\begin{quiz*}{q2}
+Match the quotations (\textsf{NKJV)} with the Bible references on the right.
+Each problem is worth 2 points; passing is 100\%.
+
+In this example, \cs{useNumbersOn} is declared. An additional non-matching
+question is included as well. The command \cs{adjCAB} positions the
+\textsf{Ans} button in the space between the mini-pages, aligned with the
+last line.
+
+% get the width of \CorrAnsButton to determine how much space between
+% mini-pages is needed.
+\setlength{\eflength}{\widthof{\enspace\CorrAnsButton{A}\enspace}}
+\useMCCircles
+
+\noindent
+\begin{minipage}[t]{.75\linewidth-\eflength}
+\useNumbersOn
+\adjCAB{\makebox[0pt][l]{\enspace#2\enspace}}
+\everyRespBoxTxt{\textColor{blue}}
+\begin{questions}
+\begin{BblPsg}
+ \item\PTs*{2}\qFP{Mat 10:26}
+ \item\PTs*{2}\qFP{Mar 1:11}
+ \item\PTs*{2}\qFP{Luk 12:2}
+\end{BblPsg}
+\item\PTs*{2} The quotation ``Treasures of wickedness profit nothing, But
+ righteousness delivers from death'' is a verse from which of the
+ following books?
+\begin{answers}{4}
+ \bChoices
+ \Ans0 Psalms\eAns
+ \Ans0 Isaiah\eAns
+ \Ans1 Proverbs\eAns
+ \Ans0 Jonah\eAns
+ \eChoices
+\end{answers}
+\end{questions}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{.25\linewidth}
+\begin{questions}[itemsep={0pt},labelwidth={1em}]
+\begin{BblVrs}
+ \item\qFV{Act 10:15}
+ \item\qFV{Luk 12:2}
+ \item\qFV{Mar 1:11}
+ \item\qFV{Eph 6:1}
+ \item\qFV{Mat 10:26}
+ \item\qFV{Joh 6:20}
+\end{BblVrs}
+\end{questions}
+\end{minipage}\hfil
+\par\medskip
+\end{quiz*}\quad\PointsField\currQuiz\olBdry\CorrButton\currQuiz\cgBdry[6pt]
+Answers: \AnswerField[\Q{1}\textColor{blue}\rectW{\RBTWidth}]{\currQuiz}
+
+\newpage
+
+\section*{Third Example}
+
+\begin{quiz*}{q3}
+Match the quotations (\textsf{NKJV)} with the Bible references on the right.
+Each problem is worth 2 points; passing is 100\%.
+
+\cs{useNumbersOff} is declared and \cs{priorRBT} is used to position the `\textsf{Ans}'
+button aligned with the first line.
+
+\setlength{\eflength}{\widthof{\enspace\CorrAnsButton{A}\enspace}} %\previewOn
+\useMCCircles
+
+\noindent
+\begin{minipage}[t]{.75\linewidth-\eflength}
+\useNumbersOff
+\priorRBT{\makebox[0pt][l]{\hspace{\RBTWidth}\hspace{\labelsep}\hspace{\linewidth}\enspace#1\enspace}}
+\adjCAB{}
+\everyRespBoxTxt{\textColor{blue}}
+\begin{questions}
+\begin{BblPsg}
+ \item\PTs*{2}\qFP{Mat 10:26}
+ \item\PTs*{2}\qFP{Mar 1:11}
+ \item\PTs*{2}\qFP{Luk 12:2}
+\end{BblPsg}
+
+\end{questions}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{.25\linewidth}
+\begin{questions}[itemsep={0pt},labelwidth={1em}]
+\begin{BblVrs}
+ \item\qFV{Act 10:15}
+ \item\qFV{Luk 12:2}
+ \item\qFV{Mar 1:11}
+ \item\qFV{Eph 6:1}
+ \item\qFV{Mat 10:26}
+ \item\qFV{Joh 6:20}
+\end{BblVrs}
+\end{questions}
+\end{minipage}\hfil
+\par\medskip
+\end{quiz*}\quad\PointsField\currQuiz\olBdry\CorrButton\currQuiz\cgBdry[6pt]
+Answers: \AnswerField[\Q{1}\textColor{blue}\rectW{\RBTWidth}]{\currQuiz}
+
+\begin{quiz*}{q4}
+Match the quotations (\textsf{NKJV)} with the Bible references on the right.
+Each problem is worth 2 points; passing is 100\%.
+
+\cs{useNumbersOn} is declared and \cs{priorRBT} is used to position the \textsf{Ans}
+button between mini-pages.
+
+\setlength{\eflength}{\widthof{\enspace\CorrAnsButton{A}\enspace}}
+\useMCCircles
+
+\noindent
+\begin{minipage}[t]{.75\linewidth-\eflength}
+\useNumbersOn
+\priorRBT{\makebox[0pt][l]{\hspace{\linewidth}\enspace#1\enspace}}
+\adjCAB{}
+\everyRespBoxTxt{\textColor{blue}}
+\begin{questions}
+\begin{BblPsg}
+ \item\PTs*{2}\qFP{Mat 10:26}
+ \item\PTs*{2}\qFP{Mar 1:11}
+ \item\PTs*{2}\qFP{Luk 12:2}
+\end{BblPsg}
+
+\end{questions}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{.25\linewidth}
+\begin{questions}[itemsep={0pt},labelwidth={1em}]
+\begin{BblVrs}
+ \item\qFV{Act 10:15}
+ \item\qFV{Luk 12:2}
+ \item\qFV{Mar 1:11}
+ \item\qFV{Eph 6:1}
+ \item\qFV{Mat 10:26}
+ \item\qFV{Joh 6:20}
+\end{BblVrs}
+\end{questions}
+\end{minipage}\hfil
+\par\medskip
+\end{quiz*}\quad\PointsField\currQuiz\olBdry\CorrButton\currQuiz\cgBdry[6pt]
+Answers: \AnswerField[\Q{1}\textColor{blue}\rectW{\RBTWidth}]{\currQuiz}
+
+\newpage
+
+\section*{Other Ideas for placing auxiliary controls}
+
+The positioning of the \textsf{Ans} button can be a problem. There are two other
+ideas that occurred to me. These ideas are illustrated in the quiz below.
+
+\begin{quiz*}{q5}
+Match the quotations (\textsf{NKJV)} with the Bible references on the right.
+Each problem is worth 2 points; passing is 100\%.
+
+We return to the ``natural'' spacing between mini-pages of the
+\textcolor{blue}{First Example}. In the three items below, we try different
+strategies for placing the \textsf{Ans} button.
+
+\setlength{\eflength}{\widthof{\enspace\CorrAnsButton{A}\enspace}}
+\useMCCircles
+
+\noindent
+\begin{minipage}[t]{.75\linewidth}
+\begin{questions}
+\everyRespBoxTxt{\textColor{blue}}
+\useNumbersOff
+\adjCAB{}
+\begin{BblPsg}
+\priorRBT{\makebox[0pt][r]{#1\hskip\marginparsep}}
+ \item\PTs*{2}\qFP{Mat 10:26}
+\end{BblPsg}
+\useNumbersOn
+\priorRBT{\makebox[0pt][r]{#1\hskip\labelwidth\hskip\marginparsep\efKern{1bp}{0pt}}}
+\begin{BblPsg}
+ \item\PTs*{2}\qFP{Mar 1:11}
+\end{BblPsg}
+\useNumbersOff
+\priorRBT{}
+\priorPsg{\makebox[0pt][l]{#1}}
+\begin{BblPsg}
+ \item\PTs*{2}\qFP{Luk 12:2}
+\end{BblPsg}
+\end{questions}
+\end{minipage}
+\hfill
+\begin{minipage}[t][0pt]{.25\linewidth-1em}
+\begin{questions}[itemsep={0pt},labelwidth={.5em}]
+\begin{BblVrs}
+ \item\qFV{Act 10:15}
+ \item\qFV{Luk 12:2}
+ \item\qFV{Mar 1:11}
+ \item\qFV{Eph 6:1}
+ \item\qFV{Mat 10:26}
+ \item\qFV{Joh 6:20}
+\end{BblVrs}
+\end{questions}
+\end{minipage}\hfill
+\par\medskip
+
+\end{quiz*}\quad\PointsField\currQuiz\olBdry\CorrButton\currQuiz\cgBdry[6pt]
+Answers: \AnswerField[\Q{1}\textColor{blue}\rectW{\RBTWidth}]{\currQuiz}
+
+\section*{Customizations of the quiz}
+
+In this section, customizations of the matching-type quiz are explored. We
+redefine the \env{BblVrs} environment, changing from capital letters to
+numbers; to avoid confusion, \cs{useNumbersOff} is declared. All fonts are
+changed to bold and red, look for changes in the source file involving
+\textsf{HeBo} (Helvetica-Bold) and the color red. Also, sans serif is used
+for the numbering of the verse references.
+
+\makeatletter
+\renewenvironment{BblVrs}{%
+% \renewcommand{\theeqquestionnoi}{\Alph{eqquestionnoi}}% old def
+ \renewcommand{\theeqquestionnoi}{\arabic{eqquestionnoi}}% new def
+ \renewcommand{\labeleqquestionnoi}{%
+% \color{\eq@quesNumCol}\bfseries\theeqquestionnoi}% old def
+ \color{\eq@quesNumCol}\sffamily\bfseries\theeqquestionnoi}% new def
+ \eqfQorS
+}{}
+\makeatother
+\quesNumColor{red}
+
+\begin{quiz*}{q6}
+Match the quotations (\textsf{NKJV)} with the Bible references on the right.
+Each problem is worth 2 points; passing is 100\%.
+
+\setlength{\eflength}{\widthof{\enspace\CorrAnsButton{A}\enspace}}
+\useMCCircles
+
+\noindent
+\begin{minipage}[t]{.75\linewidth}
+\begin{questions}
+\everyRespBoxTxt{\textFont{HeBo}\textColor{red}}
+\useNumbersOff
+\begin{BblPsg}
+ \item\PTs*{2}\qFP{Mat 10:26}
+ \item\PTs*{2}\qFP{Mar 1:11}
+ \item\PTs*{2}\qFP{Luk 12:2}
+\end{BblPsg}
+\end{questions}
+\end{minipage}
+\hfill
+\begin{minipage}[t][0pt]{.25\linewidth-1em}
+\begin{questions}[itemsep={0pt},labelwidth={.5em}]
+\begin{BblVrs}
+ \item\qFV{Act 10:15}
+ \item\qFV{Luk 12:2}
+ \item\qFV{Mar 1:11}
+ \item\qFV{Eph 6:1}
+ \item\qFV{Mat 10:26}
+ \item\qFV{Joh 6:20}
+\end{BblVrs}
+\end{questions}
+\end{minipage}\hfill
+\par\medskip
+
+\end{quiz*}\quad\PointsField\currQuiz\olBdry\CorrButton\currQuiz\cgBdry[6pt]
+Answers: \AnswerField[\Q{1}\textFont{HeBo}\textColor{red}\rectW{\RBTWidth}]{\currQuiz}\vcgBdry[6pt]
+
+Now that the verses are referenced using numbers, you are free to ask hundreds of Biblical
+matching questions; the only problem is arranging them on the page. \verb~:-{)~
+
+
+
+
+\end{document}
diff --git a/macros/latex/contrib/eq-fetchbbl/examples/exmpldefs/verses.def b/macros/latex/contrib/eq-fetchbbl/examples/exmpldefs/verses.def
new file mode 100644
index 0000000000..1b41cf89a7
--- /dev/null
+++ b/macros/latex/contrib/eq-fetchbbl/examples/exmpldefs/verses.def
@@ -0,0 +1,74 @@
+%
+% Old testament
+%
+% Genesis 1:1-10, King James Version (KJV)
+\BV(Gen 1:1 KJV) In the beginning God created the heaven and the earth.\null
+\BV(Gen 1:1 KJV Alt) \dots \emph{God created the heaven and the earth}.\null
+\BV(Gen 1:2 KJV) And the earth was without form, and void; and darkness was upon the face of the deep. And the Spirit of God moved upon the face of the waters.\null
+\BV(Gen 1:3 KJV) And God said, Let there be light: and there was light.\null
+\BV(Gen 1:4 KJV) And God saw the light, that it was good: and God divided the light from the darkness.\null
+\BV(Gen 1:5 KJV) And God called the light Day, and the darkness he called Night. And the evening and the morning were the first day.\null
+\BV(Gen 1:6 KJV) And God said, Let there be a firmament in the midst of the waters, and let it divide the waters from the waters.\null
+\BV(Gen 1:7 KJV) And God made the firmament, and divided the waters which were under the firmament from the waters which were above the firmament: and it was so.\null
+\BV(Gen 1:8 KJV) And God called the firmament Heaven. And the evening and the morning were the second day.\null
+\BV(Gen 1:9 KJV) And God said, Let the waters under the heaven be gathered together unto one place, and let the dry land appear: and it was so.\null
+\BV(Gen 1:10 KJV) And God called the dry land Earth; and the gathering together of the waters called he Seas: and God saw that it was good.\null
+% Genesis 1:1-10, International Standard Version (ISV)
+\BV(Gen 1:1 ISV) In the beginning, God created the universe.\null
+\BV(Gen 1:1 ISV Alt) \emph{In the beginning}, God created the universe.\null
+\BV(Gen 1:2 ISV) When the earth was as yet unformed and desolate, with the surface of the ocean depths shrouded in darkness, and while the Spirit of God was hovering over the surface of the waters,\null
+\BV(Gen 1:3 ISV) God said, "Let there be light!" So there was light.\null
+\BV(Gen 1:4 ISV) God saw that the light was beautiful. He separated the light from the darkness,\null
+\BV(Gen 1:5 ISV) calling the light "day," and the darkness "night." The twilight and the dawn were day one.\null
+\BV(Gen 1:6 ISV) Then God said, "Let there be a canopy between bodies of water, separating bodies of water from bodies of water!"\null
+\BV(Gen 1:7 ISV) So God made a canopy that separated the water beneath the canopy from the water above it. And that is what happened:\null
+\BV(Gen 1:8 ISV) God called the canopy "sky." The twilight and the dawn were the second day.\null
+\BV(Gen 1:9 ISV) Then God said, "Let the water beneath the sky come together into one area, and let dry ground appear!" And that is what happened:\null
+\BV(Gen 1:10 ISV) God called the dry ground "land," and he called the water that had come together "oceans." And God saw how good it was.\null
+% Genesis 1:1-2, Young's Literal Translation (YLT)
+\BV(Gen 1:1 YLT) In the beginning of God's preparing the heavens and the earth--\null
+\BV(Gen 1:2 YLT) the earth hath existed waste and void, and darkness is on the face of the deep, and the Spirit of God fluttering on the face of the waters,\null
+% Genesis 1:1-5, American Standard Version (ASV)
+\BV(Gen 1:1 ASV) In the beginning God created the heavens and the earth.\null
+\BV(Gen 1:2 ASV) And the earth was waste and void; and darkness was upon the face of the deep: and the Spirit of God moved upon the face of the waters.\null
+\BV(Gen 1:3 ASV) And God said, Let there be light: and there was light.\null
+\BV(Gen 1:4 ASV) And God saw the light, that it was good: and God divided the light from the darkness.\null
+\BV(Gen 1:5 ASV) And God called the light Day, and the darkness he called Night. And there was evening and there was morning, one day.\null
+% I Kings 1:1-5, KJV
+\BV(1Ki 1:1 KJV) Now king David was old and stricken in years; and they covered him with clothes, but he gat no heat.\null
+\BV(1Ki 1:2 KJV) Wherefore his servants said unto him, Let there be sought for my lord the king a young virgin: and let her stand before the king, and let her cherish him, and let her lie in thy bosom, that my lord the king may get heat.\null
+\BV(1Ki 1:3 KJV) So they sought for a fair damsel throughout all the coasts of Israel, and found Abishag a Shunammite, and brought her to the king.\null
+\BV(1Ki 1:4 KJV) And the damsel was very fair, and cherished the king, and ministered to him: but the king knew her not.\null
+\BV(1Ki 1:5 KJV) Then Adonijah the son of Haggith exalted himself, saying, I will be king: and he prepared him chariots and horsemen, and fifty men to run before him.\null
+% I Kings 1L1-5, ISV
+\BV(1Ki 1:1 ISV) When David had grown very old, they covered him with blankets, but he could not keep warm,\null
+\BV(1Ki 1:1 ISV Alt) When David had grown \emph{very old}, they covered him with blankets, but he could not keep warm,\null
+\BV(1Ki 1:2 ISV) so his servants suggested to him, "Let's look for a young virgin woman to take care of you, your majesty. She will be of use to you if you have her lie down near you so that your majesty may keep warm."\null
+\BV(1Ki 1:3 ISV) So they conducted a search throughout the territory of Israel for a beautiful young woman, and Abishag the Shunammite was located and brought to the king.\null
+\BV(1Ki 1:4 ISV) The young woman was absolutely beautiful. She served the king and was very useful to him. The king was not sexually involved with her.\null
+\BV(1Ki 1:5 ISV) Meanwhile, about this time Haggith's son Adonijah began to seek a reputation for himself and decided, "I'm going to be king!" So he prepared chariots, cavalry, and 50 soldiers to serve as a security detail to guard him.\null
+%
+% New testament
+%
+% Colassians 1:6, KJV
+\BV(Col 1:6 KJV) that has come to you. Just as it is bearing fruit and spreading all over the world, so it has been doing among you from the day you heard it and came to know the grace of God in truth.\null
+\BV(Col 1:6 KJV Alt) \dots Just as it is bearing fruit and spreading all over the world, so it has been doing among you from the day you heard it and came to know the grace of God in truth.\null
+% Matthew 2:1-10, KJV
+\BV(Mat 2:1 KJV) Now when Jesus was born in Bethlehem of Judaea in the days of Herod the king, behold, there came wise men from the east to Jerusalem,\null
+\BV(Mat 2:2 KJV) Saying, Where is he that is born King of the Jews? for we have seen his star in the east, and are come to worship him.\null
+\BV(Mat 2:3 KJV) When Herod the king had heard these things, he was troubled, and all Jerusalem with him.\null
+\BV(Mat 2:4 KJV) And when he had gathered all the chief priests and scribes of the people together, he demanded of them where Christ should be born.\null
+\BV(Mat 2:5 KJV) And they said unto him, In Bethlehem of Judaea: for thus it is written by the prophet,\null
+\BV(Mat 2:6 KJV) And thou Bethlehem, in the land of Juda, art not the least among the princes of Juda: for out of thee shall come a Governor, that shall rule my people Israel.\null
+\BV(Mat 2:7 KJV) Then Herod, when he had privily called the wise men, enquired of them diligently what time the star appeared.\null
+\BV(Mat 2:8 KJV) And he sent them to Bethlehem, and said, Go and search diligently for the young child; and when ye have found him, bring me word again, that I may come and worship him also.\null
+\BV(Mat 2:9 KJV) When they had heard the king, they departed; and, lo, the star, which they saw in the east, went before them, till it came and stood over where the young child was.\null
+\BV(Mat 2:10 KJV) When they saw the star, they rejoiced with exceeding great joy.\null
+% Romans 1:1 King James version w/Strongs Numbers (KJV+)
+\BV(Rom 1:1 KJV+) Paul,\G{3972} a servant\G{1401} of Jesus\G{2424} Christ,\G{5547} called\G{2822} to be an apostle,\G{652} separated\G{873} unto\G{1519} the gospel\G{2098} of God,\G{2316}\null
+% I Corinthians 1:1-5 KJV
+\BV(1Co 1:1 KJV) Paul, called to be an apostle of Jesus Christ through the will of God, and Sosthenes our brother,\null
+\BV(1Co 1:2 KJV) Unto the church of God which is at Corinth, to them that are sanctified in Christ Jesus, called to be saints, with all that in every place call upon the name of Jesus Christ our Lord, both theirs and ours:\null
+\BV(1Co 1:3 KJV) Grace be unto you, and peace, from God our Father, and from the Lord Jesus Christ.\null
+\BV(1Co 1:4 KJV) I thank my God always on your behalf, for the grace of God which is given you by Jesus Christ;\null
+\BV(1Co 1:5 KJV) That in every thing ye are enriched by him, in all utterance, and in all knowledge;\null
diff --git a/macros/latex/contrib/fetchbibpes/README.md b/macros/latex/contrib/fetchbibpes/README.md
index ab1385950f..334218d79a 100644
--- a/macros/latex/contrib/fetchbibpes/README.md
+++ b/macros/latex/contrib/fetchbibpes/README.md
@@ -1,10 +1,10 @@
The fetchbibpes Bundle
Author: D. P. Story
-Dated: 2018/07/30
+Dated: 2021-03-08
This bundle provides two packages, bibpes and fetchbibpes. This pair of
packages was motivated by a friend, who was preparing Bible studies lessons
-using a combination of the application e-Sword (http://www.e-sword.net/) and
+using a combination of the application e-Sword (http:--www.e-sword.net-) and
LaTeX. He wanted a `database' of Bible packages from which he could simply
`fetch' passages into the LaTeX source file.
@@ -23,24 +23,26 @@ LaTeX. He wanted a `database' of Bible packages from which he could simply
Unpack the distribution by latexing fetchbibpes.ins.
-What's new (2018/07/30) Bug fixes. Added the cfg option for specifying a
+What's new (2021-03-08) Minor changes that support the eq-fetchbbl package.
+
+What's new (2018-07-30) Bug fixes. Added the cfg option for specifying a
custom contiguration file. New commands \showTranslAlways, \showTranslDecld,
\translFmt, \translTxtFmt, and \cobblevrs. All documented in the manual.
NOTE: The format for the CFG file has changes, you will need to update to
this new syntax; refer to Section 3.8 of the manual and to fbpes.cfg for an
example.
-What's new (2018/07/12) Defined a new command \fetchversestxt; the command
+What's new (2018-07-12) Defined a new command \fetchversestxt; the command
has the same arguments as \fetchverses, but it does not expand to typeset
content. Rather, it defines two commands \versetxt and \passagetxt. These two
are the passage reference and the passage for that verse but with all \LaTeX
styling and font changes.
-What's new (2018/03/21): Implemented open ended ranges, for example,
+What's new (2018-03-21): Implemented open ended ranges, for example,
\fetchverses{Joh 3:27-} fetches all passages from John, chapter 3, starting
with verse 27 until the end of the chapter.
-What's new (2016/09/24): Changed behavior of the alt key. Added an alt* key.
+What's new (2016-09-24): Changed behavior of the alt key. Added an alt* key.
Enjoy.
diff --git a/macros/latex/contrib/fetchbibpes/docs/fetchbibpes.pdf b/macros/latex/contrib/fetchbibpes/docs/fetchbibpes.pdf
index b696fd547f..f19ac00c54 100644
--- a/macros/latex/contrib/fetchbibpes/docs/fetchbibpes.pdf
+++ b/macros/latex/contrib/fetchbibpes/docs/fetchbibpes.pdf
Binary files differ
diff --git a/macros/latex/contrib/fetchbibpes/docs/fetchbibpes_man.pdf b/macros/latex/contrib/fetchbibpes/docs/fetchbibpes_man.pdf
index 9e8d6a7844..96bdd7e097 100644
--- a/macros/latex/contrib/fetchbibpes/docs/fetchbibpes_man.pdf
+++ b/macros/latex/contrib/fetchbibpes/docs/fetchbibpes_man.pdf
Binary files differ
diff --git a/macros/latex/contrib/fetchbibpes/docs/fetchbibpes_man.tex b/macros/latex/contrib/fetchbibpes/docs/fetchbibpes_man.tex
index 25690bb4ce..ccbd47878e 100644
--- a/macros/latex/contrib/fetchbibpes/docs/fetchbibpes_man.tex
+++ b/macros/latex/contrib/fetchbibpes/docs/fetchbibpes_man.tex
@@ -62,6 +62,8 @@
%\usepackage{makeidx}
%\makeindex
\usepackage{acroman}
+\edef\amtIndent{\the\parindent}
+\setlength{\leftmargini}{\the\parindent}
\usepackage[active]{srcltx}
\urlstyle{tt}
@@ -78,7 +80,7 @@
email={dpstory@acrotex.net},
subject=Documentation for the fetchbibpes and bibpes packages,
talksite={\url{www.acrotex.net}},
- version={2.4.9, 2018/07/30},
+ version={2.4.10, 2021/03/08},
Keywords={LaTeX, e-sword, Bible passages, AcroTeX},
copyrightStatus=True,
copyrightNotice={Copyright (C) \the\year, D. P. Story},
@@ -187,11 +189,11 @@ were written.
\paragraph*{Package options} The package has several options, listed in display that follows.
\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=*()]
\usepackage[%
- infolder=*ameta(infolder),
- outfolder=*ameta(outfolder),
- txtfilein=*ameta(base_name_txt),
- deffileout=*ameta(base_name_def),
- build|!build
+ infolder=*ameta(infolder),
+ outfolder=*ameta(outfolder),
+ txtfilein=*ameta(base_name_txt),
+ deffileout=*ameta(base_name_def),
+ build|!build
]{bibpes}
\end{Verbatim}
\paragraph*{Description of options}
@@ -313,15 +315,15 @@ were written.
In some translations, Jesus' words are quoted in red and are not set off
by quotation marks. You'll have to hand edit the \EXT{TXT} file.
-\begin{Verbatim}
- (Mat 11:4) Jesus answered and said unto them, Go and shew John
- again those things which ye do hear and see:
+\begin{Verbatim}[xleftmargin=\amtIndent]
+(Mat 11:4) Jesus answered and said unto them, Go and shew John
+again those things which ye do hear and see:
\end{Verbatim}
can be changed to,
-\begin{Verbatim}
- (Mat 11:4) Jesus answered and said unto them,
- \textcolor{red}{Go and shew John again those things which ye do
- hear and see:}
+\begin{Verbatim}[xleftmargin=\amtIndent]
+(Mat 11:4) Jesus answered and said unto them,
+\textcolor{red}{Go and shew John again those things which ye do
+hear and see:}
\end{Verbatim}
to be typeset as
\begin{quote}
@@ -338,7 +340,7 @@ to be typeset as
After you have created your \EXT{TXT} file, open the file
\texttt{makebibpes.tex}, which is found in the \texttt{examples} folder.
- This is a short file, it reads:
+ This is a short file that reads:
\begin{equation}
\begin{minipage}{100pt}
\begin{Verbatim}[numbers=left,commandchars=!()]
@@ -351,15 +353,15 @@ After you have created your \EXT{TXT} file, open the file
\end{Verbatim}
\end{minipage}\label{display:bibpes1}
\end{equation}
- The \texttt{makebibpes.tex} file, found in the root folder of this
+ The \texttt{makebibpes.tex} file, also found in the root folder of this
distribution, is used to convert a \texttt{TXT} file of Bible verses to a
- \EXT{DEF} file of Bible verses. The action of this package is to take
- each line of Bible verse in the \EXT{TXT} file, for example, the verse
- in the \EXT{TXT} file,
+ \EXT{DEF} file of Bible verses. The action of this package is to take each
+ line of Bible verse in the \EXT{TXT} file, for example, the verse in the
+ \EXT{TXT} file,
\begin{Verbatim}[xleftmargin=0pt,fontsize=\small]
(Gen 1:1 KJV) In the beginning God created the heaven and the earth.
\end{Verbatim}
-is transformed the following verse in the \EXT{DEF} file,
+and to transformed it to the following verse in the \EXT{DEF} file,
\begin{Verbatim}[xleftmargin=0pt,fontsize=\small]
\BV(Gen 1:1 KJV) In the beginning God created the heaven and the earth.\null
\end{Verbatim}
@@ -379,9 +381,9 @@ The first command expands to the input and output information given by the optio
\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()]
\documentclass{article}
\usepackage[!textbf(build),
- infolder=mytxts,
- outfolder=mydefs,
- txtfilein=Gen1-KJV
+ infolder=mytxts,
+ outfolder=mydefs,
+ txtfilein=Gen1-KJV
]{bibpes}
\begin{document}
\reportOnBibPes
@@ -439,10 +441,11 @@ given previously.
{TXT and DEF} files}
The file \texttt{makebibpes.tex} is found in the root folder of the
-\pkg{fetchbibpes} distribution. Modern {\LaTeX} systems, {MiK\TeX} comes do
+\pkg{fetchbibpes} distribution. Modern {\LaTeX} systems, {MiK\TeX} comes to
mind, do not allow you to compile a source file from their application
folder, and the folder itself is readonly. Therefore, you must move
-\texttt{makebibpes.tex} to another folder.
+\texttt{makebibpes.tex} to another folder.\footnote{That is why another copy
+of \texttt{makebibpes.tex} is in the \texttt{examples} folder.}
\paragraph*{Production and organization.}
There are two thoughts that come to mind for producing \texttt{DEF} files.
@@ -460,11 +463,11 @@ There are two thoughts that come to mind for producing \texttt{DEF} files.
For example,
\begin{equation}
\begin{minipage}{100pt}
-\begin{Verbatim}
+\begin{Verbatim}[xleftmargin=\amtIndent]
\usepackage[%
- infolder=mytxtfiles,
- outfolder=mydeffiles,
- txtfilein=1Cor1
+ infolder=mytxtfiles,
+ outfolder=mydeffiles,
+ txtfilein=1Cor1
]{bibpes}
\end{Verbatim}
\end{minipage}\label{display:bibpes}
@@ -512,8 +515,8 @@ can specify your only file (\texttt{lession1}) in the option list of
\pkg{fetchbibpes}:
\begin{Verbatim}[xleftmargin=\amtIndent]
\usepackage[%
- useverses=lesson1,
- deffolder=mydeffiles
+ useverses=lesson1,
+ deffolder=mydeffiles
]{fetchbibpes}
\end{Verbatim}
Here, \pkg{fetchbibpes} looks for \texttt{lession1.def} in the subfolder
@@ -527,8 +530,8 @@ Another choice is to use several \EXT{DEF} files, perhaps from your
`data\-base' collection.
\begin{Verbatim}[xleftmargin=\amtIndent]
\usepackage[%
- useverses={Gen1,Mat2,Rom1,1Cor1},
- deffolder=mydeffiles
+ useverses={Gen1,Mat2,Rom1,1Cor1},
+ deffolder=mydeffiles
]{fetchbibpes}
\end{Verbatim}
Here, you plan to reference verses in the \texttt{Gen1.def} file (containing
@@ -782,9 +785,9 @@ It is perhaps always better to use \cs{fetchverses} for single and multiple vers
\texttt{Gen 1:1 KJV} and add a line:
\begin{Verbatim}[xleftmargin=\amtIndent]
\BV(Gen 1:1 KJV) In the beginning
- God created the heaven and the earth.\null
+ God created the heaven and the earth.\null
\BV(Gen 1:1 KJV Alt) \dots
- \emph{God created the heaven and the earth}.\null
+ \emph{God created the heaven and the earth}.\null
\end{Verbatim}
(Lines are wrapped around above to fit within the margins, this \emph{should not
be done} in the \EXT{DEF} file itself.) To access this alternate version
@@ -1256,12 +1259,12 @@ how to create alternate passages, refer to the \opt{alt} key on
global declaration, use the \opt{localdefs} key.
\begin{Verbatim}[xleftmargin=\leftmargini]
\fetchverses*[from=NKJV,
- localdefs={\gobbleto{and}{\gobbletoand}%
- \gobbleto{blood,}{\gobbletoblood}},
- replace=
- {But when}{\leavevmode\ldots when}
- {who separated me from my}{who\gobbletoand}
- {, that I might preach Him}{ \ldots\gobbletoblood}
+ localdefs={\gobbleto{and}{\gobbletoand}%
+ \gobbleto{blood,}{\gobbletoblood}},
+ replace=
+ {But when}{\leavevmode\ldots when}
+ {who separated me from my}{who\gobbletoand}
+ {, that I might preach Him}{ \ldots\gobbletoblood}
]{Gal 1:15-16}
\end{Verbatim}
This code expands to:
@@ -1353,12 +1356,12 @@ primitive \cs{expandafter}, which is a limited kind of expansion.
The basic syntax for \pkg{fetchbibpes} is as follows:
\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()]
\usepackage[%
- useverses={!ameta(list)},
- deffolder=!ameta(path),
- useselverses,
- usesr,
- ignorecfg,
- cfg=!ameta(name)
+ useverses={!ameta(list)},
+ deffolder=!ameta(path),
+ useselverses,
+ usesr,
+ ignorecfg,
+ cfg=!ameta(name)
]{fetchbibpes}
\end{Verbatim}
@@ -1399,8 +1402,8 @@ in the folder of the source file, or in the search path of your {\LaTeX} system.
only if \ameta{path} is nonempty.
\begin{Verbatim}
\usepackage[%
- useverses={Gen1,Mat2,Rom1,1Cor1},
- deffolder=mydeffiles
+ useverses={Gen1,Mat2,Rom1,1Cor1},
+ deffolder=mydeffiles
]{fetchbibpes}
\end{Verbatim}
Here, {\LaTeX} looks for the listed files (\texttt{Gen1.def},
@@ -2032,11 +2035,11 @@ a verse.
For example, the following declaration is used in the example below.
\begin{Verbatim}[xleftmargin=\amtIndent]
\verseCmts{%
- {In the beginning God creates\dots} % v1
- {Earth void} % v2
- {Light!} % v3
- {} % v4
- {First day} % v5
+ {In the beginning God creates\dots} % v1
+ {Earth void} % v2
+ {Light!} % v3
+ {} % v4
+ {First day} % v5
}
\end{Verbatim}
Its argument is a series of tokens (comments enclosed in braces), the first token is the comment
@@ -2130,10 +2133,10 @@ enclosed in braces. Within the argument, three keys are recognized, \texttt{from
\begin{Verbatim}[xleftmargin=\amtIndent]
\selectedVersesFrom
{
- {onlyverses={1Jn 1:1-5,3:3-8}}
- {from=ISV,onlyverses={Gen 1:1-5}}
- {from=ISV,alt=Alt,onlyverses={Gen 1:1}}
- {onlyverses=Mat}
+ {onlyverses={1Jn 1:1-5,3:3-8}}
+ {from=ISV,onlyverses={Gen 1:1-5}}
+ {from=ISV,alt=Alt,onlyverses={Gen 1:1}}
+ {onlyverses=Mat}
}
\end{Verbatim}
It is assumed the required \EXT{DEF} files are listed in the value of
@@ -2364,15 +2367,15 @@ Declare,
\begin{Verbatim}[xleftmargin=\amtIndent]
\begin{declareBVs*}
\BV(Mat 6:31 NKJV) ``Therefore do not worry, saying,
- `What shall we eat?' or `What shall we drink?' or
- `What shall we wear?'\null
+ `What shall we eat?' or `What shall we drink?' or
+ `What shall we wear?'\null
\end{declareBVs*}
\end{Verbatim}
Note the presence of quote marks, hence, we declare this verse using \env{declareBVs*}.
We emit our \cs{markverse} command:
\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()]
\markverse[name=Mat6:31-,from=NKJV,
-!qquad(marks={}{eat?'}{}{drink?'}{}{wear?'}]{Mat 6:31})
+!quad(marks={}{eat?'}{}{drink?'}{}{wear?'}]{Mat 6:31})
\end{Verbatim}
\markverse[name=Mat6:31-,marks={}{eat?'}{}{drink?'}{}{wear?'},from=NKJV]{Mat 6:31}
Now, let's read out the substrings:
@@ -2397,7 +2400,7 @@ the markers \ameta{bfind} and \ameta{efind} should \emph{occur once and
only once} in the verse. For example the line
\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()]
\markverse[name=multihits,from=NKJV,
-!qquad(marks={`What}{wear?'}]{Mat 6:31})
+!quad(marks={`What}{wear?'}]{Mat 6:31})
\end{Verbatim}
produces the following \cs{BV} definition in the \texttt{\jobname-bv.cut} file:
\begin{quote}\ttfamily\raggedright
diff --git a/macros/latex/contrib/fetchbibpes/examples/bibpes_tst.pdf b/macros/latex/contrib/fetchbibpes/examples/bibpes_tst.pdf
index c6ecb54b88..4d3b713919 100644
--- a/macros/latex/contrib/fetchbibpes/examples/bibpes_tst.pdf
+++ b/macros/latex/contrib/fetchbibpes/examples/bibpes_tst.pdf
Binary files differ
diff --git a/macros/latex/contrib/fetchbibpes/fetchbibpes.dtx b/macros/latex/contrib/fetchbibpes/fetchbibpes.dtx
index 078144ee6d..ed80dc19f6 100644
--- a/macros/latex/contrib/fetchbibpes/fetchbibpes.dtx
+++ b/macros/latex/contrib/fetchbibpes/fetchbibpes.dtx
@@ -16,7 +16,7 @@
%</copyright>
%<package>\NeedsTeXFormat{LaTeX2e}[1997/12/01]
%<package>\ProvidesPackage{fetchbibpes}
-%<package> [2018/07/30 v2.4.9 fetchbibpes: Fetch Bible passages from DEF files (dps)]
+%<package> [2021/03/08 v2.4.10 fetchbibpes: Fetch Bible passages from DEF files (dps)]
%<*driver>
\documentclass{ltxdoc}
\usepackage[colorlinks,hyperindex=false]{hyperref}
@@ -59,18 +59,6 @@
\def\meta#1{\textsl{\texttt{#1}}}
\def\SUB#1{\ensuremath{{}_{\mbox{\scriptsize\ttfamily#1}}}}
\def\cs#1{\texttt{\bslash#1}}
-\DeclareRobustCommand{\tmspace}[3]{%
- \ifmmode\mskip#1#2\else\kern#1#3\fi\relax}
-\renewcommand{\,}{\tmspace+\thinmuskip{.1667em}}
-\let\thinspace\,
-\renewcommand{\!}{\tmspace-\thinmuskip{.1667em}}
-\let\negthinspace\!
-\renewcommand{\:}{\tmspace+\medmuskip{.2222em}}
-\let\medspace\:
-\newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}}
-\renewcommand{\;}{\tmspace+\thickmuskip{.2777em}}
-\let\thickspace\;
-\newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}}
\makeatletter
\renewcommand{\paragraph}
{\@startsection{paragraph}{4}{0pt}{6pt}{-3pt}
@@ -681,7 +669,7 @@
% the second after; this results in a phrase that leads up to the passage itself.
%
%\medskip\noindent
-% The value of \IndexKey{enclosewith}\cs{enclosewith} key is a set of two tokens.
+% The value of \IndexKey{enclosewith}\texttt{enclosewith} key is a set of two tokens.
% The first token is placed at the beginning of the passage, and the second one at the
% end of the passage. A special value of \cs{quote} is recognized, this places quotation
% marks around the passage.
@@ -849,12 +837,14 @@
% \medskip\noindent
% With the \IndexKey{caps}\texttt{caps}, you can make the display the chapter name in capital
% letters `GENESIS' versus `Genesis'.
+% \changes{v2.4.10}{2021/03/08}{Changed default definition of \string\cs{fbpes@case} from
+% \string\cs{relax} to \string\cs{@empty} so \string\cs{versetxt} can be used in a label name.}
% \begin{macrocode}
\define@boolkey{fbpes}{caps}[true]{\ifKV@fbpes@caps
\def\fbpes@case{\uppercase}\else
- \let\fbpes@case\relax\fi
+ \let\fbpes@case\@empty\fi
}
-\let\fbpes@case\relax
+\let\fbpes@case\@empty
% \end{macrocode}
%\paragraph*{Example} We capitalize the full book name:
%\begin{quote}\small
@@ -954,7 +944,7 @@
% The \texttt{typeset} key is used with \cs{fetchversestxt}. If true,
% we assume the \cs{passagetxt} command is meant to be typeset and, as a result, the normal
% behavior of \cs{fetchverses} is followed; if false, certain special definitions are activated
-% that allows \cs{passagetxt} to pass to another macro, such as \cs{pdfcomment}. This option is
+% that allow \cs{passagetxt} to pass to another macro, such as \cs{pdfcomment}. This option is
% ignored within the optional list of \cs{fetchverses}.
% \par\medskip\noindent Added a value to the key \texttt{typeset}, which was a boolean key.
% Now, it is a combination, both a Boolean and a regular key.
@@ -1330,9 +1320,13 @@
\fp@looptoreplace\fi
\r@fbp@enclose
\egroup}%
+% \end{macrocode}
+% \changes{v2.4.10}{2021/03/08}{Inserted \string\cs{if@versetxt} conditional}
+% \begin{macrocode}
+ \if@versetxt\else
\ifKV@fbpes@citeatend
\fbp@priorRefSpc{\ifKV@fbpes@nocite\else
- \book@passage\fi}\fi
+ \book@passage\fi}\fi\fi
\egroup
}
% \end{macrocode}
@@ -1484,7 +1478,7 @@
\ifbookexists
% \end{macrocode}
% We get the book abbreviation early, needed to get the proper expansion
-% for \cs{fetchversestext}.
+% for \cs{fetchversestxt}.
% \changes{v2.4.9}{2018/07/30}{Expand book abbr early}
% \begin{macrocode}
\edef\expBkAbbrChoices{\@nameuse{bkfmt\bib@book}}% dpsjul30
@@ -1596,8 +1590,24 @@
\@tempcnta\fb@verseEnd
\else
\ifKV@fbpes@typeset
-% \fb@insrtvn
- \fb@insrtvn\fb@qq(\bib@ver)\fb@qq
+% \end{macrocode}
+% (2021/03/08) Insert \cs{if@versetxt} conditional
+% when \\cs{fetchversestxt[typeset]} is used, \cs{fetchversestxt[typeset]}
+% typesets the error reference when the reference is not defined.
+% \changes{v2.4.10}{2021/03/08}{Insert \string\cs{if@versetxt} conditional
+% when \string\cs{fetchversestxt[typeset]} is used.}
+% \begin{macrocode}
+ \if@versetxt
+ \PackageInfo{fetchbibpes}{For \string\fetchversestxt\space
+ with the typeset option:\MessageBreak
+ \bib@ver\space is not defined.
+ Expand \string\passagetxt\MessageBreak
+ to see the error message}%
+ \edef\x{\noexpand\g@addto@macro\noexpand
+ \passagetxt{\fb@insrtvn ??(\bib@ver)??}}\x
+ \else
+ \fb@insrtvn\fb@qq(\bib@ver)\fb@qq
+ \fi
\else
\edef\x{\noexpand\g@addto@macro\noexpand
\passagetxt{\fb@insrtvn ??(\bib@ver)??}}\x
@@ -1639,8 +1649,12 @@
\iffound@ltstarstop\let\fbpes@alt\@empty\fi
}\ifKV@fbpes@typeset\r@fbp@enclose\fi % dps
\egroup
+% \end{macrocode}
+% \changes{v2.4.10}{2021/03/08}{Inserted \string\cs{if@versetxt} conditional}
+% \begin{macrocode}
+ \if@versetxt\else
\ifKV@fbpes@citeatend
- \fbp@priorRefSpc{\book@passage}\fi
+ \fbp@priorRefSpc{\book@passage}\fi\fi
\egroup
}
% \end{macrocode}
@@ -2522,7 +2536,7 @@
% Using these markers, we extract the substrings.
%
% We begin by defining new keys and supporting commands. We rely heavily on the earlier replace code.
-% \changes{v2.3}{2016/12/17}{}
+% \changes{v2.3}{2016/12/17}{Added new keys and supporting commands}
% \begin{macrocode}
\define@key{fbpesvprts}{marks}[]{\fp@cntArgs#1\stop@rg
\xdef\nMarks{\fp@nReplace}\def\fbpesvprts@marks{#1}%
diff --git a/macros/latex/contrib/fetchbibpes/fetchbibpes.ins b/macros/latex/contrib/fetchbibpes/fetchbibpes.ins
index 1a9c12aece..0fad5c36fa 100644
--- a/macros/latex/contrib/fetchbibpes/fetchbibpes.ins
+++ b/macros/latex/contrib/fetchbibpes/fetchbibpes.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright 2016--2018 D. P. Story
+%% Copyright 2016--2021 D. P. Story
%% -------------------------------------------
%%
%% It may be distributed under the conditions of the LaTeX Project Public
diff --git a/macros/latex/contrib/highlightlatex/LICENSE.txt b/macros/latex/contrib/highlightlatex/LICENSE.txt
new file mode 100644
index 0000000000..74e1b58f1b
--- /dev/null
+++ b/macros/latex/contrib/highlightlatex/LICENSE.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 Vincent Kuhlmann
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/macros/latex/contrib/highlightlatex/README.md b/macros/latex/contrib/highlightlatex/README.md
new file mode 100644
index 0000000000..e6d0e6f2a1
--- /dev/null
+++ b/macros/latex/contrib/highlightlatex/README.md
@@ -0,0 +1,267 @@
+# Highlight LaTeX: Pretty LaTeX code within LaTeX
+
+Teaching other people LaTeX is great fun, and I've seen plenty of slides and
+readers doing so. You show what you achieve, and how you achieve it. However,
+while the LaTeX you achieve might look splendid, showing code is often done
+using very rudimentary solutions (like plain old verbatim).
+
+They're not to blame: I didn't find pretty colored LaTeX highlighting either. I
+sure want it, and if you're reading this, you probably too, so I've made a
+package for it! It builds further on the generic `listings` package to provide
+colored highlighting for LaTeX. The file `demo.tex` achieves this:
+
+<img src="assets/demoshowoff.png" width="600"
+alt="highlight demo" title="Highlight demo">
+
+## Manual installation
+
+1. Download the `.sty` file, e.g.
+[right click here and select 'save as'](https://github.com/vkuhlmann/highlight-latex/raw/main/highlightlatex.sty).
+2. Copy the file to the directory where your `.tex` file is at...
+3. ... or make it available for all your `.tex` files by placing the file in
+ your TEXMF root.
+
+ **Locating TEXTMF root**
+
+ Note the following default locations:
+
+ MiKTeX on Windows:
+ global installation: C:\Program Files\MiKTeX\tex\latex
+ local installation: %AppData%\..\Local\Programs\MiKTeX\tex\latex
+
+ TeX Live on Linux or Mac:
+ /usr/share/texmf-texlive/tex/latex
+ /usr/local/texlive/texmf-local/tex/latex
+
+ On Windows you can open a path by pasting the address in the Windows Explorer
+ address bar, or pressing <kbd>Start</kbd>+<kbd>R</kbd> and pasting the
+ address there. One of these directories should contain a long list of
+ packages you have installed. If you can't it, and you use MiKTeX, open MiKTeX
+ Console and open the directories listed under `Settings > Directories` with
+ `Purpose` set to `Install`. Doesn't it exist? Append a `tex` or `latex`
+ directory to the path.
+
+ **Adding the package**
+
+ Add a new directory called `highlightlatex` and place the `.sty` file in it.
+ Then refresh the file name database:
+ * For MiKTeX on Windows open MiKTeX Console and execute `Tasks > Refresh file
+ name database`.
+ * For TeX Live on Linux or Mac, execute in a terminal `sudo texhash`.
+4. Add `\usepackage{highlightlatex}` to your `.tex` file.
+5. For usage of this package, consult the demo files, or read the
+ documentation below.
+
+## Getting started
+
+After having added the package, you can add LaTeX in two ways:
+* Inline style:
+
+ Your file begins with a line of the form \hll|\documentclass[]{}|. The
+ square brackets ...
+
+ The first non-space character following `\hll` is delimits the argument to
+ this command.
+
+* Block style:
+
+ Your basic document now looks like
+ \begin{highlightblock}[gobble=2]
+ \documentclass[a4paper]{article}
+ \begin{document}
+ Hello world!
+ \end{document}
+ \end{highlightblock}
+
+ To prevent indentation of our `highlightblock` (here one tab), to be shown as
+ part of the code, the `gobble` parameters strips them off. Play around with
+ it until everything looks right. I recommend to set this value globally using
+ `\def\defaultgobble{2}`. You can still override that, if necessary.
+
+ There are situations where width of the block could run out of the page. For
+ example, when using beamer and storing a block as described in the section
+ 'Fragile breaking situations', the normal full-width of a slide is assumed.
+ If you use multiple columns, set the `linewidth` on the `highlightblock`.
+ This can be a fraction of the total slide width available, `0.6\textwidth`
+ is 60% of the width, or an absolute value, like `10em`, which seems to equal
+ 20 characters.
+
+ There are more keys you can provide. Check the
+ [listings package documentation](https://www.ctan.org/pkg/listings) for
+ options available to the `lstlisting`-environment and `lstset` command.
+
+## Adding a command to a highlighting rule
+
+By default, only some LaTeX commands will be highlighted in blue. If there are
+others you need, like `\tableofcontents` and `\figref`, update the highlighting
+rules:
+```
+\updatehighlight{
+ name = default,
+ add = {
+ \tableofcontents, \figref
+ }
+}
+```
+
+The changes will affect only code after it. For a use as this example, I
+recommend putting it in your preamble (before the `\begin{document}`).
+
+## Custom highlighting rules
+
+As shown `demo.tex`, you can put any command or keyword you want to highlight on
+in a different color. You do this with
+```
+\updatehighlight{
+ % A name like 'focus' or 'orange' would be more descriptive,
+ % this is just to show you can make up the name yourself.
+ name = orangejuice,
+ color = orange
+ add = {
+ \tableofcontents
+ }
+}
+```
+
+You can use the `xcolor` syntax for describing colors as well. If you find the
+orange too bright, you can replace it with `orange!90!black`: 90% orange,
+remaining is black. For more information on color definitions and name, refer to
+[LaTeX/Colors on Wikibooks](https://en.wikibooks.org/wiki/LaTeX/Colors).
+
+---
+
+The argument to `\updatehighlight` is a key-value list. Keys are processed
+sequentially. For example, use `color` before rather than after the `add`, and
+a key can appear multiple times. Each one will be processed. You can merge any
+two `\updatehighlight` in one. No need to close and reopen `\updatehighlight`
+for each highlighting rule.
+
+You might be tempted to add a blank line for clarity; that means a new paragraph
+too LaTeX, don't do it. Instead, just put a line with only a `%` sign. Spacing
+within the argument is often irrelevant. If you need a comma in the value,
+surround your value with braces.
+
+The possible keys are:
+* **name**: Create or modify a named rule. This key is optional.
+
+ The default keys are `default`, which includes a bunch of basic commands,
+ and has by default a dark blue color, and `structure`, which consists of
+ `\begin` and `\end` and prints them in light blue.
+
+ _Deprecated alias: label_
+
+* **classoffset**: Set the `listings` classoffset manually. Try to avoid this.
+ Use **name** to refer to existing rules instead.
+
+* **add**: Add a commands (`\mycommand`) oor keywords (`Hi!`) to the current
+ rule. The value can contain multiple values by opening braces, and comma
+ separating values within them.
+
+ _Deprecated aliases: macros (only for commands), commands (only for commands),
+ and keywords (only for keywords)_
+
+* **remove**: Remove a commands or keywords from the current rule. The value can
+ contain multiple values by opening braces, and comma separating values within
+ them.
+
+* **clear**: Remove all commands and keywords from the current rule. Use without
+ value, for example
+
+ \updatehighlight{
+ name = default,
+ clear
+ }
+
+* **color**: Specify a color for the rule. Equivalent to specifying **style**
+ instead, with value `\color{value}` where `value` is the value for the
+ **color** key. So `color=red` and `style=\color{red}` are equivalent.
+
+* **style**: Specify a style for the rule. A rule can only have one style. If
+ you specify a style after `add`, `remove`, `keywords` (deprecated), `macros`
+ (deprecated) or `commands` (deprecated), this starts a new (unnamed) rule.
+ In practice, the only style which will probably work for you is only a color,
+ so just use it instead. But hey, you have the option if you want to. :)
+
+## Global settings
+There are some global parameters involved in the appearance:
+```
+\colorlet{curlyBrackets}{red!50!blue}
+\colorlet{squareBrackets}{blue!50!white}
+\colorlet{codeBackground}{gray!10!white}
+\colorlet{comment}{green!40!black}
+\def\defaultgobble{0}
+```
+
+Each line can be set independent of eachother, and each shows its default value.
+
+There are package options you can use as well:
+* **frame** (default `lines`): specify the frame you want around code. My
+ favorites are `lines` and `none`. Check the
+ [listings package documentation](https://www.ctan.org/pkg/listings) for all
+ possibilities.
+
+* **noframe** (use without value): equivalent to `frame=none`.
+
+* **styleanywhere** (use without value): override the default behavior that
+ `style` starts a new style after commands like `add` and `remove`.
+
+## Fragile breaking situations (like beamer frames)
+
+When passing command arguments around, or storing environment content, LaTeX
+interprets all characters. This includes seeing `\maketitle` in `\hll|\maketitle|`
+as a real command. To prevent this behavior, everything from `\verb`, to the
+`verbatim`-environment, to the `listings` package the highlight LaTeX package
+uses temporarily changes the interpretation of characters that are still to be
+read. The blackslash before maketitle in `\hll|\maketitle|` will be read as
+`just text' (a _letter_ technically).
+
+When content has already been interpreted, like the `frame`-environment in
+`beamer` does, this trick can't be done anymore. Instead, you either need to
+_escape_ code, or _pre-process_ the code outside a fragile breaking situation.
+
+Escaping is done by preceding the special character with a backslash. For
+example, `\hll|\documentclass[]{}|` becomes `\hll|\\documentclass[]\{\}|`.
+
+For large code blocks, this is undesirable. Therefore, the package provides for
+a companion to the `highlightblock`-environment: surround it with a `saveblock`
+environment which takes a single argument: a name to assign it. We use it to
+refer to it later. For example:
+```latex
+\begin{saveblock}{basicfigure}
+ \begin{highlightblock}[linewidth=0.6\textwidth]
+ \begin{figure}
+ \includegraphics
+ [width=0.9\linewidth]
+ {myPlot.pdf}
+
+ \caption{My plot}
+ \label{fig:myplot}
+ \end{figure}
+ \end{highlightblock}
+\end{saveblock}
+```
+
+Do this outside a fragile breaking situation. (For the `frame`-environment
+example, that means just before the `frame` for example.) Then, where you want
+to use it, use `\useblock{basicfigure}`. There is also a variant
+`\consumeblock{basicfigure}`. If you save many blocks, these will all remain
+loaded in memory till your PDF has fully generated. The `\consumeblock` works
+like `\useblock`, except the saved block is deleted from memory after its use.
+Note this can also result in unexpected behavior, for example animations in a
+beamer frame might need the code line to be executed multiple times. Use
+`\useblock` when you can't make the guarantee this is the last use.
+
+For this special, but very important, situation, I've created a separate demo,
+which you find at `deamerdemo/deamerdemo.tex`.
+
+## Adding extra space
+
+By default, highlight-latex follows an approach where it minimizes spacing.
+This gives you full control over how tight or spacious your document looks.
+Just use commands like `\medskip` to add extra spacing. The package doesn't
+currently include an option to have that done everywhere automatically.
+
+## License
+
+The package is available under MIT License. See LICENSE.txt
+
diff --git a/macros/latex/contrib/highlightlatex/highlightlatex-manual.pdf b/macros/latex/contrib/highlightlatex/highlightlatex-manual.pdf
new file mode 100644
index 0000000000..5050bc29c1
--- /dev/null
+++ b/macros/latex/contrib/highlightlatex/highlightlatex-manual.pdf
Binary files differ
diff --git a/macros/latex/contrib/highlightlatex/highlightlatex.sty b/macros/latex/contrib/highlightlatex/highlightlatex.sty
new file mode 100644
index 0000000000..3c17391639
--- /dev/null
+++ b/macros/latex/contrib/highlightlatex/highlightlatex.sty
@@ -0,0 +1,525 @@
+\NeedsTeXFormat{LaTeX2e}[1994/06/01]
+\ProvidesPackage{highlightlatex}[2021/03/14]
+
+% Repository: https://github.com/vkuhlmann/highlight-latex
+
+% Copyright (c) 2021 Vincent Kuhlmann
+%
+% Permission is hereby granted, free of charge, to any person
+% obtaining a copy of this software and associated documentation
+% files (the "Software"), to deal in the Software without
+% restriction, including without limitation the rights to use,
+% copy, modify, merge, publish, distribute, sublicense, and/or sell
+% copies of the Software, and to permit persons to whom the
+% Software is furnished to do so, subject to the following
+% conditions:
+%
+% The above copyright notice and this permission notice shall be
+% included in all copies or substantial portions of the Software.
+%
+% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+% OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+% HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+% WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+% OTHER DEALINGS IN THE SOFTWARE.
+
+\RequirePackage{listings}
+\RequirePackage{xcolor}
+
+\RequirePackage{xkeyval}
+\RequirePackage{etoolbox}
+
+% Snippet source:
+% https://tex.stackexchange.com/questions/406015/defining-macro-gsetlength-as-global-setlength-reliable
+\gdef\gsetlength#1#2{%
+ \begingroup
+ \setlength\skip@{#2}%
+ \global#1=\skip@
+ \endgroup
+}
+
+
+\def\@highlight@frame{none}
+\newlength{\hll@offset@fixskip}
+\setlength{\hll@offset@fixskip}{0pt}
+
+\newif\ifhllStyleAnywhere
+\newcommand\defaultgobble{0}
+\newif\ifhllDebugFrame
+%\hllDebugFrametrue
+\newlength\hllBeforeSkip
+\setlength\hllBeforeSkip{2pt}
+\newlength\hllAfterSkip
+\setlength\hllAfterSkip{0pt}
+
+
+\DeclareOptionX{frame}{
+ \setframe{#1}
+}
+
+\DeclareOptionX{noframe}{
+ \setframe{none}
+}
+
+\def\setframe#1{%
+ \def\frameval{#1}%
+ \ifx\relax#1\relax
+ \def\frameval{lines}%
+ \fi
+ \def\linesvalue{lines}%
+ %
+ \xdef\@highlight@frame{\frameval}%
+ %
+ \ifx\frameval\linesvalue
+ \gsetlength{\hll@offset@fixskip}{6pt}%
+ \else
+ \gsetlength{\hll@offset@fixskip}{0pt}%
+ \fi
+}
+
+\DeclareOptionX{styleanywhere}{
+ \hllStyleAnywheretrue
+}
+
+\DeclareOptionX*{\PackageWarning{highlight-latex}{`\CurrentOption' ignored}}
+\ExecuteOptionsX{frame=lines}
+
+\ProcessOptionsX\relax
+
+\colorlet{curlyBrackets}{red!50!blue}
+\colorlet{squareBrackets}{blue!50!white}
+\colorlet{codeBackground}{gray!10!white}
+\colorlet{comment}{green!40!black}
+
+\colorlet{accDefault}{blue!90!black}
+\definecolor{accStructure}{RGB}{0,149,255}
+
+\colorlet{accentB}{green!60!black}
+
+\catcode`\{=11
+\let\myopenbrace={
+\catcode`\{=1
+
+\catcode`\}=11
+\let\myclosebrace=}
+\catcode`\}=2
+
+\lstdefinelanguage{ColoredLaTeX}
+[LaTeX]{TeX}{
+ backgroundcolor=\color{codeBackground},
+ keywordstyle=\bfseries\color{accDefault},
+ basicstyle=\footnotesize\ttfamily,
+ commentstyle=\color{comment},
+ numbers=none,
+ tabsize=2,
+ mathescape=false,
+ alsoletter={$@_!|?$},
+%
+ classoffset=0,
+ keywordstyle=\color{accDefault},
+ texcsstyle=*\color{accDefault},
+ moretexcs={subsection,thesubsection,thesection,theoremstyle},
+ deletetexcs={begin,end},
+%
+ classoffset=1,
+ keywordstyle=\color{accStructure},
+ texcsstyle=*\color{accStructure},
+ moretexcs={begin,end},
+%
+ classoffset=2,
+ escapeinside=~~,
+%
+ classoffset=0,
+ %literate={textA}{textB}{3}%
+ %https://tex.stackexchange.com/questions/172945/coloring-in-listing
+ literate={\{}{{\textcolor{curlyBrackets}{\myopenbrace}}}{1}
+ {\}}{{\textcolor{curlyBrackets}{\myclosebrace}}}{1}
+ {[}{{\textcolor{squareBrackets}{[}}}{1}
+ {]}{{\textcolor{squareBrackets}{]}}}{1}%
+ % {(}{{\textcolor{delimiterColor}{(}}}{1}
+ % {)}{{\textcolor{delimiterColor}{)}}}{1}%
+ %texcsstyle=\color{blue}
+}
+\lstset{language=ColoredLaTeX}
+
+
+\newcommand{\hllDelimDollar}[1][\color{green!40!black}]{%
+ \lstset{
+ classoffset=2,
+ moredelim=**[s][#1]{$}{$},
+ classoffset=0
+ }%
+}
+
+\newcommand{\hllDelimParen}[1][\color{green!40!black}]{%
+ \lstset{
+ classoffset=2,
+ moredelim=**[s][#1]{\(}{\)},
+ classoffset=0
+ }%
+}
+
+\def\hll@assignlabel#1#2{%
+ \expandafter\gdef\csname hll@labeltoclassoffset@#1\endcsname{#2}%
+}
+
+\hll@assignlabel{default}{0}
+\hll@assignlabel{structure}{1}
+
+
+% =========================
+% block & inline markup
+% =========================
+
+\newcommand{\hllPrepareBlock}{%
+ \lstset{framesep=0.1cm,framerule=0.6pt}%
+ \def\setHighlightFrame##1{%
+ \lstset{frame=##1}%
+ }%
+ \expandafter\setHighlightFrame\expandafter{\@highlight@frame}%
+ \lstset{belowskip=0pt,aboveskip=0pt,belowcaptionskip=0pt,gobble=\defaultgobble}%
+ \setlength\parskip{0pt}%
+ \setlength\parindent{0pt}%
+}
+
+\lstnewenvironment{highlightblock}[1][]
+{%
+ \vspace{\hllBeforeSkip}%
+ \begingroup
+ \hllPrepareBlock\lstset{#1}%
+}{%
+ \nointerlineskip
+ \endgroup
+ \vspace{\hllAfterSkip}%
+}
+
+\lstnewenvironment{hllblock}[1][]
+{%
+ \vspace{\hllBeforeSkip}%
+ \begingroup
+ \hllPrepareBlock\lstset{#1}%
+}{%
+ \endgroup
+ \vspace{\hllAfterSkip}%
+}
+
+\def\hll{\lstinline}
+
+% ================
+% block saving
+% ================
+
+\newenvironment{saveblock}[1]{%
+ \expandafter\ifx\csname @codebox@#1\endcsname\relax
+ \expandafter\newbox\csname @codebox@#1\endcsname\relax
+ \fi
+ %
+ % The trick from latex/base/latex.ltx
+ \edef\@bracehack{%
+ \endgroup
+ \expandafter\setbox\csname @codebox@#1\endcsname\vbox{%
+ \begingroup\aftergroup}%
+ \def\noexpand\@currenvir{\@currenvir}%
+ \def\noexpand\@currenvline{\on@line}}%
+ \@bracehack
+ \begingroup\vspace{\hll@offset@fixskip}
+ \ignorespaces%
+}{%
+ \endgroup
+}
+
+\newcommand\useblock[1]{%
+ \ifhllDebugFrame
+ \par
+ {%
+ \setlength{\fboxsep}{0pt}%
+ \fcolorbox{orange}{red}{\expandafter\usebox\csname @codebox@#1\endcsname}%
+ }%
+ \par
+ \else
+ \par\expandafter\usebox\csname @codebox@#1\endcsname\par
+ \fi
+}
+
+\newcommand\consumeblock[1]{%
+ \ifhllDebugFrame
+ \par
+ {%
+ \setlength{\fboxsep}{0pt}%
+ \setlength{\fboxrule}{1pt}%
+ \fcolorbox{orange}{red}{\leavevmode\expandafter\box\csname @codebox@#1\endcsname\relax}%
+ }
+ \par
+ \expandafter\let\csname @codebox@#1\endcsname\relax
+ \else
+ \par\leavevmode\expandafter\box\csname @codebox@#1\endcsname\relax\par
+ \expandafter\let\csname @codebox@#1\endcsname\relax
+ \fi
+}
+
+% ===================
+% updatehighlight
+% ===================
+
+\def\hll@update@label{}
+
+\newcounter{hll@update@state}
+
+\newcounter{hll@update@nextclassoffset}
+\setcounter{hll@update@nextclassoffset}{5}
+
+\newcounter{hll@update@classoffset}
+
+\def\hll@update@fixclassoffset{%
+ \ifnum\value{hll@update@state}<1\relax
+ \setcounter{hll@update@classoffset}{\thehll@update@nextclassoffset}%
+ \stepcounter{hll@update@nextclassoffset}%
+ \setcounter{hll@update@state}{1}%
+ \fi
+}
+
+\newcommand{\updatehighlight}[1]{%
+ \setcounter{hll@update@state}{-1}%
+ \gdef\hll@update@label{}%
+ \setkeys{updatehighlight}{#1}%
+ %
+ \lstset{classoffset=0}%
+}
+
+
+%%% KEY: label
+%%% ----------
+
+\define@key{updatehighlight}{label}{%
+ \hll@update@setlabel{#1}%
+}
+
+\define@key{updatehighlight}{name}{%
+ \hll@update@setlabel{#1}%
+}
+
+\def\hll@update@setlabel#1{
+ \gdef\hll@update@label{#1}%
+ \expandafter\def\expandafter\@capturedlabel\expandafter{\csname hll@labeltoclassoffset@#1\endcsname}%
+ \expandafter\unless\expandafter\ifx\@capturedlabel\relax\relax
+ % Label exists
+ \edef\@val{\@capturedlabel}%
+ \setcounter{hll@update@classoffset}{\@val}%
+ \setcounter{hll@update@state}{1}%
+ \else
+ % Allocate new label
+ \edef\@val{\thehll@update@nextclassoffset}%
+ \setcounter{hll@update@classoffset}{\@val}%
+ \stepcounter{hll@update@nextclassoffset}%
+ \setcounter{hll@update@state}{1}%
+ %
+ \expandafter\xdef\@capturedlabel{\@val}%
+ \fi
+}
+
+%%% KEY: classoffset
+%%% ----------------
+
+\define@key{updatehighlight}{classoffset}{%
+ \setcounter{hll@update@classoffset}{#1}%
+ \setcounter{hll@update@state}{1}%
+}
+
+%%% KEY: commands
+%%% -------------
+
+\define@key{updatehighlight}{macros}{%
+ \hll@update@macros{#1}%
+}
+
+\define@key{updatehighlight}{commands}{%
+ \hll@update@macros{#1}%
+}
+
+
+\def\hll@update@macros#1{%
+ \hll@update@fixclassoffset
+ \def\@inv##1{\forcsvlist{\hll@update@addmacro{##1}}{#1}}%
+ \expandafter\@inv\expandafter{\the\c@hll@update@classoffset}
+ %
+ \setcounter{hll@update@state}{2}%
+}
+
+\def\hll@update@addmacro#1#2{%
+ \if\noexpand#2\relax
+ \edef\keywordpure{\expandafter\@gobble\string#2}%
+ \def\callwithpure##1{\hll@update@addmacro@i{#1}{##1}}%
+ \expandafter\callwithpure\expandafter{\keywordpure}%
+ \else
+ \hll@update@addmacro@i{#1}{#2}%
+ \fi
+}
+
+\def\hll@update@addmacro@i#1#2{%
+ \lstset{
+ classoffset=0,deletetexcs={#2},
+ classoffset=1,deletetexcs={#2},
+ classoffset=#1,moretexcs={#2},
+ classoffset=0
+ }%
+}
+
+
+%%% KEY: add
+%%% --------
+
+\define@key{updatehighlight}{add}{%
+ \hll@update@add{#1}%
+}
+
+\def\hll@update@add#1{%
+ \hll@update@fixclassoffset
+ \def\@inv##1{\forcsvlist{\hll@update@additem{##1}}{#1}}%
+ \expandafter\@inv\expandafter{\the\c@hll@update@classoffset}
+ %
+ \setcounter{hll@update@state}{2}%
+}
+
+\def\hll@update@additem#1#2{%
+ \if\noexpand#2\relax
+ \edef\keywordpure{\expandafter\@gobble\string#2}%
+ \def\callwithpure##1{\hll@update@addmacro@i{#1}{##1}}%
+ \expandafter\callwithpure\expandafter{\keywordpure}%
+ \else
+ \hll@update@addkeyword{#1}{#2}%
+ \fi
+}
+
+%%% KEY: remove
+%%% -----------
+
+\define@key{updatehighlight}{remove}{%
+ \hll@update@remove{#1}%
+}
+
+\def\hll@update@remove#1{%
+ \hll@update@fixclassoffset
+ \def\@inv##1{\forcsvlist{\hll@update@removeitem{##1}}{#1}}%
+ \expandafter\@inv\expandafter{\the\c@hll@update@classoffset}
+ %
+ \setcounter{hll@update@state}{2}%
+}
+
+\def\hll@update@removeitem#1#2{%
+ \if\noexpand#2\relax
+ \edef\keywordpure{\expandafter\@gobble\string#2}%
+ \def\callwithpure##1{\hll@update@removemacro{#1}{##1}}%
+ \expandafter\callwithpure\expandafter{\keywordpure}%
+ \else
+ \hll@update@removekeyword{#1}{#2}%
+ \fi
+}
+
+\def\hll@update@removemacro#1#2{%
+ \lstset{
+ classoffset={#1},
+ deletetexcs={#2}
+ }%
+}
+
+\def\hll@update@removekeyword#1#2{%
+ \lstset{
+ classoffset={#1},
+ deletekeywords={#2}
+ }%
+}
+
+
+%%% KEY: keywords
+%%% -------------
+
+\define@key{updatehighlight}{keywords}{%
+ \hll@update@keywords{#1}%
+}
+
+
+\def\hll@update@keywords#1{%
+ \hll@update@fixclassoffset
+ \def\@inv##1{\forcsvlist{\hll@update@addkeyword{##1}}{#1}}%
+ \expandafter\@inv\expandafter{\the\c@hll@update@classoffset}%
+ %
+ \setcounter{hll@update@state}{2}%
+}
+
+\def\hll@update@addkeyword#1#2{%
+ \lstset{
+ classoffset=0,deletekeywords={#2},
+ classoffset=1,deletekeywords={#2},
+ classoffset=#1,otherkeywords={#2},morekeywords={#2},
+ classoffset=0
+ }%
+}
+
+
+%%% KEY: style
+%%% ----------
+
+\define@key{updatehighlight}{style}{%
+ \hll@update@fixclassoffset
+ \unless\ifhllStyleAnywhere
+ \ifnum\value{hll@update@state}>1\relax
+ \setcounter{hll@update@state}{0}%
+ \hll@update@fixclassoffset
+ \fi
+ \fi
+ %
+ \expandafter\hll@update@setstyle\expandafter{\the\c@hll@update@classoffset}{#1}%
+}
+
+\def\hll@update@setstyle#1#2{%
+ \lstset{%
+ classoffset=#1,
+ keywordstyle={#2},
+ texcsstyle={*#2},
+ }%
+}
+
+%%% KEY: color
+%%% ----------
+
+\define@key{updatehighlight}{color}{%
+ \hll@update@fixclassoffset
+ \unless\ifhllStyleAnywhere
+ \ifnum\value{hll@update@state}>1\relax
+ \setcounter{hll@update@state}{0}%
+ \hll@update@fixclassoffset
+ \fi
+ \fi
+ %
+ \expandafter\hll@update@setcolor\expandafter{\the\c@hll@update@classoffset}{#1}%
+}
+
+\def\hll@update@setcolor#1#2{%
+ \lstset{%
+ classoffset=#1,
+ keywordstyle={\color{#2}},
+ texcsstyle={*\color{#2}},
+ }%
+}
+
+%%% KEY: clear
+%%% ----------
+
+\define@key{updatehighlight}{clear}[]{%
+ \hll@update@fixclassoffset
+ \expandafter\hll@update@clear\expandafter{\the\c@hll@update@classoffset}%
+}
+
+\def\hll@update@clear#1{%
+ \lstset{
+ classoffset=#1,
+ texcs={},
+ keywords={},
+ classoffset=0
+ }%
+}
+
+
diff --git a/macros/latex/contrib/hvfloat/Changes b/macros/latex/contrib/hvfloat/Changes
index 796f24877b..f18e545f58 100644
--- a/macros/latex/contrib/hvfloat/Changes
+++ b/macros/latex/contrib/hvfloat/Changes
@@ -1,4 +1,5 @@
hvfloat.sty:
+2.19 2021-03-15 - fix for vertical spacing of doubleFULLPAGE
2.18 2021-03-12 - add support for doublepage objects
2.17 2020-10-31 - fix for label setting of non floating objects
2.16 2019-08-31 - fix for \hvFloat* and full page images
diff --git a/macros/latex/contrib/hvfloat/doc/hvfloat.pdf b/macros/latex/contrib/hvfloat/doc/hvfloat.pdf
index adcbeecc69..8a2b8d896d 100644
--- a/macros/latex/contrib/hvfloat/doc/hvfloat.pdf
+++ b/macros/latex/contrib/hvfloat/doc/hvfloat.pdf
Binary files differ
diff --git a/macros/latex/contrib/hvfloat/doc/hvfloat.tex b/macros/latex/contrib/hvfloat/doc/hvfloat.tex
index 0896645980..29404eaadd 100644
--- a/macros/latex/contrib/hvfloat/doc/hvfloat.tex
+++ b/macros/latex/contrib/hvfloat/doc/hvfloat.tex
@@ -1,4 +1,4 @@
-%% $Id: hvfloat.tex 35 2020-10-31 07:41:00Z herbert $
+%% $Id: hvfloat.tex 54 2021-03-14 14:55:34Z herbert $
\listfiles
\errorcontextlines=100
\documentclass[twoside,paper=a4]{scrartcl}
@@ -56,8 +56,8 @@
\usepackage{hvindex}
\usepackage[all=!htb]{hvfloat-fps}
\usepackage[fbox,hyperref]{hvfloat}
-\captionsetup{format=plain,font=sf,labelfont=sf}
-\captionsetup[sub]{format=plain,font=sf,labelfont=sf}
+\captionsetup{format=plain,font=sf,labelfont={sf,bf}}
+\captionsetup[sub]{format=plain,font=sf,labelfont={sf,bf}}
\hypersetup{urlcolor=blue, linktocpage, colorlinks=true}
%
@@ -361,7 +361,7 @@ or \Lenv{table} environment, f.ex.:
\normalsize
-
+\marginnote{Fig.~\ref{fig:0}}
\hvFloat{figure}{\includegraphics{images/rose}}{Without any keywords (only the \texttt{fbox} package option)}{fig:0}
Code for figure \ref{fig:0}:
@@ -369,7 +369,8 @@ Code for figure \ref{fig:0}:
\hvFloat{figure}{\includegraphics{images/rose}}{Without any keywords (only the \texttt{fbox} package option)}{fig:0}
\end{lstlisting}
-\Float
+
+\marginnote{Tab.~\ref{tab:0}}
\hvFloat[capPos=top]{table}{%
\begin{tabularx}{\textwidth}{l|l|X}
\rmfamily Name & Type & Description\\\hline
@@ -420,7 +421,7 @@ floating environments like \Lenv{figure} or \Lenv{table}:
{Default caption width setting, which is the natural width with respect to the current linewidth.}{fig:width0}
\end{lstlisting}
-\Float
+\marginnote{Fig.~\ref{fig:width0}}
\hvFloat[floatPos=!htb]{figure}{\includegraphics{images/rose}}%
{Default caption width setting, which is the natural width with respect to the current linewidth.}{fig:width0}
@@ -445,7 +446,7 @@ minus the width of the object and the space between object and caption, which is
the separation between object and caption, and the current linewidth.}{fig:width1}
\end{lstlisting}
-\Float
+\marginnote{Fig.~\ref{fig:width1}}
\hvFloat[floatPos=!htb,capPos=after,objectFrame]{figure}{\includegraphics[scale=1.5]{images/rose}}%
{Caption right beside with a \emph{natural} width, which is given by the width of the object,
the separation between object and caption, and the current linewidth.}{fig:width1}
@@ -467,7 +468,7 @@ is greater than 1.
in this special case \the\linewidth. Divide it by 28.82 to get cm.}{fig:width2}
\end{lstlisting}
-\Float
+\marginnote{Fig.~\ref{fig:width2}}
\hvFloat[floatPos=!htb,capWidth=0.9]{figure}{\includegraphics{images/rose}}%
{Caption below with a width of 0.9 of the current line width (column width), which is
in this special case \the\linewidth. Divide it by 28.82 to get cm.}{fig:width2}
@@ -489,7 +490,7 @@ If not then the width is set to the possible value between object and margin:
by the macro to the maximal width.}{fig:width3}
\end{lstlisting}
-\Float
+\marginnote{Fig.~\ref{fig:width3}}
\hvFloat[floatPos=!htb,capPos=after,capWidth=0.9]{figure}{\includegraphics[scale=1.5]{images/rose}}%
{Caption right beside with a width setting of \texttt{0.9\textbackslash linewidth}
which is too big for this example and therefore corrected by the macro to the maximal width.}{fig:width3}
@@ -506,7 +507,6 @@ real sense if you have a lot of identical images with respect to its widths.
if it is a very small object.}{fig:width4}
\end{lstlisting}
-\Float
\hvFloat[floatPos=!htb,capWidth=w]{figure}{\includegraphics[width=0.5\linewidth]{images/CTAN}}%
{Caption below with a width of the given object which may be a problem
if it is a very small object.}{fig:width4}
@@ -523,6 +523,7 @@ real sense if you want to put a rotated caption beside the object.
if it is a very small object.}{fig:width5}
\end{lstlisting}
+\marginnote{Fig.~\ref{fig:width5}}
\hvFloat[floatPos=!htb,capPos=after,capWidth=h,capAngle=90,objectFrame]{figure}{\includegraphics{images/rose}}%
{Caption beside with a width of the given object height which may be a problem
if it is a very small object.}{fig:width5}
@@ -547,6 +548,7 @@ Code for figure \ref{fig:1}:
{fig:1}
\end{lstlisting}
+\marginnote{Fig.~\ref{fig:1}}
\Float[capPos=right]
\hvFloat%
[floatPos=htb,
@@ -575,7 +577,7 @@ Code for figure \ref{fig:2}:
of \texttt{capWidth=h}, which is the height of the object.}{fig:2}
\end{lstlisting}
-\Float[capAngle=90]
+\marginnote{Fig.~\ref{fig:2}}
\hvFloat%
[floatPos=htb,
capPos=left,
@@ -610,8 +612,7 @@ Code for figure \ref{fig:3}:
of the image and a rotation of the caption and the object.}{fig:3}
\end{lstlisting}
-
-\Float
+\marginnote{Fig.~\ref{fig:3}}
\hvFloat[%
capWidth=h,% of \columnwidth
capPos=after,
@@ -640,7 +641,7 @@ Code for figure~\ref{fig:20}:
an odd page.}{fig:20}
\end{lstlisting}
-\Float[capPos=inner]
+\marginnote{Fig.~\ref{fig:20}}
\hvFloat[capPos=inner]{figure}{\includegraphics{images/rose}}%
[Centered Caption on the inner side]{%
Caption set with the parameter setting \texttt{capPos=inner}, which will be
@@ -666,7 +667,7 @@ even \fi page. We now set a pagebreak at the end of the second image to see if i
an odd page.}{fig:20b}
\end{lstlisting}
-\Float[capPos=outer]
+\marginnote{Fig.~\ref{fig:20b}}
\hvFloat[capPos=outer]{figure}{\includegraphics{images/rose}}%
[Centered Caption on the inner side]{%
Caption set with the parameter setting \texttt{capPos=outer}, which will be
@@ -675,8 +676,7 @@ even \fi page. We now set a pagebreak at the end of the second image to see if i
-
-\Float
+\marginnote{Fig.~\ref{fig:21}}
\hvFloat[%
capWidth=0.5,% of \columnwidth
capPos=outer,
@@ -709,7 +709,7 @@ Code for figure \ref{fig:22}:
width of \texttt{0.5\textbackslash columnwidth} and \texttt{capPos=outer} }{fig:22}
\end{lstlisting}
-\Float
+\marginnote{Fig.~\ref{fig:22}}
\hvFloat[%
capWidth=0.5,% of \columnwidth
capPos=inner,
@@ -745,7 +745,7 @@ The code for figure \ref{fig:4}:
\end{lstlisting}
-\Float
+\marginnote{Fig.~\ref{fig:4}}
\hvFloat[%
floatPos=htb,%
capWidth=0.25,%
@@ -766,7 +766,7 @@ The code for figure \ref{fig:5}:
\end{lstlisting}
-\Float
+\marginnote{Fig.~\ref{fig:5}}
\hvFloat[%
floatPos=htb,%
capWidth=0.25,%
@@ -785,7 +785,7 @@ The code for figure \ref{fig:6}:
\end{lstlisting}
-\Float
+\marginnote{Fig.~\ref{fig:6}}
\hvFloat[%
capWidth=0.25,%
capPos=right,%
@@ -807,7 +807,7 @@ in a minipage, the reason why it will be local to the current image..
]{figure}{\frame{\includegraphics{images/rose}}}{\blindtext}{fig:66}
\end{lstlisting}
-\Float
+\marginnote{Fig.~\ref{fig:66}}
\hvFloat[%
capPos=right,
capFormat={labelsep=newline,justification=RaggedRight,font={small,it},labelfont=bf}
@@ -837,7 +837,7 @@ The code for figure \ref{fig:7}:
\end{lstlisting}
-\Float
+\marginnote{Fig.~\ref{fig:7}}
\hvFloat[%
capWidth=0.25,%
capPos=right,%
@@ -853,7 +853,7 @@ The code for figure \ref{fig:7}:
The same with \Lkeyset{capPos=left}:
-\Float[capPos=left]
+\marginnote{Fig.~\ref{fig:700}}
\hvFloat[%
capWidth=0.25,%
capPos=left,%
@@ -879,7 +879,7 @@ The code for figure \ref{fig:8}:
\end{lstlisting}
-\Float
+\marginnote{Fig.~\ref{fig:8}}
\hvFloat[%
capWidth=0.25,%
capPos=before,%
@@ -908,7 +908,7 @@ The code for figure \ref{fig:70}:
the option \texttt{wide}.}{fig:70}
\end{lstlisting}
-%\Float
+\marginnote{Fig.~\ref{fig:70}}
\hvFloat[%
wide,
capPos=right,%
@@ -933,7 +933,7 @@ The code for figure \ref{fig:80}:
\end{lstlisting}
-%\Float
+\marginnote{Fig.~\ref{fig:80}}
\hvFloat[wide,
capPos=left,%
capVPos=top,%
@@ -955,8 +955,7 @@ Caption at top and inner beside the float and object position right and
the option \texttt{wide}.}{fig:81}
\end{lstlisting}
-%\Float[capPos=outer]
-
+\marginnote{Fig.~\ref{fig:81}}
\hvFloat[wide,
capPos=inner,
capVPos=top,
@@ -980,8 +979,8 @@ Caption at top inner beside the float and object position right and
the option \texttt{wide}.}{fig:811}
\end{lstlisting}
-%\Float[capPos=outer]
+\marginnote{Fig.~\ref{fig:811}}
\hvFloat[wide,
capPos=inner,
capVPos=top,
@@ -1005,6 +1004,7 @@ the option \texttt{wide}.}{fig:812}
%\Float[capPos=outer]
\begingroup
+\marginnote{Fig.~\ref{fig:812}}
\captionsetup{justification=RaggedRight}
\hvFloat[wide,
capPos=outer,
@@ -1071,7 +1071,7 @@ Code for figure \ref{fig:9}:
The float can also be put to the left or to the right (above/below in landscape)
with the \Lkeyset{objectPos=l} parameter
-\Float[landscape]
+\marginnote{Fig.~\ref{fig:9}}
\hvFloat[%
floatPos=p,
capPos=bottom,
@@ -1100,7 +1100,7 @@ The code for figure \ref{fig:10}:
degrees.\blindtext}{fig:10}
\end{lstlisting}
-\Float
+\marginnote{Fig.~\ref{fig:10}}
\hvFloat[%
floatPos=p,%
capWidth=h,%
@@ -1142,9 +1142,9 @@ Some nonsense text before the following \emph{non floating} object.
Some nonsense text after the preceding \emph{non floating} object.
\end{lstlisting}
-\Float
Some nonsense text before the following \emph{non floating} object.
+\marginnote{Fig.~\ref{fig:11}}
\hvFloat[%
nonFloat,%
capWidth=0.25,%
@@ -1218,6 +1218,7 @@ The code for table \ref{table:1} and \ref{table:2} is:
\hvblindtext
+\marginnote{Tab.~\ref{table:2}}
\hvFloat[%
floatPos=hb,
useOBox=true,
@@ -1229,7 +1230,7 @@ The code for table \ref{table:1} and \ref{table:2} is:
In this case leave the third parameter empty.
-\Float
+\marginnote{Tab.~\ref{table:1}}
\hvFloat[%
floatPos=!hb,
capPos=top,
@@ -1237,7 +1238,7 @@ In this case leave the third parameter empty.
-\Float
+\marginnote{Tab.~\ref{table:2}}
\hvFloat[%
floatPos=!htb,%
useOBox=true,%
@@ -1270,7 +1271,7 @@ The code for figure \ref{fig:text}:
\end{lstlisting}
-\Float
+\marginnote{Fig.~\ref{fig:text}}
\hvFloat[%
onlyText=true,%
capAngle=90,%
@@ -2443,7 +2444,6 @@ should be true (see listing).
%\index{capPos@\texttt {capPos} (keyword)|)}
-
\section{Doublepage objects -- images and/or tabulars}
If an image or a tabular or any other object is too big for one page, it can be split over two pages (left -- right).
It is obvious that this makes only sense for twoside documents.
@@ -2454,21 +2454,20 @@ There are three optional arguments:
The user has to scale the image to be sure that the object will not be greater than \verb|2\paperwidth-4\margin|. The caption can be rotated
on the right side of the right object part or under the right part.
-
\item[\Lkeyword{doublePAGE}] A splitted object with or without a caption on top of a double page, beginning at the left side
of the paper area and top of the text area.
The user has to scale the image to be sure that the object will not be greater than \verb|2\paperwidth|. The caption can only be
under the right part of the object. The will be \emph{no additional text} on the double page.
-\item[\Lkeyword{doubleFULLPAGE}] A splitted object with or without a caption on top of a double page, beginning at the
-left top paper edge and filling the complete double page.
+\item[\Lkeyword{doubleFULLPAGE}] A splitted object with or without a caption on the right or below of a double page. The object can
+fill the complete double page.
The user has to scale the image to be sure that the object will not be greater than \verb|2\paperwidth|. A caption will be
-rotated and written \emph{over} the object. The user has to take care for a correct text color.
+rotated and written \emph{over} the object, or if possible, at the right. The user has to take care for a correct text color.
\end{description}
\subsection{\Lkeyword{doubleFULLPAGE}}
The scaling of the image is leave to the user. If the proportion of the object doesn't fit 2*paperwidth/paperheight,
-then there can be a white part on the right or bottom of the object. A pagenumber will not be printed. You'll
+then there can be a white part on the top or bottom of the object. A pagenumber will not be printed. In this documentation you'll
find a marginnote where the following full doublepage image is defined. It appears on the the next following
even page and following text will be placed \emph{before} the object.
@@ -2479,7 +2478,7 @@ even page and following text will be placed \emph{before} the object.
\hvFloat[doubleFULLPAGE,capPos=r,capAngle=90]%
{figure}%
- {\includegraphics[angle=90,width=2\paperwidth]{images/raphi}}%
+ {\includegraphics[angle=90,width=2\paperwidth]{images/r+j}}%
[Eine doppelseitige Abbildung mit Caption auf der Abbildung]%
{Eine Beschriftung einer doppelseitigen Abbildung, die ÜBER den rechten
Teil der Abbildung platziert wird. Die Abbildung beginnt am linken
@@ -2492,10 +2491,10 @@ even page and following text will be placed \emph{before} the object.
\end{lstlisting}
\Blindtext
-\marginnote{doubleFULLPAGE0}
+\marginnote{Fig.~\ref{fig:doubleFULLPAGE0}}
\hvFloat[doubleFULLPAGE,capPos=r,capAngle=90]%
{figure}%
- {\includegraphics[angle=90,width=2\paperwidth]{images/raphi}}%
+ {\includegraphics[height=2\paperwidth,angle=90]{images/r+j}}%
[Eine doppelseitige Abbildung mit Caption auf der Abbildung]%
{Eine Beschriftung einer doppelseitigen Abbildung, die ÜBER den rechten
Teil der Abbildung platziert wird. Die Abbildung beginnt am linken
@@ -2508,6 +2507,39 @@ even page and following text will be placed \emph{before} the object.
\Blindtext
+
+\begin{lstlisting}
+\Blindtext
+
+ \hvFloat[doubleFULLPAGE,capPos=r]%
+ {figure}%
+ {\includegraphics[height=\paperheight]{images/rheinsberg}}%
+ {Eine Beschriftung einer doppelseitigen Abbildung, die ÜBER den rechten
+ Teil der Abbildung platziert wird. Die Abbildung beginnt am linken
+ Papierrand. Auf den Seiten wird kein weiterer Text
+ platziert. Für das LOF wird dabei eine Kurzform berücksichtigt. Parameter
+ ist \texttt{doubleFULLPAGE}}%
+ {fig:doubleFULLPAGE1}
+
+\Blindtext \Blindtext
+\end{lstlisting}
+
+\marginnote{Fig.~\ref{fig:doubleFULLPAGE1}}
+
+ \hvFloat[doubleFULLPAGE,capPos=r]%
+ {figure}%
+ {\includegraphics[height=\paperheight]{images/rheinsberg}}%
+ {Eine Beschriftung einer doppelseitigen Abbildung, die ÜBER den rechten
+ Teil der Abbildung platziert wird. Die Abbildung beginnt am linken
+ Papierrand. Auf den Seiten wird kein weiterer Text
+ platziert. Für das LOF wird dabei eine Kurzform berücksichtigt. Parameter
+ ist \texttt{doubleFULLPAGE}}%
+ {fig:doubleFULLPAGE1}
+
+\Blindtext \Blindtext
+
+
+
\subsection{\Lkeyword{doublePAGE}}
With this option the object also starts at the left paper margin but on the top of the text area.
There will be pagenumbers and a caption can be rotated on the right of the object or under it.
@@ -2517,7 +2549,7 @@ There will be pagenumbers and a caption can be rotated on the right of the objec
\hvFloat[doublePAGE]%
{figure}%
- {\includegraphics[width=2\paperwidth]{images/felsen-wasser}}%
+ {\includegraphics[width=2\paperwidth]{images/seiser}}%
[Eine doppelseitige Abbildung mit Caption unterhalb der rechten Abbildung]%
{Eine Beschriftung einer doppelseitigen Abbildung, die unterhalb der rechten
Teils der Abbildung platziert wird. Die Abbildung beginnt am linken
@@ -2529,12 +2561,12 @@ There will be pagenumbers and a caption can be rotated on the right of the objec
\Blindtext
\end{lstlisting}
-\Blindtext
+\blindtext
-\marginnote{doublePAGE0}
+\marginnote{Fig. \ref{fig:doublePAGE0}}
\hvFloat[doublePAGE]%
{figure}%
- {\includegraphics[width=2\paperwidth]{images/felsen-wasser}}%
+ {\includegraphics[width=2\paperwidth]{images/seiser}}%
[Eine doppelseitige Abbildung mit Caption unterhalb der rechten Abbildung]%
{Eine Beschriftung einer doppelseitigen Abbildung, die unterhalb der rechten
Teils der Abbildung platziert wird. Die Abbildung beginnt am linken
@@ -2556,7 +2588,7 @@ and the rest of the text area is filled with text.
\hvFloat[doublePage,capWidth=n,capPos=r]%
{figure}%
- {\includegraphics[width=2\textwidth]{images/felsen-wasser-small}}%
+ {\includegraphics[width=2\textwidth]{images/sonne-meer}}%
[Eine doppelseitige Abbildung mit rechtsseitiger Caption unterhalb]%
{Eine Beschriftung einer doppelseitigen Abbildung, die unterhalb des rechten
Teils der Abbildung platziert wird. Die Abbildung beginnt am linken
@@ -2570,10 +2602,10 @@ and the rest of the text area is filled with text.
\Blindtext
-\marginnote{doublePage0}
+\marginnote{Fig. \ref{fig:doublePage0}}
\hvFloat[doublePage,capWidth=n,capPos=r]%
{figure}%
- {\includegraphics[width=2\textwidth]{images/felsen-wasser-small}}%
+ {\includegraphics[width=2\textwidth]{images/sonne-meer}}%
[Eine doppelseitige Abbildung mit rechtsseitiger Caption unterhalb]%
{Eine Beschriftung einer doppelseitigen Abbildung, die unterhalb des rechten
Teils der Abbildung platziert wird. Die Abbildung beginnt am linken
@@ -2584,7 +2616,7 @@ and the rest of the text area is filled with text.
\Blindtext
-
+\hvblindtext
\subsection{Tabulars}
@@ -2640,7 +2672,7 @@ Artikel gesamt & 2 & 6 & 13 & 8 & 4 & 3 & 5 & 4 & 0 & 6 & 3 & 5 &23 &10 & 8 & 15
\Blindtext
-\marginpar{doublePage1}
+\marginpar{Tab.~\ref{tab:doublePage3}}
\global\savebox\hvOBox{%
\begin{tabular}{l*{18}r} \toprule
& \textbf{1972} & \textbf{1973} & \textbf{1974} & \textbf{1975} & \textbf{1976}
diff --git a/macros/latex/contrib/hvfloat/latex/hvfloat.sty b/macros/latex/contrib/hvfloat/latex/hvfloat.sty
index ff8fb42a4c..67c4c86b8d 100644
--- a/macros/latex/contrib/hvfloat/latex/hvfloat.sty
+++ b/macros/latex/contrib/hvfloat/latex/hvfloat.sty
@@ -1,4 +1,4 @@
-%% $Id: hvfloat.sty 41 2020-11-21 21:03:28Z herbert $
+%% $Id: hvfloat.sty 55 2021-03-15 06:54:38Z herbert $
%%
%%
%% IMPORTANT NOTICE:
@@ -15,8 +15,8 @@
%% `hvfloat' offers rotating of captions and objects for floats
%%
\NeedsTeXFormat{LaTeX2e}
-\def\fileversion{2.18}
-\def\filedate{2021/03/12}
+\def\fileversion{2.19}
+\def\filedate{2021/03/15}
\message{`hvfloat' v\fileversion, \filedate\space (Herbert Voss)}
\ProvidesPackage{hvfloat}[\filedate\ rotating of floating objects]
\let\hvFloatFileVersion\fileversion
@@ -401,7 +401,7 @@
\else
\ifhv@doubleFULLPAGE
\setlength\hvCapWidth{\textheight}
- \do@hvFloat@doubleFULLPAGE% fullpage with caption rotated or under on an odd page
+ \expandafter\do@hvFloat@doubleFULLPAGE\@@temp% fullpage with caption rotated or under on an odd page
\else
\ifhv@doublePAGE
\expandafter\do@hvFloat@doublePAGE\@@temp% fullpage with caption rotated or under on an odd page
@@ -861,6 +861,7 @@
%
%
\def\do@hvFloat@doublePage#1{% image on left and right page with caption on the right ----------------------------------
+ % #1-> 0/1 caption under/right
\checkoddpage
\global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}%
\ifoddpage
@@ -892,8 +893,8 @@
\else
\afterpage{%
\afterpage{%
-% \newpage
- \noindent\null
+ \newpage
+% \noindent\null
\global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}%
\global\@tempdima=\dimexpr\paperwidth-1in-\evensidemargin\relax{}
\hspace*{\@tempdima}%
@@ -922,6 +923,7 @@
}
\def\do@hvFloat@doublePAGE#1{% image on left and right page with caption on the right ----------------------------------
+ % #1-> 0/1 caption under/right
\checkoddpage
\ifoddpage
\afterpage{%
@@ -958,7 +960,7 @@
\global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}%
\hspace*{\the\dimexpr-1in-\oddsidemargin-\parindent\relax}%
\clipbox*{\paperwidth{} -\depth{} \width{} \height{}}{\usebox\hvObjectBox}%
- \ifnum#1>0
+ \ifnum#1>0 % caption right and rotated
\medskip
\ifdim\dp\hvObjectBox > \z@
\rotatebox[origin=c]{90}{\parbox{\the\dimexpr\ht\hvObjectBox+\dp\hvObjectBox}{%
@@ -976,44 +978,69 @@
\endgroup
}
%
-\def\do@hvFloat@doubleFULLPAGE{% image on left and right page with caption on the right ----------------------------------
+\def\do@hvFloat@doubleFULLPAGE#1{% image on left and right page with caption on the right ----------------------------------
+ % #1-> 0/1 caption under/right
\checkoddpage
\global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}%
\ifoddpage
\afterpage{%
\global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}%
- \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep+0.5\paperheight-0.5\ht\hvObjectBox-\normalbaselineskip}%
+ \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep-\baselineskip}% +0.5\paperheight-0.5\ht\hvObjectBox
\hspace*{\the\dimexpr-\evensidemargin-\parindent-1in}%
- \thispagestyle{empty}%
+ \AtBeginShipoutNext{\thispagestyle{empty}}%
\clipbox*{0 0 \paperwidth{} \height}{\usebox\hvObjectBox}%
\newpage
- \thispagestyle{empty}%
- \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep-0.5\paperheight+0.5\ht\hvObjectBox-\normalbaselineskip}%
+ \AtBeginShipoutNext{\thispagestyle{empty}}%
+ \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep-\normalbaselineskip}% -0.5\paperheight+0.5\ht\hvObjectBox
\hspace*{\the\dimexpr-\oddsidemargin-\parindent-1in}%
\clipbox*{\paperwidth{} 0 \wd\hvObjectBox{} \paperheight{}}{\usebox\hvObjectBox}%
\savebox\hvCaptionBox{\parbox{0.9\ht\hvObjectBox}{%
\captionof*{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}}}%
- \put(-\ht\hvCaptionBox,0.5\ht\hvObjectBox){\makebox(0,0){\rotatebox{90}{\parbox{0.9\ht\hvObjectBox}{%
- \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}}}}}
+ \ifnum#1>0
+ \ifdim\dimexpr\ht\hvCaptionBox+\wd\hvObjectBox\relax < 2\paperwidth
+ \rotatebox{90}{\qquad\parbox{0.9\ht\hvObjectBox}{%
+ \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}}}%
+ \else
+ \put(-\ht\hvCaptionBox,0.5\ht\hvObjectBox){\makebox(0,0){\rotatebox{90}{\minipage{\textwidth}\centering
+ \parbox{0.8\textwidth}{%
+ \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}}\endminipage
+ }}}%
+ \fi
+ \else
+ \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}%
+ \fi
\newpage
}%
\else
\afterpage{%
\AddToHookNext{shipout/before}{%
+ \newpage
+ \AddToHook{begin/page}{\thispagestyle{empty}}
\global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}%
- \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep-0.75\paperheight+0.75\ht\hvObjectBox}%
+ \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep-\baselineskip}% +0.5\paperheight-0.5\ht\hvObjectBox
\hspace*{\the\dimexpr-\evensidemargin-\parindent-1in}%
- \thispagestyle{empty}%
+ \AtBeginShipoutNext{\thispagestyle{empty}}%
\clipbox*{0 0 \paperwidth{} \paperheight}{\usebox\hvObjectBox}%
\newpage
- \thispagestyle{empty}%
- \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep-0.5\paperheight+0.5\ht\hvObjectBox-\normalbaselineskip}%
+ \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep-\normalbaselineskip}% -0.5\paperheight+0.5\ht\hvObjectBox
\hspace*{\the\dimexpr-\oddsidemargin-\parindent-1in}%
\clipbox*{\paperwidth{} 0 \wd\hvObjectBox{} \paperheight{}}{\usebox\hvObjectBox}%
+ \AtBeginShipoutNext{\thispagestyle{empty}}%
\savebox\hvCaptionBox{\parbox{0.9\ht\hvObjectBox}{%
\captionof*{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}}}%
- \put(-\ht\hvCaptionBox,0.5\ht\hvObjectBox){\makebox(0,0){\rotatebox{90}{\parbox{0.9\ht\hvObjectBox}{%
- \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}}}}}
+ \ifnum#1>0
+ \ifdim\dimexpr\ht\hvCaptionBox+\wd\hvObjectBox\relax < 2\paperwidth
+ \rotatebox{90}{\minipage{\the\ht\hvObjectBox}\centering\parbox{0.75\textwidth}{%
+ \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}}%
+ \endminipage}%
+ \else% no space on the right, put it over the imag
+ \put(-\ht\hvCaptionBox,0.5\ht\hvObjectBox){\makebox(0,0){\rotatebox{90}{\minipage{\the\dimexpr\ht\hvObjectBox}%
+ \centering\parbox{0.8\textwidth}{%
+ \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}}\endminipage}}}%
+ \fi
+ \else
+ \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap\expandafter\label\expandafter{\hv@label}}%
+ \fi
\newpage
}%
}%
@@ -1047,7 +1074,7 @@
\else
\hspace*{\the\dimexpr-\oddsidemargin-\parindent-1in}%
\fi
- %\put(0,0){
+ %\put(0,0){%
\AtBeginShipoutNext{\thispagestyle{empty}}%
\usebox\hvObjectBox%}%
\else
diff --git a/macros/latex/contrib/lectureslides/README.md b/macros/latex/contrib/lectureslides/README.md
new file mode 100644
index 0000000000..e61eba13b7
--- /dev/null
+++ b/macros/latex/contrib/lectureslides/README.md
@@ -0,0 +1,26 @@
+# The `lectureslides` Package
+#### Version 0.1
+
+Taihao Zhang (t@taihao.de)
+15 March 2021
+
+This package allows for easily combining and indexing individual PDFs into one large PDF.
+
+This work is licensed under the Creative Commons Attribution 4.0 International License.
+To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/
+or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
+
+____
+
+Changes:
+
+* 2021-03-15 / 0.1
+ Initial release
+
+____
+
+This work consists of the files
+* README.md (this file)
+* lectureslides.sty
+* lectureslides-doc.tex
+* lectureslides-doc.pdf (derived from lectureslides-doc.tex)
diff --git a/macros/latex/contrib/lectureslides/lectureslides-doc.pdf b/macros/latex/contrib/lectureslides/lectureslides-doc.pdf
new file mode 100644
index 0000000000..ccc7d4e35b
--- /dev/null
+++ b/macros/latex/contrib/lectureslides/lectureslides-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/lectureslides/lectureslides-doc.tex b/macros/latex/contrib/lectureslides/lectureslides-doc.tex
new file mode 100644
index 0000000000..df1bc17d1d
--- /dev/null
+++ b/macros/latex/contrib/lectureslides/lectureslides-doc.tex
@@ -0,0 +1,92 @@
+\PassOptionsToClass{a4paper, 12pt}{article}
+\documentclass{ltxdoc}
+\usepackage[british]{babel}
+\usepackage[babel]{microtype}
+\newcommand{\thispackage}{lectureslides}
+\title{The \texttt{\thispackage} Package\footnote{This document corresponds to \texttt{lectureslides} version 0.1 / 2021-03-15.}}
+\author{Taihao Zhang\thanks{Technische Universität Darmstadt, t@taihao.de}}
+\date{15 March 2021}
+\begin{document}
+\maketitle
+
+% \section{Motivation}
+ When studying, there frequently occurs the situation where one uses \texttt{Ctrl\,+\,F} many times to search for a keyword in all the lecture slides. Throughout an entire semester, there can be a large number of PDFs that would need to be searched.
+ \par
+ This package allows for easily combining individual PDFs into a large one, indexing each with a title that PDF viewers can display. \verb+lectureslides+ also provides a table of contents.
+
+\section{Usage}
+In general, usage of \texttt{\thispackage} works as follows:
+\begin{verbatim}
+ \documentclass{article}
+ \usepackage{lectureslides}
+ \begin{document}
+ \course{Engineering Mechanics}
+ \tableofcontents
+
+ \lecture{Introduction to EM}{intro}
+ \lecture{Centre of gravity}{centre}
+ \end{document}
+\end{verbatim}
+
+ \begin{macro}{\course}
+ Acts as the title on the cover page, used in the form \newline
+ \verb+\course[]{Engineering Mechanics}+. The optional argument specifies the person compiling the document, which will be typeset as a footnote alongside the current date. For instructions on changing that footnote, see \verb+\createdby+.
+ \end{macro}
+
+ \begin{macro}{\lecture}
+ Inserts one set of lecture slides. This command takes two mandatory arguments in the following form:
+ \begin{verbatim}
+ \lecture{Title of this lecture}{pdf_file_name}
+ \end{verbatim}
+ An optional argument can specify the last slide that needs to be included. For example, to include slides 1~--10 of \verb+intro.pdf+:
+ \begin{verbatim}
+ \lecture{Introduction to EM}[10]{intro}
+ \end{verbatim}
+ Internally, this command calls \verb+\lecturetitle+ and \verb+\lectureslides+.
+ \end{macro}
+
+ \begin{macro}{\tableofcontents}
+ Prints a table of contents of all lectures. Each \verb+\lecture+ and \verb+\lecturetitle+ gets its own entry here. \verb+\tocline+ customises the appearance.
+ \end{macro}
+
+\section{Option}
+ \DescribeMacro{landscape}
+ \DescribeMacro{portrait}
+ \verb+landscape+ is the default orientation if no option is passed, as lecture slides are most often given out in this format. \verb+portrait+ can be used instead to insert slides in portrait orientation.
+
+\section{Advanced}
+ \begin{macro}{\lecturetitle}
+ Declares a new set of slides, but doesn't insert any PDF pages yet. When followed by \verb+\lectureslides+, an actual entry in the table of contents gets created.
+ \begin{verbatim}
+ \lecturetitle{Title of this lecture}
+ \end{verbatim}
+ \end{macro}
+
+ \begin{macro}{\lectureslides}
+ Inserts a set of slides from a given PDF. Optional argument specifies the last slide to be included.
+ \begin{verbatim}
+ \lectureslides[10]{pdf_file_name}
+ \end{verbatim}
+ Multiple \verb+\lectureslides+ can be stringed together to include slides from different PDFs which are all organised under the same \verb+\lecturetitle+.
+ \end{macro}
+
+ \begin{macro}{\createdby}
+ Determines the sentence in the footnote, which is initiated by the optional argument of \verb+\course+. Putting the following in the preamble redefines the sentence, to fit the desired language for example.
+ \begin{verbatim}
+ \renewcommand{\createdby}[1]{%
+ Created by #1 on \today.%
+ }
+ \end{verbatim}
+ \verb+\renewcommand{\createdby}{Created in March 2021.}+ for example gets rid of the name entirely. Note that some kind of non-empty argument is still needed in \verb+\course[]{}+ so the footnote gets printed at all.
+ \end{macro}
+
+ \begin{macro}{\tocline}
+ Determines how the lecture title appears in the ToC. Putting the following in the preambled redefines this, for example:
+ \begin{verbatim}
+ \renewcommand{\tocline}[1]{%
+ Semana \arabic{section}: #1%
+ }
+ \end{verbatim}
+ Alternatively, \verb+\renewcommand{\tocline}[1]{#1}+ omits the numbering, putting only the title in the ToC.
+ \end{macro}
+\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/lectureslides/lectureslides.sty b/macros/latex/contrib/lectureslides/lectureslides.sty
new file mode 100644
index 0000000000..8c9cfc4899
--- /dev/null
+++ b/macros/latex/contrib/lectureslides/lectureslides.sty
@@ -0,0 +1,74 @@
+%
+% lectureslides
+% version 0.1
+% 2021/03/15
+%
+% Taihao Zhang (taihao.de)
+% 15 March, 2021
+%
+% This work is licensed under the Creative Commons Attribution 4.0 International License.
+% To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/
+% or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
+%
+% For contribution or suggestions, please contact me at t@taihao.de
+%
+
+\newcommand{\thispackage}{lectureslides}
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{\thispackage}[2021/03/14 \thispackage]
+
+\RequirePackage{xparse}
+\RequirePackage{pdfpages
+ % , parskip
+ , tocloft
+ % , tikz
+ , hyperref}
+\renewcommand{\cftdot}{}
+\renewcommand{\cftsecfont}{\mdseries}
+\renewcommand{\cftsecafterpnum}{\vspace{-3.25mm}}
+
+% Not really a variable meant to be changed, leaving it in for now
+\newcommand*{\toclevel}{section}
+
+\newcommand{\orientation}{, landscape}
+\DeclareOption{portrait}{\renewcommand{\orientation}{}}
+\DeclareOption{landscape}{\renewcommand{\orientation}{, landscape}}
+\DeclareOption*{\PackageWarning{\thispackage}{Unknown option ‘\CurrentOption’}}
+\ProcessOptions\relax
+
+\newcommand{\createdby}[1]{Zusammengestellt von #1 am \today.}
+
+\NewDocumentCommand{\course}{o m}{%
+ {%
+ \noindent\LARGE\bfseries\sffamily #2%
+ \IfNoValueTF{#1}%
+ {}%
+ {\footnote{\createdby{#1}}}%
+ \par%
+ }%
+}
+
+\newcommand{\tocline}[1]{\arabic{\toclevel}.~#1}
+
+\newcommand*{\lecturetitle}[1]{%
+ \addtocounter{\toclevel}{1}%
+ \newpage\phantomsection%
+ \addcontentsline{toc}{\toclevel}{\tocline{#1}}%
+}
+
+\NewDocumentCommand{\lectureslides}{o m}{%
+ \IfNoValueTF{#1}%
+ {\includepdf[pages=- \orientation]{#2}}%
+ {\includepdf[pages=-#1 \orientation]{#2}}%
+}
+
+\NewDocumentCommand{\lecture}{m o m}{%
+ \lecturetitle{#1}\lectureslides[#2]{#3}%
+}
+
+\newcommand{\infotext}{%
+Diese PDF mit Inhaltsverzeichnis und PDF-Kapiteln wurde erstellt, um ein einfacheres Lernen zu ermöglichen indem alle Folien übersichtlich an einem Ort organisiert sind.%
+\par%
+In geeigneten PDF-Readern wird ein Navigationsbereich angezeigt, sodass einfach zwischen den Kapiteln gewechselt werden kann. Alternativ sind die Überschriften im Inhaltsverzeichnis auch anklickbar.%
+}
diff --git a/macros/latex/contrib/microtype/README.md b/macros/latex/contrib/microtype/README.md
index 446ef0cbf9..80aaec1811 100644
--- a/macros/latex/contrib/microtype/README.md
+++ b/macros/latex/contrib/microtype/README.md
@@ -4,7 +4,7 @@ The `microtype` package
**Subliminal refinements towards typographical perfection**
- (v2.8b -- 2021/02/25)
+ (v2.8c -- 2021/03/14)
Overview
diff --git a/macros/latex/contrib/microtype/microtype-utf.dtx b/macros/latex/contrib/microtype/microtype-utf.dtx
index 1f64521c5b..c553e53e2d 100644
--- a/macros/latex/contrib/microtype/microtype-utf.dtx
+++ b/macros/latex/contrib/microtype/microtype-utf.dtx
@@ -26,7 +26,7 @@
%
\ProvidesFile
%<*driver>
- {\jobname.dtx}[2021/02/25 v2.8b]
+ {\jobname.dtx}[2021/03/14 v2.8c]
%</driver>
%<CharisSIL> {mt-CharisSIL.cfg}[2017/07/07 v1.1 microtype config. file: Charis SIL (RS)]
%<LatinModernRoman> {mt-LatinModernRoman.cfg}[2021/02/21 v1.1 microtype config. file: Latin Modern Roman (RS)]
diff --git a/macros/latex/contrib/microtype/microtype.dtx b/macros/latex/contrib/microtype/microtype.dtx
index a4a4564947..088b55ea1f 100644
--- a/macros/latex/contrib/microtype/microtype.dtx
+++ b/macros/latex/contrib/microtype/microtype.dtx
@@ -1,7 +1,7 @@
%\iffalse meta-comment
% !Mode:: "TeX:DTX:UK"
% !smartQuote:: "English"
-% !DTXversion:: "2.8b"
+% !DTXversion:: "2.8c"
% ------------------------------------------------------------------------
% The `microtype' package
% Subliminal refinements towards typographical perfection
@@ -37,7 +37,7 @@
%<luatex-def> {microtype-luatex.def}
%<xetex-def> {microtype-xetex.def}
%<*package|letterspace|m-t|pdftex-def|luatex-def|xetex-def>
- [2021/02/25 v2.8b
+ [2021/03/14 v2.8c
%<package> Micro-typographical refinements
%<letterspace> Robust letterspacing
%<m-t> microtype main configuration file
@@ -51,8 +51,8 @@
%<luafile>local microtype = microtype
%<luafile>microtype.module = {
%<luafile> name = "microtype",
-%<luafile> version = "2.8b",
-%<luafile> date = "2021/02/25",
+%<luafile> version = "2.8c",
+%<luafile> date = "2021/03/14",
%<luafile> description = "microtype module.",
%<luafile> author = "E. Roux, R. Schlicht and P. Gesang",
%<luafile> copyright = "E. Roux, R. Schlicht and P. Gesang",
@@ -3052,7 +3052,9 @@
%
%\VersionDate{\expandafter\@gobble\fileversion}{\filedate}
%
-%\VersionDate{2.8a}{2020/02/22}
+%\VersionDate{2.8b}{2021/02/25}
+%
+%\VersionDate{2.8a}{2021/02/22}
%
%\Version{2.8}{2020/12/07}
% \item New default font sets for expansion and spacing: `|alltext-nott|'
@@ -3380,8 +3382,8 @@
% \write,\xdef}
%^^A\DoNotIndex{\font,\fontdimen,\nullfont,\sfcode,\spacefactor,\spaceskip,
%^^A \xspaceskip} ^^A tex
-%\DoNotIndex{\currentgrouplevel,\currentgrouptype,\detokenize,\dimexpr,
-% \eTeXversion,\ifcsname,\ifdefined,\numexpr}
+%\DoNotIndex{\currentgrouplevel,\currentgrouptype,\currentiflevel,\detokenize,
+% \dimexpr,\eTeXversion,\ifcsname,\ifdefined,\numexpr}
%^^A\DoNotIndex{\fontcharwd,\iffontchar} ^^A e-tex
%\DoNotIndex{\pdfannot,\pdfescapestring,\pdfmatch,\pdfoutput,\pdfstrcmp,
% \pdftexrevision,\pdftexversion}
@@ -3392,7 +3394,7 @@
%\DoNotIndex{\XeTeXversion,\XeTeXrevision,\strcmp} ^^A xetex
%^^A\DoNotIndex{\XeTeXcharglyph,\XeTeXfonttype,\XeTeXglyph,\XeTeXglyphindex,
%^^A \XeTeXglyphname,\XeTeXlastfontchar,\XeTeXprotrudechars}
-%\DoNotIndex{\directlua,\luatexversion} ^^A luatex
+%\DoNotIndex{\directlua,\glet,\luatexversion} ^^A luatex
%^^A\DoNotIndex{\adjustspacing,\copyfont,\expandglyphsinfont,
%^^A \ignoreligaturesinfont,\outputmode,\protrudechars,\tracingfonts}
%\DoNotIndex{\eplain,\usepkg@pkg} ^^A eplain
@@ -3409,7 +3411,7 @@
% \on@line,\p@,\set@display@protect,\strip@prefix,\strip@pt,\tw@,\z@,\z@skip,
% \zap@space,\active,\documentclass,\fmtversion,\leavevmode,\makeatletter,
% \mbox,\newcommand,\newcount,\newdimen,\newif,\newskip,\newtoks,\nobreak,
-% \nonfrenchspacing,\normalsize,\renewcommand,\space,\AtBeginDocument,
+% \nonfrenchspacing,\normalsize,\renewcommand,\space,\AddToHook,\AtBeginDocument,
% \AtEndOfPackage,\CheckCommand,\CurrentOption,\DeclareRobustCommand,\IfFileExists,
% \InputIfFileExists,\MessageBreak,\PackageError,\PackageInfo,\PackageWarning,
% \RequirePackage,\@@enc@update,\cf@encoding,\f@encoding}
@@ -5224,7 +5226,7 @@ microtype.do_font = do_font
% ^^A private mail, 2012/06/30
% They are also part of recent \xetex.
%\changes{v2.5a}{2013/03/25}{support for \pkg{eledmac}}
-%\changes{v2.6}{2015/08/10}{support for \pkg{reledmac}}
+%\changes{v2.6}{2015/08/10}{support for \pkg{reledmac}}^^A
% The successor packages \pkg{eledmac} and \pkg{reledmac} are also supported.
% \begin{macrocode}
%</package>
@@ -5287,17 +5289,24 @@ microtype.do_font = do_font
\def\MT@restore@p@h{\chardef\%`\% \chardef\#`\# }
% \end{macrocode}
%\end{macro}
-%\begin{macro}{\ifMT@xunicode}
%\begin{macro}{\ifMT@fontspec}
+%\begin{macro}{\ifMT@xunicode}
% Two new conditionals for use with \xetex\ or \luatex.
% \begin{macrocode}
-\newif\ifMT@xunicode
-\MT@with@package@T{xunicode}\MT@xunicodetrue
\newif\ifMT@fontspec
\MT@with@package@T{fontspec}\MT@fontspectrue
+\newif\ifMT@xunicode
+\MT@with@package@T{xunicode}\MT@xunicodetrue
% \end{macrocode}
%\end{macro}
+%\changes{v2.8c}{2021/03/12}{add to hook for \pkg{fontspec}}
%\end{macro}
+% We need the correct value of the former for configuration commands
+% inside the preamble (to get the default families right).
+% \begin{macrocode}
+\@ifl@t@r\fmtversion{2020/10/01}
+ {\AddToHook{package/after/fontspec}{\MT@fontspectrue}}\relax
+% \end{macrocode}
%\begin{macro}{\MT@maybe@gobble@with@tikz}
%\begin{macro}{\MT@tikz@setup}
%\changes{v2.3e}{2009/11/02}{compatibility with \pkg{tikz} (first reported by
@@ -9045,13 +9054,19 @@ end
\def\MT@is@symbol{%
\expandafter\def\expandafter\MT@char\expandafter
{\csname\MT@encoding\MT@detokenize@c\@tempa\endcsname}%
+% \end{macrocode}
+% Since recently, some glyphs are defined optionally in \LaTeX\
+% by checking if the glyph actually exists in the font (\eg, \cmd\textasteriskcentered).
+% \begin{macrocode}
+ \expandafter\expandafter\expandafter
+ \MT@is@opt@char\MT@char\iffontchar\char\else\fi\relax
\expandafter\MT@exp@two@c\expandafter\MT@is@char\expandafter
- \meaning\expandafter\MT@char\MT@charstring\relax\relax\relax
+ \meaning\expandafter\MT@char\MT@charstring\relax\relax\relax
\ifnum\MT@char@ < \z@
% \end{macrocode}
%\changes{v2.7c}{2019/08/13}{take care of \cs{remove@tlig}}
-% For <TU> encoding, the commands \cmd\textquotesingle, \cmd\textasciigrave\
-% and \cmd\textquotedbl\ are defined by means of the auxiliary macro
+% In <TU> encoding, some commands (currently, \cmd\textquotesingle, \cmd\textasciigrave\
+% and \cmd\textquotedbl) are defined by means of the auxiliary macro
% \cmd\remove@tlig, which we take care of here.
% \begin{macrocode}
\expandafter\expandafter\expandafter\MT@is@tlig\MT@char\relax\relax
@@ -9068,6 +9083,24 @@ end
}
% \end{macrocode}
%\end{macro}
+%\begin{macro}{\MT@is@opt@char}
+% This seems adventurous, but we're only redefining the text command within
+% the scope of our setup.
+%\changes{v2.8c}{2021/03/05}{fix for optionally defined glyphs
+% (reported by \contributor Frank Mittelbach <frank.mittelbach\at latex-project.org>)}
+% ^^A private mail, 2021/03/02
+% ^^A also: https://github.com/latex3/latex2e/issues/525
+% \begin{macrocode}
+\def\MT@is@opt@char#1\iffontchar#2\char#3\else#4\fi\relax{%
+ \ifx\\#1\\%
+ \iffontchar#2%
+ \expandafter\chardef
+ \csname\MT@encoding\MT@detokenize@c\@tempa\endcsname=#3\relax
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
%\begin{macro}{\MT@is@char}
%\begin{macro}{\MT@charstring}
% A helper macro that inspects the \cmd\meaning\ of its argument.
@@ -9144,14 +9177,26 @@ end
% This might have to change again with the next \LaTeX\ release, ^^A see https://github.com/latex3/latex2e/issues/165
% \dots\ or so I feared, but it still seems to be fine.
% \begin{macrocode}
-\def\MT@is@tlig#1#2{%
- \ifx#1\remove@tlig
+\def\MT@is@tlig#1#2\relax{%
+ \ifx\remove@tlig#1%
%<debug> \MT@dinfo@nl{3}{> `\the\MT@toks' (removing remove@tlig)}%
- \MT@is@number #2\relax\relax
+ \MT@remove@tlig
\fi
}
% \end{macrocode}
%\end{macro}
+%\begin{macro}{\MT@remove@tlig}
+% We remove the \cs{remove@tlig} command and only pass on the number.
+%\changes{v2.8c}{2020/03/04}{fix for text commands containing conditionals
+% (reported by \contributor Frank Mittelbach <frank.mittelbach\at latex-project.org>)}
+% ^^A private mail, 2021/03/02
+% \begin{macrocode}
+\def\MT@remove@tlig{%
+ \expandafter\MT@exp@two@c\expandafter\MT@is@number
+ \expandafter\@secondoftwo\MT@char\relax\relax
+}
+% \end{macrocode}
+%\end{macro}
%\begin{macro}{\MT@is@composite}
% Here, we are dealing with accented characters, specified as two tokens.
%\changes{v1.7}{2005/03/10}{new macro: construct command for composite character;
@@ -9205,7 +9250,7 @@ end
% Helper for \cs{DeclareUnicodeComposite}.
% \begin{macrocode}
\def\MT@is@uni@comp#1\iffontchar#2\else#3\fi\relax{%
- \ifx\\#2\\\else\edef\MT@char{\iffontchar#2\fi}\fi
+ \ifx\\#1\\\edef\MT@char{\iffontchar#2\fi}\fi
}
% \end{macrocode}
%\end{macro}
@@ -10162,10 +10207,10 @@ end
^^X \def\MT@get@size@{%
^^X \@tempcnta=\currentiflevel
^^X \MT@get@size@@
-^^X \loop
+^^X \MT@loop
^^X \ifnum\numexpr\currentiflevel-1>\@tempcnta
^^X \csname fi\endcsname
-^^X \repeat
+^^X \MT@repeat
^^X }%
^^X}{%
\let\MT@get@size@\MT@get@size@@
@@ -17363,7 +17408,7 @@ normal, and shrunk by 5\%:
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
%
-% \CheckSum{10800}
+% \CheckSum{10847}
%
% \Finale
%
diff --git a/macros/latex/contrib/microtype/microtype.pdf b/macros/latex/contrib/microtype/microtype.pdf
index 041531c8aa..f88c167627 100644
--- a/macros/latex/contrib/microtype/microtype.pdf
+++ b/macros/latex/contrib/microtype/microtype.pdf
Binary files differ
diff --git a/macros/latex/contrib/minimalist/LICENSE b/macros/latex/contrib/minimalist/LICENSE
new file mode 100644
index 0000000000..2244313901
--- /dev/null
+++ b/macros/latex/contrib/minimalist/LICENSE
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/macros/latex/contrib/minimalist/README.md b/macros/latex/contrib/minimalist/README.md
new file mode 100644
index 0000000000..084e34972f
--- /dev/null
+++ b/macros/latex/contrib/minimalist/README.md
@@ -0,0 +1,29 @@
+<!-- Copyright (C) 2021 by Jinwen XU -->
+
+# `minimalist` bundle: write you documents in a simple and clear way
+
+This is collection of styles and classes for typesetting articles and books in a
+simple and clear design. It mainly consists of two parts.
+
+- Main part:
+ - minimalist.sty : the main style
+ - minimart.cls : class for typesetting articles
+ - minimbook.cls : class for typesetting books
+
+ They can be used with any LaTeX engine. Currently they have native support
+ to English and French typesetting. (I have planed to add more language
+ support)
+
+
+- Derivative part (they have separate pages on CTAN):
+ - einfart.cls : more advanced class for typesetting articles
+ - simplivre.cls : more advanced class for typesetting books
+
+ They are similar to the main classes, but have unicode support, thus can
+ only be used with either XeLaTeX or LuaLaTeX. Currently they have native
+ support to English, French and Chinese typesetting, and also use more
+ beautiful fonts. (I have planed to add more language support)
+
+# License
+
+This work is released under the LaTeX Project Public License, v1.3c or later.
diff --git a/macros/latex/contrib/minimalist/minimalist-doc.pdf b/macros/latex/contrib/minimalist/minimalist-doc.pdf
new file mode 100644
index 0000000000..ac42223ffa
--- /dev/null
+++ b/macros/latex/contrib/minimalist/minimalist-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/minimalist/minimalist-doc.tex b/macros/latex/contrib/minimalist/minimalist-doc.tex
new file mode 100644
index 0000000000..c6c5cf1b2f
--- /dev/null
+++ b/macros/latex/contrib/minimalist/minimalist-doc.tex
@@ -0,0 +1,210 @@
+%! TEX program = xelatex
+\PassOptionsToPackage{dvipsnames}{xcolor}
+\documentclass{minimart}
+
+\linenumbers % Enable line numbers
+
+%%================================
+%% TeX logo and URL
+%%================================
+\usepackage{hologo}
+\usepackage{url}
+
+%%================================
+%% For typestting code
+%%================================
+\usepackage{listings}
+\definecolor{lightergray}{gray}{0.99}
+\lstset{language=[LaTeX]TeX,
+ keywordstyle=\color{RoyalBlue},
+ basicstyle=\ttfamily,
+ commentstyle=\color{ForestGreen}\ttfamily,
+ stringstyle=\rmfamily,
+ showstringspaces=false,
+ breaklines=true,
+ frame=lines,
+ backgroundcolor=\color{lightergray},
+ flexiblecolumns=true,
+ escapeinside={(*}{*)},
+ % numbers=left,
+ numberstyle=\scriptsize, stepnumber=1, numbersep=5pt,
+ firstnumber=last,
+}
+\providecommand{\meta}[1]{$\langle${\normalfont\itshape#1}$\rangle$}
+\lstset{morekeywords=%
+ {CreateTheorem,proofideanameEN,cref,dnf,needgraph,UseLanguage,
+ linenumbers,nolinenumbers,subsection,maketitle
+ }
+}
+\lstnewenvironment{code}%
+{\LocallyStopLineNumbers%
+\setkeys{lst}{columns=fullflexible,keepspaces=true}%
+}
+{\ResumeLineNumbers}
+
+\providecommand{\minimalist}{\textsf{minimalist}}
+\providecommand{\minimart}{\textsf{minimart}}
+\providecommand{\minimbook}{\textsf{minimbook}}
+\providecommand{\einfart}{\textsf{einfart}}
+\providecommand{\simplivre}{\textsf{simplivre}}
+
+%%================================
+%% Main text
+%%================================
+\begin{document}
+
+\title{\minimalist{}, write your articles or books in a simple and clear way\thanks{Corresponding to: \texttt{\minimalist{} 2021/03/15}}}
+\author{Jinwen}
+\date{March 2021, Beijing}
+
+\maketitle
+
+\begin{abstract}
+ \minimalist{} is series of styles and classes for you to typeset your articles or books in a simple and clear manner. My original intention in designing this series was to write drafts and notes that look simple but not shabby.
+
+ The entire collection includes \verb|minimalist.sty|, which is the main style shared by all the following classes; \verb|minimart.cls| for typesetting articles and \verb|minimbook.cls| for typesetting books. They can be used with all LaTeX engines, with native support to English and French typesetting via \lstinline|\UseLanguage|, see the instruction below for detail.
+
+ You can also found \einfart{} and \simplivre{} on CTAN. They are the enhanced version of \minimart{} and \minimbook{} with unicode support. With this, they can access to more beautiful fonts, and also have native support for Chinese typesetting. On the other hand, they need to be compiled with \hologo{XeLaTeX} or \hologo{LuaLaTeX} (not pdf\LaTeX).
+
+ This documentation is typeset using \minimart{}. You can think of it as a short introduction and demonstration.
+\end{abstract}
+
+\tableofcontents
+
+\section{How to load it}
+You can directly use \minimart{} or \minimbook{} as your document class. In this way, you can directly begin writing your document, without having to worry about the configurations.
+
+\begin{code}
+ \documentclass{minimart} (*{\normalfont or}*) \documentclass{minimbook}
+\end{code}
+
+And of course, you can also use the default classes \textsf{article} or \textsf{book}, and load the \minimalist{} package. This way, only the basic styles are set, and you can thus use your preferred fonts and page layout. All the features mentioned in this article (except for draft marks) are provided.
+\begin{code}
+ \usepackage{minimalist}
+\end{code}
+
+\subsection{A useful switch: the option \textsf{fast} or \textsf{draft}}
+You can use the option \verb|fast| or \verb|draft| to typeset in a fast but slightly rough manner. The main differences are:
+\begin{itemize}
+ \item Do not use hyperref;
+ \item Do not use tikz (and thus tcolorbox);
+\end{itemize}
+
+During the writing stage of your document, it is recommended to use the \verb|fast| option to speed up compilation and improve the smoothness of your writing experience. At the end, you can remove the ``fast'' mark to get the final version.
+
+\section{Some instructions}
+
+There is no indentation at the beginning of each paragraph, but there will be a half-line space between each two paragraphs. like this ---
+
+Here is the next paragraph.
+
+\subsection{Theorems and how to reference them}
+
+Environments such as definitions and theorems have been pre-defined and can be used directly, for example:
+\begin{code}
+ \begin{definition}[Strange things] \label{def: strange} ...
+\end{code}
+will produce
+\begin{definition}[Strange things]\label{def: strange}
+ This is the definition of some strange objects.
+\end{definition}
+
+There is approximately an one-line space before and after the theorem environment. There will be a symbol to mark the end of the environment.
+
+When referencing, you can directly use clever reference \lstinline|\cref{(label name)}|. For example, \lstinline|\cref{def: strange}| will be displayed as: \cref{def: strange}.
+
+\subsection{Define a new theorem-like environment}
+
+First define the name of this environment in the language used: \lstinline|\(name of environment)(language name)|. Where \lstinline|(language name)| can be \lstinline|EN|, \lstinline|FR|, \lstinline|CN|, etc., and then define this environment in one of the following four ways:
+\begin{itemize}
+ \item \lstinline|\CreateTheorem*{(name of environment)}|
+ \item \lstinline|\CreateTheorem{(name of environment)}[(numbered like)]|
+ \item \lstinline|\CreateTheorem{(name of environment)}<(numbered within)>|
+ \item \lstinline|\CreateTheorem{(name of environment)}|
+\end{itemize}
+
+\def\proofideanameEN{Idea}
+\CreateTheorem*{proofidea}
+
+For example,
+\begin{code}
+ \def\proofideanameEN{Idea}
+ \CreateTheorem*{proofidea}
+\end{code}
+defines an unnumbered environment \lstinline|proofidea|, which supports using in the English context, and the effect is as follows:
+
+\begin{proofidea}
+ ...
+\end{proofidea}
+
+\subsection{Draft mark}
+
+You can use \lstinline|\dnf| to mark the unfinished part (this is a feature provide by the classes, not the \minimalist{} package). For example:
+\begin{itemize}
+ \item \lstinline|\dnf|: \quad \dnf
+ \item \lstinline|\dnf<Still need ...>|: \quad \dnf<Still need ...>
+\end{itemize}
+
+Similarly, there is \lstinline|\needgraph|:
+\begin{itemize}
+ \item \lstinline|\needgraph|: \needgraph
+ \item \lstinline|\needgraph<About ...>|: \needgraph<About ...>
+\end{itemize}
+
+\subsection{Language configuration}
+You can use \lstinline|\UseLanguage{(name of language))}| at any time to change the language, Language names include Chinese, English, French (the case of the first letter is arbitrary, for example, ``chinese'' is also acceptable). With this, the effects of various commands and environments will also change accordingly.
+
+For example, after using \lstinline|\UseLanguage{French}|, the theorem and the draft mark will be displayed as:
+
+\UseLanguage{French}
+\begin{theorem}[Inutile]\label{thm}
+ Un théorème en français. \dnf
+\end{theorem}
+
+When referenced, the name of the theorem always matches the language of the region in which the theorem is located, for example, the definition of the beginning is still displayed in English in the current French mode: \cref{def: strange} and \cref{thm}.
+
+\UseLanguage{English}
+
+\subsection{On the line numbers}
+Line numbers can be turned on and off at any time. \lstinline|\linenumbers| is used to enable the line numbers, and \lstinline|\nolinenumbers| is used to disable them. For the sake of beauty, the title, table of contents, index and some other elements are not numbered.
+
+\subsection{On the footnotes in the title}
+In \lstinline|\section| or \lstinline|\subsection| , if you wish to add footnotes, you can only:
+\begin{itemize}
+ \item first write \lstinline|\mbox{\protect\footnotemark}|,
+ \item then add \lstinline|\footnotetext{...}| afterwards.
+\end{itemize}
+This is a disadvantage brought about by the underline decoration of the title.
+
+\section{Document templates}
+
+\singlespacing
+
+\LocallyStopLineNumbers
+\begin{minipage}{0.45\textwidth}
+\begin{code}
+\documentclass[fast]{minimart}
+
+\linenumbers
+\UseLanguage{French}
+
+\begin{document}
+
+\title{Titre}
+\author{Nom}
+\date{03 / 2021, Lieu}
+
+\maketitle
+
+%% Texte ici
+
+\end{document}
+\end{code}
+\end{minipage}
+\par
+\ResumeLineNumbers
+
+\bigskip
+(\lstinline|\UseLanguage| can be placed either in the preamble or in the body part, and can be used repeatedly as needed)
+
+\end{document}
diff --git a/macros/latex/contrib/minimalist/minimalist.sty b/macros/latex/contrib/minimalist/minimalist.sty
new file mode 100644
index 0000000000..2648a34701
--- /dev/null
+++ b/macros/latex/contrib/minimalist/minimalist.sty
@@ -0,0 +1,653 @@
+%%
+%% This is file `minimalist/minimalist.sty',
+%% generated with the docstrip utility.
+
+%% Copyright (C) 2021 by Jinwen XU
+%%
+%% This is part of the minimalist class series.
+%%
+%% This work may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License, either version 1.3c of this license or (at
+%% your option) any later version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of LaTeX version
+%% 2005/12/01 or later.
+%%
+\NeedsTeXFormat{LaTeX2e}[2020-10-01]
+\ProvidesPackage{minimalist}
+ [2021/03/15 A simple and clear style for articles and books]
+\RequirePackage{etoolbox}
+\RequirePackage{kvoptions}
+\SetupKeyvalOptions{%
+ family = @minimalist,
+ prefix = @minimalist@
+}
+\DeclareBoolOption[false]{draft}
+\DeclareBoolOption[false]{fast}
+\DeclareBoolOption[false]{polyglossia}
+\ProcessKeyvalOptions*\relax
+
+\if@minimalist@draft
+ \@minimalist@fasttrue
+\fi
+
+\newif\ifIsBook
+\ifdefined\chapter\IsBooktrue\else\IsBookfalse\fi
+
+%%================================
+%% Title fonts
+%%================================
+\RequirePackage{anyfontsize}
+\newcommand{\partfont}{\sffamily}
+\newcommand{\chapfont}{\sffamily}
+\newcommand{\secfont}{}
+\newcommand{\subsecfont}{}
+\newcommand{\subsubsecfont}{}
+
+%%================================
+%% Color
+%%================================
+\RequirePackage{xcolor}
+\definecolor{paper}{RGB}{255,255,255}
+
+%%================================
+%% Footer
+%%================================
+\RequirePackage{geometry}
+\RequirePackage{fancyhdr}
+\RequirePackage{extramarks}
+\fancypagestyle{fancy}{
+ \fancyhf{}
+ \if@twoside
+ \fancyfoot[RO]{\small\textcolor{black!30!paper}{\lastrightmark}%
+ ~~\rlap{\textcolor{gray!55!paper}{$|$}~~\thepage}}
+ \fancyfoot[LE]{\small\leavevmode\llap{\thepage%
+ ~~\textcolor{gray!55!paper}{$|$}}%
+ ~~\textcolor{black!30!paper}{\lastleftmark}}
+ \else
+ \fancyfoot[R]{\small\textcolor{black!30!paper}{\lastrightmark}%
+ ~~\rlap{\textcolor{gray!55!paper}{$|$}~~\thepage}}
+ \fi
+ \renewcommand{\headrulewidth}{0pt}
+}
+\pagestyle{fancy}
+\fancypagestyle{plain}{
+ \fancyhf{}
+ \if@twoside
+ \fancyfoot[RO]{\small%
+ ~\rlap{\textcolor{gray!55!paper}{$|$}~~\thepage}}
+ \fancyfoot[LE]{\small\leavevmode\llap{\thepage%
+ ~~\textcolor{gray!55!paper}{$|$}}}
+ \else
+ \fancyfoot[R]{\small%
+ ~\rlap{\textcolor{gray!55!paper}{$|$}~~\thepage}}
+ \fi
+ \renewcommand{\headrulewidth}{0pt}
+}
+\ifbool{IsBook}{
+ \if@minimalist@fast
+ \newcommand{\drawHelpLine}{}
+ \else
+ \RequirePackage{tikz}
+ \usetikzlibrary{calc,shadings}
+ \RequirePackage{tikzpagenodes}% For `current page text area`
+ \newcommand{\drawHelpLine}{%
+ \begin{tikzpicture}[remember picture,overlay]
+ \foreach\i in {0,1,...,5}{%
+ \fill[opacity=0.12-0.02*\i]
+ ($(current page text area.north east)
+ +(-\i*0.5em-.025em,-10pt+\i*1.1pt)$)
+ rectangle ($(current page text area.south east)
+ +(-\i*0.5em+.025em,10pt-\i*1.1pt)$);
+ \shade[top color=paper,bottom color=black,opacity=0.12-0.02*\i]
+ ($(current page text area.north east)
+ +(-\i*0.5em-.025em,2pt)$)
+ rectangle ($(current page text area.north east)
+ +(-\i*0.5em+.025em,-10pt+\i*1.1pt)$);
+ \shade[top color=black,bottom color=paper,opacity=0.12-0.02*\i]
+ ($(current page text area.south east)
+ +(-\i*0.5em-.025em,-2pt)$)
+ rectangle ($(current page text area.south east)
+ +(-\i*0.5em+.025em,10pt-\i*1.1pt)$);
+ }
+ \end{tikzpicture}%
+ }
+ \fi
+ \fancypagestyle{part}{
+ \fancyhf{}
+ \renewcommand{\headrulewidth}{0pt}
+ \fancyhead[C]{\drawHelpLine}
+ }
+ \addtolength{\headheight}{20pt}
+ \addtolength{\topmargin}{-20pt}
+ \if@twoside
+ \renewcommand{\chaptermark}[1]{\markboth{\textsc{#1}}{}}
+ \else
+ \renewcommand{\chaptermark}[1]{\markboth{\textsc{#1}}{\textsc{#1}}}
+ \fi
+ \renewcommand*{\sectionmark}[1]{%
+ \markright{\raisebox{.03em}{\footnotesize/}%
+ ~\thesection~\raisebox{.03em}{\footnotesize/}~~~#1}}
+}{
+ \if@twoside
+ \renewcommand*{\sectionmark}[1]{\markboth{\textsc{#1}}{}}
+ \else
+ \renewcommand*{\sectionmark}[1]{\markboth{\textsc{#1}}{\textsc{#1}}}
+ \fi
+}
+%%===============================
+%% Line spacing
+%%================================
+\RequirePackage{setspace}
+\setstretch{1.07}
+\raggedbottom
+
+%%================================
+%% Line numbers
+%%================================
+\PassOptionsToPackage{pagewise,mathlines}{lineno}
+\RequirePackage{lineno}
+\renewcommand\linenumberfont{\ttfamily\color{gray!15!paper}\footnotesize}
+\setlength\linenumbersep{1em}
+
+\RequirePackage{mathtools}
+
+\newcommand*\linenomathpatch[1]{%
+ \cspreto{#1}{\linenomath}%
+ \cspreto{#1*}{\linenomath}%
+ \cspreto{end#1}{\endlinenomath}%
+ \cspreto{end#1*}{\endlinenomath}%
+}
+\newcommand*\linenomathpatchAMS[1]{%
+ \cspreto{#1}{\linenomathAMS}%
+ \cspreto{#1*}{\linenomathAMS}%
+ \csappto{end#1}{\endlinenomath}%
+ \csappto{end#1*}{\endlinenomath}%
+}
+\expandafter\ifx\linenomath\linenomathWithnumbers
+ \let\linenomathAMS\linenomathWithnumbers
+ \patchcmd\linenomathAMS{\advance\postdisplaypenalty\linenopenalty}{}{}{}
+\else
+ \let\linenomathAMS\linenomathNonumbers
+\fi
+
+\linenomathpatch{equation}
+\linenomathpatchAMS{gather}
+\linenomathpatchAMS{multline}
+\linenomathpatchAMS{align}
+\linenomathpatchAMS{alignat}
+\linenomathpatchAMS{flalign}
+
+\newif\ifLNturnsON
+\def\LocallyStopLineNumbers{\LNturnsONfalse%
+ \ifLineNumbers\LNturnsONtrue\fi\nolinenumbers}
+\def\ResumeLineNumbers{\ifLNturnsON\linenumbers\fi}
+\pretocmd{\tableofcontents}{\LocallyStopLineNumbers}{}{\FAIL}
+\apptocmd{\tableofcontents}{\ResumeLineNumbers}{}{\FAIL}
+\pretocmd{\thebibliography}{\LocallyStopLineNumbers}{}{\FAIL}
+\apptocmd{\endthebibliography}{\ResumeLineNumbers}{}{\FAIL}
+
+%%================================
+%% Title format
+%%================================
+\RequirePackage[explicit,newparttoc]{titlesec}
+\PassOptionsToPackage{normalem}{ulem}
+\RequirePackage{ulem}
+
+\ifbool{IsBook}{
+ %% Part
+ \titleclass{\part}{top} % make part like a chapter
+ \titleformat{\part}[display]
+ {\thispagestyle{part}%
+ \LocallyStopLineNumbers%
+ \partfont\filleft}
+ {\MakeUppercase{\partname~\protect\thepart}}
+ {1em}
+ {\fontsize{20}{0}\selectfont\MakeUppercase{#1}}
+ [\ResumeLineNumbers]
+ \titleformat{name=\part,numberless}[display]
+ {\thispagestyle{part}%
+ \LocallyStopLineNumbers%
+ % \phantomsection\addcontentsline{toc}{part}{#1}%
+ \partfont\filleft}
+ {\phantom{\MakeUppercase{\partname}}}
+ {1em}
+ {\fontsize{20}{0}\selectfont\MakeUppercase{#1}}
+ [\ResumeLineNumbers]
+ \titlespacing*{\part}{0pt}{5em}{6em}
+ %% Text after part
+ \newcommand{\parttext}[1]{%
+ \vfill%
+ \LocallyStopLineNumbers%
+ \begin{flushright}%
+ \begin{minipage}{0.833\textwidth}%
+ \color{black!80!paper}\raggedleft#1%
+ \end{minipage}%
+ \end{flushright}%
+ \ResumeLineNumbers%
+ \vfill\vfill%
+ \cleardoublepage%
+ }
+
+ %% Chapter
+ \titleformat{\chapter}
+ {\thispagestyle{fancy}%
+ \LocallyStopLineNumbers%
+ \color{black!80!paper}\chapfont\fontsize{16}{0}\selectfont}{}{0em}
+ {\rlap{\hspace*{-.5em}{\color{gray!25!paper}%
+ \fontsize{80}{0}\selectfont\raisebox{-7pt}{\thechapter}}}#1}
+ [\ResumeLineNumbers]
+ \titleformat{name=\chapter,numberless}
+ {\thispagestyle{fancy}%
+ \LocallyStopLineNumbers%
+ % \phantomsection\addcontentsline{toc}{chapter}{#1}%
+ \color{black!80!paper}\chapfont\fontsize{16}{0}\selectfont}{}{0em}
+ {\rlap{\hspace*{-.5em}{\color{gray!25!paper}%
+ \fontsize{80}{0}\selectfont\normalfont\raisebox{-7pt}{*}}}#1}
+ [\ResumeLineNumbers]
+}{
+ %% Part
+ \titleformat{\part}[display]
+ {\LocallyStopLineNumbers%
+ \partfont\filleft}
+ {\MakeUppercase{\partname~\protect\thepart}}
+ {.3em}
+ {\fontsize{16}{0}\selectfont\MakeUppercase{#1}}
+ [\ResumeLineNumbers]
+ \titleformat{name=\part,numberless}[display]
+ {\LocallyStopLineNumbers%
+ % \phantomsection\addcontentsline{toc}{part}{#1}%
+ \partfont\filleft}
+ {\phantom{\MakeUppercase{\partname}}}
+ {.3em}
+ {\fontsize{16}{0}\selectfont\MakeUppercase{#1}}
+ [\ResumeLineNumbers]
+ %% Text after part
+ \newcommand{\parttext}[1]{%
+ \LocallyStopLineNumbers%
+ \begin{flushright}%
+ \begin{minipage}{0.833\textwidth}%
+ \color{black!80!paper}\raggedleft#1%
+ \end{minipage}%
+ \end{flushright}%
+ \ResumeLineNumbers%
+ }
+}
+
+%% Section
+\newcommand\seculine{\bgroup\markoverwith{\color{gray!55!paper}%
+ \rule[-0.9ex]{2pt}{.6pt}\hspace{-2pt}\rule[-1.2ex]{2pt}{.6pt}}\ULon}
+\renewcommand\thesection{\arabic{section}}
+\titleformat{\section}
+ {\LocallyStopLineNumbers%
+ \secfont\centering}{}{0em}
+ {{\small\textcolor{gray!55!paper}{\raisebox{.03em}{\footnotesize/}}%
+ \,\,\textcolor{black!80!paper}{\arabic{section}}%
+ \,\,\textcolor{gray!55!paper}{\raisebox{.03em}{\footnotesize/}}}\\
+ \seculine{#1}}
+ [\ResumeLineNumbers]
+\titleformat{name=\section,numberless}
+ {\LocallyStopLineNumbers%
+ % \phantomsection\addcontentsline{toc}{section}{#1}%
+ \secfont\centering}{}{0em}
+ {\seculine{#1}}
+ [\ResumeLineNumbers]
+
+%% Subsection
+\newcommand\subseculine{\bgroup\markoverwith{\color{gray!55!paper}%
+ \rule[-1ex]{2pt}{.75pt}}\ULon}
+\renewcommand\thesubsection{%
+ \ifnum\c@section=0\else\arabic{section}.\fi\arabic{subsection}}
+\titleformat{\subsection}
+ {\LocallyStopLineNumbers%
+ \subsecfont}{}{0em}
+ {\subseculine{\thesubsection~\textcolor{gray!55!paper}{$|$}~#1}}
+ [\ResumeLineNumbers]
+\titleformat{name=\subsection,numberless}
+ {\LocallyStopLineNumbers%
+ \subsecfont}{}{0em}
+ {\subseculine{#1}}
+ [\ResumeLineNumbers]
+
+%% Subsubsection
+\titleformat{\subsubsection}
+ {\LocallyStopLineNumbers%
+ \subsubsecfont}{\thesubsubsection}{1em}
+ {#1}
+ [\ResumeLineNumbers]
+\titlespacing{\subsubsection}{0pt}{.8\baselineskip}{.5\baselineskip}
+
+%%================================
+%% TOC format
+%%================================
+\RequirePackage{titletoc}
+\titlecontents{part}
+ [0em]
+ {\addvspace{1.5pc}\filcenter\partfont}
+ {\thecontentslabel\\\uppercase}
+ {}
+ {} % without page number
+ [\addvspace{.5pc}]
+\ifbool{IsBook}{
+ \titlecontents{chapter}
+ [2em] % i.e., 0em (part) + 2em
+ {\addvspace{.5pc}\chapfont}
+ {\contentslabel{2em}}
+ {\hspace*{-2em}}
+ {\normalfont\titlerule*[1em]{\textcolor{gray!30!paper}{.}}\contentspage}
+ \titlecontents{section}
+ [4em] % i.e., 2em (chapter) + 2em
+ {\secfont}
+ {\contentslabel{1.75em}}
+ {\hspace*{-1.75em}}
+ {\titlerule*[1em]{\textcolor{gray!30!paper}{.}}\contentspage}
+ \titlecontents{subsection}
+ [7em] % i.e., 4em (section) + 3em
+ {\subsecfont}
+ {\contentslabel{2.75em}}
+ {\hspace*{-2.75em}}
+ {\titlerule*[1em]{\textcolor{gray!30!paper}{.}}\contentspage}
+}{
+ \titlecontents{section}
+ [2em] % i.e., 0em (part) + 2em
+ {\secfont}
+ {\contentslabel{1.75em}}
+ {\hspace*{-1.75em}}
+ {\titlerule*[1em]{\textcolor{gray!30!paper}{.}}\contentspage}
+ \titlecontents{subsection}
+ [5em] % i.e., 2em (section) + 3em
+ {\subsecfont}
+ {\contentslabel{2.75em}}
+ {\hspace*{-2.75em}}
+ {\titlerule*[1em]{\textcolor{gray!30!paper}{.}}\contentspage}
+}
+
+%%================================
+%% Lists
+%%================================
+\RequirePackage{enumitem}
+\setlist{noitemsep,leftmargin=2em}
+\renewcommand\labelitemi{\color{gray!50}$\bullet$}
+
+%%================================
+%% Blank page
+%%================================
+\newcommand{\blinkpagetext}{This page is intentionally left blank}
+\renewcommand{\cleardoublepage}{\relax
+ \clearpage
+ \if@twoside\ifodd\c@page\relax\else
+ \thispagestyle{empty}
+ \AddToHookNext{shipout/background}
+ {%
+ \put(0.5\paperwidth,-0.5\paperheight){%
+ \makebox[0pt]{\large\color{gray!20!paper}\blinkpagetext}}}
+ \null\newpage\fi\fi}
+
+%%================================
+%% Theorems
+%%================================
+\RequirePackage{amsthm}
+\newtheoremstyle{simple}%
+ {}{}%
+ {\normalfont}{}%
+ {\normalfont}{}%
+ {0pt}%
+ {\thmname{\textsc{#1}}\thmnumber{ #2}\hspace{.4em}%
+ \textcolor{gray!55!paper}{$|$}\hspace{.4em}%
+ \color{gray}\thmnote{\ensuremath{(\text{#3})}~~}\pushQED{\qed}}
+\def\@endtheorem{\popQED\endtrivlist\@endpefalse }
+
+\renewcommand{\qedsymbol}{%
+ \makebox[1em]{\color{gray!55!paper}\rule[-0.1em]{.95em}{.95em}}}
+
+\if@minimalist@fast\else
+ \PassOptionsToPackage{hidelinks,linktoc=all}{hyperref}
+ \RequirePackage{bookmark}
+ \RequirePackage{hyperref}
+\fi
+\RequirePackage{aliascnt}
+\PassOptionsToPackage{nameinlink}{cleveref}
+\RequirePackage{cleveref}
+
+\newcommand\englishABBR{EN}
+\newcommand\frenchABBR{FR}
+\newcommand\chineseABBR{CN}
+
+\RequirePackage{xstring}
+\newcommand\PassFirstToSecond[2]{#2{#1}}%
+\NewDocumentCommand{\CreateTheorem}{sm}{%
+ \begingroup
+ \protected@edef\temp{#2}%
+ \expandafter\IfEndWith\expandafter{\temp}{*}{%
+ \expandafter\StrGobbleRight\expandafter{\temp}{1}[\temp]%
+ \PassFirstToSecond{*}%
+ }{%
+ \PassFirstToSecond{}%
+ }%
+ {\expandafter\PassFirstToSecond%
+ \expandafter{\temp}{\endgroup\InnerCreateTheorem{#1}}}%
+}%
+\NewDocumentCommand{\InnerCreateTheorem}{mmmod<>}{%
+ \IfBooleanTF{#1}{%
+ \IfValueTF{#4}
+ {\@firstoftwo}
+ {\IfValueTF{#5}{\@firstoftwo}{\@secondoftwo}}%
+ }{%
+ \IfValueTF{#4}
+ {\IfValueTF{#5}{\@firstoftwo}{\@secondoftwo}}{
+ \@secondoftwo}
+ }%
+ {%
+ \GenericError{}%
+ {\string\CreateTheorem\space syntax error\on@line}{%
+ You cannot call the starred variant with optional argument,\MessageBreak
+ nor call the unstarred variant with several optional arguments.}%
+ {}%
+ }{%
+ \IfBooleanTF{#1}{%
+ \newtheorem*{#2EN#3}{\csname#2nameEN\endcsname}
+ \newtheorem*{#2FR#3}{\csname#2nameFR\endcsname}
+ \newtheorem*{#2CN#3}{\csname#2nameCN\endcsname}
+ }{%
+ \IfValueTF{#5}{%
+ \newcounter{#2#3}[{#5}]%
+ \expandafter\renewcommand\expandafter*%
+ \csname the#2#3\expandafter\endcsname%
+ \expandafter{\csname the#5\endcsname.\arabic{#2#3}}%
+ }{%
+ \IfValueTF{#4}
+ {\newaliascnt{#2#3}{#4}}
+ {\newcounter{#2#3}}%
+ }%
+ %-------------------------------------------------------------------
+ \CreateTheoremNumberedLikeAliasCounter{#2}{EN}{#3}%
+ \CreateTheoremNumberedLikeAliasCounter{#2}{FR}{#3}%
+ \CreateTheoremNumberedLikeAliasCounter{#2}{CN}{#3}%
+ %-------------------------------------------------------------------
+ }%
+ \NewDocumentEnvironment{#2#3}{}
+ {\csname#2\csname\languagename ABBR\endcsname#3\endcsname}%
+ {\csname end#2\csname\languagename ABBR\endcsname#3\endcsname}%
+ }%
+}%
+\NewDocumentCommand{\CreateTheoremNumberedLikeAliasCounter}{mmm}{%
+ \newaliascnt{#1#2#3}{#1#3}%
+ \newtheorem{#1#2#3}[{#1#2#3}]{\csname#1name#2\endcsname}%
+ \aliascntresetthe{#1#2#3}%
+ \crefname{#1#2#3}%
+ {\csname#1name#2\endcsname}%
+ {\csname#1name#2\endcsname}%
+}%
+
+%% English theorems names
+\def\theoremnameEN{\textsc{Theorem}}
+\def\lemmanameEN{\textsc{Lemma}}
+\def\propositionnameEN{\textsc{Proposition}}
+\def\corollarynameEN{\textsc{Corollary}}
+\def\factnameEN{\textsc{Fact}}
+\def\conjecturenameEN{\textsc{Conjecture}}
+\def\definitionnameEN{\textsc{Definition}}
+\def\examplenameEN{\textsc{Example}}
+\def\problemnameEN{\textsc{Problem}}
+\def\remarknameEN{\textsc{Remark}}
+
+%% French theorems names
+\def\theoremnameFR{\textsc{Théorème}}
+\def\lemmanameFR{\textsc{Lemme}}
+\def\propositionnameFR{\textsc{Proposition}}
+\def\corollarynameFR{\textsc{Corollaire}}
+\def\factnameFR{\textsc{Fait}}
+\def\conjecturenameFR{\textsc{Conjecture}}
+\def\definitionnameFR{\textsc{Définition}}
+\def\examplenameFR{\textsc{Exemple}}
+\def\problemnameFR{\textsc{Problème}}
+\def\remarknameFR{\textsc{Remarque}}
+
+%% Chinese theorems names
+\def\theoremnameCN{定理}
+\def\lemmanameCN{引理}
+\def\propositionnameCN{命题}
+\def\corollarynameCN{推论}
+\def\factnameCN{事实}
+\def\conjecturenameCN{猜想}
+\def\definitionnameCN{定义}
+\def\examplenameCN{例}
+\def\problemnameCN{问题}
+\def\remarknameCN{备注}
+
+%% Theorem environments
+\theoremstyle{simple}
+\ifbool{IsBook}{
+ \newaliascnt{highest}{chapter}
+}{
+ \newaliascnt{highest}{section}
+}
+\CreateTheorem{theorem}<highest>
+\CreateTheorem{lemma}[theorem]
+\CreateTheorem{proposition}[theorem]
+\CreateTheorem{corollary}[theorem]
+\CreateTheorem{fact}[theorem]
+\CreateTheorem{conjecture}<highest>
+\CreateTheorem*{theorem*}
+\CreateTheorem*{lemma*}
+\CreateTheorem*{proposition*}
+\CreateTheorem*{corollary*}
+\CreateTheorem*{fact*}
+\CreateTheorem*{conjecture*}
+\CreateTheorem{definition}[theorem]
+\CreateTheorem{example}<highest>
+\CreateTheorem{problem}<highest>
+\CreateTheorem*{definition*}
+\CreateTheorem*{example*}
+\CreateTheorem*{problem*}
+\CreateTheorem{remark}<highest>
+\CreateTheorem*{remark*}
+
+%%================================
+%% Language configuration
+%%================================
+\if@minimalist@polyglossia
+ \RequirePackage{polyglossia}
+ \setdefaultlanguage{english}
+ \setotherlanguage[frenchpart=false]{french}
+\else
+ \PassOptionsToPackage{french,english}{babel}
+ \RequirePackage{babel}
+ \frenchsetup{PartNameFull=false}
+\fi
+\newcommand{\minimalist@langconfig@chinese}{%
+ \def\abstractname{摘要}%
+ \def\proofname{证明}%
+ \def\contentsname{目录}%
+ \def\listfigurename{插图}%
+ \def\listtablename{表格}%
+ \def\figurename{图}%
+ \def\tablename{表}%
+ \def\indexname{索引}%
+ \def\appendixname{附录}%
+ \def\bibname{参考文献}%
+ \renewcommand{\languagename}{chinese}%
+}
+\newcommand{\minimalist@langconfig@english}{%
+ \selectlanguage{english}%
+}
+\newcommand{\minimalist@langconfig@french}{%
+ \selectlanguage{french}%
+ \def\frenchpartname{Partie}%
+}
+\newcommand{\UseLanguageCORE}[1]{%
+ \ifstrequal{#1}{chinese}{\onehalfspacing\minimalist@langconfig@chinese}{}%
+ \ifstrequal{#1}{Chinese}{\onehalfspacing\minimalist@langconfig@chinese}{}%
+ \ifstrequal{#1}{english}{\setstretch{1.07}\minimalist@langconfig@english}{}%
+ \ifstrequal{#1}{English}{\setstretch{1.07}\minimalist@langconfig@english}{}%
+ \ifstrequal{#1}{french}{\setstretch{1.07}\minimalist@langconfig@french}{}%
+ \ifstrequal{#1}{French}{\setstretch{1.07}\minimalist@langconfig@french}{}%
+}
+\newcommand{\UseLanguage}[1]{%
+ \ifx\@onlypreamble\@notprerr%
+ \UseLanguageCORE{#1}%
+ \else%
+ \AfterEndPreamble{\UseLanguageCORE{#1}}%
+ \fi%
+}
+\newcommand{\UseOtherLanguage}[2]{%
+\begingroup%
+ \ifstrequal{#1}{chinese}{\minimalist@langconfig@chinese}{}%
+ \ifstrequal{#1}{Chinese}{\minimalist@langconfig@chinese}{}%
+ \ifstrequal{#1}{english}{\minimalist@langconfig@english}{}%
+ \ifstrequal{#1}{English}{\minimalist@langconfig@english}{}%
+ \ifstrequal{#1}{french}{\minimalist@langconfig@french}{}%
+ \ifstrequal{#1}{French}{\minimalist@langconfig@french}{}%
+ #2%
+\endgroup%
+}
+
+\ifbool{IsBook}{}{
+
+%%================================
+%% Title block style
+%%================================
+\renewcommand{\@maketitle}{%
+ \LocallyStopLineNumbers%
+ \noindent%
+ {\textcolor{gray!55!paper}{\rule{\textwidth}{0.75pt}}}%
+ \vspace{-\parskip}%
+ \begin{flushright}%
+ {\@title}\\\medskip%
+ \color{black!80!paper}%
+ {\small\scshape\@author}\\[2pt]%
+ {\small\@date}%
+ \end{flushright}%
+ \vspace{-\parskip}%
+ \vspace{-.5\baselineskip}%
+ {\textcolor{gray!55!paper}{\rule{\textwidth}{0.75pt}}\par}%
+ \ResumeLineNumbers%
+}
+\apptocmd{\maketitle}{\thispagestyle{fancy}}{}{\FAIL}
+
+%%================================
+%% Abstract style
+%%================================
+\renewenvironment{abstract}{%
+ \LocallyStopLineNumbers%
+ \begin{flushright}%
+ \textsc{\small\abstractname}\par%
+ \vspace{-.75\baselineskip}%
+ \begin{minipage}[t]{.833\textwidth}%
+ \vspace{0pt}%
+ \color{black!80!paper}%
+ \footnotesize%
+ \parindent=2em
+}{%
+ \end{minipage}%
+ \end{flushright}%
+ \ResumeLineNumbers%
+}
+
+}
+
+\endinput
+%%
+%% End of file `minimalist/minimalist.sty'.
diff --git a/macros/latex/contrib/minimalist/minimart.cls b/macros/latex/contrib/minimalist/minimart.cls
new file mode 100644
index 0000000000..b9a5a27142
--- /dev/null
+++ b/macros/latex/contrib/minimalist/minimart.cls
@@ -0,0 +1,132 @@
+%%
+%% This is file `minimalist/minimart.cls',
+%% generated with the docstrip utility.
+
+%% Copyright (C) 2021 by Jinwen XU
+%%
+%% This is part of the minimalist class series.
+%%
+%% This work may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License, either version 1.3c of this license or (at
+%% your option) any later version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of LaTeX version
+%% 2005/12/01 or later.
+%%
+\NeedsTeXFormat{LaTeX2e}[2020-10-01]
+\ProvidesClass{minimart}
+ [2021/03/15 A simple and clear article style]
+\def\minimclass@baseclass{article}
+\RequirePackage{kvoptions}
+\RequirePackage{etoolbox}
+\SetupKeyvalOptions{
+ family = @minimclass,
+ prefix = @minimclass@,
+}
+\DeclareBoolOption[false]{draft}
+\DeclareBoolOption[false]{fast}
+\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{\minimclass@baseclass}}
+\ProcessKeyvalOptions*\relax
+\LoadClass{\minimclass@baseclass}
+\if@minimclass@draft
+ \@minimclass@fasttrue
+\fi
+
+%%================================
+%% Page layout
+%%================================
+\RequirePackage[heightrounded]{geometry}
+\geometry{
+ papersize={7in,10in},
+ total={40em,60em},
+ hmarginratio=1:1,
+ vmarginratio=1:1,
+ footnotesep=2em plus 2pt minus 2pt,
+}
+
+\if@minimclass@fast
+ \PassOptionsToPackage{fast}{minimalist}
+\fi
+\RequirePackage{minimalist}
+\AtEndPreamble{\RequirePackage{parskip}}
+
+%%================================
+%% Fonts
+%%================================
+\RequirePackage{iftex}
+\ifPDFTeX
+\RequirePackage[T1]{fontenc}
+\RequirePackage{inputenc}
+\fi
+\RequirePackage{mathpazo}
+\RequirePackage{newpxtext}
+
+\RequirePackage[verbose=silent]{microtype}
+
+%%================================
+%% Graphics
+%%================================
+\RequirePackage{graphicx}
+\graphicspath{{images/}}
+\RequirePackage{wrapfig}
+\RequirePackage{caption}
+
+%%================================
+%% Index
+%%================================
+\RequirePackage{imakeidx}
+\pretocmd{\printindex}{\LocallyStopLineNumbers}{}{\FAIL}
+\apptocmd{\printindex}{\ResumeLineNumbers}{}{\FAIL}
+
+%%================================
+%% Draft mark
+%%================================
+\def\dnfFont{\ttfamily}
+\def\needgraphFont{\ttfamily}
+
+\def\dnfTextEN{To be finished here}
+\def\needgraphTextEN{A graph is needed here}
+\def\dnfTextFR{À terminer ici}
+\def\needgraphTextFR{Il manque encore un graphique ici}
+\def\dnfTextCN{这里的内容尚未完成}
+\def\needgraphTextCN{这里需要一张图片}
+
+\definecolor{dnfColor}{RGB}{21,122,20}
+\definecolor{needgraphColor}{RGB}{70,130,180}
+
+\if@minimclass@fast
+ \newcommand{\plainBox}[2][-paper]{\textcolor{#1}{%
+ \setlength{\fboxsep}{1.5pt}%
+ \setlength{\fboxrule}{1.2pt}%
+ \fbox{#2}}}
+\else
+ \PassOptionsToPackage{many}{tcolorbox}
+ \RequirePackage{tcolorbox}
+ \newtcbox{\plainBox}[1][-paper]{enhanced jigsaw,%
+ on line, arc = 1.2pt, outer arc = 1pt,breakable,%
+ colframe = #1,colupper=#1,opacityback=0,%
+ boxsep = 1pt,boxrule = 1.2pt,%
+ left = 1pt, right = 1pt, top = 0pt, bottom = 0pt,%
+ }
+\fi
+
+\NewDocumentCommand{\dnf}{d<>}{%
+ \noindent\plainBox[dnfColor]%
+ {\normalfont\dnfFont\bfseries\small%
+ \csname dnfText\csname\languagename ABBR\endcsname\endcsname%
+ \IfNoValueF{#1}{ : #1}}%
+}
+\NewDocumentCommand{\needgraph}{d<>}{%
+ \par%
+ \centerline{\plainBox[needgraphColor]%
+ {\normalfont\needgraphFont\bfseries\small%
+ \csname needgraphText\csname\languagename ABBR\endcsname\endcsname%
+ \IfNoValueF{#1}{ : #1}}}%
+ \par%
+}
+
+\endinput
+%%
+%% End of file `minimalist/minimart.cls'.
diff --git a/macros/latex/contrib/minimalist/minimbook.cls b/macros/latex/contrib/minimalist/minimbook.cls
new file mode 100644
index 0000000000..8030889279
--- /dev/null
+++ b/macros/latex/contrib/minimalist/minimbook.cls
@@ -0,0 +1,132 @@
+%%
+%% This is file `minimalist/minimbook.cls',
+%% generated with the docstrip utility.
+
+%% Copyright (C) 2021 by Jinwen XU
+%%
+%% This is part of the minimalist class series.
+%%
+%% This work may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License, either version 1.3c of this license or (at
+%% your option) any later version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of LaTeX version
+%% 2005/12/01 or later.
+%%
+\NeedsTeXFormat{LaTeX2e}[2020-10-01]
+\ProvidesClass{minimbook}
+ [2021/03/15 A simple and clear book style]
+\def\minimclass@baseclass{book}
+\RequirePackage{kvoptions}
+\RequirePackage{etoolbox}
+\SetupKeyvalOptions{
+ family = @minimclass,
+ prefix = @minimclass@,
+}
+\DeclareBoolOption[false]{draft}
+\DeclareBoolOption[false]{fast}
+\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{\minimclass@baseclass}}
+\ProcessKeyvalOptions*\relax
+\LoadClass{\minimclass@baseclass}
+\if@minimclass@draft
+ \@minimclass@fasttrue
+\fi
+
+%%================================
+%% Page layout
+%%================================
+\RequirePackage[heightrounded]{geometry}
+\geometry{
+ papersize={7in,10in},
+ total={40em,60em},
+ hmarginratio=1:1,
+ vmarginratio=1:1,
+ footnotesep=2em plus 2pt minus 2pt,
+}
+
+\if@minimclass@fast
+ \PassOptionsToPackage{fast}{minimalist}
+\fi
+\RequirePackage{minimalist}
+\AtEndPreamble{\RequirePackage{parskip}}
+
+%%================================
+%% Fonts
+%%================================
+\RequirePackage{iftex}
+\ifPDFTeX
+\RequirePackage[T1]{fontenc}
+\RequirePackage{inputenc}
+\fi
+\RequirePackage{mathpazo}
+\RequirePackage{newpxtext}
+
+\RequirePackage[verbose=silent]{microtype}
+
+%%================================
+%% Graphics
+%%================================
+\RequirePackage{graphicx}
+\graphicspath{{images/}}
+\RequirePackage{wrapfig}
+\RequirePackage{caption}
+
+%%================================
+%% Index
+%%================================
+\RequirePackage{imakeidx}
+\pretocmd{\printindex}{\LocallyStopLineNumbers}{}{\FAIL}
+\apptocmd{\printindex}{\ResumeLineNumbers}{}{\FAIL}
+
+%%================================
+%% Draft mark
+%%================================
+\def\dnfFont{\ttfamily}
+\def\needgraphFont{\ttfamily}
+
+\def\dnfTextEN{To be finished here}
+\def\needgraphTextEN{A graph is needed here}
+\def\dnfTextFR{À terminer ici}
+\def\needgraphTextFR{Il manque encore un graphique ici}
+\def\dnfTextCN{这里的内容尚未完成}
+\def\needgraphTextCN{这里需要一张图片}
+
+\definecolor{dnfColor}{RGB}{21,122,20}
+\definecolor{needgraphColor}{RGB}{70,130,180}
+
+\if@minimclass@fast
+ \newcommand{\plainBox}[2][-paper]{\textcolor{#1}{%
+ \setlength{\fboxsep}{1.5pt}%
+ \setlength{\fboxrule}{1.2pt}%
+ \fbox{#2}}}
+\else
+ \PassOptionsToPackage{many}{tcolorbox}
+ \RequirePackage{tcolorbox}
+ \newtcbox{\plainBox}[1][-paper]{enhanced jigsaw,%
+ on line, arc = 1.2pt, outer arc = 1pt,breakable,%
+ colframe = #1,colupper=#1,opacityback=0,%
+ boxsep = 1pt,boxrule = 1.2pt,%
+ left = 1pt, right = 1pt, top = 0pt, bottom = 0pt,%
+ }
+\fi
+
+\NewDocumentCommand{\dnf}{d<>}{%
+ \noindent\plainBox[dnfColor]%
+ {\normalfont\dnfFont\bfseries\small%
+ \csname dnfText\csname\languagename ABBR\endcsname\endcsname%
+ \IfNoValueF{#1}{ : #1}}%
+}
+\NewDocumentCommand{\needgraph}{d<>}{%
+ \par%
+ \centerline{\plainBox[needgraphColor]%
+ {\normalfont\needgraphFont\bfseries\small%
+ \csname needgraphText\csname\languagename ABBR\endcsname\endcsname%
+ \IfNoValueF{#1}{ : #1}}}%
+ \par%
+}
+
+\endinput
+%%
+%% End of file `minimalist/minimbook.cls'.
diff --git a/macros/latex/contrib/multirow/README b/macros/latex/contrib/multirow/README
index a1d00a0479..d6e00c1779 100644
--- a/macros/latex/contrib/multirow/README
+++ b/macros/latex/contrib/multirow/README
@@ -1,6 +1,6 @@
-multirow.sty v2.7 2021/01/29
-bigstruts.sty v2.7 2021/01/29
-bigdelim.sty v2.7 2021/01/29
+multirow.sty v2.8 2021/03/15
+bigstruts.sty v2.8 2021/03/15
+bigdelim.sty v2.8 2021/03/15
Original Author: Jerry Leichter
Current Author: Pieter van Oostrum <pieter@vanoostrum.org>
diff --git a/macros/latex/contrib/multirow/multirow.dtx b/macros/latex/contrib/multirow/multirow.dtx
index 139e0ed25b..9cd957a2e7 100644
--- a/macros/latex/contrib/multirow/multirow.dtx
+++ b/macros/latex/contrib/multirow/multirow.dtx
@@ -32,7 +32,7 @@
%<multirow>\ProvidesPackage{multirow}%
%<bigstrut>\ProvidesPackage{bigstrut}
%<bigdelim>\ProvidesPackage{bigdelim}
-%<multirow|bigstrut|bigdelim> [2021/01/29 v2.7
+%<multirow|bigstrut|bigdelim> [2021/03/15 v2.8
%<multirow> Span multiple rows of a table]%
%<bigstrut> Provide larger struts in tabulars]
%<bigdelim> Create big delimiters in tabular or array]
@@ -130,6 +130,12 @@
% \section{Changes in version 2}
% \label{sec:changes-2}
%
+%\subsection*{version 2.8}
+%
+%\begin{itemize}
+%\item Optional argument \meta{vmove} for \cs{ldelim} and \cs{rdelim}.
+%\end{itemize}
+%
%\subsection*{version 2.7}
%
%\begin{itemize}
@@ -1219,8 +1225,8 @@
% \DescribeMacro{\rdelim}
% Syntax of use is
% \begin{quote}
-% \cs{ldelim} ( \marg{n}\marg{width}\oarg{text}\\
-% \cs{rdelim} ) \marg{n}\marg{width}\oarg{text}
+% \cs{ldelim} ( \marg{n}\oarg{vmove}\marg{width}\oarg{text}\\
+% \cs{rdelim} ) \marg{n}\oarg{vmove}\marg{width}\oarg{text}
% \end{quote}
% The commands are used in a column of a \env{tabular} or
% \env{array}; they create a big parenthesis, brace or whatever
@@ -1259,6 +1265,12 @@
% \end{equation}
% \end{quote}
%
+% The optional parameter \meta{vmove} is a length used for fine-tuning: the
+% delimiter (with the optional \meta{text}) will be raised (or lowered, if
+% \meta{vmove} is negative) by that length above (below) wherever it would
+% otherwise have gone. This is just like with \cs{multirow}, but note that
+% here the \meta{vmove} goes before the \meta{width}.
+%
% When \cs{ldelim} is used, the optional \meta{text} is set centred to the left of \cs{ldelim}.
% If \cs{rdelim} is used it is set to the right of \cs{rdelim}. The
% \meta{width} parameter is the space that is reserved for
@@ -1919,14 +1931,16 @@
% to a default value.
% \changes{bigdelim v2.3}{2018/08/03}{Replace \cs{textrm} by \cs{textnormal}}
% \changes{bigdelim v2.6}{2020/12/26}{Initialize \cs{@arstrutbox} if not defined}
+% \changes{bigdelim v2.8}{2021/03/15}{Add optional argument \meta{vmove}}
% \begin{macrocode}
-\newcommand\ldelim[3]{\@ifnextchar[{\@ldelim{#1}{#2}{#3}}{\@ldelim{#1}{#2}{#3}[\null]}}
-\def\@ldelim#1#2#3[#4]%
+\newcommand\ldelim[2]{\@ifnextchar[{\@ldelim{#1}{#2}}{\@ldelim{#1}{#2}[0pt]}}
+\def\@ldelim#1#2[#3]#4{\@ifnextchar[{\@@ldelim{#1}{#2}{#3}{#4}}{\@@ldelim{#1}{#2}{#3}{#4}[\null]}}
+\def\@@ldelim#1#2#3#4[#5]%
{\ifvoid\@arstrutbox\setbox\@arstrutbox\hbox{\strut}\fi
- \multirow{#2}{#3}{%
+ \multirow{#2}{#4}[#3]{%
\ensuremath
{\left.\vcenter{\hsize=0pt\vrule height \multirow@dima width 0pt}%
- \textnormal{#4}\right#1}}}
+ \textnormal{#5}\right#1}}}
% \end{macrocode}
% \end{macro}
%
@@ -1935,14 +1949,16 @@
% proper arguments, similar to \cs{ldelim}.
% \changes{bigdelim v2.3}{2018/08/03}{Replace \cs{textrm} by \cs{textnormal}}
% \changes{bigdelim v2.6}{2020/12/26}{Initialize \cs{@arstrutbox} if not defined}
+% \changes{bigdelim v2.8}{2021/03/15}{Add optional argument \meta{vmove}}
% \begin{macrocode}
-\newcommand\rdelim[3]{\@ifnextchar[{\@rdelim{#1}{#2}{#3}}{\@rdelim{#1}{#2}{#3}[\null]}}
-\def\@rdelim#1#2#3[#4]%
+\newcommand\rdelim[2]{\@ifnextchar[{\@rdelim{#1}{#2}}{\@rdelim{#1}{#2}[0pt]}}
+\def\@rdelim#1#2[#3]#4{\@ifnextchar[{\@@rdelim{#1}{#2}{#3}{#4}}{\@@rdelim{#1}{#2}{#3}{#4}[\null]}}
+\def\@@rdelim#1#2#3#4[#5]%
{\ifvoid\@arstrutbox\setbox\@arstrutbox\hbox{\strut}\fi
- \multirow{#2}{#3}{%
+ \multirow{#2}{#4}[#3]{%
\ensuremath
{\left#1\vcenter{\hsize=0pt\vrule height \multirow@dima width 0pt}%
- \textnormal{#4}\right.}}}
+ \textnormal{#5}\right.}}}
% \end{macrocode}
% \end{macro}
% \iffalse
diff --git a/macros/latex/contrib/multirow/multirow.pdf b/macros/latex/contrib/multirow/multirow.pdf
index c797cb0a4d..a1075ac37f 100644
--- a/macros/latex/contrib/multirow/multirow.pdf
+++ b/macros/latex/contrib/multirow/multirow.pdf
Binary files differ