summaryrefslogtreecommitdiff
path: root/macros/latex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex')
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-license/README.md102
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-license/biblatex-license.pdfbin0 -> 227560 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-license/biblatex-license.sty125
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-license/biblatex-license.tex150
-rw-r--r--macros/latex/contrib/colorist/LICENSE416
-rw-r--r--macros/latex/contrib/colorist/README.md29
-rw-r--r--macros/latex/contrib/colorist/colorart.cls132
-rw-r--r--macros/latex/contrib/colorist/colorbook.cls132
-rw-r--r--macros/latex/contrib/colorist/colorist-doc.pdfbin0 -> 45924 bytes
-rw-r--r--macros/latex/contrib/colorist/colorist-doc.tex222
-rw-r--r--macros/latex/contrib/colorist/colorist.sty765
-rw-r--r--macros/latex/contrib/easybook/doc/easybook-demo.pdfbin287389 -> 287470 bytes
-rw-r--r--macros/latex/contrib/easybook/doc/easybook-demo.tex3
-rw-r--r--macros/latex/contrib/easybook/doc/easybook.pdfbin254087 -> 254673 bytes
-rw-r--r--macros/latex/contrib/easybook/doc/easybook.tex133
-rw-r--r--macros/latex/contrib/easybook/easybook.cls185
-rw-r--r--macros/latex/contrib/gridpapers/README.md113
-rw-r--r--macros/latex/contrib/gridpapers/examples/custom-colors.tex18
-rw-r--r--macros/latex/contrib/gridpapers/examples/dot-grid-10spi.tex8
-rw-r--r--macros/latex/contrib/gridpapers/examples/dot-grid-5spi.tex8
-rw-r--r--macros/latex/contrib/gridpapers/examples/engineer-pad.tex8
-rw-r--r--macros/latex/contrib/gridpapers/examples/engineer-paper-8spi.tex8
-rw-r--r--macros/latex/contrib/gridpapers/examples/graph-paper-8spi.tex8
-rw-r--r--macros/latex/contrib/gridpapers/examples/graph-paper.tex8
-rw-r--r--macros/latex/contrib/gridpapers/examples/grid-with-light-cones.tex8
-rw-r--r--macros/latex/contrib/gridpapers/examples/hex-engineer-letterpaper-fullpage.tex8
-rw-r--r--macros/latex/contrib/gridpapers/examples/hex-grid-large.tex8
-rw-r--r--macros/latex/contrib/gridpapers/examples/hex-grid-small.tex8
-rw-r--r--macros/latex/contrib/gridpapers/examples/isometric-grid.tex8
-rw-r--r--macros/latex/contrib/gridpapers/examples/plum-graph-paper.tex8
-rw-r--r--macros/latex/contrib/gridpapers/examples/precocious-young-engineer.tex8
-rw-r--r--macros/latex/contrib/gridpapers/examples/quadrille-10spi.tex8
-rw-r--r--macros/latex/contrib/gridpapers/examples/quadrille-8spi.tex8
-rw-r--r--macros/latex/contrib/gridpapers/examples/red-graph.tex8
-rw-r--r--macros/latex/contrib/gridpapers/examples/triangular-grid.tex8
-rw-r--r--macros/latex/contrib/gridpapers/gridpapers.dtx786
-rw-r--r--macros/latex/contrib/gridpapers/gridpapers.ins57
-rw-r--r--macros/latex/contrib/gridpapers/gridpapers.pdfbin0 -> 220081 bytes
-rw-r--r--macros/latex/contrib/orcidlink/README.md3
-rw-r--r--macros/latex/contrib/orcidlink/orcidlink.dtx44
-rw-r--r--macros/latex/contrib/orcidlink/orcidlink.pdfbin135025 -> 164719 bytes
-rw-r--r--macros/latex/contrib/orcidlink/preview.pngbin27457 -> 0 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/README.md14
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdfbin574086 -> 574086 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdfbin621765 -> 621765 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdfbin578386 -> 594959 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdfbin583234 -> 583234 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdfbin589930 -> 589930 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdfbin653901 -> 653905 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdfbin558963 -> 558963 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.default.pdfbin677098 -> 0 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdfbin680492 -> 680495 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdfbin550590 -> 550591 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdfbin586772 -> 586772 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdfbin645595 -> 645600 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex136
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudabeamer.cls6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudacolors.def6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudacolors.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudaexercise.cls246
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudafonts.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudaletter.cls6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo2
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudaposter.cls6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudapub.cls6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudarules.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudasciposter.cls6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo2
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudathesis.cfg6
-rw-r--r--macros/latex/required/firstaid/changes.txt8
-rw-r--r--macros/latex/required/firstaid/latex2e-first-aid-for-external-files.dtx40
-rw-r--r--macros/latex/required/firstaid/latex2e-first-aid-for-external-files.pdfbin201643 -> 205202 bytes
99 files changed, 3856 insertions, 317 deletions
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-license/README.md b/macros/latex/contrib/biblatex-contrib/biblatex-license/README.md
new file mode 100644
index 0000000000..98fdd35705
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-license/README.md
@@ -0,0 +1,102 @@
+# biblatex-license
+
+----
+Author:
+Anselm Wagner
+a.wagner1@uni-wuppertal.de
+Bergische Universität Wuppertal
+v0.1
+
+License:
+This material is subject to the LaTeX Project Public License 1.3c.
+https://ctan.org/license/lppl1.3
+
+Requirements:
+This package requires the LaTeX-packages 'biblatex' and 'kvoptions' to be installed.
+----
+
+## Intro
+
+This package provides a modification to the biblatex standard styles for
+relating cited works to the license under which they were published.
+This is done via biblatex’ build in `related` mechanism and
+`relatedtype = license`. This package basically provides this new
+relatedtype, the bibmacros for typesetting these related entries and
+some additional styling options.
+
+## Loading the package
+
+The package is loaded via
+
+ \usepackage[options]{biblatex-license}
+
+and has to be loaded *after* the `biblatex` package. The package sets
+the `biblatex` option `related = true`.
+
+## Options
+
+* `license` : Decides if and how the license is to be printed. Default: short
+* `url` : Switch for deciding if the url of the license should be explicitly printed. Default: false
+* `link` : When set to `true` and `url` is set to `off`, the title of the license becomes an `\href`, i.e. a hyperlink. Default: true
+* `introtext`: Makes it possible to replace the language specific intro text (e.g. “licensed under”) with custom text. Default: none
+
+## Usage
+
+Consider the following bibliography:
+
+ @Misc{CreativeCommons4.0,
+ author = {{Creative Commons}},
+ title = {{Attribution-NonCommercial-ShareAlike 4.0 International}},
+ date = {2013-11-25},
+ url = {https://creativecommons.org/licenses/by-nc-sa/4.0/},
+ urldate = {2019-10-01},
+ shorttitle = {{CC BY-NC-SA 4.0}},
+ }
+
+ @book{Payne2019,
+ author = {Blakeley Hoffman Payne},
+ editor = {{MIT Media Lab Personal Robots Group} and Cynthia Breazeal},
+ title = {An Ethics of Artificial Intelligence Curriculum for Middle
+ School Students},
+ related = {CreativeCommons4.0},
+ relatedtype = {license},
+ url = {https://t1p.de/rwlp},
+ urldate = {2020-01-27},
+ date = {2019-08},
+ }
+
+Note, that `Payne2019` has the fields `related` and `relatedtype`
+defined. `related` is pointing via the label to the entry corresponding
+to the license under which `Payne2019` was published:
+`CreativeCommons4.0`. The `relatedtype = {license}` is necessary for
+`biblatex` to know how this relation should be handled. Please see the
+`biblatex` user guide (§3.4 *Related Entries*) for more information on
+related entries.
+
+## More on the options
+
+### `introtext`
+
+Note the text “Licensed under” in the bibliography. This text is, as of
+now, only translated to german but can be changed via the option
+`introtext` like so:
+
+ \usepackage[introtext={Some text}]{biblatex-license}
+
+### `link`
+
+Also note that in the example output above the title of the license is
+itself a link to where the `url`-field of the license entry inside the
+bib-file is pointing. This link is made via `\href`.
+
+### `url`
+
+It might be better to explicitly print the url of the license, which can
+be done via the `url=true` option. If printed this way, the option
+`link` has no effect on if this url is itself a hyperlink or not aus the
+url-field is handled by biblatex itself.
+
+### `shorttitle` of the license
+
+If a `shorttitle` is provided for the license inside the bib-file, the
+shorttitle will always be preferred.
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-license/biblatex-license.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-license/biblatex-license.pdf
new file mode 100644
index 0000000000..7d5791adb3
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-license/biblatex-license.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-license/biblatex-license.sty b/macros/latex/contrib/biblatex-contrib/biblatex-license/biblatex-license.sty
new file mode 100644
index 0000000000..f4b27e0943
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-license/biblatex-license.sty
@@ -0,0 +1,125 @@
+% This package serves the purpose of providing a way
+% for relating entries in the bibliography to the license
+% under which those entries where licensed. For this end
+% it uses the build in biblatex 'related' mechanism to
+% link works to their license. It therefor defines a new
+% 'relatedtype', which is 'license'.
+%
+% Anselm Wagner (a.wagner1@uni-wuppertal.de)
+%
+% This material is subject to the LaTeX Project Public License 1.3c.
+% https://ctan.org/license/lppl1.3
+%
+\NeedsTeXFormat{LaTeX2e}[1994/06/01]
+\ProvidesPackage{biblatex-license}
+ [2020/01/30 v1.0 biblatex-license]
+\RequirePackage{biblatex}
+\RequirePackage{kvoptions}
+\SetupKeyvalOptions{
+ family=biblicense,
+ prefix=biblicense@}
+\DeclareStringOption[short]{license} % how should the licenses be printed in
+ % bib? Options: short, full, off
+\DeclareBoolOption[false]{url} % should the url of the license be printed
+ % as well?
+\DeclareBoolOption[true]{link} % should the lincense be a weblink?
+\DeclareStringOption[default]{introtext} % alternative introtext for licenses
+ % in the bibliography. Arbitrary text.
+\ProcessKeyvalOptions*
+
+\ifbiblicense@link % link=true
+ \RequirePackage{hyperref}
+\fi
+
+% set related=true otherwise this package has no functionality
+\ExecuteBibliographyOptions{related=true}
+
+% Common definitions:
+\NewBibliographyString{licensedunder}
+\DefineBibliographyStrings{english}{%
+ licensedunder = {licensed under},
+}
+\DefineBibliographyStrings{german}{%
+ licensedunder = {Lizenziert unter},
+}
+
+\newbibmacro*{shortIfShorttitleExists}{%
+ \iffieldundef{shorttitle}
+ {\printfield{title}}
+ {\printfield{shorttitle}}
+}
+
+\newbibmacro*{licenseAsLink}{\printfield[licenseAsLink]{url}}
+
+\DeclareFieldFormat{licenseAsLink}{\href{#1}{\usebibmacro{shortIfShorttitleExists}\unspace}}
+
+% test if alternative introtext was entered and change accordingly
+\ifnum\pdf@strcmp{\biblicense@introtext}{default}=0%
+ \newcommand{\biblicenseintrotext}{\biblstring{licensedunder}}
+\else
+ \newcommand{\biblicenseintrotext}{\biblicense@introtext}
+\fi
+
+
+\ifnum\pdf@strcmp{\biblicense@license}{off}=0% Package has no functionality.
+ \newbibmacro*{related:license}[1]{}
+\else % license is to be printed
+ \ifnum\pdf@strcmp{\biblicense@license}{short}=0% short license to be printed
+ \ifbiblicense@url % url=true
+ \newbibmacro*{related:license}[1]{%
+ \entrydata{#1}{%
+ \printtext{\biblicenseintrotext}%
+ \setunit{\addspace}%
+ \usebibmacro{shortIfShorttitleExists}%
+ \iffieldundef{url}
+ {}
+ {\setunit{\addspace}\usebibmacro{url}}}%
+ }
+ \else % url=false
+ \ifbiblicense@link % link=true
+ \newbibmacro*{related:license}[1]{%
+ \entrydata{#1}{%
+ \printtext{\biblicenseintrotext}%
+ \setunit{\addspace}%
+ \iffieldundef{url}
+ {\usebibmacro{shortIfShorttitleExists}}
+ {\usebibmacro{licenseAsLink}}%
+ }
+ }
+ \else % link=false
+ \newbibmacro*{related:license}[1]{%
+ \entrydata{#1}{%
+ \printtext{\biblicenseintrotext}%
+ \setunit{\addspace}%
+ {\usebibmacro{shortIfShorttitleExists}}%
+ }
+ }
+ \fi % link = ?
+ \fi % url = ?
+ \else % license=full -- full license to be printed
+ \newbibmacro*{related:license}[1]{%
+ \entrydata{#1}{%
+ \printtext{\biblicenseintrotext}%
+ \setunit{\addspace}%
+ \usedriver
+ {\ifnameundef{savedauthor}
+ {\ifnameundef{savededitor}
+ {}
+ {\ifnamesequal{editor}{savededitor}
+ {\clearname{editor}}
+ {}}}
+ {\ifnamesequal{author}{savedauthor}
+ {\clearname{author}}
+ {}}%
+ \renewbibmacro*{related:init}{}%
+ \DeclareNameAlias{sortname}{default}%
+ \ifbibmacroundef{date+extradate}
+ {}
+ {\renewbibmacro*{date+extradate}{}%
+ \renewbibmacro*{date}{\printdate}}%
+ \renewbibmacro*{pageref}{}}
+ {\thefield{entrytype}}
+ }
+ }
+ \fi
+\fi
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-license/biblatex-license.tex b/macros/latex/contrib/biblatex-contrib/biblatex-license/biblatex-license.tex
new file mode 100644
index 0000000000..a935baa628
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-license/biblatex-license.tex
@@ -0,0 +1,150 @@
+\documentclass[11pt,oneside,notitlepage,a4paper,english,parskip=half*] {scrartcl}
+\usepackage{luainputenc}
+\usepackage[T1]{fontenc}
+\usepackage[english]{babel}
+\usepackage{color}
+\usepackage{graphicx}
+%\usepackage{url}
+%\usepackage{hyperref}
+\usepackage{floatrow}
+\usepackage{booktabs}
+\usepackage{tabularx}
+\usepackage{csquotes}
+% !TeX spellcheck = en_US
+\usepackage[
+backend=biber
+,sortlocale=en_EN%.UTF-8
+,style=authoryear
+,bibencoding=UTF8
+,block=space
+,autocite=inline
+]{biblatex}
+\begin{filecontents}{\jobname.bib}
+@Misc{CreativeCommons4.0,
+ author = {{Creative Commons}},
+ title = {{Attribution-NonCommercial-ShareAlike 4.0}},
+ date = {2013-11-25},
+ url = {https://creativecommons.org/licenses/by-nc-sa/4.0/},
+ urldate = {2019-10-01},
+ shorttitle = {{CC BY-NC-SA 4.0}},
+}
+
+@book{Payne2019,
+ author = {Blakeley Hoffman Payne},
+ editor = {{MIT Media Lab Personal Robots Group} and Cynthia Breazeal},
+ title = {An Ethics of Artificial Intelligence Curriculum for Middle School Students},
+ related = {CreativeCommons4.0},
+ relatedtype = {license},
+ url = {https://t1p.de/rwlp},
+ urldate = {2020-01-27},
+ date = {2019-08},
+}
+\end{filecontents}
+\addbibresource{\jobname.bib}
+\usepackage[license=short,link=true,url=false,introtext={default}]{biblatex-license}
+
+\let\endtitlepage\relax
+\title{\texttt{biblatex-license}}
+\author{Anselm Wagner\\a.wagner1@uni-wuppertal.de\\Bergische Universität Wuppertal\\v0.1}
+
+\begin{document}
+\maketitle
+\begin{abstract}
+This package provides a modification to the biblatex standard styles for relating cited works to the license under which they were published. This is done via biblatex' build in \texttt{related} mechanism and \texttt{relatedtype = license}. This package basically provides this new relatedtype, the bibmacros for typesetting these related entries and some additional styling options.
+\end{abstract}
+\tableofcontents
+\vspace{2em}
+
+The package is loaded via
+\begin{verbatim}
+\usepackage[options]{biblatex-license}
+\end{verbatim}
+and has to be loaded \emph{after} the \texttt{biblatex} package. The package sets the \texttt{biblatex} option \texttt{related = true}.
+
+\section{Options}
+
+\begin{tabularx}{\linewidth}{c|X|c|c}
+\toprule \textbf{Name} & \textbf{Function} & \textbf{Possible Values} & \textbf{Default} \\
+\midrule \texttt{license} & Decides if and how the license is to be printed. & short, full, off & short \\
+\hline \texttt{url} & Switch for deciding if the url of the license should be explicitly printed. & true, false & false \\
+\hline \texttt{link} & When set to \texttt{true} and \texttt{url} is set to \texttt{off}, the title of the license becomes an \verb|\href|, i.e. a hyperlink. & true, false & true \\
+\hline \texttt{introtext} & Makes it possible to replace the language specific intro text (e.g. \enquote{licensed under}) with custom text. & any text & \\\bottomrule
+\end{tabularx}
+
+
+\section{Usage}
+
+Consider the following bibliography:
+\begin{verbatim}
+@Misc{CreativeCommons4.0,
+ author = {{Creative Commons}},
+ title = {{Attribution-NonCommercial-ShareAlike 4.0 International}},
+ date = {2013-11-25},
+ url = {https://creativecommons.org/licenses/by-nc-sa/4.0/},
+ urldate = {2019-10-01},
+ shorttitle = {{CC BY-NC-SA 4.0}},
+}
+
+@book{Payne2019,
+ author = {Blakeley Hoffman Payne},
+ editor = {{MIT Media Lab Personal Robots Group} and Cynthia Breazeal},
+ title = {An Ethics of Artificial Intelligence Curriculum for Middle
+ School Students},
+ related = {CreativeCommons4.0},
+ relatedtype = {license},
+ url = {https://t1p.de/rwlp},
+ urldate = {2020-01-27},
+ date = {2019-08},
+}
+\end{verbatim}
+Note, that \texttt{Payne2019} has the fields \texttt{related} and \texttt{relatedtype} defined. \texttt{related} is pointing via the label to the entry corresponding to the license under which \texttt{Payne2019} was published: \texttt{CreativeCommons4.0}. The \texttt{relatedtype = \{license\}} is necessary for \texttt{biblatex} to know how this relation should be handled. Please see the \texttt{biblatex} user guide (§3.4 \emph{Related Entries}) for more information on related entries.
+
+Now if \texttt{biblatex} is loaded with the following options:
+\begin{verbatim}
+\usepackage[
+ backend=biber
+ ,sortlocale=en_EN%.UTF-8
+ ,style=authoryear
+ ,bibencoding=UTF8
+ ,block=space
+]{biblatex}
+\end{verbatim}
+
+And \texttt{biblatex-license} is loaded the default way:
+\begin{verbatim}
+\usepackage{biblatex-license}
+\end{verbatim}
+
+The bibliopgraphic entry of \texttt{Payne2019} would look like this:
+\nocite{Payne2019}\printbibliography[heading=none]
+
+The default way of loading \texttt{biblatex-license} is equivalent to:
+\begin{verbatim}
+\usepackage[license=short,
+ url=false,
+ link=true,
+ introtext={default}]
+ {biblatex-license}
+\end{verbatim}
+
+\subsection{\texttt{introtext}}
+
+Note the text \enquote{Licensed under} in the bibliography. This text is, as of now, only translated to german but can be changed via the option \texttt{introtext} like so:
+\begin{verbatim}
+\usepackage[introtext={Some text}]{biblatex-license}
+\end{verbatim}
+
+\subsection{\texttt{link}}
+
+Also note that in the example output above the title of the license is itself a link to where the \texttt{url}-field of the license entry inside the bib-file is pointing. This link is made via \verb|\href|.
+
+\subsection{\texttt{url}}
+
+It might be better to explicitly print the url of the license, which can be done via the \texttt{url=true} option. If printed this way, the option \texttt{link} has no effect on if this url is itself a hyperlink or not aus the url-field is handled by biblatex itself.
+
+\subsection{\texttt{shorttitle} of the license}
+
+If a \texttt{shorttitle} is provided for the license inside the bib-file, the shorttitle will always be preferred.
+
+\end{document}
+
diff --git a/macros/latex/contrib/colorist/LICENSE b/macros/latex/contrib/colorist/LICENSE
new file mode 100644
index 0000000000..2244313901
--- /dev/null
+++ b/macros/latex/contrib/colorist/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/colorist/README.md b/macros/latex/contrib/colorist/README.md
new file mode 100644
index 0000000000..48f9a8e82f
--- /dev/null
+++ b/macros/latex/contrib/colorist/README.md
@@ -0,0 +1,29 @@
+<!-- Copyright (C) 2021 by Jinwen XU -->
+
+# `colorist` bundle: write you documents in a colorful way
+
+This is collection of styles and classes for typesetting articles and books in a
+colorful design. It mainly consists of two parts.
+
+- Main part:
+ - colorist.sty : the main style
+ - colorart.cls : class for typesetting articles
+ - colorbook.cls : class for typesetting books
+
+ They can be used with any major TeX 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):
+ - lebhart.cls : more advanced class for typesetting articles
+ - beaulivre.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/colorist/colorart.cls b/macros/latex/contrib/colorist/colorart.cls
new file mode 100644
index 0000000000..c40e2c682b
--- /dev/null
+++ b/macros/latex/contrib/colorist/colorart.cls
@@ -0,0 +1,132 @@
+%%
+%% This is file `colorist/colorart.cls',
+%% generated with the docstrip utility.
+
+%% Copyright (C) 2021 by Jinwen XU
+%%
+%% This is part of the colorist 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{colorart}
+ [2021/03/15 A colorful article style]
+\def\colorclass@baseclass{article}
+\RequirePackage{kvoptions}
+\RequirePackage{etoolbox}
+\SetupKeyvalOptions{
+ family = @colorclass,
+ prefix = @colorclass@,
+}
+\DeclareBoolOption[false]{draft}
+\DeclareBoolOption[false]{fast}
+\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{\colorclass@baseclass}}
+\ProcessKeyvalOptions*\relax
+\LoadClass{\colorclass@baseclass}
+\if@colorclass@draft
+ \@colorclass@fasttrue
+\fi
+
+%%================================
+%% Page layout
+%%================================
+\RequirePackage[heightrounded]{geometry}
+\geometry{
+ % papersize={8in,11in},
+ a4paper,
+ total={47em,70em},
+ hmarginratio=1:1,
+ vmarginratio=1:1,
+ footnotesep=2em plus 2pt minus 2pt,
+}
+
+\RequirePackage{indentfirst}
+
+\if@colorclass@fast
+ \PassOptionsToPackage{fast}{colorist}
+\fi
+\RequirePackage{colorist}
+
+%%================================
+%% 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}
+
+%%================================
+%% 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@colorclass@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 `colorist/colorart.cls'.
diff --git a/macros/latex/contrib/colorist/colorbook.cls b/macros/latex/contrib/colorist/colorbook.cls
new file mode 100644
index 0000000000..e620546e5a
--- /dev/null
+++ b/macros/latex/contrib/colorist/colorbook.cls
@@ -0,0 +1,132 @@
+%%
+%% This is file `colorist/colorbook.cls',
+%% generated with the docstrip utility.
+
+%% Copyright (C) 2021 by Jinwen XU
+%%
+%% This is part of the colorist 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{colorbook}
+ [2021/03/15 A colorful book style]
+\def\colorclass@baseclass{book}
+\RequirePackage{kvoptions}
+\RequirePackage{etoolbox}
+\SetupKeyvalOptions{
+ family = @colorclass,
+ prefix = @colorclass@,
+}
+\DeclareBoolOption[false]{draft}
+\DeclareBoolOption[false]{fast}
+\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{\colorclass@baseclass}}
+\ProcessKeyvalOptions*\relax
+\LoadClass{\colorclass@baseclass}
+\if@colorclass@draft
+ \@colorclass@fasttrue
+\fi
+
+%%================================
+%% Page layout
+%%================================
+\RequirePackage[heightrounded]{geometry}
+\geometry{
+ % papersize={8in,11in},
+ a4paper,
+ total={47em,70em},
+ hmarginratio=1:1,
+ vmarginratio=1:1,
+ footnotesep=2em plus 2pt minus 2pt,
+}
+
+\RequirePackage{indentfirst}
+
+\if@colorclass@fast
+ \PassOptionsToPackage{fast}{colorist}
+\fi
+\RequirePackage{colorist}
+
+%%================================
+%% 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}
+
+%%================================
+%% 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@colorclass@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 `colorist/colorbook.cls'.
diff --git a/macros/latex/contrib/colorist/colorist-doc.pdf b/macros/latex/contrib/colorist/colorist-doc.pdf
new file mode 100644
index 0000000000..27c3d1b58c
--- /dev/null
+++ b/macros/latex/contrib/colorist/colorist-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/colorist/colorist-doc.tex b/macros/latex/contrib/colorist/colorist-doc.tex
new file mode 100644
index 0000000000..f61a2f99b5
--- /dev/null
+++ b/macros/latex/contrib/colorist/colorist-doc.tex
@@ -0,0 +1,222 @@
+%! TEX program = xelatex
+\PassOptionsToPackage{dvipsnames}{xcolor}
+\documentclass{colorart}
+
+%%================================
+%% 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}%
+{\setkeys{lst}{columns=fullflexible,keepspaces=true}}{}
+
+\providecommand{\colorist}{\textsf{colorist}}
+\providecommand{\colorart}{\textsf{colorart}}
+\providecommand{\colorbook}{\textsf{colorbook}}
+\providecommand{\lebhart}{\textsf{lebhart}}
+\providecommand{\beaulivre}{\textsf{beaulivre}}
+
+%%================================
+%% Main text
+%%================================
+\begin{document}
+
+\title{\colorist{}, write your articles or books in a colorful way\thanks{Corresponding to: \texttt{\colorist{} 2021/03/15}}}
+\author{Jinwen}
+\date{March 2021, Beijing}
+
+\maketitle
+
+\begin{abstract}
+ The \colorist{} is a series of styles and classes for you to typeset your articles or books in a colorful manner. My original intention in designing this series is to write drafts and notes that look colorful yet not dazzling.
+
+ The entire collection includes \verb|colorist.sty|, which is the main style shared by all the following classes; \verb|colorart.cls| for typesetting articles and \verb|colorbook.cls| for typesetting books. They compile with any major \TeX{} engine, with native support to English and French typesetting via \lstinline|\UseLanguage| (see the instruction below for detail).
+
+ You can also found \lebhart{} and \beaulivre{} on CTAN. They are the enhanced version of \colorart{} and \colorbook{} 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 \colorart{}. You can think of it as a short introduction and demonstration.
+\end{abstract}
+
+\begin{tcolorbox}[enhanced jigsaw,pad at break*=1mm,breakable,colback=yellow!25!paper,boxrule=0pt,frame hidden]
+ Since the main body of \colorist{} is modified from the \textsf{minimalist} series, some elements have not been completely redesigned yet, especially the TOC, part and chapter style. These will be added gradually in the future versions.
+\end{tcolorbox}
+
+\tableofcontents
+
+\section{How to load it}
+You can directly use \colorart{} or \colorbook{} as your document class. In this way, you can directly begin writing your document, without having to worry about the configurations.
+
+\begin{code}
+ \documentclass{colorart} (*{\normalfont or}*) \documentclass{colorbook}
+\end{code}
+
+And of course, you can also use the default classes \textsf{article} or \textsf{book}, and load the \colorist{} 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{colorist}
+\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 Use draft mode for all tcolorboxes.
+\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}
+
+\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}
+
+\begin{definition}[Another definition]
+ Different definitions are automatically glued together, and there will be no gaps in between.
+\end{definition}
+
+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}.
+
+\bigskip
+The following are several other styles of theorem-like environments:
+
+\begin{theorem}
+ Theorem style: theorem, proposition, lemma, corollary
+\end{theorem}
+
+\begin{proof}
+ Proof style
+\end{proof}
+
+\begin{remark}
+ Remark style
+\end{remark}
+
+\begin{conjecture}
+ Conjecture style
+\end{conjecture}
+
+\begin{example*}
+ Example style: example, fact
+\end{example*}
+
+\begin{problem}
+ Problem style
+\end{problem}
+
+\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. 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}
+
+\clearpage
+
+\section{Document templates}
+
+\begin{center}
+\begin{minipage}{0.4\textwidth}
+\begin{code}
+%! TEX program = xelatex
+\documentclass{lebhartfast}
+
+\UseLanguage{French}
+
+\begin{document}
+
+\title{Titre}
+\author{Nom}
+\date{03 / 2021, Lieu}
+
+\maketitle
+
+%% Texte ici
+
+\end{document}
+\end{code}
+\end{minipage}
+\end{center}
+
+\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/colorist/colorist.sty b/macros/latex/contrib/colorist/colorist.sty
new file mode 100644
index 0000000000..0aebdb922f
--- /dev/null
+++ b/macros/latex/contrib/colorist/colorist.sty
@@ -0,0 +1,765 @@
+%%
+%% This is file `colorist/colorist.sty',
+%% generated with the docstrip utility.
+
+%% Copyright (C) 2021 by Jinwen XU
+%%
+%% This is part of the colorist 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{colorist}
+ [2021/03/15 A colorful style for articles and books]
+\RequirePackage{etoolbox}
+\RequirePackage{kvoptions}
+\SetupKeyvalOptions{%
+ family = @colorist,
+ prefix = @colorist@
+}
+\DeclareBoolOption[false]{draft}
+\DeclareBoolOption[false]{fast}
+\DeclareBoolOption[false]{polyglossia}
+\ProcessKeyvalOptions*\relax
+
+\if@colorist@draft
+ \@colorist@fasttrue
+\fi
+
+\newif\ifIsBook
+\ifdefined\chapter\IsBooktrue\else\IsBookfalse\fi
+
+%%================================
+%% Title fonts
+%%================================
+\RequirePackage{anyfontsize}
+\newcommand{\partfont}{\sffamily}
+\newcommand{\chapfont}{\sffamily}
+\newcommand{\secfont}{\sffamily}
+\newcommand{\subsecfont}{}
+\newcommand{\subsubsecfont}{}
+
+%%================================
+%% Color
+%%================================
+\RequirePackage{xcolor}
+\definecolor{paper}{RGB}{255,255,255}
+\definecolor{skyblue}{RGB}{60,120,234}
+\definecolor{steelblue}{RGB}{70,130,180}
+\definecolor{forestgreen}{RGB}{21,122,81}
+\definecolor{lightorange}{RGB}{255,185,88}
+\definecolor{lightskyblue}{RGB}{35,198,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@twoside
+ \renewcommand{\chaptermark}[1]{\markboth{\textsc{#1}}{}}
+ \else
+ \renewcommand{\chaptermark}[1]{\markboth{\textsc{#1}}{\textsc{#1}}}
+ \fi
+ \renewcommand*{\sectionmark}[1]{%
+ \markright{\thesection~~#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
+
+%%================================
+%% 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]
+ {\partfont\filleft}
+ {\MakeUppercase{\partname~\protect\thepart}}
+ {1em}
+ {\fontsize{20}{0}\selectfont\MakeUppercase{#1}}
+ \titleformat{name=\part,numberless}[display]
+ {% \phantomsection\addcontentsline{toc}{part}{#1}%
+ \partfont\filleft}
+ {\phantom{\MakeUppercase{\partname}}}
+ {1em}
+ {\fontsize{20}{0}\selectfont\MakeUppercase{#1}}
+ \titlespacing*{\part}{0pt}{5em}{6em}
+ %% Text after part
+ \newcommand{\parttext}[1]{%
+ \vfill%
+ \begin{flushright}%
+ \begin{minipage}{0.833\textwidth}%
+ \color{black!80!paper}\raggedleft#1%
+ \end{minipage}%
+ \end{flushright}%
+ \vfill\vfill%
+ \cleardoublepage%
+ }
+
+ %% Chapter
+ \titleformat{\chapter}
+ {\thispagestyle{fancy}%
+ \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}
+ \titleformat{name=\chapter,numberless}
+ {\thispagestyle{fancy}% \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}
+
+ %% Section
+ \titleformat{\section}
+ {\secfont\large\color{steelblue}}
+ {\thesection}{.75em}{#1}
+ [{\titlerule[.75pt]}]
+}{
+ %% Part
+ \titleformat{\part}[display]
+ {%
+ \partfont\filleft}
+ {\MakeUppercase{\partname~\protect\thepart}}
+ {.3em}
+ {\fontsize{16}{0}\selectfont\MakeUppercase{#1}}
+ \titleformat{name=\part,numberless}[display]
+ {% \phantomsection\addcontentsline{toc}{part}{#1}%
+ \partfont\filleft}
+ {\phantom{\MakeUppercase{\partname}}}
+ {.3em}
+ {\fontsize{16}{0}\selectfont\MakeUppercase{#1}}
+ %% Text after part
+ \newcommand{\parttext}[1]{%
+ \begin{flushright}%
+ \begin{minipage}{0.833\textwidth}%
+ \color{black!80!paper}\raggedleft#1%
+ \end{minipage}%
+ \end{flushright}%
+ }
+
+ %% Section
+ \titleformat{\section}
+ {\secfont\large\color{steelblue}}
+ {\thesection}{.75em}{\scshape #1}
+ [{\titlerule[.75pt]}]
+}
+
+%% Subsection
+\titleformat{\subsection}
+ {\subsecfont}{}{0em}
+ {\textsf{\thesubsection}~~\textcolor{gray!55!paper}{$|$}~~#1}
+\titleformat{name=\subsection,numberless}
+ {\subsecfont}{}{0em}
+ {#1}
+
+%% Subsubsection
+\titleformat{\subsubsection}
+ {\subsubsecfont}{\sffamily\thesubsubsection}{.5em}
+ {#1}
+\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}
+
+%%================================
+%% Icons
+%%================================
+\RequirePackage{tikz}
+\newcommand{\ideabulb}[2][0.15]{%
+ \scalebox{#1}{%
+ \begin{tikzpicture}
+ \filldraw[draw=#2,fill=#2] (0,0) circle [radius=1cm];
+ \filldraw[draw=paper,fill=paper,rounded corners=0.8pt]
+ [rotate=20] (-0.26,-0.66) rectangle (-0.06,-0.6)
+ [xshift=-0.4mm,yshift=1mm] (-0.26,-0.66) rectangle (0.02,-0.6)
+ [xshift=0.4mm,yshift=1mm] (-0.26,-0.66) rectangle (-0.06,-0.6);
+ \draw[draw=paper,line width=0.7mm] (-0.18,-0.46)
+ .. controls (-0.18,-0.28) and (-0.28,-0.12) ..(-0.4,0.1)
+ .. controls (-0.55,0.4) and (-0.3,0.64) ..(0,0.64)
+ .. controls (0.3,0.64) and (0.55,0.4) ..(0.4,0.1)
+ .. controls (0.28,-0.12) and (0.18,-0.28) ..(0.18,-0.46);
+ \end{tikzpicture}}}
+
+\newcommand{\questionmark}[2][0.15]{%
+ \scalebox{#1}{%
+ \begin{tikzpicture}
+ \filldraw[draw=#2,fill=#2] (0,0) circle [radius=1cm];
+ \filldraw[paper,yshift=0.5mm,scale=0.9] (-0.4,0.1) circle [radius=0.77mm];
+ \draw[draw=paper,line width=1.5mm,yshift=0.5mm,scale=0.9] (-0.4,0.1)
+ .. controls (-0.55,0.4) and (-0.3,0.64) ..(0,0.64)
+ .. controls (0.3,0.64) and (0.55,0.4) ..(0.4,0.1)
+ .. controls (0.28,-0.12) and (0.05,-0.28) ..(0.05,-0.3)
+ .. controls (0,-0.36) and (0.0,-0.45) ..(0.0,-0.5);
+ \fill[fill=paper,rounded corners=0.6mm]
+ (-0.09,-0.75) rectangle (0.09,-0.53);
+ \end{tikzpicture}}}
+
+%%================================
+%% Theorems
+%%================================
+\RequirePackage{mathtools}
+\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}}}
+
+\newtheoremstyle{basic}
+ {0pt}{0pt}{\normalfont}{0pt}
+ {}{\;}{0.25em}
+ {\thmname{#1}~\thmnumber{\textup{#2}}
+ \thmnote{\normalfont\sffamily\color{black}~(#3)}}
+
+\newtheoremstyle{emphasis}
+ {0pt}{0pt}{\itshape}{0pt}{}{}{0pt}
+ {\thmnote{\normalfont\sffamily\color{black}#3\hspace*{0.25em}}}
+
+\if@colorist@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{\sffamily\color{orange}\textsc{Theorem}}
+\def\lemmanameEN{\sffamily\color{orange}\textsc{Lemma}}
+\def\propositionnameEN{\sffamily\color{orange}\textsc{Proposition}}
+\def\corollarynameEN{\sffamily\color{orange}\textsc{Corollary}}
+\def\factnameEN{\sffamily\color{black}\textsc{Fact}}
+\def\conjecturenameEN{\sffamily\color{purple}\textsc{Conjecture}}
+\def\definitionnameEN{\sffamily\color{forestgreen}\textsc{Definition}}
+\def\examplenameEN{\sffamily\color{black}\textsc{Example}}
+\def\problemnameEN{\sffamily\color{black}\textsc{Problem}}
+\def\remarknameEN{\sffamily\color{black}\textsc{Remark}}
+
+%% French theorems names
+\def\theoremnameFR{\sffamily\color{orange}\textsc{Théorème}}
+\def\lemmanameFR{\sffamily\color{orange}\textsc{Lemme}}
+\def\propositionnameFR{\sffamily\color{orange}\textsc{Proposition}}
+\def\corollarynameFR{\sffamily\color{orange}\textsc{Corollaire}}
+\def\factnameFR{\sffamily\color{black}\textsc{Fait}}
+\def\conjecturenameFR{\sffamily\color{purple}\textsc{Conjecture}}
+\def\definitionnameFR{\sffamily\color{forestgreen}\textsc{Définition}}
+\def\examplenameFR{\sffamily\color{black}\textsc{Exemple}}
+\def\problemnameFR{\sffamily\color{black}\textsc{Problème}}
+\def\remarknameFR{\sffamily\color{black}\textsc{Remarque}}
+
+%% Chinese theorems names
+\def\theoremnameCN{\sffamily\color{orange}定理}
+\def\lemmanameCN{\sffamily\color{orange}引理}
+\def\propositionnameCN{\sffamily\color{orange}命题}
+\def\corollarynameCN{\sffamily\color{orange}推论}
+\def\factnameCN{\sffamily\color{black}事实}
+\def\conjecturenameCN{\sffamily\color{purple}猜想}
+\def\definitionnameCN{\sffamily\color{forestgreen}定义}
+\def\examplenameCN{\sffamily\color{black}例}
+\def\problemnameCN{\sffamily\color{black}问题}
+\def\remarknameCN{\sffamily\color{black}备注}
+
+%% Theorem environments
+\theoremstyle{basic}
+\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*}
+
+\theoremstyle{emphasis}
+\CreateTheorem{remark}<highest>
+\CreateTheorem*{remark*}
+
+\RequirePackage{marginnote}
+\newcommand{\mparadjust}[1]{\renewcommand*{\marginnotevadjust}{#1}}
+\apptocmd{\remark}{\reversemarginpar\mparadjust{-.25em}\marginnote{\ideabulb[0.3]{orange}\hspace*{-.5em}}\normalmarginpar}{}{\FAIL}
+\apptocmd{\conjecture}{\reversemarginpar\mparadjust{-.25em}\marginnote{\questionmark[0.3]{purple}\hspace*{-.5em}}\normalmarginpar}{}{\FAIL}
+
+\RequirePackage{iftex}
+\ifXeTeX
+\def\pgfsys@hboxsynced#1{%
+{%
+ \pgfsys@beginscope%
+ \setbox\pgf@hbox=\hbox{%
+ \hskip\pgf@pt@x%
+ \raise\pgf@pt@y\hbox{%
+ \pgf@pt@x=0pt%
+ \pgf@pt@y=0pt%
+ \special{pdf: content q}%
+ \pgflowlevelsynccm%
+ \pgfsys@invoke{q -1 0 0 -1 0 0 cm}%
+ \special{pdf: content -1 0 0 -1 0 0 cm q}
+ % translate to original coordinate system
+ \pgfsys@invoke{0 J [] 0 d}% reset line cap and dash
+ \wd#1=0pt%
+ \ht#1=0pt%
+ \dp#1=0pt%
+ \box#1%
+ \pgfsys@invoke{n Q Q Q}%
+ }%
+ \hss%
+ }%
+ \wd\pgf@hbox=0pt%
+ \ht\pgf@hbox=0pt%
+ \dp\pgf@hbox=0pt%
+ \pgfsys@hbox\pgf@hbox%
+ \pgfsys@endscope%
+}}
+\fi
+
+\theoremstyle{simple}% as the default style for user-defined environments
+
+\let\proof\relax
+\let\endproof\relax
+\def\proofnameCN{\proofname}
+\def\proofnameEN{\proofname}
+\def\proofnameFR{\proofname}
+\CreateTheorem*{proof}
+
+\RequirePackage[many]{tcolorbox}
+\if@colorclass@fast
+ \tcbstartdraftmode
+\fi
+\tcolorboxenvironment{theorem}
+ {enhanced jigsaw,pad at break*=1mm,breakable,colback=black!3!paper,
+ left=3.5mm,right=3.5mm,
+ opacityframe=0.9,colframe=orange,arc=.7mm}
+\tcolorboxenvironment{theorem*}
+ {enhanced jigsaw,pad at break*=1mm,breakable,colback=black!3!paper,
+ left=3.5mm,right=3.5mm,
+ opacityframe=0.9,colframe=orange,arc=.7mm}
+\tcolorboxenvironment{lemma}
+ {enhanced jigsaw,pad at break*=1mm,breakable,colback=black!3!paper,
+ left=3.5mm,right=3.5mm,
+ opacityframe=0.9,colframe=orange,arc=.7mm}
+\tcolorboxenvironment{lemma*}
+ {enhanced jigsaw,pad at break*=1mm,breakable,colback=black!3!paper,
+ left=3.5mm,right=3.5mm,
+ opacityframe=0.9,colframe=orange,arc=.7mm}
+\tcolorboxenvironment{proposition}
+ {enhanced jigsaw,pad at break*=1mm,breakable,colback=black!3!paper,
+ left=3.5mm,right=3.5mm,
+ opacityframe=0.9,colframe=orange,arc=.7mm}
+\tcolorboxenvironment{proposition*}
+ {enhanced jigsaw,pad at break*=1mm,breakable,colback=black!3!paper,
+ left=3.5mm,right=3.5mm,
+ opacityframe=0.9,colframe=orange,arc=.7mm}
+\tcolorboxenvironment{corollary}
+ {enhanced jigsaw,pad at break*=1mm,breakable,colback=black!3!paper,
+ left=3.5mm,right=3.5mm,
+ opacityframe=0.9,colframe=orange,arc=.7mm}
+\tcolorboxenvironment{corollary*}
+ {enhanced jigsaw,pad at break*=1mm,breakable,colback=black!3!paper,
+ left=3.5mm,right=3.5mm,
+ opacityframe=0.9,colframe=orange,arc=.7mm}
+
+\tcolorboxenvironment{fact}
+ {enhanced jigsaw,pad at break*=1mm,breakable,colback=gray!10!paper,
+ boxrule=0pt,frame hidden,arc=.7mm}
+\tcolorboxenvironment{fact*}
+ {enhanced jigsaw,pad at break*=1mm,breakable,colback=gray!10!paper,
+ boxrule=0pt,frame hidden,arc=.7mm}
+
+\tcolorboxenvironment{conjecture}
+ {enhanced jigsaw,pad at break*=1mm,breakable,colback=black!3!paper,
+ left=3.5mm,right=3.5mm,
+ opacityframe=0.7,colframe=purple,arc=.7mm}
+\tcolorboxenvironment{conjecture*}
+ {enhanced jigsaw,pad at break*=1mm,breakable,colback=black!3!paper,
+ left=3.5mm,right=3.5mm,
+ opacityframe=0.7,colframe=purple,arc=.7mm}
+
+\tcolorboxenvironment{definition}
+ {enhanced jigsaw,pad at break*=1mm,breakable,
+ left=4mm,right=4mm,top=1mm,bottom=1mm,
+ colback=lightorange!10!paper,boxrule=0pt,frame hidden,
+ borderline west={1.5mm}{-1mm}{forestgreen},arc=.7mm}
+\tcolorboxenvironment{definition*}
+ {enhanced jigsaw,pad at break*=1mm,breakable,
+ left=4mm,right=4mm,top=1mm,bottom=1mm,
+ colback=lightorange!10!paper,boxrule=0pt,frame hidden,
+ borderline west={1.5mm}{-1mm}{forestgreen},arc=.7mm}
+
+\tcolorboxenvironment{example}
+ {enhanced jigsaw,pad at break*=1mm,breakable,colback=gray!10!paper,
+ boxrule=0pt,frame hidden,arc=.7mm}
+\tcolorboxenvironment{example*}
+ {enhanced jigsaw,pad at break*=1mm,breakable,colback=gray!10!paper,
+ boxrule=0pt,frame hidden,arc=.7mm}
+
+\tcolorboxenvironment{problem}
+ {enhanced jigsaw,pad at break*=1mm,breakable,colback=yellow!25!paper,
+ boxrule=0pt,frame hidden,arc=.7mm}
+\tcolorboxenvironment{problem*}
+ {enhanced jigsaw,pad at break*=1mm,breakable,colback=yellow!25!paper,
+ boxrule=0pt,frame hidden,arc=.7mm}
+
+\ExplSyntaxOn
+\NewDocumentCommand \AfterEnvEnd { +m }
+ { \colorist_after_env_end:nw {#1} }
+\cs_new_protected:Npn \colorist_after_env_end:nw #1 #2
+ \if@ignore\@ignorefalse\ignorespaces\fi
+ { #2 \if@ignore\@ignorefalse\ignorespaces\fi #1 }
+ \NewDocumentCommand \ScanEnv { s m +m+m }
+ {
+ \IfBooleanTF {#1}
+ { \jinwen_scan_env_ignore_par:nTF }
+ { \jinwen_scan_env:nTF }
+ {#2} {#3} {#4}
+ }
+\cs_new_protected:Npn \jinwen_scan_env:nTF
+ { \__jinwen_scan_env:NnTF \c_false_bool }
+\cs_new_protected:Npn \jinwen_scan_env_ignore_par:nTF
+ { \__jinwen_scan_env:NnTF \c_true_bool }
+\tl_new:N \l__jinwen_collected_tl
+\cs_new_protected:Npn \__jinwen_scan_env:NnTF #1 #2 #3 #4
+ {
+ \tl_clear:N \l__jinwen_collected_tl
+ \peek_analysis_map_inline:n
+ {
+ \tl_put_right:Nn \l__jinwen_collected_tl {##1}
+ \int_compare:nNnTF { "##3 } = { 0 }
+ {
+ \exp_args:No \token_if_eq_meaning:NNTF {##1} \begin
+ { \peek_analysis_map_break:n { \__jinwen_chk_env:nTFn {#2} {#3} {#4} } }
+ {
+ \bool_lazy_and:nnF {#1}
+ { \exp_args:No \token_if_eq_meaning_p:NN {##1} \par }
+ { \__jinwen_scan_env_end:n {#4} }
+ }
+ }
+ { \int_compare:nNnF { "##3 } = { 10 } { \__jinwen_scan_env_end:n {#4} } }
+ }
+ }
+\cs_new_protected:Npn \__jinwen_scan_env_end:n #1
+ { \peek_analysis_map_break:n { \__jinwen_reinsert_tokens:nn {#1} { } } }
+\cs_new_protected:Npn \__jinwen_reinsert_tokens:nn #1 #2
+ {
+ \use:x
+ {
+ \tl_clear:N \exp_not:N \l__jinwen_collected_tl
+ \exp_not:n {#1} \l__jinwen_collected_tl #2
+ }
+ }
+\cs_new_protected:Npn \__jinwen_chk_env:nTFn #1 #2 #3 #4
+ {
+ \exp_args:Nx \__jinwen_reinsert_tokens:nn
+ { \str_if_eq:nnTF {#1} {#4} { \exp_not:n {#2} } { \exp_not:n {#3} } } { {#4} }
+ }
+\ExplSyntaxOff
+
+\def\scandefinitionenv{%
+ \AfterEnvEnd{%
+ \ScanEnv*{definition}%
+ {\vspace{-1.05\baselineskip}}%
+ {\ScanEnv*{definition*}%
+ {\vspace{-1.05\baselineskip}}%
+ {}}}}
+
+\AddToHook{env/definition/end}{\scandefinitionenv}%
+\AddToHook{env/definition*/end}{\scandefinitionenv}%
+
+%%================================
+%% Language configuration
+%%================================
+\if@colorist@polyglossia
+ \RequirePackage{polyglossia}
+ \setdefaultlanguage{english}
+ \setotherlanguage[frenchpart=false]{french}
+\else
+ \PassOptionsToPackage{french,english}{babel}
+ \RequirePackage{babel}
+ \frenchsetup{PartNameFull=false}
+\fi
+\newcommand{\colorist@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{\colorist@langconfig@english}{%
+ \selectlanguage{english}%
+}
+\newcommand{\colorist@langconfig@french}{%
+ \selectlanguage{french}%
+ \def\frenchpartname{Partie}%
+}
+\newcommand{\UseLanguageCORE}[1]{%
+ \ifstrequal{#1}{chinese}{\onehalfspacing\colorist@langconfig@chinese}{}%
+ \ifstrequal{#1}{Chinese}{\onehalfspacing\colorist@langconfig@chinese}{}%
+ \ifstrequal{#1}{english}{\setstretch{1.07}\colorist@langconfig@english}{}%
+ \ifstrequal{#1}{English}{\setstretch{1.07}\colorist@langconfig@english}{}%
+ \ifstrequal{#1}{french}{\setstretch{1.07}\colorist@langconfig@french}{}%
+ \ifstrequal{#1}{French}{\setstretch{1.07}\colorist@langconfig@french}{}%
+}
+\newcommand{\UseLanguage}[1]{%
+ \ifx\@onlypreamble\@notprerr%
+ \UseLanguageCORE{#1}%
+ \else%
+ \AfterEndPreamble{\UseLanguageCORE{#1}}%
+ \fi%
+}
+\newcommand{\UseOtherLanguage}[2]{%
+\begingroup%
+ \ifstrequal{#1}{chinese}{\colorist@langconfig@chinese}{}%
+ \ifstrequal{#1}{Chinese}{\colorist@langconfig@chinese}{}%
+ \ifstrequal{#1}{english}{\colorist@langconfig@english}{}%
+ \ifstrequal{#1}{English}{\colorist@langconfig@english}{}%
+ \ifstrequal{#1}{french}{\colorist@langconfig@french}{}%
+ \ifstrequal{#1}{French}{\colorist@langconfig@french}{}%
+ #2%
+\endgroup%
+}
+
+\ifbool{IsBook}{}{
+
+%%================================
+%% Title block style
+%%================================
+\renewcommand{\@maketitle}{%
+ \noindent%
+ {\textcolor{gray!55!paper}{\rule{\textwidth}{0.75pt}}}%
+ \vspace{-\parskip}%
+ \begin{center}%
+ {\large\@title}\\\medskip%
+ \color{black!80!paper}%
+ {\scshape\@author}\\\smallskip%
+ {\@date}%
+ \end{center}%
+ \vspace{-\parskip}%
+ \vspace{-.5\baselineskip}%
+ {\textcolor{gray!55!paper}{\rule{\textwidth}{0.75pt}}\par}%
+ \medskip%
+}
+\apptocmd{\maketitle}{\thispagestyle{fancy}}{}{\FAIL}
+
+%%================================
+%% Abstract style
+%%================================
+\renewenvironment{abstract}
+{\small\centerline{\textsc{\abstractname}\vspace{-0.3\baselineskip}}
+ \color{black!80!paper}\begin{quotation}}
+{\end{quotation}\medskip}
+
+}
+
+\endinput
+%%
+%% End of file `colorist/colorist.sty'.
diff --git a/macros/latex/contrib/easybook/doc/easybook-demo.pdf b/macros/latex/contrib/easybook/doc/easybook-demo.pdf
index 8fbd749d60..b4c9858e55 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 2babe3b6b1..a8a4d2e0e9 100644
--- a/macros/latex/contrib/easybook/doc/easybook-demo.tex
+++ b/macros/latex/contrib/easybook/doc/easybook-demo.tex
@@ -1,4 +1,5 @@
\documentclass[
+ class = book,
zihao = -4,
font = noto,
paper = a4paper,
@@ -97,7 +98,7 @@
\url{https://latexstudio.net} \\
\url{https://gitee.com/texl3/easybook}\thanks{Gitee为项目的主要发布地址。}
}
-\date{2021/03/15\hskip\ccwd\relax v1.23r}
+\date{2021/03/16\hskip\ccwd\relax v1.23s}
\frontmatter[roman]
\maketitle
diff --git a/macros/latex/contrib/easybook/doc/easybook.pdf b/macros/latex/contrib/easybook/doc/easybook.pdf
index 6a2c1e0cd2..7ff104be61 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 7d5f6e30e2..bd6c66ebc8 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/15\hskip\ccwd\relax v1.23r\thanks{\url{https://gitee.com/texl3/easybook}}}
+\date{2021/03/16\hskip\ccwd\relax v1.23s\thanks{\url{https://gitee.com/texl3/easybook}}}
\begin{document}
\maketitle
@@ -36,8 +36,8 @@
\end{frameverb}
\subsection{字体设置}
-\label{font settings}
-默认使用\CTeX 预置中文字库,当开启 \opt{font = noto} 选项时需要安装开源字体,中文使用方正系列的{\songti 方正书宋}、{\heiti 方正黑体}、{\kaishu 方正楷体}和{\fangsong 方正仿宋},英文使用思源系列的{\rmfamily Noto Serif}、{\sffamily Noto Sans}和{\ttfamily Noto Sans Mono},数学字体使用 \pkg{notomath}。相关选项可以见小节 \ref{document class options} 中的 \opt{font} 选项,字体点击此处下载\href{https://wws.lanzous.com/b01ns361i}{下载地址}。
+\label{subsec:font settings}
+默认使用\CTeX 预置中文字库,当开启 \opt{font = noto} 选项时需要安装开源字体,中文使用方正系列的{\songti 方正书宋}、{\heiti 方正黑体}、{\kaishu 方正楷体}和{\fangsong 方正仿宋},英文使用思源系列的{\rmfamily Noto Serif}、{\sffamily Noto Sans}和{\ttfamily Noto Sans Mono},数学字体使用 \pkg{notomath}。相关选项可以见节 \ref{sec:document class options} 中的 \opt{font} 选项,字体点击此处下载\href{https://wws.lanzous.com/b01ns361i}{下载地址}。
如果您不想使用\CTeX 默认字体和方正、思源字体,\textbf{自定义字体}需启用选项 \opt{font = none},并可在导言区设置中文字体,粗体与斜体不设置会产生警告。
\begin{ctexexam}
@@ -47,7 +47,7 @@
\end{ctexexam}
\section{文档类选项}
-\label{document class options}
+\label{sec:document class options}
标准 \cls{book} 文类与 \cls{ctexbook} 文类的选项同样适用于本文档。除此之外选项分为两类
\begin{itemize}
\item 带有 \rexptarget\rexpstar{} 号的选项,需要在引入文档类的时候设定。
@@ -80,7 +80,7 @@
\begin{syntax}
font = <adobe|founder|mac|windows|linux|(overleaf)|noto|none>
\end{syntax}
-传递给 \cls{ctexbook} 设置字体,最好不要使用原有的 \opt{fontset} 选项,默认情况下使用自定义字体而不开启这个选项,可根据安装的字体及电脑系统选取。\opt{noto} 与 \opt{none} 选项的相关描述见小节 \ref{font settings},\opt{overleaf} 是一个各系统通用选项,会检测系统环境选取对应字体。
+传递给 \cls{ctexbook} 设置字体,最好不要使用原有的 \opt{fontset} 选项,默认情况下使用自定义字体而不开启这个选项,可根据安装的字体及电脑系统选取。\opt{noto} 与 \opt{none} 选项的相关描述见小节 \ref{subsec:font settings},\opt{overleaf} 是一个各系统通用选项,会检测系统环境选取对应字体。
\changes{v1.21}{2021/01/12}{默认字体与\CTeX 一致,不再是自定义字体。}
\end{function}
@@ -91,28 +91,37 @@
设置页面大小,交给 \pkg{geometry} 宏包处理,可使用它支持的所有规格。建议选项 \opt{b5paper} 和 \opt{zihao = 5},选项 \opt{a4paper} 和 \opt{zihao = -4} 配合。
\end{function}
+\subsection{article 风格}
+\begin{function}[rEXP,added = 2021-03-16]{class}
+\begin{syntax}
+ class = <(book)|article>
+\end{syntax}
+设置文类风格,默认为 \opt{book} 文档类。选用 \opt{article} 使文档编号、结构等与 \cls{article} 文档类的特性相似,可用于短篇幅的文章,不要再使用 \tn{chapter} 命令,此时设置双栏目录的 \opt{style/multoc} 选项、小节 \ref{subsec:document command} 中打印目录命令的 \opt{multoc} 及 \opt{book} 选项均会失效,会以 \opt{section} 标题级别输出目录。
+\changes{v1.23s}{2021/03/16}{增加 article 文章风格,可用于短篇幅的文章。}
+\end{function}
+
\subsection{文档命令}
-\label{document command}
+\label{subsec: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{mainmatter*}
\tn{backmatter}
- \tn{tableofcontents*}\oarg{键值列表}
+ \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.23r}{2021/02/20}{重新定义文档结构划分命令。}
+\changes{v1.23s}{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}{为几个目录增加键值列表的选项,可设置输出级别以及是否加入主目录。}
+\opt{multoc} 与 \opt{style/multoc} 选项具有相同的效果,但是具有优先性且可单独设置不同目录是否双栏排版。\opt{book} 选项使目录标题按照 \opt{chapter} 级别输出,\opt{article} 选项使目录标题按照 \opt{article} 级别输出,默认为 \opt{chapter} 级别。
+\changes{v1.23s}{2021/03/15}{为几个目录增加键值列表的选项,可设置标题输出级别以及是否加入主目录。}
\end{function}
\section{接口选项}
@@ -150,9 +159,9 @@
number-sep = <(.)>
\end{syntax}
\changes{v1.10}{2021/01/08}{更改颜色实现方式与选项名。}
-\changes{v1.23r}{2021/02/02}{noto风格的数学字体独立出来,可自定义设置。}
-\changes{v1.23r}{2021/02/09}{增加控制页面横线粗细的选项。}
-\changes{v1.23r}{2021/03/15}{增加控制编号连接符的选项。}
+\changes{v1.23s}{2021/02/02}{noto风格的数学字体独立出来,可自定义设置。}
+\changes{v1.23s}{2021/02/09}{增加控制页面横线粗细的选项。}
+\changes{v1.23s}{2021/03/15}{增加控制编号连接符的选项。}
\end{function}
\begin{optdesc}
@@ -161,7 +170,7 @@
\begin{syntax}
\tn{definecolor}\oarg{类型}\marg{名称}\marg{模式列表}\marg{参数列表}
\end{syntax}
- 主题颜色用到这三个颜色,可以使用 \tn{definecolor} 命令进行更改,类似地更改超链接颜色见小节 \ref{hyperlinks}。
+ 主题颜色用到这三个颜色,可以使用 \tn{definecolor} 命令进行更改,类似地更改超链接颜色见小节 \ref{subsec:hyperlinks}。
\changes{v1.10}{2021/01/08}{可以自定义主题颜色。}
\end{function}
\item[multoc] 开启双栏目录,可与 \opt{onecolumn} 和 \opt{twocolumn} 选项配合出单栏正文、单栏目录,双栏正文、单栏目录,单栏正文、双栏目录和双栏正文、双栏目录四种方式 。
@@ -179,7 +188,7 @@
\end{optdesc}
\subsection{超链接}
-\label{hyperlinks}
+\label{subsec:hyperlinks}
\begin{function}[EXP,added = 2021-01-05,updated = 2021-01-08]{link/...,hyperlink,linkcolor,linktopage}
\begin{syntax}
以下选项路径为 \tn{ctexset}\marg{link/...}
@@ -215,7 +224,7 @@
\end{syntax}
行距因子用于设置各种行距倍数,只能是浮点数,不能带有长度单位。\tn{ctexset} 原有的行距选项 \opt{linespread} 失效。各行距既可在导言区全局设置也可正文中设置对后面生效,行距的意义为
\changes{v1.21}{2021/01/12}{增加脚注线间的距离选项。}
-\changes{v1.23r}{2021/02/09}{取消使用 \pkg{zhlineskip} 宏包设置数学间距。}
+\changes{v1.23s}{2021/02/09}{取消使用 \pkg{zhlineskip} 宏包设置数学间距。}
\end{function}
\begin{optdesc}
@@ -237,7 +246,7 @@
marginpart = <\tn{rmfamily}\tn{footnotesize}>
\end{syntax}
\changes{v1.10}{2021/01/08}{加入自定义非正文字体选项。}
-\changes{v1.23r}{2021/02/08}{修复使用 \tn{zihao} 命令设置字体失效的问题。}
+\changes{v1.23s}{2021/02/08}{修复使用 \tn{zihao} 命令设置字体失效的问题。}
\end{function}
\begin{optdesc}
@@ -249,17 +258,16 @@
\end{optdesc}
\subsection{参考文献}
-\begin{function}[EXP,added = 2021-01-11,updated = 2021-03-15]{bibset/...,backend,bib-style,cite-style,bibfile,\printbibliography}
+\begin{function}[EXP,added = 2021-01-11,updated = 2021-03-15]{bibset/...,backend,bib-style,cite-style,bibfile}
\begin{syntax}
以下选项路径为 \tn{ctexset}\marg{bibset/...}
backend = <(bibtex)|biblatex>
bib-style = <(numerical)|authoryear|其它格式>
cite-style = <标注风格>
bibfile = <refs.bib>
- \tn{printbibliography}\oarg{键值列表}
\end{syntax}
\changes{v1.21}{2021/01/11}{增加 \opt{bibset} 选项,可以使用 \hologo{BibTeX} 或 \hologo{biber} 编译参考文献。}
-\changes{v1.23r}{2021/02/23}{使用 \opt{bibset} 选项时可设置标注风格。}
+\changes{v1.23s}{2021/02/23}{使用 \opt{bibset} 选项时可设置标注风格。}
\end{function}
\begin{optdesc}
@@ -267,18 +275,25 @@
\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{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}
+\begin{function}[added = 2021-01-11,updated = 2021-03-15]{\printbibliography}
+\begin{syntax}
+ \tn{printbibliography}\oarg{键值列表}
+\end{syntax}
+两种方式\textbf{均使用}此命令打印参考文献,不同处理后端此命令的键值列表不同。使用 \hologo{BibTeX} 处理时选项与小节 \ref{subsec:document command} 目录的选项相同,使用 \hologo{biber} 处理时常用的选项如下
+\end{function}
+
+\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}
+
\subsection{定理样式}
-\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{function}[EXP,added = 2021-01-12,updated = 2021-03-13]{thmset/...,thmbox,numberwith,headpunct,bodyfont,notefont,headfont,headindent,spaceabove,spacebelow,spacepost}
\begin{syntax}
以下选项路径为 \tn{ctexset}\marg{thmset/...}
thmbox = <true|(false)>
@@ -291,11 +306,8 @@
spaceabove = <(0.75ex plus .1ex)>
spacebelow = <(0.75ex plus .1ex)>
spacepost = <(\tn{ccwd})>
- \tn{newtheorem}\oarg{键值列表}\marg{定理环境名}
- \tn{declaretheoremstyle}\oarg{键值列表}\marg{定理样式名}
\end{syntax}
\changes{v1.21}{2021/01/12}{增加配置定理环境样式的选项。}
-\changes{v1.23r}{2021/03/12}{重新定义了新定理环境命令 \tn{newtheorem}。}
\end{function}
\begin{optdesc}
@@ -309,6 +321,17 @@
\item[spaceabove] 定理环境前的间距。
\item[spacebelow] 定理环境后的间距。
\item[spacepost] 定理标题后与内容的间距。
+\end{optdesc}
+
+\begin{function}[added = 2021-01-12,updated = 2021-03-13]{\newtheorem, \declaretheoremstyle}
+\begin{syntax}
+ \tn{newtheorem}\oarg{键值列表}\marg{定理环境名}
+ \tn{declaretheoremstyle}\oarg{键值列表}\marg{定理样式名}
+\end{syntax}
+\changes{v1.23s}{2021/03/12}{重新定义了新定理环境命令 \tn{newtheorem}。}
+\end{function}
+
+\begin{optdesc}
\item[\tn{newtheorem}] 定义新的定理类环境,可选参数与 \pkg{thmtools} 宏包定理命令 \tn{declaretheorem} 的参数一致。常用的选项如下
\begin{description}
\item[name] 定理的标题。默认值是环境的名称,并且首字母大写(英文标题)。
@@ -360,7 +383,7 @@
\end{function}
\subsection{页眉页脚}
-\begin{function}[EXP,added = 2021-01-13,updated = 2021-03-14]{hdrset/...,head-foot,chap-mark,sec-mark,headrule,footrule,footnoterule,\easyhead,\easyfoot,...}
+\begin{function}[EXP,added = 2021-01-13,updated = 2021-03-14]{hdrset/...,head-foot,chap-mark,sec-mark,headrule,footrule,footnoterule}
\begin{syntax}
以下选项路径为 \tn{ctexset}\marg{hdrset/...}
head-foot = <页眉页脚中的内容>
@@ -369,12 +392,20 @@
headrule = <页眉横线格式>
footrule = <页脚横线格式>
footnoterule = <脚注横线格式>
+\end{syntax}
+\opt{hdrset} 设置的命令由 \pkg{fancyhdr} 宏包提供支持,\opt{headrule}、\opt{footrule} 和 \opt{footnoterule} 三个横线选项一般可以使用 \tn{hrule} width \meta{长度} height \meta{高度} 命令来绘制,脚注横线默认为空。当然,手动绘制横线时线条粗细选项 \opt{style/rulewidth} 会失效。
+\changes{v1.21}{2021/01/11}{修复单面文档时页眉横线消失的问题。}
+\changes{v1.21}{2021/01/13}{增加配置页眉页脚的选项。}
+\changes{v1.23s}{2021/03/08}{优化页眉页脚设置,增加 \opt{chap-mark} 和 \opt{sec-mark} 选项。}
+\changes{v1.23s}{2021/03/14}{可以手动绘制页眉、页脚和脚注的横线。}
+\end{function}
+
+\begin{function}[added = 2021-01-13,updated = 2021-03-14]{,\easyhead,\easyfoot}
+\begin{syntax}
\tn{easyhead}\oarg{位置}\marg{内容}
\tn{easyfoot}\oarg{位置}\marg{内容}
\end{syntax}
-\opt{hdrset} 设置的命令由 \pkg{fancyhdr} 宏包提供支持,命令 \tn{easyhead} 和 \tn{easyfoot} 的含义与 \tn{fancyhead} 和 \tn{fancyfoot} 相同,它们用于 \opt{head-foot} 选项中,设置的是一个名为 \opt{fancy} 的页面风格。\pkg{fancyhdr} 将页眉页脚分成了左中右和奇数页(odd)、偶数页(even)共12个部分,可选参数中E、O代表偶数、奇数,L、C、R代表左、中、右部分。单面打印时,含有偶数的选项无效。
-
-\opt{headrule}、\opt{footrule} 和 \opt{footnoterule} 三个横线选项一般可以使用 \tn{hrule} width \meta{长度} height \meta{高度} 命令来绘制,脚注横线默认为空。当然,手动绘制横线时线条粗细选项 \opt{style/rulewidth} 会失效。
+命令 \tn{easyhead} 和 \tn{easyfoot} 的含义与 \tn{fancyhead} 和 \tn{fancyfoot} 相同,它们用于 \opt{head-foot} 选项中,设置的是一个名为 \opt{fancy} 的页面风格。\pkg{fancyhdr} 将页眉页脚分成了左中右和奇数页(odd)、偶数页(even)共12个部分,可选参数中E、O代表偶数、奇数,L、C、R代表左、中、右部分。单面打印时,含有偶数的选项无效。
\begin{ctexexam}
\ctexset
{
@@ -391,14 +422,10 @@
}
}
\end{ctexexam}
-\changes{v1.21}{2021/01/11}{修复单面文档时页眉横线消失的问题。}
-\changes{v1.21}{2021/01/13}{增加配置页眉页脚的选项。}
-\changes{v1.23r}{2021/03/08}{优化页眉页脚设置,增加 \opt{chap-mark} 和 \opt{sec-mark} 选项。}
-\changes{v1.23r}{2021/03/14}{可以手动绘制页眉、页脚和脚注的横线。}
\end{function}
\subsection{目录样式}
-\begin{function}[EXP,added = 2021-01-13,updated = 2021-01-15]{tocset/.../format,tocset/.../indent,tocset/.../rule,lists/lolskip,lists/belowoffset,tocset/belowoffset,\tocrule}
+\begin{function}[EXP,added = 2021-01-13,updated = 2021-01-15]{tocset/.../format,tocset/.../indent,tocset/.../rule,lists/lolskip,lists/belowoffset,tocset/belowoffset}
\begin{syntax}
format = <目录标题格式>
indent = <目录标题左边缩进>
@@ -406,12 +433,17 @@
lolskip = <(0.8pc)>
lists/belowoffset = <(0pc)>
belowoffset = <(-1pc)>
- \tn{tocrule} = \oarg{引导点间距|(0.7pc)}\oarg{引导点大小|(1.2)}\marg{引导点}\oarg{页码格式}
\end{syntax}
\opt{tocset} 将目录样式交给 \pkg{titletoc} 处理,预置了 \opt{part}、\opt{chapter}、\opt{section}、\opt{subsection} 和 \opt{lists} 五种级别的目录标题,键值列表中的...代表它们。\opt{lists} 为图片、表格和代码目录格式的级别。
\opt{lolskip} 是代码目录中章之间的代码标题的距离,使用刚性间距,与\CTeX 的 \opt{lotskip} 和 \opt{lofskip} 类似,它们的值均默认0.8pc。\opt{belowoffset} 选项为目录总标题 \tn{contentsname} 后的间距补偿,一般为负值,用于抵消 \opt{format} 中设置的间距。\opt{lists} 中的 \opt{belowoffset} 意义类似,但是一般为正值,在 \opt{lolskip = 0pc} 时使用。建议 \opt{lolskip+lists/format/addvspace = -belowoffset}。
+\changes{v1.21}{2021/01/13}{增加配置目录样式的选项。}
+\end{function}
+\begin{function}[added = 2021-01-13,updated = 2021-01-15]{\tocrule}
+\begin{syntax}
+ \tn{tocrule} = \oarg{引导点间距|(0.7pc)}\oarg{引导点大小|(1.2)}\marg{引导点}\oarg{页码格式}
+\end{syntax}
\tn{tocrule} 命令生成目录引导线,需要在 \opt{rule} 选项中使用,其中引导线间距需带有长度单位,引导点大小不带单位,为引导点符号正常大小的倍数,引导点一般为英文句号或 \tn{cdot} 中心点符号。页码格式的内容位于页码前面,可以设置页码字体、距离。
\begin{ctexexam}
\ctexset
@@ -427,7 +459,6 @@
}
}
\end{ctexexam}
-\changes{v1.21}{2021/01/13}{增加配置目录样式的选项。}
\end{function}
\section{常用环境}
@@ -458,7 +489,7 @@
\end{function}
\subsubsection{排序列表}
-\label{sort list}
+\label{subsec:sort list}
使用 \opt{enumerate} 环境可创建排序列表,使用 \opt{enumerate*} 环境产生行内部列表,可以使用\textbf{A、a、I、i和1}作为可选项为 \opt{enumerate} 与 \opt{enumerate*} 格式化标签。若生成\textbf{Item I、Item II、Item III}格式可以这样
\begin{ctexexam}
\begin{enumerate*}[(a)]
@@ -494,25 +525,25 @@
\end{function}
\subsection{习题}
-\label{exercise}
+\label{subsec:exercise}
\begin{function}[added = 2021-01-05,updated = 2021-03-13]{exercise}
\begin{syntax}
\tn{begin}\marg{exercise}\oarg{颜色名|(LightYellow)}\oarg{编号|(1.)}\oarg{标题|(习题)}\oarg{配置选项}
\tn{item} <习题内容>
\tn{end}\marg{exercise}
\end{syntax}
-习题环境 \opt{exercise} 的标题紧接上一节编号并加入目录与页眉,当使用星号环境时不进行编号。三个可选参数中颜色为自定义或 \pkg{xcolor} 包含的颜色名称,正文编号格式与小节 \ref{sort list} 排序列表相同,标题名默认为摘要,参数只能\textbf{从右往左}省略。
+习题环境 \opt{exercise} 的标题紧接上一节编号并加入目录与页眉,当使用星号环境时不进行编号。三个可选参数中颜色为自定义或 \pkg{xcolor} 包含的颜色名称,正文编号格式与小节 \ref{subsec:sort list} 排序列表相同,标题名默认为摘要,参数只能\textbf{从右往左}省略。
\begin{ctexexam}
\begin{exercise}[LightYellow][1.][习题]
\item 习题内容
\item 习题内容
\end{exercise}
\end{ctexexam}
-\changes{v1.23r}{2021/02/08}{增加准确的习题盒子标题目录锚点。}
+\changes{v1.23s}{2021/02/08}{增加准确的习题盒子标题目录锚点。}
\end{function}
\subsection{盒子}
-盒子以及小节 \ref{exercise} 中 \opt{exercise} 环境配置的选项由 \pkg{tcolorbox} 提供支持,具体选项可见宏包文档的 Option Keys 一节,可以进行边距、字体及背景颜色等各种个性化设置,一些配置会覆盖之前预置的设置。
+盒子以及小节 \ref{subsec:exercise} 中 \opt{exercise} 环境配置的选项由 \pkg{tcolorbox} 提供支持,具体选项可见宏包文档的 Option Keys 一节,可以进行边距、字体及背景颜色等各种个性化设置,一些配置会覆盖之前预置的设置。
\subsubsection{摘要盒子}
\begin{function}[added = 2021-01-05,updated = 2021-03-13]{outline}
@@ -558,10 +589,6 @@
\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}
@@ -642,7 +669,7 @@
\begin{syntax}
\tn{includepdf}\oarg{键值列表}\marg{文档名}
\end{syntax}
-该命令由 \pkg{pdfpages} 提供,将其他 pdf 文档插入当前文档,可以指定插入页数、逻辑页和横向等,详情查看宏包文档。
+该命令由 \pkg{pdfpages} 提供,将其他 pdf 文档插入当前文档,比如插入封面,可以指定插入页数、逻辑页和横向等,详情查看宏包文档。
\end{function}
\subsection{横向页面}
diff --git a/macros/latex/contrib/easybook/easybook.cls b/macros/latex/contrib/easybook/easybook.cls
index 4d3c1759ca..97f532796f 100644
--- a/macros/latex/contrib/easybook/easybook.cls
+++ b/macros/latex/contrib/easybook/easybook.cls
@@ -7,9 +7,9 @@
%% conditions of the CC-BY 4.0 License.
%% The latest version of this license is in
%% https://creativecommons.org/licenses/by/4.0/legalcode
-\NeedsTeXFormat{LaTeX2e}
+\NeedsTeXFormat{LaTeX2e}[2020/10/01]
\RequirePackage{l3keys2e}
-\ProvidesExplClass{easybook}{2021/03/15}{1.23r}{}
+\ProvidesExplClass{easybook}{2021/03/16}{1.23s}{}
\cs_generate_variant:Nn \keys_define:nn {nx}
\cs_generate_variant:Nn \int_to_arabic:n {v}
@@ -29,6 +29,7 @@
\bool_set_true:N \l__zhtitle_bool
\bool_set_true:N \l__lang_chinese_bool
\bool_set_true:N \l__page_twoside_bool
+\bool_set_true:N \l__class_book_bool
\clist_new:N \g__options_clist
\keys_define:nn {easybook}
@@ -68,7 +69,13 @@
\__put_ctexbook:n {oneside}
},
- unknown .code:n =
+ class .choice:,
+ class .value_required:n = true,
+ class/book .code:n = {},
+ class/article .code:n = {\bool_set_false:N \l__class_book_bool},
+ class .initial:n = book,
+
+ unknown .code:n =
{\clist_gput_right:No \g__options_clist{\CurrentOption}}
}
@@ -566,97 +573,82 @@
{\section*{\phantomsection#1}}
\__markboth:n {#1}
}
+\cs_new_protected:Npn \__ifmultoc_pre_set:
+ {
+ \bool_if:NTF \l__class_book_bool
+ {
+ \if@twocolumn
+ \@restonecoltrue
+ \onecolumn
+ \bool_if:NT \l__multoc_bool{\twocolumn}
+ \else
+ \@restonecolfalse
+ \bool_if:NT \l__multoc_bool{\twocolumn}
+ \fi
+ }{\tl_set:Nn \l__toc_type_tl{article}}
+ }
+\cs_new_protected:Npn \__ifmultoc_after_set:
+ {
+ \bool_if:NTF \l__class_book_bool
+ {
+ \if@restonecol
+ \twocolumn
+ \else
+ \onecolumn
+ \fi
+ }{\tl_set:Nn \l__toc_type_tl{article}}
+ }
\RenewDocumentCommand{\tableofcontents}{o}
{
\group_begin:
\IfValueT {#1}{\keys_set:nn {listoc}{#1}}
- \if@twocolumn
- \@restonecoltrue\onecolumn
- \bool_if:NT \l__multoc_bool{\twocolumn}
- \else
- \@restonecolfalse
- \bool_if:NT \l__multoc_bool{\twocolumn}
- \fi
+ \__ifmultoc_pre_set:
\__title_mark:n {\contentsname}
\vspace*{\dim_use:N \l__toc_offset_dim}
\@starttoc{toc}
- \if@restonecol
- \twocolumn
- \else
- \onecolumn
- \fi
+ \__ifmultoc_after_set:
\group_end:
}
\RenewDocumentCommand{\listoffigures}{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
+ \__ifmultoc_pre_set:
\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}
- \if@restonecol
- \twocolumn
- \else
- \onecolumn
- \fi
+ \__ifmultoc_after_set:
\group_end:
}
\RenewDocumentCommand{\listoftables}{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
+ \__ifmultoc_pre_set:
\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}
- \if@restonecol
- \twocolumn
- \else
- \onecolumn
- \fi
+ \__ifmultoc_after_set:
\group_end:
}
\NewDocumentCommand{\listoflistings}{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
+ \__ifmultoc_pre_set:
\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}
- \if@restonecol
- \twocolumn
- \else
- \onecolumn
- \fi
+ \__ifmultoc_after_set:
\group_end:
}
@@ -669,9 +661,9 @@
]
\indexsetup
{
- 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}
+ level = \bool_if:NTF \l__class_book_bool{\chapter*}{\section*},
+ toclevel = \bool_if:NTF \l__class_book_bool{chapter}{section},
+ firstpagestyle = \bool_if:NTF \l__class_book_bool{plain}{fancy}
}
\__patch_cmd:Nnn \imki@indexheaders
{\@mkboth{\MakeUppercase\indexname}{\MakeUppercase\indexname}}
@@ -724,49 +716,46 @@
\captionsetup[figure][bi-second]{name = Figure}
\captionsetup[table][bi-second]{name = Table}
\cs_new:Npn \__arabic:n #1{\int_to_arabic:v {c@#1}}
-\AtBeginDocument
+\cs_new_protected:Npn \__separator_set:n #1
{
- \cs_new_protected:Npn \__separator_set:n #1
+ \cs_set:cpn {the#1}
{
- \cs_set:cpn {the#1}
+ \int_compare:nT {\c@chapter > 0}
{
- \int_compare:nT {\c@chapter > 0}
- {
- \thechapter
- \use:c {l__#1_separator_tl}
- }
- \__arabic:n {#1}
+ \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
+ }
+\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}
{
- \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 = {}}
- }
+ \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}
@@ -1177,13 +1166,7 @@
{
\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
+ \__ifmultoc_pre_set:
\cs_set:Npn \bibsection
{
\IfBooleanTF {##1}
@@ -1191,11 +1174,7 @@
{\__title_mark_intoc:n {\bibname}}
}
\exp_args:NV \bibliography\l__bib_file_tl
- \if@restonecol
- \twocolumn
- \else
- \onecolumn
- \fi
+ \__ifmultoc_after_set:
\group_end:
}
}
diff --git a/macros/latex/contrib/gridpapers/README.md b/macros/latex/contrib/gridpapers/README.md
new file mode 100644
index 0000000000..a9be615209
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/README.md
@@ -0,0 +1,113 @@
+# The *gridpapers* package
+Make your own quadrille, graph, hex, etc. paper! Uses the [PGF/TikZ](https://en.wikipedia.org/wiki/PGF/TikZ) package for LaTeX, which should be part of any modern TeX installation. All colors and spacing are customizable.
+
+There are .tex files in the examples/
+directory to help get you started with customization.
+Each tex file has an almost-empty body, with a `\usepackage` statement
+that you can customize. For example,
+examples/engineer-pad.tex looks like this:
+```latex
+\documentclass{article}
+\usepackage[pattern=majmin, colorset=engineer]{gridpapers}
+\begin{document}
+\thispagestyle{empty}
+~
+\end{document}
+```
+(The `~` in the body forces a non-empty body, or else latex wouldn't
+generate a PDF).
+
+Note: This package is distinct from a different package with a similar
+name, [graphpaper (on CTAN)](https://www.ctan.org/pkg/graphpaper).
+
+Installation
+------------
+If `gridpapers` is already provided in your TeX distribution, skip
+this section. You should be able to install `gridpapers` [from the
+CTAN](https://www.ctan.org/pkg/gridpapers) via your distribution's
+utility (e.g. the TeX Live Utility). Alternatively, you can get the
+package from the [source repository on
+GitHub](https://github.com/mcnees/LaTeX-Graph-Paper). If you do not
+want to do a "full" installation, just copy gridpapers.sty into the
+same directory as your LaTeX source.
+
+Usage
+-----
+
+All the configuration happens via the `\usepackage` command. The
+current valid options are:
+
+* `pattern=<name>`:
+Valid pattern names are:
+`std,stdeight,majmin,dot,hex,tri,iso,lightcone,ruled,doubleruled`. Default
+is `std`. Patterns come with default page geometry (size and margins;
+see `geometry`), and default 'fullness' (whether they fill the page or
+not; see options `fullpage` and `textarea`).
+* `colorset=<name>`:
+Valid color preset names are:
+`std,precocious,brickred,engineer,plumpad`. Default is `std`. A
+preset determines the `majorcolor`, `minorcolor`, and `bgcolor` all at
+once. But, you can start from a preset and then override some colors.
+* `majorcolor=<color>`: Override the preset "major" color. This can
+ be a named color, or using the syntax from xcolor to mix colors
+ together.
+* `minorcolor=<color>`: Override the preset "minor" color. As above.
+* `bgcolor=<color>`: Override the preset background color. As above.
+* `patternsize=<length>`: Override the preset pattern size. The
+ meaning of this length argument is different for each pattern; see
+ PDF documentation for full details..
+* `dotsize=<length>`: Controls the size of the dots themselves for
+ `pattern=dot`. Default: `.7pt`
+* `fullpage`: Make the pattern fill the whole page.
+* `textarea`: Make the pattern fill only the text area of the
+ document. At most one of the `fullpage` or `textarea` can be
+ specified. If one is specified, it will override the default
+ 'fullness' setting of the pattern.
+* `geometry={<geometry spec>}`: Page geometry specification, using the
+ syntax of the geometry package. If the geometry package was loaded
+ before gridpapers, this option will be ignored. This specification
+ will override the pattern's default page geometry.
+
+For example, let's say you want to use the `tri` pattern, which by
+default fills the page. But you want it to fill just the textarea of
+an A4 page with 2cm margins, and you want the triangles to be .75cm long.
+Finally, you like the colors of the `engineer` set, but want a white
+background. Then you would write:
+```latex
+\usepackage[pattern=tri,
+ patternsize=0.75cm,
+ textarea,
+ colorset=engineer,
+ bgcolor=white,
+ geometry={a4paper, margin=2cm}]{gridpapers}
+```
+
+Gallery
+-------
+
+Some example styles:
+
+![Standard](https://raw.githubusercontent.com/mcnees/LaTeX-Graph-Paper/screenshots/std.jpg "Standard")
+
+![Quad](https://raw.githubusercontent.com/mcnees/LaTeX-Graph-Paper/screenshots/quad.jpg "Quadrille")
+
+![Hex](https://raw.githubusercontent.com/mcnees/LaTeX-Graph-Paper/screenshots/hex.jpg "Hex")
+
+![Dots](https://raw.githubusercontent.com/mcnees/LaTeX-Graph-Paper/screenshots/dot.jpg "Dots")
+
+![Light cone](https://raw.githubusercontent.com/mcnees/LaTeX-Graph-Paper/screenshots/lightcone.jpg "Light cone")
+
+![Precocious Engineer](https://raw.githubusercontent.com/mcnees/LaTeX-Graph-Paper/screenshots/rosie.png "Precocious Engineer color scheme")
+
+![Hex Engineer](https://raw.githubusercontent.com/mcnees/LaTeX-Graph-Paper/screenshots/hexengineer.png "Hex grid with Engineering Pad color scheme")
+
+Credits
+-------
+
+This package was created by [Robert McNees](http://jacobi.luc.edu/)
+with additional contributions from [Leo
+C. Stein](http://duetosymmetry.com/), and is maintained by both. This
+material is subject to the [LaTeX Project Public License
+1.3c](https://www.ctan.org/license/lppl1.3), (c) 2017-2021. The
+hexagon pattern code is [due to Philippe
+Goutet](https://tex.stackexchange.com/questions/6019/drawing-hexagons/6128#6128).
diff --git a/macros/latex/contrib/gridpapers/examples/custom-colors.tex b/macros/latex/contrib/gridpapers/examples/custom-colors.tex
new file mode 100644
index 0000000000..1dcc940489
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/examples/custom-colors.tex
@@ -0,0 +1,18 @@
+\documentclass{article}
+
+\usepackage{xcolor}
+
+% See the documentation of the xcolor package to learn about different
+% color models for specifying colors
+\definecolor{mydeepgreen}{rgb}{0.07, 0.56, 0.04}
+
+% You can easily mix colors by using the ! syntax from xcolor. Here
+% we use it to mix 40% of our color with 60% white.
+\usepackage[pattern=majmin,
+ majorcolor=mydeepgreen,
+ minorcolor={mydeepgreen!40}]{gridpapers}
+
+\begin{document}
+\thispagestyle{empty}
+~
+\end{document}
diff --git a/macros/latex/contrib/gridpapers/examples/dot-grid-10spi.tex b/macros/latex/contrib/gridpapers/examples/dot-grid-10spi.tex
new file mode 100644
index 0000000000..083928b3f0
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/examples/dot-grid-10spi.tex
@@ -0,0 +1,8 @@
+\documentclass{article}
+
+\usepackage[pattern=dot]{gridpapers}
+
+\begin{document}
+\thispagestyle{empty}
+~
+\end{document}
diff --git a/macros/latex/contrib/gridpapers/examples/dot-grid-5spi.tex b/macros/latex/contrib/gridpapers/examples/dot-grid-5spi.tex
new file mode 100644
index 0000000000..6d9bb6a8db
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/examples/dot-grid-5spi.tex
@@ -0,0 +1,8 @@
+\documentclass{article}
+
+\usepackage[pattern=dot, patternsize=0.2in]{gridpapers}
+
+\begin{document}
+\thispagestyle{empty}
+~
+\end{document}
diff --git a/macros/latex/contrib/gridpapers/examples/engineer-pad.tex b/macros/latex/contrib/gridpapers/examples/engineer-pad.tex
new file mode 100644
index 0000000000..49bb239059
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/examples/engineer-pad.tex
@@ -0,0 +1,8 @@
+\documentclass{article}
+
+\usepackage[pattern=majmin, colorset=engineer]{gridpapers}
+
+\begin{document}
+\thispagestyle{empty}
+~
+\end{document}
diff --git a/macros/latex/contrib/gridpapers/examples/engineer-paper-8spi.tex b/macros/latex/contrib/gridpapers/examples/engineer-paper-8spi.tex
new file mode 100644
index 0000000000..6260335d76
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/examples/engineer-paper-8spi.tex
@@ -0,0 +1,8 @@
+\documentclass{article}
+
+\usepackage[pattern=majmin, colorset=engineer, bgcolor=white]{gridpapers}
+
+\begin{document}
+\thispagestyle{empty}
+~
+\end{document}
diff --git a/macros/latex/contrib/gridpapers/examples/graph-paper-8spi.tex b/macros/latex/contrib/gridpapers/examples/graph-paper-8spi.tex
new file mode 100644
index 0000000000..5e01e04e8f
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/examples/graph-paper-8spi.tex
@@ -0,0 +1,8 @@
+\documentclass{article}
+
+\usepackage[pattern=majmin]{gridpapers}
+
+\begin{document}
+\thispagestyle{empty}
+~
+\end{document}
diff --git a/macros/latex/contrib/gridpapers/examples/graph-paper.tex b/macros/latex/contrib/gridpapers/examples/graph-paper.tex
new file mode 100644
index 0000000000..4474fc44ed
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/examples/graph-paper.tex
@@ -0,0 +1,8 @@
+\documentclass{article}
+
+\usepackage[pattern=std]{gridpapers}
+
+\begin{document}
+\thispagestyle{empty}
+~
+\end{document}
diff --git a/macros/latex/contrib/gridpapers/examples/grid-with-light-cones.tex b/macros/latex/contrib/gridpapers/examples/grid-with-light-cones.tex
new file mode 100644
index 0000000000..04cebdd74f
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/examples/grid-with-light-cones.tex
@@ -0,0 +1,8 @@
+\documentclass{article}
+
+\usepackage[pattern=lightcone]{gridpapers}
+
+\begin{document}
+\thispagestyle{empty}
+~
+\end{document}
diff --git a/macros/latex/contrib/gridpapers/examples/hex-engineer-letterpaper-fullpage.tex b/macros/latex/contrib/gridpapers/examples/hex-engineer-letterpaper-fullpage.tex
new file mode 100644
index 0000000000..70d925fdd3
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/examples/hex-engineer-letterpaper-fullpage.tex
@@ -0,0 +1,8 @@
+\documentclass{article}
+
+\usepackage[pattern=hex, colorset=engineer, fullpage, geometry={letterpaper}]{gridpapers}
+
+\begin{document}
+\thispagestyle{empty}
+~
+\end{document}
diff --git a/macros/latex/contrib/gridpapers/examples/hex-grid-large.tex b/macros/latex/contrib/gridpapers/examples/hex-grid-large.tex
new file mode 100644
index 0000000000..0aaa4b1814
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/examples/hex-grid-large.tex
@@ -0,0 +1,8 @@
+\documentclass{article}
+
+\usepackage[pattern=hex]{gridpapers}
+
+\begin{document}
+\thispagestyle{empty}
+~
+\end{document}
diff --git a/macros/latex/contrib/gridpapers/examples/hex-grid-small.tex b/macros/latex/contrib/gridpapers/examples/hex-grid-small.tex
new file mode 100644
index 0000000000..8b532f90bb
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/examples/hex-grid-small.tex
@@ -0,0 +1,8 @@
+\documentclass{article}
+
+\usepackage[pattern=hex, patternsize=0.0833in]{gridpapers}
+
+\begin{document}
+\thispagestyle{empty}
+~
+\end{document}
diff --git a/macros/latex/contrib/gridpapers/examples/isometric-grid.tex b/macros/latex/contrib/gridpapers/examples/isometric-grid.tex
new file mode 100644
index 0000000000..7e0678d30d
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/examples/isometric-grid.tex
@@ -0,0 +1,8 @@
+\documentclass{article}
+
+\usepackage[pattern=iso]{gridpapers}
+
+\begin{document}
+\thispagestyle{empty}
+~
+\end{document}
diff --git a/macros/latex/contrib/gridpapers/examples/plum-graph-paper.tex b/macros/latex/contrib/gridpapers/examples/plum-graph-paper.tex
new file mode 100644
index 0000000000..09ef97cbea
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/examples/plum-graph-paper.tex
@@ -0,0 +1,8 @@
+\documentclass{article}
+
+\usepackage[pattern=majmin, colorset=plumpad]{gridpapers}
+
+\begin{document}
+\thispagestyle{empty}
+~
+\end{document}
diff --git a/macros/latex/contrib/gridpapers/examples/precocious-young-engineer.tex b/macros/latex/contrib/gridpapers/examples/precocious-young-engineer.tex
new file mode 100644
index 0000000000..1e33ba820c
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/examples/precocious-young-engineer.tex
@@ -0,0 +1,8 @@
+\documentclass{article}
+
+\usepackage[pattern=majmin, colorset=precocious]{gridpapers}
+
+\begin{document}
+\thispagestyle{empty}
+~
+\end{document}
diff --git a/macros/latex/contrib/gridpapers/examples/quadrille-10spi.tex b/macros/latex/contrib/gridpapers/examples/quadrille-10spi.tex
new file mode 100644
index 0000000000..4474fc44ed
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/examples/quadrille-10spi.tex
@@ -0,0 +1,8 @@
+\documentclass{article}
+
+\usepackage[pattern=std]{gridpapers}
+
+\begin{document}
+\thispagestyle{empty}
+~
+\end{document}
diff --git a/macros/latex/contrib/gridpapers/examples/quadrille-8spi.tex b/macros/latex/contrib/gridpapers/examples/quadrille-8spi.tex
new file mode 100644
index 0000000000..fcc8b91ed7
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/examples/quadrille-8spi.tex
@@ -0,0 +1,8 @@
+\documentclass{article}
+
+\usepackage[pattern=stdeight]{gridpapers}
+
+\begin{document}
+\thispagestyle{empty}
+~
+\end{document}
diff --git a/macros/latex/contrib/gridpapers/examples/red-graph.tex b/macros/latex/contrib/gridpapers/examples/red-graph.tex
new file mode 100644
index 0000000000..8113ebca91
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/examples/red-graph.tex
@@ -0,0 +1,8 @@
+\documentclass{article}
+
+\usepackage[pattern=majmin, colorset=brickred]{gridpapers}
+
+\begin{document}
+\thispagestyle{empty}
+~
+\end{document}
diff --git a/macros/latex/contrib/gridpapers/examples/triangular-grid.tex b/macros/latex/contrib/gridpapers/examples/triangular-grid.tex
new file mode 100644
index 0000000000..2120eac289
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/examples/triangular-grid.tex
@@ -0,0 +1,8 @@
+\documentclass{article}
+
+\usepackage[pattern=tri]{gridpapers}
+
+\begin{document}
+\thispagestyle{empty}
+~
+\end{document}
diff --git a/macros/latex/contrib/gridpapers/gridpapers.dtx b/macros/latex/contrib/gridpapers/gridpapers.dtx
new file mode 100644
index 0000000000..c3584ef59f
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/gridpapers.dtx
@@ -0,0 +1,786 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2021 by Robert McNees <rmcnees@luc.edu>, Leo C. Stein <leo.stein@gmail.com>
+% ---------------------------------------------------------------------------
+% 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 Maintainers of this work are Robert McNees, Leo C. Stein.
+%
+% This work consists of the files gridpapers.dtx and gridpapers.ins
+% and the derived filebase gridpapers.sty.
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{gridpapers.dtx}
+%</driver>
+%
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[dvipsnames]{xcolor}
+\usepackage[pattern=stdeight, textarea,
+ majorcolor=cornflower!30, minorcolor=cornflower!10,
+ geometry={margin=1in, left=2in}]{gridpapers}[2021/03/14]
+\usepackage{hyperref}
+\hypersetup{colorlinks,urlcolor=NavyBlue,citecolor=NavyBlue,linkcolor=NavyBlue,
+ pdfauthor={Robert McNees and Leo C. Stein},
+ pdftitle={The gridpapers package}}
+\usepackage{fontawesome}
+\definecolor{twitterblue}{RGB}{64,153,255}
+\newcommand{\email}[1]{$\langle$\href{mailto:#1}{#1}$\rangle$}
+\newcommand{\twitter}[1]{\href{https://twitter.com/#1}{\textcolor{twitterblue}{\faTwitter}\,\tt\textcolor{twitterblue}{@#1}}}
+\usepackage{dtxdescribe}
+\usepackage[columns=2]{idxlayout}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{gridpapers.dtx}
+ \PrintChanges
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{430}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{v1.0.0}{2021/03/13}{Converted to DTX file}
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+% \GetFileInfo{gridpapers.sty}
+% \title{The \textsf{gridpapers} package}
+% \author{Robert McNees\footnote{\email{rmcnees@luc.edu}; \twitter{mcnees}}
+% \ and
+% Leo C.\ Stein\footnote{\email{leo.stein@gmail.com}; \twitter{duetosymmetry}}}
+% \date{\fileversion~from \filedate}
+%
+% \maketitle
+%
+% All development happens at the repo:
+% \url{https://github.com/mcnees/LaTeX-Graph-Paper}.
+%
+% \section{Introduction}
+%
+% Make your own quadrille, graph, hex, etc.\ paper! Uses the PGF/TikZ
+% package for \LaTeX, which should be part of any modern \TeX{}
+% installation. Lots of preset defaults to get started with ease, yet
+% all colors and spacing are customizable.
+%
+% There are example .tex files in the |examples| directory to
+% help get you started with customization. Each tex file has an
+% almost-empty body, with a |\usepackage| statement that you can
+% customize. For example, engineer-pad.tex looks like this:
+% \VerbatimInput[frame=single,
+% numbers=left,
+% xleftmargin=2em,
+% label=engineer-pad.tex]{examples/engineer-pad.tex}
+% (The |~| in the body forces a non-empty body, or else latex wouldn't generate a PDF).
+%
+% \section{Usage}
+%
+% \subsection{Options}
+%
+% Your graph paper is configured through a number of key/value options
+% to the |\usepackage| command. Let's go through these options.
+%
+% \DescribeObject{pattern=\marg{name}}\DescribeDefault{std} Which of
+% the predefined patterns to use for the page or textarea background.
+% The current list of pattern names is: |std|, |stdeight|, |majmin|,
+% |dot|, |hex|, |tri|, |iso|, |lightcone|, |ruled|, |doubleruled|. We
+% describe each of these patterns in Sec.~\ref{sec:patterns}.
+% Patterns come with default page geometry (size and margins; see
+% |geometry|), and default `fullness' (whether they fill the page or
+% not; see options |fullpage| and |textarea|).
+%
+% \DescribeObject{colorset=\marg{name}}\DescribeDefault{std} Color
+% presets. Valid color preset names are: |std|, |precocious|,
+% |brickred|, |engineer|, |plumpad|. A preset determines the
+% |majorcolor|, |minorcolor|, and |bgcolor| all at once. But, you can
+% start from a preset and then override some colors.
+%
+% \DescribeObject{majorcolor=\marg{color}} Override the preset
+% ``major'' color. This can be a named color, or using the syntax from
+% |xcolor| to mix colors together.
+%
+% \DescribeObject{minorcolor=\marg{color}} Override the preset
+% ``minor'' color. As above.
+%
+% \DescribeObject{bgcolor=\marg{color}} Override the preset background
+% color. As above.
+%
+% \DescribeObject{patternsize=\marg{length}} Override the preset
+% pattern size. The meaning of this length argument is different for
+% each pattern; see Sec.~\ref{sec:patterns} for more.
+%
+% \DescribeObject{dotsize=\marg{length}}\DescribeDefault{.7pt}
+% Controls the size of the dots themselves for |pattern=dot|.
+%
+% \DescribeObject{fullpage} Make the pattern fill the whole page.
+%
+% \DescribeObject{textarea} Make the pattern fill only the text area
+% of the document. At most one of the |fullpage| or |textarea| can be
+% specified. If one is specified, it will override the default
+% `fullness' setting of the pattern.
+%
+% \DescribeObject{geometry=\marg{geometry spec}} Page geometry
+% specification, using the syntax of the |geometry| package. This
+% specification will override the pattern's default page geometry.
+% However, if the |geometry| package was loaded before |gridpapers|,
+% this option will be ignored.
+%
+% \subsection{Patterns}
+% \label{sec:patterns}
+%
+% The current set of patterns:
+%
+% \DescribeObject{std} Quadrille, ten squares per inch. The
+% |patternsize| option controls the side of a square. Default is
+% |patternsize=0.1in|.
+%
+% \DescribeObject{stdeight} Quadrille, eight squares per inch. The
+% |patternsize| option controls the side of a square. Default is
+% |patternsize=0.125in|.
+%
+% \DescribeObject{majmin} Graph paper, eight squares per inch with a
+% major grid every half-inch. The |patternsize| option controls the
+% side of a small square (the larger squares are four times bigger).
+% Default is |patternsize=0.125in|.
+%
+% \DescribeObject{dot} Grid of dots. The size of an individual dot is
+% set by |dotsize|. The |patternsize| option controls the distance
+% between dots. Default is |patternsize=0.1in|.
+%
+% \DescribeObject{hex} Grid of hexagons. The |patternsize| option
+% controls the side length of a hexagon. Default is
+% |patternsize=0.1666in|.
+%
+% \DescribeObject{tri} Triangle grid. The |patternsize| option
+% controls the side length of a triangle. Default is
+% |patternsize=0.25in|.
+%
+% \DescribeObject{iso} Isometric grid. The |patternsize| option
+% controls the side length of a triangle. Default is
+% |patternsize=0.25in|.
+%
+% \DescribeObject{lightcone} A grid with light cones (45° lines) on a
+% square grid. The |patternsize| option controls the side of a
+% horizontal square (not the tipped squared). Default is
+% |patternsize=0.25in|.
+%
+% \DescribeObject{ruled} Ruled page with bold lines. The
+% |patternsize| option controls the vertical distance between lines.
+% Default is |patternsize=0.2in|.
+%
+% \DescribeObject{doubleruled} Ruled page with bold lines alternating
+% with light lines. The |patternsize| option controls the vertical
+% distance between neighboring lines. Default is
+% |patternsize=0.125in|.
+%
+% \section{Examples}
+%
+% \subsection{Plenty of customization}
+%
+% Let's say you want to use the |tri| pattern, which by default fills
+% the page. But you want it to fill just the textarea of an A4 page
+% with 2cm margins, and you want the triangles to be .75cm
+% long. Finally, you like the colors of the engineer set, but want a
+% white background. Then you would write:
+% \begin{sourceverb}[frame=single]
+% \usepackage[pattern=tri,
+% patternsize=0.75cm,
+% textarea,
+% colorset=engineer,
+% bgcolor=white,
+% geometry={a4paper, margin=2cm}]{gridpapers}
+% \end{sourceverb}
+%
+% \subsection{Custom colors}
+%
+% Using named or blended custom colors is demonstrated in the example
+% file |custom-colors.tex|:
+% \VerbatimInput[frame=single,
+% numbers=left,
+% xleftmargin=2em,
+% label=custom-colors.tex]{examples/custom-colors.tex}
+%
+
+%
+% \StopEventually{}
+%
+% \section{Implementation}
+%
+% \iffalse
+%<*package>
+% \fi
+%
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[1994/06/01]
+\ProvidesPackage{gridpapers}
+ [2021/03/14 v1.0.0 Graph paper backgrounds]
+
+\RequirePackage{xkeyval}
+\RequirePackage{kvoptions}
+\RequirePackage{xcolor}
+\RequirePackage{tikz}
+\usetikzlibrary{patterns.meta,calc}
+\RequirePackage{tikzpagenodes}
+%% everypage has been superseded -- try to use the new builtin
+%% approach, but fall back to everypage-1x if needed
+%% This code is roughly taken from the new everypage code
+\@ifundefined{AddToHook}{%
+ \RequirePackage{everypage-1x}
+}{%
+ \newcommand*{\AddEverypageHook}[1]{%
+ \AddToHook{shipout/background}{\put(1in,-1in){#1}}}
+}
+\RequirePackage{pagecolor}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Option parsing
+%% Declare switches for processing the options.
+
+\newif\ifGP@geometrypreviouslyloaded
+\newif\ifGP@fullnessset
+\newif\ifGP@fullpage
+\newif\ifGP@textarea
+\GP@geometrypreviouslyloadedfalse
+\GP@fullnesssetfalse
+\GP@fullpagefalse
+\GP@textareafalse
+
+\SetupKeyvalOptions{%
+ family=GP,%
+ prefix=GPOpt@%
+}
+
+\DeclareStringOption[std]{pattern}
+\DeclareStringOption[std]{colorset}
+
+\DeclareStringOption{majorcolor}
+\DeclareStringOption{minorcolor}
+\DeclareStringOption{bgcolor}
+
+\DeclareStringOption{patternsize}
+\DeclareStringOption[.7pt]{dotsize}
+
+\DeclareVoidOption{fullpage}{\GP@fullpagetrue}
+\DeclareVoidOption{textarea}{\GP@textareatrue}
+
+\DeclareStringOption{geometry}
+
+\ProcessKeyvalOptions*
+
+%% Can only have one of fullpage or textarea
+\ifGP@fullpage
+ \ifGP@textarea
+ \PackageError{gridpapers}{%
+ Can not specify both fullpage and textarea, please remove one option}{}
+ \fi
+ \GP@fullnesssettrue
+\fi
+
+\ifGP@textarea
+ \GP@fullnesssettrue
+\fi
+
+%% We keep track of this to know whether or not we would be overriding
+%% a previously-set page geometry
+\@ifpackageloaded{geometry}
+ {\GP@geometrypreviouslyloadedtrue}
+ {\GP@geometrypreviouslyloadedfalse%
+ \PassOptionsToPackage{\GPOpt@geometry}{geometry}%
+ \RequirePackage{geometry}%
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Actual package code
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Some nice colors.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{plum}{rgb}{0.36078, 0.20784, 0.4}
+\definecolor{chameleon}{rgb}{0.30588, 0.60392, 0.023529}
+\definecolor{cornflower}{rgb}{0.12549, 0.29020, 0.52941}
+\definecolor{scarlet}{rgb}{0.8, 0, 0}
+\definecolor{brick}{rgb}{0.64314, 0, 0}
+\definecolor{sunrise}{rgb}{0.80784, 0.36078, 0}
+\definecolor{rosiebg}{RGB}{250,247,232}
+\definecolor{rosiegrid}{RGB}{186,137,113}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% The color to use for the null directions when drawing lightcones.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\colorlet{lightlines}{scarlet!30}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Pre-defined Color schemes
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Here are some pre-defined color schemes for the paper background
+%% and the major and minor grid lines. These are switched by using
+%% the option colorset=<name>. The allowed values for colorset are in
+%% the list below.
+\define@choicekey*{GP}{colorset}[\val\nr]%
+ %% Allowed values for colorset:
+ {std,precocious,brickred,engineer,plumpad}[std]{%
+ \ifcase\nr\relax
+ %% std
+ \colorlet{minorcolor}{cornflower!30}
+ \colorlet{majorcolor}{cornflower!50}
+ \colorlet{bgcolor}{white}
+ \or
+ %% precocious
+ \colorlet{minorcolor}{rosiegrid!50}
+ \colorlet{majorcolor}{rosiegrid}
+ \colorlet{bgcolor}{rosiebg}
+ \or
+ %% brickred
+ \colorlet{minorcolor}{brick!35}
+ \colorlet{majorcolor}{brick!60}
+ \colorlet{bgcolor}{scarlet!8}
+ \or
+ %% engineer
+ \colorlet{minorcolor}{chameleon!50}
+ \colorlet{majorcolor}{chameleon!80}
+ \colorlet{bgcolor}{chameleon!10}
+ \or
+ %% plumpad
+ \colorlet{minorcolor}{cornflower!40}
+ \colorlet{majorcolor}{cornflower!70}
+ \colorlet{bgcolor}{plum!10}
+ \fi
+}
+
+%% Get the specified color set from the options
+\def\@setkeyhelper#1#2{%
+ \setkeys{GP}{#2=#1}
+}
+\expandafter\@setkeyhelper\expandafter{\GPOpt@colorset}{colorset}
+
+%% If the user further specified majorcolor, minorcolor, and/or
+%% bgcolor, we now override the selected colorset
+\ifx\GPOpt@majorcolor\@empty
+\else
+ \colorlet{majorcolor}{\GPOpt@majorcolor}
+\fi
+\ifx\GPOpt@minorcolor\@empty
+\else
+ \colorlet{minorcolor}{\GPOpt@minorcolor}
+\fi
+\ifx\GPOpt@bgcolor\@empty
+\else
+ \colorlet{bgcolor}{\GPOpt@bgcolor}
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% The size parameter -- different meanings for different patterns
+%% Will be reset by pattern code
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\GP@patternsize}{0.1in}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% This section sets up a routine for filling a shape with
+%% hexagons. Uses code from:
+%% http://tex.stackexchange.com/questions/6019/drawing-hexagons/6128#6128
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% We have to delay this definition until after \GP@patternsize is
+%% redefined (by the pattern selection and/or user override)
+\newcommand{\GP@declarehexpat}{
+\pgfdeclarepatternformonly
+ {hexagons}%% name
+ {\pgfpointorigin}%% lower left
+ {\pgfpoint{3*\GP@patternsize}{0.866025*2*\GP@patternsize}}
+ {\pgfpoint{3*\GP@patternsize}{0.866025*2*\GP@patternsize}}
+ {
+ \pgfsetlinewidth{0.6pt}
+ \pgftransformshift{\pgfpoint{0mm}{0.866025*\GP@patternsize}}
+ \pgfpathmoveto{\pgfpoint{0mm}{0mm}}
+ \pgfpathlineto{\pgfpoint{0.5*\GP@patternsize}{0mm}}
+ \pgfpathlineto{\pgfpoint{\GP@patternsize}{-0.866025*\GP@patternsize}}
+ \pgfpathlineto{\pgfpoint{2*\GP@patternsize}{-0.866025*\GP@patternsize}}
+ \pgfpathlineto{\pgfpoint{2.5*\GP@patternsize}{0mm}}
+ \pgfpathlineto{\pgfpoint{3*\GP@patternsize}{0mm}}
+ \pgfpathmoveto{\pgfpoint{0.5*\GP@patternsize}{0mm}}
+ \pgfpathlineto{\pgfpoint{\GP@patternsize}{0.866025*\GP@patternsize}}
+ \pgfpathlineto{\pgfpoint{2*\GP@patternsize}{0.866025*\GP@patternsize}}
+ \pgfpathlineto{\pgfpoint{2.5*\GP@patternsize}{0mm}}
+ \pgfusepath{stroke}
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% This section sets up a routine for filling a shape with
+%% triangles.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% We have to delay this definition until after \GP@patternsize is
+%% redefined (by the pattern selection and/or user override)
+\newcommand{\GP@declaretripat}{
+\pgfdeclarepatternformonly
+ %% Name of the pattern
+ {triangles}
+ %% Set the lower left corner of the pattern
+ {\pgfpointorigin}
+ %% Set the upper right corner of the pattern
+ {\pgfpoint{\GP@patternsize}{2*0.8660254*\GP@patternsize}}
+ %% Declare the size of the pattern blocks
+ {\pgfpoint{\GP@patternsize}{2*0.8660254*\GP@patternsize}}
+ %% Draw the pattern
+ {
+ \pgfsetlinewidth{0.6pt}
+ \pgfpathmoveto{\pgfpoint{0mm}{0mm}}
+ \pgfpathlineto{\pgfpoint{\GP@patternsize}{2*0.8660254*\GP@patternsize}}
+ \pgfpathlineto{\pgfpoint{0mm}{2*0.8660254*\GP@patternsize}}
+ \pgfpathmoveto{\pgfpoint{0mm}{0.8660254*\GP@patternsize}}
+ \pgfpathlineto{\pgfpoint{\GP@patternsize}{0.8660254*\GP@patternsize}}
+ \pgfpathmoveto{\pgfpoint{0mm}{2*0.8660254*\GP@patternsize}}
+ \pgfpathlineto{\pgfpoint{\GP@patternsize}{0mm}}
+ \pgfpathlineto{\pgfpoint{0mm}{0mm}}
+ \pgfusepath{stroke}
+ }
+}
+\newcommand{\GP@declareisopat}{
+\pgfdeclarepatternformonly
+ %% Name of the pattern
+ {isometric}
+ %% Set the lower left corner of the pattern
+ {\pgfpointorigin}
+ %% Set the upper right corner of the pattern
+ {\pgfpoint{2*0.8660254*\GP@patternsize}{\GP@patternsize}}
+ %% Declare the size of the pattern blocks
+ {\pgfpoint{2*0.8660254*\GP@patternsize}{\GP@patternsize}}
+ %% Draw the pattern
+ {
+ \pgfsetlinewidth{0.6pt}
+ \pgfpathmoveto{\pgfpoint{0mm}{0mm}}
+ \pgfpathlineto{\pgfpoint{2*0.8660254*\GP@patternsize}{\GP@patternsize}}
+ \pgfpathlineto{\pgfpoint{2*0.8660254*\GP@patternsize}{0mm}}
+ \pgfpathlineto{\pgfpoint{0mm}{\GP@patternsize}}
+ \pgfpathlineto{\pgfpoint{0mm}{0mm}}
+ \pgfpathmoveto{\pgfpoint{0.8660254*\GP@patternsize}{0mm}}
+ \pgfpathlineto{\pgfpoint{0.8660254*\GP@patternsize}{\GP@patternsize}}
+ \pgfusepath{stroke}
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% This section sets up a routine for filling the squares in a
+%% grid with null lines.
+%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% TODO Still can't figure out the correct pattern shift!!
+\newcommand{\GP@declarelightconepat}{
+\pgfkeys{
+ /pgf/pattern keys/myshift/.store in=\myshift,
+ /pgf/pattern keys/myshift/.initial={(0,0)},
+}
+\tikzdeclarepattern{
+ name=lightcones,
+ type=uncolored,
+ parameters={\myshift},
+ bounding box={(0,0) and (\GP@patternsize,\GP@patternsize)},
+ tile size={(\GP@patternsize, \GP@patternsize)},
+ tile transformation={
+ shift=\myshift,
+ },
+ defaults={
+ myshift/.store in=\myshift,myshift={(0,0)},
+ },
+ code={
+ %% TODO Make the dashing an option
+ \tikzset{lightlines/.style={line width=0.4pt,dash=on 0.05cm off 0.05cm phase 0.025cm}}
+ \draw [lightlines] (0,0) -- (\GP@patternsize,\GP@patternsize);
+ \draw [lightlines] (0,\GP@patternsize) -- (\GP@patternsize,0);
+ },
+}
+}
+%% \pgfdeclarepatternformonly
+%% {lightcones}% name
+%% {\pgfpointorigin}% lower left
+%% {\pgfpoint{\GP@patternsize}{\GP@patternsize}}% upper right
+%% {\pgfpoint{\GP@patternsize}{\GP@patternsize}}% tile size
+%% {% shape description
+%% \pgfsetlinewidth{0.4pt}
+%% %% TODO Make an option
+%% %Comment out this line for solid lines on light cones, instead of dashes.
+%% \pgfsetdash{{0.05cm}{0.05cm}}{0.025cm}
+%% \pgfpathmoveto{\pgfpoint{0in}{0in}}
+%% \pgfpathlineto{\pgfpoint{\GP@patternsize}{\GP@patternsize}}
+%% \pgfpathmoveto{\pgfpoint{0in}{\GP@patternsize}}
+%% \pgfpathlineto{\pgfpoint{\GP@patternsize}{0in}}
+%% \pgfusepath{stroke}
+%% }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% This section sets up a routine for filling a region with dots
+%% Slightly modified version of code added by Leo
+%% Stein (@duetosymmetry on Twitter).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% We have to delay this definition until after \GP@patternsize is
+%% redefined (by the pattern selection and/or user override)
+\newcommand{\GP@declaredotpat}{
+\pgfdeclarepatternformonly
+ {dotgrid}%% name
+ {\pgfpoint{-0.5*\GP@patternsize}{-0.5*\GP@patternsize}}%% lower left
+ {\pgfpoint{0.5*\GP@patternsize}{0.5*\GP@patternsize}}%% upper right
+ {\pgfpoint{\GP@patternsize}{\GP@patternsize}}%% tile size
+ {%% shape description
+ \pgfpathcircle{\pgfqpoint{0pt}{0pt}}{\GPOpt@dotsize}
+ \pgfusepath{fill}
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Begin pattern execution infrastructure
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% This inner code will be set by the choicekey pattern=...
+\newcommand{\GP@innerpatterncode}{}
+%% This is the "outer" code to hook into every page
+\newcommand{\GP@patterncode}{% No blank lines in this code!
+\begin{tikzpicture}[remember picture, overlay]
+%%
+%% Change "thin" to "very thin" if the lines are too thick.
+\tikzset{
+ minorgrid/.style={minorcolor, thin},
+ majorgrid/.style={majorcolor, thin},
+}
+\ifGP@fullpage%
+\coordinate (a) at (current page.south west);
+\coordinate (b) at (current page.north east);
+\else%
+\coordinate (a) at (current page text area.south west);
+\coordinate (b) at (current page text area.north east);
+\fi
+%%
+\GP@innerpatterncode%
+%%
+\end{tikzpicture}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Begin pattern definition code
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\define@boolkey{GP}{patterndefaultfullness}{}
+\newcommand{\GP@patterndefaultgeometry}{}
+\newcommand{\GP@patterndefaultsize}{}
+
+%% Pattern-definer-helper
+%% The interface is:
+%% \GP@setpattern
+%% {<true for default fullpage, false for default textarea>}
+%% {<default geometry config>}
+%% {<default pattern size>} %% NOTE, not tile length
+%% {<contents of inner pattern code>}
+\newcommand{\GP@setpattern}[4]{%
+\setkeys{GP}{patterndefaultfullness=#1}
+\renewcommand{\GP@patterndefaultgeometry}{#2}
+\renewcommand{\GP@patterndefaultsize}{#3}
+\renewcommand{\GP@innerpatterncode}{#4}
+}
+
+\define@choicekey*{GP}{pattern}[\val\nr]%
+ %% Allowed values for pattern:
+ {std,stdeight,majmin,dot,hex,tri,iso,lightcone,ruled,doubleruled}{%
+ \ifcase\nr\relax
+ %% std
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Quadrille, ten squares per inch.
+%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \GP@setpattern{false}{letterpaper, margin=0.2in}{0.1in}{%
+%% Draw a grid with 10 squares per inch.
+\draw[style=minorgrid, shift={(a)}] (0,0) grid [step=\GP@patternsize] (b);
+%%
+%% Draw a frame around the grid.
+\draw[style=majorgrid] (a) rectangle (b);
+ }
+ \or
+ %% stdeight
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Quadrille, eight squares per inch.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \GP@setpattern{false}{letterpaper, margin=0.1875in}{0.125in}{%
+%% Draw a grid with 10 squares per inch.
+\draw[style=minorgrid, shift={(a)}] (0,0) grid [step=\GP@patternsize] (b);
+%%
+%% Draw a frame around the grid.
+\draw[style=majorgrid] (a) rectangle (b);
+ }
+ \or
+ %% majmin
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Graph paper, eight squares per inch with a major grid
+%% every half-inch.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \GP@setpattern{false}{letterpaper, margin=0.25in}{0.125in}{%
+%% Draw a grid with 10 squares per inch.
+\draw[style=minorgrid, shift={(a)}] (0,0) grid [step=\GP@patternsize] (b);
+%%
+\draw[style=majorgrid, shift={(a)}] (0,0) grid [step=4*\GP@patternsize] (b);
+%%
+%% Draw a frame around the grid.
+\draw[style=majorgrid] (a) rectangle (b);
+ }
+ \or
+ %% dot
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Dot grid
+%% Slightly modified version of code added by Leo
+%% Stein (@duetosymmetry).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \GP@setpattern{true}{}{0.1in}{%
+ \fill [pattern=dotgrid,pattern color=minorcolor] (a) rectangle (b);
+ }
+ \or
+ %% hex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Hex grid
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \GP@setpattern{true}{}{0.1666in}{%
+ \fill [pattern=hexagons,pattern color=minorcolor] (a) rectangle (b);
+ }
+ \or
+ %% tri
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Triangle grid, adjust triangle size in the preamble
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \GP@setpattern{true}{}{0.25in}{%
+ \fill [pattern=triangles,pattern color=minorcolor] (a) rectangle (b);
+ }
+ \or
+ %% iso
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Isometric grid
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \GP@setpattern{true}{}{0.25in}{%
+ \fill [pattern=isometric, pattern color=minorcolor] (a) rectangle (b);
+ }
+ \or
+ %% lightcone
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% A grid with light cones.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \GP@setpattern{false}{letterpaper, margin=.125in}{0.25in}{%
+%% Draw a grid with 4 squares per inch.
+\draw[style=minorgrid, shift={(a)}] (0,0) coordinate grid [step=\GP@patternsize] (b);
+%%
+%% Draw a border around the grid.
+\draw[style=majorgrid, pattern={lightcones[myshift={(a)}]}, pattern color=lightlines] (a) rectangle (b);
+ }
+ \or
+ %% ruled
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Ruled page with bold lines every 0.2in or 0.25in
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \GP@setpattern{false}{letterpaper, body={8in,10.8in}}{0.2in}{%
+%% Draw a ruled page with lines every 0.2in
+\draw[style=majorgrid, shift={(a)}] (0,0) grid [ystep=\GP@patternsize, xstep=\paperwidth] (b);
+%% Draw a frame around the grid.
+\draw[style=majorgrid] (a) rectangle (b);
+ }
+ \or
+ %% doubleruled
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Ruled page with bold lines every 0.25in and light lines
+%% every 0.125 in.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \GP@setpattern{false}{letterpaper, margin=.25in}{0.125in}{%
+%% Draw a ruled pattern with thin lines every 0.125 in and bold lines every 0.25 in.
+\draw[style=minorgrid, shift={(a)}] (0,0) grid [ystep=\GP@patternsize, xstep=\paperwidth] (b);
+%%
+\draw[style=majorgrid, shift={(a)}] (0,0) grid [ystep=2*\GP@patternsize, xstep=\paperwidth] (b);
+%%
+%% Draw a frame around the grid.
+\draw[style=majorgrid] (a) rectangle (b);
+ }
+ \fi
+}
+
+%% Use the passed package option to set the above key
+\expandafter\@setkeyhelper\expandafter{\GPOpt@pattern}{pattern}
+
+%% Determine whether or not to (re)set fullpage vs textarea
+\ifGP@fullnessset
+%% Respect their choice
+\else
+ %% Reset the value of \GP@fullpage based on the pattern's default
+ %% There's probably a more idiomatic way to do this but I can't
+ %% figure it out
+ \ifKV@GP@patterndefaultfullness
+ \GP@fullpagetrue
+ \else
+ \GP@fullpagefalse
+ \fi
+\fi
+
+%% Determine whether or not to fiddle with the page geometry
+\ifGP@geometrypreviouslyloaded
+%% Respect their previous choice
+\PackageWarning{gridpapers}{'geometry' package was previously loaded, will not use pattern defaults.}
+\else
+ %% Use the pattern's defaults,
+ \expandafter\geometry\expandafter{\GP@patterndefaultgeometry}
+ %% And then override with any more specific settings passed by the user
+ \expandafter\geometry\expandafter{\GPOpt@geometry}
+\fi
+
+%% Determine the correct pattern length
+\ifx\GPOpt@patternsize\@empty
+ % Use the pattern's preferred length
+ \renewcommand{\GP@patternsize}{\GP@patterndefaultsize}
+\else
+ % Override with the user's choice
+ \renewcommand{\GP@patternsize}{\GPOpt@patternsize}
+\fi
+
+%% Now that everything has been set up, we can finally define the
+%% patterns with the correct lengths.
+\GP@declarehexpat
+\GP@declaretripat
+\GP@declareisopat
+\GP@declarelightconepat
+\GP@declaredotpat
+
+%% Set the background color.
+\AtBeginDocument{\pagecolor{bgcolor}}
+%% Actually hook it in!
+\AddEverypageHook{%
+\GP@patterncode%
+}
+
+\endinput
+% \end{macrocode}
+%
+% \iffalse
+%</package>
+% \fi
+%
+% \Finale
+\endinput
diff --git a/macros/latex/contrib/gridpapers/gridpapers.ins b/macros/latex/contrib/gridpapers/gridpapers.ins
new file mode 100644
index 0000000000..d9a81c8e2a
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/gridpapers.ins
@@ -0,0 +1,57 @@
+%% Copyright (C) 2021 by Robert McNees <rmcnees@luc.edu>, Leo C. Stein <leo.stein@gmail.com>
+%% --------------------------------------------------------------------------
+%% 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 Maintainers of this work are Robert McNees, Leo C. Stein.
+%%
+%% This work consists of the files gridpapers.dtx and gridpapers.ins
+%% and the derived filebase gridpapers.sty.
+%%
+
+\input docstrip.tex
+\keepsilent
+
+\usedir{tex/latex/gridpapers}
+
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2021 by Robert McNees <rmcnees@luc.edu>, Leo C. Stein <leo.stein@gmail.com>
+--------------------------------------------------------------------------
+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.
+
+\endpreamble
+
+\generate{\file{gridpapers.sty}{\from{gridpapers.dtx}{package}}}
+
+\obeyspaces
+\Msg{*************************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* gridpapers.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file gridpapers.dtx *}
+\Msg{* through LaTeX. *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{*************************************************************}
+
+\endbatchfile
diff --git a/macros/latex/contrib/gridpapers/gridpapers.pdf b/macros/latex/contrib/gridpapers/gridpapers.pdf
new file mode 100644
index 0000000000..2204f6fd67
--- /dev/null
+++ b/macros/latex/contrib/gridpapers/gridpapers.pdf
Binary files differ
diff --git a/macros/latex/contrib/orcidlink/README.md b/macros/latex/contrib/orcidlink/README.md
index 79e1e82c3d..6b0100438a 100644
--- a/macros/latex/contrib/orcidlink/README.md
+++ b/macros/latex/contrib/orcidlink/README.md
@@ -1,7 +1,7 @@
# orcidlink-LaTeX-command
LaTeX style file to add a macro for inserting a linked ORCiD logo
-This LaTeX style file just defines a single macro, `\orcidlink`. The code is from [this TeX.SE answer](https://tex.stackexchange.com/a/445583/34063). My only contribution was wrapping it into a style file.
+This LaTeX style file just defines a single macro, `\orcidlink`. The code is from [this TeX.SE answer](https://tex.stackexchange.com/a/445583/34063). My contribution was wrapping it into a style file (and improving the fragility of the command a bit).
Installation
------------
@@ -35,7 +35,6 @@ Dependancies
This package relies on the following packages:
- [hyperref](https://www.ctan.org/pkg/hyperref)
-- [scalerel](https://www.ctan.org/pkg/scalerel)
- [tikz](https://www.ctan.org/pkg/pgf)
All of these packages are included in the popular [TeX Live](https://www.tug.org/texlive/) distribution, so most users should not have to install anything new.
diff --git a/macros/latex/contrib/orcidlink/orcidlink.dtx b/macros/latex/contrib/orcidlink/orcidlink.dtx
index 016d225d0c..7f34baa2fc 100644
--- a/macros/latex/contrib/orcidlink/orcidlink.dtx
+++ b/macros/latex/contrib/orcidlink/orcidlink.dtx
@@ -27,7 +27,7 @@
%<*driver>
\documentclass{ltxdoc}
\usepackage[dvipsnames]{xcolor}
-\usepackage{orcidlink}[2020/11/21]
+\usepackage{orcidlink}[2021/03/15]
\hypersetup{colorlinks,urlcolor=NavyBlue,citecolor=NavyBlue,linkcolor=NavyBlue,pdfusetitle}
\usepackage{graphicx}
\EnableCrossrefs
@@ -40,7 +40,7 @@
%</driver>
% \fi
%
-% \CheckSum{22}
+% \CheckSum{32}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -63,6 +63,8 @@
% \changes{v1.0.1}{2020/11/21}{Bugfix due to misunderstanding of docstrip}
% \changes{v1.0.2}{2020/11/21}{Fix fragility of command when inside of
% author, and combined with hyperref's option pdfusetitle}
+% \changes{v1.0.3}{2021/03/15}{Improve fragility by calculating
+% scaling ourselves, and using DeclareRobustCommand}
%
% \DoNotIndex{\newcommand,\newenvironment}
%
@@ -84,15 +86,13 @@
% \section{Usage}
%
% To use this package, in the preamble include
-% \begin{macrocode}
+% \begin{verbatim}
% \usepackage{orcidlink}
-% \end{macrocode}
+% \end{verbatim}
%
-% \DescribeMacro{\orcidlink}
+% \DescribeMacro{\orcidlink\marg{orcid}}
% Insert the ORCiD logo (\orcidlink{}), which is hyperlinked to the URL
-% of the researcher whose iD was specified. Usage:
-%
-% |\orcidlink| \marg{orcid}\newline
+% of the researcher whose iD was specified.
% Replace the mandatory argument \meta{orcid} with your
% ORCiD --- just the digits, not your whole URL.
% For example, the command
@@ -101,9 +101,9 @@
% This is most common in
% the author list. For example, in the preamble of a RevTeX article,
% if you write
-% \begin{macrocode}
+% \begin{verbatim}
% \author{Emmy Noether\,\orcidlink{0000-0000-0000-0000}}
-% \end{macrocode}
+% \end{verbatim}
% then the article byline will look something like this:
%
% \includegraphics[width=0.5\textwidth]{preview}\newline{}
@@ -120,12 +120,11 @@
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesPackage{orcidlink}
- [2020/11/21 v1.0.2 Linked ORCiD logo macro package]
+ [2021/03/15 v1.0.3 Linked ORCiD logo macro package]
%% All I did was package up Milo's code on TeX.SE,
%% see https://tex.stackexchange.com/a/445583/34063
\RequirePackage{hyperref}
-\RequirePackage{scalerel}
\RequirePackage{tikz}
\ProcessOptions\relax
@@ -141,16 +140,27 @@
svg{M88.7,56.8c0,5.5-4.5,10.1-10.1,10.1c-5.6,0-10.1-4.6-10.1-10.1c0-5.6,4.5-10.1,10.1-10.1C84.2,46.7,88.7,51.3,88.7,56.8z};
}
}
+
+%% Reciprocal of the height of the svg whose source is above. The
+%% original generates a 256pt high graphic; this macro holds 1/256.
+\newcommand{\@OrigHeightRecip}{0.00390625}
+
+%% We will compute the current X height to make the logo the right height
+\newlength{\@curXheight}
+
% \end{macrocode}
%
% \begin{macro}{\orcidlink}
% \begin{macrocode}
-
-\newcommand\orcidlink[1]{\texorpdfstring{\href{https://orcid.org/#1}{\mbox{\scalerel*{
-\begin{tikzpicture}[yscale=-1,transform shape]
+\DeclareRobustCommand\orcidlink[1]{%
+\texorpdfstring{%
+\setlength{\@curXheight}{\fontcharht\font`X}%
+\href{https://orcid.org/#1}{\mbox{%
+\begin{tikzpicture}[yscale=-\@OrigHeightRecip*\@curXheight,
+xscale=\@OrigHeightRecip*\@curXheight,transform shape]
\pic{orcidlogo};
-\end{tikzpicture}
-}{|}}}}{}}
+\end{tikzpicture}%
+}}}{}}
\endinput
% \end{macrocode}
diff --git a/macros/latex/contrib/orcidlink/orcidlink.pdf b/macros/latex/contrib/orcidlink/orcidlink.pdf
index 160e90aead..b064dbf561 100644
--- a/macros/latex/contrib/orcidlink/orcidlink.pdf
+++ b/macros/latex/contrib/orcidlink/orcidlink.pdf
Binary files differ
diff --git a/macros/latex/contrib/orcidlink/preview.png b/macros/latex/contrib/orcidlink/preview.png
deleted file mode 100644
index cbe1add888..0000000000
--- a/macros/latex/contrib/orcidlink/preview.png
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/README.md b/macros/latex/contrib/tuda-ci/README.md
index ba472cd4f6..0653ce54e1 100644
--- a/macros/latex/contrib/tuda-ci/README.md
+++ b/macros/latex/contrib/tuda-ci/README.md
@@ -2,7 +2,7 @@
Copyright (C) Marei Peischl <marei@peitex.de>, 2018–2021
- tuda-ci 2021/03/06 v3.12
+ tuda-ci 2021/03/16 v3.13
***************************************************************************
@@ -258,8 +258,12 @@ leaflets | DEMO-TUDaLeaflet.tex | tudaleaflet.cls
- extend support for all CreativeCommons 4.0 Licenses
- improve documentation
* v3.11 (2021-02-22)
- - Add Info for DVI-Outputs
+ - add Info for DVI-Outputs
* v3.12 (2021-03-06)
- - Fix color conversion for PDF/A
- - Fix margin restore after titlepage for custommargins=geometry
- - Enhance information on installation \ No newline at end of file
+ - fix color conversion for PDF/A
+ - fix margin restore after titlepage for custommargins=geometry
+ - enhance information on installation
+ * v3.13 (2021-03-16)
+ - enhancement of tudaexercise to be more flexible to be used with exams
+ - convert points to a floating point variable
+ \ No newline at end of file
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf
index eceac574e3..e72fe648c1 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf
index 85f486e58f..1b43044759 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf
index 96595ebf37..ce2b6c0c32 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf
index d249ccfcb9..0c250fa420 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf
index 88f6db29ec..968f8c3b58 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf
index 52454981ec..fb495eb615 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf
index 12cfbf1c76..5607deb898 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.default.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.default.pdf
deleted file mode 100644
index 12ac769837..0000000000
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.default.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf
index 8e263ca30d..4392bf56c1 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf
index 7b8acba1a5..4a964dde4c 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf
index 0abd35ba6a..722606bbf0 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf
index f492adacf1..b8b57d3547 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex
index 9d0df4cb9c..8852f2211c 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaAnnouncement.tex' version 3.12 (2021/03/06),
+%% This is file `DEMO-TUDaAnnouncement.tex' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex
index 670a677d96..168aa7ae37 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaBeamer.tex' version 3.12 (2021/03/06),
+%% This is file `DEMO-TUDaBeamer.tex' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib
index cec07e51a2..3e316c2308 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaBibliography.bib' version 3.12 (2021/03/06),
+%% This is file `DEMO-TUDaBibliography.bib' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex
index dcfbecfaba..be4e716fd6 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaExercise.tex' version 3.12 (2021/03/06),
+%% This is file `DEMO-TUDaExercise.tex' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -35,6 +35,7 @@
\documentclass[
ngerman,
+ points=true,% für die Aktivierung der Punktereferenzen
]{tudaexercise}
\usepackage[english, main=ngerman]{babel}
@@ -50,6 +51,9 @@
\let\cls\textsf
\let\tbs\textbackslash
+\usepackage{booktabs}% Erweiterte möglichkeiten beim Spacing um Linien in Tabellen
+\renewcommand*{\creditformatsum}[1]{\creditformat{Gesamt: #1}}
+
\ConfigureHeadline{
headline={title-name-id}
}
@@ -91,15 +95,33 @@ Aufgaben werden bei \cls{tudaexercise.cls} durch die Umgebung \code{task} defini
Querverweise zwischen den Aufgaben sind wie üblich mit \code{\tbs{}label} und \code{\tbs{}ref} möglich.
-Neben der Umgebungsstruktur, die zur besseren Übersichtlichkeit zu empfehlen ist, verfügt tudaexercise auch über die Möglichkeit eine Aufgabe nur mit \code{\tbs{}task} einzuleiten.
-\begin{verbatim}
-\task{Überschrift der Aufgabe}
-\end{verbatim}
+\minisec{Die Verwendung des Makros \code{\tbs{}task}}
+Neben der Umgebungsstruktur, verfügt \cls{tudaexercise} auch über die Möglichkeit eine Aufgabe nur mit \code{\tbs{}task} einzuleiten. Dieser Mechanismus existiert um zu älteren Versionen Kompatibel zu bleiben. Sie sollte jedoch nach Möglichkeit nicht mehr verwendet werden!
-In diesem Dokument wird lediglich die empfohlene Variante unter Nutzung der Umgebung gezeigt.
+\end{task}
+
+\begin{task}{Teilaufgaben}
+\begin{subtask}[title=Grundsturktur]
+ \cls{tudaexercise} unterstützt mit der \code{subtask}-Umgebung Aufgaben in Teilaufgaben zu untergliedern. Es wird derzeit nur eine Ebene unterstützt. Für weitere Untergliederung ist es möglich das Dokument zusätzlich mit \code{\tbs{}section} in Abschnitte zu unterteilen.
+
+ \begin{verbatim}
+ \begin{subtask}[title=Titel,points=5]
+
+ \end{subtask}
+ \end{verbatim}
+
+ Teilaufgaben benötigen – im Gegensatz zu Aufgaben – keine Überschrift. Daher unterscheidet sich die Syntax für die Übergabe von der der \code{task}-Umgebung. Es gibt jedoch eine Variante um diese Unterscheidung zu umgehen, vergleiche Aufgabe \ref{task-subtask-syntax}.
+\end{subtask}
-Falls die Makro-Version benutzt und damit Optionen gesetzt werden, ist zu beachten, dass diese nicht automatisch wieder beendet werden kann, da ja das Ende der Umgebung fehlt. Dies ist der Hauptgrund für die Empfehlung der Umgebung.
+\begin{subtask}[title=Anpassung der Überschriften]
+ Ab Version 3.13 unterstützt \cls{tudaexercise} zusätzlich eine Umschaltung bezüglich des Layouts der Subtask-Überschriften. Es existieren drei Optionswerte für die Dokumentenklasse:
+ \begin{description}
+ \item[subtask=ruled] Voreinstellung, die Überschriften sind durch Linien vom Fließtext abgetrennt. (vgl. dieses Dokument)
+ \item[subtask=plain] Keine Linien um die Überschrift.
+ \item[subtask=runin] Falls sehr kleine Aufgaben gesetzt werden, kann der Umbruch nach der Überschrift unterbunden werden. In diesem Fall ist die Nutzer:in selbst dafür verantwortlich, dass eine ggf. notwendige Optische Abtrennung zwischen Titel und Aufgabentext stattfindet, z.B. durch Hervorhebung des Titeltextes.
+ \end{description}
+\end{subtask}
\end{task}
\begin{task}{Kopfzeilenanpassungen}
@@ -193,7 +215,8 @@ In der aktuellen Einstellung (\code{solution=false}) erzeugt der obige Block die
\begin{task}[credit=10]{Punkte}
Punkteangaben sind über den Optionsschlüssel \code{credit} möglich. Der Wert wird hinter den Aufgabentitel in runde Klammern gesetzt. Dies geschieht mithilfe des Makros \code{\tbs{}creditformat}
-Alternativ existiert der Schlüssel \code{points} dieser ergänzt zusätzlich zur Angabe auch den Text \code{\tbs{}PointName} bzw. \code{\tbs{PointsName}} je nachdem ob der Wert größer 1 oder nicht. Der Schlüssel \code{points} akzeptiert daher nur numerische Werte.
+Alternativ existiert der Schlüssel \code{points} dieser ergänzt zusätzlich zur Angabe auch den Text \code{\tbs{}PointName} bzw. \code{\tbs{PointsName}} je nachdem ob der Wert gleich 1. Der Schlüssel \code{points} akzeptiert daher nur numerische Werte ab Version 3.13 werden Gleitkommazahlen unterstützt. Das Dazimaltrennzeichen ist hierbei ein Punkt. Korrektur auf ein Komma ist über eine Umdefinition von \code{\tbs{}pointformat} möglich.
+
\begin{subtask}[points=1,title=Beispiel für den Schlüssel points]
Da ältere Versionen von TUDaExercise keine Optionsverarbeitung für subtask erlaubten, ist hier ein zusätzlicher Mechanismus enthalten. Falls sowohl ein Titel, als auch spezifische Angaben notwendig sind, existiert hier zusätzlich der Schlüssel \code{title}.
Geprüft wird darauf, ob das Argument ein Gleichheitszeichen enthält, ist dies der Fall, so wird davon ausgegangen, dass Optionen nach Schlüssel=Wert-Struktur übergeben werden.
@@ -204,15 +227,98 @@ Falls bei der Optionsverarbeitung Unstimmigkeiten festgestellt werden, so wird d
\end{subtask}
\end{task}
-\begin{task*}{Beta-Feature: Einheitliche Syntax für Task/Subtask}
-TUDaExercise unterscheidet in der Standardeinstellung zwischen \code{task} und \code{subtask}. Dies ist dadurch begründet, dass \code{subtask} keine Angabe eines Titels erfordert.
+\begin{task}[points=auto]{Automatismen für Punktetabellen}
+\label{task:refPoints}
+Mit Version 3.13 erhält \cls{tudaexercise} die Funktionalität für automatische Punktetabellen und Referenzen auf die Punkteangaben.
+
+\begin{subtask}[points=3,title=Referenzen aktivieren]
+\cls{tudaexercise} hat diese Funktionalität grundsätzlich deaktiviert, sie kann jedoch über die Klassenoption \code{points=true} eingeschaltet werden.
+
+Der Mechanismus für die Referenzierung funktioniert ähnlich, wie die Objektreferenzen bei \LaTeX{}. Dadurch ist es notwendig das Dokument zweimal zu kompilieren. Falls \cls{tudaexercise} im Durchlauf feststellt, dass sich die Werte des letztes Durchlaufes von den aktuellen unterscheiden, wird eine entsprechende Warnung erzeugt.
+
+Für die Referenz stehen zwei Makros zur Verfügung. Eines funktioniert über den Aufruf der Aufgabennummer, der andere über labels:
+
+
+\verb+\getPoints{+\thetask\verb+}+\\
+\verb+\refPoints{task:refPoints}% benötigt das \label{task:refPoints}, vgl. Quellcode+
+
+
+Beide Makros geben in diesem Fall den gleichen Wert: \refPoints{task:refPoints}. Da die Variante code{\tbs{}refPoints} dynamisch von den Aufgabennummern abhängig ist diese Variante im Allgemeinen zu bevorzugen.
+
+Neben der Referenz auf einzelne Aufgaben gibt \code{\tbs{}getPointsTotal} die Summe der aller Aufgaben im letzten \LaTeX-Lauf zurück.
+
+\end{subtask}
+
+\begin{subtask}[points=2,title=Punkte aus Teilaufgaben aufsummieren]
+ Der neue Mechanismus ermöglicht auch, dass der Punktewert einer Aufgabe aus der Summe der Punkte der enthaltenen Teilaufgaben berechnet wird.
+
+ Hierfür ist die Verwendung der Umgebungen zwingend notwendig. \code{\tbs{}task} erlaubt es nicht die Teilaufgaben entsprechend einzugrenzen. Selbiges gilt für die Subtask-Umgebung.
+
+ Die Summe der Punkte wird nicht automatisch bei der Aufgabenbezeichnung eingetragen, jedoch existiert mit dem Optionswert \code{points=auto} eine entsprechende Funktionalität.
+ Falls die Klassenoption \code{points=auto} gesetzt ist, wird diese automatisch für alle Aufgaben aktiviert. Der automatische Wert kann jedoch über eine manuelle Angabe eines Wertes überschrieben werden, z.\,B. falls eine Aufgabe nicht aus Teilaufgaben besteht.
+
+ Es erfolgt derzeit keine automatische Prüfung auf die Übereinstimmung zwischen der Summe der Teilaufgaben und der Gesamtpunktzahl.
+
+ Um die Unterscheidung der Angabe zwischen aufsummierten Werten und manuell gesetzten Werten zu ermöglich existiert intern eine weitere Variante des Makros \code{\tbs{}creditformat}.
+
+ \begin{verbatim}
+ \newcommand*{\creditformatsum}[1]{\creditformat{#1}}
+ \end{verbatim}
+
+ Es ruft intern lediglich das Makro \code{\tbs{}creditformat} auf. Für dieses Beispieldokument wurde jedoch die Bedeutung überschrieben, sodass im Titel dieser Aufgabe gekennzeichnet wird, dass der Punktewerte eine Summe der Teilaufgaben entspricht:
+
+ \begin{verbatim}
+ \renewcommand*{\creditformatsum}[1]{\creditformat{Gesamt: #1}}
+ \end{verbatim}
+\end{subtask}
+
+\begin{subtask}[points=3,title=Automatische Punktetabellen]
+ \cls{tudaexercise} stellt mit der Möglichkeit der Referenz auf die Aufgabenwerte auch die Auflistung aller Punkte zur Verfügung.
+
+ Da die Struktur einer Punktetabelle nach persönlichen Vorlieben stark variiert ist das Makro sehr abstrakt konstruiert.
+
+ \begin{verbatim}
+ \mapPoints{<Code, der für jede Aufgabe ausgeführt werden soll>}
+ \end{verbatim}
+
+ \code{\tbs{}mapPoints} iteriert über alle Aufgaben und erlaubt als Argument beliebige Code-Elemente. Innerhalb des Codes können \code{\#1} (Nummer der Aufgabe) und \code{\#2} (zugehöriger Punktwert) verwendet werden.
+ Aufgaben, deren Wert Null beträgt werden übersprungen.
+
+ Zum Beispiel erzeugt:
+ \begin{verbatim}
+ \begin{tabular}{@{}lr@{}}
+ \toprule
+ \mapPoints{Aufgabe #1&#2 Punkte\\}
+ \midrule
+ Gesamt&\getPointsTotal{} Punkte\\
+ \bottomrule
+ \end{tabular}
+ \end{verbatim}
+ die Ausgabe:\\
+ \begin{tabular}{@{}lr@{}}
+ \toprule
+ \mapPoints{Aufgabe #1&#2 Punkte\\}
+ \midrule
+ Gesamt&\getPointsTotal{} Punkte\\
+ \bottomrule
+ \end{tabular}
+
+ Falls auch Aufgaben mit einem Wert von 0 verarbeitet werden sollen, existiert noch eine gesternte Version \code{\tbs{}mapPoints*}.
+ \end{subtask}
+\end{task}
-Es wurde der Bedarf nach einer einheitlichen Syntax geäußert (siehe \url{https://github.com/tudace/tuda_latex_templates/issues/189}).
-\begin{subtask*}{Die gesternten Verianten der task/subtaks-Umgebungen}
-Die mit Version 3.0 implementierten Varianten \code{task*} und \code{subtask*} ermöglichen dies.
-Beide Varianten stehe nur als Umgebung und nicht als Makro zur Verfügung:
+\begin{task*}{Einheitliche Syntax für Task/Subtask}
+ \label{task-subtask-syntax}
+ TUDaExercise unterscheidet in der Standardeinstellung zwischen \code{task} und \code{subtask}. Dies ist dadurch begründet, dass \code{subtask} keine Angabe eines Titels erfordert.
+
+ Es wurde der Bedarf nach einer einheitlichen Syntax geäußert (siehe \url{https://github.com/tudace/tuda_latex_templates/issues/189}).
+
+ \begin{subtask*}{Die gesternten Varianten der task/subtaks-Umgebungen}
+ Die mit Version 3.0 implementierten Varianten \code{task*} und \code{subtask*} ermöglichen dies.
+
+ Beide Varianten stehe nur als Umgebung und nicht als Makro zur Verfügung:
\begin{verbatim}
\begin{task*}{Aufgabentitel}
@@ -237,6 +343,6 @@ Um den Kompatibilitätsmodus zu aktivieren, existiert die Option \code{compat=tr
Damit können Strukturen wie \code{examheader}, \code{examheaderdefault} und die Erzeugung von Aufgaben mitilfe von \code{\tbs{}subsection} wie gewohnt verwendet werden. Da einige dieser Mechanismen jedoch der Philosophie der semantischen Auszeichnung widersprechen wird ihre Verwendung hier nicht genauer erklärt. Nutzer, denen diese Mechanismen nicht vertraut sind, wird empfohlen die durch TUDaExercise zur Verfügung gestellten Varianten zu nutzen.
-Beim zugehörigen Release im Development Repository findet sich auch eine Beispieldatei, die die alten Mechanismen verwendet und spezielle Hinweise für Umsteiger enthält. %TODO link einfügen.
+Beim zugehörigen Release im Development Repository findet sich auch eine Beispieldatei, die die alten Mechanismen verwendet und spezielle Hinweise für Umsteiger enthält: \url{https://github.com/tudace/tuda_latex_templates/blob/master/example/Examples-TUDexercise-compat.tex}
\end{task}
\end{document}
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco
index a5163d87c4..b5deeaecb5 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaFromaddress.lco' version 3.12 (2021/03/06),
+%% This is file `DEMO-TUDaFromaddress.lco' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex
index dc5097e04b..f95704c568 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaLeaflet.tex' version 3.12 (2021/03/06),
+%% This is file `DEMO-TUDaLeaflet.tex' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex
index e1781c555a..cee47fcc22 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaLetter.tex' version 3.12 (2021/03/06),
+%% This is file `DEMO-TUDaLetter.tex' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex
index 88dd7ae72f..c8cf27a6df 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaPhD.tex' version 3.12 (2021/03/06),
+%% This is file `DEMO-TUDaPhD.tex' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex
index 8e1638f7a2..23f4c8282e 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaPoster.tex' version 3.12 (2021/03/06),
+%% This is file `DEMO-TUDaPoster.tex' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex
index 60ad64053f..65e4587714 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaPub.tex' version 3.12 (2021/03/06),
+%% This is file `DEMO-TUDaPub.tex' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex
index 236b80f04c..f923ea81b7 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaReport.tex' version 3.12 (2021/03/06),
+%% This is file `DEMO-TUDaReport.tex' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex
index 10edb4e898..0bcc907a4a 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaSciPoster.tex' version 3.12 (2021/03/06),
+%% This is file `DEMO-TUDaSciPoster.tex' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex
index 993bf15427..52e9b50710 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaThesis.tex' version 3.12 (2021/03/06),
+%% This is file `DEMO-TUDaThesis.tex' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty b/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty
index 6f0335630c..8293ce8e43 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty
@@ -1,4 +1,4 @@
-%% This is file `beamercolorthemeTUDa.sty' version 3.12 (2021/03/06),
+%% This is file `beamercolorthemeTUDa.sty' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{beamercolorthemeTUDa}
[\filedate\space\fileversion]
diff --git a/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty b/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty
index 66692fe446..3e4d20a20f 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty
@@ -1,4 +1,4 @@
-%% This is file `beamerfontthemeTUDa.sty' version 3.12 (2021/03/06),
+%% This is file `beamerfontthemeTUDa.sty' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{beamerfontthemeTUDa}
[\filedate\space\fileversion]
diff --git a/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty b/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty
index 04535b92d7..ddc9a8571a 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty
@@ -1,4 +1,4 @@
-%% This is file `beamerinnerthemeTUDa.sty' version 3.12 (2021/03/06),
+%% This is file `beamerinnerthemeTUDa.sty' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\NeedsTeXFormat{LaTeX2e}
\ProvidesExplPackage{beamerinnerthemeTUDa}{\filedate}{\fileversion}{Inner~beamer~theme~of~tuda-ci}
diff --git a/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty b/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty
index b87c5f9366..341de964a0 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty
@@ -1,4 +1,4 @@
-%% This is file `beamerouterthemeTUDa.sty' version 3.12 (2021/03/06),
+%% This is file `beamerouterthemeTUDa.sty' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\NeedsTeXFormat{LaTeX2e}
\ProvidesExplPackage{beamerouterthemeTUDa}{\filedate}{\fileversion}{Outer~beamer~theme~of~tuda-ci}
diff --git a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty
index 82c610757a..fec0470d92 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty
@@ -1,4 +1,4 @@
-%% This is file `beamerthemeTUDa-mecheng.sty' version 3.12 (2021/03/06),
+%% This is file `beamerthemeTUDa-mecheng.sty' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\RequirePackage{expl3}
\ProvidesExplPackage{beamerthemeTUDa-mecheng}{\filedate}{\fileversion}{specific tudabeamer configuration for the department of mechanical engineering}
diff --git a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty
index cd1ac104bc..ce1f21b228 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty
@@ -1,4 +1,4 @@
-%% This is file `beamerthemeTUDa.sty' version 3.12 (2021/03/06),
+%% This is file `beamerthemeTUDa.sty' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{beamerthemeTUDa}
[\filedate\space\fileversion\space beamer theme using the Corporate Design of TU Darmstadt]
diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo
index 487d2fc243..f0c6be9068 100644
--- a/macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo
@@ -1,4 +1,4 @@
-%% This is file `tuda-a0paper.clo' version 3.12 (2021/03/06),
+%% This is file `tuda-a0paper.clo' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\ProvidesExplFile{tuda-a0paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a0paper}
\cs_set:Nn \ptxcd_setup_title_sizes: {
\cs_set:Nn \ptxcd_title_fontsize: {{125pt}{165pt}}
diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo
index c13f040efb..7501b3832d 100644
--- a/macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo
@@ -1,4 +1,4 @@
-%% This is file `tuda-a1paper.clo' version 3.12 (2021/03/06),
+%% This is file `tuda-a1paper.clo' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\ProvidesExplFile{tuda-a1paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a0paper}
\cs_set:Nn \ptxcd_setup_title_sizes: {
\cs_set:Nn \ptxcd_title_fontsize: {{86pt}{120pt}}
diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo
index 91eb35a46d..23ad5ed2ce 100644
--- a/macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo
@@ -1,4 +1,4 @@
-%% This is file `tuda-a2paper.clo' version 3.12 (2021/03/06),
+%% This is file `tuda-a2paper.clo' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\ProvidesExplFile{tuda-a2paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a0paper}
\cs_set:Nn \ptxcd_setup_title_sizes: {
\cs_set:Nn \ptxcd_title_fontsize: {{65pt}{82pt}}
diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo
index 5a1a27659b..bf4ac89315 100644
--- a/macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo
@@ -1,4 +1,4 @@
-%% This is file `tuda-a3paper.clo' version 3.12 (2021/03/06),
+%% This is file `tuda-a3paper.clo' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\ProvidesExplFile{tuda-a3paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a3paper}
\cs_set:Nn \ptxcd_setup_title_sizes: {
\cs_set:Nn \ptxcd_title_fontsize: {{47pt}{61pt}}
diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo
index 7f76d15bd9..dc5559281b 100644
--- a/macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo
@@ -1,4 +1,4 @@
-%% This is file `tuda-a4paper.clo' version 3.12 (2021/03/06),
+%% This is file `tuda-a4paper.clo' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\ProvidesExplFile{tuda-a4paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a4paper}
\cs_set:Nn \ptxcd_setup_title_sizes: {
\cs_set:Nn \ptxcd_title_fontsize: {{36pt}{47pt}}
diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo
index 465e4607c7..20ad91d1bc 100644
--- a/macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo
@@ -1,4 +1,4 @@
-%% This is file `tuda-a5paper.clo' version 3.12 (2021/03/06),
+%% This is file `tuda-a5paper.clo' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\ProvidesExplFile{tuda-a5paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a5paper}
\cs_set:Nn \ptxcd_setup_title_sizes: {
\cs_set:Nn \ptxcd_title_fontsize: {{22pt}{28pt}}
diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty b/macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty
index 6194150564..a26051caa4 100644
--- a/macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty
+++ b/macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty
@@ -1,4 +1,4 @@
-%% This is file `tuda-pgfplots.sty' version 3.12 (2021/03/06),
+%% This is file `tuda-pgfplots.sty' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
% Special thanks to: Sebastian Schöps Institut Theorie Elektromagnetischer Felder (TEMF), TU Darmstadt
% The original version of this file has been inspired by the colorscheme in the Metropolis beamer theme by Matthias Vogelgesang https://github.com/matze/mtheme
\ProvidesPackage{tuda-pgfplots}[\filedate\space\fileversion\space tuda-ci pgfplots color schemes]
diff --git a/macros/latex/contrib/tuda-ci/tex/tudabeamer.cls b/macros/latex/contrib/tuda-ci/tex/tudabeamer.cls
index 3fc7b0617f..3ed55f9488 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudabeamer.cls
+++ b/macros/latex/contrib/tuda-ci/tex/tudabeamer.cls
@@ -1,4 +1,4 @@
-%% This is file `tudabeamer.cls' version 3.12 (2021/03/06),
+%% This is file `tudabeamer.cls' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{tudabeamer}
[\filedate\space\fileversion\space]
diff --git a/macros/latex/contrib/tuda-ci/tex/tudacolors.def b/macros/latex/contrib/tuda-ci/tex/tudacolors.def
index 8ac99880fa..43c525207c 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudacolors.def
+++ b/macros/latex/contrib/tuda-ci/tex/tudacolors.def
@@ -1,4 +1,4 @@
-%% This is file `tudacolors.def' version 3.12 (2021/03/06),
+%% This is file `tudacolors.def' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\ProvidesFile{tudacolors.def}
[\filedate\space\fileversion\space Color definitions for tuda-ci]
diff --git a/macros/latex/contrib/tuda-ci/tex/tudacolors.sty b/macros/latex/contrib/tuda-ci/tex/tudacolors.sty
index 2a795747cb..b94d84e8c4 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudacolors.sty
+++ b/macros/latex/contrib/tuda-ci/tex/tudacolors.sty
@@ -1,4 +1,4 @@
-%% This is file `tudacolors.sty' version 3.12 (2021/03/06),
+%% This is file `tudacolors.sty' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\ProvidesExplPackage{tudacolors}{\filedate}{\fileversion}{Color definition for TU Darmstadt's tuda-ci bundle}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudaexercise.cls b/macros/latex/contrib/tuda-ci/tex/tudaexercise.cls
index 659ccdb351..2f7af0470f 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudaexercise.cls
+++ b/macros/latex/contrib/tuda-ci/tex/tudaexercise.cls
@@ -1,4 +1,4 @@
-%% This is file `tudaexercise.cls' version 3.12 (2021/03/06),
+%% This is file `tudaexercise.cls' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\ProvidesExplClass{tudaexercise}
@@ -41,7 +41,12 @@
\prop_gput:Nnn \g_ptxcd_clsopts_prop {captions} {nooneline}
\prop_gput:Nnn \g_ptxcd_clsopts_prop {parskip} {half-}
-\int_new:N \g_ptxcd_ruledheaders_int
+\prop_new:N \g__ptxcd_points_collector_prop
+\bool_new:N \l__ptxcd_points_auto_bool
+\bool_new:N \g__ptxcd_points_bool
+\prop_new:N \g__ptxcd_loaded_points_prop
+\fp_new:N \g__ptxcd_points_total_fp
+
\int_new:N \g_ptxcd_paper_int
\bool_new:N \g_ptxcd_geometry_bool
@@ -51,6 +56,17 @@
\bool_new:N \g_ptxcd_smalltitle_bool
\str_new:N \g_ptxcd_department_str
+\tl_new:N \g_ptxcd_tmp_tl
+\int_new:N \g_ptxcd_tmp_int
+\tl_new:N \l_ptxcd_tmp_tl
+
+\clist_map_inline:nn {section,subsection,subsubsection,task,subtask,@solution} {
+ \bool_new:c {g__ptxcd_ruled_#1_bool}
+ \bool_gset_true:c {g__ptxcd_ruled_#1_bool}
+}
+
+\bool_new:N \g__ptxcd_runin_subtask_bool
+
\RequirePackage{environ}
\newenvironment{solution}{}{}
@@ -171,6 +187,21 @@
},
solution .default:n = true,
unknown .code:n = {\prop_gput:NVn \g_ptxcd_unknown_clsopts_prop \l_keys_key_tl {#1}},
+ points .choice:,
+ points / true .code:n = \bool_set_false:N \l__ptxcd_points_auto_bool\bool_gset_true:N \g__ptxcd_points_bool,
+ points /false .code:n = \bool_set_false:N \l__ptxcd_points_auto_bool\bool_gset_false:N \g__ptxcd_points_bool,
+ points / auto .code:n = \bool_set_true:N \l__ptxcd_points_auto_bool\bool_gset_true:N \g__ptxcd_points_bool,
+ points .initial:n = false,
+ subtask .choice:,
+ subtask / ruled .code:n =
+ \bool_gset_true:N \g__ptxcd_ruled_subtask_bool
+ \bool_gset_false:N \g__ptxcd_runin_subtask_bool,
+ subtask / runin .code:n =
+ \bool_gset_false:N \g__ptxcd_ruled_subtask_bool
+ \bool_gset_true:N \g__ptxcd_runin_subtask_bool,
+ subtask / plain .code:n =
+ \bool_gset_false:N \g__ptxcd_ruled_subtask_bool
+ \bool_gset_false:N \g__ptxcd_runin_subtask_bool,
}
\ProcessKeysOptions{ptxcd/exercise}
@@ -186,23 +217,33 @@
\RequirePackage{environ}
\bool_new:N \l_ptxcd_ex_subtask_fallback_bool
+\fp_new:N \l_ptxcd_ex_task_points_fp
+\fp_new:N \g__ptxcd_ex_collected_points_fp
+\tl_new:N \l_ptxcd_ex_task_credit_tl
\keys_define:nn {ptxcd/task}{
- points .int_set:N = \l_ptxcd_ex_task_points_int,
+ points .choice:,
+ points / auto .code:n =
+ \bool_set_true:N \l__ptxcd_points_auto_bool,
+ points / unknown .code:n = \fp_set:Nn \l_ptxcd_ex_task_points_fp {#1}
+ \bool_set_false:N \l__ptxcd_points_auto_bool,
points .initial:n = 0,
- credit .tl_set:N = \l_ptxcd_ex_task_credit_tl,
+ credit .code:n = \tl_set:Nn \l_ptxcd_ex_task_credit_tl {#1}
+ \bool_set_false:N \l__ptxcd_points_auto_bool,
credit .initial:n =,
solution .meta:nn ={ptxcd/exercise}{solution=#1},
}
+\fp_new:N \l_ptxcd_ex_subtask_points_fp
\keys_define:nn {ptxcd/subtask} {
credit .tl_set:N = \l_ptxcd_ex_subtask_credit_tl,
credit .initial:n =,
- points .int_set:N = \l_ptxcd_ex_subtask_points_int,
+ points .code:n = \fp_set:Nn \l_ptxcd_ex_subtask_points_fp {#1}
+ \bool_set_false:N \l__ptxcd_points_auto_bool,
points .initial:n = 0,
title .tl_set:N = \l_ptxcd_ex_title_tl,
title .initial:n =,
- unknown .code:n = \bool_set_true:N \l_ptxcd_ex_subtask_fallback_bool \tl_clear:N \l_ptxcd_ex_subtask_credit_tl \int_zero:N \l_ptxcd_ex_subtask_points_int,
+ unknown .code:n = \bool_set_true:N \l_ptxcd_ex_subtask_fallback_bool \tl_clear:N \l_ptxcd_ex_subtask_credit_tl \fp_zero:N \l_ptxcd_ex_subtask_points_fp,
}
\keys_define:nn {ptxcd/exercise/headline} {
@@ -257,22 +298,30 @@
\renewcommand*\sectionlinesformat[4]{%
\parbox{\linewidth}{
+ \bool_if:cT {g__ptxcd_ruled_#1_bool} {
\rule[5\g_ptxcd_titlerule_dim]{\linewidth}{\g_ptxcd_titlerule_dim}\par\nointerlineskip
+ }
\@hangfrom{%
\hskip #2#3}{
\tl_if_eq:nnT {#1} {task} {
\exp_args:No \tl_if_empty:nF {#4}
- {:~}
+ {:~}
+ \bool_if:NT \l__ptxcd_points_auto_bool {
+ \exp_args:NNx \prop_get:NnN \g__ptxcd_loaded_points_prop {\thetask} \l_ptxcd_tmp_tl
+ \quark_if_no_value:NF \l_ptxcd_tmp_tl {
+ \fp_set:Nn \l_ptxcd_ex_task_points_fp {\l_ptxcd_tmp_tl}
+ }
+ }
}
#4
\tl_if_in:nnT {#1} {task} {
\tl_if_empty:cTF{l_ptxcd_ex_#1_credit_tl}
- {\pointformat{\tl_use:c {l_ptxcd_ex_#1_points_int}}}
+ {\pointformat{\fp_to_decimal:c {l_ptxcd_ex_#1_points_fp}}}
{\creditformat{\tl_use:c {l_ptxcd_ex_#1_credit_tl}}}
}
\rule[-\dp\strutbox]{0pt}{\dp\strutbox}\par}\nointerlineskip
\skip_vertical:n {\ptxcd_titlerule_sep: -\dp\strutbox}
- \smash{\rule{\linewidth}{\g_ptxcd_titlerule_dim}}
+ \bool_if:cT {g__ptxcd_ruled_#1_bool} {\smash{\rule{\linewidth}{\g_ptxcd_titlerule_dim}}}
}}
@@ -676,21 +725,26 @@
\newcommand*{\StudentIDsep}{:~}
\providecommand{\creditformat}[1]{\space(#1)}
+\providecommand{\creditformatsum}[1]{\creditformat{#1}}
\newcommand*{\pointformat}[1]{
- \int_case:nnF {#1}
+ \fp_compare:nF {#1 = 0} {
+ \bool_if:NTF \l__ptxcd_points_auto_bool
+ \creditformatsum
+ \creditformat
{
- {0} {}
- {1} {\creditformat{\int_to_arabic:n {#1}\space\PointName}}
+ \fp_to_decimal:n {#1}\space
+ \fp_compare:nTF {#1=1}
+ \PointName
+ \PointsName
}
- {\creditformat{\int_to_arabic:n {#1}\space\PointsName}}
}
+}
\providecaptionname{ngerman, german}{\PointName}{Punkt}
\providecaptionname{english, american, british}{\PointName}{Point}
\providecommand{\PointsName}{Punkte}
\providecaptionname{ngerman, german}{\PointsName}{Punkte}
\providecaptionname{english, american, british}{\PointsName}{Points}
-
%Has to be initialized after captionnames have been defined
\AtBeginDocument{
\ptxcd_update_headline_boxes:
@@ -698,12 +752,10 @@
\global\let\ConfigureHeadline\ptxcd_ConfigureHeadline:n
}
-
-
%task environment
\DeclareSectionCommand[%
style=section,%
- level=1,%
+ level=2,%
indent=\z@,%
beforeskip=\cs_if_exist_use:NF \scr@subsection@beforeskip {-3.25ex\@plus -1ex \@minus -.2ex},%
afterskip=\cs_if_exist_use:NF \scr@subsection@afterskip {1.5ex \@plus .2ex},%
@@ -712,7 +764,10 @@
tocnumwidth=\cs_if_exist_use:NF \scr@tso@subsection@numwidth {2.3em},%
]{task}
-\renewcommand*{\thetask}{\g_ptxcd_ex_sheetnum_tl\tl_if_empty:NF \g_ptxcd_ex_sheetnum_tl{.}\arabic{task}}
+\renewcommand*{\thetask}{
+ \g_ptxcd_ex_sheetnum_tl\tl_if_empty:NF \g_ptxcd_ex_sheetnum_tl{.}
+ \arabic{task}
+}
\renewcommand*{\taskformat}{\taskname\tasksep\thetask{}}
\let\@task\task
@@ -721,7 +776,17 @@
\NewDocumentEnvironment{task}{om}{
\IfNoValueF{#1}{\keys_set:nn {ptxcd/task}{#1}}
\@task{#2}
-}{}
+ \bool_if:NF \l__ptxcd_points_auto_bool {
+ \prop_gput:Nxx \g__ptxcd_points_collector_prop
+ {\thetask} {\fp_to_decimal:N \l_ptxcd_ex_task_points_fp}
+ }
+}{
+ \bool_if:NT \l__ptxcd_points_auto_bool {
+ \prop_gput:Nxx \g__ptxcd_points_collector_prop
+ {\thetask} {\fp_to_decimal:N \g__ptxcd_ex_collected_points_fp}
+ \fp_gzero:N \g__ptxcd_ex_collected_points_fp
+ }
+}
\cs_set_eq:cN {task*} \task
\cs_set_eq:cN {endtask*} \endtask
@@ -729,7 +794,7 @@
% subtasks
\DeclareSectionCommand[%
style=section,%
- level=2,%
+ level=3,%
indent=\z@,%
beforeskip=\cs_if_exist_use:NF \scr@subsubsection@beforeskip {-3.25ex\@plus -1ex \@minus -.2ex},%
afterskip=\cs_if_exist_use:NF \scr@subsubsection@afterskip {1.5ex \@plus .2ex},%
@@ -739,6 +804,10 @@
counterwithin=task,%
]{subtask}
+\bool_if:NT \g__ptxcd_runin_subtask_bool {
+ \RedeclareSectionCommand[runin=true]{subtask}
+}
+
\renewcommand*{\thesubtask}{\alph{subtask})}
\renewcommand*{\subtaskformat}{\thetask{}\thesubtask\enskip}
\setkomafont{subtask}{\mdseries\normalsize}
@@ -767,14 +836,14 @@
%Solution mechanism
\DeclareSectionCommand[%
-style=section,%
-level=2,%
-indent=\z@,%
-beforeskip=\cs_if_exist_use:NF \scr@subsubsection@beforeskip {-3.25ex\@plus -1ex \@minus -.2ex},%
-afterskip=\cs_if_exist_use:NF \scr@subsubsection@afterskip {1.5ex \@plus .2ex},%
-tocstyle=subsection,%
-tocindent=\cs_if_exist_use:NF \scr@tso@subsubsection@indent {1.5em},%
-tocnumwidth=\cs_if_exist_use:NF \scr@tso@subsubsection@numwidth {2.3em},%
+ style=section,%
+ level=3,%
+ indent=\z@,%
+ beforeskip=\cs_if_exist_use:NF \scr@subsubsection@beforeskip {-3.25ex\@plus -1ex \@minus -.2ex},%
+ afterskip=\cs_if_exist_use:NF \scr@subsubsection@afterskip {1.5ex \@plus .2ex},%
+ tocstyle=subsection,%
+ tocindent=\cs_if_exist_use:NF \scr@tso@subsubsection@indent {1.5em},%
+ tocnumwidth=\cs_if_exist_use:NF \scr@tso@subsubsection@numwidth {2.3em},%
]{@solution}
@@ -819,5 +888,122 @@ tocnumwidth=\cs_if_exist_use:NF \scr@tso@subsubsection@numwidth {2.3em},%
\ptxcd_makeheadrule[color=identbarcolor, width=\textwidth]{ptxcd_headrule}
+% Point referencing
+\AddtoDoHook{heading/preinit/subtask}{
+ \bool_if:NT \g__ptxcd_points_bool {
+ \fp_gadd:Nn \g__ptxcd_ex_collected_points_fp {\l_ptxcd_ex_subtask_points_fp}
+ }
+}
+
+\AddtoDoHook{heading/preinit/task}{
+ \fp_gzero:N \g__ptxcd_ex_collected_points_fp
+}
+
+
+\msg_new:nnn {tudaexercise} {points-differ} {
+ Value~of~points~changed~for~at~least~one~task.\\
+ Please~rerun~LaTeX~to~get~correct~references~and~calculations.
+}
+
+\msg_new:nnn {tudaexercise} {empty-point-mapping} {
+ I~could~not~find~references~for~points~in~the~aux~file.\\
+ Please~rerun~LaTeX~to~get~correct~references~and~calculations.
+}
+
+\msg_new:nnn {tudaexercise} {point-referencing-disabled} {
+ You~try~to~use~#1.\\
+ This~function~is~only~available~with~points=true~or~points=auto.\\
+ Please~activate~referencing~to~use~it.
+}
+
+\bool_if:NTF \g__ptxcd_points_bool {
+ \BeforeClosingMainAux{
+ \tl_clear:N \l_tmpa_tl
+ \tl_clear:N \l_tmpb_tl
+ \prop_map_inline:Nn \g__ptxcd_points_collector_prop {
+ \tl_put_right:Nn \l_tmpa_tl {#1=#2,}
+ }
+ \prop_map_inline:Nn \g__ptxcd_loaded_points_prop {
+ \tl_put_right:Nn \l_tmpb_tl {#1=#2,}
+ }
+ \tl_if_eq:NNF \l_tmpa_tl \l_tmpb_tl {
+ \msg_warning:nn {tudaexercise} {points-differ}
+ }
+ \iow_now:Nx \@auxout{
+ \exp_not:N \ptxcd@LoadPoints[\thetask]{\l_tmpa_tl}
+ }
+ }
+
+ \newcommand{\getPoints}[1]{
+ \exp_args:NNf \prop_get:NnNTF \g__ptxcd_loaded_points_prop {#1} \l_tmpa_tl
+ {\l_tmpa_tl}
+ {\nfss@text{\reset@font\bfseries??}}
+ }
+
+ \newcommand{\refPoints}[1]{
+ \edef\x{#1}
+ \cs_if_exist:cTF {r@\x} {
+ \getPoints{\tl_head:v {r@\x}}
+ }{
+ \nfss@text{\reset@font\bfseries??}
+ }
+ }
+
+ \newcommand{\getPointsTotal}{
+ \fp_use:N \g__ptxcd_points_total_fp
+ }
+} {
+ \newcommand{\getPoints}[1]{
+ \msg_error:nnn {tudaexercise} {point-referencing-disabled} {\getPoints}
+ }
+ \newcommand{\refPoints}[1]{
+ \msg_error:nnn {tudaexercise} {point-referencing-disabled} {\refPoints}
+ }
+ \newcommand{\getPointsTotal}[1]{
+ \msg_error:nnn {tudaexercise} {point-referencing-disabled} {\getPointsTotal}
+ }
+}
+
+\cs_new:Nn \__ptxcd_map_points_helper:nn {#1-#2}
+\NewDocumentCommand{\mapPoints}{sO{1}m}{
+ \cs_gset_nopar:Nn \__ptxcd_map_points_helper:nn {#3}
+ \prop_if_empty:NTF \g__ptxcd_loaded_points_prop {
+ \msg_warning:nn {tudaexercise} {empty-point-mapping}
+ \__ptxcd_map_points_helper:nn {?task?} {?points?}
+ }{
+ \int_gset:Nn \g_ptxcd_tmp_int {\value{task}}
+ \setcounter{task}{#2}
+ \tl_gclear:N \g_ptxcd_tmp_tl
+ \bool_gset_true:N \g_tmpa_bool
+ \bool_while_do:Nn \g_tmpa_bool
+ {
+ \exp_args:NNx \prop_get:NnNTF \g__ptxcd_loaded_points_prop {\thetask} \l_tmpa_tl
+ {
+ \fp_compare:nF {\l_tmpa_tl = 0}
+ {
+ \tl_gput_right:Nn \g_ptxcd_tmp_tl {\__ptxcd_map_points_helper:nn}
+ \tl_gput_right:Nx \g_ptxcd_tmp_tl {{\thetask} {\l_tmpa_tl}}
+ }
+ }
+ {\bool_gset_false:N \g_tmpa_bool}
+ \stepcounter{task}
+ }
+ \setcounter{task}{\int_use:N \g_ptxcd_tmp_int}
+ \g_ptxcd_tmp_tl
+ }
+}
+
+
+\newcommand*{\ptxcd@LoadPoints}[2][]{
+ \prop_gset_from_keyval:Nn \g__ptxcd_loaded_points_prop {
+ #2
+ }
+ \fp_gzero:N \g__ptxcd_points_total_fp
+ \prop_map_inline:Nn \g__ptxcd_loaded_points_prop {
+ \fp_gadd:Nn \g__ptxcd_points_total_fp {##2}
+ }
+}
+
+
\endinput
%End of class tudaexercise.cls
diff --git a/macros/latex/contrib/tuda-ci/tex/tudafonts.sty b/macros/latex/contrib/tuda-ci/tex/tudafonts.sty
index 5218c2d8e8..31ef304f4a 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudafonts.sty
+++ b/macros/latex/contrib/tuda-ci/tex/tudafonts.sty
@@ -1,4 +1,4 @@
-%% This is file `tudafonts.sty' version 3.12 (2021/03/06),
+%% This is file `tudafonts.sty' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{tudafonts}
[\filedate\space\fileversion\space
diff --git a/macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls b/macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls
index ab677c877f..04d3f39512 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls
+++ b/macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls
@@ -1,4 +1,4 @@
-%% This is file `tudaleaflet.cls' version 3.12 (2021/03/06),
+%% This is file `tudaleaflet.cls' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\ProvidesExplPackage{tudaleaflet}{\filedate}{\fileversion}{Leaflets using the Corporate Design of TU Darmstadt}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudaletter.cls b/macros/latex/contrib/tuda-ci/tex/tudaletter.cls
index 390cd7b554..06617572b5 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudaletter.cls
+++ b/macros/latex/contrib/tuda-ci/tex/tudaletter.cls
@@ -1,4 +1,4 @@
-%% This is file `tudaletter.cls' version 3.12 (2021/03/06),
+%% This is file `tudaletter.cls' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\ProvidesExplClass{tudaletter}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo b/macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo
index e5b4e77338..5e863de126 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo
@@ -1,4 +1,4 @@
-%% This is file `tudalettersize10pt.clo' version 3.12 (2021/03/06),
+%% This is file `tudalettersize10pt.clo' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg b/macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg
index d9406c4a81..1a1f53aca2 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg
+++ b/macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg
@@ -1,4 +1,4 @@
-%% This is file `tudamecheng.cfg' version 3.12 (2021/03/06),
+%% This is file `tudamecheng.cfg' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\RequirePackage{expl3}
\ProvidesExplFile{tudamecheng.cfg}
{\filedate}{\fileversion}{Special Features the department of mechanical engineering of Darmstadt's Corporate Design (tuda-ci)}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudaposter.cls b/macros/latex/contrib/tuda-ci/tex/tudaposter.cls
index 0c0e52d1be..bd3f85cf22 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudaposter.cls
+++ b/macros/latex/contrib/tuda-ci/tex/tudaposter.cls
@@ -1,4 +1,4 @@
-%% This is file `tudaposter.cls' version 3.12 (2021/03/06),
+%% This is file `tudaposter.cls' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\ProvidesExplPackage{tudaposter}{\filedate}{\fileversion}{Poster Layouts for the Corporate Design of TU Darmstadt}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudapub.cls b/macros/latex/contrib/tuda-ci/tex/tudapub.cls
index 51c51186d7..3765e51882 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudapub.cls
+++ b/macros/latex/contrib/tuda-ci/tex/tudapub.cls
@@ -1,4 +1,4 @@
-%% This is file `tudapub.cls' version 3.12 (2021/03/06),
+%% This is file `tudapub.cls' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\ProvidesExplClass{tudapub}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudarules.sty b/macros/latex/contrib/tuda-ci/tex/tudarules.sty
index abfeec0bed..6c3c3f826c 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudarules.sty
+++ b/macros/latex/contrib/tuda-ci/tex/tudarules.sty
@@ -1,4 +1,4 @@
-%% This is file `tudarules.sty' version 3.12 (2021/03/06),
+%% This is file `tudarules.sty' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\ProvidesExplPackage{tudarules}{\filedate}{\fileversion}{Creation of colored bars for tuda-ci bundle}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudasciposter.cls b/macros/latex/contrib/tuda-ci/tex/tudasciposter.cls
index cfdd7a73cf..7b1bfc0a98 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudasciposter.cls
+++ b/macros/latex/contrib/tuda-ci/tex/tudasciposter.cls
@@ -1,4 +1,4 @@
-%% This is file `tudasciposter.cls' version 3.12 (2021/03/06),
+%% This is file `tudasciposter.cls' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\ProvidesExplPackage{tudasciposter}{\filedate}{\fileversion}{Scientific Poster Layout for TU Darmstadt}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo b/macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo
index 74585f6a11..adb9f88a50 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo
@@ -1,4 +1,4 @@
-%% This is file `tudasize9pt.clo' version 3.12 (2021/03/06),
+%% This is file `tudasize9pt.clo' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/tex/tudathesis.cfg b/macros/latex/contrib/tuda-ci/tex/tudathesis.cfg
index 7dd33c6292..e9ddbdcab1 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudathesis.cfg
+++ b/macros/latex/contrib/tuda-ci/tex/tudathesis.cfg
@@ -1,4 +1,4 @@
-%% This is file `tudathesis.cfg' version 3.12 (2021/03/06),
+%% This is file `tudathesis.cfg' version 3.13 (2021/03/16),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.12}
-\def\filedate{2021/03/06}
+\def\fileversion{3.13}
+\def\filedate{2021/03/16}
\RequirePackage{expl3}
\ProvidesExplFile{tudathesis.cfg}
{\filedate}{\fileversion}{Special Features for publication type 'thesis' using TU Darmstadt's Corporate Design (tuda-ci)}
diff --git a/macros/latex/required/firstaid/changes.txt b/macros/latex/required/firstaid/changes.txt
index 5d70ebc2cb..c97129e31f 100644
--- a/macros/latex/required/firstaid/changes.txt
+++ b/macros/latex/required/firstaid/changes.txt
@@ -1,3 +1,11 @@
+2021-03-15 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * latex2e-first-aid-for-external-files.dtx:
+ bigfoot incorrectly assumes insertions being ordered, so this is
+ enforced for now.
+ We also fix \FN@allmarks which can blow as it loops using the
+ wrong counter (so the loops runs a random number of times)
+
2020-12-14 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
* latex2e-first-aid-for-external-files.dtx:
diff --git a/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.dtx b/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.dtx
index 9dcedaf435..1ce357d6d3 100644
--- a/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.dtx
+++ b/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.dtx
@@ -110,8 +110,8 @@
% \end{macrocode}
%
% \begin{macrocode}
-\def\LaTeXFirstAidDate{2020/12/14}
-\def\LaTeXFirstAidVersion{v1.0i}
+\def\LaTeXFirstAidDate{2021/03/15}
+\def\LaTeXFirstAidVersion{v1.0j}
% \end{macrocode}
%
% \begin{macrocode}
@@ -397,6 +397,42 @@
% \end{macrocode}
%
%
+% \subsection{The \pkg{bigfoot} first aid}
+%
+% The \pkg{bigfoot} packages makes the assumption that two
+% \cs{newinsert} allocations have a recognisable order in their
+% numbers, the second one has a lower number. This was correct in
+% the classic \TeX{} implementation but with the extended
+% allocation possibilities of all modern engines is no longer the
+% case and there is a point where the allocations take a ``jump''
+% breaking the odering assumption. These days we are fairly close
+% to that point and depending on how many packages are loaded
+% before \pkg{bigfoot} the package breaks.
+%
+% This firstaid therefore jumps over the problematical point by
+% pushing the count allocation to a safe value if necessary.
+% \begin{macrocode}
+\AddToHook{file/after/bigfoot.sty}{%
+ \ifnum\count10<\insc@unt
+ \global\count10=\insc@unt
+ \fi
+% \end{macrocode}
+% We also correct a bug that \pkg{bigfoot} tries to shift mark
+% registers, but in \LaTeX{} (at least since 2015) the allocation
+% number is not 266, so it does that to a random number of mark
+% registers (which sometimes blows up depending on the value in 266).
+% \begin{macrocode}
+ \def\FN@allmarks#1{\@elt{#1}%
+ \ifnum#1<\count256 %<--- problem: 266 isn't the counter for marks
+ \expandafter\FN@allmarks\expandafter{\number\numexpr#1+\@ne}%
+ \fi}%
+}
+% \end{macrocode}
+%
+%
+%
+%
+%
% \subsection[Temporary fixes for the kernel (until the next
% patch-level release)]
% {Temporary fixes for the kernel \\
diff --git a/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.pdf b/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.pdf
index 6affd3174a..1bf28e4760 100644
--- a/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.pdf
+++ b/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.pdf
Binary files differ