summaryrefslogtreecommitdiff
path: root/macros
diff options
context:
space:
mode:
Diffstat (limited to 'macros')
-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/LICENSE (renamed from macros/unicodetex/latex/colorist/LICENSE)0
-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
-rw-r--r--macros/luatex/latex/lua-typo/README.md7
-rw-r--r--macros/luatex/latex/lua-typo/doc/lua-typo-demo.pdf (renamed from macros/luatex/latex/lua-typo/doc/demo.pdf)bin16794 -> 16794 bytes
-rw-r--r--macros/luatex/latex/lua-typo/doc/lua-typo-demo.tex (renamed from macros/luatex/latex/lua-typo/doc/demo.tex)0
-rw-r--r--macros/luatex/latex/lua-typo/doc/lua-typo-fr.pdfbin59618 -> 59619 bytes
-rw-r--r--macros/luatex/latex/lua-typo/doc/lua-typo.pdfbin114259 -> 115609 bytes
-rw-r--r--macros/luatex/latex/lua-typo/source/lua-typo.dtx264
-rw-r--r--macros/unicodetex/latex/beaulivre/LICENSE416
-rw-r--r--macros/unicodetex/latex/beaulivre/README.md16
-rw-r--r--macros/unicodetex/latex/beaulivre/beaulivre-doc-cn.pdfbin0 -> 166042 bytes
-rw-r--r--macros/unicodetex/latex/beaulivre/beaulivre-doc-cn.tex260
-rw-r--r--macros/unicodetex/latex/beaulivre/beaulivre-doc-en.pdfbin0 -> 114887 bytes
-rw-r--r--macros/unicodetex/latex/beaulivre/beaulivre-doc-en.tex254
-rw-r--r--macros/unicodetex/latex/beaulivre/beaulivre.cls237
-rw-r--r--macros/unicodetex/latex/colorist/README.md23
-rw-r--r--macros/unicodetex/latex/colorist/colorist-doc-cn.pdfbin166672 -> 0 bytes
-rw-r--r--macros/unicodetex/latex/colorist/colorist-doc-en.pdfbin121854 -> 0 bytes
-rw-r--r--macros/unicodetex/latex/colorist/colorist.dtx856
-rw-r--r--macros/unicodetex/latex/colorist/colorist.ins49
-rw-r--r--macros/unicodetex/latex/lebhart/LICENSE416
-rw-r--r--macros/unicodetex/latex/lebhart/README.md16
-rw-r--r--macros/unicodetex/latex/lebhart/lebhart-doc-cn.pdfbin0 -> 161740 bytes
-rw-r--r--macros/unicodetex/latex/lebhart/lebhart-doc-cn.tex (renamed from macros/unicodetex/latex/colorist/colorist-doc-cn.tex)49
-rw-r--r--macros/unicodetex/latex/lebhart/lebhart-doc-en.pdfbin0 -> 114964 bytes
-rw-r--r--macros/unicodetex/latex/lebhart/lebhart-doc-en.tex (renamed from macros/unicodetex/latex/colorist/colorist-doc-en.tex)61
-rw-r--r--macros/unicodetex/latex/lebhart/lebhart.cls237
-rw-r--r--macros/unicodetex/latex/polyglossia/README.md4
-rw-r--r--macros/unicodetex/latex/polyglossia/polyglossia.dtx1671
-rw-r--r--macros/unicodetex/latex/polyglossia/polyglossia.pdfbin280545 -> 336335 bytes
127 files changed, 6474 insertions, 2119 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/unicodetex/latex/colorist/LICENSE b/macros/latex/contrib/colorist/LICENSE
index 2244313901..2244313901 100644
--- a/macros/unicodetex/latex/colorist/LICENSE
+++ b/macros/latex/contrib/colorist/LICENSE
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
diff --git a/macros/luatex/latex/lua-typo/README.md b/macros/luatex/latex/lua-typo/README.md
index 29db098d3b..5e88fafb62 100644
--- a/macros/luatex/latex/lua-typo/README.md
+++ b/macros/luatex/latex/lua-typo/README.md
@@ -20,7 +20,7 @@ Then read the documentation in English (file lua-typo.pdf) or in French
License
-------
-Released under the LaTeX Project Public License v1.3 or later
+Released under the LaTeX Project Public License v1.3c or later
See http://www.latex-project.org/lppl.txt
for the details of that license.
@@ -50,6 +50,11 @@ Changes
- First release version: 0.30, March 2021.
+- v.0.32: bug fixes
+ better protection against nil nodes,
+ new page detection corrected,
+ homeoarchy detection improved.
+
--
Copyright 2020--2021 Daniel Flipo
E-mail: daniel (dot) flipo (at) free (dot) fr
diff --git a/macros/luatex/latex/lua-typo/doc/demo.pdf b/macros/luatex/latex/lua-typo/doc/lua-typo-demo.pdf
index d7e17c1ab1..f5c82e7015 100644
--- a/macros/luatex/latex/lua-typo/doc/demo.pdf
+++ b/macros/luatex/latex/lua-typo/doc/lua-typo-demo.pdf
Binary files differ
diff --git a/macros/luatex/latex/lua-typo/doc/demo.tex b/macros/luatex/latex/lua-typo/doc/lua-typo-demo.tex
index e09c822e1d..e09c822e1d 100644
--- a/macros/luatex/latex/lua-typo/doc/demo.tex
+++ b/macros/luatex/latex/lua-typo/doc/lua-typo-demo.tex
diff --git a/macros/luatex/latex/lua-typo/doc/lua-typo-fr.pdf b/macros/luatex/latex/lua-typo/doc/lua-typo-fr.pdf
index 273649ff71..5b2c788bd0 100644
--- a/macros/luatex/latex/lua-typo/doc/lua-typo-fr.pdf
+++ b/macros/luatex/latex/lua-typo/doc/lua-typo-fr.pdf
Binary files differ
diff --git a/macros/luatex/latex/lua-typo/doc/lua-typo.pdf b/macros/luatex/latex/lua-typo/doc/lua-typo.pdf
index 16a7f744c6..764e6374a4 100644
--- a/macros/luatex/latex/lua-typo/doc/lua-typo.pdf
+++ b/macros/luatex/latex/lua-typo/doc/lua-typo.pdf
Binary files differ
diff --git a/macros/luatex/latex/lua-typo/source/lua-typo.dtx b/macros/luatex/latex/lua-typo/source/lua-typo.dtx
index d1a4b0068a..f783033fdd 100644
--- a/macros/luatex/latex/lua-typo/source/lua-typo.dtx
+++ b/macros/luatex/latex/lua-typo/source/lua-typo.dtx
@@ -1,4 +1,4 @@
-% \CheckSum{337}
+% \CheckSum{336}
%
% \iffalse meta-comment
%
@@ -618,7 +618,7 @@
\ProvidesFile{lua-typo.dtx}
%</dtx>
%<*dtx|sty>
- [2021/03/03 v.0.30 Daniel Flipo]
+ [2021/03/14 v.0.32 Daniel Flipo]
%</dtx|sty>
%<*sty>
% \fi
@@ -841,7 +841,7 @@ luatypo = { }
}
% \end{macrocode}
%
-% Print the summary of offending pages ---if any-- at the
+% Print the summary of offending pages ---if any--- at the
% (very) end of document unless option |None| has been selected.
%
% \begin{macrocode}
@@ -864,8 +864,8 @@ luatypo = { }
texio.write_nl('*** lua-typo: No Typo Flaws found.')
else
texio.write_nl('*** lua-typo: WARNING *************')
- texio.write_nl('The following pages need attention: '
- .. luatypo.pagelist)
+ texio.write_nl('The following pages need attention: ')
+ texio.write(luatypo.pagelist)
end
texio.write_nl('***********************************')
texio.write_nl(' ')
@@ -955,6 +955,7 @@ local hyphcount = 0
local parlines = 0
local pagelines = 0
local pageno = 0
+local prevno = 0
local pageflag = false
local char_to_discard = { }
@@ -972,6 +973,8 @@ split_lig[0xFB01] = "fi"
split_lig[0xFB02] = "fl"
split_lig[0xFB03] = "ffi"
split_lig[0xFB04] = "ffl"
+split_lig[0xFB05] = "st"
+split_lig[0xFB06] = "st"
local DISC = node.id("disc")
local GLYPH = node.id("glyph")
@@ -982,7 +985,7 @@ local LPAR = node.id("local_par")
local MKERN = node.id("margin_kern")
local PENALTY = node.id("penalty")
% \end{macrocode}
-% GLUE subtypes:
+% Glue subtypes:
% \begin{macrocode}
local USRSKIP = 0
local PARSKIP = 3
@@ -991,7 +994,7 @@ local RGTSKIP = 9
local TOPSKIP = 10
local PARFILL = 15
% \end{macrocode}
-% HLIST subtypes:
+% Hlist subtypes:
% \begin{macrocode}
local LINE = 1
local BOX = 2
@@ -1000,6 +1003,10 @@ local BOX = 2
% \begin{macrocode}
local USER = 0
local HYPH = 0x2D
+% \end{macrocode}
+% Glyph subtypes:
+% \begin{macrocode}
+local LIGA = 0x102
local effective_glue = node.effective_glue
local set_attribute = node.set_attribute
@@ -1018,24 +1025,24 @@ local is_glyph = node.is_glyph
% \begin{macrocode}
local color_node = function (node, color)
local attr = oberdiek.luacolor.getattribute()
- if node.id == DISC then
+ if node and node.id == DISC then
local pre = node.pre
local post = node.post
- local replace = node.replace
+ local repl = node.replace
if pre then
set_attribute(pre,attr,color)
-%<dbg> texio.write_nl('PRE=' .. tostring(pre.char))
+%<dbg> texio.write_nl('PRE=' .. tostring(pre.char))
end
if post then
set_attribute(post,attr,color)
-%<dbg> texio.write_nl('POST=' .. tostring(post.char))
+%<dbg> texio.write_nl('POST=' .. tostring(post.char))
end
- if replace then
- set_attribute(replace,attr,color)
-%<dbg> texio.write_nl('REPL=' .. tostring(replace.char))
+ if repl then
+ set_attribute(repl,attr,color)
+%<dbg> texio.write_nl('REPL=' .. tostring(repl.char))
end
%<dbg> texio.write_nl(' ')
- else
+ elseif node then
set_attribute(node,attr,color)
end
end
@@ -1051,6 +1058,7 @@ local color_hbox = function (head, color)
color_node(n, color)
end
end
+% \end{macrocode}
%
% This auxillary function colours a whole line. It requires two
% arguments: a line’s node and a (named) colour.
@@ -1059,7 +1067,7 @@ end
local color_line = function (head, color)
local first = head.head
for n in traverse(first) do
- if n.id == HLIST and n.subtype == BOX then
+ if n and n.id == HLIST and n.subtype == BOX then
color_hbox(n, color)
else
color_node(n, color)
@@ -1084,14 +1092,14 @@ end
local signature = function (node, string, swap)
local n = node
local str = string
- if n.id == GLYPH then
+ if n and n.id == GLYPH then
local b, id = is_glyph(n)
if b and not char_to_discard[b] then
% \end{macrocode}
% Punctuation has to be discarded; the French apostrophe (right quote
% U+2019) has a char code ``out of range’’, we replace it with U+0027;
% Other glyphs should have char codes less than 0x100 (or 0x180?) or
-% be ligatures… standard ones (U+FB00 to U+FB04) are converted using
+% be ligatures… standard ones (U+FB00 to U+FB06) are converted using
% table |split_lig|.
% \begin{macrocode}
if b == 0x2019 then b = 0x27 end
@@ -1103,9 +1111,19 @@ local signature = function (node, string, swap)
c = string.reverse(c)
end
str = str .. c
+% \end{macrocode}
+% Experimental: store other ligatures as the last two digits of their
+% decimal code…
+% \begin{macrocode}
+ elseif n.subtype == LIGA and b > 0xE000 then
+ local c = string.sub(b,-2)
+ if swap then
+ c = string.reverse(c)
+ end
+ str = str .. c
end
end
- elseif n.id == DISC then
+ elseif n and n.id == DISC then
% \end{macrocode}
% Ligatures are split into |pre| and |post| and both parts are
% stored. In case of \emph{ffl, ffi}, the post part is also
@@ -1129,12 +1147,18 @@ local signature = function (node, string, swap)
end
end
if swap then
- str = str .. c2 .. c1
+ str = str .. c2 .. c1
else
str = str .. c1 .. c2
end
end
+% \end{macrocode}
+% The returned length is the number of \emph{letters}.
+% \begin{macrocode}
local len = string.len(str)
+ if string.find(str, "_") then
+ len = len - 1
+ end
return len, str
end
% \end{macrocode}
@@ -1150,32 +1174,30 @@ end
local check_last_word = function (old, node, color, flag)
local match = false
local new = ""
- local len = 0
- if flag then
+ local maxlen = 0
+ if flag and node then
+ local swap = true
% \end{macrocode}
-% Get the last glyph one the line, skipping discretionaries,
-% margin kerns, etc., unless |flag| cancels the whole process.
+% Step back to the last glyph or discretionary.
% \begin{macrocode}
- local swap = true
local lastn = node
- while lastn and lastn.id ~= GLYPH and lastn.prev do
+ while lastn and lastn.id ~= GLYPH and lastn.id ~= DISC do
lastn = lastn.prev
end
% \end{macrocode}
% A signature is built from the last two words on the current line.
% \begin{macrocode}
local n = lastn
- repeat
- len, new = signature (n, new, swap)
+ while n and n.id ~= GLUE do
+ maxlen, new = signature (n, new, swap)
n = n.prev
- until not n or n.id == GLUE
+ end
if n and n.id == GLUE then
new = new .. "_"
- len = len + 1
repeat
n = n.prev
- len, new = signature (n, new, swap)
- until n.id == GLUE or not n.prev
+ maxlen, new = signature (n, new, swap)
+ until not n or n.id == GLUE
end
new = string.reverse(new)
%<dbg> texio.write_nl('EOLsigold=' .. old)
@@ -1184,24 +1206,24 @@ local check_last_word = function (old, node, color, flag)
local MinPart = luatypo.MinPart
MinFull = math.min(MinPart,MinFull)
local k = MinPart
- local oldlast = string.gsub (old, '%w+_', '')
- local newlast = string.gsub (new, '%w+_', '')
- len = string.len(newlast)
- if len < MinPart then
+ local oldlast = string.gsub (old, '.*_', '')
+ local newlast = string.gsub (new, '.*_', '')
+ local i = string.find(new, "_")
+ if i and i > maxlen - MinPart + 1 then
k = MinPart + 1
end
local oldsub = string.sub(old,-k)
local newsub = string.sub(new,-k)
- local maxlen = string.len(new)
- if oldsub == newsub then
+ local l = string.len(new)
+ if oldsub == newsub and l >= k then
%<dbg> texio.write_nl('EOLnewsub=' .. newsub)
match = true
- elseif oldlast == newlast and len >= MinFull then
+ elseif oldlast == newlast and string.len(newlast) >= MinFull then
%<dbg> texio.write_nl('EOLnewlast=' .. newlast)
match = true
oldsub = oldlast
newsub = newlast
- k = len
+ k = string.len(newlast)
end
if match then
% \end{macrocode}
@@ -1209,7 +1231,7 @@ local check_last_word = function (old, node, color, flag)
% \begin{macrocode}
local osub = oldsub
local nsub = newsub
- while osub == nsub and k < maxlen do
+ while osub == nsub and k <= maxlen do
k = k +1
osub = string.sub(old,-k)
nsub = string.sub(new,-k)
@@ -1217,8 +1239,9 @@ local check_last_word = function (old, node, color, flag)
newsub = nsub
end
end
+ newsub = string.gsub(newsub, '^_', '')
%<dbg> texio.write_nl('EOLfullmatch=' .. newsub)
-%<msg> texio.write_nl('***MATCH=' .. newsub ..
+%<msg> texio.write_nl('***EOLMATCH=' .. newsub ..
%<msg> " on page " .. pageno)
%<msg> texio.write_nl(' ')
% \end{macrocode}
@@ -1226,18 +1249,16 @@ local check_last_word = function (old, node, color, flag)
% \begin{macrocode}
oldsub = string.reverse(newsub)
local newsub = ""
- local k = string.len(oldsub)
local n = lastn
repeat
if n and n.id ~= GLUE then
color_node(n, color)
- len, newsub = signature(n, newsub, swap)
+ l, newsub = signature(n, newsub, swap)
elseif n then
newsub = newsub .. "_"
- len = len + 1
end
n = n.prev
- until not n or newsub == oldsub or len >= k
+ until not n or newsub == oldsub or l >= k
end
end
return new, match
@@ -1252,19 +1273,23 @@ local check_first_word = function (old, node, color, flag)
local match = false
local swap = false
local new = ""
- local len = 0
+ local maxlen = 0
local start = node
local n = start
- while n and n.id ~= GLUE do
- len, new = signature (n, new, swap)
- n = n.next
+ while n and n.id ~= GLYPH and n.id ~= DISC do
+ n = n.next
end
- n = n.next
- new = new .. "_"
while n and n.id ~= GLUE do
- len, new = signature (n, new, swap)
+ maxlen, new = signature (n, new, swap)
n = n.next
end
+ if n and n.id == GLUE then
+ new = new .. "_"
+ repeat
+ n = n.next
+ maxlen, new = signature (n, new, swap)
+ until not n or n.id == GLUE
+ end
%<dbg> texio.write_nl('BOLsigold=' .. old)
%<dbg> texio.write(' BOLsig=' .. new)
% \end{macrocode}
@@ -1277,28 +1302,26 @@ local check_first_word = function (old, node, color, flag)
local MinPart = luatypo.MinPart
MinFull = math.min(MinPart,MinFull)
local k = MinPart
- local L = MinPart -1
local oldsub = ""
local newsub = ""
- local oldfirst = string.gsub (old, '_%w+', '')
- local newfirst = string.gsub (new, '_%w+', '')
- len = string.len(newfirst)
- if len < MinPart then
+ local oldfirst = string.gsub (old, '_.*', '')
+ local newfirst = string.gsub (new, '_.*', '')
+ local i = string.find(new, "_")
+ if i and i <= MinPart then
k = MinPart + 1
end
- local maxlen = string.len(new)
- local oldsub = string.sub(old,1,L)
- local newsub = string.sub(new,1,L)
- if oldsub == newsub then
+ local oldsub = string.sub(old,1,k)
+ local newsub = string.sub(new,1,k)
+ local l = string.len(newsub)
+ if oldsub == newsub and l >= k then
%<dbg> texio.write_nl('BOLnewsub=' .. newsub)
match = true
- k = L
- elseif oldfirst == newfirst and len >= MinFull then
+ elseif oldfirst == newfirst and string.len(newfirst) >= MinFull then
%<dbg> texio.write_nl('BOLnewfirst=' .. newfirst)
match = true
oldsub = oldfirst
newsub = newfirst
- k = len
+ k = string.len(newfirst)
end
if match then
% \end{macrocode}
@@ -1306,7 +1329,7 @@ local check_first_word = function (old, node, color, flag)
% \begin{macrocode}
local osub = oldsub
local nsub = newsub
- while osub == nsub and k < maxlen do
+ while osub == nsub and k <= maxlen do
k = k + 1
osub = string.sub(old,1,k)
nsub = string.sub(new,1,k)
@@ -1314,15 +1337,11 @@ local check_first_word = function (old, node, color, flag)
newsub = nsub
end
end
- if k < MinPart then
- match =false
- end
- end
- if match then
-%<dbg> texio.write_nl('BOLfullmatch=' .. newsub)
-%<msg> texio.write_nl('***MATCH=' .. newsub ..
-%<msg> " on page " .. pageno)
-%<msg> texio.write_nl(' ')
+ newsub = string.gsub(newsub, '_$', '') --$
+%<dbg> texio.write_nl('BOLfullmatch=' .. newsub)
+%<msg> texio.write_nl('***BOLMATCH=' .. newsub ..
+%<msg> " on page " .. pageno)
+%<msg> texio.write_nl(' ')
% \end{macrocode}
% Lest's colour the matching string.
% \begin{macrocode}
@@ -1333,13 +1352,12 @@ local check_first_word = function (old, node, color, flag)
repeat
if n and n.id ~= GLUE then
color_node(n, color)
- len, newsub = signature(n, newsub, swap)
+ l, newsub = signature(n, newsub, swap)
elseif n then
newsub = newsub .. "_"
- len = len + 1
end
n = n.next
- until not n or newsub == oldsub or len >= k
+ until not n or newsub == oldsub or l >= k
end
end
return new, match
@@ -1370,9 +1388,9 @@ local check_regexpr = function (glyph)
match = string.find(luatypo.single[lang], string.char(lchar))
if match then
color_node(glyph,COLOR)
-%<msg> texio.write_nl('***MATCH=' .. string.char(lchar) ..
-%<msg> " on page " .. pageno)
-%<msg> texio.write_nl(' ')
+%<msg> texio.write_nl('***RGXMATCH=' .. string.char(lchar) ..
+%<msg> " on page " .. pageno)
+%<msg> texio.write_nl(' ')
end
end
end
@@ -1392,7 +1410,7 @@ local check_regexpr = function (glyph)
if match then
color_node(previous,COLOR)
color_node(glyph,COLOR)
-%<msg> texio.write_nl('***MATCH=' .. pattern ..
+%<msg> texio.write_nl('***RGXMATCH=' .. pattern ..
%<msg> " on page " .. pageno)
%<msg> texio.write_nl(' ')
end
@@ -1411,7 +1429,7 @@ local check_regexpr = function (glyph)
if match then
color_node(pprev,COLOR)
color_node(glyph,COLOR)
-%<msg> texio.write_nl('***MATCH=' .. pattern ..
+%<msg> texio.write_nl('***RGXMATCH=' .. pattern ..
%<msg> " on page " .. pageno)
%<msg> texio.write_nl(' ')
end
@@ -1430,7 +1448,7 @@ end
% \begin{macrocode}
local show_pre_disc = function (disc, color)
local n = disc
- while n.id ~= GLUE do
+ while n and n.id ~= GLUE do
color_node(n, color)
n = n.prev
end
@@ -1485,13 +1503,16 @@ luatypo.check_page = function (head)
% |hyphcount| hold the number the consecutive hyphenated lines.
% \begin{macrocode}
if head.id == GLUE and head.subtype == TOPSKIP then
- pageflag = false
- match1 = false
pageno = tex.getcount("c@page")
hyphcount = 0
- pagelines = 0
- firstwd = ""
- lastwd = ""
+ if pageno > prevno then
+ pageflag = false
+ pagelines = 0
+ match1 = false
+ firstwd = ""
+ lastwd = ""
+ prevno = pageno
+ end
elseif head.id == HLIST and head.subtype == LINE then
% \end{macrocode}
% The current node is a line, |first| is the line’s first node.
@@ -1507,30 +1528,34 @@ luatypo.check_page = function (head)
% \end{macrocode}
% Is this line really a text line (one glyph at least)?
% \begin{macrocode}
- local textline = true
- local n = first
- while (n and n.id ~= GLYPH) and
- not (n.id == GLUE and n.subtype == RGTSKIP) do
- n = n.next
- end
- if n.id == GLUE then
- textline = false
+ local textline = false
+ if first.id == GLYPH then
+ textline = true
+ else
+ local n = first
+ repeat
+ n = n.next
+ if n and n.id == GLYPH then
+ textline = true
+ break
+ end
+ until not n or (n.id == GLUE and n.subtype == RGTSKIP)
end
% \end{macrocode}
% Is this line overfull or underfull?
% \begin{macrocode}
if head.glue_set == 1 and head.glue_sign == 2 and
head.glue_order == 0 and OverfullLines then
-%<msg> texio.write_nl('***OVERFULL line on page ' .. pageno)
-%<msg> texio.write_nl(' ')
+%<msg> texio.write_nl('***OVERFULL line on page ' .. pageno)
+%<msg> texio.write_nl(' ')
pageflag = true
local COLOR = luatypo.colortbl[7]
color_line (head, COLOR)
elseif head.glue_set >= Stretch and head.glue_sign == 1 and
head.glue_order == 0 and UnderfullLines then
-%<msg> texio.write_nl('***UNDERFULL line on page ' ..
-%<msg> tex.getcount("c@page"))
-%<msg> texio.write_nl(' ')
+%<msg> texio.write_nl('***UNDERFULL line on page ' ..
+%<msg> tex.getcount("c@page"))
+%<msg> texio.write_nl(' ')
local COLOR = luatypo.colortbl[8]
pageflag = true
color_line (head, COLOR)
@@ -1540,7 +1565,7 @@ luatypo.check_page = function (head)
% \begin{macrocode}
if first.id == LPAR then
% \end{macrocode}
-% It starts a paragraph,
+% It starts a paragraph…
% \begin{macrocode}
hyphcount = 0
parlines = 1
@@ -1586,7 +1611,7 @@ luatypo.check_page = function (head)
orphanflag = false
% \end{macrocode}
% but it is a widow if it is the page’s first line and it does’nt
-% start a new paragraph. Orphans and widows will be colored later.
+% start a new paragraph.\\ Orphans and widows will be colored later.
% \begin{macrocode}
if pagelines == 1 and parlines > 1 then
widowflag = true
@@ -1605,8 +1630,8 @@ luatypo.check_page = function (head)
% |llwd| is the line’s length. Is it too short?
% \begin{macrocode}
if llwd < LLminWD then
-%<msg> texio.write_nl('***Last line too short, page ' .. pageno)
-%<msg> texio.write_nl(' ')
+%<msg> texio.write_nl('***Last line too short, page ' .. pageno)
+%<msg> texio.write_nl(' ')
pageflag = true
local COLOR = luatypo.colortbl[6]
local attr = oberdiek.luacolor.getattribute()
@@ -1620,8 +1645,8 @@ luatypo.check_page = function (head)
% Is this line nearly full? (ending too close to the right margin)
% \begin{macrocode}
if BackParindent and PFskip < BackPI and PFskip > BackFuzz then
-%<msg> texio.write_nl('***Last line nearly full, page ' .. pageno)
-%<msg> texio.write_nl(' ')
+%<msg> texio.write_nl('***Last line nearly full, page ' .. pageno)
+%<msg> texio.write_nl(' ')
pageflag = true
local COLOR = luatypo.colortbl[12]
local attr = oberdiek.luacolor.getattribute()
@@ -1657,8 +1682,8 @@ luatypo.check_page = function (head)
local COLOR = luatypo.colortbl[2]
local pg = show_pre_disc (pn,COLOR)
pageflag = true
-%<msg> texio.write_nl('***HYPH issue page ' .. pageno)
-%<msg> texio.write_nl(' ')
+%<msg> texio.write_nl('***HYPH issue page ' .. pageno)
+%<msg> texio.write_nl(' ')
end
if not nextnode and EOPHyphens then
% \end{macrocode}
@@ -1758,9 +1783,9 @@ luatypo.check_page = function (head)
if lwhyphflag and EOPHyphens then
%<msg> texio.write_nl('***LAST WORD SPLIT page ' .. pageno)
%<msg> texio.write_nl(' ')
+ pageflag = true
local COLOR = luatypo.colortbl[1]
local pg = show_pre_disc (pn,COLOR)
- pageflag = true
end
% \end{macrocode}
% Track empty pages: check the number of lines at end of page.
@@ -1776,20 +1801,27 @@ luatypo.check_page = function (head)
%<msg> texio.write_nl('***Only ' .. pagelines ..
%<msg> ' lines on page ' .. pageno)
%<msg> texio.write_nl(' ')
- local node = head
- while node.id ~= HLIST or node.subtype ~= LINE do
- node = node.prev
+ local n = head
+ while n and (n.id ~= HLIST or n.subtype ~= LINE) do
+ n = n.prev
+ end
+ if n then
+ color_line(n, COLOR)
end
- color_line(node, COLOR)
end
end
head = nextnode
end
% \end{macrocode}
% Add this page number to the summary if any flaw has been found on it.
+% Skip duplicates.
% \begin{macrocode}
if pageflag then
- luatypo.pagelist = luatypo.pagelist .. tostring(pageno) .. ", "
+ local pl = luatypo.pagelist
+ local p = tonumber(string.match(pl, "%s(%d+),%s$"))
+ if not p or pageno > p then
+ luatypo.pagelist = luatypo.pagelist .. tostring(pageno) .. ", "
+ end
end
return true
end
diff --git a/macros/unicodetex/latex/beaulivre/LICENSE b/macros/unicodetex/latex/beaulivre/LICENSE
new file mode 100644
index 0000000000..2244313901
--- /dev/null
+++ b/macros/unicodetex/latex/beaulivre/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/unicodetex/latex/beaulivre/README.md b/macros/unicodetex/latex/beaulivre/README.md
new file mode 100644
index 0000000000..ac62b1b3ac
--- /dev/null
+++ b/macros/unicodetex/latex/beaulivre/README.md
@@ -0,0 +1,16 @@
+<!-- Copyright (C) 2021 by Jinwen XU -->
+
+# `beaulivre` : write you books in a colorful way
+
+`beaulivre` is a LaTeX class for typesetting books, which has a colorful
+design.
+
+Currently, it has native support to English, French and Chinese typesetting. And
+it may compile with either XeLaTeX or LuaLaTeX.
+
+This is part of the colorist class series.
+
+# License
+
+This work is released under the LaTeX Project Public License, v1.3c or later.
+
diff --git a/macros/unicodetex/latex/beaulivre/beaulivre-doc-cn.pdf b/macros/unicodetex/latex/beaulivre/beaulivre-doc-cn.pdf
new file mode 100644
index 0000000000..11b51c967a
--- /dev/null
+++ b/macros/unicodetex/latex/beaulivre/beaulivre-doc-cn.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/beaulivre/beaulivre-doc-cn.tex b/macros/unicodetex/latex/beaulivre/beaulivre-doc-cn.tex
new file mode 100644
index 0000000000..fc31cfd996
--- /dev/null
+++ b/macros/unicodetex/latex/beaulivre/beaulivre-doc-cn.tex
@@ -0,0 +1,260 @@
+%! TEX program = xelatex
+\PassOptionsToPackage{dvipsnames}{xcolor}
+\documentclass{beaulivre}
+
+\UseLanguage{Chinese}
+
+%%================================
+%% TeX logo 与 网址
+%%================================
+\usepackage{hologo}
+\usepackage{url}
+
+%%================================
+%% 排版代码
+%%================================
+\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,proofideanameCN,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}}
+
+%%================================
+%% 正文
+%%================================
+\begin{document}
+
+\title{\beaulivre{},以多彩的方式排版你的图书\thanks{对应版本. \texttt{\beaulivre{} 2021/03/15}}}
+\author{锦文}
+\date{2021年3月,北京}
+
+\maketitle
+
+\frontmatter
+\chapter*{前言}
+
+\beaulivre{}是\colorist{}文档类系列的成员之一,整个系列包含用于排版文章的\colorart{}、\lebhart{}以及用于排版书的\colorbook{}、\beaulivre{}。我设计这一系列的初衷是为了撰写草稿与笔记,使之多彩而不缭乱。
+
+其中,\lebhart{}与\beaulivre{}支持英文、法文、中文三种语言,并且同一篇文档中三种语言可以很好地协调。由于采用了自定义字体,需要采用 \hologo{XeLaTeX} 或 \hologo{LuaLaTeX} 进行编译。
+
+这篇说明文档是用\beaulivre{}排版的,你可以把它看作一份简短的说明与演示。
+
+\begin{tcolorbox}[enhanced jigsaw,pad at break*=1mm,breakable,colback=yellow!25!paper,boxrule=0pt,frame hidden]
+ 由于\colorist{}主体是从\textsf{minimalist}系列修改而来的,因而一些页面元素还未完全重新设计,特别是目录、part和chapter的样式。这些内容会在将来逐渐加入。
+\end{tcolorbox}
+
+\tableofcontents
+
+\mainmatter
+
+\chapter{关于文档类的名称与选项}
+
+\lebhart{}取自于德文的lebhaft (活泼),并取了artikel (文章)的前三个字母组合而成。
+
+\beaulivre{}取自于法文的beau (美丽),以及livre (书),由二者组合而成。
+
+\medskip
+你可以使用选项 \verb|fast| 来启用快速但略微粗糙的样式,主要区别是:
+\begin{itemize}
+ \item 使用较为简单的数学字体设置;
+ \item 不使用hyperref;
+ \item 所有tcolorbox使用draft模式;
+ \item 使用polyglossia而不是babel来支持多语言。(使用polyglossia编译速度会略有提高,但目前对于中文的兼容不太完善,在它更加稳定后,将会考虑全面切换到polyglossia)
+\end{itemize}
+
+在文章的撰写阶段,建议使用 \verb|fast| 选项以加快编译速度,改善写作时的流畅程度。在最后,可以把 \verb|fast| 标记去除,从而得到正式的版本。
+
+\chapter{一些使用说明}
+
+\section{定理,以及引用}
+
+定义、定理等环境已经被预定义,可以直接使用,例如:
+\begin{code}
+ \begin{definition}[奇异物品] \label{def: strange} ...
+\end{code}
+将会生成
+\begin{definition}[奇异物品]\label{def: strange}
+ 这是奇异物品的定义。
+\end{definition}
+
+\begin{definition}[另一个定义]
+ 不同的定义会自动粘结在一起,中间不会有空隙。
+\end{definition}
+
+引用时,可以直接使用智能引用 \lstinline|\cref{标签名称}|,例如:\lstinline|\cref{def: strange}| 会显示为:\cref{def: strange}。
+
+\bigskip
+下面是定理类环境的其他几种样式:
+
+\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}
+
+\section{定义新的定理型环境}
+
+首先定义这个环境在所用语言下的名称 \lstinline|\(name of environment)(language name)|,其中 \\\lstinline|(language name)| 是 \lstinline|EN|、\lstinline|FR|、\lstinline|CN| 等,然后用下面四种方式之一定义这一环境:
+\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\proofideanameCN{思路}
+\CreateTheorem*{proofidea}
+
+例如,
+
+\begin{code}
+ \def\proofideanameCN{思路}
+ \CreateTheorem*{proofidea}
+\end{code}
+可以定义不编号的环境 \lstinline|proofidea|,它支持在中文环境中使用,效果如下所示:
+
+\begin{proofidea}
+ ...
+\end{proofidea}
+
+\section{未完成标记}
+
+你可以通过 \lstinline|\dnf| 来标记尚未完成的部分。例如:
+\begin{itemize}
+ \item \lstinline|\dnf|: \quad \dnf
+ \item \lstinline|\dnf<还需加入…>|: \quad \dnf<还需加入…>
+\end{itemize}
+
+类似的,还有 \lstinline|\needgraph| :
+\begin{itemize}
+ \item \lstinline|\needgraph|: \needgraph
+ \item \lstinline|\needgraph<关于…>|: \needgraph<关于…>
+\end{itemize}
+
+\section{语言设置}
+可以随时使用 \lstinline|\UseLanguage{语言名称}| 更改语言,语言名称包括Chinese、English、French(首字母大小写随意,例如chinese亦可)。这样,各种指令和环境的效果也会随之变动。
+
+例如,使用 \lstinline|\UseLanguage{English}| 后,定理与未完成标记会显示为:
+
+\UseLanguage{English}
+\begin{theorem}[Useless]\label{thm}
+ Some theorem in English. \dnf
+\end{theorem}
+
+引用时,定理的名称总是与定理所在区域的语言匹配,例如,开头的定义在现在的英文模式下依然显示为中文:\cref{def: strange} 和 \cref{thm}。
+
+\UseLanguage{Chinese}
+
+\section{关于字体}
+\lebhart{}与\beaulivre{}使用Palatino Linotype作为英文字体,方正悠宋、悠黑简体作为中文字体,并部分使用了Neo Euler作为数学字体:
+\begin{itemize}
+ \item English main font. \textsf{English sans serif font}.
+ \item 中文主要字体,\textsf{中文无衬线字体}
+ \item 数学示例: \( \alpha, \beta, \gamma, \delta, 1,2,3,4, a,b,c,d \), \[\mathrm{li}(x)\coloneqq \int_2^{\infty} \frac{1}{\log t}\,\mathrm{d}t \]
+\end{itemize}
+
+其中,Neo Euler可以在 \url{https://github.com/khaledhosny/euler-otf} 下载。
+
+其他字体不是免费字体,需要自行购买使用(你可以在方正字库网站查询详细资料:\url{https://www.foundertype.com})。
+
+在没有安装相应的字体时,将采用TeX Live中自带的字体来代替,效果可能会有所折扣。
+
+\chapter{文档示例}
+
+\singlespacing
+
+\begin{minipage}{0.45\textwidth}
+\begin{code}
+%! TEX program = xelatex
+\documentclass[fast]{lebhart}
+
+\linenumbers
+\UseLanguage{French}
+
+\begin{document}
+
+\title{Titre}
+\author{Nom}
+\date{03 / 2021, Lieu}
+
+\maketitle
+
+%% Texte ici
+
+\end{document}
+\end{code}
+\end{minipage}
+%
+\hfill
+%
+\begin{minipage}{0.45\textwidth}
+\begin{code}
+%! TEX program = xelatex
+\documentclass[fast]{lebhart}
+
+\linenumbers
+\UseLanguage{Chinese}
+
+\begin{document}
+
+\title{标题}
+\author{姓名}
+\date{2021年3月,地点}
+
+\maketitle
+
+%% 正文部分
+
+\end{document}
+\end{code}
+\end{minipage}
+\par
+
+\bigskip
+(\lstinline|\UseLanguage| 既可以放在导言中,也可以放在正文部分,并且可以按照需要反复使用)
+
+\end{document}
diff --git a/macros/unicodetex/latex/beaulivre/beaulivre-doc-en.pdf b/macros/unicodetex/latex/beaulivre/beaulivre-doc-en.pdf
new file mode 100644
index 0000000000..5a68cba694
--- /dev/null
+++ b/macros/unicodetex/latex/beaulivre/beaulivre-doc-en.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/beaulivre/beaulivre-doc-en.tex b/macros/unicodetex/latex/beaulivre/beaulivre-doc-en.tex
new file mode 100644
index 0000000000..0b269455e8
--- /dev/null
+++ b/macros/unicodetex/latex/beaulivre/beaulivre-doc-en.tex
@@ -0,0 +1,254 @@
+%! TEX program = xelatex
+\PassOptionsToPackage{dvipsnames}{xcolor}
+\documentclass{beaulivre}
+
+%%================================
+%% 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{\beaulivre{}, write your books in a colorful way\thanks{Corresponding to: \texttt{\beaulivre{} 2021/03/15}}}
+\author{Jinwen}
+\date{March 2021, Beijing}
+
+\maketitle
+
+\frontmatter
+\chapter*{Preface}
+
+\beaulivre{} is a member of the \colorist{} class series. The entire collection includes \colorart{} and \lebhart{} for typesetting articles and \colorbook{} and \beaulivre{} for typesetting books. My original intention in designing this series was to write drafts and notes that look colorful yet not dazzling.
+
+Among them, \lebhart{} and \beaulivre{} support three languages: English, French, and Chinese, and these three languages can be switched seamlessly in a single document. Due to the usage of custom fonts, they need to be compiled with \hologo{XeLaTeX} or \hologo{LuaLaTeX}.
+
+This documentation is typeset using \beaulivre{}. You can think of it as a short introduction and demonstration.
+
+\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
+
+\mainmatter
+
+\chapter{On the naming and options}
+\begin{itemize}
+ \item \lebhart{} is taken from German word ``lebhaft'' (``vividly''), combined with the first three letters of ``artikel'' (``article'').
+ \item \beaulivre{} is taken from French words ``beau'' (for ``beautiful'') and ``livre'' (for ``book'').
+\end{itemize}
+
+You can use the option \verb|fast| to enable a fast but slightly rough version. The main differences are:
+\begin{itemize}
+ \item Use simpler math font configuration;
+ \item Do not use hyperref;
+ \item Use draft mode for all tcolorboxes;
+ \item Use polyglossia instead of babel to support multiple languages. (Using polyglossia will increase the compilation speed slightly, but the current compatibility with Chinese is not perfect. When it becomes more stable, I will consider fully switching to polyglossia)
+\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.
+
+\chapter{Some instructions}
+
+\section{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}
+
+\section{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}
+
+\section{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}
+
+\section{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}
+
+\section{On the fonts}
+\lebhart{} and \beaulivre{} use Palatino Linotype as the English font, FounderType's YouSong and YouHei Simplified as the Chinese fonts, and partially use Neo Euler as the mathematical font:
+\begin{itemize}
+ \item English main font. \textsf{English sans serif font}.
+ \item 中文主要字体, \textsf{中文无衬线字体}
+ \item Math demonstration: \( \alpha, \beta, \gamma, \delta, 1,2,3,4, a,b,c,d \), \[\mathrm{li}(x)\coloneqq \int_2^{\infty} \frac{1}{\log t}\,\mathrm{d}t \]
+\end{itemize}
+
+Among them, Neo Euler can be downloaded at \url{https://github.com/khaledhosny/euler-otf}. Other fonts are not free, you need to purchase and use them on your own. (For the Chinese fonts, visit FounderType's website for detail: \url{https://www.foundertype.com} ).
+
+When the corresponding font is not installed, the font that comes with TeX Live will be used instead, and the experience might be reduced.
+
+\chapter{Document templates}
+
+\singlespacing
+
+\begin{minipage}{0.45\textwidth}
+\begin{code}
+%! TEX program = xelatex
+\documentclass[fast]{lebhart}
+
+\linenumbers
+\UseLanguage{French}
+
+\begin{document}
+
+\title{Titre}
+\author{Nom}
+\date{03 / 2021, Lieu}
+
+\maketitle
+
+%% Texte ici
+
+\end{document}
+\end{code}
+\end{minipage}
+%
+\hfill
+%
+\begin{minipage}{0.45\textwidth}
+\begin{code}
+%! TEX program = xelatex
+\documentclass[fast]{lebhart}
+
+\linenumbers
+\UseLanguage{Chinese}
+
+\begin{document}
+
+\title{标题}
+\author{姓名}
+\date{2021年3月,地点}
+
+\maketitle
+
+%% 正文部分
+
+\end{document}
+\end{code}
+\end{minipage}
+\par
+
+\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/unicodetex/latex/beaulivre/beaulivre.cls b/macros/unicodetex/latex/beaulivre/beaulivre.cls
new file mode 100644
index 0000000000..694a337fae
--- /dev/null
+++ b/macros/unicodetex/latex/beaulivre/beaulivre.cls
@@ -0,0 +1,237 @@
+%%
+%% This is file `beaulivre/beaulivre.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{beaulivre}
+ [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
+\if@colorclass@fast
+ \PassOptionsToPackage{polyglossia}{colorist}
+\fi
+\RequirePackage{colorist}
+
+%%================================
+%% Fonts
+%%================================
+%% Math fonts in fast mode
+\if@colorclass@fast
+ \RequirePackage{mathpazo}
+\fi
+
+%% English fonts
+\PassOptionsToPackage{no-math}{fontspec}
+\RequirePackage{fontspec}
+\IfFontExistsTF{Palatino Linotype}{%
+ \setmainfont{Palatino Linotype}
+}{
+ \setmainfont{texgyrepagella-regular.otf}[
+ BoldFont = texgyrepagella-bold.otf ,
+ ItalicFont = texgyrepagella-italic.otf ,
+ BoldItalicFont = texgyrepagella-bolditalic.otf ]
+}
+ \setsansfont{SourceSansPro-Regular.otf}[
+ Scale = MatchLowercase,
+ BoldFont = SourceSansPro-Bold.otf ,
+ ItalicFont = SourceSansPro-RegularIt.otf ,
+ BoldItalicFont = SourceSansPro-BoldIt.otf ]
+
+%% Chinese fonts
+\PassOptionsToPackage{fontset=none,scheme=plain}{ctex}
+\RequirePackage{ctex}
+\IfFontExistsTF{FZYouSongS 507R}{%
+ \setCJKmainfont{FZYouSongS 507R}[
+ BoldFont = FZYouSongS 509R ,
+ BoldFeatures = {FakeBold=2} ,
+ ItalicFont = * ,
+ BoldItalicFont = FZYouSongS 509R ,
+ BoldItalicFeatures = {FakeBold=2} ,
+ SmallCapsFont = * ]
+}{
+ \setCJKmainfont{FandolSong-Regular.otf}[
+ BoldFont = FandolSong-Bold.otf ,
+ ItalicFont = FandolKai-Regular.otf ,
+ BoldItalicFont = FandolKai-Regular.otf ,
+ BoldItalicFeatures = {FakeBold=4} ,
+ SmallCapsFont = * ]
+}
+\IfFontExistsTF{FZYouSongS 507R}{%
+ \setCJKmonofont{FZYouSongS 507R}[
+ BoldFont = FZYouSongS 509R ,
+ BoldFeatures = {FakeBold=2} ,
+ ItalicFont = * ,
+ BoldItalicFont = FZYouSongS 509R ,
+ BoldItalicFeatures = {FakeBold=2} ,
+ SmallCapsFont = * ]
+}{
+ \setCJKmonofont{FandolFang-Regular.otf}[
+ BoldFont = * ,
+ BoldFeatures = {FakeBold=4} ,
+ ItalicFont = * ,
+ BoldItalicFont = * ,
+ BoldItalicFeatures = {FakeBold=4} ,
+ SmallCapsFont = * ]
+}
+\IfFontExistsTF{FZYouHeiS 506L}{%
+ \setCJKsansfont{FZYouHeiS 506L}[
+ BoldFont = FZYouHeiS 509R,
+ ItalicFont = * ,
+ BoldItalicFont = FZYouHeiS 509R ,
+ SmallCapsFont = * ]
+}{
+ \setCJKsansfont{FandolHei-Regular.otf}[
+ BoldFont = FandolHei-Bold.otf ,
+ ItalicFont = * ,
+ BoldItalicFont = FandolHei-Bold.otf ,
+ SmallCapsFont = * ]
+}
+
+%% Math font
+\if@colorclass@fast\else
+\PassOptionsToPackage
+ {warnings-off={mathtools-colon,mathtools-overbracket}}{unicode-math}
+\RequirePackage{unicode-math}
+\unimathsetup{math-style=ISO}
+\setmathfont{Asana-Math.otf}
+\IfFontExistsTF{Neo Euler}{%
+\setmathfont{Neo Euler} % From https://tex.stackexchange.com/a/425887
+ [range={"0000-"0001,"0020-"007E,
+ "00A0,"00A7-"00A8,"00AC,"00AF,"00B1,"00B4-"00B5,"00B7,
+ "00D7,"00F7,
+ "0131,
+ "0237,"02C6-"02C7,"02D8-"02DA,"02DC,
+ "0300-"030C,"030F,"0311,"0323-"0325,"032E-"0332,"0338,
+ "0391-"0393,"0395-"03A1,"03A3-"03A8,"03B1-"03BB,
+ "03BD-"03C1,"03C3-"03C9,"03D1,"03D5-"03D6,"03F5,
+ "2016,"2018-"2019,"2021,"2026-"202C,"2032-"2037,"2044,
+ "2057,"20D6-"20D7,"20DB-"20DD,"20E1,"20EE-"20EF,
+ "210B-"210C,"210E-"2113,"2118,"211B-"211C,"2126-"2128,
+ "212C-"212D,"2130-"2131,"2133,"2135,"2190-"2199,
+ "21A4,"21A6,"21A9-"21AA,"21BC-"21CC,"21D0-"21D5,
+ "2200,"2202-"2209,"220B-"220C,"220F-"2213,"2215-"221E,
+ "2223,"2225,"2227-"222E,"2234-"2235,"2237-"223D,
+ "2240-"224C,"2260-"2269,"226E-"2279,"2282-"228B,"228E,
+ "2291-"2292,"2295-"2299,"22A2-"22A5,"22C0-"22C5,
+ "22DC-"22DD,"22EF,"22F0-"22F1,
+ "2308-"230B,"2320-"2321,"2329-"232A,"239B-"23AE,
+ "23DC-"23DF,
+ "27E8-"27E9,"27F5-"27FE,"2A0C,"2B1A,
+ "1D400-"1D433,"1D49C,"1D49E-"1D49F,"1D4A2,"1D4A5-"1D4A6,
+ "1D4A9-"1D4AC,"1D4AE-"1D4B5,"1D4D0-"1D4E9,"1D504-"1D505,
+ "1D507-"1D50A,"1D50D-"1D514,"1D516-"1D51C,"1D51E-"1D537,
+ "1D56C-"1D59F,"1D6A8-"1D6B8,"1D6BA-"1D6D2,"1D6D4-"1D6DD,
+ "1D6DF,"1D6E1,"1D7CE-"1D7D7 }]
+}{}
+\fi
+
+\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 `beaulivre/beaulivre.cls'.
diff --git a/macros/unicodetex/latex/colorist/README.md b/macros/unicodetex/latex/colorist/README.md
deleted file mode 100644
index f9d1477b39..0000000000
--- a/macros/unicodetex/latex/colorist/README.md
+++ /dev/null
@@ -1,23 +0,0 @@
-<!-- Copyright (C) 2021 by Jinwen XU -->
-
-[Github](https://github.com/Jinwen-XU/colorist) | [CTAN](https://ctan.org/pkg/colorist) | [Download](https://github.com/Jinwen-XU/colorist/releases)
-
-![License](https://img.shields.io/ctan/l/colorist.svg) ![CTAN Version](https://img.shields.io/ctan/v/colorist.svg) ![Github Version](https://img.shields.io/github/release/Jinwen-XU/colorist.svg) ![Repo Size](https://img.shields.io/github/repo-size/Jinwen-XU/colorist.svg)
-
----
-
-# The colorist class series
-
-This is a series of classes to typeset articles or books, with a colorful
-design. It contains:
-- lebhart.cls
-- lebhartfast.cls
-- beaulivre.cls
-- beaulivrefast.cls
-
-They have native support to English, French and Chinese typesetting. And they
-may compile with either XeLaTeX or LuaLaTeX.
-
-# License
-
-This work is released under the LaTeX Project Public License, v1.3c or later.
diff --git a/macros/unicodetex/latex/colorist/colorist-doc-cn.pdf b/macros/unicodetex/latex/colorist/colorist-doc-cn.pdf
deleted file mode 100644
index 9f67494a2c..0000000000
--- a/macros/unicodetex/latex/colorist/colorist-doc-cn.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/unicodetex/latex/colorist/colorist-doc-en.pdf b/macros/unicodetex/latex/colorist/colorist-doc-en.pdf
deleted file mode 100644
index 1774dfa00f..0000000000
--- a/macros/unicodetex/latex/colorist/colorist-doc-en.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/unicodetex/latex/colorist/colorist.dtx b/macros/unicodetex/latex/colorist/colorist.dtx
deleted file mode 100644
index bf7bcf42a1..0000000000
--- a/macros/unicodetex/latex/colorist/colorist.dtx
+++ /dev/null
@@ -1,856 +0,0 @@
-% \iffalse meta-comment
-%
-% Copyright (C) 2021 by Jinwen XU
-% -------------------------------
-%
-% This file 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.
-%
-% \fi
-%
-%<*driver>
-\ProvidesFile{colorist.dtx}
-%</driver>
-\NeedsTeXFormat{LaTeX2e}[2020-10-01]
-%<*lebhart>
-\ProvidesClass{lebhart}
- [2021/03/11 A colorful article style]
-%</lebhart>
-%<*lebhartfast>
-\ProvidesClass{lebhartfast}
- [2021/03/11 A faster but rougher version of lebhart]
-%</lebhartfast>
-%<*beaulivre>
-\ProvidesClass{beaulivre}
- [2021/03/11 A colorful book style]
-%</beaulivre>
-%<*beaulivrefast>
-\ProvidesClass{beaulivrefast}
- [2021/03/11 A faster but rougher version of beaulivre]
-%</beaulivrefast>
-
-%<*lebhart|lebhartfast>
-\DeclareOption*{%
- \PassOptionsToClass{\CurrentOption}{article}}
-\ProcessOptions\relax
-\LoadClass{article}
-%</lebhart|lebhartfast>
-%<*beaulivre|beaulivrefast>
-\DeclareOption*{%
- \PassOptionsToClass{\CurrentOption}{book}}
-\ProcessOptions\relax
-\LoadClass{book}
-%</beaulivre|beaulivrefast>
-
-\RequirePackage{etoolbox}
-
-%%================================
-%% Fonts
-%%================================
-\RequirePackage{anyfontsize}
-
-%% Title fonts
-\newcommand{\partfont}{\sffamily}
-%<beaulivre|beaulivrefast>\newcommand{\chapfont}{\sffamily}
-\newcommand{\secfont}{\sffamily}
-\newcommand{\subsecfont}{}
-%<*lebhartfast|beaulivrefast>
-
-%% Math fonts
-\RequirePackage{mathpazo}
-%</lebhartfast|beaulivrefast>
-
-%% English fonts
-\PassOptionsToPackage{no-math}{fontspec}
-\RequirePackage{fontspec}
-\IfFontExistsTF{Palatino Linotype}{%
- \setmainfont{Palatino Linotype}
-}{
- \setmainfont{texgyrepagella-regular.otf}[
- BoldFont = texgyrepagella-bold.otf ,
- ItalicFont = texgyrepagella-italic.otf ,
- BoldItalicFont = texgyrepagella-bolditalic.otf ]
-}
- \setsansfont{SourceSansPro-Regular.otf}[
- Scale = MatchLowercase,
- BoldFont = SourceSansPro-Bold.otf ,
- ItalicFont = SourceSansPro-RegularIt.otf ,
- BoldItalicFont = SourceSansPro-BoldIt.otf ]
-
-%% Chinese fonts
-\PassOptionsToPackage{fontset=none,scheme=plain}{ctex}
-\RequirePackage{ctex}
-\IfFontExistsTF{FZYouSongS 507R}{%
- \setCJKmainfont{FZYouSongS 507R}[
- BoldFont = FZYouSongS 509R ,
- BoldFeatures = {FakeBold=2} ,
- ItalicFont = * ,
- BoldItalicFont = FZYouSongS 509R ,
- BoldItalicFeatures = {FakeBold=2} ,
- SmallCapsFont = * ]
-}{
- \setCJKmainfont{FandolSong-Regular.otf}[
- BoldFont = FandolSong-Bold.otf ,
- ItalicFont = FandolKai-Regular.otf ,
- BoldItalicFont = FandolKai-Regular.otf ,
- BoldItalicFeatures = {FakeBold=4} ,
- SmallCapsFont = * ]
-}
-\IfFontExistsTF{FZFSJW--GB1-0}{%
- \setCJKmonofont{FZFSJW--GB1-0}[
- BoldFont = * ,
- BoldFeatures = {FakeBold=4} ,
- ItalicFont = * ,
- BoldItalicFont = * ,
- BoldItalicFeatures = {FakeBold=4} ,
- SmallCapsFont = * ]
-}{
- \setCJKmonofont{FandolFang-Regular.otf}[
- BoldFont = * ,
- BoldFeatures = {FakeBold=4} ,
- ItalicFont = * ,
- BoldItalicFont = * ,
- BoldItalicFeatures = {FakeBold=4} ,
- SmallCapsFont = * ]
-}
-\IfFontExistsTF{FZYouHeiS 506L}{%
- \setCJKsansfont{FZYouHeiS 506L}[
- BoldFont = FZYouHeiS 509R,
- ItalicFont = * ,
- BoldItalicFont = FZYouHeiS 509R ,
- SmallCapsFont = * ]
-}{
- \setCJKsansfont{FandolHei-Regular.otf}[
- BoldFont = FandolHei-Bold.otf ,
- ItalicFont = * ,
- BoldItalicFont = FandolHei-Bold.otf ,
- SmallCapsFont = * ]
-}
-%<*lebhart|beaulivre>
-
-%% Math fonts
-\PassOptionsToPackage
- {warnings-off={mathtools-colon,mathtools-overbracket}}{unicode-math}
-\RequirePackage{unicode-math}
-\unimathsetup{math-style=ISO}
-\setmathfont{Asana-Math.otf}
-\IfFontExistsTF{Neo Euler}{%
-\setmathfont{Neo Euler} % From https://tex.stackexchange.com/a/425887
- [range={"0000-"0001,"0020-"007E,
- "00A0,"00A7-"00A8,"00AC,"00AF,"00B1,"00B4-"00B5,"00B7,
- "00D7,"00F7,
- "0131,
- "0237,"02C6-"02C7,"02D8-"02DA,"02DC,
- "0300-"030C,"030F,"0311,"0323-"0325,"032E-"0332,"0338,
- "0391-"0393,"0395-"03A1,"03A3-"03A8,"03B1-"03BB,
- "03BD-"03C1,"03C3-"03C9,"03D1,"03D5-"03D6,"03F5,
- "2016,"2018-"2019,"2021,"2026-"202C,"2032-"2037,"2044,
- "2057,"20D6-"20D7,"20DB-"20DD,"20E1,"20EE-"20EF,
- "210B-"210C,"210E-"2113,"2118,"211B-"211C,"2126-"2128,
- "212C-"212D,"2130-"2131,"2133,"2135,"2190-"2199,
- "21A4,"21A6,"21A9-"21AA,"21BC-"21CC,"21D0-"21D5,
- "2200,"2202-"2209,"220B-"220C,"220F-"2213,"2215-"221E,
- "2223,"2225,"2227-"222E,"2234-"2235,"2237-"223D,
- "2240-"224C,"2260-"2269,"226E-"2279,"2282-"228B,"228E,
- "2291-"2292,"2295-"2299,"22A2-"22A5,"22C0-"22C5,
- "22DC-"22DD,"22EF,"22F0-"22F1,
- "2308-"230B,"2320-"2321,"2329-"232A,"239B-"23AE,
- "23DC-"23DF,
- "27E8-"27E9,"27F5-"27FE,"2A0C,"2B1A,
- "1D400-"1D433,"1D49C,"1D49E-"1D49F,"1D4A2,"1D4A5-"1D4A6,
- "1D4A9-"1D4AC,"1D4AE-"1D4B5,"1D4D0-"1D4E9,"1D504-"1D505,
- "1D507-"1D50A,"1D50D-"1D514,"1D516-"1D51C,"1D51E-"1D537,
- "1D56C-"1D59F,"1D6A8-"1D6B8,"1D6BA-"1D6D2,"1D6D4-"1D6DD,
- "1D6DF,"1D6E1,"1D7CE-"1D7D7 }]
-}{}
-%</lebhart|beaulivre>
-
-\RequirePackage{mathtools}
-\RequirePackage[verbose=silent]{microtype}
-
-%%================================
-%% Page layout
-%%================================
-\RequirePackage[heightrounded]{geometry}
-\geometry{
- papersize={7in,10in},
- total={40em,60em},
- hmarginratio=1:1,
- vmarginratio=1:1,
- footnotesep=2em plus 2pt minus 2pt,
-}
-
-\RequirePackage{indentfirst}
-
-\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}
-
-\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}
-}
-
-%<*lebhart|lebhartfast>
-\if@twoside
- \renewcommand*{\sectionmark}[1]{\markboth{\uppercase{#1}}{}}
-\else
- \renewcommand*{\sectionmark}[1]{\markboth{\uppercase{#1}}{\uppercase{#1}}}
-\fi
-%</lebhart|lebhartfast>
-%<*beaulivre|beaulivrefast>
-\if@twoside
- \renewcommand{\chaptermark}[1]{\markboth{\uppercase{#1}}{}}
-\else
- \renewcommand{\chaptermark}[1]{\markboth{\uppercase{#1}}{\uppercase{#1}}}
-\fi
-\renewcommand*{\sectionmark}[1]{%
- \markright{\raisebox{.03em}{\footnotesize/}%
- ~\thesection~\raisebox{.03em}{\footnotesize/}~~~#1}}
-%</beaulivre|beaulivrefast>
-
-%%================================
-%% Line spacing
-%%================================
-\RequirePackage{setspace}
-\linespread{1.07}
-% To avoid `Underfull \vbox (badness 10000)`
-\raggedbottom
-
-%%================================
-%% Title format
-%%================================
-\RequirePackage[explicit,newparttoc]{titlesec}
-\PassOptionsToPackage{normalem}{ulem}
-\RequirePackage{ulem}
-
-%<*lebhart|lebhartfast>
-%% 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}%
-}
-%</lebhart|lebhartfast>
-%<*beaulivre|beaulivrefast>
-%% 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}
-%</beaulivre|beaulivrefast>
-
-%% Section
-\titleformat{\section}
- {\secfont\color{steelblue}}
- {\thesection}{1em}{#1}
- [{\titlerule[.75pt]}]
-
-%% Subsection
-\titleformat{\subsection}
- {\subsecfont}{}{0em}
- {\textsf{\thesubsection}~~\textcolor{gray!55!paper}{$|$}~~#1}
-\titleformat{name=\subsection,numberless}
- {\subsecfont}{}{0em}
- {#1}
-
-%%================================
-%% TOC format
-%%================================
-\RequirePackage{titletoc}
-\titlecontents{part}
- [0em]
- {\addvspace{1.5pc}\filcenter\partfont}
- {\thecontentslabel\\\uppercase}
- {}
- {} % without page number
- [\addvspace{.5pc}]
-%<*lebhart|lebhartfast>
-\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}
-%</lebhart|lebhartfast>
-%<*beaulivre|beaulivrefast>
-\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}
-%</beaulivre|beaulivrefast>
-
-%%================================
-%% Graphics
-%%================================
-\RequirePackage{graphicx}
-\graphicspath{{images/}}
-\RequirePackage{wrapfig}
-\RequirePackage{caption}
-
-%%================================
-%% 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}
- \newgeometry{centering}
- \null\vfill
- \centerline{\large\color{gray!20!paper}\blinkpagetext}
- \vfill\restoregeometry\newpage\fi\fi}
-
-%%================================
-%% Index
-%%================================
-\RequirePackage{imakeidx}
-% switch off the line numbers of index
-\pretocmd{\printindex}{}{}{\FAIL}
-\apptocmd{\printindex}{}{}{\FAIL}
-
-%%================================
-%% 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{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}}}
-
-%<lebhart|beaulivre>\PassOptionsToPackage{hidelinks,linktoc=all}{hyperref}
-\RequirePackage{aliascnt}
-% To solve `Difference between bookmark levels is greater than one`
-%<lebhart|beaulivre>\RequirePackage{bookmark}
-%<lebhart|beaulivre>\RequirePackage{hyperref}
-\PassOptionsToPackage{nameinlink}{cleveref}
-\RequirePackage{cleveref}
-\crefdefaultlabelformat{#2#1#3~\aftergroup\ignorespaces}
-
-\newcommand\englishABBR{EN}
-\newcommand\frenchABBR{FR}
-\newcommand\chineseABBR{CN}
-
-%% Macro for creating theorems
-\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<>}{% #1 = star or no star #2 = name of environment #3 = emptiness or star to append to name of environment #4 = numbered like #5 = numbered within
- \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{\unskip~\sffamily\color{orange}\textsc{Theorem}}
-\def\lemmanameEN{\unskip~\sffamily\color{orange}\textsc{Lemma}}
-\def\propositionnameEN{\unskip~\sffamily\color{orange}\textsc{Proposition}}
-\def\corollarynameEN{\unskip~\sffamily\color{orange}\textsc{Corollary}}
-\def\factnameEN{\unskip~\sffamily\color{black}\textsc{Fact}}
-\def\conjecturenameEN{\unskip~\sffamily\color{purple}\textsc{Conjecture}}
-\def\definitionnameEN{\unskip~\sffamily\color{forestgreen}\textsc{Definition}}
-\def\examplenameEN{\unskip~\sffamily\color{black}\textsc{Example}}
-\def\problemnameEN{\unskip~\sffamily\color{black}\textsc{Problem}}
-\def\remarknameEN{\unskip~\sffamily\color{black}\textsc{Remark}}
-
-%% French theorems names
-\def\theoremnameFR{\unskip~\sffamily\color{orange}\textsc{Théorème}}
-\def\lemmanameFR{\unskip~\sffamily\color{orange}\textsc{Lemme}}
-\def\propositionnameFR{\unskip~\sffamily\color{orange}\textsc{Proposition}}
-\def\corollarynameFR{\unskip~\sffamily\color{orange}\textsc{Corollaire}}
-\def\factnameFR{\unskip~\sffamily\color{black}\textsc{Fait}}
-\def\conjecturenameFR{\unskip~\sffamily\color{purple}\textsc{Conjecture}}
-\def\definitionnameFR{\unskip~\sffamily\color{forestgreen}\textsc{Définition}}
-\def\examplenameFR{\unskip~\sffamily\color{black}\textsc{Exemple}}
-\def\problemnameFR{\unskip~\sffamily\color{black}\textsc{Problème}}
-\def\remarknameFR{\unskip~\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}
-%<lebhart|lebhartfast>\CreateTheorem{theorem}<section>
-%<beaulivre|beaulivrefast>\CreateTheorem{theorem}<chapter>
-\CreateTheorem{lemma}[theorem]
-\CreateTheorem{proposition}[theorem]
-\CreateTheorem{corollary}[theorem]
-\CreateTheorem{fact}[theorem]
-%<lebhart|lebhartfast>\CreateTheorem{conjecture}<section>
-%<beaulivre|beaulivrefast>\CreateTheorem{conjecture}<chapter>
-\CreateTheorem*{theorem*}
-\CreateTheorem*{lemma*}
-\CreateTheorem*{proposition*}
-\CreateTheorem*{corollary*}
-\CreateTheorem*{fact*}
-\CreateTheorem*{conjecture*}
-\CreateTheorem{definition}[theorem]
-%<lebhart|lebhartfast>\CreateTheorem{example}<section>
-%<beaulivre|beaulivrefast>\CreateTheorem{example}<chapter>
-%<lebhart|lebhartfast>\CreateTheorem{problem}<section>
-%<beaulivre|beaulivrefast>\CreateTheorem{problem}<chapter>
-\CreateTheorem*{definition*}
-\CreateTheorem*{example*}
-\CreateTheorem*{problem*}
-
-\theoremstyle{emphasis}
-%<lebhart|lebhartfast>\CreateTheorem{remark}<section>
-%<beaulivre|beaulivrefast>\CreateTheorem{remark}<chapter>
-\CreateTheorem*{remark*}
-
-\RequirePackage{marginnote}
-\newcommand{\mparadjust}[1]{\renewcommand*{\marginnotevadjust}{#1}}
-\apptocmd{\remark}{\reversemarginpar\mparadjust{-.3em}\marginnote{\ideabulb[0.3]{orange}}\normalmarginpar}{}{\FAIL}
-\apptocmd{\conjecture}{\reversemarginpar\mparadjust{-.3em}\marginnote{\questionmark[0.3]{purple}}\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
-
-\RequirePackage[many]{tcolorbox}
-%<lebhartfast|beaulivrefast>\tcbstartdraftmode
-\tcolorboxenvironment{theorem}
- {enhanced jigsaw,pad at break*=1mm,breakable,colback=black!3!paper,
- colframe=orange}
-\tcolorboxenvironment{theorem*}
- {enhanced jigsaw,pad at break*=1mm,breakable,colback=black!3!paper,
- colframe=orange}
-\tcolorboxenvironment{lemma}
- {enhanced jigsaw,pad at break*=1mm,breakable,colback=black!3!paper,
- colframe=orange}
-\tcolorboxenvironment{lemma*}
- {enhanced jigsaw,pad at break*=1mm,breakable,colback=black!3!paper,
- colframe=orange}
-\tcolorboxenvironment{proposition}
- {enhanced jigsaw,pad at break*=1mm,breakable,colback=black!3!paper,
- colframe=orange}
-\tcolorboxenvironment{proposition*}
- {enhanced jigsaw,pad at break*=1mm,breakable,colback=black!3!paper,
- colframe=orange}
-\tcolorboxenvironment{corollary}
- {enhanced jigsaw,pad at break*=1mm,breakable,colback=black!3!paper,
- colframe=orange}
-\tcolorboxenvironment{corollary*}
- {enhanced jigsaw,pad at break*=1mm,breakable,colback=black!3!paper,
- colframe=orange}
-
-\tcolorboxenvironment{fact}
- {enhanced jigsaw,pad at break*=1mm,breakable,colback=gray!10!paper,
- boxrule=0pt,frame hidden}
-\tcolorboxenvironment{fact*}
- {enhanced jigsaw,pad at break*=1mm,breakable,colback=gray!10!paper,
- boxrule=0pt,frame hidden}
-
-\tcolorboxenvironment{conjecture}
- {enhanced jigsaw,pad at break*=1mm,breakable,colback=black!3!paper,
- colframe=purple}
-\tcolorboxenvironment{conjecture*}
- {enhanced jigsaw,pad at break*=1mm,breakable,colback=black!3!paper,
- colframe=purple}
-
-\tcolorboxenvironment{definition}
- {enhanced jigsaw,pad at break*=1mm,breakable,
- colback=lightorange!10!paper,boxrule=0pt,frame hidden,
- borderline west={1.5mm}{-1mm}{forestgreen}}
-\tcolorboxenvironment{definition*}
- {enhanced jigsaw,pad at break*=1mm,breakable,
- colback=lightorange!10!paper,boxrule=0pt,frame hidden,
- borderline west={1.5mm}{-1mm}{forestgreen}}
-
-\tcolorboxenvironment{example}
- {enhanced jigsaw,pad at break*=1mm,breakable,colback=gray!10!paper,
- boxrule=0pt,frame hidden}
-\tcolorboxenvironment{example*}
- {enhanced jigsaw,pad at break*=1mm,breakable,colback=gray!10!paper,
- boxrule=0pt,frame hidden}
-
-\tcolorboxenvironment{problem}
- {enhanced jigsaw,pad at break*=1mm,breakable,colback=yellow!25!paper,
- boxrule=0pt,frame hidden}
-\tcolorboxenvironment{problem*}
- {enhanced jigsaw,pad at break*=1mm,breakable,colback=yellow!25!paper,
- boxrule=0pt,frame hidden}
-
-%%================================
-%% Language configuration
-%%================================
-%<*lebhart|beaulivre>
-\PassOptionsToPackage{french,english}{babel}
-\RequirePackage{babel}
-\frenchsetup{PartNameFull=false}
-%</lebhart|beaulivre>
-%<*lebhartfast|beaulivrefast>
-\RequirePackage{polyglossia}
-\setdefaultlanguage{english}
-\setotherlanguage[frenchpart=false]{french}
-%</lebhartfast|beaulivrefast>
-
-\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}%
-% The line below is only needed for 'babel'
-%<lebhart|beaulivre> \def\frenchpartname{Partie}%
-}
-
-\newcommand{\UseLanguageCORE}[1]{%
- \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}{}
-}
-\newcommand{\UseLanguage}[1]{%
- \ifx\@onlypreamble\@notprerr%
- \UseLanguageCORE{#1}%
- \else%
- \AfterEndPreamble{\UseLanguageCORE{#1}}%
- \fi%
-}
-
-%%================================
-%% 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}
-
-%<*lebhart|beaulivre>
-\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,%
-}
-%</lebhart|beaulivre>
-%<*lebhartfast|beaulivrefast>
-\newcommand{\plainBox}[2][-paper]{\textcolor{#1}{%
- \setlength{\fboxsep}{1.5pt}%
- \setlength{\fboxrule}{1.2pt}%
- \fbox{#2}}}
-%</lebhartfast|beaulivrefast>
-
-\NewDocumentCommand{\dnf}{d<>}{%
- \noindent\plainBox[dnfColor]%
- {\normalfont\dnfFont\small%
- \csname dnfText\csname\languagename ABBR\endcsname\endcsname%
- \IfNoValueF{#1}{ : #1}}%
-}
-\NewDocumentCommand{\needgraph}{d<>}{%
- \par%
- \centerline{\plainBox[needgraphColor]%
- {\normalfont\needgraphFont\small%
- \csname needgraphText\csname\languagename ABBR\endcsname\endcsname%
- \IfNoValueF{#1}{ : #1}}}%
- \par%
-}
-%<*lebhart|lebhartfast>
-
-%%================================
-%% 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}%
-}
-\apptocmd{\maketitle}{\thispagestyle{fancy}}{}{\FAIL}
-\apptocmd{\abstract}{\color{black!80!paper}}{}{\FAIL}
-%</lebhart|lebhartfast>
-
-\endinput \ No newline at end of file
diff --git a/macros/unicodetex/latex/colorist/colorist.ins b/macros/unicodetex/latex/colorist/colorist.ins
deleted file mode 100644
index e10923ac2d..0000000000
--- a/macros/unicodetex/latex/colorist/colorist.ins
+++ /dev/null
@@ -1,49 +0,0 @@
-%%
-%% Copyright (C) 2021 by Jinwen XU
-%%
-%% This file 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.
-%%
-
-\input docstrip.tex
-\keepsilent
-\askforoverwritefalse
-
-\usedir{tex/latex/colorist}
-
-\preamble
-
-Copyright (C) 2021 by Jinwen XU
-
-This is part of the colorist class series.
-
-\endpreamble
-
-\generate{\file{lebhart.cls}{\from{colorist.dtx}{lebhart}}}
-\generate{\file{lebhartfast.cls}{\from{colorist.dtx}{lebhartfast}}}
-\generate{\file{beaulivre.cls}{\from{colorist.dtx}{beaulivre}}}
-\generate{\file{beaulivrefast.cls}{\from{colorist.dtx}{beaulivrefast}}}
-
-\obeyspaces
-\Msg{*************************************************************}
-\Msg{* *}
-\Msg{* To finish the installation you have to move the following *}
-\Msg{* files into a directory searched by TeX: *}
-\Msg{* *}
-\Msg{* lebhart.cls *}
-\Msg{* lebhartfast.cls *}
-\Msg{* beaulivre.cls *}
-\Msg{* beaulivrefast.cls *}
-\Msg{* *}
-\Msg{* Happy TeXing! *}
-\Msg{* *}
-\Msg{*************************************************************}
-
-\endbatchfile
diff --git a/macros/unicodetex/latex/lebhart/LICENSE b/macros/unicodetex/latex/lebhart/LICENSE
new file mode 100644
index 0000000000..2244313901
--- /dev/null
+++ b/macros/unicodetex/latex/lebhart/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/unicodetex/latex/lebhart/README.md b/macros/unicodetex/latex/lebhart/README.md
new file mode 100644
index 0000000000..a5904f6091
--- /dev/null
+++ b/macros/unicodetex/latex/lebhart/README.md
@@ -0,0 +1,16 @@
+<!-- Copyright (C) 2021 by Jinwen XU -->
+
+# `lebhart` : write you articles in a colorful way
+
+`lebhart` is a LaTeX class for typesetting articles, which has a colorful
+design.
+
+Currently, it has native support to English, French and Chinese typesetting. And
+it may compile with either XeLaTeX or LuaLaTeX.
+
+This is part of the colorist class series.
+
+# License
+
+This work is released under the LaTeX Project Public License, v1.3c or later.
+
diff --git a/macros/unicodetex/latex/lebhart/lebhart-doc-cn.pdf b/macros/unicodetex/latex/lebhart/lebhart-doc-cn.pdf
new file mode 100644
index 0000000000..c8bebc1013
--- /dev/null
+++ b/macros/unicodetex/latex/lebhart/lebhart-doc-cn.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/colorist/colorist-doc-cn.tex b/macros/unicodetex/latex/lebhart/lebhart-doc-cn.tex
index d016ae9da5..421a013c9a 100644
--- a/macros/unicodetex/latex/colorist/colorist-doc-cn.tex
+++ b/macros/unicodetex/latex/lebhart/lebhart-doc-cn.tex
@@ -40,28 +40,28 @@
{\setkeys{lst}{columns=fullflexible,keepspaces=true}}{}
\providecommand{\colorist}{\textsf{colorist}}
+\providecommand{\colorart}{\textsf{colorart}}
+\providecommand{\colorbook}{\textsf{colorbook}}
\providecommand{\lebhart}{\textsf{lebhart}}
-\providecommand{\lebhartfast}{\textsf{lebhartfast}}
\providecommand{\beaulivre}{\textsf{beaulivre}}
-\providecommand{\beaulivrefast}{\textsf{beaulivrefast}}
%%================================
%% 正文
%%================================
\begin{document}
-\title{\colorist{},多彩风格的文档类系列\thanks{对应版本. \texttt{\colorist{} 2021/03/11}}}
+\title{\lebhart{},以多彩的方式排版你的文章\thanks{对应版本. \texttt{\lebhart{} 2021/03/15}}}
\author{锦文}
\date{2021年3月,北京}
\maketitle
\begin{abstract}
- \colorist{}文档类系列包含用于排版文章的\lebhart{}、用于排版书的\beaulivre{},以及对应的两个fast版本。我设计这一系列的初衷是为了撰写草稿与笔记,使之多彩而不缭乱。
+ \lebhart{}是\colorist{}文档类系列的成员之一,整个系列包含用于排版文章的\colorart{}、\lebhart{}以及用于排版书的\colorbook{}、\beaulivre{}。我设计这一系列的初衷是为了撰写草稿与笔记,使之多彩而不缭乱。
- 这些文档类支持英文、法文、中文三种语言,并且同一篇文档中三种语言可以很好地协调。由于采用了自定义字体,需要采用 \hologo{XeLaTeX} 或 \hologo{LuaLaTeX} 进行编译。
+ 其中,\lebhart{}与\beaulivre{}支持英文、法文、中文三种语言,并且同一篇文档中三种语言可以很好地协调。由于采用了自定义字体,需要采用 \hologo{XeLaTeX} 或 \hologo{LuaLaTeX} 进行编译。
- 最后,这篇说明文档是用\lebhart{}排版的,你可以把它看作一份简短的说明与演示。
+ 这篇说明文档是用\lebhart{}排版的,你可以把它看作一份简短的说明与演示。
\end{abstract}
\begin{tcolorbox}[enhanced jigsaw,pad at break*=1mm,breakable,colback=yellow!25!paper,boxrule=0pt,frame hidden]
@@ -70,12 +70,14 @@
\tableofcontents
-\section{关于这些文档类的名称与区别}
+\section{关于文档类的名称与选项}
+
\lebhart{}取自于德文的lebhaft (活泼),并取了artikel (文章)的前三个字母组合而成。
\beaulivre{}取自于法文的beau (美丽),以及livre (书),由二者组合而成。
-\lebhartfast{}与\beaulivrefast{}是更快速但略微粗糙的\lebhart{}与\beaulivre{}。主要区别是:
+\medskip
+你可以使用选项 \verb|fast| 来启用快速但略微粗糙的样式,主要区别是:
\begin{itemize}
\item 使用较为简单的数学字体设置;
\item 不使用hyperref;
@@ -83,24 +85,24 @@
\item 使用polyglossia而不是babel来支持多语言。(使用polyglossia编译速度会略有提高,但目前对于中文的兼容不太完善,在它更加稳定后,将会考虑全面切换到polyglossia)
\end{itemize}
-在文章的撰写阶段,建议使用fast版本以加快编译速度,改善写作时的流畅程度。在最后,可以把fast标记去除,从而得到正式的版本。
+在文章的撰写阶段,建议使用 \verb|fast| 选项以加快编译速度,改善写作时的流畅程度。在最后,可以把 \verb|fast| 标记去除,从而得到正式的版本。
\section{一些使用说明}
\subsection{定理,以及引用}
定义、定理等环境已经被预定义,可以直接使用,例如:
-
\begin{code}
\begin{definition}[奇异物品] \label{def: strange} ...
\end{code}
-
将会生成
\begin{definition}[奇异物品]\label{def: strange}
这是奇异物品的定义。
\end{definition}
-定理类环境的前后有一行左右的间距。在定义结束的时候会有一个符号来标记。
+\begin{definition}[另一个定义]
+ 不同的定义会自动粘结在一起,中间不会有空隙。
+\end{definition}
引用时,可以直接使用智能引用 \lstinline|\cref{标签名称}|,例如:\lstinline|\cref{def: strange}| 会显示为:\cref{def: strange}。
@@ -111,6 +113,10 @@
Theorem style: theorem, proposition, lemma, corollary
\end{theorem}
+\begin{proof}
+ Proof style
+\end{proof}
+
\begin{remark}
Remark style
\end{remark}
@@ -176,10 +182,9 @@
Some theorem in English. \dnf
\end{theorem}
-引用时,定理的名称总是与定理所在区域的语言匹配,例如,开头的定义在现在的英文模式下依然显示为中文:\cref{def: strange}和\cref{thm}。
+引用时,定理的名称总是与定理所在区域的语言匹配,例如,开头的定义在现在的英文模式下依然显示为中文:\cref{def: strange} 和 \cref{thm}。
-% \subsection{关于行号}
-% 行号可以随时开启和关闭。\lstinline|\linenumbers| 用来开启行号,\lstinline|\nolinenumbers| 用来关闭行号。标题、目录、索引等位置为了美观,不进行编号。
+\UseLanguage{Chinese}
\subsection{关于字体}
\lebhart{}与\beaulivre{}使用Palatino Linotype作为英文字体,方正悠宋、悠黑简体作为中文字体,并部分使用了Neo Euler作为数学字体:
@@ -193,15 +198,18 @@
其他字体不是免费字体,需要自行购买使用(你可以在方正字库网站查询详细资料:\url{https://www.foundertype.com})。
-在没有安装相应的字体时,将采用TeXlive中自带的字体来代替,效果可能会有所折扣。
+在没有安装相应的字体时,将采用TeX Live中自带的字体来代替,效果可能会有所折扣。
\section{文档示例}
-\begin{minipage}{0.4\textwidth}
+\singlespacing
+
+\begin{minipage}{0.45\textwidth}
\begin{code}
%! TEX program = xelatex
-\documentclass{lebhartfast}
+\documentclass[fast]{lebhart}
+\linenumbers
\UseLanguage{French}
\begin{document}
@@ -220,11 +228,12 @@
%
\hfill
%
-\begin{minipage}{0.4\textwidth}
+\begin{minipage}{0.45\textwidth}
\begin{code}
%! TEX program = xelatex
-\documentclass{lebhartfast}
+\documentclass[fast]{lebhart}
+\linenumbers
\UseLanguage{Chinese}
\begin{document}
diff --git a/macros/unicodetex/latex/lebhart/lebhart-doc-en.pdf b/macros/unicodetex/latex/lebhart/lebhart-doc-en.pdf
new file mode 100644
index 0000000000..78b7bea93b
--- /dev/null
+++ b/macros/unicodetex/latex/lebhart/lebhart-doc-en.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/colorist/colorist-doc-en.tex b/macros/unicodetex/latex/lebhart/lebhart-doc-en.tex
index 3d6f46559d..9985713280 100644
--- a/macros/unicodetex/latex/colorist/colorist-doc-en.tex
+++ b/macros/unicodetex/latex/lebhart/lebhart-doc-en.tex
@@ -30,7 +30,7 @@
}
\providecommand{\meta}[1]{$\langle${\normalfont\itshape#1}$\rangle$}
\lstset{morekeywords=%
- {CreateTheorem,proofideanameCN,cref,dnf,needgraph,UseLanguage,
+ {CreateTheorem,proofideanameEN,cref,dnf,needgraph,UseLanguage,
linenumbers,nolinenumbers,subsection,maketitle
}
}
@@ -38,28 +38,28 @@
{\setkeys{lst}{columns=fullflexible,keepspaces=true}}{}
\providecommand{\colorist}{\textsf{colorist}}
+\providecommand{\colorart}{\textsf{colorart}}
+\providecommand{\colorbook}{\textsf{colorbook}}
\providecommand{\lebhart}{\textsf{lebhart}}
-\providecommand{\lebhartfast}{\textsf{lebhartfast}}
\providecommand{\beaulivre}{\textsf{beaulivre}}
-\providecommand{\beaulivrefast}{\textsf{beaulivrefast}}
%%================================
%% Main text
%%================================
\begin{document}
-\title{\colorist{}, document-class series with colorful design\thanks{Corresponding to: \texttt{\colorist{} 2021/03/11}}}
+\title{\lebhart{}, write your articles in a colorful way\thanks{Corresponding to: \texttt{\lebhart{} 2021/03/15}}}
\author{Jinwen}
\date{March 2021, Beijing}
\maketitle
\begin{abstract}
- The \colorist{} class series includes \lebhart{} for typesetting articles, \beaulivre{} for typesetting books, and two corresponding fast versions. My original intention in designing this series is to write drafts and notes that look colorful yet not dazzling.
+ \lebhart{} is a member of the \colorist{} class series. The entire collection includes \colorart{} and \lebhart{} for typesetting articles and \colorbook{} and \beaulivre{} for typesetting books. My original intention in designing this series was to write drafts and notes that look colorful yet not dazzling.
- These document-classes support three languages: English, French, and Chinese, and these three languages can be switched seamlessly in a single document. Due to the usage of custom fonts, they need to be compiled with \hologo{XeLaTeX} or \hologo{LuaLaTeX}.
+ Among them, \lebhart{} and \beaulivre{} support three languages: English, French, and Chinese, and these three languages can be switched seamlessly in a single document. Due to the usage of custom fonts, they need to be compiled with \hologo{XeLaTeX} or \hologo{LuaLaTeX}.
- Finally, this documentation is typeset using \lebhart{}. You can think of it as a short introduction and demonstration.
+ This documentation is typeset using \lebhart{}. 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]
@@ -68,38 +68,38 @@
\tableofcontents
-\section{On the naming and differences of these document-classes}
+\section{On the naming and options}
\begin{itemize}
\item \lebhart{} is taken from German word ``lebhaft'' (``vividly''), combined with the first three letters of ``artikel'' (``article'').
\item \beaulivre{} is taken from French words ``beau'' (for ``beautiful'') and ``livre'' (for ``book'').
\end{itemize}
-\lebhartfast{} and \beaulivrefast{} are faster but slightly rougher version of \lebhart{} and \beaulivre{}. The main differences are:
+You can use the option \verb|fast| to enable a fast but slightly rough version. The main differences are:
\begin{itemize}
\item Use simpler math font configuration;
\item Do not use hyperref;
- \item All color boxes use draft mode;
+ \item Use draft mode for all tcolorboxes;
\item Use polyglossia instead of babel to support multiple languages. (Using polyglossia will increase the compilation speed slightly, but the current compatibility with Chinese is not perfect. When it becomes more stable, I will consider fully switching to polyglossia)
\end{itemize}
-During the writing stage of your document, it is recommended to use the ``fast'' version 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.
+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{Theorem and reference}
+\subsection{Theorems and how to reference them}
Environments such as definitions and theorems have been pre-defined and can be used directly, for example:
-
\begin{code}
\begin{definition}[Strange things] \label{def: strange} ...
\end{code}
-
will produce
\begin{definition}[Strange things]\label{def: strange}
This is the definition of some strange objects.
\end{definition}
-There is approximately an one-line space before and after the theorem environment. There will be a symbol to mark the end of the environment.
+\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}.
@@ -110,6 +110,10 @@ The following are several other styles of theorem-like environments:
Theorem style: theorem, proposition, lemma, corollary
\end{theorem}
+\begin{proof}
+ Proof style
+\end{proof}
+
\begin{remark}
Remark style
\end{remark}
@@ -171,37 +175,35 @@ For example, after using \lstinline|\UseLanguage{French}|, the theorem and the d
\UseLanguage{French}
\begin{theorem}[Inutile]\label{thm}
- Un théorem en Français. \dnf
+ 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}。
+When referenced, the name of the theorem always matches the language of the region in which the theorem is located, for example, the definition of the beginning is still displayed in English in the current French mode: \cref{def: strange} and \cref{thm}.
\UseLanguage{English}
-% \subsection{On the line numbers}
-% Line numbers can be turned on and off at any time. \lstinline|\linenumbers| is used to enable the line numbers, and \lstinline|\nolinenumbers| is used to disable them. For the sake of beauty, the title, table of contents, index and some other elements are not numbered.
-
\subsection{On the fonts}
\lebhart{} and \beaulivre{} use Palatino Linotype as the English font, FounderType's YouSong and YouHei Simplified as the Chinese fonts, and partially use Neo Euler as the mathematical font:
\begin{itemize}
\item English main font. \textsf{English sans serif font}.
- \item 中文主要字体,\textsf{中文无衬线字体}
+ \item 中文主要字体, \textsf{中文无衬线字体}
\item Math demonstration: \( \alpha, \beta, \gamma, \delta, 1,2,3,4, a,b,c,d \), \[\mathrm{li}(x)\coloneqq \int_2^{\infty} \frac{1}{\log t}\,\mathrm{d}t \]
\end{itemize}
-Among them, Neo Euler can be downloaded at \url{https://github.com/khaledhosny/euler-otf}.
-
-Other fonts are not free, you need to purchase and use them on yourself (you can check the details on FounderType's website: \url{https://www.foundertype.com} ).
+Among them, Neo Euler can be downloaded at \url{https://github.com/khaledhosny/euler-otf}. Other fonts are not free, you need to purchase and use them on your own. (For the Chinese fonts, visit FounderType's website for detail: \url{https://www.foundertype.com} ).
-When the corresponding font is not installed, the font that comes with TeXlive will be used instead, and the experience might be reduced.
+When the corresponding font is not installed, the font that comes with TeX Live will be used instead, and the experience might be reduced.
\section{Document templates}
-\begin{minipage}{0.4\textwidth}
+\singlespacing
+
+\begin{minipage}{0.45\textwidth}
\begin{code}
%! TEX program = xelatex
-\documentclass{lebhartfast}
+\documentclass[fast]{lebhart}
+\linenumbers
\UseLanguage{French}
\begin{document}
@@ -220,11 +222,12 @@ When the corresponding font is not installed, the font that comes with TeXlive w
%
\hfill
%
-\begin{minipage}{0.4\textwidth}
+\begin{minipage}{0.45\textwidth}
\begin{code}
%! TEX program = xelatex
-\documentclass{lebhartfast}
+\documentclass[fast]{lebhart}
+\linenumbers
\UseLanguage{Chinese}
\begin{document}
diff --git a/macros/unicodetex/latex/lebhart/lebhart.cls b/macros/unicodetex/latex/lebhart/lebhart.cls
new file mode 100644
index 0000000000..6c2e93cca4
--- /dev/null
+++ b/macros/unicodetex/latex/lebhart/lebhart.cls
@@ -0,0 +1,237 @@
+%%
+%% This is file `lebhart/lebhart.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{lebhart}
+ [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
+\if@colorclass@fast
+ \PassOptionsToPackage{polyglossia}{colorist}
+\fi
+\RequirePackage{colorist}
+
+%%================================
+%% Fonts
+%%================================
+%% Math fonts in fast mode
+\if@colorclass@fast
+ \RequirePackage{mathpazo}
+\fi
+
+%% English fonts
+\PassOptionsToPackage{no-math}{fontspec}
+\RequirePackage{fontspec}
+\IfFontExistsTF{Palatino Linotype}{%
+ \setmainfont{Palatino Linotype}
+}{
+ \setmainfont{texgyrepagella-regular.otf}[
+ BoldFont = texgyrepagella-bold.otf ,
+ ItalicFont = texgyrepagella-italic.otf ,
+ BoldItalicFont = texgyrepagella-bolditalic.otf ]
+}
+ \setsansfont{SourceSansPro-Regular.otf}[
+ Scale = MatchLowercase,
+ BoldFont = SourceSansPro-Bold.otf ,
+ ItalicFont = SourceSansPro-RegularIt.otf ,
+ BoldItalicFont = SourceSansPro-BoldIt.otf ]
+
+%% Chinese fonts
+\PassOptionsToPackage{fontset=none,scheme=plain}{ctex}
+\RequirePackage{ctex}
+\IfFontExistsTF{FZYouSongS 507R}{%
+ \setCJKmainfont{FZYouSongS 507R}[
+ BoldFont = FZYouSongS 509R ,
+ BoldFeatures = {FakeBold=2} ,
+ ItalicFont = * ,
+ BoldItalicFont = FZYouSongS 509R ,
+ BoldItalicFeatures = {FakeBold=2} ,
+ SmallCapsFont = * ]
+}{
+ \setCJKmainfont{FandolSong-Regular.otf}[
+ BoldFont = FandolSong-Bold.otf ,
+ ItalicFont = FandolKai-Regular.otf ,
+ BoldItalicFont = FandolKai-Regular.otf ,
+ BoldItalicFeatures = {FakeBold=4} ,
+ SmallCapsFont = * ]
+}
+\IfFontExistsTF{FZYouSongS 507R}{%
+ \setCJKmonofont{FZYouSongS 507R}[
+ BoldFont = FZYouSongS 509R ,
+ BoldFeatures = {FakeBold=2} ,
+ ItalicFont = * ,
+ BoldItalicFont = FZYouSongS 509R ,
+ BoldItalicFeatures = {FakeBold=2} ,
+ SmallCapsFont = * ]
+}{
+ \setCJKmonofont{FandolFang-Regular.otf}[
+ BoldFont = * ,
+ BoldFeatures = {FakeBold=4} ,
+ ItalicFont = * ,
+ BoldItalicFont = * ,
+ BoldItalicFeatures = {FakeBold=4} ,
+ SmallCapsFont = * ]
+}
+\IfFontExistsTF{FZYouHeiS 506L}{%
+ \setCJKsansfont{FZYouHeiS 506L}[
+ BoldFont = FZYouHeiS 509R,
+ ItalicFont = * ,
+ BoldItalicFont = FZYouHeiS 509R ,
+ SmallCapsFont = * ]
+}{
+ \setCJKsansfont{FandolHei-Regular.otf}[
+ BoldFont = FandolHei-Bold.otf ,
+ ItalicFont = * ,
+ BoldItalicFont = FandolHei-Bold.otf ,
+ SmallCapsFont = * ]
+}
+
+%% Math font
+\if@colorclass@fast\else
+\PassOptionsToPackage
+ {warnings-off={mathtools-colon,mathtools-overbracket}}{unicode-math}
+\RequirePackage{unicode-math}
+\unimathsetup{math-style=ISO}
+\setmathfont{Asana-Math.otf}
+\IfFontExistsTF{Neo Euler}{%
+\setmathfont{Neo Euler} % From https://tex.stackexchange.com/a/425887
+ [range={"0000-"0001,"0020-"007E,
+ "00A0,"00A7-"00A8,"00AC,"00AF,"00B1,"00B4-"00B5,"00B7,
+ "00D7,"00F7,
+ "0131,
+ "0237,"02C6-"02C7,"02D8-"02DA,"02DC,
+ "0300-"030C,"030F,"0311,"0323-"0325,"032E-"0332,"0338,
+ "0391-"0393,"0395-"03A1,"03A3-"03A8,"03B1-"03BB,
+ "03BD-"03C1,"03C3-"03C9,"03D1,"03D5-"03D6,"03F5,
+ "2016,"2018-"2019,"2021,"2026-"202C,"2032-"2037,"2044,
+ "2057,"20D6-"20D7,"20DB-"20DD,"20E1,"20EE-"20EF,
+ "210B-"210C,"210E-"2113,"2118,"211B-"211C,"2126-"2128,
+ "212C-"212D,"2130-"2131,"2133,"2135,"2190-"2199,
+ "21A4,"21A6,"21A9-"21AA,"21BC-"21CC,"21D0-"21D5,
+ "2200,"2202-"2209,"220B-"220C,"220F-"2213,"2215-"221E,
+ "2223,"2225,"2227-"222E,"2234-"2235,"2237-"223D,
+ "2240-"224C,"2260-"2269,"226E-"2279,"2282-"228B,"228E,
+ "2291-"2292,"2295-"2299,"22A2-"22A5,"22C0-"22C5,
+ "22DC-"22DD,"22EF,"22F0-"22F1,
+ "2308-"230B,"2320-"2321,"2329-"232A,"239B-"23AE,
+ "23DC-"23DF,
+ "27E8-"27E9,"27F5-"27FE,"2A0C,"2B1A,
+ "1D400-"1D433,"1D49C,"1D49E-"1D49F,"1D4A2,"1D4A5-"1D4A6,
+ "1D4A9-"1D4AC,"1D4AE-"1D4B5,"1D4D0-"1D4E9,"1D504-"1D505,
+ "1D507-"1D50A,"1D50D-"1D514,"1D516-"1D51C,"1D51E-"1D537,
+ "1D56C-"1D59F,"1D6A8-"1D6B8,"1D6BA-"1D6D2,"1D6D4-"1D6DD,
+ "1D6DF,"1D6E1,"1D7CE-"1D7D7 }]
+}{}
+\fi
+
+\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 `lebhart/lebhart.cls'.
diff --git a/macros/unicodetex/latex/polyglossia/README.md b/macros/unicodetex/latex/polyglossia/README.md
index 4f4afbf5d7..33bbb1d2d7 100644
--- a/macros/unicodetex/latex/polyglossia/README.md
+++ b/macros/unicodetex/latex/polyglossia/README.md
@@ -26,8 +26,8 @@ Polyglossia makes it possible to automate the following tasks:
# LICENCE
-Copyright (c) 2008-2010 François Charette, 2013 Élie Roux, 2011-2020 Arthur Reutenauer,
-Copyright (c) 2019-2020 Bastien Roucariès, 2019-2020 Jürgen Spitzmüller
+Copyright (c) 2008-2010 François Charette, 2013 Élie Roux, 2011-2021 Arthur Reutenauer,
+Copyright (c) 2019-2021 Bastien Roucariès, 2019-2021 Jürgen Spitzmüller
Except where otherwise noted, Polyglossia is placed under the terms of the MIT licence
(https://opensource.org/licenses/MIT).
diff --git a/macros/unicodetex/latex/polyglossia/polyglossia.dtx b/macros/unicodetex/latex/polyglossia/polyglossia.dtx
index 12ab0b4ce0..b6fd4c23b8 100644
--- a/macros/unicodetex/latex/polyglossia/polyglossia.dtx
+++ b/macros/unicodetex/latex/polyglossia/polyglossia.dtx
@@ -36,8 +36,8 @@ Polyglossia makes it possible to automate the following tasks:
# LICENCE
-Copyright (c) 2008-2010 François Charette, 2013 Élie Roux, 2011-2020 Arthur Reutenauer,
-Copyright (c) 2019-2020 Bastien Roucariès, 2019-2020 Jürgen Spitzmüller
+Copyright (c) 2008-2010 François Charette, 2013 Élie Roux, 2011-2021 Arthur Reutenauer,
+Copyright (c) 2019-2021 Bastien Roucariès, 2019-2021 Jürgen Spitzmüller
Except where otherwise noted, Polyglossia is placed under the terms of the MIT licence
(https://opensource.org/licenses/MIT).
@@ -66,17 +66,17 @@ to track the issues and follow progress.
The polyglossia package
(C) 2008–2010 François Charette
- (C) 2011–2020 Arthur Reutenauer
+ (C) 2011–2021 Arthur Reutenauer
(C) 2013 Elie Roux
(C) 2019 Bastien Roucariès
- (C) 2019–2020 Jürgen Spitzmüller
+ (C) 2019–2021 Jürgen Spitzmüller
License information appended
\endpreamble
\postamble
- Copyright (C) 2020 by Arthur Reutenauer <arthur 'dot' reutenauer 'at' normalesup 'dot' org>
+ Copyright (C) 2021 by Arthur Reutenauer <arthur 'dot' reutenauer 'at' normalesup 'dot' org>
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3
@@ -335,10 +335,12 @@ to track the issues and follow progress.
\generate{\file{gloss-tibetan.ldf}{\from{polyglossia.dtx}{gloss-tibetan.ldf}}}
\generate{\file{gloss-turkish.ldf}{\from{polyglossia.dtx}{gloss-turkish.ldf}}}
\generate{\file{gloss-turkmen.ldf}{\from{polyglossia.dtx}{gloss-turkmen.ldf}}}
+\generate{\file{gloss-ug.ldf}{\from{polyglossia.dtx}{gloss-ug.ldf}}}
\generate{\file{gloss-ukrainian.ldf}{\from{polyglossia.dtx}{gloss-ukrainian.ldf}}}
\generate{\file{gloss-uppersorbian.ldf}{\from{polyglossia.dtx}{gloss-uppersorbian.ldf}}}
\generate{\file{gloss-urdu.ldf}{\from{polyglossia.dtx}{gloss-urdu.ldf}}}
\generate{\file{gloss-usorbian.ldf}{\from{polyglossia.dtx}{gloss-usorbian.ldf}}}
+\generate{\file{gloss-uyghur.ldf}{\from{polyglossia.dtx}{gloss-uyghur.ldf}}}
\generate{\file{gloss-vietnamese.ldf}{\from{polyglossia.dtx}{gloss-vietnamese.ldf}}}
\generate{\file{gloss-welsh.ldf}{\from{polyglossia.dtx}{gloss-welsh.ldf}}}
\generate{\file{arabicdigits.map}{\from{polyglossia.dtx}{arabicdigits.map}}}
@@ -360,7 +362,6 @@ to track the issues and follow progress.
%<*internal>
\generate{\file{polyglossia.ins}{\from{polyglossia.dtx}{batchfile}}}
\nopreamble\nopostamble
-\generate{\file{Changelog}{\from{polyglossia.dtx}{Changelog}}}
\generate{\file{examples.tex}{\from{polyglossia.dtx}{examples.tex}}}
\generate{\file{example-arabic.tex}{\from{polyglossia.dtx}{example-arabic.tex}}}
\generate{\file{example-thai.tex}{\from{polyglossia.dtx}{example-thai.tex}}}
@@ -408,6 +409,7 @@ to track the issues and follow progress.
\newcommand*\TA[1]{\textsc{\color{xpgblue}#1}}
\newcommand*\link[1]{\href{#1}{#1}}
\renewcommand*\meta[1]{\texttt{⟨#1⟩}}
+\newcommand*\TXI[1]{\href{https://github.com/reutenauer/polyglossia/issues/#1}{\textcolor{xpgred}{\##1}}}
\def\eg{\textit{e.g.,}\xspace}
\def\ie{\textit{i.e.,}\xspace}
\def\ca{\textit{ca.}\@\xspace}
@@ -619,9 +621,9 @@ to track the issues and follow progress.
% breton & galician & \TX{latin} & romansh & turkmen \\
% bulgarian & \TX{georgian} & latvian & \TX{russian} & \TX{ukrainian} \\
% \TX{catalan} & \TX{german} & lithuanian & \TX{sami} & urdu \\
-% coptic & \TX{greek} & macedonian & \TX{sanskrit} & vietnamese \\
-% \TX{croatian} & \TX{hebrew} & \TX{malay} & \TX{serbian} & \TX{welsh} \\
-% \TX{czech} & \TX{hindi} & malayalam & \TX{slovak} & \\
+% coptic & \TX{greek} & macedonian & \TX{sanskrit} & uyghur \\
+% \TX{croatian} & \TX{hebrew} & \TX{malay} & \TX{serbian} & vietnamese \\
+% \TX{czech} & \TX{hindi} & malayalam & \TX{slovak} & \TX{welsh} \\
% \bottomrule
% \end{tabular}
%
@@ -649,6 +651,7 @@ to track the issues and follow progress.
% \emph{norsk}\slash\emph{nynorsk}\textrightarrow\emph{norwegian}). The old names are still supported for backwards
% compatibility reasons.
% Version 1.46\new{1.46} introduces support for Afrikaans, Belarusian, Bosnian and Georgian.
+% Version 1.52\new{1.52} introduces support for Uyghur.
%
%
% \subsection{Relation to and use of Babel language names}\label{sec:babelnames}
@@ -897,6 +900,7 @@ to track the issues and follow progress.
% th & thai & \\
% tk & turkmen & \\
% tr & turkish & \\
+% ug & uyghur & \\
% uk & ukrainian & \\
% ur & urdu & \\
% vi & vietnamese & \\
@@ -2025,12 +2029,16 @@ to track the issues and follow progress.
% \end{shorthands}
% \item \xpgboolkeytrue[1.50]{forceheadingpunctuation}
% By default, chapter and section numbers always have a trailing punctuation in Russian
-% (as in \emph{1.1.} as opposed to \emph{1.1}). If this option is set to false, \textsf{polyglossia}
+% (as in \emph{1.1.} as opposed to \emph{1.1}). If this option is set to \xpgvalue{false}, \textsf{polyglossia}
% will not touch heading punctuation, so this will be whatever the class or a package determines.
% \item \xpgboolkeytrue[1.46]{indentfirst}
% By default, all paragraphs are indented in Russian, also those after a
-% chapter or section heading. If this option is false, the latter paragraphs
+% chapter or section heading. If this option is \xpgvalue{false}, the latter paragraphs
% are not indented, as normal in \LaTeX.
+% \item \xpgboolkeytrue[1.52]{mathfunctions}
+% By default, some specific math macros are defined for Russian (see below). In order to prevent command
+% clashes (\eg with the \pkg{chemformula} package), you can switch these definitions off by passing \xpgvalue{false}
+% to this option.
% \item \xpgchoicekey{spelling}{\xpgpresetvalue{modern} or \xpgvalue{old}}
% This option is for captions and date only, not for hyphenation.
% \item \xpgchoicekey{numerals}{\xpgpresetvalue{arabic}, \xpgvalue{cyrillic-alph} or \xpgvalue{cyrillic-trad}}
@@ -2054,6 +2062,13 @@ to track the issues and follow progress.
% \Eg ¦\textrussian{\AsbukTrad{page}}¦ produces \textrussian{\AsbukTrad{page}}.
% \item \Cmd\asbukTrad: same as \cmd\AsbukTrad\ but in lowercase.
% \end{itemize}
+% If the \xpgoption{mathfunctions} option is \xpgvalue{true}, loading Russian defines a few macros than can be used
+% independently of the current language. These are nine macros to be used in math mode to type the names of
+% trigonometric functions common for Russian documents: \cmd\sh , \cmd\ch , \cmd\tg , \cmd\ctg , \cmd\arctg ,
+% \cmd\arcctg , \cmd\th , \cmd\cth , and \cmd\cosec . Cyrillic letters in math mode can be typed with
+% the aid of text commands such as \cmd\textbf , \cmd\textsf , \cmd\textit , \cmd\texttt , etc.
+% The macros \cmd\Prob , \cmd\Variance , \cmd\NOD , \cmd\nod , \cmd\NOK , \cmd\nok , \cmd\Proj\ print some rare
+% Russian mathematical symbols.
%
% \subsection[sami]{sami\new{1.45}}\label{sami}
% Currently support for Sami is limited to Northern Sami.
@@ -2250,6 +2265,10 @@ to track the issues and follow progress.
% \item[¦"--*¦] Cyrillic dash for denoting direct speech. This adds a larger space after
% the dash. Space before the dash is output as is.
% \end{shorthands}
+% \item \xpgboolkeytrue[1.52]{mathfunctions}
+% By default, some specific math macros are defined for Ukrainian (see below). In order to prevent command
+% clashes (\eg with the \pkg{chemformula} package), you can switch these definitions off by passing \xpgvalue{false}
+% to this option.
% \item \xpgchoicekey{numerals}{\xpgpresetvalue{arabic}, \xpgvalue{cyrillic-alph} or \xpgvalue{cyrillic-trad}}
% Uses either Arabic numerals or Cyrillic alphanumerical numbering. The two Cyrillic variants differ as follows:
% \begin{itemize}
@@ -2271,6 +2290,15 @@ to track the issues and follow progress.
% \Eg ¦\textukrainian{\AsbukTrad{page}}¦ produces \textrussian{\AsbukTrad{page}}.
% \item \Cmd\asbukTrad: same as \cmd\AsbukTrad\ but in lowercase.
% \end{itemize}
+% ^^A
+% If the \xpgoption{mathfunctions} option is \xpgvalue{true}, loading Ukrainian defines a few macros than can be used
+% independently of the current language. These are nine macros to be used in math mode to type the names of
+% trigonometric functions common for Ukrainian documents: \cmd\sh , \cmd\ch , \cmd\tg , \cmd\ctg , \cmd\arctg ,
+% \cmd\arcctg , \cmd\th , \cmd\cth , and \cmd\cosec . Cyrillic letters in math mode can be typed with
+% the aid of text commands such as \cmd\textbf , \cmd\textsf , \cmd\textit , \cmd\texttt , etc.
+% The macros \cmd\Prob , \cmd\Variance , \cmd\NOD , \cmd\nod , \cmd\NOK , \cmd\nok , \cmd\NSD , \cmd\nsd , \cmd\NSK ,
+% \cmd\nsk , \cmd\Proj\ print some rare
+% Ukrainian mathematical symbols.
%
% \subsection{welsh}\label{welsh}
% \paragraph*{Options:}
@@ -2642,6 +2670,752 @@ to track the issues and follow progress.
% \noindent Finally, if you want to know whether a specific language option has been set, you can use
% \displaycmd{\iflanguageoption\marg{lang}\marg{opt. key}\marg{opt. value}\marg{true}\marg{false}}{\iflanguageoption}\new{1.47}
%
+% \section{Revision history}
+%
+% \bgroup\footnotesize
+% \subsection*{1.52 (16-03-2021)}
+%
+% \subsubsection*{New features}
+% \begin{itemize}
+% \item Adaptations to \LaTeX\ 2021/05/01 pre-release 2 for Korean (\TXI{477}).
+% \item Add support for Uyghur (\TXI{475}).
+% \item New option \xpgoption{mathfunctions} for Russian and Ukrainian allows to disable the definitions
+% of math macros that might clash with other packages (\TXI{465}).
+% \item Support LaTeX's new NFSS hooks (\TXI{471}).
+% \end{itemize}
+%
+% \subsubsection*{Bug fixes}
+% \begin{itemize}
+% \item Fix French part modifications with \pkg{hyperref} (\TXI{469}).
+% \item Fix markup of French ¦\see¦ and ¦\alsoname¦ (\TXI{468}).
+% \end{itemize}
+%
+% \subsection*{1.51 (08-12-2020)}
+%
+% \subsubsection*{New features}
+% \begin{itemize}
+% \item New option \xpgoption{frenchpart} for French (\TXI{458}).
+% \item New option \xpgoption{splithyphens} for Croatian (\TXI{454}).
+% \end{itemize}
+%
+% \subsubsection*{Bug fixes}
+% \begin{itemize}
+% \item Use new LaTeX core hooks rather than \pkg{filehook} package. This fixes
+% a recent breakage of \pkg{filehook} with other external packages (\TXI{453}).
+% \item Remove very old code that pretends \pkg{polyglossia} is \pkg{babel} (\TXI{455}).
+% \item Fix spelling of Albanian contentsname (\TXI{456}).
+% \item Fix part heading modification in French (\TXI{458}).
+% \item Fix extra space in Hebrew (\TXI{459}).
+% \item Register main polyglossia language earlier (\TXI{461}).
+% \item Allow for hyphenations in words following opening guillemet in French with XeTeX (\TXI{462}).
+% \end{itemize}
+%
+%
+% \subsection*{1.50a (15-10-2020)}
+%
+% \subsubsection*{Bug fixes}
+% \begin{itemize}
+% \item Assure ¦\autodot¦ is defined with ¦\KOMAScript¦ in Russian.
+% \end{itemize}
+%
+% \subsection*{1.50 (09-10-2020)}
+%
+% \subsubsection*{New features}
+% \begin{itemize}
+% \item Polyglossia now uses the Harfbuzz renderer by default with LuaTeX
+% output. This brings LuaTeX on par with XeTeX for all scripts (\TXI{337}).
+% The renderer can be changed via the new global \xpgoption{luatexrenderer} option.
+% \item The (previously inadvertently working) ¦hyphenrules¦ environment that ceased
+% to work after a recent \pkg{babel} update is back and now officially supported.
+% The environment now also supports language options and aliases (\TXI{427}).
+% \item New command ¦\setlanghyphenmins¦ to adapt hyphenation thresholds of languages
+% and varieties.
+% \item New command ¦\abjadalph¦ for Arabic with corresponding option (\TXI{431}).
+% \item Replace consecutive glues around punctuation by the correct amount of space
+% with lualatex for French, ecclesiastic Latin, and Sanskrit (\TXI{437}).
+% \end{itemize}
+%
+% \subsubsection*{Bug fixes}
+% \begin{itemize}
+% \item Remove warning about missing Brazil patterns (\TXI{404}).
+% \item Fix incompatibility with recent \pkg{babel} release (\TXI{408}).
+% \item Fixed some spellings in Marathi (\TXI{409}).
+% \item Fix spacing of geminating dot in Catalan (\TXI{410}).
+% \item Fix incompatibility of Marathi with \pkg{beamer}.
+% \item Correct ¦\partname¦ in Hindi (\TXI{416}).
+% \item Updates and improvements to Kurdish (\TXI{418}).
+% \item Only activate shorthand character if \xpgoption{babelshorthands} is \xpgvalue{true} (\TXI{421}).
+% \item Fix whitespace issue in Czech and Slovak with \xpgvalue{vlna=true} (\TXI{423}).
+% \item Fix whitespace issue in Danish (\TXI{424}).
+% \item Fix catcode conflicts that might occur in language definition files
+% f.\,ex.\ when loaded from a LaTeX3 class (\TXI{67}, \TXI{425}).
+% \item Robustify font family switches (\TXI{428}).
+% \item Fix whitespace issue in Russian \xpgoption{indentfirst} option (\TXI{433}).
+% \item In Russian, \xpgoption{indentfirst} is now again default (\TXI{434}).
+% \item Fix LaTeX error with arabic numbering in Ukrainian (\TXI{440}).
+% \item Fix directionality after Hebrew decimal numbers (\TXI{441}).
+% \item Fix ¦babelname¦ of Latin Serbian (\TXI{442}).
+% \item Fix recording of secondary languages in ¦\xpg@bloaded¦ and ¦\xpg@bcp@loaded¦
+% lists (\TXI{443}).
+% \item Simplify and robustify section heading modification in Russian
+% and introduce option \xpgoption{forceheadingpunctuation} (\TXI{444}).
+% \item Fix Cyrillic dash (via babelshorthand ¦"---¦) when TeX ligatures
+% are disabled (\TXI{445}).
+% \item Fix problem with large character indices in Lua module for punctuation
+% spacing
+% \end{itemize}
+%
+% \subsubsection*{Interface and defaults changes}
+% \begin{itemize}
+% \item Polyglossia now uses the Harfbuzz renderer by default with LuaTeX
+% output. See new features section.
+% \end{itemize}
+%
+% \subsubsection*{Build fixes}
+% \begin{itemize}
+% \item Fix a bug in the dtx build script which was the reason for an utterly
+% incomplete ¦polyglossia.dtx¦ file (\TXI{420}).
+% \end{itemize}
+%
+% \subsubsection*{Documentation improvements}
+% \begin{itemize}
+% \item Document how to change ¦\lefthyphenmin¦ and ¦\righthyphenmin¦ for a language
+% (\TXI{435}).
+% \end{itemize}
+%
+%
+% \subsection*{1.49 (08-04-2020)}
+%
+% \subsubsection*{New features}
+% \begin{itemize}
+% \item Add hook ¦\polyglossia@language@switched¦ to the external package interface (\TXI{398}).
+% \item Real fix for \TXI{400}, that wasn’t properly taken care of in 1.48.
+% \end{itemize}
+%
+% \subsubsection*{Bug fixes}
+% \begin{itemize}
+% \item Fix compilation error with some \xpgoption{swapstring} options in Hungarian (\TXI{373}).
+% \item Fix whitespace problem in Greek language.
+% \end{itemize}
+%
+% \subsubsection*{Interface and defaults changes}
+% \begin{itemize}
+% \item Changed Finnish caption for ``Table of Contents'' to ``Sisällys'' (\TXI{403}).
+% \end{itemize}
+%
+%
+% \subsection*{1.48 (25-03-2020)}
+%
+% \begin{itemize}
+% \item No new features
+% \end{itemize}
+%
+% \subsubsection*{Bug fixes}
+% \begin{itemize}
+% \item Fix use of Hebrew with LuaLaTeX (\TXI{389}).
+% \item Do not overwrite footnote redefinitions of other packages
+% with Latin and French (\TXI{391}).
+% \item Fix Serbian cyrillic numerals code (\TXI{392}).
+% \item Fix \xpgoption{[no]localmarks} option, whose logic was swapped (part of \TXI{395}).
+% \item Protect \xpgoption{localmarks} function against uppercased language names (part of \TXI{395}).
+% \item Fix buggy redefinition of ¦\@markright¦ with option localmarks (\TXI{396}).
+% \item Fix incompatibility between Latin and unicode-math (\TXI{394}).
+% \item Make (undocumented) ¦\defineshorthand¦ command (imported from babel) work.
+% \item Fix usage of \xpgoption{localmarks} option without value.
+% \item Emergency fixes for bugs caused by updates in \pkg{babel}’s ¦switch.def¦ (\TXI{399} and \TXI{400}).
+% \end{itemize}
+%
+% \subsubsection*{Interface and defaults changes}
+% \begin{itemize}
+% \item Use private macros in keyval choice keys (\TXI{390}).
+% \end{itemize}
+%
+% \subsection*{1.47 (29-01-2020)}
+%
+% \subsubsection*{New features}
+% \begin{itemize}
+% \item IETF BCP-47 compliant language tags can now be used for loading and switching
+% languages alternatively to language names (\TXI{226}).
+% \item New commands ¦\languageid{<type>}¦ and ¦\mainlanguageid{<type>}¦.
+% \item New test ¦\iflanguageidloaded¦.
+% \item New list ¦\xpg@bcp@loaded¦.
+% \item New environment ¦{lang}{<lang>}¦ (this is equivalent to ¦{<lang>}¦, but also available with
+% ¦\setlanguagealias*¦ which does not define dedicated alias environments).
+% \item New gloss option ¦totalhyphenmin¦ (corresponds to LuaTeX's ¦\hyphenationmin¦) (\TXI{111}).
+% \item New test ¦\iflanguageoption{<lang>}{<key>}{<val>}¦ (\TXI{364}).
+% \item Restore simple alphabetic numbering for ¦\asbuk¦ and ¦\Asbuk¦ in Belarusian, Mongolian,
+% Russian, Serbian, and Ukrainian (\TXI{377}).
+% \item New command ¦\AsbukTrad¦ and ¦\asbukTrad¦ for Belarusian, Mongolian, Russian, Serbian,
+% and Ukrainian which uses traditional alphanumerical numbering.
+% \item New numerals option ¦cyrillic-trad¦ and ¦cyrillic-alph¦ to differentiate simple
+% alphabetic and traditional alphanumerical Cyrillic numbering.
+% \item ¦\selectbackgroundlanguage¦ and ¦\resetdefaultlanguage¦ now also support language
+% aliases.
+% \item New macro ¦\charifavailable{<char code>}{<substitution>}¦.
+% \item Add French language variant ¦swiss¦.
+% \item Implement \xpgoption{babelshorthands} for Croatian.
+% \item Implement ¦\localnumeral¦ for Japanese.
+% \end{itemize}
+%
+% \subsubsection*{Bug fixes}
+% \begin{itemize}
+% \item Fix font family issue in headers (\TXI{355}).
+% \item Fix whitespace issues in ¦\text<lang>¦ (\TXI{356}).
+% \item Fix option-less ¦\babelname¦ in multi-variant languages (\TXI{357}).
+% \item Fix some spacing inconsistencies with French, Latin, and Sanskrit (\TXI{358}).
+% \item Fix issues with \xpgoption{babelshorthands} and \pkg{graphics} package (\TXI{368}).
+% \item Fix some captions and improve numbering in Marathi (\TXI{370}).
+% \item Fix Hungarian \xpgoption{swapstrings} feature (\TXI{373}).
+% \item Fix lua punctuation code problem (\TXI{374}).
+% \item Fix Bengali changecounternumbering option (\TXI{381}).
+% \item Fix whitespace issue in Japanese (\TXI{387}).
+% \item Fix ¦\text<lang>¦ command with multiple paragraphs.
+% \item Actually implement documented german spelling variant ¦1996¦ (= ¦new¦).
+% \item Fix Slovenian \xpgoption{localalph} option.
+% \item Fix Czech and Slovak \xpgoption{splithyphens} with typewriter fonts.
+% \item ¦farsical.sty¦: fix spacing issue with some month names.
+% \item Fix directionalty of numbers in Hebrew with XeTeX.
+% \item Improve interoperatability with \pkg{biblatex} (some language variants did not work yet).
+% \end{itemize}
+%
+% \subsubsection*{Interface and defaults changes}
+% \begin{itemize}
+% \item Some boolean options had ¦false¦ value by default, which meant if you passed
+% them without value, the logic was reversed. This has been changed, leading to
+% change of behavior should you have used one of these options without value (\TXI{363}).
+% Concerned are the following options:
+% \begin{itemize}
+% \item ¦babelshorthands¦ in language Belarusian, Mongolian, Ukrainian, and Russian
+% (now ¦babelshorthands¦ equals ¦babelshorthand=true¦, no longer ¦babelshorthands=false¦).
+% \item ¦localalph¦ in language Slovenian (¦localalph¦ now equals ¦localalph=true¦).
+% \item ¦latesthyphen¦ in language German (¦latesthyphen¦ now equals ¦latesthyphen=true¦).
+% \item ¦fullyear¦ in package \pkg{hebrewcal} (¦fullyear¦ now equals ¦fullyear=true¦).
+% \end{itemize}
+% \item The command ¦\setlanguagealias*¦ (introduced in v1.46) does no longer define
+% dedicated alias environments.
+% \item The babelnames for Latin variants have been corrected to ¦classiclatin¦, ¦ecclesiasticlatin¦
+% and ¦medievallatin¦. This is how the hyphenation patterns and \pkg{babel} ¦\extras¦ are named, even
+% though the variants can currently be selected in \pkg{babel} only via appended ``dot modifier''.
+% \item In accordance with the respective \pkg{l3kernel} change, ¦\str_lower_case:n¦ has been renamed to
+% ¦\str_lowercase:n¦ where used in ¦polyglossia.sty¦. Thus \pkg{polyglossia} 1.47 requires \pkg{l3kernel}
+% 2020-01-12 at least.
+% \end{itemize}
+%
+% \subsection*{1.46 (15-11-2019)}
+%
+% \subsubsection*{New features}
+% \begin{itemize}
+% \item Add option \xpgoption{indentfirst} to Russian (\TXI{78}).
+% \item Add options to set and customize French-style itemize item labels to French (\TXI{89}).
+% \item \pkg{Polyglossia} now decodes all supported \pkg{babel} language names in ¦\setdefaultlanguage¦,
+% ¦\setotherlanguage¦ and the language switching commands (\TXI{112}, \TXI{132}).
+% \item Add optional localized math operators to Spanish (\TXI{123}).
+% \item Swap section headings in Hungarian (\TXI{344}). New option \xpgoption{swapstrings} provides control
+% over this.
+% \item Introduce macro ¦\setlanguagealias¦ and ¦\setlanguagealias*¦.
+% \item Introduce language switching command ¦\textlang{lang}{...}¦ (equivalent to ¦\text<lang>¦,
+% but also available with ¦\setlanguagealias*¦ which does not define ¦\text<alias>¦).
+% \item Add support for Afrikaans.
+% \item Add support for Belarusian.
+% \item Add support for Bosnian.
+% \item Add support for Georgian.
+% \item Add Spanish variant ¦mexican¦.
+% \item Add babelshorthands as well as options \xpgoption{splithyphens} and \xpgoption{vlna} to Slovak.
+% \item Add Latin language variant ¦ecclesiastic¦.
+% \item Add Latin language options ¦capitalizemonth¦, ¦ecclesiasticfootnotes¦, ¦hyphenation¦,
+% ¦prosodicshorthands¦, and ¦usej¦.
+% \item Add Latin shorthands for «, », æ, Æ, œ, and Œ.
+% \item Add French language option \xpgoption{thincolonspace}.
+% \end{itemize}
+%
+% \subsubsection*{Bug fixes}
+% \begin{itemize}
+% \item Fix problems with fragile font settings (\TXI{24}).
+% \item Fix clash of French punctuation spacing with the \pkg{soul} package (\TXI{52}).
+% \item Re-enable the possibility to pass a macro as main argument to ¦\setmainlanguage¦ and
+% ¦\setotherlanguage¦ (\TXI{331}).
+% \item Fix detection of default ¦\languagevariant¦ (\TXI{332}).
+% \item Fix LaTeX error with undefined hyphenation pattern (\TXI{346}).
+% \item Fix some babel shorthand issues by updating the shorthand code from recent \pkg{babel}.
+% \item Fix some problems with French and Latin auto-spacing (\TXI{345}, \TXI{352}).
+% \item Fix an \pkg{expl3} declaration (\TXI{348}).
+% \end{itemize}
+%
+% \subsubsection*{Interface and defaults changes}
+% \begin{itemize}
+% \item The sub-package ¦cyrillicnumbers.sty¦ has been renamed to
+% ¦xpg-cyrillicnumbers.sty¦ (per TeXLive request).
+% \item In Russian, all paragraphs are now indented by default, as common in Russian typography.
+% The behavior can be opted out by \xpgoption{indentfirst=false}.
+% \item In Czech, \xpgoption{splithyphens} and \xpgoption{lvna} are enabled by default.
+% Also, the option does now work as well with LuaTeX.
+% \item Changed option name ¦fraktur¦ to ¦blackletter¦ in German (the former is still available
+% as an alias).
+% \item In French, high punctuation characters and guillemets are spaced by half an interword
+% space now instead of a ¦\thinspace¦ (cf. \TXI{345}).
+% \end{itemize}
+%
+% \subsection*{1.45 (27-10-2019)}
+%
+% \subsubsection*{New features}
+% \begin{itemize}
+% \item Introduce a framework for external packages to access language variants. This fixes,
+% among other things, long-standing problems in the interaction of \pkg{biblatex} and \pkg{polyglossia}.
+% \item Add new macros ¦\languagevariant¦, ¦\mainlanguagevariant¦, ¦\babelname¦ and ¦\mainbabelname¦
+% for package authors to access language information.
+% \item Add new test ¦\iflanguageloaded{<language>}{<true>}{<false>}¦ where <language>
+% can be a \pkg{polyglossia} or \pkg{babel} language name.
+% \item Add new macros ¦\localnumeral,¦ ¦\localnumeral*,¦ ¦\Localnumeral¦ and
+% ¦\Localnumeral*¦ that convert Arabic digitals to the local number scheme.
+% \item Add new macro ¦\pghyphenation¦ to add language-specific hyphenation exceptions (\TXI{18}).
+% \item Add support form (Khalkha \& Cyrillic) Mongolian in line with \pkg{babel-mongolian} (\TXI{23}).
+% \item Add option \xpgoption{splithyphens} and \xpgoption{vlna} to Czech (XeTeX only; for LuaTeX, use the package
+% \pkg{luavlna} to get these features) (\TXI{32}).
+% \item Add support for Kurdish, both Kurmanji and Sorani (\TXI{277}).
+% \item Implement proper Cyrillic (alphanumeric) numbering (\TXI{285}).
+% \item Add new language ¦friulian¦.
+% This deprecates ¦friulan¦ (which is still supported for backwards compatibility).
+% \item Add new language ¦malay¦ with variants ¦indonesian¦ and ¦malaysian¦.
+% This deprecates ¦bahasai¦ and ¦bahasam¦ (which are still supported for
+% backwards compatibility).
+% \item Add new language ¦gaelic¦ with variants ¦irish¦ and ¦scottish¦.
+% This deprecates ¦irish¦ and ¦scottish¦ as own \pkg{polyglossia} languages (which
+% are still supported for backwards compatibility).
+% \item Add new language ¦hungarian¦.
+% This deprecates ¦magyar¦ (which is still supported for backwards compatibility).
+% \item Add new language ¦sorbian¦ with variants ¦lower¦ and ¦upper¦.
+% This deprecates ¦lsorbian¦ and ¦usorbian¦ (which are still supported for
+% backwards compatibility).
+% \item Add new language ¦portuguese¦ with variants ¦portuguese¦ and ¦brazilian¦.
+% This deprecates ¦brazil¦ and ¦portuges¦ (which are still supported for
+% backwards compatibility).
+% \item Add new language ¦norwegian¦ with variants ¦nynorsk¦ and ¦bokmal¦.
+% This deprecates ¦nynorsk¦ and ¦norsk¦ (which are still supported for
+% backwards compatibility).
+% \item Add new language ¦persian¦.
+% This deprecates ¦farsi¦ (which is still supported for backwards compatibility).
+% \item Add new language ¦sami¦. Currently only Northern Sami is supported.
+% This deprecates ¦samin¦ (which is still supported for backwards compatibility).
+% \item ¦gloss-serbian¦: add \xpgoption{numerals=cyrillic} option. Add ¦\asbuk¦ and ¦\Asbuk¦ (\TXI{285}).
+% \item Implement basic support for (French) ¦canadien¦ and (English) ¦canadian¦ (\TXI{22}).
+% \item Improve support for Armenian (\TXI{79}): Add captions, Eastern month names
+% (accessible via variant=eastern) and Armenian alphabetic numbering
+% (via \xpgoption{numerals=armenian} and ¦\armenicnumeral¦).
+% \item Add french option \xpgoption{autospacing} and commands ¦\AutoSpacing,¦ ¦\NoAutoSpacing¦
+% This allows to switch off autospacing globally or locally (\TXI{113}).
+% \item Fixup ¦\normalfont¦ (\TXI{203}).
+% \item Fix directionality issues in mixed RTL/LTR paragraphs (\TXI{204}).
+% \item Implement \xpgoption{babelshorthands} for Finnish (\TXI{212}) and Czech.
+% \item Implement access to current language via Lua (\TXI{243}).
+% \item Introduce french option option \xpgoption{autospacetypewriter}
+% alias \xpgoption{OriginalTypewriter}.
+% \item Support ¦\aemph¦ with lualatex
+% \item Rename \xpgoption{automaticspacesaroundguillemets} to \xpgoption{autospaceguillemets}
+% The old option is kept for backwards compatibility.
+% \end{itemize}
+%
+% \subsubsection*{Bug fixes}
+% \begin{itemize}
+% \item Fix equation number in Arabic and Farsi (\TXI{7}).
+% \item Simplify and document Hebrew \xpgoption{marcheshvan} option (\TXI{16}).
+% \item Fix hyphenation of Greek with LuaTeX (\TXI{55}).
+% \item Fix N'ko date format (\TXI{63}).
+% \item Disable the extras of a language when a nested language starts (\TXI{66}, \TXI{169}).
+% \item Properly implement Bengali numbers (\TXI{69}, \TXI{184}).
+% \item Fix conflicts with other packages caused by premature shorthand activation
+% in preamble (\TXI{81}, \TXI{200}).
+% \item Fix kerning in math with French (\TXI{92}).
+% \item Fix expansion issue in Hebrew (\TXI{93}).
+% \item Fix numbering expansion issue in Greek (\TXI{110}).
+% \item Postpone ¦\disablehyphenation¦ in preamble until after setting of
+% document language (\TXI{125}).
+% \item Postpone the assignment of defaultfamily to ¦\AtBeginDocument¦,
+% thus do not overwrite ¦\familydefault¦ redefinitions in the preamble (\TXI{127}).
+% \item Reset number settings when switching language (\TXI{133}).
+% \item Hebrew: Properly store ¦\MakeUppercase¦ for later restoration (\TXI{152}).
+% \item Fix whitespace issue in ¦\datewelsh¦ (\TXI{158}).
+% \item When switching language, set the language/script specific font families (\TXI{164}).
+% \item Correct some Bengali captions (\TXI{165}).
+% \item Fix documentation of Serbian (\TXI{168}).
+% \item Reset ucl codes in Latin only if the respective variant is used (\TXI{172}).
+% \item Fix ¦\disablehyphenation¦ with LuaTeX (\TXI{187}).
+% \item Fix typos in Hindi captions (\TXI{202}).
+% \item Pass language options to the aux files (\TXI{205}).
+% \item Rewrite and fix English variant handling (\TXI{208}).
+% \item Define magyar caption formats in ¦\blockextras¦ and undef them in ¦\noextras¦ (\TXI{209}).
+% \item Ensure proper direction with arabic digits in Arabic and Farsi (\TXI{213}).
+% \item Fix ¦\linespread¦ with Korean (\TXI{218}).
+% \item Define Russian caption before key allocation (\TXI{219}).
+% \item Register current language in \pkg{polyglossia} lua module after selection (\TXI{234}).
+% \item Fix \pkg{babel} language switching commands (\TXI{239}):
+% ¦\foreignlanguage¦ and the starred ¦otherlanguage*¦ environment are not
+% supposed to change dates.
+% \item Fix French spacing leaking beyond French (\TXI{270}).
+% \item Redefine font families for French only if language is loaded (\TXI{270}).
+% \item ¦gloss-russian¦:
+% \begin{itemize}
+% \item Check whether command exist before redefining (\TXI{280}).
+% \item Fix some whitespace issues.
+% \end{itemize}
+% \item Fix and simplify ¦\frenchfootnote¦ definition (\TXI{294}).
+% \item Fix footnote numbering in Farsi.
+% \item Fix Latin footnotes in Arabic documents.
+% \item Set the correct main direction with \pkg{luabidi}.
+% \item Fix \xpgoption{autospaceguillemets} option in French.
+% \item Fix grouping in ¦gloss-danish.ldf¦.
+% \item Properly store ¦\MakeUppercase¦ and ¦\@arabic¦ for later restoration.
+% \end{itemize}
+%
+% \subsubsection*{Documentation}
+% \begin{itemize}
+% \item Add documentation about footnotes in RTL context
+% \item Document Tibetan numerals option (\TXI{109}).
+% \item Improve ¦\frenchfootnote¦ documentation.
+% \item Mention Japanese support in the docs.
+% \end{itemize}
+%
+% \subsection*{1.44 (04-04-2019)}
+% \begin{itemize}
+% \item Correction to Russian language file, by \TA{Maksim Zholudev} (commit d2f383e).
+% \item Added Macedonian language file, by \TA{Stefan Zlatinov} (commit cd379e1).
+% \end{itemize}
+%
+% \subsection*{1.43 (05-03-2019)}
+% \begin{itemize}
+% \item Correction to Hindi language file, by \TA{Zdenĕk Wagner}.
+% \end{itemize}
+%
+% \subsection*{1.42.5 (13-04-2017)}
+% \begin{itemize}
+% \item Many changes to the French language file, by \TA{Maïeul Rouquette}.
+% \end{itemize}
+%
+% \subsection*{1.42.4 (February, March 2016)}
+% \begin{itemize}
+% \item Remedial actions for the \pkg{babel} changes.
+% \item Fixed side effect of pull request \TXI{122} (see commit d2a34ff).
+% \item Added automatic Josa selection, variant, and captions options to Korean, by \TA{Dohyun Kim} (pull request \TXI{128}).
+% \item Updated ¦gloss-occitan¦ from CTAN.
+% \end{itemize}
+%
+% \subsection*{18-01-2016}
+% \begin{itemize}
+% \item Fixed issue \TXI{124} (minor typo in ¦polyglossia-frpt.lua¦)
+% \item Merged pull request \TXI{117} for more French guillemet spacing
+% \item Merged pull request \TXI{121} to add ¦\bbl@loaded¦; fixes issue \TXI{120}
+% \item Merged pull request \TXI{122} that build on \TXI{121}
+% \item Merged pull request \TXI{116} for French (spacing around guillemets)
+% \item Fixed issue \TXI{115} (spurious spaces in Arabic)
+% \end{itemize}
+%
+% \subsection*{19-08-2015}
+% \begin{itemize}
+% \item Fixed issue \TXI{107} for Marathi (labels and month names)
+% \end{itemize}
+%
+% \subsection*{1.42.0 (06-08-2015)}
+% \begin{itemize}
+% \item Add Bengali digits package, and option to reset all numbering functions.
+% \item Add ¦long¦ option for Welsh date.
+% \item Add local alphabet in Slovenian, for enumerations and such.
+% \item Fix long-standing bug with Welsh: date should use ordinals.
+% \item Fix for Latin with LuaTeX: all variants had same problems as Classic.
+% \item Fixed error with British variant of English and LuaTeX (issue \TXI{86}).
+% \end{itemize}
+%
+% \subsection*{1.41.0 (16-07-2015)}
+% \begin{itemize}
+% \item Added support for Khmer, by \TA{Say Ol} (private email)
+% \end{itemize}
+%
+% \subsection*{1.40.1 (14-07-2015)}
+% \begin{itemize}
+% \item Bugfix for Korean, by \TA{Dohyun Kim} (pull request \TXI{103})
+% \end{itemize}
+%
+% \subsection*{1.40.0 (07-07-2015)}
+% \begin{itemize}
+% \item ¦gloss-korean.ldf¦ contributed by \TA{Dohyun Kim} (pull request \TXI{102})
+% \end{itemize}
+%
+% \subsection*{1.33.7 (04-07-2015)}
+% \begin{itemize}
+% \item Release to CTAN, no code change
+% \item Fixed extraneous space in code for Swiss German (pull request \TXI{101})
+% \item Fixed a typo in Ukrainian alphabet, for ¦\Asbuk¦ (pull request \TXI{99})
+% \item Fix for Classic Latin: load patterns for LuaTeX
+% \item Made ¦\rmfamily¦, ¦\sffamily¦ and ¦\ttfamily¦ robust again
+% \item Merged fix for Hebrew date format, by \TA{Guy Rutenberg} (pull request \TXI{94})
+% \item Merged fix for spurious space, by \TA{Caleb McKennan} (pull request \TXI{91})
+% \item Merged pull request \TXI{84} by \TA{Élie Roux} for Tibetan
+% \item Added support for Swiss German (pull request \TXI{75})
+% \item Added commands ¦\Asbuk¦ and ¦\asbuk¦ for Ukrainian (pull request \TXI{76}), similar to Russian
+% \item Documented changes to Latin from last year.
+% \item Be friendlier to right-to-left languages with LuaTeX
+% \item Enhanced Latin support by \TA{Claudio Beccari}
+% \end{itemize}
+%
+% \subsection*{1.33.6 (15-05-2015)}
+% \begin{itemize}
+% \item Introduce a ¦classical¦ and ¦medieval¦ variant of Latin
+% \item Add ¦\asbuk¦ and ¦\Asbuk¦ for Ukrainian (after their Russian counterpart)
+% \item Fix a number of bugs
+% \end{itemize}
+%
+% \subsection*{1.33.5 (21-05-2014)}
+% \begin{itemize}
+% \item Option to disable hyphenation entirely, by \TA{Élie Roux}
+% \item Fix spurious spaces in gloss-russian.ldf, by \TA{Oleg Domanov}
+% \item Support for the Austrian variant of German, by \TA{Jürgen Spitzmüller}
+% \item Changes to the Croatian translations, by \TA{Ivan Kokan}
+% \item Correction to the Lithuanian translations, by \TA{Ignas Anikevičius}
+% \end{itemize}
+%
+% \subsection*{1.33.4 (27-06-2013)}
+% \begin{itemize}
+% \item Emergency release for a bug introduced in ¦babelsh.def¦
+% \end{itemize}
+%
+% \subsection*{1.33.3 (28-05-2013)}
+% \begin{itemize}
+% \item Changed formatting of some error messages (emergency fixes for TeX Live 2013)
+% \end{itemize}
+%
+% \subsection*{1.33.2 (26-05-2013)}
+% \begin{itemize}
+% \item Added ¦\disablehyphenation¦ and ¦\enablehyphenation¦, contributed by
+% \TA{Élie Roux}.
+% \item Fixed bug related to package inclusion. \pkg{Polyglossia} would break if
+% we loaded ¦breqn.sty¦, and then called ¦\setmainlanguage{english}¦, this
+% is no longer the case.
+% \item Removed spurious space introduced by ¦\captionswedish¦.
+% \end{itemize}
+%
+% \subsection*{1.33.1 (23-05-2013)}
+% \begin{itemize}
+% \item Editorial changes to the documentation
+% \item Hunted and documented bugs
+% \end{itemize}
+%
+% \subsection*{1.33.0 (20-05-2013)}
+% \begin{itemize}
+% \item Added support for N’Ko.
+% \item Bugfixes for LuaTeX
+% \item More work in progress on Bidi in LuaTeX.
+% \end{itemize}
+%
+% \subsection*{1.32.0 (15-05-2013)}
+% \begin{itemize}
+% \item Transitional version to support right-to-left languages with LuaTeX.
+% \end{itemize}
+%
+% \subsection*{1.31 (10-05-2013) / 1.3 (11-05-2013)}
+% \begin{itemize}
+% \item Several bugfixes.
+% \item Sync with \pkg{babel} 3.9.
+% \item Consolidated support for LuaTeX for all languages but the ones using
+% South and South-East Asian scripts, and languages written from right
+% to left. Many thanks to \TA{Élie Roux} for his help.
+% \item Added support for Tibetan, contributed by \TA{Élie Roux} (end of lines are experimental).
+% \end{itemize}
+%
+% \subsection*{1.30 (06-08-2012)}
+% \begin{itemize}
+% \item Added support for LuaTeX. Many languages don’t work yet. Please be patient.
+% \end{itemize}
+%
+% \subsection*{1.2.0e (28-04-2012)}
+% \begin{itemize}
+% \item Fixed a number of outstanding and not very interesting bugs.
+% \item Added gloss files for Romansh and Friulan, contributed by \TA{Claudio Beccari}.
+% \end{itemize}
+%
+% \subsection*{1.2.0d (12-01-2012)}
+% \begin{itemize}
+% \item Removed ¦\makeatletter¦ and ¦\makeother¦ from gloss files entirely.
+% \end{itemize}
+%
+% \subsection*{1.2.0c (12-10-2011) [First update by Arthur Reutenauer]}
+% \begin{itemize}
+% \item Update to ¦gloss-italian.ldf¦ by \TA{Claudio Beccari}, incorporating changes
+% by \TA{Enrico Gregorio}.
+% \item Conclude every gloss file with ¦\makeatother¦ to match the initial
+% ¦\makeatletter¦. (Not necessary from a technical point of vue, because of one
+% of the changes by Enrico reported below, but I like it better that way :-)
+% \item Conclude ¦polyglossia.sty¦ with ¦\ExplSyntaxOff¦ to match the initial
+% ¦\ExplSyntaxOn¦.
+% \item Added gloss file for Kannada, contributed by \TA{Aravinda VK} and others.
+% \item Corrections to the gloss-dutch.ldf thanks to \TA{Wouter Bolsterlee}.
+% \item Several patches by \TA{Enrico Gregorio}, fixing long-standing bugs.
+% From the git log:
+% \begin{itemize}
+% \item Deleted setup for right-to-left writing direction, see \url{http://tug.org/pipermail/xetex/2011-April/020319.html}
+% \item Changed three appearances of ¦\newcommand¦ to ¦\newrobustcmd,¦ as the commands needs to be protected.
+% Bug reported by \TA{kamensky}.
+% \item Corrected ¦\datepolish¦ as suggested by \TA{Piotr Kempa}
+% \item Changed ¦\lccode"¦ into ¦\lccode\string",¦ because it might come into action at wrong times when ¦"¦ is active
+% \item Changed definition of key ¦\xpg@setup¦, as ¦\@tmpfirst¦ and ¦\@tmpsecond¦ were not expanded, causing dependence
+% of ¦\lefthyphenmin¦ and ¦\righthyphenmin¦ to the last loaded language.
+% Raised by \TA{Vadim Rodionov} on the XeTeX mailing list.
+% \item Deleted ¦\bgroup¦ and ¦\egroup¦ tokens from the definition of ¦otherlanguage*¦; they serve no purpose
+% (we are already inside an environment) and conflict with \pkg{csquotes}. Noticed by \TA{P. Lehman}.
+% \item Changed the calls of ¦\input¦ to ¦\xpg@input,¦ which inputs the required file and resets the catcode
+% of ¦@¦ to the same value as it had before the input. Since each ¦.ldf¦ file starts with ¦\makeatletter¦,
+% the old behaviour would leave a category 11 @, which is wrong.
+% \item Added ¦\csuse{date#2}¦ to the definition of ¦otherlanguage*¦.
+% \end{itemize}
+% \end{itemize}
+%
+% \subsection*{1.2.0b (03-10-2011) [Update by Philipp Stephani]}
+% \begin{itemize}
+% \item Load \pkg{xkeyval} package explicitly since newer versions
+% of \pkg{fontspec} don't load it any more.
+% \end{itemize}
+%
+% \subsection*{1.2.0a (27-07-2010) [Last update by François Charette]}
+% \begin{itemize}
+% \item Initialize ¦\fontfamily¦ acc to value of ¦\familydefault¦
+% (Fixes a bug when using \pkg{polyglossia} with beamer)
+% \item Remove spurious space in def of ¦\dateenglish¦
+% \item Add missing English variant ¦american¦
+% \item Serbian: fix date format and captions (Latin+Cyrillic)
+% \item Fix ¦\atticnumeral¦ in ¦gloss-greek¦
+% \item Small improvements and fixes in documentation
+% \end{itemize}
+%
+%
+% \subsection*{1.2.0 (15-07-2010)}
+% \begin{itemize}
+% \item Adapted for \pkg{fontspec} 2.0 (will not work with earlier versions!)
+% \item New implementation of a ¦\PolyglossiaSetup¦ interface
+% that simplifies writing ¦gloss-*.ldf¦ files
+% \item Many internal enhancements and refactoring
+% (including a patch by \TA{Dirk Ulrich})
+% \item Improved automatic font setup when ¦\<lang>font¦ is not defined
+% \item New environment otherlanguage* (env. equivalent of ¦\foreignlanguage¦
+% (\TA{Enrico Gregorio})
+% \item Bugfix to prevent bogus expansion of ¦\{rm,sf,tt}family¦ even in aux files (\TA{Enrico Gregorio})
+% \item New gloss files for Armenian, Bengali, Occitan, Bengali, Lao,
+% Malayalam, Marathi, Tamil, Telugu, and Turkmen.
+% \item New auxiliary packages ¦devanagaridigits¦ and ¦bengalidigits¦
+% \item \pkg{hijrical} no longer loads \pkg{bidi} and checks for incompatible \pkg{l3calc}
+% \item Add \pkg{babel} shorthands for Russian (based on a patch by \TA{Vladimir Lomov})
+% \item Fix ¦\fnum@{table,figure}¦ for Lithuanian
+% \item Various improvements in ¦gloss-russian¦ (provided by \TA{Vladimir Lomov} and
+% others)
+% \item Corrected captions for Bahasai, Lithuanian, Russian, Croatian
+% \item Add option \xpgoption{indentfirst=true} for Spanish, Croation and other languages
+% (NB: \xpgoption{indentfirst} was previously named \xpgoption{frenchindent})
+% \item New option \xpgoption{script} for German: Setting \xpgoption{script=fraktur} modifies the
+% captions for typesetting in Fraktur.
+% \item New command ¦\aemph¦ for Arabic, Farsi, Urdu, etc. to mark emphasis through
+% overlining.
+% \item Package option \xpgoption{nolocalmarks} is now true by default: to activate it the
+% option \xpgoption{localmarks} must be passed instead.
+% \item Loading languages à la \pkg{babel} as package options is no longer possible (this
+% feature was deprecated since v1.1.0).
+% \end{itemize}
+%
+% \subsection*{1.1.1 (23-03-2010)}
+% \begin{itemize}
+% \item Bugfix for French: explicit spaces before/after double punctuation
+% signs (Par exemple : les grands « espaces » du Canada !) are
+% now replaced by the appropriate non-breaking spaces, as in \pkg{babel}.
+% \item Bugfix for font switching mechanism within Latin script
+% (pending a complete re-implementation in v1.2):
+% the font shape and series are no longer reset when switching language.
+% \item New macros for non-Western decimal digits
+% (instead of fontmappings)
+% \item New gloss files for Asturian, Lithuanian and Urdu
+% \item ¦hijrical.sty¦ is now locale-aware: ¦\hijritoday¦ is
+% formatted differently in Arabic, Farsi, Urdu, Turkish
+% and Bahasa Indonesia.
+% \item Enable \xpgoption{babelshorthands} for Dutch
+% \item Add missing macro ¦\allowhyphens¦
+% \item Add global option \xpgoption{babelshorthands}
+% \item Support Catalan geminated l
+% \item Bugfix when declaring more than one pkg option
+% \item Protect ¦\reset@font¦
+% \item Add missing requirement \pkg{makecmds}
+% \item Bugfix for smallcaps in captions
+% \item Typo for ¦ccname¦ in Hebrew
+% \item Add option \xpgoption{numerals} to ¦gloss-russian¦
+% \item Provide ¦\newXeTeXintercharclass¦ when undefined
+% \item Bugfix for Russian ¦\alph¦
+% \item Remove superfluous level of ¦{}¦ in definition of ¦\markright¦
+% \item Bugfix for ¦\datecatalan¦
+% \item Change ¦hyphenmins¦ for Sanskrit
+% \end{itemize}
+%
+% \subsection*{1.1.0b (22-11-2009)}
+% \begin{itemize}
+% \item Modify ¦\hyphenmins¦ for Sanskrit (\TA{Yves Codet})
+% \item Bugfixes for Serbian and Bulgarian (\TA{Enrico Gregorio})
+% \end{itemize}
+%
+% \subsection*{1.1.0a (22-11-2009)}
+% \begin{itemize}
+% \item Bugfix for interchar tokens
+% \end{itemize}
+%
+% \subsection*{1.1.0 (20-11-2009)}
+% \begin{itemize}
+% \item Use ¦\newXeTeXintercharclass¦ (thanks to \TA{Enrico Gregorio})
+% \item Fixed implementation of shorthands for German (\pkg{babel} code in file ¦babelsh.def¦)
+% \item Arabic (\TA{Khaled Hosny}):
+% \begin{itemize}
+% \item Fix abjad form for 3 and 5 and add option ¦\abjadjimnotail¦
+% \item bugfix for ¦\arabicnumber¦
+% \item make Gregorian calendar the default
+% \item fixed typos in the sample text
+% \end{itemize}
+% \item Turkish (\TA{S. Ö. Yıldız}):
+% \begin{itemize}
+% \item fix white-space before : and !
+% \item also check if the font specified TRK for language
+% \item added missing Turkish translation of ``Glossary''
+% \end{itemize}
+% \item Suppress ¦nopattern¦ warning for non-hyphenated scripts
+% \item Changed U+0163 to U+021B for Romanian (\TA{Elie Roux})
+% \item Stylistic fixes and use macro ¦\xpg@option¦ for package options (\TA{E. Gregorio})
+% \item Fix month names in Dutch (\TA{A. Ledda})
+% \item Add Brazilian translation for ``glossary''
+% \item Remove spurious space generated by ¦gloss-spanish¦
+% \item Fix ¦ldf¦ file for brazilian
+% \item Various improvements in the code communicated by \TA{E. Gregorio}:
+% \begin{itemize}
+% \item remove superfluous ¦\protect\language¦
+% \item change default language from ¦0¦ to ¦\l@nohyphenation=255¦
+% \item localize ¦lccode¦ handling of apostrophe in French; add it to Italian
+% \end{itemize}
+% \item Fix ¦frenchspacing¦ for Vietnamese
+% \item Other minor bugfixes
+% \end{itemize}
+%
+% \subsection*{1.0.2 (27-01-2009)}
+% \begin{itemize}
+% \item Captions corrected in Hebrew, Russian and Spanish
+% \item Removed all ¦\text<lang>¦ wrappers within caption definitions
+% \item Improved compatibility with \pkg{babel}
+% \item New option \xpgoption{babelshorthands} for German
+% \item New option \xpgoption{Script} for Sanskrit
+% \end{itemize}
+%
+% \subsection*{1.0.1 (31-07-2008)}
+% \begin{itemize}
+% \item Improved documentation (added sections on font setup and numeration mappings)
+% \item Improvements and bug fixes for English and German
+% \item Bugfix in ¦gloss-syriac.ldf¦ (spurious space after ¦\textsyriac{...}¦)
+% \item Extended the scope of ¦\syriacabjad¦
+% \item Added ¦gloss-amharic.ldf¦ (ported from ¦ethiop.ldf¦ in the package \pkg{ethiop})
+% \end{itemize}
+%
+% \subsection*{1.0 (13-07-2008)}
+% \begin{itemize}
+% \item Initial release on CTAN.
+% \end{itemize}
+% \egroup
+%
% \section{Acknowledgements (by François Charette)}
% \pkg{Polyglossia} is notable for being a recycle box of previous contributions
% by other people. I take this opportunity to thank the following individuals,
@@ -2675,7 +3449,8 @@ to track the issues and follow progress.
% \TA{Khaled Hosny}, \TA{Najib Idrissi}, user \TA{julroy67}, \TA{Dohyun Kim}, \TA{Phil Kime}, \TA{Mike Kroutikov},
% \TA{Ivan Kokan}, \TA{Caleb Maclennan}, \TA{José Mancera}, \TA{Miquel Ortega}, \TA{Yevgen Pogribnyi}, \TA{Will Robertson},
% \TA{Maïeul Rouquette}, \TA{Elie Roux}, \TA{Hugo Roy}, \TA{Guy Rutenberg}, \TA{Philipp Stephani}, \TA{Niranjan Tambe},
-% \TA{Keno Wehr}, \TA{Dominik Wujastyk}, \TA{Sertaç Ö. Yıldız}, \TA{Maksim Zholudev}, \TA{Yan Zhou}, and \TA{Stefan Zlatinov}.
+% \TA{Osman Tursun}, \TA{Keno Wehr}, \TA{Dominik Wujastyk}, \TA{Sertaç Ö. Yıldız}, \TA{Maksim Zholudev}, \TA{Yan Zhou},
+% and \TA{Stefan Zlatinov}.
% Their respective contributions can be identified from the contributor statistics on
% \href{https://github.com/reutenauer/polyglossia/graphs/contributors}{GitHub}.
%
@@ -2701,7 +3476,7 @@ to track the issues and follow progress.
% \subsection{polyglossia.sty}
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{polyglossia}[2020/12/08 v1.51
+\ProvidesPackage{polyglossia}[2021/03/16 v1.52
Modern multilingual typesetting with XeLaTeX and LuaLaTeX]
\RequirePackage{etoolbox}
\RequirePackage{makecmds}
@@ -4050,16 +4825,19 @@ to track the issues and follow progress.
\DeclareRobustCommand\xpg@defaultfont@rm{%
\tl_if_empty:NF{\g__fontspec_nfss_enc_tl}{\fontencoding{\g__fontspec_nfss_enc_tl}}%
\fontfamily\rmdefault%
+ \ifdefined\UseHook\UseHook{rmfamily}\fi%
\selectfont%
}
\DeclareRobustCommand\xpg@defaultfont@sf{%
\tl_if_empty:NF{\g__fontspec_nfss_enc_tl}{\fontencoding{\g__fontspec_nfss_enc_tl}}%
\fontfamily\sfdefault%
+ \ifdefined\UseHook\UseHook{sffamily}\fi%
\selectfont%
}
\DeclareRobustCommand\xpg@defaultfont@tt{%
\tl_if_empty:NF{\g__fontspec_nfss_enc_tl}{\fontencoding{\g__fontspec_nfss_enc_tl}}%
\fontfamily\ttdefault%
+ \ifdefined\UseHook\UseHook{ttfamily}\fi%
\selectfont%
}
@@ -4129,8 +4907,10 @@ to track the issues and follow progress.
\DeclareRobustCommand\sffamily{\csuse{#1@font@sf}}%
\DeclareRobustCommand\ttfamily{\csuse{#1@font@tt}}%
\gdef\normalfont{\protect\xpg@select@fontfamily{#1}%
- \fontseries{\seriesdefault}\selectfont%
- \fontshape{\shapedefault}\selectfont}%
+ \fontseries{\seriesdefault}\selectfont%
+ \fontshape{\shapedefault}
+ \ifdefined\UseHook\UseHook{normalfont}\fi%
+ \selectfont}%
\gdef\reset@font{\protect\normalfont}%
}
@@ -10385,7 +11165,8 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%\def\headtoname{}%
\def\proofname{Proof}%
\def\glossaryname{Glossary}%
- }
+}
+
\def\datebulgarian{%
\def\today{\number\day~\ifcase\month\or
януари\or
@@ -12903,8 +13684,8 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\partname{Partie}%
\fi%
\def\pagename{page}%
- \def\seename{\emph{voir}}%
- \def\alsoname{\emph{voir aussi}}%
+ \def\seename{voir}%
+ \def\alsoname{voir aussi}%
\def\enclname{P.~J. }%
\def\ccname{Copie à }%
\def\headtoname{}%
@@ -12932,14 +13713,23 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% Change part heading
% With titlesec
\ifcsdef{titleformat}{%
- \ifcsdef{@part}{%
- \let\xpg@save@part@format\@part%
- \patchcmd{\@part}%
+ \ifcsdef{H@old@part}{% Hyperref
+ \let\xpg@save@part@format\H@old@part%
+ \patchcmd{\H@old@part}%
{\partname\nobreakspace\thepart}%
{\xpg@french@part\nobreakspace\partname}%
{}%
{\xpg@warning{Failed to patch part for French}}%
- }{}%
+ }{% not hyperref
+ \ifcsdef{@part}{%
+ \let\xpg@save@part@format\@part%
+ \patchcmd{\@part}%
+ {\partname\nobreakspace\thepart}%
+ {\xpg@french@part\nobreakspace\partname}%
+ {}%
+ {\xpg@warning{Failed to patch part for French}}%
+ }{}%
+ }%
}{% (not \ifdefined\titleformat)
% With KOMA
\ifcsdef{sectionformat}{%
@@ -12950,23 +13740,40 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
}{% (not \ifdefined\sectionformat)
% With memoir
\ifcsdef{@memptsize}{%
- \ifcsdef{@part}{%
- \let\xpg@save@part@format\@part%
- \patchcmd{\@part}{\printpartname \partnamenum \printpartnum}%
+ \ifcsdef{H@old@part}{% Hyperref
+ \let\xpg@save@part@format\H@old@part%
+ \patchcmd{\H@old@part}{\printpartname \partnamenum \printpartnum}%
{\partnamefont\xpg@french@part\partnamenum\printpartname}%
{}%
{\xpg@warning{Failed to patch part for French}}%
- }{}%
+ }{% not hyperref
+ \ifcsdef{@part}{%
+ \let\xpg@save@part@format\@part%
+ \patchcmd{\@part}{\printpartname \partnamenum \printpartnum}%
+ {\partnamefont\xpg@french@part\partnamenum\printpartname}%
+ {}%
+ {\xpg@warning{Failed to patch part for French}}%
+ }{}%
+ }%
}{% (not \ifdefined\@memptsize)
% With standard classes
- \ifcsdef{@part}{%
- \let\xpg@save@part@format\@part%
- \patchcmd{\@part}%
+ \ifcsdef{H@old@part}{% Hyperref
+ \let\xpg@save@part@format\H@old@part%
+ \patchcmd{\H@old@part}%
{\partname\nobreakspace\thepart}%
{\xpg@french@part\nobreakspace\partname}%
{}%
{\xpg@warning{Failed to patch part for French}}%
- }{}% (end \ifdefined\@part)
+ }{% not hyperref
+ \ifcsdef{@part}{%
+ \let\xpg@save@part@format\@part%
+ \patchcmd{\@part}%
+ {\partname\nobreakspace\thepart}%
+ {\xpg@french@part\nobreakspace\partname}%
+ {}%
+ {\xpg@warning{Failed to patch part for French}}%
+ }{}% (end \ifdefined \H@old@part)
+ }% (end \ifdefined\@part)
}% (end \ifdefined\@memptsize)
}% (end \ifdefined\sectionformat)
}% (end \ifdefined\titleformat)
@@ -12977,7 +13784,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\ifcsdef{titleformat}{%
% With titlesec
\ifcsdef{xpg@save@part@format}{%
- \let\@part\xpg@save@part@format
+ \ifcsdef{H@old@part}{\let\@H@old@part\xpg@save@part@format}{\let\@part\xpg@save@part@format}
}{}%
}{% (not \ifdefined\titleformat)
\ifcsdef{sectionformat}{%
@@ -12988,7 +13795,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
}{%
% With memoir and standard classes
\ifcsdef{xpg@save@part@format}{%
- \let\@part\xpg@save@part@format
+ \ifcsdef{H@old@part}{\let\@H@old@part\xpg@save@part@format}{\let\@part\xpg@save@part@format}
}{}%
}% (end \ifdefined\sectionformat)
}% (end \ifdefined\titleformat)
@@ -20435,13 +21242,16 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% Force punctuation after heading number
\define@boolkey{russian}[russian@]{forceheadingpunctuation}[true]{}
+% Define some math functions
+\define@boolkey{russian}[russian@]{mathfunctions}[true]{}
% Register default options
\xpg@initialize@gloss@options{russian}{babelshorthands=false,
spelling=modern,
numerals=arabic,
indentfirst=true,
- forceheadingpunctuation=true}
+ forceheadingpunctuation=true,
+ mathfunctions=true}
\ifsystem@babelshorthands
@@ -20717,24 +21527,27 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
}
%%% These lines taken from russianb.ldf, part of babel package.
-% make it optional?
-\def\sh {\mathop{\operator@font sh}\nolimits}
-\def\ch {\mathop{\operator@font ch}\nolimits}
-\def\tg {\mathop{\operator@font tg}\nolimits}
-\def\arctg {\mathop{\operator@font arctg}\nolimits}
-\def\arcctg{\mathop{\operator@font arcctg}\nolimits}
-\def\th {\mathop{\operator@font th}\nolimits}
-\def\ctg {\mathop{\operator@font ctg}\nolimits}
-\def\cth {\mathop{\operator@font cth}\nolimits}
-\def\cosec {\mathop{\operator@font cosec}\nolimits}
-\def\Prob {\mathop{\kern\z@\mathsf{P}}\nolimits}
-\def\Variance{\mathop{\kern\z@\mathsf{D}}\nolimits}
-\def\nod {\mathop{\mathrm{н.о.д.}}\nolimits}
-\def\nok {\mathop{\mathrm{н.о.к.}}\nolimits}
-\def\NOD {\mathop{\mathrm{НОД}}\nolimits}
-\def\NOK {\mathop{\mathrm{НОК}}\nolimits}
-\def\Proj {\mathop{\mathrm{Пр}}\nolimits}
-%\DeclareRobustCommand{\No}{№}
+\AtBeginDocument{%
+\ifrussian@mathfunctions%
+ \def\sh {\mathop{\operator@font sh}\nolimits}
+ \def\ch {\mathop{\operator@font ch}\nolimits}
+ \def\tg {\mathop{\operator@font tg}\nolimits}
+ \def\arctg {\mathop{\operator@font arctg}\nolimits}
+ \def\arcctg{\mathop{\operator@font arcctg}\nolimits}
+ \def\th {\mathop{\operator@font th}\nolimits}
+ \def\ctg {\mathop{\operator@font ctg}\nolimits}
+ \def\cth {\mathop{\operator@font cth}\nolimits}
+ \def\cosec {\mathop{\operator@font cosec}\nolimits}
+ \def\Prob {\mathop{\kern\z@\mathsf{P}}\nolimits}
+ \def\Variance{\mathop{\kern\z@\mathsf{D}}\nolimits}
+ \def\nod {\mathop{\mathrm{н.о.д.}}\nolimits}
+ \def\nok {\mathop{\mathrm{н.о.к.}}\nolimits}
+ \def\NOD {\mathop{\mathrm{НОД}}\nolimits}
+ \def\NOK {\mathop{\mathrm{НОК}}\nolimits}
+ \def\Proj {\mathop{\mathrm{Пр}}\nolimits}
+ %\DeclareRobustCommand{\No}{№}
+\fi
+}
% \end{macrocode}
% \iffalse
@@ -22968,6 +23781,20 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% \end{macrocode}
% \iffalse
%</gloss-turkmen.ldf>
+%<*gloss-ug.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ug.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ug.ldf}[polyglossia: module for ug (Uyghur)]
+% BCP 47 tag for Uyghur
+
+\xpg@load@master@language{uyghur}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ug.ldf>
%<*gloss-ukrainian.ldf>
% \fi
% \clearpage
@@ -23020,8 +23847,11 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
}{\xpg@warning{Unknown Ukrainian numerals value `#1'}}
+% Define some math functions
+\define@boolkey{ukrainian}[ukrainian@]{mathfunctions}[true]{}
+
% Register default options
-\xpg@initialize@gloss@options{ukrainian}{numerals=arabic}
+\xpg@initialize@gloss@options{ukrainian}{numerals=arabic,mathfunctions=true}
\define@boolkey{ukrainian}[ukrainian@]{babelshorthands}[true]{}
@@ -23229,26 +24059,29 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
}
%%% stuff from Babel
-% make it optional?
-\def\sh{\mathop{\operator@font sh}\nolimits}
-\def\ch{\mathop{\operator@font ch}\nolimits}
-\def\tg{\mathop{\operator@font tg}\nolimits}
-\def\arctg{\mathop{\operator@font arctg}\nolimits}
-\def\arcctg{\mathop{\operator@font arcctg}\nolimits}
-\def\ctg{\mathop{\operator@font ctg}\nolimits}
-\def\cth{\mathop{\operator@font cth}\nolimits}
-\def\cosec{\mathop{\operator@font cosec}\nolimits}
-\def\Prob{\mathop{\kern\z@\mathsf{P}}\nolimits}
-\def\Variance{\mathop{\kern\z@\mathsf{D}}\nolimits}
-\def\nsd{\mathop{\mathrm{н.с.д.}}\nolimits}
-\def\nsk{\mathop{\mathrm{н.с.к.}}\nolimits}
-\def\NSD{\mathop{\mathrm{НСД}}\nolimits}
-\def\NSK{\mathop{\mathrm{НСК}}\nolimits}
-\def\nod{\mathop{\mathrm{н.о.д.}}\nolimits}
-\def\nok{\mathop{\mathrm{н.о.к.}}\nolimits}
-\def\NOD{\mathop{\mathrm{НОД}}\nolimits}
-\def\NOK{\mathop{\mathrm{НОК}}\nolimits}
-\def\Proj{\mathop{\mathrm{пр}}\nolimits}
+\AtBeginDocument{%
+\ifukrainian@mathfunctions%
+ \def\sh{\mathop{\operator@font sh}\nolimits}
+ \def\ch{\mathop{\operator@font ch}\nolimits}
+ \def\tg{\mathop{\operator@font tg}\nolimits}
+ \def\arctg{\mathop{\operator@font arctg}\nolimits}
+ \def\arcctg{\mathop{\operator@font arcctg}\nolimits}
+ \def\ctg{\mathop{\operator@font ctg}\nolimits}
+ \def\cth{\mathop{\operator@font cth}\nolimits}
+ \def\cosec{\mathop{\operator@font cosec}\nolimits}
+ \def\Prob{\mathop{\kern\z@\mathsf{P}}\nolimits}
+ \def\Variance{\mathop{\kern\z@\mathsf{D}}\nolimits}
+ \def\nsd{\mathop{\mathrm{н.с.д.}}\nolimits}
+ \def\nsk{\mathop{\mathrm{н.с.к.}}\nolimits}
+ \def\NSD{\mathop{\mathrm{НСД}}\nolimits}
+ \def\NSK{\mathop{\mathrm{НСК}}\nolimits}
+ \def\nod{\mathop{\mathrm{н.о.д.}}\nolimits}
+ \def\nok{\mathop{\mathrm{н.о.к.}}\nolimits}
+ \def\NOD{\mathop{\mathrm{НОД}}\nolimits}
+ \def\NOK{\mathop{\mathrm{НОК}}\nolimits}
+ \def\Proj{\mathop{\mathrm{пр}}\nolimits}
+\fi
+}
% \end{macrocode}
% \iffalse
@@ -23438,6 +24271,66 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% \end{macrocode}
% \iffalse
%</gloss-usorbian.ldf>
+%<*gloss-uyghur.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-uyghur.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-uyghur.ldf}[polyglossia: module for Uyghur]
+%% Translations provided by Osman Tursun (Github Account: neouyghur)
+
+\PolyglossiaSetup{uyghur}{
+ bcp47=ug,
+ script=Arabic,
+ direction=RL,
+ scripttag=arab,
+ langtag=UYG,
+ hyphennames={nohyphenation}،
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{uyghur}{ug}
+
+\def\captionsuyghur{%
+ \def\refname{\@ensure@RTL{پايدىلانما}}%
+ \def\abstractname{\@ensure@RTL{ئابستراكت}}%
+ \def\bibname{\@ensure@RTL{پايدىلانما}}%
+ \def\prefacename{\@ensure@RTL{كىرىش سۆز}}%
+ \def\chaptername{\@ensure@RTL{باب}}%
+ \def\appendixname{\@ensure@RTL{قوشۇمچە}}%
+ \def\contentsname{\@ensure@RTL{مۇندەرىجە}}%
+ \def\listfigurename{\@ensure@RTL{رەسىملەر}}%
+ \def\listtablename{\@ensure@RTL{جەدۋەللەر}}%
+ \def\indexname{\@ensure@RTL{ئىندېكىس}}%
+ \def\figurename{\@ensure@RTL{رەسىم}}%
+ \def\tablename{\@ensure@RTL{جەدۋەل}}%
+ %\def\thepart{}%
+ \def\partname{\@ensure@RTL{قىسىم}}%
+ \def\pagename{\@ensure@RTL{بەت}}%
+ \def\seename{\@ensure@RTL{قاراڭ}}%
+ \def\alsoname{\@ensure@RTL{ئايرىم قاراڭ}}%
+ \def\enclname{\@ensure@RTL{قوشۇمچە ھۆججەت}}%
+ \def\ccname{\@ensure@RTL{باشقا تاپشۇرۇۋالغۇچى}}%
+ \def\headtoname{\@ensure@RTL{تاپشۇرۇۋالغۇچى}}%
+ \def\proofname{\@ensure@RTL{ئىسپات}}%
+ \def\glossaryname{\@ensure@RTL{لۇغەت}}%
+ %\def\sectionname{\@ensure@RTL{}}%
+ \def\subjectname{\@ensure@RTL{تېما}}%
+}
+
+\def\dateuyghur{%
+ \def\today{\number\day~\ifcase\month\or
+ يانۋار\or فېۋرال\or مارت\or ئاپرېل\or ماي\or ئىيۇن\or
+ ئىيۇل\or ئاۋغۇست\or سېنتەبىر\or ئۆكتەبىر\or نويابىر\or
+ دېكابىر\fi
+ \space\number\year}%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-uyghur.ldf>
%<*gloss-vietnamese.ldf>
% \fi
% \clearpage
@@ -25150,640 +26043,6 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% \Finale
%
% \iffalse
-%<*Changelog>
-1.51 (08-12-2020)
-
-New features:
- * New option "frenchpart" for French (#458).
- * New option "splithyphens" for Croatian (#454).
-
-Bug fixes:
-
- * Use new LaTeX core hooks rather than filehook package. This fixes
- a recent breakage of filehook with other external packages (#453).
- * Remove very old code that pretends polyglossia is babel (#455).
- * Fix spelling of Albanian contentsname (#456).
- * Fix part heading modification in French (#458).
- * Fix extra space in Hebrew (#459).
- * Register main polyglossia language earlier (#461).
- * Allow for hyphenations in words following opening guillemet in French
- with XeTeX (#462).
-
-
-1.50a (15-10-2020)
-
-Bug fixes:
-
- * Assure \autodot is defined with \KOMAScript in Russian.
-
-1.50 (09-10-2020)
-
-New features:
-
- * Polyglossia now uses the Harfbuzz renderer by default with LuaTeX
- output. This brings LuaTeX on par with XeTeX for all scripts (#337).
- The renderer can be changed via the new global luatexrenderer option.
- * The (previously inadvertently working) hyphenrules environment that ceased
- to work after a recent babel update is back and now officially supported.
- The environment now also supports language options and aliases (#427).
- * New command \setlanghyphenmins to adapt hyphenation thresholds of languages
- and varieties.
- * New command \abjadalph for Arabic with corresponding option (#431).
- * Replace consecutive glues around punctuation by the correct amount of space
- with LuaLaTeX for French, ecclesiastic Latin, and Sanskrit (#437).
-
-Bug fixes:
-
- * Remove warning about missing Brazil patterns (#404).
- * Fix incompatibility with recent babel release (#408).
- * Fixed some spellings in Marathi (#409).
- * Fix spacing of geminating dot in Catalan (#410).
- * Fix incompatibility of Marathi with Beamer.
- * Correct \partname in Hindi (#416).
- * Updates and improvements to Kurdish (#418).
- * Only activate shorthand character if babelshorthands is true (#421).
- * Fix whitespace issue in Czech and Slovak with vlna=true (#423).
- * Fix whitespace issue in Danish (#424).
- * Fix catcode conflicts that might occur in language definition files
- f. ex. when loaded from a LaTeX3 class (#67, #425).
- * Robustify font family switches (#428).
- * Fix whitespace issue in Russian indentfirst option (#433).
- * In Russian, indentfirst is now again default (#434).
- * Fix LaTeX error with arabic numbering in Ukrainian (#440).
- * Fix directionality after Hebrew decimal numbers (#441).
- * Fix babelname of Latin Serbian (#442).
- * Fix recording of secondary languages in \xpg@bloaded and \xpg@bcp@loaded
- lists (#443).
- * Simplify and robustify section heading modification in Russian
- and introduce option forceheadingpunctuation (#444).
- * Fix Cyrillic dash (via babelshorthand "---) when TeX ligatures
- are disabled (#445)
- * Fix problem with large character indices in Lua module for punctuation
- spacing
-
-Interface and defaults changes:
-
- * Polyglossia now uses the Harfbuzz renderer by default with LuaTeX
- output. See new features section.
-
-Build fixes:
-
- * Fix a bug in the dtx build script which was the reason for an utterly
- incomplete polyglossia.dtx file (#420).
-
-Documentation improvements:
- * Document how to change \lefthyphenmin and \righthyphenmin for a language
- (#435).
-
-
-1.49 (08-04-2020)
-
-New features:
-
- * Add hook \polyglossia@language@switched to the external package interface (#398).
- * Real fix for #400, that wasn’t properly taken care of in 1.48.
-
-Bug fixes:
-
- * Fix compilation error with some swapstring options in Hungarian (#373).
- * Fix whitespace problem in Greek language.
-
-Interface and defaults changes:
-
- * Changed Finnish caption for "Table of Contents" to "Sisällys" (#403).
-
-
-1.48 (25-03-2020)
-
-No new features
-
-Bug fixes:
- * Fix use of Hebrew with LuaLaTeX (#389).
- * Do not overwrite footnote redefinitions of other packages
- with Latin and French (#391)
- * Fix Serbian cyrillic numerals code (#392).
- * Fix [no]localmarks option, whose logic was swapped (part of #395).
- * Protect localmarks function against uppercased language names (part of #395).
- * Fix buggy redefinition of \@markright with option localmarks (#396).
- * Fix incompatibility between Latin and unicode-math (#394).
- * Make (undocumented) \defineshorthand command (imported from babel) work.
- * Fix usage of localmarks option without value.
- * Emergency fixes for bugs caused by updates in Babel’s switch.def (#399 and #400).
-
-Interface and defaults changes:
- * Use private macros in keyval choice keys (#390).
-
-1.47 (29-01-2020)
-
-New features:
- * IETF BCP-47 compliant language tags can now be used for loading and switching
- languages alternatively to language names (#226).
- * New commands \languageid{<type>} and \mainlanguageid{<type>}.
- * New test \iflanguageidloaded.
- * New list \xpg@bcp@loaded.
- * New environment {lang}{<lang>} (equivalent to {<lang>}, but also available with
- \setlanguagealias* which does not define dedicated alias environments).
- * New gloss option totalhyphenmin (corresponds to LuaTeX's \hyphenationmin) (#111).
- * New test \iflanguageoption{<lang>}{<key>}{<val>} (#364).
- * Restore simple alphabetic numbering for \asbuk and \Asbuk in Belarusian, Mongolian,
- Russian, Serbian, and Ukrainian (#377).
- * New command \AsbukTrad and \asbukTrad for Belarusian, Mongolian, Russian, Serbian,
- and Ukrainian which uses traditional alphanumerical numbering.
- * New numerals option "cyrillic-trad" and "cyrillic-alph" to differentiate simple
- alphabetic and traditional alpnanumerical Cyrillic numbering.
- * \selectbackgroundlanguage and \resetdefaultlanguage now also support language
- aliases.
- * New macro \charifavailable{<char code>}{<substitution>}.
- * Add French language variant "swiss".
- * Implement babelshorthands for Croatian.
- * Implement \localnumeral for Japanese.
-
-Bug fixes:
- * Fix font family issue in headers (#355).
- * Fix whitespace issues in \text<lang> (#356).
- * Fix option-less \babelname in multi-variant languages (#357).
- * Fix some spacing inconsistencies with French, Latin, and Sanskrit (#358).
- * Fix issues with babelshorthands and graphics package (#368).
- * Fix some captions and improve numbering in Marathi (#370).
- * Fix Hungarian swapstrings feature (#373).
- * Fix lua punctuation code problem (#374).
- * Fix Bengali changecounternumbering option (#381).
- * Fix whitespace issue in Japanese (#387).
- * Fix \text<lang> command with multiple paragraphs.
- * Actually implement documented german spelling variant '1996' (= 'new').
- * Fix Slovenian localalph option.
- * Fix Czech and Slovak splithyphens with typewriter fonts.
- * farsical.sty: fix spacing issue with some month names.
- * Fix directionalty of numbers in Hebrew with XeTeX.
- * Improve interoperatability with biblatex (some language variants did not work yet).
-
-Interface and defaults changes:
- * Some boolean options had 'false' value by default, which meant if you passed
- them without value, the logic was reversed. This has been changed, leading to
- change of behavior should you have used one of these options without value (#363).
- Concerned are the following options:
- - babelshorthands in language belarusian, mongolian, ukrainian, and russian
- ('babelshorthands' now equals 'babelshorthand=true', no longer 'babelshorthands=false')
- - localalph in language slovenian ('localalph' now equals 'localalph=true')
- - latesthyphen in language german ('latesthyphen' now equals 'latesthyphen=true')
- - fullyear in package hebrewcal ('fullyear' now equals 'fullyear=true')
- * The command \setlanguagealias* (introduced in v1.46) does no longer define
- dedicated alias environments.
- * The babelnames for latin variants have been corrected to classiclatin, ecclesiasticlatin
- and medievallatin. This is how the hyphenation patterns and babel \extras are named, even
- though the variants can currently be selected in babel only via appended "dot modifier".
- * In accordance with the respective l3kernel change, \str_lower_case:n has been renamed to
- \str_lowercase:n where used in polyglossia.sty. Thus polyglossia 1.47 requires l3kernel
- 2020-01-12 at least.
-
-1.46 (15-11-2019)
-
-New features:
- * Add option "indentfirst" to Russian (#78).
- * Add options to set and customize French-style itemize item labels to French (#89).
- * Polyglossia now understands all babel language names in \setdefaultlanguage,
- \setotherlanguage and the language switching commands (#112, #132).
- * Add optional localized math operators to Spanish (#123).
- * Swap section headings in Hungarian (#344). New option "swapstrings" provides control
- over this.
- * Introduce macro \setlanguagealias and \setlanguagealias*.
- * Introduce language switching command \textlang{lang}{...} (equivalent to \text<lang>,
- but also available with \setlanguagealias* which does not define \text<alias>).
- * Add support for Afrikaans.
- * Add support for Belarusian.
- * Add support for Bosnian.
- * Add support for Georgian.
- * Add Spanish variant "mexican".
- * Add babelshorthands as well as options "splithyphens" and "vlna" to Slovak.
- * Add Latin language variant "ecclesiastic".
- * Add Latin language options "capitalizemonth", "ecclesiasticfootnotes", "hyphenation",
- "prosodicshorthands", and "usej".
- * Add Latin shorthands for "«", "»", "æ", "Æ", "œ", and "Œ".
- * Add French language option "thincolonspace".
-
-Bug fixes:
- * Fix problems with fragile font settings (#24).
- * Fix clash of French punctuation spacing with the soul package (#52).
- * Re-enable the possibility to pass a macro as main argumente to \setmainlanguage and
- \setotherlanguage (#331).
- * Fix detection of default \languagevariant (#332).
- * Fix LaTeX error with undefined hyphenation pattern (#346).
- * Fix some babel shorthand issues by updating the shorthand code from recent babel.
- * Fix some problems with French and Latin auto-spacing (#345, #352).
- * Fix an expl3 declaration (#348).
-
-Interface and defaults changes:
- * Per TeXLive request, the sub-package cyrillicnumbers.sty has been renamed to
- xpg-cyrillicnumbers.sty.
- * In Russian, all paragraphs are now indented by default, as common in Russian typography.
- The behavior can be opted out by indentfirst=false.
- * In Czech, splithyphens and lvna are enabled by default. Also, the option does now work
- as well with LuaTeX.
- * Changed option name "fraktur" to "blackletter" in German (the former is still available
- as an alias).
- * In French, high punctuation characters and guillemets are spaced by half an interword
- space now instead of a \thinspace (cf. #345).
-
-1.45 (27-10-2019)
-
-New features:
- * Introduce a framework for external packages to access language variants. This fixes,
- among other things, long-standing problems in the interaction of biblatex and polyglossia.
- * Add new macros \languagevariant, \mainlanguagevariant, \babelname and \mainbabelname
- for package authors to access language information.
- * Add new test \iflanguageloaded{<language>}{<true>}{<false>}, where <language>
- can be a \polyglossia or babel language name.
- * Add new macros \localnumeral, \localnumeral*, \Localnumeral and
- \Localnumeral* that convert Arabic digitals to the local number scheme.
- * Add new macro \pghyphenation to add language-specific hyphenation exceptions (#18).
- * Add support form (Khalkha & Cyrillic) Mongolian in line with babel-mongolian (#23).
- * Add option splithyphens and vlna to Czech (XeTeX only; for LuaTeX, use the package
- luavlna to get these features) (#32).
- * Add support for Kurdish, both Kurmanji and Sorani (#277).
- * Implement proper Cyrillic (alphanumeric) numbering (#285).
- * Add new language friulian.
- This deprecates friulan (which is still supported for backwards compatibility).
- * Add new language malay with variants indonesian and malaysian.
- This deprecates bahasai and bahasam (which are still supported for
- backwards compatibility).
- * Add new language gaelic with variants irish and scottish.
- This deprecates irish and scottish as own polyglossia languages (which
- are still supported for backwards compatibility).
- * Add new language hungarian.
- This deprecates magyar (which is still supported for backwards compatibility).
- * Add new language sorbian with variants lower and upper.
- This deprecates lsorbian and usorbian (which are still supported for
- backwards compatibility).
- * Add new language portuguese with variants portuguese and brazilian.
- This deprecates brazil and portuges (which are still supported for
- backwards compatibility).
- * Add new language norwegian with variants nynorsk and bokmal.
- This deprecates nynorsk and norsk (which are still supported for
- backwards compatibility).
- * Add new language persian.
- This deprecates farsi (which is still supported for backwards compatibility).
- * Add new language sami. Currently only Northern Sami is supported.
- This deprecates samin (which is still supported for backwards compatibility).
- * gloss-serbian: add numerals=cyrillic option. Add \asbuk and \Asbuk (#285).
- * Implement basic support for (French) canadien and (English) canadian (#22)
- * Improve support for Armenian (#79): Add captions, Eastern month names
- (accessible via variant=eastern) and Armenian alphabetic numbering
- (via numerals=armenian and \armenicnumeral).
- * Add french option autospacing and commands \AutoSpacing, \NoAutoSpacing
- This allows to switch off autospacing globally or locally (#113)
- * Fixup \normalfont (#203)
- * Fix directionality issues in mixed RTL/LTR paragraphs (#204)
- * Implement babelshorthands for Finnish (#212) and Czech.
- * Implement access to current language via Lua (#243).
- * Introduce french option option autospacetypewriter
- alias OriginalTypewriter
- * Support \aemph with lualatex
- * Rename automaticspacesaroundguillemets to autospaceguillemets
- The old option is kept for backwards compatibility.
-
-Bug fixes:
- * Fix equation number in arabic and farsi (#7).
- * Simplify and document Hebrew marcheshvan option (#16).
- * Fix hyphenation of Greek with LuaTeX (#55).
- * Fix N'ko date format (#63).
- * Disable the extras of a language when a nested language starts (#66, #169).
- * Properly implement bengali numbers (#69, #184).
- * Fix conflicts with other packages caused by premature shorthand activation
- in preamble (#81, #200).
- * Fix kerning in math with French (#92).
- * Fix expansion issue in Hebrew (#93).
- * Fix numbering expansion issue in Greek (#110).
- * Postpone \disablehyphenation in preamble until after setting of
- document language (#125).
- * Postpone the assignment of defaultfamily to BeginDocument,
- thus do not overwrite \familydefault redefinitions in the preamble (#127).
- * Reset number settings when switching language (#133).
- * hebrew: Properly store \MakeUppercase for later restoration (#152).
- * Fix whitespace issue in \datewelsh (#158).
- * When switching language, set the language/script specific font families (#164).
- * Correct some Bengali captions (#165).
- * Fix documentation of Serbian (#168).
- * Reset ucl codes in latin only if the respective variant is used (#172).
- * Fix \disablehyphenation with LuaTeX (#187).
- * Fix typos in Hindi captions (#202).
- * Pass language options to the aux files (#205).
- * Rewrite and fix English variant handling (#208).
- * Define magyar caption formats in \blockextras and undef them in \noextras (#209).
- * Ensure proper direction with arabic digits in Arabic and Farsi (#213).
- * Fix \linespread with Korean (#218).
- * Define russian caption before key allocation (#219).
- * Register current language in polyglossia lua module after selection (#234).
- * Fix babel language switching commands (#239).
- \foreignlanguage and the starred otherlanguage* environment are not
- supposed to change dates.
- * Fix French spacing leaking beyond French (#270).
- * Redefine fontfamilies for French only if language is loaded (#270).
- * gloss-russian:
- - check whether command exist before redefining (#280).
- - Fix some whitespace issues.
- * Fix and simplify frenchfootnote definition (#294).
- * Fix footnote numbering in Farsi.
- * Fix latin footnotes in Arabic documents.
- * Set the correct main direction with luabidi.
- * Fix autospaceguillemets option in French.
- * Fix grouping in gloss-danish.ldf.
- * Properly store \MakeUppercase and \@arabic for later restoration.
-
-Documentation:
- * Add documentation about footnotes in RTL context
- * Document tibetan numerals option (#109)
- * Improve frenchfootnote documentation.
- * Mention Japanese support in the docs.
-
-1.44 (04-04-2019)
- * Correction to Russian language file, by Maksim Zholudev (commit d2f383e)
- * Added Macedonian language file, by Stefan Zlatinov (commit cd379e1)
-
-05-03-2019
- * Correction to Hindi language file, by Zdenĕk Wagner
-
-1.42.5 (13-04-2017)
- * Many changes to the French language file, by Maïeul Rouquette
-
-1.42.4 (February, March 2016)
- * Remedial actions for the Babel changes
-
-09-02-2016
- * Fixed side effect of pull request #122 (see commit d2a34ff)
- * Added automatic Josa selection, variant, and captions options to Korean, by Dohyun Kim (pull request #128)
-
-08-02-2016
- * Updated gloss-occitan from CTAN
-
-18-01-2016
- * Fixed issue #124 (minor typo in polyglossia-frpt.lua)
-
-03-12-2015
- * Merged pull request #117 for more French guillemet spacing
- * Merged pull request #121 to add \bbl@loaded; fixes issue #120
- * Merged pull request #122 that build on #121
-
-08-11-2015
- * Merged pull request #116 for French (spacing around guillemets)
-
-22-10-2015
- * Fixed issue #115 (spurious spaces in Arabic)
-
-19-08-2015
- * Fixed issue #107 for Marathi (labels and month names)
-
-1.42.0 (06-08-2015)
- * Add Bengali digits package, and option to reset all numbering functions
-
-05-08-2015
- * Add “long” option for Welsh date
- * Add local alphabet in Slovenian, for enumerations and such
-
-04-08-2015
- * Fix long-standing bug with Welsh: date should use ordinals
-
-03-08-2015
- * Fix for Latin with LuaTeX: all variants had same problems as Classic
-
-02-08-2015
- * Fixed error with British variant of English and LuaTeX (issue #86)
-
-1.41.0 (16-07-2015)
- * Added support for Khmer, by Say Ol (private email)
-
-1.40.1 (14-07-2015)
- * Bugfix for Korean, by Kim Dohyun (pull request #103)
-
-1.40.0 (07-07-2015)
- * gloss-korean.ldf contributed by Kim Dohyun (pull request #102)
-
-1.33.7 (04-07-2015)
- * Release to CTAN, no code change
-
-03-07-2015
- * Fixed extraneous space in code for Swiss German (pull request #101)
- * Fixed a typo in Ukrainian alphabet, for \Asbuk (pull request #99)
-
-24-06-2015
- * Fix for Classic Latin: load patterns for LuaTeX
-
-23-05-2015
- * Made \rmfamily, \sffamily and \ttfamily robust again
-
-11-05-2015
- * Merged fix for Hebrew date format, by Guy Rutenberg (pull request #94)
- * Merged fix for spurious space, by Caleb McKennan (pull request #91)
- * Merged pull request #84 by Élie Roux for Tibetan
-
-10-05-2015
- * Added support for Swiss German (pull request #75)
- * Added commands \Asbuk and \asbuk for Ukrainian (pull request #76), similar to Russian
- * Documented changes to Latin from last year.
-
-09-05-2015
- * Be friendlier to right-to-left languages with LuaTeX
-
-04-06-2014
- * Enhanced Latin support by Claudio Beccari
-
-1.33.5 (21-05-2014)
- * Option to disable hyphenation entirely, by Élie Roux
- * Fix spurious spaces in gloss-russian.ldf, by Oleg Domanov
- * Support for the Austrian variant of German, by Jürgen Spitzmüller
- * Changes to the Croatian translations, by Ivan Kokan
- * Correction to the Lithuanian translations, by Ignas Anikevičius
-
-1.33.4 (27-06-2013)
- * Emergency release for a bug introduced in babelsh.def
-
-1.33.3 (28-05-2013)
- * Changed formatting of some error messages (emergency fixes for TeX Live 2013)
-
-1.33.2 (26-05-2013)
- * Added \disablehyphenation and \enablehyphenation, contributed by
- Élie Roux.
- * Fixed bug related to package inclusion. Polyglossia would break if
- we loaded breqn.sty, and then called \setmainlanguage{english}, this
- is no longer the case.
- * Removed spurious space introduced by \captionswedish.
-
-1.33.1 (23-05-2013)
- * Editorial changes to the documentation
- * Hunted and documented bugs
-
-1.33.0 (20-05-2013)
- * Added support for N’Ko.
- * Bugfixes for LuaTeX
- * More work in progress on Bidi in LuaTeX.
-
-1.32.0 (15-05-2013)
- Transitional version to support right-to-left languages with LuaTeX.
-
-1.31 (10-05-2013) / 1.3 (11-05-2013)
- * Several bugfixes.
- * Sync with Babel 3.9.
- * Consolidated support for LuaTeX for all languages but the ones using
- South and South-East Asian scripts, and languages written from right
- to left. Many thanks to Élie Roux for his help.
- * Added support for Tibetan, contributed by Élie Roux (end of lines are experimental).
-
-1.30MM (06-08-2012)
- * Added support for LuaTeX. Many languages don’t work yet. Please be
- patient.
-
-1.2.0e (28-04-2012)
- * Fixed a number of outstanding and not very interesting bugs.
- * Added gloss files for Romansh and Friulan, contributed by Claudio
- Beccari.
-
-1.2.0d (12-01-2012)
- * Removed \makeatletter and \makeother from gloss files entirely.
-
-1.2.0cc (12-10-2011) [First update by Arthur Reutenauer]
- * Update to gloss-italian.ldf by Claudio Beccari, incorporating changes
- by Enrico Gregorio.
- * Conclude every gloss file with \makeatother to match the initial
- \makeatletter. (Not necessary from a technical point of vue, because of one of the changes by Enrico reported below, but I like it better that way :-)
- * Conclude polyglossia.sty with \ExplSyntaxOff to match the initial
- \ExplSyntaxOn.
- * Added gloss file for Kannada, contributed by Aravinda VK and others.
- * Corrections to the gloss-dutch.ldf thanks to Wouter Bolsterlee.
- * Several patches by Enrico Gregorio, fixing long-standing bugs.
- From the git log:
- - Deleted setup for right-to-left writing direction, see http://tug.org/pipermail/xetex/2011-April/020319.html
- - Changed three appearances of \newcommand to \newrobustcmd, as the commands needs to be protected. Bug reported by "kamensky".
- - Corrected \datepolish as suggested by Piotr Kempa
- - Changed \lccode" into \lccode\string", because it might come into action at wrong times when " is active
- - Changed definition of key xpg@setup, as \@tmpfirst and \@tmpsecond were not expanded, causing dependence of \lefthyphenmin and \righthyphenmin to the last loaded language. Raised by Vadim Rodionov on the XeTeX mailing list.
- - Deleted \bgroup and \egroup tokens from the definition of otherlanguage*; they serve no purpose (we are already inside an environment) and conflict with csquotes. Noticed by P. Lehman.
- - Changed the calls of \input to \xpg@input, which inputs the required file and resets the catcode of @ to the same value as it had before the input. Since each .ldf file starts with \makeatletter, the old behaviour would leave a category 11 @, which is wrong.
- - Added "\csuse{date#2}" to the definition of "otherlanguage*"
-
-
-1.2.0b (03-10-2011) [Update by Philipp Stephani]
- * Load xkeyval package explicitly since newer versions
- of fontspec don't load it any more
-
-1.2.0a (27-07-2010) [Last update by François Charette]
- * Initialize \fontfamily acc to value of \familydefault
- (Fixes a bug when using polyglossia with beamer)
- * Remove spurious space in def of \dateenglish
- * Add missing English variant "american"
- * Serbian: fix date format and captions (Latin+Cyrillic)
- * Fix \atticnumeral in gloss-greek
- * Small improvements and fixes in documentation
-
-
-1.2.0 (15-07-2010)
- * Adapted for fontspec 2.0 (will not work with earlier versions!)
- * New implementation of a \PolyglossiaSetup interface
- that simplifies writing gloss-*.ldf files
- * Many internal enhancements and refactoring
- (including a patch by Dirk Ulrich)
- * Improved automatic font setup when \<lang>font is not defined
- * New environment otherlanguage* (env. equivalent of \foreignlanguage
- (Enrico Gregorio)
- * Bugfix to prevent bogus expansion of \{rm,sf,tt}family even in aux files
- (Enrico Gregorio)
- * New gloss files for Armenian, Bengali, Occitan, Bengali, Lao,
- Malayalam, Marathi, Tamil, Telugu, and Turkmen.
- * New auxiliary packages 'devanagaridigits' and 'bengalidigits'
- * hijrical no longer loads bidi and checks for incompatible l3calc
- * Add Babel shorthands for Russian (based on a patch by Vladimir Lomov)
- * Fix \fnum@{table,figure} for Lithuanian
- * Various improvements in gloss-russian (provided by Vladimir Lomov and
- others)
- * Corrected captions for Bahasai, Lithuanian, Russian, Croatian
- * Add option indentfirst=true for Spanish, Croation and other languages
- (NB: indentfirst was previously named frenchindent)
- * New option 'script' for German: Setting script=fraktur modifies the
- captions for typesetting in Fraktur.
- * New command \aemph for Arabic, Farsi, Urdu, etc. to mark emphasis through
- overlining.
- * Package option 'nolocalmarks' is now true by default: to activate it the
- option 'localmarks' must be passed instead.
- * Loading languages à la Babel as package options is no longer possible (this
- feature was deprecated since v1.1.0).
-
-1.1.1 (23-03-2010)
- * Bugfix for French: explicit spaces before/after double punctuation
- signs ("Par exemple : les grands « espaces » du Canada ! ") are
- now replaced by the appropriate non-breaking spaces, as in Babel.
- * Bugfix for font switching mechanism within Latin script
- (pending a complete re-implementation in v1.2):
- the font shape and series are no longer reset when switching language.
- * New macros for non-Western decimal digits
- (instead of fontmappings)
- * New gloss files for Asturian, Lithuanian and Urdu
- * hijrical.sty is now locale-aware: \hijritoday is
- formatted differently in Arabic, Farsi, Urdu, Turkish
- and Bahasa Indonesia.
----NB: the above five items were not part of v1.1.1-rc1 which was made available on github---
- * Enable babelshorthands for Dutch
- * Add missing macro \allowhyphens
- * Add global option babelshorthands
- * Support Catalan geminated l
- * Bugfix when declaring more than one pkg option
- * Protect \reset@font
- * Add missing requirement makecmds
- * Bugfix for smallcaps in captions
- * Typo for ccname in Hebrew
- * Add option numerals to gloss-russian
- * Provide newXeTeXintercharclass when undefined
- * Bugfix for Russian alph
- * Remove superfluous level of {} in def of markright
- * Bugfix for \datecatalan
- * Change hyphenmins for Sanskrit
-
-1.1.0b
- * Modify hyphenmins for Sanskrit (Yves Codet)
- * Bugfixes for Serbian and Bulgarian (Enrico Gregorio)
-1.1.0a
- * Bugfix for interchar tokens
-1.1.0
- * Use \newXeTeXintercharclass (thanks to Enrico Gregorio)
- * Fixed implementation of shorthands for German (Babel code in file babelsh.def)
- * Arabic (Khaled Hosny):
- - Fix abjad form for 3 and 5 and add option abjadjimnotail
- - bugfix for \arabicnumber
- - make Gregorian calender the default
- - fixed typos in the sample text
- * Turkish (S. Ö. Yıldız):
- - fix white-space before : and !
- - also check if the font specified TRK for language
- - added missing Turkish translation of "Glossary"
- * Suppress nopattern warning for non-hyphenated scripts
- * Changed U+0163 to U+021B for Romanian (Elie Roux)
- * Stylistic fixes and use macro \xpg@option for package options (E. Gregorio)
- * Fix monthnames in Dutch (A. Ledda)
- * Add Brazilian translation for "glossary"
- * Remove spurious space generated by gloss-spanish
- * Fix ldf file for brazilian
- * Various improvements in the code communicated by E. Gregorio:
- - remove superfluous \protect\language
- - change default language from 0 to \l@nohyphenation=255
- - localize lccode handling of apostrophe in French; add it to Italian
- * Fix frenchspacing for vietnamese
- * Other minor bugfixes
-
-1.0.2
- This is mostly a bug fixes release.
- * Captions corrected in Hebrew, Russian and Spanish
- * Removed all \text<lang> wrappers within caption definitions
- * Improved compatibility with Babel
- * New option "babelshorthands" for German
- * New option "Script" for Sanskrit
-
-1.0.1
- * Improved documentation (added sections on font setup and numeration mappings)
- * Improvements and bugfixes for English and German
- * Bugfix in gloss-syriac.ldf (spurious space after \textsyriac{...})
- * Extended the scope of \syriacabjad
- * Added gloss-amharic.ldf (ported from ethiop.ldf in the package ethiop)
-
-1.0
- * Initial release on CTAN
-%</Changelog>
%<*examples.tex>
\documentclass[a4paper]{article}
\usepackage[no-math]{fontspec}
diff --git a/macros/unicodetex/latex/polyglossia/polyglossia.pdf b/macros/unicodetex/latex/polyglossia/polyglossia.pdf
index c7ef99de2e..d4ba5e6939 100644
--- a/macros/unicodetex/latex/polyglossia/polyglossia.pdf
+++ b/macros/unicodetex/latex/polyglossia/polyglossia.pdf
Binary files differ