summaryrefslogtreecommitdiff
path: root/macros/latex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2021-08-09 03:00:45 +0000
committerNorbert Preining <norbert@preining.info>2021-08-09 03:00:45 +0000
commit36320cbe81185b9897691aaae9caae090e675fd0 (patch)
tree1115dfe769a208115a326db29c6d07e33e2a1774 /macros/latex
parented204b296810be74994f70f76b7f5b849f6e9ecb (diff)
CTAN sync 202108090300
Diffstat (limited to 'macros/latex')
-rw-r--r--macros/latex/contrib/colorist/README.md30
-rw-r--r--macros/latex/contrib/colorist/colorart.cls2
-rw-r--r--macros/latex/contrib/colorist/colorbook.cls2
-rw-r--r--macros/latex/contrib/colorist/colorist-doc.pdfbin95143 -> 94096 bytes
-rw-r--r--macros/latex/contrib/colorist/colorist-doc.tex13
-rw-r--r--macros/latex/contrib/colorist/colorist.sty114
-rw-r--r--macros/latex/contrib/minimalist/README.md31
-rw-r--r--macros/latex/contrib/minimalist/minimalist-doc.pdfbin98659 -> 97767 bytes
-rw-r--r--macros/latex/contrib/minimalist/minimalist-doc.tex22
-rw-r--r--macros/latex/contrib/minimalist/minimalist.sty162
-rw-r--r--macros/latex/contrib/minimalist/minimart.cls4
-rw-r--r--macros/latex/contrib/minimalist/minimbook.cls4
-rw-r--r--macros/latex/contrib/nchairx/README.md34
-rw-r--r--macros/latex/contrib/nchairx/doc/chairxmath.pdfbin0 -> 446922 bytes
-rw-r--r--macros/latex/contrib/nchairx/doc/nchairx.pdfbin0 -> 684985 bytes
-rw-r--r--macros/latex/contrib/nchairx/logo/nchairxheader.pdfbin0 -> 5655 bytes
-rw-r--r--macros/latex/contrib/nchairx/logo/nchairxlogo.pdfbin0 -> 4272 bytes
-rw-r--r--macros/latex/contrib/nchairx/source/chairxDefaults.dtx74
-rw-r--r--macros/latex/contrib/nchairx/source/chairxDefaultsDoc.dtx60
-rw-r--r--macros/latex/contrib/nchairx/source/chairxEnv.dtx649
-rw-r--r--macros/latex/contrib/nchairx/source/chairxEnvDoc.dtx143
-rw-r--r--macros/latex/contrib/nchairx/source/chairxLogo.dtx48
-rw-r--r--macros/latex/contrib/nchairx/source/chairxLogoDoc.dtx45
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmath.dtx184
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmath.ins59
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathAlgebra.dtx383
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathAlgebraDoc.dtx270
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathAnalysis.dtx456
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathAnalysisDoc.dtx297
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathCategory.dtx141
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathCategoryDoc.dtx97
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathDecoration.dtx68
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathDecorationDoc.dtx60
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathDelimiters.dtx73
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathDelimitersDoc.dtx101
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathDiffgeo.dtx574
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathDiffgeoDoc.dtx362
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathFonts.dtx288
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathFontsDoc.dtx100
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathGeneral.dtx277
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathGeneralDoc.dtx184
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathLinalg.dtx196
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathLinalgDoc.dtx135
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathStatistics.dtx65
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathStatisticsDoc.dtx45
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathTopology.dtx146
-rw-r--r--macros/latex/contrib/nchairx/source/chairxmathTopologyDoc.dtx96
-rw-r--r--macros/latex/contrib/nchairx/source/nchairx.dtx369
-rw-r--r--macros/latex/contrib/nchairx/source/nchairx.ins63
-rw-r--r--macros/latex/contrib/readarray/readarray.pdfbin500598 -> 528752 bytes
-rw-r--r--macros/latex/contrib/readarray/readarray.sty415
-rw-r--r--macros/latex/contrib/readarray/readarray.tex476
52 files changed, 6954 insertions, 463 deletions
diff --git a/macros/latex/contrib/colorist/README.md b/macros/latex/contrib/colorist/README.md
index 05164cf1d0..2b54c97fa2 100644
--- a/macros/latex/contrib/colorist/README.md
+++ b/macros/latex/contrib/colorist/README.md
@@ -2,7 +2,9 @@
# `colorist` bundle: write you documents in a colorful way
-A collection of styles and classes that helps you typesetting articles and books
+## Introduction
+
+`colorist` is a collection of styles and classes that helps you typesetting articles and books
with a colorful design. It mainly consists of two parts.
- Main part:
@@ -15,7 +17,7 @@ with a colorful design. It mainly consists of two parts.
(European and Brazilian) and Spanish typesetting.
-- Derivative part (they have separate pages on CTAN):
+- Derivative part:
- `lebhart.cls` : enhanced version of `colorart`
- `beaulivre.cls` : enhanced version of `colorbook`
@@ -25,6 +27,30 @@ with a colorful design. It mainly consists of two parts.
Italian, Japanese, Portuguese (European and Brazilian), Russian and Spanish
typesetting, and also use more beautiful fonts.
+### How to get these files
+You can get the `.sty` and `.cls` files mentioned above simply by compiling
+`colorist.ins`:
+```
+latex colorist.ins
+```
+To get the `.tex` source files of the documentation, compile `colorist-doc.ins`:
+```
+latex colorist-doc.ins
+```
+
+## Features
+
+Compared with usual document classes, it has the following features:
+
+- Native multi-language support: Chinese (simplified and traditional), English,
+ French, German, Italian, Japanese, Portuguese (European and Brazilian),
+ Russian and Spanish
+ > In particular, for simplified Chinese, traditional Chinese and Japanese,
+ > the fonts of the corresponding glyphs can be automatically switched
+- Ready-to-use theorem-like environments, also with multi-language support
+- Support both the standard and the AMS writing fashion
+
+
# 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
index 5d45070c7a..4f2a247c67 100644
--- a/macros/latex/contrib/colorist/colorart.cls
+++ b/macros/latex/contrib/colorist/colorart.cls
@@ -17,7 +17,7 @@
%%
\NeedsTeXFormat{LaTeX2e}[2020-10-01]
\ProvidesClass{colorart}
- [2021/07/30 A colorful article style]
+ [2021/08/08 A colorful article style]
\def\colorclass@baseclass{article}
\RequirePackage{kvoptions}
\RequirePackage{etoolbox}
diff --git a/macros/latex/contrib/colorist/colorbook.cls b/macros/latex/contrib/colorist/colorbook.cls
index 798ec0bcb3..cefcb450bb 100644
--- a/macros/latex/contrib/colorist/colorbook.cls
+++ b/macros/latex/contrib/colorist/colorbook.cls
@@ -17,7 +17,7 @@
%%
\NeedsTeXFormat{LaTeX2e}[2020-10-01]
\ProvidesClass{colorbook}
- [2021/07/30 A colorful book style]
+ [2021/08/08 A colorful book style]
\def\colorclass@baseclass{book}
\RequirePackage{kvoptions}
\RequirePackage{etoolbox}
diff --git a/macros/latex/contrib/colorist/colorist-doc.pdf b/macros/latex/contrib/colorist/colorist-doc.pdf
index 56badd7b1f..365d097b77 100644
--- a/macros/latex/contrib/colorist/colorist-doc.pdf
+++ 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
index e17a0ba207..d0782450d0 100644
--- a/macros/latex/contrib/colorist/colorist-doc.tex
+++ b/macros/latex/contrib/colorist/colorist-doc.tex
@@ -93,9 +93,9 @@
\title{\colorist{}, write your articles or books in a colorful way}
\author{Jinwen XU}
-\thanks{Corresponding to: \texttt{\colorist{} 2021/07/30}}
+\thanks{Corresponding to: \texttt{\colorist{} 2021/08/08}}
\email{\href{mailto:ProjLib@outlook.com}{ProjLib@outlook.com}}
-\date{July 2021, Beijing}
+\date{August 2021, Beijing}
\maketitle
@@ -116,6 +116,7 @@
In order to use the package or classes described here, you need to:
\begin{itemize}
\item install TeX Live or MikTeX of the latest possible version, and make sure that \texttt{colorist} and \texttt{projlib} are correctly installed in your \TeX{} system.
+ \item download and install the required fonts if needed.
\item be familiar with the basic usage of \LaTeX{}, and knows how to compile your document with \hologo{pdfLaTeX}, \hologo{XeLaTeX} or \hologo{LuaLaTeX}.
\end{itemize}
@@ -189,7 +190,6 @@ If you find this example a little complicated, don't worry. Let's now look at th
\LevelThreeTitle{Initialization}
-\medskip
\begin{code}
\documentclass{colorart}
\usepackage{ProjLib}
@@ -199,7 +199,6 @@ Initialization is straightforward. The first line loads the document class \colo
\LevelThreeTitle{Set the language}
-\medskip
\begin{code}
\UseLanguage{French}
\end{code}
@@ -212,7 +211,6 @@ For detailed description of this command and more related commands, please refer
\LevelThreeTitle{Title, author information, abstract and keywords}
-\medskip
\begin{code}
\title{(*\meta{title}*)}
\author{(*\meta{author}*)}
@@ -262,7 +260,6 @@ In addition, you may also write in the \AmS{} fashion, i.e.:
\LevelThreeTitle{Draft marks}
-\medskip
\begin{code}
\dnf<(*\meta{some hint}*)>
\end{code}
@@ -271,7 +268,6 @@ When you have some places that have not yet been finished yet, you can mark them
\LevelThreeTitle{Theorem-like environments}
-\medskip
\begin{code}
\begin{theorem}\label{thm:abc}
Ceci est un théorème.
@@ -488,7 +484,6 @@ By default, when referenced, the name of the theorem matches the current context
\UseLanguage{English}
-\bigskip
The following are the main styles of theorem-like environments:
\begin{theorem}
Theorem style: theorem, proposition, lemma, corollary, ...
@@ -656,10 +651,12 @@ The author information can contain multiple groups, written as:
Among them, the mutual order of \lstinline|\address|, \lstinline|\curraddr|, \lstinline|\email| is not important.
+\clearpage
\LevelOneTitle{Known issues}
\begin{itemize}[itemsep=.6em]
\item The font settings are still not perfect.
+ \item The TOC design does not look very nice.
\item Since many features are based on the \ProjLib{} toolkit, \colorist{} (and hence \colorart{}, \lebhart{} and \colorbook{}, \beaulivre{}) inherits all its problems. For details, please refer to the ``Known Issues'' section of the \ProjLib{} documentation.
\item The error handling mechanism is incomplete: there is no corresponding error prompt when some problems occur.
\item There are still many things that can be optimized in the code.
diff --git a/macros/latex/contrib/colorist/colorist.sty b/macros/latex/contrib/colorist/colorist.sty
index 354006dc4b..f5f9766e09 100644
--- a/macros/latex/contrib/colorist/colorist.sty
+++ b/macros/latex/contrib/colorist/colorist.sty
@@ -17,7 +17,7 @@
%%
\NeedsTeXFormat{LaTeX2e}[2020-10-01]
\ProvidesPackage{colorist}
- [2021/07/30 A colorful style for articles and books]
+ [2021/08/08 A colorful style for articles and books]
\RequirePackage{kvoptions}
\RequirePackage{etoolbox}
\SetupKeyvalOptions{%
@@ -71,6 +71,7 @@
\ifdefined\c@chapter\IsBooktrue\else\IsBookfalse\fi
\let\colorist@sffamily\sffamily
+\let\colorist@scshape\scshape
\let\colorist@textsc\textsc
%%================================
@@ -79,7 +80,7 @@
\RequirePackage{anyfontsize}
\newcommand{\partfont}{\conditionalbfseries\colorist@sffamily}
-\newcommand{\chapfont}{\conditionalbfseries\colorist@sffamily}
+\newcommand{\chapfont}{\conditionalbfseries\colorist@sffamily\colorist@scshape}
\newcommand{\secfont}{\conditionalbfseries\colorist@sffamily}
\newcommand{\subsecfont}{\conditionalbfseries\colorist@sffamily}
\newcommand{\subsubsecfont}{\conditionalbfseries\colorist@sffamily}
@@ -169,7 +170,7 @@
\gappto{\PJLlang@langconfig@common}{%
\renewcommand{\partstring}{\MakeUppercase{{\partname~\protect\thepart}}}%
}
-\gappto{\PJLlang@langconfig@chinese}{%
+\gappto{\PJLlang@langconfig@schinese}{%
\renewcommand{\partstring}{第~\thepart~部分}%
}
\gappto{\PJLlang@langconfig@tchinese}{%
@@ -184,13 +185,25 @@
\titleclass{\part}{top} % make part like a chapter
\titleformat{\part}[display]
{\partfont\filleft}
- {\partstring}
+ {%
+ \thispagestyle{empty}%
+ \begin{tikzpicture}[remember picture,overlay]
+ \fill[maintheme!10!paper] (current page.north west) rectangle (current page.south east);
+ \node at ($(current page.north west)+(15em,-15em)$) {\normalfont\textcolor{maintheme}{\scalebox{12}{\thepart}}};
+ \end{tikzpicture}%
+ }
{1em}
{\fontsize{20}{0}\selectfont\MakeUppercase{#1}}
\titleformat{name=\part,numberless}[display]
{% \phantomsection\addcontentsline{toc}{part}{#1}%
\partfont\filleft}
- {\phantom{\MakeUppercase{\partname}}}
+ {%
+ \thispagestyle{empty}%
+ \begin{tikzpicture}[remember picture,overlay]
+ \fill[maintheme!10!paper] (current page.north west) rectangle (current page.south east);
+ \node at ($(current page.north west)+(15em,-15em)$) {\normalfont\textcolor{maintheme}{\scalebox{12}{$*$}}};
+ \end{tikzpicture}%
+ }
{1em}
{\fontsize{20}{0}\selectfont\MakeUppercase{#1}}
\titlespacing*{\part}{0pt}{5em}{6em}
@@ -207,63 +220,48 @@
}
%% Chapter
- \newlength{\colorist@chapboxwidth}
-
- \newcommand{\MakeChapBox}[2]{%
- \settowidth{\colorist@chapboxwidth}{#1}
- \begin{tcolorbox}[
- enhanced,
- skin = bicolor,
- frame engine = path,
- % sharp corners = all,
- width = 0.9\textwidth,
- top = 4mm, bottom = 4mm,
- arc = .5mm,
- sidebyside,
- frame hidden,
- boxrule = 0mm,
- lefthand width = 1.5\colorist@chapboxwidth,
- colupper = white,
- colback = maintheme!80!paper,
- colbacklower = maintheme!20!paper,
- sidebyside align=center,
- halign=center]
- \Huge #1%
- \tcblower%
- #2%
- \end{tcolorbox}%
+ \newcommand{\TheChapter}[2]{%
+ \tcbsidebyside[enhanced,sidebyside adapt=right,sidebyside align=bottom,
+ colback=paper,frame hidden,
+ segmentation code={
+ \filldraw[maintheme] (segmentation.north)
+ -- ($(segmentation.east)-(12pt,0)$)
+ -- ($(segmentation.west)+(12pt,0)$)
+ -- (segmentation.south);}
+ ]{\filleft#2}{\normalfont\textcolor{maintheme}{\scalebox{4}{#1}}}
}
- \newcommand{\MakeChapBoxSingle}[1]{%
+ \newcommand{\TheChapterSingle}[1]{%
\begin{tcolorbox}[
enhanced,
- width = 0.7\textwidth,
- % sharp corners = all,
- top = 4mm, bottom = 4mm,
- arc = .5mm,
- frame hidden,
- boxrule = 0mm,
- colback = maintheme!20!paper,
+ width = 0.67\textwidth,
+ colback=paper,frame hidden,
halign=center]
#1
+ \vspace{-.6em}
+ \begin{center}
+ \begin{tikzpicture}
+ \filldraw[maintheme] (-4em,0) -- (4em,0) -- (0,-.1em) -- (0,.1em);
+ \end{tikzpicture}
+ \end{center}
\end{tcolorbox}
}
\titleformat{name=\chapter}
- {\filright\chapfont\huge} % Format
+ {\chapfont\huge} % Format
{} % Label
{0mm} % Sep
- {\MakeChapBox{\thechapter}{#1}} % Before-code
+ {\TheChapter{\thechapter}{#1}} % Before-code
\titlespacing*{name=\chapter}
{0em}{*2}{0em} % {left}{before-sep}{after-sep}
\titleformat{name=\chapter, numberless}
- {\filcenter\chapfont\huge} % Format
- {} % Label
- {0mm} % Sep
- {\MakeChapBoxSingle{#1}} % Before-code
+ {\filcenter\chapfont\huge}
+ {}
+ {0mm}
+ {\TheChapterSingle{#1}}
\titlespacing*{name=\chapter, numberless}
- {0em}{*2}{0em} % {left}{before-sep}{after-sep}
+ {0em}{*2}{0em}
%% Section
\titleformat{\section}
@@ -327,7 +325,7 @@
\titlespacing{\section}{0pt}{\baselineskip}{.6\baselineskip}
\titlespacing{\subsection}{0pt}{.75\baselineskip}{.4\baselineskip}
-\titlespacing{\subsubsection}{0pt}{.5\baselineskip}{.2\baselineskip}
+\titlespacing{\subsubsection}{0pt}{.6\baselineskip}{.3\baselineskip}
%%================================
%% TOC format
@@ -336,7 +334,7 @@
\titlecontents{part}
[0em]
{\addvspace{1.5pc}\filcenter\colorist@sffamily}
- {\thecontentslabel\nopagebreak\\\nopagebreak\uppercase}
+ {{\normalfont\color{maintheme}\thecontentslabel}\nopagebreak\\\nopagebreak\uppercase}
{}
{} % without page number
[\addvspace{.5pc}]
@@ -360,10 +358,10 @@
{\hspace*{-2.75em}}
{\titlerule*[1em]{\textcolor{maintext!15!paper}{.}}\color{maintext!45!paper}\contentspage}
\titlecontents{subsubsection}
- [9em] % i.e., 7em (subsection) + 2em
+ [10em] % i.e., 7em (subsection) + 3em
{\normalfont\colorist@sffamily}
- {\contentslabel{2.75em}}
- {\hspace*{-2.75em}}
+ {\contentslabel{3.25em}}
+ {\hspace*{-3.25em}}
{\titlerule*[1em]{\textcolor{maintext!15!paper}{.}}\color{maintext!45!paper}\contentspage}
}{
\titlecontents{section}
@@ -375,11 +373,11 @@
\titlecontents{subsection}
[5em] % i.e., 2em (section) + 3em
{\addvspace{.15pc}\normalfont\colorist@sffamily}
- {\contentslabel{2.75em}}
- {\hspace*{-2.75em}}
+ {\contentslabel{2.25em}}
+ {\hspace*{-2.25em}}
{\titlerule*[1em]{\textcolor{maintext!15!paper}{.}}\color{maintext!45!paper}\contentspage}
\titlecontents{subsubsection}
- [7em] % i.e., 5em (subsection) + 2em
+ [8em] % i.e., 5em (subsection) + 3em
{\normalfont\colorist@sffamily}
{\contentslabel{2.75em}}
{\hspace*{-2.75em}}
@@ -750,8 +748,8 @@
\expandafter\def\csname definition-theoremnameRU\endcsname{\normalfont\colorist@sffamily\color{orange}\conditionalbfseries{Определение}-\theoremnameRU}
\AtEndPreamble{
-\theoremstyle{basic}
\if@colorist@nothms\else
+\theoremstyle{basic}
\if@colorist@nothmnum
\CreateTheorem*{theorem}
\CreateTheorem*{lemma}
@@ -826,9 +824,13 @@
\fi
\CreateTheorem*{remark*}
\CreateTheorem*{observation*}
+
+\theoremstyle{simple}
\fi
}
+\theoremstyle{simple}
+
\creflabelformat{PJLtheorem}{#2{\normalfont\colorist@sffamily\color{orange}\conditionalbfseries#1}#3}
\creflabelformat{PJLlemma}{#2{\normalfont\colorist@sffamily\color{orange}\conditionalbfseries#1}#3}
\creflabelformat{PJLproposition}{#2{\normalfont\colorist@sffamily\color{orange}\conditionalbfseries#1}#3}
@@ -1137,8 +1139,6 @@
}}
\fi
-\theoremstyle{simple}% as the default style for user-defined environments
-
\renewenvironment{proof}[1][\proofname]{\par
\pushQED{\qed}%
\normalfont \topsep6\p@\@plus6\p@\relax
@@ -1460,7 +1460,7 @@
%% Abstract style
%%================================
\renewenvironment{abstract}
-{\small{\centerline{\textsc{\conditionalbfseries\abstractname}}\vspace{-0.3\baselineskip}}
+{\small{\centerline{\textsc{\conditionalbfseries\sffamily\abstractname}}\vspace{-0.3\baselineskip}}
\color{maintext!80!paper}\begin{quotation}}
{\end{quotation}\medskip}
diff --git a/macros/latex/contrib/minimalist/README.md b/macros/latex/contrib/minimalist/README.md
index 7ff27be22e..41144c5769 100644
--- a/macros/latex/contrib/minimalist/README.md
+++ b/macros/latex/contrib/minimalist/README.md
@@ -2,7 +2,9 @@
# `minimalist` bundle: write you documents in a simple and clear way
-A collection of styles and classes that helps you typesetting articles and books
+## Introduction
+
+`minimalist` is a collection of styles and classes that helps you typesetting articles and books
with a simple and clear design. It mainly consists of two parts.
- Main part:
@@ -15,7 +17,7 @@ with a simple and clear design. It mainly consists of two parts.
(European and Brazilian) and Spanish typesetting.
-- Derivative part (they have separate pages on CTAN):
+- Derivative part:
- `einfart.cls` : more advanced class for typesetting articles
- `simplivre.cls` : more advanced class for typesetting books
@@ -25,6 +27,31 @@ with a simple and clear design. It mainly consists of two parts.
Italian, Japanese, Portuguese (European and Brazilian), Russian and Spanish
typesetting, and also use more beautiful fonts.
+### How to get these files
+You can get the `.sty` and `.cls` files mentioned above simply by compiling
+`minimalist.ins`:
+```
+latex minimalist.ins
+```
+To get the `.tex` source files of the documentation, compile
+`minimalist-doc.ins`:
+```
+latex minimalist-doc.ins
+```
+
+## Features
+
+Compared with usual document classes, it has the following features:
+
+- Native multi-language support: Chinese (simplified and traditional), English,
+ French, German, Italian, Japanese, Portuguese (European and Brazilian),
+ Russian and Spanish
+ > In particular, for simplified Chinese, traditional Chinese and Japanese,
+ > the fonts of the corresponding glyphs can be automatically switched
+- Ready-to-use theorem-like environments, also with multi-language support
+- Support both the standard and the AMS writing fashion
+
+
# License
This work is released under the LaTeX Project Public License, v1.3c or later.
diff --git a/macros/latex/contrib/minimalist/minimalist-doc.pdf b/macros/latex/contrib/minimalist/minimalist-doc.pdf
index b8120a55aa..51cb38acaf 100644
--- a/macros/latex/contrib/minimalist/minimalist-doc.pdf
+++ b/macros/latex/contrib/minimalist/minimalist-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/minimalist/minimalist-doc.tex b/macros/latex/contrib/minimalist/minimalist-doc.tex
index f0d643ab63..bade46ae91 100644
--- a/macros/latex/contrib/minimalist/minimalist-doc.tex
+++ b/macros/latex/contrib/minimalist/minimalist-doc.tex
@@ -1,4 +1,4 @@
-\documentclass[English,Chinese,French]{minimart}
+\documentclass[English,Chinese,French,classical]{minimart}
\linenumbers % Enable line numbers
@@ -98,16 +98,16 @@
\title{\minimalist{}, write your articles or books in a simple and clear way}
\author{Jinwen XU}
-\thanks{Corresponding to: \texttt{\minimalist{} 2021/07/30}}
+\thanks{Corresponding to: \texttt{\minimalist{} 2021/08/08}}
\email{\href{mailto:ProjLib@outlook.com}{ProjLib@outlook.com}}
-\date{July 2021, Beijing}
+\date{August 2021, Beijing}
\maketitle
\begin{abstract}
\minimalist{} is a series of styles and classes for you to typeset your articles or books in a simple and clear manner. The original intention in designing this series was to write drafts and notes that look simple yet not shabby. With the help of the \ProjLib{} toolkit, also developed by the author, the classes provided here have multi-language support, preset theorem-like environments with clever reference support, and many other functionalities. Notably, using these classes, one can organize the author information in the \AmS{} fashion, makes it easy to switch to journal classes later for publication.
- Finally, this documentation is typeset using the \minimart{} class. You can think of it as a short introduction and demonstration.
+ Finally, this documentation is typeset using the \minimart{} class (with the option \texttt{classical}). You can think of it as a short introduction and demonstration.
\end{abstract}
@@ -121,6 +121,7 @@
In order to use the package or classes described here, you need to:
\begin{itemize}
\item install TeX Live or MikTeX of the latest possible version, and make sure that \texttt{minimalist} and \texttt{projlib} are correctly installed in your \TeX{} system.
+ \item download and install the required fonts if needed.
\item be familiar with the basic usage of \LaTeX{}, and knows how to compile your document with \hologo{pdfLaTeX}, \hologo{XeLaTeX} or \hologo{LuaLaTeX}.
\end{itemize}
@@ -307,13 +308,6 @@ or to use the \AmS{} class:
\end{tip}
-\begin{tip}
-If you like the current document class, but want a more ``plain'' style, then you can use the option \texttt{classical}, like this:
-
-\begin{code}
-\documentclass[classical]{minimart}
-\end{code}
-\end{tip}
\clearpage
\LevelTwoTitle{Example - \minimbook}
@@ -389,11 +383,8 @@ In the next section, we will go through the options available.
\end{itemize}
\item \texttt{classical}
\begin{itemize}
- \item Classic mode. When this option is enabled, the style will become more regular: paragraphs are indented, the use of underlines are reduced, heading styles are changed, and the theorem styles will be much closer to common styles.
+ \item Classic mode. An antique-looking style will be used when this option is enabled, like in the current documentation.
\end{itemize}
- \begin{tip}
- \texttt{allowbf} + \texttt{classical} is probably a good choice if you prefer traditional style.
- \end{tip}
\item \texttt{runin}
\begin{itemize}
\item Use the ``runin'' style for \lstinline|\subsubsection|
@@ -413,6 +404,7 @@ In the next section, we will go through the options available.
\end{itemize}
\end{itemize}
+\clearpage
Additionally, \minimart{} and \minimbook{} offers the following options:
\begin{itemize}
\item \texttt{a4paper} or \texttt{b5paper}
diff --git a/macros/latex/contrib/minimalist/minimalist.sty b/macros/latex/contrib/minimalist/minimalist.sty
index 9f972f569d..295019f1c9 100644
--- a/macros/latex/contrib/minimalist/minimalist.sty
+++ b/macros/latex/contrib/minimalist/minimalist.sty
@@ -17,7 +17,7 @@
%%
\NeedsTeXFormat{LaTeX2e}[2020-10-01]
\ProvidesPackage{minimalist}
- [2021/07/30 A simple and clear style for articles and books]
+ [2021/08/08 A simple and clear style for articles and books]
\RequirePackage{kvoptions}
\RequirePackage{etoolbox}
\SetupKeyvalOptions{%
@@ -81,15 +81,15 @@
\if@minimalist@classical
\newcommand{\partfont}{\conditionalbfseries\minimalist@titlefontshape}
\newcommand{\chapfont}{\conditionalbfseries\minimalist@titlefontshape}
-\newcommand{\secfont}{\conditionalbfseries\minimalist@titlefontshape}
-\newcommand{\subsecfont}{\conditionalbfseries\minimalist@titlefontshape}
-\newcommand{\subsubsecfont}{\conditionalbfseries\minimalist@titlefontshape\itshape}
-\else
-\newcommand{\partfont}{\conditionalbfseries\minimalist@titlefontshape}
-\newcommand{\chapfont}{\conditionalbfseries\minimalist@titlefontshape}
\newcommand{\secfont}{\conditionalbfseries}
\newcommand{\subsecfont}{\conditionalbfseries}
\newcommand{\subsubsecfont}{\conditionalbfseries\itshape}
+\else
+\newcommand{\partfont}{\conditionalbfseries\minimalist@titlefontshape}
+\newcommand{\chapfont}{\conditionalbfseries\minimalist@titlefontshape}
+\newcommand{\secfont}{\conditionalbfseries\minimalist@titlefontshape}
+\newcommand{\subsecfont}{\conditionalbfseries\minimalist@titlefontshape}
+\newcommand{\subsubsecfont}{\conditionalbfseries\minimalist@titlefontshape\itshape}
\fi
%%================================
@@ -252,7 +252,7 @@
\gappto{\PJLlang@langconfig@common}{%
\renewcommand{\partstring}{\MakeUppercase{{\partname~\protect\thepart}}}%
}
-\gappto{\PJLlang@langconfig@chinese}{%
+\gappto{\PJLlang@langconfig@schinese}{%
\renewcommand{\partstring}{第~\thepart~部分}%
}
\gappto{\PJLlang@langconfig@tchinese}{%
@@ -344,14 +344,6 @@
%% Section
\if@minimalist@classical
-\newcommand\sec@decochar{}
-\titleformat{\section}
- {\LocallyStopLineNumbers%
- \secfont\centering}
- {\thesection}{.75em}
- {#1}
- [\ResumeLineNumbers]
-\else
\renewcommand\thesection{\arabic{section}}
\newcommand\seculine{\bgroup\markoverwith{\color{maintext!27!paper}%
\rule[-0.9ex]{2pt}{.6pt}\hspace{-2pt}\rule[-1.2ex]{2pt}{.6pt}}\ULon}
@@ -370,17 +362,18 @@
\secfont\centering}{}{0em}
{\seculine{#1}}
[\ResumeLineNumbers]
+\else
+\newcommand\sec@decochar{}
+\titleformat{\section}
+ {\LocallyStopLineNumbers%
+ \secfont\centering}
+ {\thesection}{.75em}
+ {#1}
+ [\ResumeLineNumbers]
\fi
%% Subsection
\if@minimalist@classical
-\titleformat{\subsection}
- {\LocallyStopLineNumbers%
- \subsecfont}
- {\thesubsection}{.75em}
- {#1}
- [\ResumeLineNumbers]
-\else
\renewcommand\thesubsection{%
\ifnum\c@section=0\else\arabic{section}.\fi\arabic{subsection}}
\newcommand\subseculine{\bgroup\markoverwith{\color{maintext!27!paper}%
@@ -395,6 +388,13 @@
\subsecfont}{}{0em}
{\subseculine{#1}}
[\ResumeLineNumbers]
+\else
+\titleformat{\subsection}
+ {\LocallyStopLineNumbers%
+ \subsecfont}
+ {\thesubsection}{.75em}
+ {#1}
+ [\ResumeLineNumbers]
\fi
%% Subsubsection
@@ -519,6 +519,23 @@
%%================================
\RequirePackage{amsthm}
\if@minimalist@classical
+\def\simpleqedsymbol{%
+ \makebox[1em]{\rlap{\textcolor{maintext!12!paper}{\rule[-0.1em]{.95em}{.95em}}}{\kern.07em\raisebox{.07em}{\textcolor{paper}{\rule[-0.1em]{.81em}{.81em}}}\kern.07em}}}
+\newtheoremstyle{simple}%
+ {}{}%
+ {\normalfont}{}%
+ {\normalfont}{}%
+ {0pt}%
+ {\global\let\qedsymbol\simpleqedsymbol%
+ {\conditionalbfseries\thmname{#1}\thmnumber{ #2}}\hspace{.4em}%
+ \textcolor{maintext!27!paper}{$|$}\hspace{.4em}%
+ \color{maintext!50!paper}\thmnote{\ensuremath{(\text{#3})}~~}%
+ \pushQED{\qed}%
+ }
+\def\@endtheorem{\global\let\qedsymbol\simpleqedsymbol%
+ \popQED\endtrivlist\@endpefalse
+ \global\let\qedsymbol\qedsymbolOriginal}
+\else
\newtheoremstyle{simple}%
{}{}%
{\normalfont}{}%
@@ -526,23 +543,6 @@
{0pt}%
{{\conditionalbfseries\minimalist@titlefontshape\thmname{#1}\thmnumber{ #2}}%
{\color{maintext!50!paper}\thmnote{\hspace{.4em}\ensuremath{(\text{#3})}}}~~{\normalfont---}~~}
-\else
- \def\simpleqedsymbol{%
- \makebox[1em]{\rlap{\textcolor{maintext!12!paper}{\rule[-0.1em]{.95em}{.95em}}}{\kern.07em\raisebox{.07em}{\textcolor{paper}{\rule[-0.1em]{.81em}{.81em}}}\kern.07em}}}
- \newtheoremstyle{simple}%
- {}{}%
- {\normalfont}{}%
- {\normalfont}{}%
- {0pt}%
- {\global\let\qedsymbol\simpleqedsymbol%
- {\conditionalbfseries\thmname{#1}\thmnumber{ #2}}\hspace{.4em}%
- \textcolor{maintext!27!paper}{$|$}\hspace{.4em}%
- \color{maintext!50!paper}\thmnote{\ensuremath{(\text{#3})}~~}%
- \pushQED{\qed}%
- }
- \def\@endtheorem{\global\let\qedsymbol\simpleqedsymbol%
- \popQED\endtrivlist\@endpefalse
- \global\let\qedsymbol\qedsymbolOriginal}
\fi
\renewcommand{\qedsymbol}{%
@@ -788,19 +788,6 @@
\if@minimalist@classical
\renewcommand{\@maketitle}{%
\LocallyStopLineNumbers%
- \begin{center}%
- {\conditionalbfseries\minimalist@titlefontshape\large\@title}\\\bigskip%
- \color{maintext!80!paper}%
- {\small\scshape\@author}\\[2pt]%
- {\small\@date}%
- \end{center}%
- \ifx\@date\@empty\bigskip\fi%
- \bigskip\par%
- \ResumeLineNumbers%
-}
-\else
-\renewcommand{\@maketitle}{%
- \LocallyStopLineNumbers%
\noindent%
{\textcolor{maintext!27!paper}{\rule{\textwidth}{0.75pt}}}%
% \vspace{-\parskip}%
@@ -823,6 +810,19 @@
{\textcolor{maintext!27!paper}{\rule{\textwidth}{0.75pt}}\par}%
\ResumeLineNumbers%
}
+\else
+\renewcommand{\@maketitle}{%
+ \LocallyStopLineNumbers%
+ \begin{center}%
+ {\conditionalbfseries\minimalist@titlefontshape\large\@title}\\\bigskip%
+ \color{maintext!80!paper}%
+ {\small\scshape\@author}\\[2pt]%
+ {\small\@date}%
+ \end{center}%
+ \ifx\@date\@empty\bigskip\fi%
+ \bigskip\par%
+ \ResumeLineNumbers%
+}
\fi
\apptocmd{\maketitle}{\thispagestyle{fancy}}{}{\FAIL}
@@ -832,10 +832,10 @@
\if@minimalist@classical
\renewenvironment{abstract}{%
\LocallyStopLineNumbers%
- \vspace{-\baselineskip}%
- \begin{center}%
- \textsc{\conditionalbfseries\small\abstractname}\\%
- \vspace{-.3\baselineskip}%
+ \begin{flushright}%
+ \textsc{\conditionalbfseries\small\abstractname}\par%
+ \vspace{-\parskip}%
+ \vspace{-.25\baselineskip}%
\begin{minipage}[t]{.833\textwidth}%
\vspace{0pt}%
\color{maintext!80!paper}%
@@ -843,17 +843,17 @@
\parindent=2em
}{%
\end{minipage}%
- \end{center}%
- \medskip%
+ \end{flushright}%
+ \bigskip%
\ResumeLineNumbers%
}
\else
\renewenvironment{abstract}{%
\LocallyStopLineNumbers%
- \begin{flushright}%
- \textsc{\conditionalbfseries\small\abstractname}\par%
- \vspace{-\parskip}%
- \vspace{-.25\baselineskip}%
+ \vspace{-\baselineskip}%
+ \begin{center}%
+ \textsc{\conditionalbfseries\small\abstractname}\\%
+ \vspace{-.3\baselineskip}%
\begin{minipage}[t]{.833\textwidth}%
\vspace{0pt}%
\color{maintext!80!paper}%
@@ -861,8 +861,8 @@
\parindent=2em
}{%
\end{minipage}%
- \end{flushright}%
- \bigskip%
+ \end{center}%
+ \medskip%
\ResumeLineNumbers%
}
\fi
@@ -881,41 +881,41 @@
\if@minimalist@classical
\newenvironment{keyword}{%
\LocallyStopLineNumbers%
- \vspace{-.75\baselineskip}%
- \begin{center}%
- {\conditionalbfseries\small\csname keywordname\csname\languagename ABBR\endcsname\endcsname}\\%
- \vspace{-.3\baselineskip}%
+ \vspace{-.5\baselineskip}%
+ \begin{flushright}%
+ {\conditionalbfseries\small\csname keywordname\csname\languagename ABBR\endcsname\endcsname}\par%
+ \vspace{-\parskip}%
+ \vspace{-.30\baselineskip}%
\begin{minipage}[t]{.833\textwidth}%
\vspace{0pt}%
\color{maintext!80!paper}%
\footnotesize%
\parindent=2em
- \begin{center}%
+ \raggedleft%
}{%
- \end{center}%
\end{minipage}%
- \end{center}%
- \medskip%
+ \end{flushright}%
+ \bigskip%
\ResumeLineNumbers%
}
\else
\newenvironment{keyword}{%
\LocallyStopLineNumbers%
- \vspace{-.5\baselineskip}%
- \begin{flushright}%
- {\conditionalbfseries\small\csname keywordname\csname\languagename ABBR\endcsname\endcsname}\par%
- \vspace{-\parskip}%
- \vspace{-.30\baselineskip}%
+ \vspace{-.75\baselineskip}%
+ \begin{center}%
+ {\conditionalbfseries\small\csname keywordname\csname\languagename ABBR\endcsname\endcsname}\\%
+ \vspace{-.3\baselineskip}%
\begin{minipage}[t]{.833\textwidth}%
\vspace{0pt}%
\color{maintext!80!paper}%
\footnotesize%
\parindent=2em
- \raggedleft%
+ \begin{center}%
}{%
+ \end{center}%
\end{minipage}%
- \end{flushright}%
- \bigskip%
+ \end{center}%
+ \medskip%
\ResumeLineNumbers%
}
\fi
diff --git a/macros/latex/contrib/minimalist/minimart.cls b/macros/latex/contrib/minimalist/minimart.cls
index a8c8ae4754..263639cc1b 100644
--- a/macros/latex/contrib/minimalist/minimart.cls
+++ b/macros/latex/contrib/minimalist/minimart.cls
@@ -17,7 +17,7 @@
%%
\NeedsTeXFormat{LaTeX2e}[2020-10-01]
\ProvidesClass{minimart}
- [2021/07/30 A simple and clear article style]
+ [2021/08/08 A simple and clear article style]
\def\minimclass@baseclass{article}
\RequirePackage{kvoptions}
\RequirePackage{etoolbox}
@@ -49,7 +49,7 @@
\if@minimclass@draft
\@minimclass@fasttrue
\fi
-\if@minimclass@classical
+\if@minimclass@classical\else
\@minimclass@useindenttrue
\fi
\if@minimclass@palatino
diff --git a/macros/latex/contrib/minimalist/minimbook.cls b/macros/latex/contrib/minimalist/minimbook.cls
index 68c787254a..3a53bfbc8d 100644
--- a/macros/latex/contrib/minimalist/minimbook.cls
+++ b/macros/latex/contrib/minimalist/minimbook.cls
@@ -17,7 +17,7 @@
%%
\NeedsTeXFormat{LaTeX2e}[2020-10-01]
\ProvidesClass{minimbook}
- [2021/07/30 A simple and clear book style]
+ [2021/08/08 A simple and clear book style]
\def\minimclass@baseclass{book}
\RequirePackage{kvoptions}
\RequirePackage{etoolbox}
@@ -49,7 +49,7 @@
\if@minimclass@draft
\@minimclass@fasttrue
\fi
-\if@minimclass@classical
+\if@minimclass@classical\else
\@minimclass@useindenttrue
\fi
\if@minimclass@palatino
diff --git a/macros/latex/contrib/nchairx/README.md b/macros/latex/contrib/nchairx/README.md
new file mode 100644
index 0000000000..3f42fb5d78
--- /dev/null
+++ b/macros/latex/contrib/nchairx/README.md
@@ -0,0 +1,34 @@
+The nChairX-Style Package
+============================
+
+Overview
+--------
+
+The `nchairx` package has been developed by members of the chair for
+mathematical physics at the University of Wuerzburg as a collection
+of macros and predefined environments for quickly creating nice
+mathematical documents.
+
+Documentation
+-------------
+
+The primary documentation for `nchairx` is in provided as `nchairx.pdf`.
+Additionally, the file `chairxmath.pdf`contains the documentation only
+for the math macros included in the `chairxmath` package.
+
+
+Reporting Bugs
+--------------
+
+If you wish to report a problem or bug in the `nchairx` bundle
+please contact us via marvin.dippell@uni-wuerzburg.de.
+
+
+
+
+License
+-------
+
+The contents of this bundle are distributed under the [LaTeX Project
+Public License](https://www.latex-project.org/lppl/lppl-1-3c/),
+version 1.3c.
diff --git a/macros/latex/contrib/nchairx/doc/chairxmath.pdf b/macros/latex/contrib/nchairx/doc/chairxmath.pdf
new file mode 100644
index 0000000000..4182730e24
--- /dev/null
+++ b/macros/latex/contrib/nchairx/doc/chairxmath.pdf
Binary files differ
diff --git a/macros/latex/contrib/nchairx/doc/nchairx.pdf b/macros/latex/contrib/nchairx/doc/nchairx.pdf
new file mode 100644
index 0000000000..2ce178ffa3
--- /dev/null
+++ b/macros/latex/contrib/nchairx/doc/nchairx.pdf
Binary files differ
diff --git a/macros/latex/contrib/nchairx/logo/nchairxheader.pdf b/macros/latex/contrib/nchairx/logo/nchairxheader.pdf
new file mode 100644
index 0000000000..4c3a64ae95
--- /dev/null
+++ b/macros/latex/contrib/nchairx/logo/nchairxheader.pdf
Binary files differ
diff --git a/macros/latex/contrib/nchairx/logo/nchairxlogo.pdf b/macros/latex/contrib/nchairx/logo/nchairxlogo.pdf
new file mode 100644
index 0000000000..6a2451e042
--- /dev/null
+++ b/macros/latex/contrib/nchairx/logo/nchairxlogo.pdf
Binary files differ
diff --git a/macros/latex/contrib/nchairx/source/chairxDefaults.dtx b/macros/latex/contrib/nchairx/source/chairxDefaults.dtx
new file mode 100644
index 0000000000..4718b34feb
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxDefaults.dtx
@@ -0,0 +1,74 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the implementation of the default settings.
+%
+% Macros have to be described by (delete the first %)
+% %\begin{macro}{\macro}
+% % Description of the implementation.
+% % \begin{macrocode}
+%\newcommand{\macro}[] {}
+% % \end{macrocode}
+% %\end{macro}
+%
+% The implementation and description will appear in the implementation
+% part of the documentation. Use \subsubsection{} etc. for
+% structuring.
+%
+% The documentation of the macros defined here has to be written in
+% chairxDefaultsDoc.dtx
+% \fi
+%
+% Equations with section numbers.
+%
+% \begin{macrocode}
+\numberwithin{equation}{section}
+\renewcommand{\theequation}{\thesection.\arabic{equation}}
+% \end{macrocode}
+%
+%
+% Page breaks allowed in long formulas by default.
+%
+% \begin{macrocode}
+\allowdisplaybreaks
+% \end{macrocode}
+%
+%
+% More space in arrays.
+%
+% \begin{macrocode}
+\renewcommand{\arraystretch}{1.2}
+% \end{macrocode}
+%
+%
+% Better spacing with |\left| and |\right| commands. Hack from
+% TeXExchange |https://tex.stackexchange.com/questions/2607/|
+%
+% \begin{macrocode}
+\let\originalleft\left
+\let\originalright\right
+\renewcommand{\left}{\mathopen{}\mathclose\bgroup\originalleft}
+\renewcommand{\right}{\aftergroup\egroup\originalright}
+% \end{macrocode}
+%
+%
+% Empty left pages before new chapter. If not explicitly set to empty
+% the headers might be non-empty with empty content pages. This
+% typically looks rather weird. So the easiest way is to make the page
+% completely blank.
+%
+% \begin{macrocode}
+\renewcommand{\cleardoublepage}{\clearpage\ifodd\c@page\else\vspace*{\fill}\thispagestyle{empty}\newpage\fi}
+% \end{macrocode}
+%
diff --git a/macros/latex/contrib/nchairx/source/chairxDefaultsDoc.dtx b/macros/latex/contrib/nchairx/source/chairxDefaultsDoc.dtx
new file mode 100644
index 0000000000..6ed658a4f4
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxDefaultsDoc.dtx
@@ -0,0 +1,60 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the documentation of the environment handling.
+%
+% Macros have to be described by (delete the first %)
+% \DescribeMacro{\macro}
+% Description and usage of the macro.
+%
+% The description will appear in the usage
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The implementation of the macros defined here has to be written in
+% chairxDefaults.dtx
+%\fi
+%
+% Being a rather high level package, several over-all styling options
+% are set to new defaults. This includes several spacings, numbering
+% schemes etc. Currently, the most important changes are the
+% following:
+% \begin{itemize}
+% \item We redefine \verb|\mathbb| to use the fonts from the |bbm|
+% package, looks so much nicer: $\mathbb{R}$ and $\mathbb{C}$ but
+% also $\mathbb{k}$.
+% \item We redefine |\mathcal| to use the font |EulerScript| from the
+% |euler| package yielding $\mathcal{CLO}$ and we define
+% |\mathsrc| to use the script font |rsfso| from the |rfsfo|
+% package giving $\mathscr{ABCD}$. Please make sure that these
+% fonts are installed properly: with a recent \LaTeX-installation
+% this should be automatic.
+% \item Equation numbers are always with sections in front. In the
+% |book| class this leads to equation numbers having the chapter
+% number and the section number in front.
+% \item Displayed formulas are allowed to break over pages. As in
+% mathematical texts one has many (many!) long formulas this is
+% really necessary. Without allowing this by default a case by
+% case decision typically leads to sub-optimal results in page
+% breaks.
+% \item We set |\arraystretch| to the value |1.2| to have a bit more
+% space in arrays.
+% \item The |\left| and the |\right| commands in math mode have a
+% notoriously bad spacing. This is fixed by a hack from
+% TexExchange.
+% \item The command |\cleardoublepage| will produce empty headers on
+% an empty left page. This will only affect the behaviour in
+% classes with left/right pages like the book class. It generally
+% looks weird to have an empty left page containing just the page
+% number or some default header but nothing else.
+% \end{itemize}
diff --git a/macros/latex/contrib/nchairx/source/chairxEnv.dtx b/macros/latex/contrib/nchairx/source/chairxEnv.dtx
new file mode 100644
index 0000000000..8effebf5e6
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxEnv.dtx
@@ -0,0 +1,649 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the implementation of the environment handling.
+%
+% Macros have to be described by (delete the first %)
+% %\begin{macro}{\macro}
+% % Description of the implementation.
+% % \begin{macrocode}
+%\newcommand{\macro}[] {}
+% % \end{macrocode}
+% %\end{macro}
+%
+% The implementation and description will appear in the implementation
+% part of the documentation. Use \subsubsection{} etc. for
+% structuring.
+%
+% The documentation of the macros defined here has to be written in
+% chairxEnvDoc.dtx
+% \fi
+%
+%
+% \begin{macro}{\claimch@irxname}
+% \begin{macro}{\conjecturech@irxname}
+% \begin{macro}{\conventionch@irxname}
+% \begin{macro}{\corollarych@irxname}
+% \begin{macro}{\definitionch@irxname}
+% \begin{macro}{\examplech@irxname}
+% \begin{macro}{\exercisech@irxname}
+% \begin{macro}{\hintch@irxname}
+% \begin{macro}{\lemmach@irxname}
+% \begin{macro}{\maintheoremch@irxname}
+% \begin{macro}{\notationch@irxname}
+% \begin{macro}{\proofch@irxname}
+% \begin{macro}{\propositionch@irxname}
+% \begin{macro}{\questionch@irxname}
+% \begin{macro}{\remarkch@irxname}
+% \begin{macro}{\subproofch@irxname}
+% \begin{macro}{\theoremch@irxname}
+%
+% First we define the names of the environments in English.
+% Currently we support German and English if the |babel| package
+% is loaded, insert more as you like.
+%
+% \begin{macrocode}
+\newcommand{\claimch@irxname}{Claim}
+\newcommand{\conjecturech@irxname}{Conjecture}
+\newcommand{\conventionch@irxname}{Convention}
+\newcommand{\corollarych@irxname}{Corollary}
+\newcommand{\definitionch@irxname}{Definition}
+\newcommand{\examplech@irxname}{Example}
+\newcommand{\exercisech@irxname}{Exercise}
+\newcommand{\hintch@irxname}{Hint}
+\newcommand{\lemmach@irxname}{Lemma}
+\newcommand{\maintheoremch@irxname}{Main Theorem}
+\newcommand{\notationch@irxname}{Notation}
+\newcommand{\proofch@irxname}{Proof}
+\newcommand{\propositionch@irxname}{Proposition}
+\newcommand{\questionch@irxname}{Question}
+\newcommand{\remarkch@irxname}{Remark}
+\newcommand{\subproofch@irxname}{Proof}
+\newcommand{\theoremch@irxname}{Theorem}
+% \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% If the |babel| package is loaded with the option for English we fill
+% them with the correct English words. Note that we also need the
+% |strings| option to make this work. Otherwise we do nothing.
+% Careful: no spaces allowed in the list!
+%
+% \begin{macrocode}
+\@ifpackagewith{babel}{english,strings}{%
+ \StartBabelCommands{english}{extras}
+ \SetString{\chapterch@irxname}{Chapter}
+ \SetString{\sectionch@irxname}{Section}
+ \SetString{\subsectionch@irxname}{Section}
+ \SetString{\subsubsectionch@irxname}{Section}
+ \SetString{\lemmach@irxname}{Lemma}
+ \SetString{\propositionch@irxname}{Proposition}
+ \SetString{\theoremch@irxname}{Theorem}
+ \SetString{\corollarych@irxname}{Corollary}
+ \SetString{\definitionch@irxname}{Definition}
+ \SetString{\claimch@irxname}{Claim}
+ \SetString{\examplech@irxname}{Example}
+ \SetString{\remarkch@irxname}{Remark}
+ \SetString{\questionch@irxname}{Question}
+ \SetString{\conjecturech@irxname}{Conjecture}
+ \SetString{\conventionch@irxname}{Convention}
+ \SetString{\exercisech@irxname}{Exercise}
+ \SetString{\maintheoremch@irxname}{Main Theorem}
+ \SetString{\notationch@irxname}{Notation}
+ \SetString{\proofch@irxname}{Proof}
+ \SetString{\subproofch@irxname}{Proof}
+ \SetString{\hintch@irxname}{Hint}
+ \EndBabelCommands
+}{}
+% \end{macrocode}
+%
+% Same thing in German.
+%
+% \begin{macrocode}
+\@ifpackagewith{babel}{german,strings}{%
+ \StartBabelCommands{german}{extras}
+ \SetString{\chapterch@irxname}{Kapitel}
+ \SetString{\sectionch@irxname}{Abschnitt}
+ \SetString{\subsectionch@irxname}{Abschnitt}
+ \SetString{\subsubsectionch@irxname}{Abschnitt}
+ \SetString{\lemmach@irxname}{Lemma}
+ \SetString{\propositionch@irxname}{Proposition}
+ \SetString{\theoremch@irxname}{Satz}
+ \SetString{\corollarych@irxname}{Korollar}
+ \SetString{\definitionch@irxname}{Definition}
+ \SetString{\claimch@irxname}{Behauptung}
+ \SetString{\examplech@irxname}{Beispiel}
+ \SetString{\remarkch@irxname}{Bemerkung}
+ \SetString{\questionch@irxname}{Frage}
+ \SetString{\conjecturech@irxname}{Vermutung}
+ \SetString{\conventionch@irxname}{Konvention}
+ \SetString{\exercisech@irxname}{\"Ubung}
+ \SetString{\maintheoremch@irxname}{Theorem}
+ \SetString{\notationch@irxname}{Notation}
+ \SetString{\proofch@irxname}{Beweis}
+ \SetString{\subproofch@irxname}{Beweis}
+ \SetString{\hintch@irxname}{Hinweis}
+ \EndBabelCommands
+}{}
+% \end{macrocode}
+%
+% Now we define the actual environments. We start with header in bold
+% and body in italic.
+%
+% \begin{macrocode}
+\theoremheaderfont{\normalfont\bfseries}
+\theorembodyfont{\itshape}
+% \end{macrocode}
+%
+% \begin{environment}{claim}
+% \begin{environment}{conjecture}
+% \begin{environment}{corollary}
+% \begin{environment}{definition}
+% \begin{environment}{lemma}
+% \begin{environment}{proposition}
+% \begin{environment}{theorem}
+%
+% Now those environments with this styling, all share the common
+% numbering scheme. In order to make |\autoref| work properly we
+% need to define alias counter. For each environment we also
+% define |\*autorefname|.
+%
+% \begin{macrocode}
+\newtheorem{claim}{\claimch@irxname}[section]
+\newtheorem*{nnclaim}{\claimch@irxname}
+\newaliascnt{conjecture}{claim}
+\newtheorem{conjecture}[conjecture]{\conjecturech@irxname}
+\newtheorem*{nnconjecture}{\conjecturech@irxname}
+\aliascntresetthe{conjecture}
+\newaliascnt{corollary}{claim}
+\newtheorem{corollary}[corollary]{\corollarych@irxname}
+\newtheorem*{nncorollary}{\corollarych@irxname}
+\aliascntresetthe{corollary}
+\newaliascnt{definition}{claim}
+\newtheorem{definition}[definition]{\definitionch@irxname}
+\newtheorem*{nndefinition}{\definitionch@irxname}
+\aliascntresetthe{definition}
+\newaliascnt{lemma}{claim}
+\newtheorem{lemma}[lemma]{\lemmach@irxname}
+\newtheorem*{nnlemma}{\lemmach@irxname}
+\aliascntresetthe{lemma}
+\newaliascnt{proposition}{claim}
+\newtheorem{proposition}[proposition]{\propositionch@irxname}
+\newtheorem*{nnproposition}{\propositionch@irxname}
+\aliascntresetthe{proposition}
+\newaliascnt{theorem}{claim}
+\newtheorem{theorem}[theorem]{\theoremch@irxname}
+\newtheorem*{nntheorem}{\theoremch@irxname}
+\aliascntresetthe{theorem}
+% \end{macrocode}
+%
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+%
+% Next we set the body font to roman.
+%
+% \begin{macrocode}
+\theorembodyfont{\rmfamily}
+% \end{macrocode}
+%
+% \begin{environment}{example}
+% \begin{environment}{convention}
+% \begin{environment}{notation}
+% \begin{environment}{question}
+% \begin{environment}{remark}
+%
+% And have some more environments, still numbered with the same
+% counter.
+%
+% \begin{macrocode}
+\newaliascnt{example}{claim}
+\newtheorem{example}[example]{\examplech@irxname}
+\newtheorem*{nnexample}{\examplech@irxname}
+\aliascntresetthe{example}
+\newaliascnt{convention}{claim}
+\newtheorem{convention}[convention]{\conventionch@irxname}
+\newtheorem*{nnconvention}{\conventionch@irxname}
+\aliascntresetthe{convention}
+\newaliascnt{notation}{claim}
+\newtheorem{notation}[notation]{\notationch@irxname}
+\newtheorem*{nnnotation}{\notationch@irxname}
+\aliascntresetthe{notation}
+\newaliascnt{question}{claim}
+\newtheorem{question}[question]{\questionch@irxname}
+\newtheorem*{nnquestion}{\questionch@irxname}
+\aliascntresetthe{question}
+\newaliascnt{remark}{claim}
+\newtheorem{remark}[remark]{\remarkch@irxname}
+\newtheorem*{nnremark}{\remarkch@irxname}
+\aliascntresetthe{remark}
+% \end{macrocode}
+%
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+%
+% \begin{environment}{exercise}
+%
+% The exercise environment has a separate counter.
+%
+% \begin{macrocode}
+\newtheorem{exercise}{\exercisech@irxname}[section]
+\newtheorem*{nnexercise}{\exercisech@irxname}
+% \end{macrocode}
+%
+% \end{environment}
+%
+% \begin{environment}{maintheorem}
+%
+% We change now for the main theorem styling
+%
+% \begin{macrocode}
+\theorembodyfont{\itshape}
+\theoremnumbering{Roman}
+\newtheorem{maintheorem}{\maintheoremch@irxname}
+\newtheorem*{nnmaintheorem}{\maintheoremch@irxname}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{proof}
+% \begin{environment}{subproof}
+%
+% The proof environments. We use the boxempty symbol from the AMSa
+% font.
+%
+% \begin{macrocode}
+\DeclareMathSymbol\ch@irxboxempty{\mathord}{AMSa}{"03}
+\theoremheaderfont{\scshape}
+\theorembodyfont{\normalfont}
+\theoremstyle{nonumberplain}
+\theoremseparator{:}
+\theoremsymbol{\hbox{$\ch@irxboxempty$}}
+\newtheorem{proof}{\proofch@irxname}
+\theoremsymbol{\hbox{$\triangledown$}}
+\newtheorem{subproof}{\proofch@irxname}
+% \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+% \begin{environment}{hint}
+%
+% The hint environment, without numbers and very small.
+%
+% \begin{macrocode}
+\newenvironment{hint}{\par\footnotesize\medskip\noindent\hintch@irxname: }{\par\smallskip\normalsize}
+% \end{macrocode}
+%
+% \end{environment}
+%
+% In the theorem titles only the ordinary text in boldface, not the
+% math formulas. Nice hack from David Carlisle via tex.stackexchange
+%
+% \begin{macrocode}
+\def\theorem@checkbold{}
+% \end{macrocode}
+%
+% To make these new environments compatible with the |\autoref|
+% macro of the |hyperref|-package, we need the following
+% |\*autorefname| commands.
+% \begin{macrocode}
+\providecommand{\claimautorefname}{\claimch@irxname}
+\providecommand{\conjectureautorefname}{\conjecturech@irxname}
+\providecommand{\conventionautorefname}{\conventionch@irxname}
+\providecommand{\corollaryautorefname}{\corollarych@irxname}
+\providecommand{\definitionautorefname}{\definitionch@irxname}
+\providecommand{\lemmaautorefname}{\lemmach@irxname}
+\providecommand{\propositionautorefname}{\propositionch@irxname}
+\providecommand{\exampleautorefname}{\examplech@irxname}
+\providecommand{\notationautorefname}{\notationch@irxname}
+\providecommand{\questionautorefname}{\questionch@irxname}
+\providecommand{\remarkautorefname}{\remarkch@irxname}
+\providecommand{\exerciseautorefname}{\exercisech@irxname}
+\providecommand{\thmautorefname}{\theoremch@irxname}
+\providecommand{\maintheoremautorefname}{\maintheoremch@irxname}
+% \end{macrocode}
+%
+% To redefine |\*autorefname| commands which are predefined in |hyperref|,
+% we need a little hack: to allow that |hyperref| is loaded after |nchairx|
+% we put these commands at the beginning of the document part.
+% \begin{macrocode}
+\AtBeginDocument{
+% \end{macrocode}
+% Now we fill the |\*autorefname| macros with the language specific names,
+% in order to guarantee compatibility with |babel|.
+% First in english
+% \begin{macrocode}
+\@ifpackagewith{babel}{english,strings}{%
+ \StartBabelCommands{english}{extras}
+ \SetString{\chapterautorefname}{\chapterch@irxname}
+ \SetString{\sectionautorefname}{\sectionch@irxname}
+ \SetString{\subsectionautorefname}{\subsectionch@irxname}
+ \SetString{\subsubsectionautorefname}{\subsubsectionch@irxname}
+ \SetString{\theoremautorefname}{\theoremch@irxname}
+ \EndBabelCommands
+}{}
+% \end{macrocode}
+% then in german
+% \begin{macrocode}
+\@ifpackagewith{babel}{german,strings}{%
+ \StartBabelCommands{german}{extras}
+ \SetString{\chapterautorefname}{\chapterch@irxname}
+ \SetString{\sectionautorefname}{\sectionch@irxname}
+ \SetString{\subsectionautorefname}{\subsectionch@irxname}
+ \SetString{\subsubsectionautorefname}{\subsubsectionch@irxname}
+ \SetString{\theoremautorefname}{\theoremch@irxname}
+ \EndBabelCommands
+}{}
+% \end{macrocode}
+% Close the |\AtBeginDocument| command.
+% \begin{macrocode}
+}
+% \end{macrocode}
+%
+%
+% \begin{environment}{claimlist}
+% \begin{environment}{conjecturelist}
+% \begin{environment}{conventionlist}
+% \begin{environment}{corollarylist}
+% \begin{environment}{definitionlist}
+% \begin{environment}{lemmalist}
+% \begin{environment}{propositionlist}
+% \begin{environment}{theoremlist}
+% \begin{environment}{prooflist}
+%
+% Next, we define list environments for all the above types of
+% math environments. They are build using the |enumitem| package
+% and use a rather compact appearance. Each math environment has
+% its own list, though all of them are equal at the moment.
+%
+% \begin{macrocode}
+\newenvironment{claimlist}[1][]{%
+ \enumerate[%
+ topsep = 0.2em,
+ partopsep = 0em,
+ itemsep = 0.2em,
+ parsep = 0.1em,
+ label=\textit{\roman*.)},
+ #1%
+ ]%
+ }%
+ {\endenumerate}
+\newenvironment{conjecturelist}[1][]{%
+ \enumerate[%
+ topsep = 0.2em,
+ partopsep = 0em,
+ itemsep = 0.2em,
+ parsep = 0.1em,
+ label=\textit{\roman*.)},
+ #1%
+ ]%
+ }%
+ {\endenumerate}
+\newenvironment{conventionlist}[1][]{%
+ \enumerate[%
+ topsep = 0.2em,
+ partopsep = 0em,
+ itemsep = 0.2em,
+ parsep = 0.1em,
+ label=\textit{\roman*.)},
+ #1%
+ ]%
+}%
+{\endenumerate}
+\newenvironment{corollarylist}[1][]{%
+ \enumerate[%
+ topsep = 0.2em,
+ partopsep = 0em,
+ itemsep = 0.2em,
+ parsep = 0.1em,
+ label=\textit{\roman*.)},
+ #1%
+ ]
+ }%
+ {\endenumerate}
+\newenvironment{definitionlist}[1][]{%
+ \enumerate[%
+ topsep = 0.2em,
+ partopsep = 0em,
+ itemsep = 0.2em,
+ parsep = 0.1em,
+ label=\textit{\roman*.)},
+ #1%
+ ]
+ }%
+ {\endenumerate}
+\newenvironment{lemmalist}[1][]{%
+ \enumerate[%
+ topsep = 0.2em,
+ partopsep = 0em,
+ itemsep = 0.2em,
+ parsep = 0.1em,
+ label=\textit{\roman*.)},
+ #1%
+ ]
+ }%
+ {\endenumerate}
+\newenvironment{propositionlist}[1][]{%
+ \enumerate[%
+ topsep = 0.2em,
+ partopsep = 0em,
+ itemsep = 0.2em,
+ parsep = 0.1em,
+ label=\textit{\roman*.)},
+ #1%
+ ]
+ }%
+ {\endenumerate}
+\newenvironment{theoremlist}[1][]{%
+ \enumerate[%
+ topsep = 0.2em,
+ partopsep = 0em,
+ itemsep = 0.2em,
+ parsep = 0.1em,
+ label=\textit{\roman*.)},
+ #1%
+ ]
+ }%
+ {\endenumerate}
+\newenvironment{prooflist}[1][]{%
+ \enumerate[%
+ topsep = 0.2em,
+ partopsep = 0em,
+ itemsep = 0.2em,
+ parsep = 0.1em,
+ label=\textit{\roman*.)},
+ #1%
+ ]
+}%
+{\endenumerate}
+% \end{macrocode}
+%
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+%
+% \begin{environment}{examplelist}
+% \begin{environment}{notationlist}
+% \begin{environment}{questionlist}
+% \begin{environment}{remarklist}
+%
+% Also for the following environments we have lists:
+%
+% \begin{macrocode}
+\newenvironment{examplelist}[1][]{%
+ \enumerate[%
+ topsep = 0.2em,
+ partopsep = 0em,
+ itemsep = 0.2em,
+ parsep = 0.1em,
+ label=\textit{\roman*.)},
+ #1%
+ ]%
+ }%
+ {\endenumerate}
+\newenvironment{notationlist}[1][]{%
+ \enumerate[%
+ topsep = 0.2em,
+ partopsep = 0em,
+ itemsep = 0.2em,
+ parsep = 0.1em,
+ label=\textit{\roman*.)},
+ #1%
+ ]%
+ }%
+ {\enumerate}
+\newenvironment{questionlist}[1][]{%
+ \enumerate[%
+ topsep = 0.2em,
+ partopsep = 0em,
+ itemsep = 0.2em,
+ parsep = 0.1em,
+ label=\textit{\roman*.)},
+ #1%
+ ]%
+ }%
+ {\endenumerate}
+\newenvironment{remarklist}[1][]{%
+ \enumerate[%
+ topsep = 0.2em,
+ partopsep = 0em,
+ itemsep = 0.2em,
+ parsep = 0.1em,
+ label=\textit{\roman*.)},
+ #1%
+ ]%
+ }%
+ {\endenumerate}
+% \end{macrocode}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+%
+% \begin{environment}{exerciselist}
+%
+% For the exercises we also need a separate list.
+%
+% \begin{macrocode}
+\newenvironment{exerciselist}[1][]{%
+ \enumerate[%
+ topsep = 0.2em,
+ partopsep = 0em,
+ itemsep = 0.2em,
+ parsep = 0.1em,
+ label=\textit{\roman*.)},
+ #1%
+ ]%
+ }%
+ {\endenumerate}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{maintheoremlist}
+%
+% And the main theorem might also consist of several parts which
+% we want to number.
+%
+% \begin{macrocode}
+\newenvironment{maintheoremlist}[1][]{%
+ \enumerate[%
+ topsep = 0.2em,
+ partopsep = 0em,
+ itemsep = 0.2em,
+ parsep = 0.1em,
+ label=\textit{\roman*.)},
+ #1%
+ ]%
+ }%
+ {\endenumerate}
+% \end{macrocode}
+% \end{environment}
+%
+% We also provide compact versions of the lists in general (similar to
+% the |paralist| package)
+%
+% \begin{environment}{cptenum}
+% \begin{macrocode}
+\newenvironment{cptenum}[1][]{%
+ \enumerate[%
+ topsep = 0.2em,
+ partopsep = 0em,
+ itemsep = 0.2em,
+ parsep = 0.1em,
+ label=\textit{\roman*.)},
+ #1%
+ ]
+ }%
+ {\endenumerate}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{cptitem}
+% \begin{macrocode}
+\newenvironment{cptitem}[1][]{%
+ \begin{itemize}[%
+ topsep = 0.2em,
+ partopsep = 0em,
+ itemsep = 0.2em,
+ parsep = 0.1em,
+ #1%
+ ]
+ }%
+ {\end{itemize}}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{cptdesc}
+% \begin{macrocode}
+\newenvironment{cptdesc}[1][]{%
+ \begin{description}[%
+ topsep = 0.2em,
+ partopsep = 0em,
+ itemsep = 0.2em,
+ parsep = 0.1em,
+ #1%
+ ]
+ }%
+ {\end{description}}
+% \end{macrocode}
+% \end{environment}
+%
diff --git a/macros/latex/contrib/nchairx/source/chairxEnvDoc.dtx b/macros/latex/contrib/nchairx/source/chairxEnvDoc.dtx
new file mode 100644
index 0000000000..a3ca72adcd
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxEnvDoc.dtx
@@ -0,0 +1,143 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the documentation of the environment handling.
+%
+% Macros have to be described by (delete the first %)
+% \DescribeMacro{\macro}
+% Description and usage of the macro.
+%
+% The description will appear in the usage
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The implementation of the macros defined here has to be written in
+% chairxEnv.dtx
+%\fi
+%
+% \subsubsection{The Predefined Environments}
+%\label{sec:doc_PredefinedEnvironments}
+%
+% The following theorem-like environments will be defined as standards
+% as they will be needed anyway. We use the |ntheorem| package
+% to do this and load it automatically with several options. Hence you
+% should not load it by hand with other options.
+%
+%
+\DescribeEnv{claim}
+\DescribeEnv{corollary}
+\DescribeEnv{definition}
+\DescribeEnv{lemma}
+\DescribeEnv{proposition}
+\DescribeEnv{theorem}
+% As usually needed we define the standard mathematical environments
+% |claim|, |corollary|, |definition|, |lemma|, |proposition|, and
+% |theorem| with a common appearance: titles in bold, body in
+% italic. The numbering will use a common counter including the
+% section counter.
+%
+%
+\DescribeEnv{conjecture}
+\DescribeEnv{convention}
+\DescribeEnv{example}
+\DescribeEnv{notation}
+\DescribeEnv{question}
+\DescribeEnv{remark}
+% The environments |conjecture|, |example|, |notation|, |question|,
+% and |remark| use the same counter as the above ones but have a body
+% in roman.
+%
+%
+\DescribeEnv{exercise}
+% The environment |exercise| has its own counter including the section
+% and is set in roman.
+%
+%
+\DescribeEnv{maintheorem}
+% We have a |maintheorem| environment which has no numbering at all:
+% this is useful for papers where there is one and only one main
+% theorem you want to place at a particular place, say in the
+% introduction.
+%
+%
+\DescribeEnv{nn<environment>}
+% For all these environments there is a non-numbered version |nn<environment>|.
+% So one can use e.g. |\begin{nntheorem} ... \end{nntheorem}| to get the theorem
+% environment as above, but without numbering.
+%
+% These environments are compatible with |autoref|. Hence using
+% \begin{quote}
+% |\autoref{label_to_<env-name>}|
+% \end{quote}
+% will give a linked reference to the
+% environment labelled with
+% \begin{quote}
+% |\label{label_to_<env-name>}|
+% \end{quote}
+% with a prefix depending on the type of environment. This also works
+% for chapters, sections, etc.
+% For non-numbered environments one should still use |\ref|.
+%
+%
+\DescribeEnv{proof}
+\DescribeEnv{subproof}
+% We have a |proof| and a |subproof| environment with an automatic
+% tombstone sign at their ends. The location of the tombstone signs is
+% maintained by the |ntheorem| package in a really good way. The
+% |proof| environment finishes with a box sign, the subproof with
+% $\triangledown$. The only catch is that one should not use the
+% commands |\[| and |\]| for equations without numbers in the proof
+% environment anymore: this causes errors as soon as one wants to
+% place a |\tag{$*$}| for these equations. Instead, one can achieve
+% this as follows:
+% \begin{center}
+% \begin{tabular}[l]{p{0.8\textwidth}}
+% |\begin{equation*}| \\
+% | E = mc^2|\\
+% | \tag{$*$}|\\
+% |\end{equation*}|
+% \end{tabular}
+% \end{center}
+% It seems that also some float environments (like |figure| or
+% |table|) at the end of the proof confuse the |ntheorem| package: you
+% should avoid this by placing the float outside of the |proof|
+% environment.
+%
+%
+\DescribeEnv{hint}
+% We have a |hint| environment to be used inside exercises: set in a
+% very small font and without numbering.
+%
+%
+\DescribeEnv{<environment>list}
+% We have special list environments |claimlist|, |conjecturelist|, |conventionlist|,
+% |corollarylist|, |definitionlist|, |examplelist|, |exerciselist|,
+% |lemmalist|, |maintheoremlist|, |notationlist|, |propositionlist|,
+% |questionlist|, |remarklist|, |theoremlist| and |prooflist| corresponding to the
+% above mathematical environments. They allow to control the
+% appearance of the item lists individually. The items will be
+% numbered in italic and can be referred to using the command
+% |\ref{item:MyLabel}|. Currently, all the lists are styled the same
+% way, but this can individually be changed easily. The lists are
+% build using the |enumitem| package.
+% You can use all options that are available by the |enumitem| package
+% also for these lists.
+%
+%
+% \DescribeEnv{cptenum}
+% \DescribeEnv{cptitem}
+% \DescribeEnv{cptdesc}
+% Beside these mathematical environments we also provide generic
+% compact lists: |cptenum|, |cptitem|, and |cptdesc| similar to the
+% lists from the |paralist| package.
+%
diff --git a/macros/latex/contrib/nchairx/source/chairxLogo.dtx b/macros/latex/contrib/nchairx/source/chairxLogo.dtx
new file mode 100644
index 0000000000..e645d2fe2c
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxLogo.dtx
@@ -0,0 +1,48 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the implementation of the environment handling.
+%
+% Macros have to be described by (delete the first %)
+% %\begin{macro}{\macro}
+% % Description of the implementation.
+% % \begin{macrocode}
+%\newcommand{\macro}[] {}
+% % \end{macrocode}
+% %\end{macro}
+%
+% The implementation and description will appear in the implementation
+% part of the documentation. Use \subsubsection{} etc. for
+% structuring.
+%
+% The documentation of the macros defined here has to be written in
+% chairxEnvDoc.dtx
+% \fi
+%
+% The header logo with textwidth
+%
+%\begin{macro}{\nchairxheader}
+% \begin{macrocode}
+\newcommand{\nchairxheader}{\includegraphics[width=\textwidth]{nchairxheader.pdf}}
+% \end{macrocode}
+%\end{macro}
+%
+% The logo with variable width
+%
+%\begin{macro}{\nchairxlogo}
+% \begin{macrocode}
+\newcommand{\nchairxlogo}[1]{\includegraphics[width=#1]{nchairxlogo.pdf}}
+% \end{macrocode}
+%\end{macro}
+% \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxLogoDoc.dtx b/macros/latex/contrib/nchairx/source/chairxLogoDoc.dtx
new file mode 100644
index 0000000000..709e474f30
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxLogoDoc.dtx
@@ -0,0 +1,45 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the documentation of the environment handling.
+%
+% Macros have to be described by (delete the first %)
+% \DescribeMacro{\macro}
+% Description and usage of the macro.
+%
+% The description will appear in the usage
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The implementation of the macros defined here has to be written in
+% chairxEnv.dtx
+%\fi
+%
+% \DescribeMacro{\nchairxheader}
+% The \textsf{nChairX} package provides two macros for your personal
+% logo. With
+% \begin{center}
+% \begin{tabular}[l]{p{0.8\textwidth}}
+% \verb|\nchairxheader|
+% \end{tabular}
+% \end{center}
+% you obtain a header logo with the full textwidth. It uses the file
+% |nchairxheader.pdf| which has to be in your \LaTeX{} search path.
+%
+% \DescribeMacro{\nchairxlogo}
+% The other logo \verb|\nchairxlogo| is smaller and can be used with a
+% specific width as argument. It includes the file |nchairxlogo.pdf| which
+% has to be in the search path as well. The argument is the width in a valid
+% \LaTeX{} unit producing e.g. \nchairxlogo{3em}.
+%
+% \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxmath.dtx b/macros/latex/contrib/nchairx/source/chairxmath.dtx
new file mode 100644
index 0000000000..f0a7660d52
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmath.dtx
@@ -0,0 +1,184 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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
+%
+%\iffalse
+%<*chairxmath>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{chairxmath}
+ [2021/07/29 v1.0.0 First major release]
+
+%</chairxmath>
+%
+%<*driver>
+\documentclass{ltxdoc}
+
+\usepackage{chairxmath}
+\usepackage{xcolor}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{ifdraft}
+\usepackage{gitinfo2}
+\usepackage[linktoc=all]{hyperref}
+
+\EnableCrossrefs
+
+\CodelineIndex
+
+\RecordChanges
+
+% ˆˆA suppress indentation
+\setlength{\parindent}{0pt}
+
+\begin{document}
+ \DocInput{chairxmath.dtx}
+\end{document}
+%</driver>
+%\fi
+%
+% \CheckSum{1540}
+%
+% \changes{v0.1}{2018/02/27}{Initial test}
+% \changes{v0.9}{2019/02/21}{First official release}
+% \changes{v1.0.0}{2021/07/29}{First major release}
+%
+% \GetFileInfo{chairxmath.sty}
+%
+% \title{The \textsf{ChairX Math} package}
+% \author{ChairX \\
+% \ifdraft{Last changes by \gitAuthorName{} on \gitAuthorDate \\ }
+% \ifdraft{Git revision of nchairx:}
+% \ifdraft{\texttt{\gitAbbrevHash{}} {\gitReferences{}} \\ }
+% \ifdraft{}
+% Version \fileversion{} (\filedate) \\
+% \texttt{marvin.dippell@mathematik.uni-wuerzburg.com}}
+%
+% \maketitle
+%
+% \begin{abstract}
+% This is a part of the new ChairX package providing the famous
+% ChairX macros for mathematics.
+% \end{abstract}
+%
+% \setcounter{tocdepth}{2}
+% \tableofcontents
+%
+% \section{Introduction}
+%
+% This package defines the new package |chairxmath|. It can be used as
+% a standalone version of the math macros from |nchairx| if the other
+% settings and defaults of |nchairx| are not needed or wanted.
+%
+% \section{Usage}
+%
+% \subsection{Fonts}
+% \input{chairxmathFontsDoc.dtx}
+%
+% \subsection{New Delimiters}
+% \input{chairxmathDelimitersDoc.dtx}
+%
+% \subsection{General Mathematics Macros}
+% \input{chairxmathGeneralDoc.dtx}
+%
+% \subsection{Algebra}
+% \input{chairxmathAlgebraDoc.dtx}
+%
+% \subsection{Analysis}
+% \input{chairxmathAnalysisDoc.dtx}
+%
+% \subsection{Category Theory}
+% \input{chairxmathCategoryDoc.dtx}
+%
+% \subsection{Differential Geometry}
+% \input{chairxmathDiffgeoDoc.dtx}
+%
+% \subsection{Linear Algebra}
+% \input{chairxmathLinalgDoc.dtx}
+%
+% \subsection{Statistics}
+% \input{chairxmathStatisticsDoc.dtx}
+%
+% \subsection{Topology}
+% \input{chairxmathTopologyDoc.dtx}
+%
+% \StopEventually{\PrintIndex \PrintChanges}
+%
+% \section{Implementation}
+% The following packages are required:
+% \begin{macrocode}
+\RequirePackage{amsmath}
+% \end{macrocode}
+% \begin{macrocode}
+\RequirePackage{amssymb}
+% \end{macrocode}
+% \begin{macrocode}
+\RequirePackage{mathtools}
+% \end{macrocode}
+% Grab only those fonts from stmry which we actually need
+% \begin{macrocode}
+\DeclareSymbolFont{stmry}{U}{stmry}{m}{n}
+\SetSymbolFont{stmry}{bold}{U}{stmry}{b}{n}
+% \end{macrocode}
+% \begin{macrocode}
+\RequirePackage{xkeyval}
+% \end{macrocode}
+% Used for allowing key-value pairs as options.
+% \begin{macrocode}
+\RequirePackage{tensor}
+% \end{macrocode}
+% The |suffix| package allows to define $*$-versions of macros.
+% \begin{macrocode}
+\RequirePackage{suffix}
+% \end{macrocode}
+%
+%
+% In order to get the package options for |nchairx| working, the following needs to be defined.
+% \begin{macrocode}
+\newif\if@loadmath \@loadmathtrue
+% \end{macrocode}
+%
+% \subsection{Fonts}
+% \input{chairxmathFonts.dtx}
+%
+% \subsection{New Delimiters}
+% \input{chairxmathDelimiters.dtx}
+%
+% \subsection{General Mathematics Macros}
+% \input{chairxmathGeneral.dtx}
+%
+%\subsection{Algebra}
+%\input{chairxmathAlgebra.dtx}
+%
+%\subsection{Analysis}
+%\input{chairxmathAnalysis.dtx}
+%
+%\subsection{Category Theory}
+%\input{chairxmathCategory.dtx}
+%
+%\subsection{Differential Geometry}
+%\input{chairxmathDiffgeo.dtx}
+%
+%\subsection{Linear Algebra}
+%\input{chairxmathLinalg.dtx}
+%
+%\subsection{Statistics}
+%\input{chairxmathStatistics.dtx}
+%
+%\subsection{Topology}
+%\input{chairxmathTopology.dtx}
+%
+%
+% \Finale
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxmath.ins b/macros/latex/contrib/nchairx/source/chairxmath.ins
new file mode 100644
index 0000000000..5e62dc64e9
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmath.ins
@@ -0,0 +1,59 @@
+%%
+%% Copyright (C) 2018 by ChairX
+%%
+%% 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
+\usedir{tex/latex/chairxmath}
+\preamble
+This is a generated file.
+
+Copyright (C) 2018 by ChairX
+
+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.
+\endpreamble
+
+\generate{\file{chairxmath.sty}{
+ \from{chairxmath.dtx}{chairxmath}
+ \from{chairxmathFonts.dtx}{chairxmathFonts}
+ \from{chairxmathDelimiters.dtx}{chairxmathDelimiters}
+ \from{chairxmathDecoration.dtx}{chairxmathDecoration}
+ \from{chairxmathGeneral.dtx}{chairxmathGeneral}
+ \from{chairxmathAlgebra.dtx}{chairxmathAlgebra}
+ \from{chairxmathAnalysis.dtx}{chairxmathAnalysis}
+ \from{chairxmathCategory.dtx}{chairxmathCategory}
+ \from{chairxmathDiffgeo.dtx}{chairxmathDiffgeo}
+ \from{chairxmathLinalg.dtx}{chairxmathLinalg}
+ \from{chairxmathStatistics.dtx}{chairxmathStatistics}
+ \from{chairxmathTopology.dtx}{chairxmathTopology}
+ }}
+\Msg{*********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space chairxmath.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file chairxmath.dtx}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*********************************************************}
+\endbatchfile \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxmathAlgebra.dtx b/macros/latex/contrib/nchairx/source/chairxmathAlgebra.dtx
new file mode 100644
index 0000000000..548dc6dcd2
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathAlgebra.dtx
@@ -0,0 +1,383 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the implementation of all algebra related macros.
+%
+% Macros have to be described by (delete the first %)
+% %\begin{macro}{\macro}
+% % Description of the implementation.
+% % \begin{macrocode}
+%\newcommand{\macro}[] {}
+% % \end{macrocode}
+% %\end{macro}
+%
+% The implementation and description will appear in the implementation
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The documentation of the macros defined here has to be written in
+% chairxmathAlgebraDoc.dtx
+%\fi
+%
+% First we check of macros should be included:
+% \begin{macrocode}
+\if@loadmath
+% \end{macrocode}
+%
+%\subsubsection{Fonts for Rings and Things}
+%
+%\begin{macro}{\field}
+% \begin{macrocode}
+\newcommand{\field}[1]{\ch@irxfieldfont{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ring}
+% \begin{macrocode}
+\newcommand{\ring}[1]{\ch@irxringfont{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\group}
+% \begin{macrocode}
+\newcommand{\group}[1]{\ch@irxgroupfont{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\algebra}
+% \begin{macrocode}
+\newcommand{\algebra}[1]{\ch@irxalgebrafont{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\module}
+% \begin{macrocode}
+\newcommand{\module}[1]{\ch@irxmodulefont{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\liealg}
+% \begin{macrocode}
+\newcommand{\liealg}[1]{\ch@irxliealgfont{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\MC}
+% \begin{macrocode}
+\newcommand{\MC}{{\scriptscriptstyle\ch@irxscriptfont{MC}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\gerstenhaber}
+% \begin{macrocode}
+\newcommand{\gerstenhaber}[1] {\ch@irxgerstenhaberfont{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+% \subsubsection{Some Symbols needed in Algebra}
+%
+%\begin{macro}{\Pol}
+% \begin{macrocode}
+\newcommand{\Pol}{\ch@irxoperatorfont{Pol}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\lmult}
+% \begin{macrocode}
+\newcommand{\lmult}{\operatorname{\ch@irxoperatorfont{\ell}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\rmult}
+% \begin{macrocode}
+\newcommand{\rmult}{\operatorname{\ch@irxoperatorfont{r}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Lmult}
+% \begin{macrocode}
+\newcommand{\Lmult}{\operatorname{\ch@irxoperatorfont{L}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Rmult}
+% \begin{macrocode}
+\newcommand{\Rmult}{\operatorname{\ch@irxoperatorfont{R}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Center}
+% Needs |mathrsfs| package.
+% \begin{macrocode}
+\newcommand{\Center}{\mathscr{Z}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ad}
+% \begin{macrocode}
+\newcommand{\ad}{\operatorname{\ch@irxoperatorfont{ad}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Ad}
+% \begin{macrocode}
+\newcommand{\Ad}{\operatorname{\ch@irxoperatorfont{Ad}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Conj}
+% \begin{macrocode}
+\newcommand{\Conj}{\operatorname{\ch@irxoperatorfont{Conj}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\acts}
+% \begin{macrocode}
+\newcommand{\acts}{\mathbin{\triangleright}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\racts}
+% \begin{macrocode}
+\newcommand{\racts}{\mathbin{\triangleleft}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Char}
+% \begin{macrocode}
+\newcommand{\Char}{\ch@irxoperatorfont{char}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\modulo}
+% \begin{macrocode}
+\newcommand{\modulo}{\operatorname{\ch@irxoperatorfont{mod}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Clifford}
+% \begin{macrocode}
+\newcommand{\Clifford}{\operatorname{\ch@irxoperatorfont{Cl}}}
+% \end{macrocode}
+%
+%\end{macro}
+%\begin{macro}{\cClifford}
+% \begin{macrocode}
+\newcommand{\cClifford}{\operatorname{\mathbb{C}\ch@irxoperatorfont{l}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Der}
+% \begin{macrocode}
+\newcommand{\Der}{\operatorname{\ch@irxoperatorfont{Der}}}
+\WithSuffix\newcommand\Der*{\decorate[^*]{\textrm{-}\Der}{}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\InnDer}
+% \begin{macrocode}
+\newcommand{\InnDer}{\operatorname{\ch@irxoperatorfont{InnDer}}}
+\WithSuffix\newcommand\InnDer*{\decorate[^*]{\textrm{-}\InnDer}{}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\OutDer}
+% \begin{macrocode}
+\newcommand{\OutDer}{\operatorname{\ch@irxoperatorfont{OutDer}}}
+\WithSuffix\newcommand\OutDer*{\decorate[^*]{\textrm{-}\OutDer}{}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\InnAut}
+% \begin{macrocode}
+\newcommand{\InnAut}{\operatorname{\ch@irxoperatorfont{InnAut}}}
+\WithSuffix\newcommand\InnAut*{\decorate[^*]{\textrm{-}\InnAut}{}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\OutAut}
+% \begin{macrocode}
+\newcommand{\OutAut}{\operatorname{\ch@irxoperatorfont{OutAut}}}
+\WithSuffix\newcommand\OutAut*{\decorate[^*]{\textrm{-}\OutAut}{}}
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macro}{\formal}
+% \begin{macrocode}
+\newcommand{\formal}[1]{\ch@irxllbbracket #1\ch@irxrrbbracket}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\laurent}
+% \begin{macrocode}
+\newcommand{\laurent}[1]{(\!(#1)\!)}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\sweedler}
+% \begin{macrocode}
+\newcommand{\sweedler}[1]{{\scriptscriptstyle(#1)}}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Categories from Algebra}
+%
+%\begin{macro}{\algebras}
+% \begin{macrocode}
+\newcommand{\algebras}{\categoryname{alg}}
+\WithSuffix\newcommand\algebras*{\decorate[^*]{\textrm{-}\algebras}{}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Algebras}
+% \begin{macrocode}
+\newcommand{\Algebras}{\categoryname{Alg}}
+\WithSuffix\newcommand\Algebras*{\decorate[^*]{\textrm{-}\Algebras}{}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\reps}
+% \begin{macrocode}
+\newcommand{\reps}{\categoryname{rep}}
+\WithSuffix\newcommand\reps*{\decorate[^*]{\textrm{-}\reps}{}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Reps}
+% \begin{macrocode}
+\newcommand{\Reps}{\categoryname{Rep}}
+\WithSuffix\newcommand\Reps*{\decorate[^*]{\textrm{-}\Reps}{}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\PoissonAlg}
+% \begin{macrocode}
+\newcommand{\PoissonAlg}{\categoryname{PoissonAlg}}
+\WithSuffix\newcommand\PoissonAlg*{\decorate[^*]{\textrm{-}\PoissonAlg}{}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\modules}
+% \begin{macrocode}
+\newcommand{\modules}{\categoryname{mod}}
+\WithSuffix\newcommand\modules*{\decorate[^*]{\textrm{-}\modules}{}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Leftmodules}
+% \begin{macrocode}
+\newcommand{\Leftmodules}[1]{{#1}\textsf{-}\categoryname{mod}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Rightmodules}
+% \begin{macrocode}
+\newcommand{\Rightmodules}[2][]{\categoryname{mod}_{#1}\textsf{-}{#2}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Modules}
+% \begin{macrocode}
+\newcommand{\Modules}{\categoryname{Mod}}
+\WithSuffix\newcommand\Modules*{\decorate[^*]{\textrm{-}\Modules}{}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LeftModules}
+% \begin{macrocode}
+\newcommand{\LeftModules}[1]{{#1}\textsf{-}\categoryname{Mod}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\RightModules}
+% \begin{macrocode}
+\newcommand{\RightModules}[2][]{\categoryname{Mod}_{#1}\textsf{-}{#2}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Bimodules}
+% \begin{macrocode}
+\newcommand{\Bimodules}{\categoryname{Bimod}}
+\WithSuffix\newcommand\Bimodules*{\decorate[^*]{\textrm{-}\Bimodules}{}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Rings}
+% \begin{macrocode}
+\newcommand{\Rings}{\categoryname{Ring}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Groups}
+% \begin{macrocode}
+\newcommand{\Groups}{\categoryname{Group}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Ab}
+% \begin{macrocode}
+\newcommand{\Ab}{\categoryname{Ab}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Lattices}
+% \begin{macrocode}
+\newcommand{\Lattices}{\categoryname{Lattice}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Sets}
+% \begin{macrocode}
+\newcommand{\Sets}{\categoryname{Set}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Vect}
+% \begin{macrocode}
+\newcommand{\Vect}{\categoryname{Vect}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\LieAlgs}
+% \begin{macrocode}
+\newcommand{\LieAlgs}{\categoryname{LieAlg}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Posets}
+% \begin{macrocode}
+\newcommand{\Posets}{\categoryname{Poset}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Directed}
+% \begin{macrocode}
+\newcommand{\Directed}{\categoryname{Directed}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\GSets}
+% \begin{macrocode}
+\newcommand{\GSets}[1][{G}]{{#1}\textrm{-}\Sets}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Groupoids}
+% \begin{macrocode}
+\newcommand{\Groupoids}{\categoryname{Groupoid}}
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macrocode}
+\fi
+% \end{macrocode} \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxmathAlgebraDoc.dtx b/macros/latex/contrib/nchairx/source/chairxmathAlgebraDoc.dtx
new file mode 100644
index 0000000000..f43cb7ae44
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathAlgebraDoc.dtx
@@ -0,0 +1,270 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the documentation of all algebra related macros.
+%
+% Macros have to be described by (delete the first %)
+% \DescribeMacro{\macro}
+% Description and usage of the macro.
+%
+% The description will appear in the usage
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The implementation of the macros defined here has to be written in
+% chairxmathAlgebra.dtx
+%\fi
+%
+%\subsubsection{Fonts for Rings and Things}
+%
+%\DescribeMacro{\field}
+% Font for rings |\field{R}|: $\field{R}$\\
+% Uses |fieldfont|.
+%
+%\DescribeMacro{\ring}
+% Font for rings |\ring{C}|: $\ring{C}$\\
+% Uses |ringfont|.
+%
+%\DescribeMacro{\group}
+% Font for particular (matrix) groups |\group{SO}(3)|: $\group{SO}(3)$\\
+% Uses |groupfont|.
+%
+%\DescribeMacro{\algebra}
+% Font for algebras |\algebra{A}|: $\algebra{A}$\\
+% Uses |algebrafont|.
+%
+%\DescribeMacro{\module}
+% Font for modules |\module{M}|: $\module{M}$\\
+% Uses |modulefont|.
+%
+%\DescribeMacro{\liealg}
+% Font for Lie algebras |\liealg{g}|: $\liealg{g}$\\
+% Uses |liealgfont|.
+%
+%\DescribeMacro{\MC}
+% MC for Maurer-Cartan as a tiny index |\mu_\MC \in \liealg{g}^1|: $\mu_\MC \in \liealg{g}^1$\\
+% Uses |scriptfont|.
+%
+%\DescribeMacro{\gerstenhaber}
+% Font for Gerstenhaber algebras |\gerstenhaber{G}|: $\gerstenhaber{G}$\\
+% Uses |gerstenhaberfont|.
+%
+%\subsubsection{Some Symbols needed in Algebra}
+%
+%\DescribeMacro{\Pol}
+% Polynomials and polynomial functions |\Pol(T^*Q)|: $\Pol(T^*Q)$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\lmult}
+% Left multiplications |\lmult_a|: $\lmult_a$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\rmult}
+% Right multiplications |\rmult_b|: $\rmult_b$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\Lmult}
+% Left multiplications |\Lmult_a|: $\Lmult_a$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\Rmult}
+% Right multiplications |\Rmult_b|: $\Rmult_b$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\Center}
+% Center |\Center(\algebra{A})|: $\Center(\algebra{A})$
+%
+%\DescribeMacro{\ad}
+% Adjoint action (infinitesimal) |\ad(a)|: $\ad(a)$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\Ad}
+% Adjoint action |\Ad_g|: $\Ad_g$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\Conj}
+% Conjugation |\Conj_g|: $\Conj_g$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\acts}
+% A generic (left) action map |g \acts a|: $g \acts a$
+%
+%\DescribeMacro{\racts}
+% A generic right action map |a \racts g|: $a \racts g$
+%
+%\DescribeMacro{\Char}
+% Characteristics of a field |\Char(\mathbb{k})|: $\Char(\mathbb{k})$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\modulo}
+% Yet another modulo |n \modulo 2|: $n \modulo 2$\\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Clifford}
+% Clifford algebra generated by a vector space and a bilinear form:
+% |\Clifford(V, h)|: $\Clifford(V, h)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\cClifford}
+% Complex Clifford algebra |\cClifford(V, h)|: $\cClifford(V, h)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Der}
+% ($*$-)Derivations |\Der(\algebra{A})|: $\Der(\algebra{A})$\\
+% |\Der*(\algebra{A})|: $\Der*(\algebra{A})$\\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\InnDer}
+% Inner ($*$-)derivations |\InnDer(\algebra{A})|: $\InnDer(\algebra{A})$\\
+% |\InnDer*(\algebra{A})|: $\InnDer*(\algebra{A})$\\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\OutDer}
+% Outer ($*$-)derivations |\OutDer(\algebra{A})|: $\OutDer(\algebra{A})$\\
+% |\OutDer*(\algebra{A})|: $\OutDer*(\algebra{A})$\\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\InnAut}
+% Inner ($*$-)automorphisms |\InnAut(\algebra{A})|: $\InnAut(\algebra{A})$\\
+% |\InnAut*(\algebra{A})|: $\InnAut*(\algebra{A})$\\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\OutAut}
+% Outer ($*$-)automorphisms |\OutAut(\algebra{A})|: $\OutAut(\algebra{A})$\\
+% |\OutAut*(\algebra{A})|: $\OutAut*(\algebra{A})$\\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\formal}
+% Formal power series in some variables |V\formal{\lambda}|:
+% $V \formal{\lambda}$
+%
+% \DescribeMacro{\laurent}
+% Formal Laurent series in some variables |V\laurent{\lambda}|:
+% $V \laurent{\lambda}$
+%
+% \DescribeMacro{\sweedler}
+% Smaller index for Sweedler notation in Hopf algebra theory \\
+% |\Delta(a) = a_\sweedler{1} \tensor a_\sweedler{2}|:
+% $\Delta(a) = a_\sweedler{1} \tensor a_\sweedler{2}$
+%
+%\subsubsection{Categories from Algebra}
+%
+%\DescribeMacro{\algebras}
+% Category of algebras |\algebras|: $\algebras$ \\
+% Category of $*$-algebras |\algebras*|: $\algebras*$ \\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\Algebras}
+% Category of unital algebras |\Algebras|: $\Algebras$ \\
+% Category of unital $*$-algebras |\Algebras*|: $\Algebras*$ \\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\reps}
+% Category of ($*$-)representations
+% |\reps_\algebra{C}(\algebra{B})|: $\reps_\algebra{C}(\algebra{B})$ \\
+% |\reps*_\algebra{C}(\algebra{B})|: $\reps*_\algebra{C}(\algebra{B})$ \\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\Reps}
+% Category of strongly non-degenerate ($^*$)-representations
+% |\Reps_\algebra{A}(\algebra{B})|:$\Reps_\algebra{A}(\algebra{B})$ \\
+% |\Reps*_\algebra{A}(\algebra{B})|:$\Reps*_\algebra{A}(\algebra{B})$ \\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\PoissonAlg}
+% Category of ($*$-)Poisson algebras |\PoissonAlg|: $\PoissonAlg$ \\
+% |\PoissonAlg*|: $\PoissonAlg*$ \\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\modules}
+% Category of (inner product) modules
+% |\modules_\algebra{A}(\algebra{B})|: $\modules_\algebra{A}(\algebra{B})$ \\
+% |\modules*_\algebra{A}(\algebra{B})|: $\modules*_\algebra{A}(\algebra{B})$ \\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\Leftmodules}
+% Category of left modules
+% |\Leftmodules{\algebra{A}}|: $\Leftmodules{\algebra{A}}$ \\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\Rightmodules}
+% Category of right modules with optional subscript
+% |\Rightmodules[\category{C}]{\algebra{A}}|: $\Rightmodules[\category{C}]{\algebra{A}}$ \\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\Modules}
+% Category of strongly non-degenerate (inner product) modules
+% |\Modules_\algebra{A}(\algebra{B})|: $\Modules_\algebra{A}(\algebra{B})$ \\
+% |\Modules*_\algebra{A}(\algebra{B})|: $\Modules*_\algebra{A}(\algebra{B})$ \\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\LeftModules}
+% Category of strongly non-degenerate left modules
+% |\LeftModules{\algebra{A}}|: $\LeftModules{\algebra{A}}$ \\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\RightModules}
+% Category of strongly non-degenerate right modules with optional subscript
+% |\RightModules{\algebra{A}}|: $\RightModules{\algebra{A}}$ or
+% |\RightModules[\category{C}]{\algebra{A}}|: $\RightModules[\category{C}]{\algebra{A}}$\\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\Bimodules}
+% Category of (inner product) bimodules
+% |\Bimodules(\algebra{A},\algebra{B})|: $\Bimodules(\algebra{A},\algebra{B})$ \\
+% |\Bimodules*(\algebra{A},\algebra{B})|: $\Bimodules*(\algebra{A},\algebra{B})$ \\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\Rings}
+% Category of unital rings (meant to be associative) |\Rings|: $\Rings$ \\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\Groups}
+% Category of groups |\Groups|: $\Groups$ \\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\Ab}
+% Category of abelian groups |\Ab|: $\Ab$ \\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\Lattices}
+% Category of lattices |\Lattices|: $\Lattices$ \\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\Sets}
+% Category of sets |\Sets|: $\Sets$ \\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\Vect}
+% Category of vector spaces |\Vect|: $\Vect$ \\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\LieAlgs}
+% Category of Lie algebras |\LieAlgs|: $\LieAlgs$ \\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\Posets}
+% Category of partially ordered sets |\Posets|: $\Posets$ \\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\Directed}
+% Category of directed sets |\Directed|: $\Directed$ \\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\GSets}
+% Category of $G$-Sets |\GSets|: $\GSets$ and |\Gsets[H]|: $\GSets[H]$ \\
+% Uses |categorynamefont|.
+%
+%\DescribeMacro{\Groupoids}
+% Category of groupoids |\Groupoids|: $\Groupoids$ \\
+% Uses |categorynamefont|. \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxmathAnalysis.dtx b/macros/latex/contrib/nchairx/source/chairxmathAnalysis.dtx
new file mode 100644
index 0000000000..afe1848c9c
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathAnalysis.dtx
@@ -0,0 +1,456 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the implementation of all analysis related macros .
+%
+% Macros have to be described by (delete the first %)
+% %\begin{macro}{\macro}
+% % Description of the implementation.
+% % \begin{macrocode}
+%\newcommand{\macro}[] {}
+% % \end{macrocode}
+% %\end{macro}
+%
+% The implementation and description will appear in the implementation
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The documentation of the macros defined here has to be written in
+% chairxmathAnalysisDoc.dtx
+%\fi
+%
+% First we check of macros should be included:
+% \begin{macrocode}
+\if@loadmath
+% \end{macrocode}
+%
+% \subsubsection{General Analysis} \label{sec:GeneralMacrosAnalysis}
+%
+%\begin{macro}{\vol}
+% \begin{macrocode}
+\newcommand{\vol}{\ch@irxoperatorfont{vol}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\complete}
+% \begin{macrocode}
+\newcommand{\complete}[1]{\widehat{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Ball}
+% \begin{macrocode}
+\newcommand{\Ball}{\ch@irxoperatorfont{B}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\abs}
+% \begin{macrocode}
+\DeclarePairedDelimiter{\abs}{\lvert}{\rvert}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\norm}
+% \begin{macrocode}
+\DeclarePairedDelimiter{\norm}{\lVert}{\rVert}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\supnorm}
+% \begin{macrocode}
+\newcommand{\@supnormstar}[1]{\norm*{#1}_\infty}
+\newcommand{\@supnormnostar}[2][]{\norm[#1]{#2}_\infty}
+\newcommand{\supnorm}{\@ifstar\@supnormstar\@supnormnostar}
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macro}{\expands}
+% \begin{macrocode}
+\newcommand{\expands}[1][2.5]{\mathrel{\scalebox{#1}[1.1]{$\sim$}}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Pseudodifferential Operators}
+%
+% \begin{macro}{\std}
+% \begin{macrocode}
+\newcommand{\std}{{\scriptscriptstyle{\ch@irxscriptfont{std}}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Weyl}
+% \begin{macrocode}
+\newcommand{\Weyl}{{\scriptscriptstyle{\ch@irxscriptfont{Weyl}}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Op}
+% \begin{macrocode}
+\newcommand{\Op}{\operatorname{Op}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Opstd}
+% \begin{macrocode}
+\newcommand{\Opstd}{\operatorname{Op}_\std}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\OpWeyl}
+% \begin{macrocode}
+\newcommand{\OpWeyl}{\operatorname{Op}_\Weyl}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%\subsubsection{Function Spaces}
+%
+% \begin{macro}{\spacename}
+% \begin{macrocode}
+\newcommand{\spacename}[1]{\ch@irxspacefont{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+%\begin{macro}{\Bounded}
+% \begin{macrocode}
+\newcommand{\Bounded}{\ch@irxspacefont{B}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Continuous}
+% \begin{macrocode}
+\newcommand{\Continuous}{\ch@irxspacefont{C}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Contbound}
+% \begin{macrocode}
+\newcommand{\Contbound}{\Continuous_{\mathrm{b}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Fun}
+% \begin{macrocode}
+\newcommand{\Fun}[1][k]{\ch@irxspacefont{C}^{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Cinfty}
+% \begin{macrocode}
+\newcommand{\Cinfty}{\Fun[\infty]}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Comega}
+% \begin{macrocode}
+\newcommand{\Comega}{\Fun[\omega]}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Holomorphic}
+% \begin{macrocode}
+\newcommand{\Holomorphic}{\ch@irxspacefont{O}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\AntiHolomorphic}
+% \begin{macrocode}
+\newcommand{\AntiHolomorphic}{\cc{\Holomorphic}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Schwartz}
+% \begin{macrocode}
+\newcommand{\Schwartz}{\ch@irxspacefont{S}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Riemann}
+% \begin{macrocode}
+\newcommand{\Riemann}{\ch@irxspacefont{R}}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\subsubsection{Locally Convex Spaces}
+%
+%\begin{macro}{\singsupp}
+% \begin{macrocode}
+\newcommand{\singsupp}{\operatorname{sing\,supp}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\seminorm}
+% \begin{macrocode}
+\newcommand{\seminorm}[1]{\mathrm{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ord}
+% \begin{macrocode}
+\newcommand{\ord}{\operatorname{ord}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\conv}
+% \begin{macrocode}
+\newcommand{\conv}{\operatorname{conv}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\extreme}
+% \begin{macrocode}
+\newcommand{\extreme}{\operatorname{extreme}}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\subsubsection{Hilbert Spaces}
+%
+%\begin{macro}{\hilbert}
+% \begin{macrocode}
+\newcommand{\hilbert}[1]{\ch@irxhilbertfont{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\prehilb}
+% \begin{macrocode}
+\newcommand{\prehilb}[1]{\ch@irxprehilbfont{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Adjointable}
+% \begin{macrocode}
+\newcommand{\Adjointable}[1][{}]{\mathfrak{B}_{\scriptscriptstyle{#1}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Finite}
+% \begin{macrocode}
+\newcommand{\Finite}[1][{}]{\mathfrak{F}_{\scriptscriptstyle{#1}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Compact}
+% \begin{macrocode}
+\newcommand{\Compact}[1][{}]{\mathfrak{K}_{\scriptscriptstyle{#1}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\opdomain}
+% \begin{macrocode}
+\newcommand{\opdomain}{\ch@irxhilbertfont{D}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\spec}
+% \begin{macrocode}
+\newcommand{\spec}{\operatorname{\ch@irxoperatorfont{spec}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\closure}
+% \begin{macrocode}
+\newcommand{\closure}[1]{\overline{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\res}
+% \begin{macrocode}
+\newcommand{\res}{\operatorname{\ch@irxoperatorfont{res}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Res}
+% \begin{macrocode}
+\newcommand{\Res}{\operatorname{\ch@irxoperatorfont{Res}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\specrad}
+% \begin{macrocode}
+\newcommand{\specrad}{\operatorname{\varrho}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\slim}
+% \begin{macrocode}
+\newcommand{\slim}{\operatorname*{\ch@irxoperatorfont{s-lim}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\wlim}
+% \begin{macrocode}
+\newcommand{\wlim}{\operatorname*{\ch@irxoperatorfont{w-lim}}}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\subsubsection{Dirac's bra and ket}
+%
+%\begin{macro}{\bra}
+%\begin{macro}{\ket}
+%\begin{macro}{\braket}
+%\begin{macro}{\ketbra}
+% \begin{macrocode}
+\DeclarePairedDelimiter{\ketbr@}{\vert}{\vert}
+\DeclarePairedDelimiter{\ket}{\vert}{\rangle}
+\DeclarePairedDelimiter{\bra}{\langle}{\vert}
+\newcommand{\braket}[3][]{\SP[#1]{#2 \,#1\vert\, #3}}
+\newcommand{\ketbra}[3][]{\ketbr@[#1]{#2 #1\rangle #1\langle #3}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+%
+%\subsubsection{Operator Algebras}
+%
+%\begin{macro}{\Spec}
+% \begin{macrocode}
+\newcommand{\Spec}{\operatorname{\ch@irxoperatorfont{Spec}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Rad}
+% \begin{macrocode}
+\newcommand{\Rad}{\operatorname{\ch@irxoperatorfont{Rad}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ind}
+% \begin{macrocode}
+\newcommand{\ind}{\operatorname{\ch@irxoperatorfont{ind}}}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\subsubsection{Measure Theory and Integration}
+%
+%\begin{macro}{\Measurable}
+% \begin{macrocode}
+\newcommand{\Measurable}{\ch@irxspacefont{M}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Meas}
+% \begin{macrocode}
+\newcommand{\Meas}{\ch@irxoperatorfont{Meas}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\BoundMeas}
+% \begin{macrocode}
+\newcommand{\BoundMeas}{\ch@irxspacefont{BM}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Lp}
+% \begin{macrocode}
+\newcommand{\Lp}[1][{p}]{\mathrm{L}^{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Lone}
+% \begin{macrocode}
+\newcommand{\Lone}{\Lp[1]}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Ltwo}
+% \begin{macrocode}
+\newcommand{\Ltwo}{\Lp[2]}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Linfty}
+% \begin{macrocode}
+\newcommand{\Linfty}{\Lp[\infty]}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Intp}
+% \begin{macrocode}
+\newcommand{\Intp}[1][{p}]{\ch@irxspacefont{L}^{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Intone}
+% \begin{macrocode}
+\newcommand{\Intone}{\Intp[1]}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Inttwo}
+% \begin{macrocode}
+\newcommand{\Inttwo}{\Intp[2]}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Intinfty}
+% \begin{macrocode}
+\newcommand{\Intinfty}{\Intp[\infty]}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\essrange}
+% \begin{macrocode}
+\newcommand{\essrange}{\operatorname{\ch@irxoperatorfont{ess\,range}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\esssup}
+% \begin{macrocode}
+\newcommand*{\esssup}{\operatorname*{\ch@irxoperatorfont{ess}\,\ch@irxoperatorfont{\sup}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\esssupnormstar}
+% \begin{macrocode}
+\newcommand{\@esssupnormstar}[1]{\norm*{#1}_{\esssup}}
+\newcommand{\@esssupnormnostar}[2][]{\norm[#1]{#2}_{\esssup}}
+\newcommand{\esssupnorm}{\@ifstar\@esssupnormstar\@esssupnormnostar}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ac}
+% \begin{macrocode}
+\newcommand{\ac}{\ch@irxscriptfont{ac}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\sing}
+% \begin{macrocode}
+\newcommand{\sing}{\ch@irxscriptfont{sing}}
+% \end{macrocode}
+%\end{macro}
+%
+% \subsubsection{Limits} \label{sec:Limits}
+%
+%\begin{macro}{\indlim}
+% \begin{macrocode}
+\newcommand{\indlim}{\operatorname*{{ind\,lim}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\projlim}
+% \begin{macrocode}
+\renewcommand{\projlim}{\operatorname*{{proj\,lim}}}
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macrocode}
+\fi
+% \end{macrocode} \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxmathAnalysisDoc.dtx b/macros/latex/contrib/nchairx/source/chairxmathAnalysisDoc.dtx
new file mode 100644
index 0000000000..43954d61d6
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathAnalysisDoc.dtx
@@ -0,0 +1,297 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the documentation of all analysis related macros .
+%
+% Macros have to be described by (delete the first %)
+% \DescribeMacro{\macro}
+% Description and usage of the macro.
+%
+% The description will appear in the usage
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The implementation of the macros defined here has to be written in
+% chairxmathAnalysis.dtx
+%\fi
+%
+%\subsubsection{General Anyalsis Macros} \label{sec:Doc_GeneralMacrosAnalysis}
+%
+% \DescribeMacro{\vol}
+% Volume |\vol|: $\vol$\\
+% Uses |operatorfont|
+%
+% \DescribeMacro{\complete}
+% Completion of some space |\complete{V}|: $\complete{V}$
+%
+% \DescribeMacro{\Ball}
+% Open ball |\Ball_{r}(p)|: $\Ball_{r}(p)$
+%
+% \DescribeMacro{\abs}
+% Generic absolute value |\abs{x}|: $\abs{x}$
+%
+% \DescribeMacro{\norm}
+% Generic norm |\norm{v}|: $\norm{v}$
+%
+% \DescribeMacro{\supnorm}
+% Supremum norm |\supnorm{f}|: $\supnorm{f}$
+%
+% \DescribeMacro{\expands}
+% Formal expansions |f(t) \stackrel{t \to 0}{\expands} t^k|:
+% $f(t) \stackrel{t \to 0}{\expands} t^k$, \\
+% or with optional stretching factor (default is 2.5) |a \expands[4] b|: $a \expands[4] b$.
+%
+%
+% \subsubsection{Pseudodifferential Operators}
+% \label{sec:Doc_PseudodifferentialOperators}
+%
+% \DescribeMacro{\std}
+% Standard ordering as small subscript |\sigma_\std|: $\sigma_\std$ \\
+% Uses |scriptfont|
+%
+% \DescribeMacro{\Weyl}
+% Weyl ordering as small subscript |\sigma_\Weyl|: $\sigma_\Weyl$ \\
+% Uses |scriptfont|
+%
+% \DescribeMacro{\Op}
+% Operator for a symbol |\Op(f)|: $\Op(f)$ \\
+% Uses |operatorfont|
+%
+% \DescribeMacro{\Opstd}
+% Standard ordered operator for a symbol |\Opstd(f)|: $\Opstd(f)$ \\
+% Uses |operatorfont|
+%
+% \DescribeMacro{\OpWeyl}
+% Weyl ordered operator for a symbol |\OpWeyl(f)|: $\OpWeyl(f)$ \\
+% Uses |operatorfont|
+%
+%
+%\subsubsection{Function Spaces}
+%
+% \DescribeMacro{\spacename}
+% Font for specific functional spaces |\spacename{F}(X)|: $\spacename{F}(X)$ \\
+% Uses |spacefont|.
+%
+% \DescribeMacro{\Bounded}
+% Bounded functions |\Bounded(X)|: $\Bounded(X)$\\
+% Uses |spacefont|.
+%
+% \DescribeMacro{\Continuous}
+% Continuous functions |\Continuous(X)|: $\Continuous(X)$\\
+% Uses |spacefont|.
+%
+% \DescribeMacro{\Contbound}
+% Continuous bounded functions |\Contbound(X)|: $\Contbound(X)$\\
+% Uses |spacefont|.
+%
+% \DescribeMacro{\Fun}
+% $C^k$-functions (for $\Continuous$ use |\Continuous|) |\Fun(M)|: $\Fun(M)$ and |\Fun[\ell](M)|: $\Fun[\ell](M)$ \\
+% Uses |spacefont|.
+%
+% \DescribeMacro{\Cinfty}
+% Smooth functions |\Cinfty|: $\Cinfty(M)$\\
+% Uses |spacefont|.
+%
+% \DescribeMacro{\Comega}
+% Real-analytic functions |\Comega|: $\Comega(M)$\\
+% Uses |spacefont|.
+%
+% \DescribeMacro{\Holomorphic}
+% Holomorphic functions |\Holomorphic|: $\Holomorphic(U)$\\
+% Uses |spacefont|.
+%
+% \DescribeMacro{\AntiHolomorphic}
+% Anti-holomorphic functions |\AntiHolomorphic|: $\AntiHolomorphic(U)$\\
+% Uses |spacefont|.
+%
+% \DescribeMacro{\Schwartz}
+% Schwartz space |\Schwartz|: $\Schwartz(\mathbb{R}^n)$\\
+% Uses |spacefont|.
+%
+% \DescribeMacro{\Riemann}
+% Riemann integrable functions |\Riemann([a, b])|: $\Riemann([a, b])$ \\
+% Uses |spacefont|.
+%
+% \subsubsection{Locally Convex Analysis and Distributions}
+%
+% \DescribeMacro{\singsupp}
+% Singular support of a distribution |\singsupp u|: $\singsupp u$
+%
+% \DescribeMacro{\seminorm}
+% Font for generic seminorm |\seminorm{p}|: $\seminorm{p}$
+%
+% \DescribeMacro{\ord}
+% Order of a distribution |\ord(u)|: $\ord(u)$
+%
+% \DescribeMacro{\conv}
+% Convex hull |\conv(A)|: $\conv(A)$
+%
+% \DescribeMacro{\extreme}
+% Extreme points |\extreme(A)|: $\extreme(A)$
+%
+% \subsubsection{Hilbert Spaces and Operators}
+%
+% \DescribeMacro{\hilbert}
+% Font for Hilbert spaces |\hilbert{H}|: $\hilbert{H}$ \\
+% Uses |hilbertfont|
+%
+% \DescribeMacro{\prehilb}
+% Font for pre-Hilbert spaces |\prehilb{H}|: $\prehilb{H}$ \\
+% Uses |prehilbfont|.
+%
+% \DescribeMacro{\Adjointable}
+% Adjointable operators |\Adjointable(\hilbert{H})|:
+% $\Adjointable(\hilbert{H})$ or with optional argument
+% |\Adjointable[\algebra{A}](\hilbert{H})|: $\Adjointable[\algebra{A}](\hilbert{H})$ if
+% we have a Hilbert module over an algebra $\algebra{A}$ instead.
+%
+% \DescribeMacro{\Finite}
+% Finite rank operators |\Finite(\hilbert{H})|: $\Finite(\hilbert{H})$
+% or with optional argument
+% |\Finite[\algebra{A}](\module{H})|: $\Finite[\algebra{A}](\module{H})$
+%
+% \DescribeMacro{\Compact}
+% Compact operators |\Compact(\hilbert{H})|: $\Compact(\hilbert{H})$
+% or with optional argument
+% |\Compact[\algebra{A}](\module{H})|: $\Compact[\algebra{A}](\module{H})$
+%
+% \DescribeMacro{\opdomain}
+% Domain of definition of an operator |\opdomain(A)|: $\opdomain(A)$ \\
+% Uses |\hilbertfont|.
+%
+% \DescribeMacro{\spec}
+% Spectrum of an operator |\spec(A)|: $\spec(A)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\closure}
+% Closure of an operator |\closure{A}|: $\closure{A}$
+%
+% \DescribeMacro{\res}
+% Resolvent set of an operator |\res(A)|: $\res(A)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Res}
+% Resolvent of an operator |\Res_z(A)|: $\Res_z(A)$\\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\specrad}
+% Spectral radius of an operator |\specrad(A)|: $\specrad(A)$
+%
+% \DescribeMacro{\slim}
+% Strong limit |\slim_{n \longrightarrow \infty} A_n|: $\slim_{n \longrightarrow \infty} A_n$
+%
+% \DescribeMacro{\wlim}
+% Weak limit |\wlim_{n \longrightarrow \infty} A_n|: $\wlim_{n \longrightarrow \infty} A_n$
+%
+% \subsubsection{Dirac's Bra and Ket Notation}
+%
+% \DescribeMacro{\bra}
+% Dirac bra |\bra{\psi}|: $\bra{\psi}$
+%
+% \DescribeMacro{\ket}
+% Dirac ket |\ket{\phi}|: $\ket{\phi}$
+%
+% \DescribeMacro{\braket}
+% Dirac braket |\braket{\phi}{\psi}|: $\braket{\phi}{\psi}$
+%
+% \DescribeMacro{\ketbra}
+% Dirac ketbra |\ketbra{\phi}{\psi}|: $\ketbra{\phi}{\psi}$
+%
+% \subsubsection{Operator Algebras}
+%
+% \DescribeMacro{\Spec}
+% Spectrum of an algebra |\Spec(\algebra{A})|: $\Spec(\algebra{A})$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Rad}
+% Radical of an algebra |\Rad(\algebra{A})|: $\Rad(\algebra{A})$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\ind}
+% Fredholm index (|\index| is already used!) |\ind(A)|: $\ind(A)$ \\
+% Uses |operatorfont|.
+%
+% \subsubsection{Measure Theory and Integration}
+%
+% Here we need various function space of integrable functions
+% (calligraphic ones) and the corresponding quotients by zero
+% functions (roman ones):
+%
+% \DescribeMacro{\Measurable}
+% Measurable functions |\Measurable(X)|: $\Measurable(X)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Meas}
+% Complex measures |\Meas(X)|: $\Meas(X)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\BoundMeas}
+% Bounded measurable functions |\BoundMeas(X)|: $\BoundMeas(X)$ \\
+% Uses |spacefont|.
+%
+% \DescribeMacro{\Lp}
+% Equivalence classes of $p$-integrable functions ($p$ is an optional
+% argument) |\Lp(X)|: $\Lp(X)$ and |\Lp[q](X)|: $\Lp[q](X)$
+%
+% \DescribeMacro{\Lone}
+% Equivalence classes of integrable functions |\Lone(X)|: $\Lone(X)$
+%
+% \DescribeMacro{\Ltwo}
+% Equivalence classes of square integrable functions |\Ltwo(X)|: $\Ltwo(X)$
+%
+% \DescribeMacro{\Linfty}
+% Equivalence classes of essentially bounded functions |\Linfty(X)|: $\Linfty(X)$
+%
+% \DescribeMacro{\Intp}
+% Space of $p$-integrable functions |\Intp(X)|:
+% $\Intp(X)$ and with optional argument
+% |\Intp[q](X)|: $\Intp[q](X)$
+%
+% \DescribeMacro{\Intone}
+% Space of integrable functions |\Intone(X)|: $\Intone(X)$
+%
+% \DescribeMacro{\Inttwo}
+% Space of square integrable functions |\Inttwo(X)|: $\Inttwo(X)$
+%
+% \DescribeMacro{\Intinfty}
+% Space of essentially bounded functions |\Intinfty(X)|: $\Intinfty(X)$
+%
+% \DescribeMacro{\essrange}
+% Essential range |\essrange(f)|: $\essrange(f)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\esssup}
+% Essential supremum |\esssup(f)|: $\esssup(f)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\esssupnorm}
+% Essential supremum norm |\esssupnorm{f}|: $\esssupnorm{f}$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\ac}
+% Absolutely continuous part of a measure |\mu_\ac|: $\mu_\ac$ \\
+% Uses |scriptfont|.
+%
+% \DescribeMacro{\sing}
+% Singular part of a measure |\mu_\sing|: $\mu_\sing$ \\
+% Uses |scriptfont|.
+%
+% \subsubsection{Limits} \label{sec:Doc_Limits}
+%
+%\DescribeMacro{\indlim}
+% Inductive (or direct) limit |\indlim_{i \in I} A_i|: $\indlim_{i \in I} A_i$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\projlim}
+% Projective (or inverse) limit |\projlim_{i \in I} A_i|: $\projlim_{i \in I} A_i$\\
+% Uses |operatorfont|. \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxmathCategory.dtx b/macros/latex/contrib/nchairx/source/chairxmathCategory.dtx
new file mode 100644
index 0000000000..cd50ca4b5f
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathCategory.dtx
@@ -0,0 +1,141 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the implementation of all category theory related macros .
+%
+% Macros have to be described by (delete the first %)
+% %\begin{macro}{\macro}
+% % Description of the implementation.
+% % \begin{macrocode}
+%\newcommand{\macro}[] {}
+% % \end{macrocode}
+% %\end{macro}
+%
+% The implementation and description will appear in the implementation
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The documentation of the macros defined here has to be written in
+% chairxmathCategoryDoc.dtx
+%\fi
+%
+% First we check of macros should be included:
+% \begin{macrocode}
+\if@loadmath
+% \end{macrocode}
+%
+% \subsubsection{General Category Theory}
+% General stuff for categories.
+%
+% \begin{macro}{\category}
+% \begin{macrocode}
+\newcommand{\category}[1]{\ch@irxcategoryfont{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macro}{\categoryname}
+% \begin{macrocode}
+\newcommand{\categoryname}[1]{\ch@irxcategorynamefont{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macro}{\functor}
+% \begin{macrocode}
+\newcommand{\functor}[1]{\ch@irxfunctorfont{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\groupoid}
+% \begin{macrocode}
+\newcommand{\groupoid}[1]{\ch@irxgroupoidfont{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\source}
+% \begin{macrocode}
+\newcommand{\source}{\ch@irxoperatorfont{source}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\target}
+% \begin{macrocode}
+\newcommand{\target}{\ch@irxoperatorfont{target}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\unit}
+% \begin{macrocode}
+\newcommand{\unit}{\ch@irxoperatorfont{unit}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\opp}
+% \begin{macrocode}
+\newcommand{\opp}{\ch@irxscriptfont{opp}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\asso}
+% \begin{macrocode}
+\newcommand{\asso}{\ch@irxoperatorfont{asso}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Hom}
+% \begin{macrocode}
+\newcommand{\Hom}{\operatorname{\ch@irxoperatorfont{Hom}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\End}
+% \begin{macrocode}
+\newcommand{\End}{\operatorname{\ch@irxoperatorfont{End}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Aut}
+% \begin{macrocode}
+\newcommand{\Aut}{\operatorname{\ch@irxoperatorfont{Aut}}}
+\WithSuffix\newcommand\Aut*{\decorate[^*]{\textrm{-}\Aut}{}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Iso}
+% \begin{macrocode}
+\newcommand{\Iso}{\operatorname{\ch@irxoperatorfont{Iso}}}
+\WithSuffix\newcommand\Iso*{\decorate[^*]{\textrm{-}\Iso}{}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Obj}
+% \begin{macrocode}
+\newcommand{\Obj}{\operatorname{\ch@irxoperatorfont{Obj}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Morph}
+% \begin{macrocode}
+\newcommand{\Morph}{\operatorname{\ch@irxoperatorfont{Morph}}}
+% \end{macrocode}
+%\end{macro}
+%
+% \subsubsection{Colimits}
+%
+%\begin{macro}{\colim}
+% \begin{macrocode}
+\newcommand{\colim}{\operatorname*{{colim}}}
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+\fi
+% \end{macrocode} \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxmathCategoryDoc.dtx b/macros/latex/contrib/nchairx/source/chairxmathCategoryDoc.dtx
new file mode 100644
index 0000000000..56ca84d183
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathCategoryDoc.dtx
@@ -0,0 +1,97 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the documentation of all category theory related macros .
+%
+% Macros have to be described by (delete the first %)
+% \DescribeMacro{\macro}
+% Description and usage of the macro.
+%
+% The description will appear in the usage
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The implementation of the macros defined here has to be written in
+% chairxmathCategory.dtx
+%\fi
+%
+%
+% \subsubsection{General Category Theory}
+%
+% \DescribeMacro{\category}
+% Font for generic categories |\category{C}|: $\category{C}$ \\
+% Uses |categoryfont|.
+%
+% \DescribeMacro{\categoryname}
+% Font for specific categories |\categoryname{FinSet}|: $\categoryname{FinSet}$ \\
+% Uses |categorynamefont|.
+%
+% \DescribeMacro{\functor}
+% Font for functors |\functor{F}|: $\functor{F}$ \\
+% Uses |functorfont|.
+%
+% \DescribeMacro{\groupoid}
+% Font for groupoids |\groupoid{G}|: $\groupoid{G}$ \\
+% Uses |groupoidfont|.
+%
+% \DescribeMacro{\source}
+% Source of arrow |\source(f)|: $\source(f)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\target}
+% Target of arrow |\target(f)|: $\target(f)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\unit}
+% Unit map in groupoids |\unit\colon M \longrightarrow G|:
+% $\unit\colon M \longrightarrow G$ \\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\opp}
+% Opposite category etc. |\category{C}^\opp|: $\category{C}^\opp$ \\
+% Uses |scriptfont|.
+%
+% \DescribeMacro{\asso}
+% Natural transformation of associativity |\asso|: $\asso$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Hom}
+% Homomorphisms |\Hom(A, B)|: $\Hom(A, B)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\End}
+% Endomorphisms |\End(E)|: $\End(E)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Aut}
+% ($*$-)Automorphisms |\Aut(A)|: $\Aut(A)$ \\
+% |\Aut*(A)|: $\Aut*(A)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Iso}
+% ($*$-)Isomorphisms |\Iso(A, B)|: $\Iso(A, B)$ \\
+% |\Iso*(A, B)|: $\Iso*(A, B)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Obj}
+% Objects of a category |\Obj(\category{C})|: $\Obj(\category{C})$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Morph}
+% Morphisms of a category |\Morph(a, b)|: $\Morph(a, b)$ \\
+% Uses |operatorfont|.
+%
+% \subsubsection{Colimits}
+%
+%\DescribeMacro{\colim}
+% Colimits of diagrams or functors: |\colim \functor{F}|: $\colim \functor{F}$
diff --git a/macros/latex/contrib/nchairx/source/chairxmathDecoration.dtx b/macros/latex/contrib/nchairx/source/chairxmathDecoration.dtx
new file mode 100644
index 0000000000..c5602717c4
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathDecoration.dtx
@@ -0,0 +1,68 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the implementation of all category theory related macros .
+%
+% Macros have to be described by (delete the first %)
+% %\begin{macro}{\macro}
+% % Description of the implementation.
+% % \begin{macrocode}
+%\newcommand{\macro}[] {}
+% % \end{macrocode}
+% %\end{macro}
+%
+% The implementation and description will appear in the implementation
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The documentation of the macros defined here has to be written in
+% chairxmathGeneralDoc.dtx
+% \fi
+%
+% First we check of macros should be included:
+% \begin{macrocode}
+\if@loadmath
+% \end{macrocode}
+%
+% \subsubsection{Decoration}
+%
+% \begin{macro}{\decorate}
+% We use the tensor package of Philip G. Ratcliffe 2004/12/20 v2.1
+% tensor indices package (PGR) but overwrite the |\tensor| command
+% as this collides with our own version. Instead we provide the
+% |\decorate| macro which is identical to |\tensor| of the tensor
+% package.
+%
+% \begin{macrocode}
+\let\originaltensor\tensor
+\DeclareRobustCommand\decorate{\originaltensor}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\deco}
+% This is a simplified version of |\decorate| allowing only five positions to be filled.
+% \begin{macrocode}
+\newcommand{\deco}[5]{\decorate*[^{#1}_{#2}]{#3}{^{#4}_{#5}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\script}
+% Macro to access the |scriptfont|.
+% \begin{macrocode}
+\newcommand{\script}[1]{\ch@irxscriptfont{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fi
+% \end{macrocode} \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxmathDecorationDoc.dtx b/macros/latex/contrib/nchairx/source/chairxmathDecorationDoc.dtx
new file mode 100644
index 0000000000..ebe57e1082
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathDecorationDoc.dtx
@@ -0,0 +1,60 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the documentation of all general mathematics macros .
+%
+% Macros have to be described by (delete the first %)
+% \DescribeMacro{\macro}
+% Description and usage of the macro.
+%
+% The description will appear in the usage
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The implementation of the macros defined here has to be written in
+% chairxmathGeneral.dtx
+%\fi
+%
+%
+% We use the |tensor| package and modify things slightly to fit our
+% needs: we provide a decoration command that allows to decorate
+% arbitrary math symbols from left and right, top and bottom with
+% other math symbols. This can be used to produce tensors with many
+% indices. However, this is far too useful to be restricted to tensors
+% only. The original |\tensor| macro from the |tensor package| is
+% still available under the name |\originaltensor|. Note, that the
+% |\tensor| command in |nchairx| is intended for the symbol of tensor
+% product, and not for decorating a symbol with indices.
+%
+% \DescribeMacro{\decorate}
+% Decorate a symbol from all sides. The option argument gives the
+% decoration in front of the symbol, the first argument the symbol,
+% the second (mandatory) argument the decoration after the symbol. For
+% each decoration several superscripts and subscripts can be used like
+% |\decorate[^a_b^c]{S}{_d^{rt}_e}|:
+% $\decorate[^a_b^c]{S}{_d^{rt}_e}$.
+%
+% \DescribeMacro{\deco}
+% We also provide a simpler version of |\decorate| called |\deco|
+% which takes five usual arguments and sets them as sub- and
+% superscripts before and after the middle symbol
+% |\deco{a}{b}{c}{d}{e}|:$\deco{a}{b}{c}{d}{e}$ This can be used to
+% define your own macros with decoration. E.g. for bimodules over
+% rings one could define
+% |\newcommand{\bimodule}[3]{\deco{}{\ring{#1}{\module{#2}}{}{\ring{#3}}}}|
+% which can then be used as |\bimodule{R}{E}{S}|:
+% $\deco{}{\ring{R}}{\module{E}}{}{\ring{S}}$.
+%
+% \DescribeMacro{\script}
+% Sets the argument in the |scriptfont| and hence allows to create macros
+% with fonts consistent with the other |nchairx| macros. \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxmathDelimiters.dtx b/macros/latex/contrib/nchairx/source/chairxmathDelimiters.dtx
new file mode 100644
index 0000000000..f707d6c74d
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathDelimiters.dtx
@@ -0,0 +1,73 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the implementation of all category theory related macros .
+%
+% Macros have to be described by (delete the first %)
+% %\begin{macro}{\macro}
+% % Description of the implementation.
+% % \begin{macrocode}
+%\newcommand{\macro}[] {}
+% % \end{macrocode}
+% %\end{macro}
+%
+% The implementation and description will appear in the implementation
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The documentation of the macros defined here has to be written in
+% chairxmathDelimitersDoc.dtx
+% \fi
+%
+% First we check of macros should be included:
+% \begin{macrocode}
+\if@loadmath
+% \end{macrocode}
+%
+% \subsubsection{The New Delimiters} \label{sec:NewDelimiters}
+%
+% \begin{macro}{\vast}
+% \begin{macro}{\Vast}
+% \begin{macro}{\vastl}
+% \begin{macro}{\vastm}
+% \begin{macro}{\vastr}
+% \begin{macro}{\Vastl}
+% \begin{macro}{\Vastm}
+% \begin{macro}{\Vastr}
+%
+% Bigger than |\Bigg| commands for explicit re-sizing brackets and things
+% needs left/right version to work with |\DeclarePairedDelimiters|.
+% Hack from http://tex.stackexchange.com/questions/262061
+%
+% \begin{macrocode}
+\newcommand{\vast}{\bBigg@{4}}
+\newcommand{\Vast}{\bBigg@{5}}
+\newcommand{\vastl}{\mathopen\vast}
+\newcommand{\vastm}{\mathrel\vast}
+\newcommand{\vastr}{\mathclose\vast}
+\newcommand{\Vastl}{\mathopen\Vast}
+\newcommand{\Vastm}{\mathrel\Vast}
+\newcommand{\Vastr}{\mathclose\Vast}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+\fi
+% \end{macrocode} \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxmathDelimitersDoc.dtx b/macros/latex/contrib/nchairx/source/chairxmathDelimitersDoc.dtx
new file mode 100644
index 0000000000..86b65d79e3
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathDelimitersDoc.dtx
@@ -0,0 +1,101 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the documentation of new delimiters.
+%
+% Macros have to be described by (delete the first %)
+% \DescribeMacro{\macro}
+% Description and usage of the macro.
+%
+% The description will appear in the usage
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The implementation of the macros defined here has to be written in
+% chairxmathDelimitersDoc.dtx
+%\fi
+%
+%
+% We use |\DeclarePairedDelimiters| to generate all kind of bracket
+% expressions of variable size as used e.g. in differential
+% geometry. This has the big advantage that one has two options to set
+% the size of the brackets: either with an explicit optional argument
+% |\big|, \ldots, |\Bigg|, |\vast|, or |\Vast| like
+% \begin{quote}
+% |\Schouten[\vast]{X, Y}|: $\Schouten[\vast]{X, Y}$
+% \end{quote}
+% or you can use the *-version which produces automatic sizes via
+% |\left| and |\right|.
+% \begin{quote}
+% |\abs*{\lim\limits_{n\to\infty} b_n}|
+% yields
+% $\abs*{\lim\limits_{n\to\infty} b_n}$
+% \end{quote}
+% Note, however, that this will typically result in sub-optimal
+% spacing. Also, the brackets turn out to be typically too large.
+%
+%
+% Note that using the bracket constructions with
+% |\DeclarePairedDelimiters| gives typically much better spacing than
+% doing things by hand:
+% \DeleteShortVerb{\|}
+% \begin{quote}
+% good \verb|\abs{\det(A)}|:
+% $\abs{\det(A)}$
+% \qquad
+% bad \verb+|\det(A)|+:
+% $|\det(A)|$
+% \end{quote}
+% \MakeShortVerb{\|}
+%
+%
+% \DescribeMacro{\vast}
+% \DescribeMacro{\Vast}
+% \DescribeMacro{\vastl}
+% \DescribeMacro{\vastm}
+% \DescribeMacro{\vastr}
+% \DescribeMacro{\Vastl}
+% \DescribeMacro{\Vastm}
+% \DescribeMacro{\Vastr}
+% In many formulas one needs large delimiters typically ranging from
+% |\big| to |\Bigg|. However, in very large formula constructions even
+% that is not enough. To have a systematic enlargement the following
+% delimiters sizes are introduced: |\vast| and |\Vast| together with
+% the corresponding helper macros |\vastl|, |\vastr|, |\vastm|,
+% |\Vastl|, |\Vastr|, and |\Vastm| needed to define pairs of
+% delimiters. They allow to produce large (pairs of) delimiters,
+% always provided that the corresponding font has the symbols in the
+% correct size.
+%
+%
+% The following commands allow for an option size argument:
+% \begin{itemize}
+% \item Absolute value |\abs|
+% \item Generic norm |\norm|
+% \item Supremum norm |\supnorm|
+% \item Essential supremum norm |\essupnorm|
+% \item Dirac ket |\ket|
+% \item Dirac bra |\bra|
+% \item Dirac ketbra |\ketbra|
+% \item Dirac braket |\braket|
+% \item Schouten bracket |\Schouten|
+% \item Nijenhuis-Richardson bracket |\NRbracket|
+% \item Frölicher-Nijenhuis bracket |\FNbracket|
+% \item Courant bracket |\Courant|
+% \item Dorfman bracket |\Dorfman|
+% \item Generic scalar product |\SP|
+% \item Generic inner product with decorations |\IP|
+% \item Restriction of a map |\at|
+% \item Étalé space of a presheaf |\etale|
+% \end{itemize}
+% \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxmathDiffgeo.dtx b/macros/latex/contrib/nchairx/source/chairxmathDiffgeo.dtx
new file mode 100644
index 0000000000..1acce1e09f
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathDiffgeo.dtx
@@ -0,0 +1,574 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the implementation of all differential geometry related macros .
+%
+% Macros have to be described by (delete the first %)
+% %\begin{macro}{\macro}
+% % Description of the implementation.
+% % \begin{macrocode}
+%\newcommand{\macro}[] {}
+% % \end{macrocode}
+% %\end{macro}
+%
+% The implementation and description will appear in the implementation
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The documentation of the macros defined here has to be written in
+% chairxmathDiffgeoDoc.dtx
+%\fi
+%
+% First we check of macros should be included:
+% \begin{macrocode}
+\if@loadmath
+% \end{macrocode}
+%
+% \subsubsection{General Differential Geometry} \label{sec:GeneralMacrosDiffGeo}
+%
+%\begin{macro}{\Lie}
+% \begin{macrocode}
+\newcommand{\Lie}{\mathscr{L}}
+% \end{macrocode}
+%\end{macro}
+%
+% A generic bracket as paired delimiter, used in several other macros
+%
+%\begin{macro}{\ch@irxbbracket}
+% \begin{macrocode}
+\DeclarePairedDelimiter{\ch@irxbracket}{[}{]}
+% \end{macrocode}
+% \end{macro}
+%
+% A generic double bracket as paired delimiter, used in several other macros
+%
+%\begin{macro}{\ch@irxbbracket}
+% \begin{macrocode}
+\DeclareMathDelimiter\ch@irxllbbracket{\mathopen}{stmry}{"4A}{stmry}{"71}
+\DeclareMathDelimiter\ch@irxrrbbracket{\mathclose}{stmry}{"4B}{stmry}{"79}
+\DeclarePairedDelimiter{\ch@irxbbracket}{\ch@irxllbbracket}{\ch@irxrrbbracket}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Schouten}
+% \begin{macrocode}
+\newcommand{\@schoutenstar}[1]{\ch@irxbbracket*{#1}_{\scriptscriptstyle\ch@irxscriptfont{S}}}
+\newcommand{\@schoutennostar}[2][]{\ch@irxbbracket[#1]{#2}_{\scriptscriptstyle\ch@irxscriptfont{S}}}
+\newcommand{\Schouten}{\@ifstar\@schoutenstar\@schoutennostar}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Forms}
+% \begin{macrocode}
+\newcommand{\Forms}{\Omega}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ZdR}
+% \begin{macrocode}
+\newcommand{\ZdR}{\ch@irxoperatorfont{Z}_{\scriptscriptstyle\mathrm{dR}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\BdR}
+% \begin{macrocode}
+\newcommand{\BdR}{\ch@irxoperatorfont{B}_{\scriptscriptstyle\ch@irxscriptfont{dR}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\HdR}
+% \begin{macrocode}
+\newcommand{\HdR}{\ch@irxoperatorfont{H}_{\scriptscriptstyle\ch@irxscriptfont{dR}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Diffeo}
+% \begin{macrocode}
+\newcommand{\Diffeo}{\operatorname{\ch@irxoperatorfont{Diffeo}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Diffop}
+% \begin{macrocode}
+\newcommand{\Diffop}{\operatorname{\ch@irxoperatorfont{DiffOp}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\loc}
+% \begin{macrocode}
+\newcommand{\loc}{\ch@irxscriptfont{loc}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\germ}
+% \begin{macrocode}
+\newcommand{\germ}{\operatorname{\ch@irxoperatorfont{germ}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\prol}
+% \begin{macrocode}
+\newcommand{\prol}{\ch@irxoperatorfont{prol}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\NRbracket}
+% \begin{macrocode}
+\newcommand{\@nrbracketstar}[1]{\ch@irxbracket*{#1}_{\scriptscriptstyle\ch@irxscriptfont{NR}}}
+\newcommand{\@nrbracketnostar}[2][]{\ch@irxbracket[#1]{#2}_{\scriptscriptstyle\ch@irxscriptfont{NR}}}
+\newcommand{\NRbracket}{\@ifstar\@nrbracketstar\@nrbracketnostar}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\FNbracket}
+% \begin{macrocode}
+\newcommand{\@fnbracketstar}[1]{\ch@irxbracket*{#1}_{\scriptscriptstyle\ch@irxscriptfont{FN}}}
+\newcommand{\@fnbracketnostar}[2][]{\ch@irxbracket[#1]{#2}_{\scriptscriptstyle\ch@irxscriptfont{FN}}}
+\newcommand{\FNbracket}{\@ifstar\@fnbracketstar\@fnbracketnostar}
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macro}{\Manifold}
+% \begin{macrocode}
+\newcommand{\Manifolds}{\categoryname{\categoryname{Manifold}}}
+% \end{macrocode}
+% \end{macro}
+%
+%\subsubsection{Lie Groups and Principal Fiber Bundles}
+%
+%\begin{macro}{\lefttriv}
+% \begin{macrocode}
+\newcommand{\lefttriv}{\ch@irxoperatorfont{left}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\righttriv}
+% \begin{macrocode}
+\newcommand{\righttriv}{\ch@irxoperatorfont{right}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Gau}
+% \begin{macrocode}
+\newcommand{\Gau}{\operatorname{\ch@irxoperatorfont{Gau}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Conn}
+% \begin{macrocode}
+\newcommand{\Conn}{\operatorname{\ch@irxoperatorfont{Conn}}}
+% \end{macrocode}
+% \end{macro}
+%
+%\begin{macro}{\ratio}
+% \begin{macrocode}
+\newcommand{\ratio}{\ch@irxoperatorfont{r}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Parallel}
+% \begin{macrocode}
+\newcommand{\Parallel}{\operatorname{\ch@irxoperatorfont{P}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\CE}
+% \begin{macrocode}
+\newcommand{\CE}{{\scriptscriptstyle{\ch@irxscriptfont{CE}}}}
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macro}{\HCE}
+% \begin{macrocode}
+\newcommand{\HCE}{\ch@irxoperatorfont{H}_\CE}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fund}
+% \begin{macrocode}
+\newcommand{\fund}{\ch@irxoperatorfont{fund}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Universal}
+% \begin{macrocode}
+\newcommand{\Universal}{\operatorname{\ch@irxoperatorfont{U}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\BCH}
+% \begin{macrocode}
+\newcommand{\BCH}{\ch@irxscriptfont{\scriptscriptstyle{BCH}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LieGroups}
+% \begin{macrocode}
+\newcommand{\LieGroups}{\categoryname{\categoryname{LieGroup}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Principal}
+% \begin{macrocode}
+\newcommand{\Principal}{\categoryname{\categoryname{Principal}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GPrincipal}
+% \begin{macrocode}
+\newcommand{\GPrincipal}[1][G]{#1\categoryname{\textrm{-}\categoryname{Principal}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Fiber}
+% \begin{macrocode}
+\newcommand{\Fiber}{\categoryname{Fiber}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FFiber}
+% \begin{macrocode}
+\newcommand{\FFiber}[1][F]{#1\categoryname{\textrm{-}\categoryname{Fiber}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Pin}
+% \begin{macrocode}
+\newcommand{\Pin}{\group{Pin}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Spin}
+% \begin{macrocode}
+\newcommand{\Spin}{\group{Spin}}
+% \end{macrocode}
+% \end{macro}
+
+%
+%\subsubsection{(Pseudo) Riemannian Geometry }
+%
+%\begin{macro}{\nablaLC}
+% \begin{macrocode}
+\newcommand{\nablaLC}{\nabla^{\scriptscriptstyle\ch@irxscriptfont{LC}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Laplace}
+% \begin{macrocode}
+\newcommand{\Laplace}{\Delta}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\dAlembert}
+% \begin{macrocode}
+\DeclareMathSymbol\dAlembert{\mathord}{AMSa}{"03}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\feynman}
+% \begin{macrocode}
+\newcommand{\feynman}[1]{\ooalign{$#1$\cr\hidewidth$\raise0.19ex\hbox{/}$\hidewidth\cr}}
+% \end{macrocode}
+%\end{macro}
+
+%\begin{macro}{\Dirac}
+% \begin{macrocode}
+\newcommand{\Dirac}{\feynman{D}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\rotation}
+% \begin{macrocode}
+\newcommand{\rotation}{\operatorname{\ch@irxoperatorfont{rot}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\curl}
+% \begin{macrocode}
+\newcommand{\curl}{\operatorname{\ch@irxoperatorfont{curl}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\divergence}
+% \begin{macrocode}
+\newcommand{\divergence}{\operatorname{\ch@irxoperatorfont{div}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\gradient}
+% \begin{macrocode}
+\newcommand{\gradient}{\operatorname{\ch@irxoperatorfont{grad}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Tor}
+% \begin{macrocode}
+\newcommand{\Tor}{\operatorname{\ch@irxoperatorfont{Tor}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Ric}
+% \begin{macrocode}
+\newcommand{\Ric}{\operatorname{\ch@irxoperatorfont{Ric}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\scal}
+% \begin{macrocode}
+\newcommand{\scal}{\operatorname{\ch@irxoperatorfont{scal}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Riem}
+% \begin{macrocode}
+\newcommand{\Riem}{\operatorname{\ch@irxoperatorfont{Riem}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Hessian}
+% \begin{macrocode}
+\newcommand{\Hessian}{\ch@irxoperatorfont{Hessian}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\hodge}
+% \begin{macrocode}
+\newcommand{\hodge}{\operatorname{\star}}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Complex Geometry}
+%
+%\begin{macro}{\Nijenhuis}
+% \begin{macrocode}
+\newcommand{\Nijenhuis}{\operatorname{\ch@irxoperatorfont{Nij}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\del}
+% \begin{macrocode}
+\newcommand{\del}{\mathop{}\!\partial}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\delbar}
+% \begin{macrocode}
+\newcommand{\delbar}{\mathop{}\!\cc{\partial}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\FS}
+% \begin{macrocode}
+\newcommand{\FS}{{\scriptscriptstyle{\ch@irxscriptfont{FS}}}}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\subsubsection{Vector Bundles}
+%
+% \begin{macro}{\Lift}
+% \begin{macrocode}
+\newcommand{\Lift}{{\scriptscriptstyle{\ch@irxscriptfont{Lift}}}}
+% \end{macrocode}
+% \end{macro}
+%
+%\begin{macro}{\ver}
+% \begin{macrocode}
+\newcommand{\ver}{\ch@irxscriptfont{ver}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\hor}
+% \begin{macrocode}
+\newcommand{\hor}{\ch@irxscriptfont{hor}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Ver}
+% \begin{macrocode}
+\newcommand{\Ver}{\operatorname{\ch@irxoperatorfont{Ver}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Hor}
+% \begin{macrocode}
+\newcommand{\Hor}{\operatorname{\ch@irxoperatorfont{Hor}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Sec}
+% \begin{macrocode}
+\newcommand{\Sec}[1][k]{\Gamma^{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Secinfty}
+% \begin{macrocode}
+\newcommand{\Secinfty}{\Sec[\infty]}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\HolSec}
+% \begin{macrocode}
+\newcommand{\HolSec}{\Sec[]_{\ch@irxscriptfont{hol}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\SymD}
+% \begin{macrocode}
+\newcommand{\SymD}{\mathop{}\!\ch@irxoperatorfont{D}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Densities}
+% \begin{macrocode}
+\newcommand{\Densities}[1][n]{\abs{\Lambda^{#1}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\MeasurableSections}
+% \begin{macrocode}
+\newcommand{\MeasurableSections}{\ch@irxspacefont{M}\Sec[]}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\IntpSections}
+% \begin{macrocode}
+\newcommand{\IntpSections}[1][p]{\Intp[#1]\Sec[]}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\IntegrableSections}
+% \begin{macrocode}
+\newcommand{\IntegrableSections}{\IntpSections[1]}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Translation}
+% \begin{macrocode}
+\newcommand{\Translation}{\ch@irxoperatorfont{T}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\frames}
+% \begin{macrocode}
+\newcommand{\frames}[1]{\ch@irxoperatorfont{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Frames}
+% \begin{macrocode}
+\newcommand{\Frames}{\operatorname{\ch@irxoperatorfont{Frames}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\FDiff}
+% \begin{macrocode}
+\newcommand{\FDiff}{\ch@irxoperatorfont{F}}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\subsubsection{Symplectic and Poisson Geometry}
+%
+%\begin{macro}{\Sympl}
+% \begin{macrocode}
+\newcommand{\Sympl}{\operatorname{\ch@irxgroupfont{Sympl}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Jacobiator}
+% \begin{macrocode}
+\newcommand{\Jacobiator}[1][\pi]{\operatorname{\ch@irxoperatorfont{Jac}}_{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\red}
+% \begin{macrocode}
+\newcommand{\red}{\ch@irxscriptfont{red}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Hess}
+% \begin{macrocode}
+\newcommand{\Hess}{\ch@irxoperatorfont{Hess}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\KKS}
+% \begin{macrocode}
+\newcommand{\KKS}{{\scriptscriptstyle\ch@irxscriptfont{KKS}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Courant}
+% \begin{macrocode}
+\newcommand{\@courantstar}[1]{\ch@irxbbracket*{#1}_{\scriptscriptstyle\ch@irxscriptfont{C}}}
+\newcommand{\@courantnostar}[2][]{\ch@irxbbracket[#1]{#2}_{\scriptscriptstyle\ch@irxscriptfont{C}}}
+\newcommand{\Courant}{\@ifstar\@courantstar\@courantnostar}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Dorfman}
+% \begin{macrocode}
+\newcommand{\@dorfmanstar}[1]{\ch@irxbbracket*{#1}_{\scriptscriptstyle\ch@irxscriptfont{D}}}
+\newcommand{\@dorfmannostar}[2][]{\ch@irxbbracket[#1]{#2}_{\scriptscriptstyle\ch@irxscriptfont{D}}}
+\newcommand{\Dorfman}{\@ifstar\@dorfmanstar\@dorfmannostar}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Dir}
+% \begin{macrocode}
+\newcommand{\Dir}{\operatorname{\ch@irxoperatorfont{Dir}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Forward}
+% \begin{macrocode}
+\newcommand{\Forward}{\mathcal{F}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Backward}
+% \begin{macrocode}
+\newcommand{\Backward}{\mathcal{B}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Tangent}
+% \begin{macrocode}
+\newcommand{\Tangent}{\mathbb{T}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\MWreduction}
+% \begin{macrocode}
+\newcommand{\MWreduction}{\big/\!\!\big/}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Mon}
+% \begin{macrocode}
+\newcommand{\Mon}{\ch@irxoperatorfont{Mon}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Hol}
+% \begin{macrocode}
+\newcommand{\Hol}{\ch@irxoperatorfont{Hol}}
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macrocode}
+\fi
+% \end{macrocode} \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxmathDiffgeoDoc.dtx b/macros/latex/contrib/nchairx/source/chairxmathDiffgeoDoc.dtx
new file mode 100644
index 0000000000..922f1acaca
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathDiffgeoDoc.dtx
@@ -0,0 +1,362 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the documentation of all differential geometry related macros .
+%
+% Macros have to be described by (delete the first %)
+% \DescribeMacro{\macro}
+% Description and usage of the macro.
+%
+% The description will appear in the usage
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The implementation of the macros defined here has to be written in
+% chairxmathDiffgeo.dtx
+%\fi
+%
+%\subsubsection{General Macros in Differential Geometry} \label{sec:Doc_GeneralMacrosDiffGeo}
+%
+% \DescribeMacro{\Lie}
+% Lie derivative |\Lie_X f|: $\Lie_X f$
+%
+% \DescribeMacro{\Schouten}
+% Schouten bracket |\Schouten{X,Y}|: $\Schouten{X, Y}$.
+%
+% \DescribeMacro{\Forms}
+% Differential forms |\Forms(M)|: $\Forms(M)$
+%
+% \DescribeMacro{\ZdR}
+% DeRham cocycles |\ZdR(M, \mathbb{C})|: $\ZdR(M, \mathbb{C})$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\BdR}
+% DeRham coboundaries |\BdR(M, \mathbb{C})|: $\BdR(M, \mathbb{C})$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\HdR}
+% DeRham cohomology |\HdR(M, \mathbb{C})|: $\HdR(M, \mathbb{C})$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Diffeo}
+% Diffeomorphism group |\Diffeo(M)|: $\Diffeo(M)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Diffop}
+% Differential operators |\Diffop(M)|: $\Diffop(M)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\loc}
+% To be used as an index |M_\loc|: $M_\loc$ \\
+% Uses |scriptfont|.
+%
+% \DescribeMacro{\germ}
+% Germs of functions |\germ_p(f)|: $\germ_p(f)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\prol}
+% Prolongation map |\prol(f)|: $\prol(f)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\NRbracket}
+% Nijenhuis-Richardson bracket |\NRbracket{a, b}|: $\NRbracket{a, b}$ \\
+% Uses |scriptfont|.
+%
+% \DescribeMacro{\FNbracket}
+% Fröhlicher-Nijenhuis bracket |\FNbracket{a, b}|: $\FNbracket{a, b}$ \\
+% Uses |scriptfont|.
+%
+% \DescribeMacro{\Manifolds}
+% The category of manifolds |\Manifolds|: $\Manifolds$ \\
+% Uses |categorynamefont|
+%
+%\subsubsection{Lie Groups and Principal Fiber Bundles}
+%
+% \DescribeMacro{\lefttriv}
+% Left trivialization |\lefttriv|: $\lefttriv$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\righttriv}
+% Right trivialization |\righttriv|: $\righttriv$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Gau}
+% Gauge group |\Gau(P)|: $\Gau(P)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Conn}
+% Connection one-forms |\Conn(P)|: $\Conn(P)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\ratio}
+% Ratio map of principal fiber bundle |\ratio(u, v)|: $\ratio(u, v)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Parallel}
+% Parallel transport |\Parallel_{0 \to 1, \gamma}(v)|: $\Parallel_{0 \to 1, \gamma}(v)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\CE}
+% Chevalley-Eilenberg as index |C_\CE|: $C_\CE$ \\
+% Uses |scriptfont|.
+%
+% \DescribeMacro{\HCE}
+% Chevalley-Eilenberg cohomology |\HCE(\liealg{g})|: $\HCE(\liealg{g})$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\fund}
+% Trivialization by fundamental vector fields |\fund|: $\fund$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Universal}
+% Universal enveloping algebra |\Universal{\liealg{g}}|: $\Universal(\liealg{g})$\\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\BCH}
+% BCH as small index |\sigma_\BCH|: $\sigma_\BCH$\\
+% Uses |scriptfont|.
+%
+% \DescribeMacro{\LieGroups}
+% The category of Lie groups |\LieGroups|: $\LieGroups$ \\
+% Uses |categorynamefont|.
+%
+% \DescribeMacro{\Principal}
+% The category of principal bundles |\Principal|: $\Principal$ \\
+% Uses |categorynamefont|.
+%
+% \DescribeMacro{\GPrincipal}
+% The category of $G$-principal bundles |\GPrincipal|: $\GPrincipal$ \\
+% or with optional structure group |\GPrincipal[H]|: $\GPrincipal[H]$ \\
+% Uses |categorynamefont|.
+%
+% \DescribeMacro{\Fiber}
+% The category of fiber bundles |\Fiber|: $\Fiber$
+% Uses |categorynamefont|.
+%
+% \DescribeMacro{\FFiber}
+% The category of fiber bundles with typical fiber |\FFiber|:
+% $\FFiber$ \\
+% or with specified typical fiber |\FFiber[X]|: $\FFiber[X]$ \\
+% Uses |categorynamefont|.
+%
+% \DescribeMacro{\Pin}
+% The pin group |\Pin(q, p)|: $\Pin(p, q)$ \\
+% Uses |groupfont|.
+%
+% \DescribeMacro{\Spin}
+% The spin group |\Spin(q, p)|: $\Spin(p, q)$ \\
+% Uses |groupfont|.
+%
+%\subsubsection{(Pseudo-) Riemannian Geometry}
+%
+% \DescribeMacro{\nablaLC}
+% Levi-Civita covariant derivative |\nablaLC_X Y|: $\nablaLC_X Y$ \\
+% Uses |scriptfont|.
+%
+% \DescribeMacro{\Laplace}
+% Laplace operator |\Laplace f|: $\Laplace f$
+%
+% \DescribeMacro{\dAlembert}
+% D'Alembert operator |\dAlembert u|: $\dAlembert u$
+%
+% \DescribeMacro{\feynman}
+% Feynman slash notation |\feynman{D} = \feynman{A} + \feynman{\partial}|:
+% $\feynman{D} = \feynman{A} + \feynman{\partial}$
+%
+% \DescribeMacro{\Dirac}
+% Dirac operator |\Dirac u|: $\Dirac u$
+%
+% \DescribeMacro{\rotation}
+% Rotation (i.e. curl) of a vector field |\rotation(X)|: $\rotation(X)$. Not to be confused with $\textrm{grün}(X)$. \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\curl}
+% Curl of a vector field |\curl \vec{X}|: $\curl \vec{X}$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\divergence}
+% Divergence of a vector field |\divergence(X)|: $\divergence(X)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\gradient}
+% Gradient of a function |\gradient f|: $\gradient f$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Tor}
+% Torsion of a covariant derivative |\Tor (X, Y)|: $\Tor (X, Y)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Ric}
+% Ricci curvature |\Ric (X, Y)|: $\Ric (X, Y)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\scal}
+% Scalar curvature |\scal|: $\scal$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Riem}
+% The set of Riemannian metrics (linear and on manifolds) |\Riem(M)|: $\Riem(M)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Hessian}
+% Hessian of a function |\Hessian(f) \in \Secinfty(\Sym^2T^*M)|: $\Hessian(f) \in \Secinfty(\Sym^2T^*M)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\hodge}
+% Hodge star operator |\alpha \mapsto \hodge\alpha|: $\alpha \mapsto \hodge\alpha$
+%
+%\subsubsection{Complex Geometry}
+%
+% \DescribeMacro{\Nijenhuis}
+% Nijenhuis operator |\Nijenhuis(X, Y)|: $\Nijenhuis(X, Y)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\del}
+% Dolbeault operator |\del \omega|: $\del \omega$
+%
+% \DescribeMacro{\delbar}
+% CC of Dolbeault operator |\delbar\alpha|: $\delbar\alpha$
+%
+% \DescribeMacro{\FS}
+% Fubini Study as very small index |\omega_\FS|: $\omega_\FS$ \\
+% Uses |scriptfont|.
+%
+%\subsubsection{Vector Bundles}
+%
+% \DescribeMacro{\Lift}
+% Generic lift of something |\nabla^\Lift|: $\nabla^\Lift$ \\
+% Uses |scriptfont|.
+%
+% \DescribeMacro{\ver}
+% Vertical lift |X^\ver|: $X^\ver$ \\
+% Uses |scriptfont|.
+%
+% \DescribeMacro{\hor}
+% Horizontal lift |X^\hor|: $X^\hor$ \\
+% Uses |scriptfont|.
+%
+% \DescribeMacro{\Ver}
+% Vertical subbundle |\Ver(E)|: $\Ver(E)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Hor}
+% Horizontal subbundle |\Hor(E)|: $\Hor(E)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Sec}
+% $C^k$-sections |\Sec(E)|: $\Sec(E)$ and |\Sec[2](E)|: $\Sec[2](E)$
+%
+% \DescribeMacro{\Secinfty}
+% Smooth sections |\Secinfty(E)|: $\Secinfty(E)$
+%
+% \DescribeMacro{\HolSec}
+% Holomorphic sections |\HolSec(U, E)|: $\HolSec(U, E)$ \\
+% Uses |scriptfont|.
+%
+% \DescribeMacro{\SymD}
+% Symmetrized covariant derivative |\SymD^n f|: $\SymD^n f$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Densities}
+% Densities of a vector bundle of rank $n$ or specific rank |\Densities TM|: $\Densities TM$
+% and |\Densities[k]^\alpha E|: $\Densities[k]^\alpha E$.
+%
+% \DescribeMacro{\MeasurableSections}
+% Measurable sections |\MeasurableSections(E)|: $\MeasurableSections(E)$ \\
+% Uses |spacefont|.
+%
+% \DescribeMacro{\IntpSections}
+% $p$-Integrable Sections |\IntpSections(\Densities T^*M)|: $\IntpSections(\Densities T^*M)$
+% or with optional argument |\IntpSections[q](\Densities T^*M)|: $\IntpSections[q](\Densities T^*M)$.
+%
+% \DescribeMacro{\IntegrableSections}
+% Integrable sections |\IntegrableSections(\Densities T^*M)|: $\IntegrableSections(\Densities T^*M)$
+%
+% \DescribeMacro{\Translation}
+% Fiber translations |\Translation_A|: $\Translation_A$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\frames}
+% Font for local frames |\frames{e}_1, \ldots, \frames{e}_k|: $\frames{e}_1, \ldots, \frames{e}_k$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Frames}
+% Frame bundle of a vector bundle |\Frames(E) \longrightarrow M|:\\
+% $\Frames(E) \longrightarrow M$ \\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\FDiff}
+% Fiber derivative |\FDiff L|: $\FDiff L$ \\
+% Uses |operatorfont|.
+%
+%\subsubsection{Symplectic and Poisson Geometry}
+%
+% \DescribeMacro{\Sympl}
+% Symplectomorphism group |\Sympl(M, \omega)|: $\Sympl(M, \omega)$ \\
+% Uses |groupfont|.
+%
+% \DescribeMacro{\Jacobiator}
+% Jacobiator |\Jacobiator|: $\Jacobiator$
+% and |\Jacobiator[\nu]|: $\Jacobiator[\nu]$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\red}
+% Reduced as an index |M_\red|: $M_\red$ \\
+% Uses |scriptfont|.
+%
+% \DescribeMacro{\Hess}
+% Hess map |\Hess|: $\Hess(\nabla)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\KKS}
+% KKS as tiny index |\{f, g\}_\KKS|: $\{f, g\}_\KKS$ \\
+% Uses |scriptfont|.
+%
+% \DescribeMacro{\Courant}
+% Courant bracket |\Courant{a, b}|: $\Courant{a, b}$ \\
+% Uses |scriptfont|.
+%
+% \DescribeMacro{\Dorfman}
+% Dorfman bracket |\Dorfman{(x, \xi), (y, \eta)}|:
+% $\Dorfman{(x, \xi), (y, \eta)}$ \\
+% Uses |scriptfont|
+%
+% \DescribeMacro{\Dir}
+% (Linear) Dirac structures |\Dir(V)|: $\Dir(V)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Forward}
+% Forward map |\Forward(\phi)|: $\Forward(\phi)$
+%
+% \DescribeMacro{\Backward}
+% Backward map |\Backward(\phi)|: $\Backward(\phi)$
+%
+% \DescribeMacro{\Tangent}
+% Generalized tangent bundle/map |\Tangent M|: $\Tangent M$
+%
+% \DescribeMacro{\MWreduction}
+% Marsden-Weinstein reduction |M \MWreduction G|: $M \MWreduction G$
+%
+% \DescribeMacro{\Mon}
+% Monodromy groupoid |\Mon(M)|: $\Mon(M)$ \\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\Hol}
+% Holonomy groupoid |\Hol(M)|: $\Hol(M)$ \\
+% Uses |operatorfont|.
+%
+% \endinput
+% Local Variables:
+% mode: doctex
+% TeX-master: "nchairx"
+% End:
diff --git a/macros/latex/contrib/nchairx/source/chairxmathFonts.dtx b/macros/latex/contrib/nchairx/source/chairxmathFonts.dtx
new file mode 100644
index 0000000000..64b4dafd10
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathFonts.dtx
@@ -0,0 +1,288 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the implementation of all algebra related macros.
+%
+% Macros have to be described by (delete the first %)
+% %\begin{macro}{\macro}
+% % Description of the implementation.
+% % \begin{macrocode}
+%\newcommand{\macro}[] {}
+% % \end{macrocode}
+% %\end{macro}
+%
+% The implementation and description will appear in the implementation
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The documentation of the macros defined here has to be written in
+% chairxmathFontsDoc.dtx
+%\fi
+%
+% First we check of macros should be included:
+% \begin{macrocode}
+\if@loadmath
+% \end{macrocode}
+%
+%
+% We provide several font names for easier usage and
+% customization. The fonts are used in our macro definitions and can
+% be changed by according to the individual needs.
+%
+%
+%
+% \subsubsection{Default Values for some Math Fonts}
+%
+%
+% \begin{macro}{\mathbb}
+%
+% Redefine |\mathbb| to use the nicer |\mathbbm|.
+%
+% \begin{macrocode}
+\DeclareMathAlphabet{\ch@airxmathbbm}{U}{bbm}{m}{n}
+\SetMathAlphabet\ch@airxmathbbm{bold}{U}{bbm}{bx}{n}
+\renewcommand{\mathbb}[1]{\ch@airxmathbbm{#1}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\mathscr}
+%
+% We load a script font and provide the command |\mathscr|
+%
+% \begin{macrocode}
+\DeclareMathAlphabet{\mathscr}{U}{rsfso}{m}{n}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\mathcal}
+%
+% We redefine the |\mathcal| command using the Euler font.
+%
+% \begin{macrocode}
+\DeclareSymbolFont{EulerScript}{U}{eus}{m}{n}
+\SetSymbolFont{EulerScript}{bold}{U}{eus}{b}{n}
+\DeclareSymbolFontAlphabet\mathcal{EulerScript}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \subsubsection{Setting Fonts for Various Math Groups}
+%
+% Definitions of fonts for the different groups.
+%
+% \begin{macro}{\ch@irxalgebrafont}
+% \begin{macro}{\ch@irxbasisfont}
+% \begin{macro}{\ch@irxcategoryfont}
+% \begin{macro}{\ch@irxcategorynamefont}
+% \begin{macro}{\ch@irxfieldfont}
+% \begin{macro}{\ch@irxfilterfont}
+% \begin{macro}{\ch@irxfunctorfont}
+% \begin{macro}{\ch@irxgerstenhaberfont}
+% \begin{macro}{\ch@irxgroupfont}
+% \begin{macro}{\ch@irxgroupoidfont}
+% \begin{macro}{\ch@irxhilbertfont}
+% \begin{macro}{\ch@irxliealgfont}
+% \begin{macro}{\ch@irxmodulefont}
+% \begin{macro}{\ch@irxprehilbfont}
+% \begin{macro}{\ch@irxoperatorfont}
+% \begin{macro}{\ch@irxringfont}
+% \begin{macro}{\ch@irxscriptfont}
+% \begin{macro}{\ch@irxsheaffont}
+% \begin{macro}{\ch@irxspacesfont}
+% \begin{macro}{\ch@irxtopologyfont}
+%
+% We use |xkeyval| to define keys setting the different font
+% groups. These keys can be used for the macro |\chairxfonts|.
+% We use |\providecommand| to create the font macros if they do
+% not already exist.
+%
+% \begin{macrocode}
+\define@key[chairx]{fonts}{algebrafont}{
+ \providecommand{\ch@irxalgebrafont}[1]{ }
+ \renewcommand{\ch@irxalgebrafont}{#1}
+}
+\define@key[chairx]{fonts}{basisfont}{
+ \providecommand{\ch@irxbasisfont}[1]{ }
+ \renewcommand{\ch@irxbasisfont}{#1}
+}
+\define@key[chairx]{fonts}{categoryfont}{
+ \providecommand{\ch@irxcategoryfont}[1]{ }
+ \renewcommand{\ch@irxcategoryfont}{#1}
+}
+\define@key[chairx]{fonts}{categorynamefont}{
+ \providecommand{\ch@irxcategorynamefont}[1]{ }
+ \renewcommand{\ch@irxcategorynamefont}{#1}
+}
+\define@key[chairx]{fonts}{fieldfont}{
+ \providecommand{\ch@irxfieldfont}[1]{ }
+ \renewcommand{\ch@irxfieldfont}{#1}
+}
+\define@key[chairx]{fonts}{filterfont}{
+ \providecommand{\ch@irxfilterfont}[1]{ }
+ \renewcommand{\ch@irxfilterfont}{#1}
+}
+\define@key[chairx]{fonts}{functorfont}{
+ \providecommand{\ch@irxfunctorfont}[1]{ }
+ \renewcommand{\ch@irxfunctorfont}{#1}
+}
+\define@key[chairx]{fonts}{gerstenhaberfont}{
+ \providecommand{\ch@irxgerstenhaberfont}[1]{ }
+ \renewcommand{\ch@irxgerstenhaberfont}{#1}
+}
+\define@key[chairx]{fonts}{groupfont}{
+ \providecommand{\ch@irxgroupfont}[1]{ }
+ \renewcommand{\ch@irxgroupfont}{#1}
+}
+\define@key[chairx]{fonts}{groupoidfont}{
+ \providecommand{\ch@irxgroupoidfont}[1]{ }
+ \renewcommand{\ch@irxgroupoidfont}{#1}
+}
+\define@key[chairx]{fonts}{hilbertfont}{
+ \providecommand{\ch@irxhilbertfont}[1]{ }
+ \renewcommand{\ch@irxhilbertfont}{#1}
+}
+\define@key[chairx]{fonts}{liealgfont}{
+ \providecommand{\ch@irxliealgfont}[1]{ }
+ \renewcommand{\ch@irxliealgfont}{#1}
+}
+\define@key[chairx]{fonts}{modulefont}{
+ \providecommand{\ch@irxmodulefont}[1]{ }
+ \renewcommand{\ch@irxmodulefont}{#1}
+}
+\define@key[chairx]{fonts}{prehilbfont}{
+ \providecommand{\ch@irxprehilbfont}[1]{ }
+ \renewcommand{\ch@irxprehilbfont}{#1}
+}
+% \end{macrocode}
+%
+% Here we need to change the default operatorfont in order to get the
+% chairxoperatorfont also for |\operatorname| and
+% |\DeclareMathOperator|. Note that redefining |\operator@font| with
+% a symbol alphabet and not a symbol font forces us to use an
+% additional bracket in all definitions using |\operatorname| and
+% |\DeclareMathOperator|.
+%
+% \begin{macrocode}
+\define@key[chairx]{fonts}{operatorfont}{
+ \providecommand{\ch@irxoperatorfont}[1]{ }
+ \renewcommand{\ch@irxoperatorfont}{#1}
+}
+\define@key[chairx]{fonts}{ringfont}{
+ \providecommand{\ch@irxringfont}[1]{ }
+ \renewcommand{\ch@irxringfont}{#1}
+}
+\define@key[chairx]{fonts}{scriptfont}{
+ \providecommand{\ch@irxscriptfont}[1]{ }
+ \renewcommand{\ch@irxscriptfont}{#1}
+}
+\define@key[chairx]{fonts}{sheaffont}{
+ \providecommand{\ch@irxsheaffont}[1]{ }
+ \renewcommand{\ch@irxsheaffont}{#1}
+}
+\define@key[chairx]{fonts}{spacefont}{
+ \providecommand{\ch@irxspacefont}[1]{ }
+ \renewcommand{\ch@irxspacefont}{#1}
+}
+\define@key[chairx]{fonts}{topologyfont}{
+ \providecommand{\ch@irxtopologyfont}[1]{ }
+ \renewcommand{\ch@irxtopologyfont}{#1}
+}
+% \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\chairxfonts}
+%
+% Command for setting the fonts.
+%
+% \begin{macrocode}
+\newcommand{\chairxfonts}[1]{
+ \setkeys[chairx]{fonts}{#1}
+}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% We use the following default settings for fonts.
+%
+% \begin{macrocode}
+\chairxfonts{
+ algebrafont = \mathscr,
+ basisfont = \mathit,
+ categoryfont = \mathfrak,
+ categorynamefont = \mathsf,
+ fieldfont = \mathbb,
+ filterfont = \mathfrak,
+ functorfont = \mathsf,
+ groupfont = \mathrm,
+ groupoidfont = \mathfrak,
+ gerstenhaberfont = \mathfrak,
+ hilbertfont = \mathfrak,
+ liealgfont = \mathfrak,
+ modulefont = \mathscr,
+ prehilbfont = \mathcal,
+ operatorfont = \mathrm,
+ ringfont = \mathsf,
+ scriptfont = \mathrm,
+ sheaffont = \mathscr,
+ spacefont = \mathscr,
+ topologyfont = \mathscr
+}
+% \end{macrocode}
+%
+% code for grabbing a single glyph from some random font without
+% investing a new math alphabet: use only the wrapper macro as
+% |\ch@irxmathsymbol[mathtype]{fontname}{glyph}| with |mathtype| being
+% the optional type of the symbol with default being|\mathord|,
+% |fontname| the name of the font where the symbol is to be found and
+% |glyph| the number of the symbol inside the specified font.
+%
+% \begin{macrocode}
+\newcommand{\ch@irxfont}[1]{\fontfamily{#1}\fontencoding{U}\fontseries{m}\fontshape{n}\selectfont}
+\newcommand{\ch@irxsymbol}[2]{{\ch@irxfont{#1}\char#2}}
+\newcommand\ch@irxmathsymbol[3][\mathord]{%
+ #1{\ch@irxm@thsymbol{#2}{#3}}}
+\def\ch@irxm@thsymbol#1#2{\mathchoice
+ {\@ch@irxm@thsymbol{#1}{#2}\tf@size}
+ {\@ch@irxm@thsymbol{#1}{#2}\tf@size}
+ {\@ch@irxm@thsymbol{#1}{#2}\sf@size}
+ {\@ch@irxm@thsymbol{#1}{#2}\ssf@size}}
+\def\@ch@irxm@thsymbol#1#2#3{\mbox{\fontsize{#3}{#3}\ch@irxsymbol{#1}{#2}}}
+%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\fi
+% \end{macrocode} \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxmathFontsDoc.dtx b/macros/latex/contrib/nchairx/source/chairxmathFontsDoc.dtx
new file mode 100644
index 0000000000..1b728bc90c
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathFontsDoc.dtx
@@ -0,0 +1,100 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the documentation of all algebra related macros.
+%
+% Macros have to be described by (delete the first %)
+% \DescribeMacro{\macro}
+% Description and usage of the macro.
+%
+% The description will appear in the usage
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The implementation of the macros defined here has to be written in
+% chairxmathFonts.dtx
+%\fi
+%
+% The package uses different fonts for different groups of macros. The
+% font used for a particular macro is mentioned in the description of
+% that macro. The groups of fonts are:
+% \begin{itemize}
+% \item |algebrafont| for generic algebras.\\
+% Can be accessed via |\algebra|.\\
+% Default font: |\mathscr|
+% \item |basisfont| for bases of vector spaces.\\
+% Can be accessed via |\basis|.\\
+% Default font: |\mathit|
+% \item |categoryfont| for generic categories.\\
+% Can be accessed via |\category|.\\
+% Default font: |\mathfrak|
+% \item |categorynamefont| for predefined categories.\\
+% Can be accessed via |\categoryname|.\\
+% Default font: |\mathsf|
+% \item |fieldfont| for generic fields.\\
+% Can be accessed via |\field|.\\
+% Default font: |\mathbb|
+% \item |filterfont| for generic filters.\\
+% Can be accessed via |\filter|.\\
+% Default font: |\mathfrak|
+% \item |functorfont| for generic functors.\\
+% Can be accessed via |\functor|.\\
+% Default font: |\mathsf|
+% \item |gerstenhaberfont| for generic Gerstenhaber algebras.\\
+% Can be accessed via |\gerstenhaber|.\\
+% Default font: |\mathfrak|
+% \item |groupfont| for the matrix groups.\\
+% Can be accessed via |\group|.\\
+% Default font: |\mathrm|
+% \item |groupoidfont| for generic groupoids.\\
+% Can be accessed via |\groupoid|.\\
+% Default font: |\mathfrak|
+% \item |hilbertfont| for Hilbert spaces.\\
+% Can be accessed via |\hilbert|.\\
+% Default font: |\mathfrak|
+% \item |liealgfont| for generic Lie algebras.\\
+% Can be accessed via |\liealg|.\\
+% Default font: |\mathfrak|
+% \item |modulefont| for generic modules.\\
+% Can be accessed via |\module|.\\
+% Default font: |\mathscr|
+% \item |prehilbfont| for pre-Hilbert space.\\
+% Can be accessed via |\prehilb|.\\
+% Default font: |\mathcal|
+% \item |operatorfont| for most common operators.\\
+% Can be accessed via |\operator|.\\
+% Default font: |\mathrm|
+% \item |ringfont| for generic rings.\\
+% Can be accessed via |\ring|.\\
+% Default font: |\mathsf|
+% \item |scriptfont| for subscripts.\\
+% Can be accessed via |\script|.\\
+% Default font: |\mathrm|
+% \item |sheaffont| for generic sheaves.\\
+% Can be accessed via |\sheaf|.\\
+% Default font: |\mathscr|
+% \item |spacesfont| for predefined function spaces, e.g. |\Bounded| \\
+% Default font: |\mathscr|
+% \item |topologyfont| for generic topologies.\\
+% Can be accessed via |\topology|\\
+% Default font: |\mathscr|
+% \end{itemize}
+%
+% \DescribeMacro{\chairxfonts}
+% The |\chairxfonts| macro can be used to redefine the fonts of the
+% different groups of macros. It takes as argument a comma separated
+% list of group names and the new font macros, e.g.
+% \begin{verbatim}
+% \chairxfonts{algebrafont = \mathfrak, scriptfont = \mathrm}
+% \end{verbatim}
+% \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxmathGeneral.dtx b/macros/latex/contrib/nchairx/source/chairxmathGeneral.dtx
new file mode 100644
index 0000000000..1859cad269
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathGeneral.dtx
@@ -0,0 +1,277 @@
+% \iffalse meta-
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the implementation of all category theory related macros .
+%
+% Macros have to be described by (delete the first %)
+% %\begin{macro}{\macro}
+% % Description of the implementation.
+% % \begin{macrocode}
+%\newcommand{\macro}[] {}
+% % \end{macrocode}
+% %\end{macro}
+%
+% The implementation and description will appear in the implementation
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The documentation of the macros defined here has to be written in
+% chairxmathGeneralDoc.dtx
+% \fi
+%
+% First we check of macros should be included:
+% \begin{macrocode}
+\if@loadmath
+% \end{macrocode}
+%
+% \subsubsection{General Math Commands} \label{sec:GeneralMathCommands}
+%
+%\begin{macro}{\I}
+% \begin{macrocode}
+\newcommand{\I}{\mathrm{i}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\E}
+% \begin{macrocode}
+\newcommand{\E}{\mathrm{e}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\D}
+% \begin{macrocode}
+\newcommand{\D}{\mathop{}\!\mathrm{d}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\cc}
+% \begin{macrocode}
+\newcommand{\cc}[1]{\overline{{#1}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\sign}
+% \begin{macrocode}
+\newcommand{\sign}{\operatorname{\ch@irxoperatorfont{sign}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\RE}
+% \begin{macrocode}
+\newcommand{\RE}{\operatorname{\ch@irxoperatorfont{Re}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\IM}
+% \begin{macrocode}
+\newcommand{\IM}{\operatorname{\ch@irxoperatorfont{Im}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Unit}
+% \begin{macrocode}
+\newcommand{\Unit}{\mathbb{1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\const}
+% \begin{macrocode}
+\newcommand{\const}{\operatorname{\mathit{const}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\canonical}
+% \begin{macrocode}
+\newcommand{\canonical}{\ch@irxscriptfont{can}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\pt}
+% \begin{macrocode}
+\newcommand{\pt}{\ch@irxoperatorfont{pt}}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Restrictions} \label{sec:Restrictions}
+%
+%\begin{macro}{\at}
+% \begin{macrocode}
+\newcommand{\at}[2][\big]{#1\vert_{#2}}
+% \end{macrocode}
+%\end{macro}
+%
+%
+% \subsubsection{Maps and Related Stuff} \label{sec:MapsandRelatedStuff}
+%
+%\begin{macro}{\Map}
+% \begin{macrocode}
+\newcommand{\Map}{\ch@irxoperatorfont{Map}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Bij}
+% \begin{macrocode}
+\newcommand{\Bij}{\ch@irxoperatorfont{Bij}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\argument}
+% \begin{macrocode}
+\newcommand{\argument}{\,\cdot\,}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\domain}
+% \begin{macrocode}
+\newcommand{\domain}{\operatorname{\ch@irxoperatorfont{dom}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\range}
+% \begin{macrocode}
+\newcommand{\range}{\operatorname{\ch@irxoperatorfont{range}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\id}
+% \begin{macrocode}
+\newcommand{\id}{\operatorname{\ch@irxoperatorfont{id}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\pr}
+% \begin{macrocode}
+\newcommand{\pr}{\operatorname{\ch@irxoperatorfont{pr}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\inv}
+% \begin{macrocode}
+\newcommand{\inv}{\operatorname{\ch@irxoperatorfont{inv}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ev}
+% \begin{macrocode}
+\newcommand{\ev}{\operatorname{\ch@irxoperatorfont{ev}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\image}
+% \begin{macrocode}
+\newcommand{\image}{\operatorname{\ch@irxoperatorfont{im}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\graph}
+% \begin{macrocode}
+\newcommand{\graph}{\operatorname{\ch@irxoperatorfont{graph}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\coimage}
+% \begin{macrocode}
+\newcommand{\coimage}{\operatorname{\ch@irxoperatorfont{coim}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\coker}
+% \begin{macrocode}
+\newcommand{\coker}{\operatorname{\ch@irxoperatorfont{coker}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\operator}
+% \begin{macrocode}
+\newcommand{\operator}[1]{\operatorname{\ch@irxoperatorfont{#1}}}
+% \end{macrocode}
+%\end{macro}
+%
+% \subsubsection{Relations} \label{sec:Relations}
+%
+%\begin{macro}{\later}
+% \begin{macrocode}
+\newcommand{\later}{\mathrel{\succcurlyeq}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\earlier}
+% \begin{macrocode}
+\newcommand{\earlier}{\mathrel{\preccurlyeq}}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Sums and Products}
+%
+%\begin{macro}{\bigop}
+% To define sum-like operators that are scaled up in displaystyle we define the following command taken
+% from tex.stackexchange.com/questions/23432/how-to-create-my-own-math-operator-with-limits
+% \begin{macrocode}
+\DeclareRobustCommand\big@p[2][1]{%
+ \mathop{\vphantom{\sum}\mathpalette\bigop@{{#1}{#2}}}\slimits@
+}
+\newcommand{\bigop@}[2]{\bigop@@#1#2}
+\newcommand{\bigop@@}[3]{%
+ \vcenter{
+ \sbox\z@{$#1\sum$}
+ \hbox{\resizebox{\ifx#1\displaystyle#2\fi\dimexpr\ht\z@+\dp\z@}{!}{$\m@th#3$}}
+ }
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\bigplus}
+% The command |\DOTSB| is used for correct behaviour of |\dots| before or after the command.
+% \begin{macrocode}
+\newcommand{\bigplus}{\DOTSB\big@p{+}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\bigtimes}
+% \begin{macrocode}
+\newcommand{\bigtimes}{\DOTSB\big@p{\times}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\biprod}
+% \begin{macrocode}
+\newcommand{\biprod}{\DOTSB\big@p{\mathrel{\prod\hspace{-0.4cm}\coprod}}}
+% \end{macrocode}
+%\end{macro}
+%
+% \subsubsection{Labels} \label{sec:Labels}
+%
+% Smiley from |wasysym|
+%
+% \begin{macro}{\smiley}
+% \begin{macrocode}
+\newcommand{\smiley}{\ch@irxmathsymbol[\mathord]{wasy}{44}}
+% \end{macrocode}
+% \end{macro}
+%
+% Frownie from |wasysym|
+%
+% \begin{macro}{\frownie}
+% \begin{macrocode}
+\newcommand{\frownie}{\ch@irxmathsymbol[\mathord]{wasy}{47}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\heart}
+% \begin{macrocode}
+\newcommand{\heart}{\heartsuit}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fi
+% \end{macrocode} \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxmathGeneralDoc.dtx b/macros/latex/contrib/nchairx/source/chairxmathGeneralDoc.dtx
new file mode 100644
index 0000000000..cdf52653b6
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathGeneralDoc.dtx
@@ -0,0 +1,184 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the documentation of all general mathematics macros .
+%
+% Macros have to be described by (delete the first %)
+% \DescribeMacro{\macro}
+% Description and usage of the macro.
+%
+% The description will appear in the usage
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The implementation of the macros defined here has to be written in
+% chairxmathGeneral.dtx
+%\fi
+%
+% \subsubsection{General Math Commands} \label{sec:Doc_GeneralMathCommands}
+%
+% \DescribeMacro{\I}
+% Imaginary unit |\I|: $\I$
+%
+%\DescribeMacro{\E}
+% Euler number |\E|: $\E$
+%
+%\DescribeMacro{\D}
+% Differential |\D x|: $\D x$
+%
+%\DescribeMacro{\cc}
+% Complex conjugation |z \mapsto \cc{z}|: $z \mapsto \cc{z}$
+%
+%\DescribeMacro{\sign}
+% Signum |\sign \sigma|: $\sign \sigma$ \\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\RE}
+% Real part (the standard symbols are sooo ugly) |\RE(z)|: $\RE(z)$ \\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\IM}
+% Imaginary part |\IM(z)|: $\IM(z)$ \\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\Unit}
+% Unit element |\Unit|: $\Unit$
+%
+%\DescribeMacro{\const}
+% Generic constant |\const|: $\const$ \\
+% Uses |mathit| as font.
+%
+%\DescribeMacro{\canonical}
+% Subscript for canonical |\omega_\canonical|: $\omega_\canonical$ \\
+% Uses |scriptfont|.
+%
+%\DescribeMacro{\pt}
+% A single point |\{\pt\}|: $\{\pt\}$ \\
+% Uses |operatorfont|
+%
+%\subsubsection{Restrictions} \label{sec:Doc_Restrictions}
+%
+%\DescribeMacro{\at}
+% Restriction of a map to a subset |f\at{U}|: $f\at{U}$
+% or with optional size |f\at[\Big]{U}|: $f\at[\Big]{U}$. \\
+% Default size is |\big|.
+%
+% \subsubsection{Maps and Related Stuff} \label{sec:Doc_MapsandRelatedStuff}
+%
+%\DescribeMacro{\Map}
+% Space of maps |\Map(X, Y)|: $\Map(X, Y)$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\Bij}
+% Space of bijections |\Bij(X, Y)|: $\Bij(X, Y)$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\argument}
+% Generic argument of a map |f(\argument)|: $f(\argument)$
+%
+%\DescribeMacro{\domain}
+% Domain of a map |\domain(\phi)|: $\domain(\phi)$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\range}
+% Range of a map |\range(\phi)|: $\range(\phi)$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\id}
+% Identity map |\id|: $\id$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\pr}
+% Generic projection |\pr \colon E \to M|: $\pr \colon E \to M$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\inv}
+% Inversion map |\inv \colon g \mapsto g^{-1}|: $\inv \colon g \mapsto g^{-1}$ \\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\ev}
+% Evaluation map |\ev \colon V \tensor V^* \to \mathbb{k}|: $\ev \colon V \tensor V^* \to \mathbb{k}$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\image}
+% Image of a map |\image(f)|: $\image(f)$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\graph}
+% Graph of a map |\graph(f)|: $\graph(f)$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\coimage}
+% Coimage of a map |\coimage(f)|: $\coimage(f)$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\coker}
+% Cokernel of a map |\coker(f)|: $\coker(f)$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\operator}
+% This macro allows to construct own mathematical operators
+% whose fonts are consistent with the predefined operators of |nchairx|
+% |\operator{asso}|: $\operator{asso}$\\
+% Uses |operatorfont|.
+%
+% \subsubsection{Relations} \label{sec:Doc_Relations}
+%
+%\DescribeMacro{\later}
+% Later in a directed set |i \later j|: $i \later j$
+
+%\DescribeMacro{\earlier}
+% Earlier in a directed set |i \earlier j|: $i \earlier j$
+%
+%\subsubsection{Big Sums and Products}
+%
+%\DescribeMacro{\bigplus}
+% A big plus sign that can be decorated with limits. Similar to the usual sum it can be used inline
+%|\bigplus_{k=1}^n V_k|: $\bigplus_{k=1}^n V_k$
+% and in displaystyle:
+% \begin{equation*}
+% \bigplus_{k=1}^n V_k
+% \end{equation*}
+%
+%\DescribeMacro{\bigtimes}
+% A big times sign that can be decorated with limits. Similar to the usual sum it can be used inline
+%|\bigtimes_{k=1}^n V_k|: $\bigtimes_{k=1}^n V_k$
+% and in displaystyle:
+% \begin{equation*}
+% \bigtimes_{k=1}^n V_k
+% \end{equation*}
+%
+%\DescribeMacro{\biprod}
+% A biproduct sign that can be decorated with limits. Similar to the usual sum it can be used inline
+%|\biprod_{k=1}^n V_k|: $\biprod_{k=1}^n V_k$
+% and in displaystyle:
+% \begin{equation*}
+% \biprod_{k=1}^n V_k
+% \end{equation*}
+%
+% \subsubsection{Labels} \label{sec:Doc_Labels}
+%
+% In proofs we sometimes want to label an equation by a symbol and
+% not by an equation number. Typical choices are of course ($*$) or
+% ($**$). But as proofs become longer, some additional labels are nice
+% to have:
+%
+% \DescribeMacro{\smiley}
+% A smiley |\smiley| $\smiley$
+%
+% \DescribeMacro{\frownie}
+% A frownie |\frownie| $\frownie$
+%
+% \DescribeMacro{\heart}
+% A heart |\heart| $\heart$
+% \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxmathLinalg.dtx b/macros/latex/contrib/nchairx/source/chairxmathLinalg.dtx
new file mode 100644
index 0000000000..21f84c5ad2
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathLinalg.dtx
@@ -0,0 +1,196 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the implementation of all linear algebra related macros .
+%
+% Macros have to be described by (delete the first %)
+% %\begin{macro}{\macro}
+% % Description of the implementation.
+% % \begin{macrocode}
+%\newcommand{\macro}[] {}
+% % \end{macrocode}
+% %\end{macro}
+%
+% The implementation and description will appear in the implementation
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The documentation of the macros defined here has to be written in
+% chairxmathLinalgDoc.dtx
+%\fi
+%
+% First we check of macros should be included:
+% \begin{macrocode}
+\if@loadmath
+% \end{macrocode}
+%
+%\subsubsection{General Linear Algebra}
+%
+%\begin{macro}{\tr}
+% \begin{macrocode}
+\newcommand{\tr}{\operatorname{\ch@irxoperatorfont{tr}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\rank}
+% \begin{macrocode}
+\newcommand{\rank}{\operatorname{\ch@irxoperatorfont{rank}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\codim}
+% \begin{macrocode}
+\newcommand{\codim}{\operatorname{\ch@irxoperatorfont{codim}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\diag}
+% \begin{macrocode}
+\newcommand{\diag}{\operatorname{\ch@irxoperatorfont{diag}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Trans}
+% \begin{macrocode}
+\newcommand{\Trans}{{\ch@irxscriptfont{\scriptscriptstyle{T}}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Mat}
+% \begin{macrocode}
+\newcommand{\Mat}{\ch@irxoperatorfont{M}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\SymMat}
+% \begin{macrocode}
+\newcommand{\SymMat}{\ch@irxoperatorfont{SymMat}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ann}
+% \begin{macrocode}
+\newcommand{\ann}{\ch@irxscriptfont{ann}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Span}
+% \begin{macrocode}
+\newcommand{\Span}[1][]{\operatorname{\ch@irxoperatorfont{span}_{#1}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\basis}
+% \begin{macrocode}
+\newcommand{\basis}[1]{\ch@irxbasisfont{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Tensors}
+%
+%\begin{macro}{\tensor}
+% \begin{macrocode}
+\renewcommand{\tensor}[1][{}]{\mathbin{\otimes_{\scriptscriptstyle{#1}}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Tensor}
+% \begin{macrocode}
+\newcommand{\Tensor}{\ch@irxoperatorfont{T}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Anti}
+% \begin{macrocode}
+\newcommand{\Anti}{\Lambda}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Sym}
+% \begin{macrocode}
+\newcommand{\Sym}{\ch@irxoperatorfont{S}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Symmetrizer}
+% \begin{macrocode}
+\newcommand{\Symmetrizer}{\operatorname{\ch@irxoperatorfont{Sym}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\AntiSymmetrizer}
+% \begin{macrocode}
+\newcommand{\AntiSymmetrizer}{\operatorname{\ch@irxoperatorfont{Alt}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ins}
+% \begin{macrocode}
+\newcommand{\ins}{\operatorname{\ch@irxoperatorfont{i}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\jns}
+% \begin{macrocode}
+\newcommand{\jns}{\operatorname{\ch@irxoperatorfont{j}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\insa}
+% \begin{macrocode}
+\newcommand{\insa}{\ins_{\ch@irxscriptfont{a}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\inss}
+% \begin{macrocode}
+\newcommand{\inss}{\ins_{\ch@irxscriptfont{s}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\degs}
+% \begin{macrocode}
+\newcommand{\degs}{\ch@irxoperatorfont{deg}_{\ch@irxscriptfont{s}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\dega}
+% \begin{macrocode}
+\newcommand{\dega}{\ch@irxoperatorfont{deg}_{\ch@irxscriptfont{a}}}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\subsubsection{Inner Products}
+%
+%\begin{macro}{\SP}
+% \begin{macrocode}
+\DeclarePairedDelimiter{\SP} {\langle}{\rangle}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\littlepara}
+% \begin{macrocode}
+\newcommand{\littlepara}{{\scriptscriptstyle\parallel}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\IP}
+% \begin{macrocode}
+\newcommand{\IP}[6][{}]{\decorate*[^{#2}_{#3}]{\SP[#1]{#4}}{^{#5}_{#6}}}
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macrocode}
+\fi
+% \end{macrocode} \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxmathLinalgDoc.dtx b/macros/latex/contrib/nchairx/source/chairxmathLinalgDoc.dtx
new file mode 100644
index 0000000000..0f9c787e4f
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathLinalgDoc.dtx
@@ -0,0 +1,135 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the documentation of all linear algebra related macros .
+%
+% Macros have to be described by (delete the first %)
+% \DescribeMacro{\macro}
+% Description and usage of the macro.
+%
+% The description will appear in the usage
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The implementation of the macros defined here has to be written in
+% chairxmathLinalg.dtx
+%\fi
+%
+%\subsubsection{General Linear Algebra}
+%
+%\DescribeMacro{\tr}
+% Trace of a linear map |\tr(A)|: $\tr(A)$ \\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\rank}
+% Rank of a linear map |\rank(A)|: $\rank(A)$ \\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\codim}
+% Codimension |\codim U|: $\codim U$ \\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\diag}
+% Diagonal (for filling matrices etc.) |\diag(1,-1, -1)|: $\diag(1,-1, -1)$ \\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\Trans}
+% Transposition of matrices |A^\Trans|: $A^\Trans$ \\
+% Uses |scriptfont|.
+%
+%\DescribeMacro{\Mat}
+% Matrices |\Mat_n(\mathbb{R})|: $\Mat_n(\mathbb{R})$ \\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\SymMat}
+% Symmetric matrices |\SymMat_n(\mathbb{R})|: $\SymMat_n(\mathbb{R})$ \\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\ann}
+% Annihilator of a subspace |U^\ann|: $U^\ann$ \\
+% Uses |scriptfont|.
+%
+%\DescribeMacro{\Span}
+% Span of something |\Span\{v, u\}|: $\Span\{v, u\}$
+% and with optional argument
+% |\Span[\mathbb{C}]\{v,u\}|: $\Span[\mathbb{C}]\{v,u\}$ \\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\basis}
+% Font for basis vectors |\basis{e}_i|: $\basis{e}_i$ \\
+% Uses |basisfont|.
+%
+%\subsubsection{Tensors}
+%
+%\DescribeMacro{\tensor}
+% Generic tensor product over some ring |a \tensor b|: $a \tensor b$.\\
+% With optional subscript |V \tensor[\algebra{A}] U|: $V \tensor[\algebra{A}] U$
+%
+%\DescribeMacro{\Tensor}
+% Tensor powers, tensor algebra |\Tensor^\bullet(V)|: $\Tensor^\bullet(V)$ \\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\Anti}
+% Antisymmetric tensor powers, Grassmann algebra |\Anti(V)|: $\Anti(V)$
+%
+%\DescribeMacro{\Sym}
+% Symmetric tensor powers, symmetric algebra |\Sym^\bullet(V)|: $\Sym^\bullet(V)$ \\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\Symmetrizer}
+% Symmetrizer |\Symmetrizer_n|: $\Symmetrizer_n$
+%
+%\DescribeMacro{\AntiSymmetrizer}
+% Anti-symmetrizer |\AntiSymmetrizer|: $\AntiSymmetrizer$
+%
+%\DescribeMacro{\ins}
+% Generic insertion map |\ins_X|: $\ins_X$ \\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\jns}
+% Generic right insertion map |\jns_X|: $\jns_X$ \\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\insa}
+% Antisymmetric insertion map |\insa(X)|: $\insa(X)$ \\
+% Uses |operatorfont|, |scriptfont|.
+%
+%\DescribeMacro{\inss}
+% Symmetric insertion map |\inss(v)|: $\inss(v)$ \\
+% Uses |operatorfont|, |scriptfont|.
+%
+%\DescribeMacro{\dega}
+% Antisymmetric degree |\dega(a) = ka|: $\dega(a) = ka$ \\
+% Uses |operatorfont|, |scriptfont|.
+%
+%\DescribeMacro{\degs}
+% Symmetric degree |\degs(X) = \ell X|: $\degs(X) = \ell X$ \\
+% Uses |operatorfont|, |scriptfont|.
+%
+%\subsubsection{Inner Products}
+%
+%\DescribeMacro{\SP}
+% Simple scalar product |\SP{x, y}|: $\SP{x, y}$.
+%
+%\DescribeMacro{\littlepara}
+% Small parallel to be used as a subscript |v_\littlepara|: $v_\littlepara$
+%
+%\DescribeMacro{\IP}
+% Generic inner product with five arguments to decorate it |\IP[]{}{}{}{}{}| and an optional argument to adjust the size:
+%\[
+%\IP[\big]{}{B}{z, w}{\perp}{R}
+%\quad
+%\textrm{and}
+%\quad
+%\IP[\Big]{\perp}{\algebra{B}}{\prod x_i, y}{\prime}{\algebra{A}}
+%\]
diff --git a/macros/latex/contrib/nchairx/source/chairxmathStatistics.dtx b/macros/latex/contrib/nchairx/source/chairxmathStatistics.dtx
new file mode 100644
index 0000000000..0a6337059e
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathStatistics.dtx
@@ -0,0 +1,65 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the implementation of all statistics related macros .
+%
+% Macros have to be described by (delete the first %)
+% %\begin{macro}{\macro}
+% % Description of the implementation.
+% % \begin{macrocode}
+%\newcommand{\macro}[] {}
+% % \end{macrocode}
+% %\end{macro}
+%
+% The implementation and description will appear in the implementation
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The documentation of the macros defined here has to be written in
+% chairxmathStatisticsDoc.dtx
+%\fi
+%
+% First we check of macros should be included:
+% \begin{macrocode}
+\if@loadmath
+% \end{macrocode}
+%
+%\subsubsection{General Statistics}
+%
+%\begin{macro}{\EX}
+% \begin{macrocode}
+\newcommand{\EX}{\operatorname{\ch@irxoperatorfont{E}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Var}
+% \begin{macrocode}
+\newcommand{\Var}{\operatorname{\ch@irxoperatorfont{Var}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Cov}
+% \begin{macrocode}
+\newcommand{\Cov}{\operatorname{\ch@irxoperatorfont{Cov}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Cor}
+% \begin{macrocode}
+\newcommand{\Cor}{\operatorname{\ch@irxoperatorfont{Cor}}}
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macrocode}
+\fi
+% \end{macrocode} \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxmathStatisticsDoc.dtx b/macros/latex/contrib/nchairx/source/chairxmathStatisticsDoc.dtx
new file mode 100644
index 0000000000..96550eb121
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathStatisticsDoc.dtx
@@ -0,0 +1,45 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the documentation of all statistics related macros .
+%
+% Macros have to be described by (delete the first %)
+% \DescribeMacro{\macro}
+% Description and usage of the macro.
+%
+% The description will appear in the usage
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The implementation of the macros defined here has to be written in
+% chairxmathStatistics.dtx
+%\fi
+%
+%\subsubsection{Macros for General Statistics}
+%
+%\DescribeMacro{\EX}
+% Expectation value |\EX_\omega(A)|: $\EX_\omega(A)$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\Var}
+% Variance |\Var(a)|: $\Var(a)$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\Cov}
+% Covariance |\Cov_\omega(a, b)|: $\Cov_\omega(a, b)$\\
+% Uses |operatorfont|.
+%
+%\DescribeMacro{\Cor}
+% Correlation |\Cor(a, b)|: $\Cor(a, b)$\\
+% Uses |operatorfont|.
+% \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxmathTopology.dtx b/macros/latex/contrib/nchairx/source/chairxmathTopology.dtx
new file mode 100644
index 0000000000..b360d1acc1
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathTopology.dtx
@@ -0,0 +1,146 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the implementation of all topology related macros .
+%
+% Macros have to be described by (delete the first %)
+% %\begin{macro}{\macro}
+% % Description of the implementation.
+% % \begin{macrocode}
+%\newcommand{\macro}[] {}
+% % \end{macrocode}
+% %\end{macro}
+%
+% The implementation and description will appear in the implementation
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The documentation of the macros defined here has to be written in
+% chairxmathTopologyDoc.dtx
+%\fi
+%
+% First we check of macros should be included:
+% \begin{macrocode}
+\if@loadmath
+% \end{macrocode}
+%
+%\subsubsection{General Topology}
+%
+% \begin{macro}{\cl}
+% \begin{macrocode}
+\newcommand{\cl}{\ch@irxscriptfont{cl}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\scl}
+% \begin{macrocode}
+\newcommand{\scl}{\ch@irxscriptfont{scl}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\interior}
+% \begin{macrocode}
+\newcommand{\interior}{\circ}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\boundary}
+% \begin{macrocode}
+\newcommand{\boundary}{\partial}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\supp}
+% \begin{macrocode}
+\newcommand{\supp}{\operatorname{\ch@irxoperatorfont{supp}}}
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macro}{\dist}
+% \begin{macrocode}
+\newcommand{\dist}{\operatorname{\ch@irxoperatorfont{dist}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\topology}
+% \begin{macrocode}
+\newcommand{\topology}[1]{\ch@irxtopologyfont{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\filter}
+% \begin{macrocode}
+\newcommand{\filter}[1]{\ch@irxfilterfont{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\sheaf}
+% \begin{macrocode}
+\newcommand{\sheaf}[1]{\ch@irxsheaffont{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Sections}
+% \begin{macrocode}
+\newcommand{\Sections}{\operatorname{\ch@irxoperatorfont{Sections}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HOM}
+% \begin{macrocode}
+\newcommand{\HOM}{\operatorname{\ch@irxsheaffont{H}\!\mathit{om}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\etale}
+% \begin{macrocode}
+\DeclarePairedDelimiter{\etale}{\lvert}{\rvert}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Categories from Topology}
+%
+% \begin{macro}{\topological}
+% \begin{macrocode}
+\newcommand{\topological}{\categoryname{top}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Topological}
+% \begin{macrocode}
+\newcommand{\Topological}{\categoryname{Top}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Sheaves}
+% \begin{macrocode}
+\newcommand{\Sheaves}{\categoryname{Sheaves}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PreSheaves}
+% \begin{macrocode}
+\newcommand{\PreSheaves}{\categoryname{PreSheaves}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Etale}
+% \begin{macrocode}
+\newcommand{\Etale}{\categoryname{Etale}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fi
+% \end{macrocode} \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/chairxmathTopologyDoc.dtx b/macros/latex/contrib/nchairx/source/chairxmathTopologyDoc.dtx
new file mode 100644
index 0000000000..60eb653ba7
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/chairxmathTopologyDoc.dtx
@@ -0,0 +1,96 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+% 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.
+%
+% This file contains the documentation of all topology related macros .
+%
+% Macros have to be described by (delete the first %)
+% \DescribeMacro{\macro}
+% Description and usage of the macro.
+%
+% The description will appear in the usage
+% part of the documentation. Use \subsubsection{} etc. for structuring.
+%
+% The implementation of the macros defined here has to be written in
+% chairxmathTopology.dtx
+%\fi
+%
+%\subsubsection{Macros for Topology}
+%
+% \DescribeMacro{\cl}
+% Topological closure |X^\cl|: $X^\cl$\\
+% Uses |scriptfont|.
+%
+% \DescribeMacro{\scl}
+% Sequential closure |A^\scl|: $A^\scl$\\
+% Uses |scriptfont|.
+%
+% \DescribeMacro{\interior}
+% Open interior |A^\interior|: $A^\interior$
+%
+% \DescribeMacro{\boundary}
+% Boundary of a subset |\boundary A|: $\boundary A$
+%
+% \DescribeMacro{\supp}
+% Support of a function |\supp f|: $\supp f$\\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\dist}
+% Distance |\dist(p, A)|: $\dist(p, A)$\\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\topology}
+% Font for topology |\topology{M}|: $\topology{M}$\\
+% Uses |topologyfont|.
+%
+% \DescribeMacro{\filter}
+% Font for filter |\filter{F}|: $\filter{F}$\\
+% Uses |filterfont|.
+%
+% \DescribeMacro{\sheaf}
+% Font for sheaves |\sheaf{F}|: $\sheaf{F}$\\
+% Uses |sheaffont|.
+%
+% \DescribeMacro{\Sections}
+% Discontinuous sections of a presheaf |\Sections(\sheaf{F})|: $\Sections(\sheaf{F})$\\
+% Uses |operatorfont|.
+%
+% \DescribeMacro{\HOM}
+% Sheaf of morphisms between sheaves |\HOM(\sheaf{F}, \sheaf{G})|: $\HOM(\sheaf{F}, \sheaf{G})$\\
+% Uses |sheaffont| and |\mathit|.
+%
+% \DescribeMacro{\etale}
+% Étalé space of presheaf |\etale{\sheaf{F}}|: $\etale{\sheaf{F}}$.
+%
+%
+% \subsubsection{Categories from Topology}
+%
+% \DescribeMacro{\topological}
+% Category of topological spaces |\topological|: $\topological$ \\
+% Uses |categoryname|.
+%
+% \DescribeMacro{\Topological}
+% Category of Hausdorff topological spaces |\Topological|: $\Topological$ \\
+% Uses |categoryname|.
+%
+% \DescribeMacro{\Sheaves}
+% Category of sheaves over a space |\Sheaves(M)|: $\Sheaves(M)$ \\
+% Uses |categoryname|.
+%
+% \DescribeMacro{\PreSheaves}
+% Category of presheaves over a space |\PreSheaves(M)|: $\PreSheaves(M)$ \\
+% Uses |categoryname|.
+%
+% \DescribeMacro{\Etale}
+% Category of étalé spaces over a space |\Etale(M)|: $\Etale(M)$ \\
+% Uses |categoryname|.
diff --git a/macros/latex/contrib/nchairx/source/nchairx.dtx b/macros/latex/contrib/nchairx/source/nchairx.dtx
new file mode 100644
index 0000000000..3350a15508
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/nchairx.dtx
@@ -0,0 +1,369 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 - 2021 by ChairX
+%
+ % 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.
+%
+% \fi
+%
+%\iffalse
+%<*nchairx>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{nchairx}
+ [2021/07/29 v1.0.0 First major release]
+%</nchairx>
+%
+%<*driver>
+\documentclass{ltxdoc}
+
+\usepackage[english,german,strings]{babel}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{nchairx}
+\usepackage{ifdraft}
+\usepackage{gitinfo2}
+\usepackage[linktoc=all]{hyperref}
+
+\EnableCrossrefs
+
+\CodelineIndex
+
+\RecordChanges
+
+\begin{document}
+ \DocInput{nchairx.dtx}
+\end{document}
+%</driver>
+%\fi
+%
+% \CheckSum{2012}
+%
+% \changes{v0.1}{2018/02/27}{Initial test}
+% \changes{v0.9}{2019/02/21}{First official release}
+% \changes{v1.0.0}{2021/07/29}{First major release}
+%
+% \GetFileInfo{nchairx.sty}
+%
+% \title{The \textsf{nChairX} package}
+% \author{ChairX \\
+% \ifdraft{Last changes by \gitAuthorName{} on \gitAuthorDate \\ }
+% \ifdraft{Git revision of nchairx:}
+% \ifdraft{\texttt{\gitAbbrevHash{}} {\gitReferences{}} \\ }
+% \ifdraft{}
+% Version \fileversion{} (\filedate) \\
+% \texttt{marvin.dippell@mathematik.uni-wuerzburg.com}}
+%
+% \maketitle
+%
+% \selectlanguage{english}
+%
+% \begin{abstract}
+% This is a part of the new nChairX package providing the famous
+% ChairX style.
+% \end{abstract}
+%
+% \setcounter{tocdepth}{2}
+% \tableofcontents
+%
+% \section{Introduction}
+% This package defines the New ChairX style. Based on previous
+% versions we provide a major clean-up with many additional features
+% and easier handling. The style file is a rather high-level style
+% file providing many standard environments needed in math, many
+% macros needed in differential geometry, algebra, and analysis and
+% some other useful tools. The style file includes several other
+% packages and sets various defaults. There is a companion package
+% called |chairxmath| which only defines the math-related macros but
+% avoids setting environments etc.
+%
+%
+% \section{Usage}
+% \label{sec:Usage}
+%
+% To use the package you have to include it as usual by
+% \begin{center}
+% \begin{tabular}[l]{p{0.8\textwidth}}
+% \verb|\usepackage{nchairx}|
+% \end{tabular}
+% \end{center}
+% and specify some options if needed.
+%
+%
+% \subsection{Package Options}
+%
+% \DescribeMacro{noMath} The math
+% macros of the |nchairx| package can be excluded with the option |noMath|.
+% This can be used if one does not need the math macros of |nchairx| and there occur
+% clashes with other packages or macros, but the environments and other settings of
+% |nchairx| are still desired.
+%
+% \subsection{Setting the Defaults}
+% \label{sec:SettingDefaults}
+%
+% \input{chairxDefaultsDoc.dtx}
+%
+%
+% \subsection{Supporting many Languages}
+% \label{sec:LanguageSupport}
+%
+% For the use of other languages than English (our default) the
+% options of the |babel| package are respected. The important keywords
+% of \textsf{nChairX} (essentially the names of the environments) will
+% then be translated accordingly. In order to enable this you have to
+% load |babel| with the additional language you intend to use, e.g.
+% \begin{center}
+% \begin{tabular}[l]{p{0.8\textwidth}}
+% \verb|\usepackage[german,strings]{babel}|
+% \end{tabular}
+% \end{center}
+% \emph{before} you load |nchairx|.
+% Currently, only German is supported beside English. Then you can
+% switch between the languages inside one document with
+% |\selectlanguage{language}| to get the correct names of the
+% keywords. When loading several languages it is always a good idea
+% to place an explicit |\selectlanguage{language}| at the beginning of
+% the document to set the stage correctly. Note that you have to use
+% the |strings| option for babel as well.
+%
+%
+% \subsection{Environments}
+% \label{sec:Environments}
+%
+% The \textsf{nChairX} package provides many predefined mathematical
+% environments like definitions, theorems etc. The styling is fairly
+% standard. The names of the environments are language sensitive based
+% on the |babel| package.
+%
+% \input{chairxEnvDoc.dtx}
+%
+%
+% \subsection{Logo Support}
+% \label{sec:LogoSupport}
+%
+% \input{chairxLogoDoc.dtx}
+%
+%
+% \section{The Math Macros}
+%
+% One of the main purposes of |nchairx| is to provide several (in
+% fact, many) new math macros needed in various situations: we have
+% support for many things in differential geometry, algebra, and
+% functional analysis. The math macros can be used independently of
+% the full |nchairx| package under the name |chairxmath|. However,
+% |nchairx| always includes the math macros.
+%
+% \subsection{The Handling of the Fonts}
+% \input{chairxmathFontsDoc.dtx}
+%
+% \subsection{New Delimiter Sizes}
+% \input{chairxmathDelimitersDoc.dtx}
+%
+% \subsection{Decoration}
+% \input{chairxmathDecorationDoc.dtx}
+%
+% \setlength{\parindent}{0pt}
+%
+% \subsection{General Mathematics Macros}
+% \input{chairxmathGeneralDoc.dtx}
+%
+% \subsection{Algebra}
+% \input{chairxmathAlgebraDoc.dtx}
+%
+% \subsection{Analysis}
+% \input{chairxmathAnalysisDoc.dtx}
+%
+% \subsection{Category Theory}
+% \input{chairxmathCategoryDoc.dtx}
+%
+% \subsection{Differential Geometry}
+% \input{chairxmathDiffgeoDoc.dtx}
+%
+% \subsection{Linear Algebra}
+% \input{chairxmathLinalgDoc.dtx}
+%
+% \subsection{Statistics}
+% \input{chairxmathStatisticsDoc.dtx}
+%
+% \subsection{Topology}
+% \input{chairxmathTopologyDoc.dtx}
+%
+% \section{Known Bugs and Conflicts}
+%
+% There are several conflicts possible since |nchairx| loads a number
+% of other packages, some with explicit options needed to obtain the
+% aspired functionality. In this case, it can not be avoided that the
+% packages is loaded via |nchairx|.
+% \begin{itemize}
+% \item The package |xkeyval| is loaded without options. This is
+% necessary for many reasons like internal processing of ifs etc.
+% \item The package |amsmath| and |amssymb| are loaded. This can
+% sometimes yield unexpected conflicts with packages overwriting
+% commands from these two packages.
+% \item We define a smiley symbol from the |wasysym| font. This gives
+% a conflict with the |wasysym| package.
+% \item We load the |tensor| package and overwrite the |\tensor|
+% command of that package. The original macro is available under
+% |\originaltensor| and as identical macro |\decorate|.
+% \item We load |ntheorem| with specified options. This is unavoidable
+% to have the correct behaviour of our environments.
+% \item The theorem lists from the |ntheorem| package seem to crash
+% with the |babel| names we use for the actual environments. A
+% workaround for this is e.g.
+% \begin{quote}
+% |\makeatletter \listtheorems{definitions} \makeatother|
+% \end{quote}
+% to get the list of definitions.
+% \end{itemize}
+%
+% \StopEventually{\PrintIndex \PrintChanges}
+%
+%
+% \section{Implementation}
+% \label{sec:Implementation}
+%
+%
+% \subsection{Processing the Options}
+%
+% Before including other packages we make sure that we can use
+% key-value pairs as options using |xkeyval|
+%
+% \begin{macrocode}
+\RequirePackage{xkeyval}
+% \end{macrocode}
+%
+% Before including other required packages we have to process the
+% options that might alter the options given to these packages.
+%
+% First we create ifs for later use.
+%
+% \begin{macrocode}
+\newif\if@loadmath \@loadmathtrue
+% \end{macrocode}
+%
+% Define option for excluding math macros
+%
+% \begin{macrocode}
+\DeclareOptionX[chairx]<math>{noMath}{
+ \@loadmathfalse
+}
+% \end{macrocode}
+%
+% Process options for the style file
+%
+% \begin{macrocode}
+\ProcessOptionsX[chairx]<math>
+% \end{macrocode}
+%
+% \subsection{Required Packages}
+%
+% After processing the options we can now load the other required
+% packages. The following packages are required for the correct usage
+% of |nchairx|. We include them with some mandatory options.
+%
+% We will need several things from |amsmath| and |amssymb|.
+%
+% \begin{macrocode}
+\RequirePackage{amsmath}
+\RequirePackage{amssymb}
+% \end{macrocode}
+%
+% The |suffix| package allows to define $*$-versions of macros.
+%
+% \begin{macrocode}
+\RequirePackage{suffix}
+% \end{macrocode}
+%
+% The |mathtools| package provides so many nice things to type-set
+% math. Always a good idea to include this. In particular, we will
+% need the |\DeclarePairedDelimiter| command a lot.
+%
+% \begin{macrocode}
+\RequirePackage{mathtools}
+% \end{macrocode}
+%
+% The |ntheorem| package is used to define math environments of
+% various type. We need this package with particular options to make
+% the proof environment work correctly. Note that the proof
+% environment of |ntheorem| places the end-of-proof in a much better
+% way than every other available option.
+%
+% \begin{macrocode}
+\RequirePackage[amsmath,thmmarks,hyperref]{ntheorem}
+% \end{macrocode}
+%
+% The |graphicx| package is useful for many things. We need it for our
+% logo support to include pdf-files
+% \begin{macrocode}
+\RequirePackage{graphicx}
+% \end{macrocode}
+%
+% The |enumitem| package is now used to generate the enumerated lists
+% of items for the math environments. This allows various fine-tuning
+% and additional functionality for referring to items in lists.
+%
+% \begin{macrocode}
+\RequirePackage{enumitem}
+% \end{macrocode}
+%
+% The |tensor| package is used to place symbols at all possible
+% positions around one central symbol
+% \begin{macrocode}
+\RequirePackage{tensor}
+% \end{macrocode}
+%
+% Some additional fonts and symbols from |stmaryrd|: we only load the
+% font and grab those symbols we actually need to keep things easy.
+%
+% \begin{macrocode}
+\DeclareSymbolFont{stmry}{U}{stmry}{m}{n}
+\SetSymbolFont{stmry}{bold}{U}{stmry}{b}{n}
+% \end{macrocode}
+%
+% Last we need |aliascnt| to allow the usage of |\autoref|.
+%
+% \begin{macrocode}
+\RequirePackage{aliascnt}
+% \end{macrocode}
+%
+% \subsection{The Handling of the Fonts}
+% \input{chairxmathFonts.dtx}
+%
+%
+% \subsection{Setting some Defaults}
+% \input{chairxDefaults.dtx}
+%
+%
+% \subsection{Environments}
+% \input{chairxEnv.dtx}
+%
+%
+% \subsection{Logo Support}
+% \input{chairxLogo.dtx}
+%
+%
+% \subsection{The Math Macros}
+%
+% Include the math macros in alphabetical order of the file names.
+%
+% \input{chairxmathDelimiters.dtx}
+% \input{chairxmathDecoration.dtx}
+% \input{chairxmathGeneral.dtx}
+% \input{chairxmathAlgebra.dtx}
+% \input{chairxmathAnalysis.dtx}
+% \input{chairxmathCategory.dtx}
+% \input{chairxmathDiffgeo.dtx}
+% \input{chairxmathLinalg.dtx}
+% \input{chairxmathStatistics.dtx}
+% \input{chairxmathTopology.dtx}
+%
+% \begin{macrocode}
+% \end{macrocode}
+%
+% \Finale
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/nchairx/source/nchairx.ins b/macros/latex/contrib/nchairx/source/nchairx.ins
new file mode 100644
index 0000000000..2da716a457
--- /dev/null
+++ b/macros/latex/contrib/nchairx/source/nchairx.ins
@@ -0,0 +1,63 @@
+%%
+%% Copyright (C) 2018 by ChairX
+%%
+%% 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
+\usedir{./}
+\preamble
+This is a generated file.
+
+Copyright (C) 2018 by ChairX
+
+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.
+\endpreamble
+
+\generate{\file{nchairx.sty}{
+ \from{nchairx.dtx}{nchairx}
+ \from{chairxDefaults.dtx}{chairxDefaults}
+ \from{chairxEnv.dtx}{chairxEnv}
+ \from{chairxLogo.dtx}{chairxLogo}
+ \from{chairxmathFonts.dtx}{chairxmathFonts}
+ \from{chairxmathDelimiters.dtx}{chairxmathDelimiters}
+ \from{chairxmathDecoration.dtx}{chairxmathDecoration}
+ \from{chairxmathGeneral.dtx}{chairxmathGeneral}
+ \from{chairxmathAlgebra.dtx}{chairxmathAlgebra}
+ \from{chairxmathAnalysis.dtx}{chairxmathAnalysis}
+ \from{chairxmathCategory.dtx}{chairxmathCategory}
+ \from{chairxmathDiffgeo.dtx}{chairxmathDiffgeo}
+ \from{chairxmathLinalg.dtx}{chairxmathLinalg}
+ \from{chairxmathStatistics.dtx}{chairxmathStatistics}
+ \from{chairxmathTopology.dtx}{chairxmathTopology}
+ }
+}
+\Msg{*********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space nchairx.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file nchairx.dtx}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*********************************************************}
+\endbatchfile \ No newline at end of file
diff --git a/macros/latex/contrib/readarray/readarray.pdf b/macros/latex/contrib/readarray/readarray.pdf
index d5dec32e1c..5b8f2b4dbd 100644
--- a/macros/latex/contrib/readarray/readarray.pdf
+++ b/macros/latex/contrib/readarray/readarray.pdf
Binary files differ
diff --git a/macros/latex/contrib/readarray/readarray.sty b/macros/latex/contrib/readarray/readarray.sty
index 562fca3323..fb6c2ba90d 100644
--- a/macros/latex/contrib/readarray/readarray.sty
+++ b/macros/latex/contrib/readarray/readarray.sty
@@ -1,5 +1,5 @@
-\def\readarrayPackageVersion{2.0}
-\def\readarrayPackageDate{2016/11/07}
+\def\readarrayPackageVersion{3.0}
+\def\readarrayPackageDate{2021/08/08}
\ProvidesPackage{readarray}
[\readarrayPackageDate\ \readarrayPackageVersion\ %
Routines for inputting 2D and 3D array data and recalling it on an
@@ -33,7 +33,10 @@ element-by-element basis.]
% -Deprecated \Arrayijk, \arrayijk, \Arrayij, & \arrayij. Direct
% access now preferred, e.g., \xyz[2,3,1].
% -Deprecated most other commands in favor of a more natural syntax.
-\RequirePackage{ifthen}
+% v3.0 (2021-08-05)
+% -Added features: \setvalue, \initarray, \mergearray, \typesetarray
+% -Allowed for \readarrayendlinechar to be set other than 9
+\RequirePackage{forloop}
\RequirePackage{listofitems}[2016-10-22]
%
\newcounter{@index}
@@ -42,13 +45,12 @@ element-by-element basis.]
\newcounter{@col}
\newcounter{use@args}
\newcounter{@record}
-\newcounter{arg@index}
-\newcounter{break@count}
\newcounter{index@count}
-\newcounter{loop@count}
\newtoks\Arg@toks
\newtoks\@arrayident@toks
\newread\rdar@file
+\newcount\readarrayendlinechar
+\edef\readarraybackslash{\expandafter\@firstoftwo\string\\}
%
\newcommand\readdef[2]{\@readdef{#1}{#2}{ArrayRecord}}
%
@@ -59,61 +61,57 @@ element-by-element basis.]
\expandafter\ra@TermB\expandafter{\@arrayident}%
}
%
-\newcommand\readarray{\@ifstar{\read@array@newsyntax[*]}{\read@array@newsyntax[]}}
+\newcommand\readarray{\@ifstar
+ {\read@array@newsyntax[*]}{\read@array@newsyntax[]}}
%
\def\arraytomacro#1[#2]#3{%
- \edef\@arrayident{\rdar@macroname#1[#2]}%
- \@arrayident@toks=\expandafter\expandafter\expandafter{\csname\@arrayident\endcsname}%
+ \@arrayident@toks=\expandafter\expandafter\expandafter
+ {\csname\rdar@macroname#1[#2]\endcsname}%
\expandafter\def\expandafter#3\expandafter{\the\@arrayident@toks}%
}
%
\newcommand\readarraysepchar[1]{\def\read@array@sepchar{#1}}
%
-\def\nocheckbounds{\def\rootmacro@aux##1##2##3{##1%
+\def\nocheckbounds{\def\rootmacro@aux##1##2{\csname##1[##2]\endcsname%
}\typeout{readarray: bounds checking OFF}%
}
%
-\def\checkbounds{\def\rootmacro@aux##1##2##3{##1%
- \expandafter\ifx##1\relax\readarrayboundfailmsg%
- \setbox0=\hbox{\typeout{readarray Warning: ##1 out of bounds.}}%
+\def\checkbounds{\def\rootmacro@aux##1##2{%
+ \ifcsname##1[##2]\endcsname\csname##1[##2]\endcsname\else%
+ \readarrayboundfailmsg%
+ \typeout{readarray Warning: \readarraybackslash##1[##2] undefined.}%
\fi%
}\typeout{readarray: bounds checking ON}%
}
%
-\def\hypercheckbounds{\def\rootmacro@aux##1##2##3{##1%
- \expandafter\ifx##1\relax\readarrayboundfailmsg%
- \typeout{readarray Warning: ##1 out of bounds:}%
- \fi%
- \setcounter{index@count}{0}%
- \parse@index##3,\relax%
- \setcounter{loop@count}{0}%
- \whiledo{\value{loop@count}<\value{index@count}}{%
- \stepcounter{loop@count}%
- \ifnum\csname parsed@index[\theloop@count]\endcsname<0%
- \relax\typeout{\nonposmessage{##2}{##3}}\fi%
- }%
- \ifnum \value{index@count}=1\relax%
- \ifnum\csname parsed@index[1]\endcsname>%
- \csname##2CELLS\endcsname\relax\typeout{\recordmessage{##2}{##3}}\fi%
- \fi
- \ifnum \value{index@count}=2\relax%
- \ifnum\csname parsed@index[1]\endcsname>%
- \csname##2ROWS\endcsname\relax\typeout{\rowmessage{##2}{%
- \csname parsed@index[1]\endcsname}}\fi%
- \ifnum\csname parsed@index[2]\endcsname>%
- \csname##2COLS\endcsname\relax\typeout{\colmessage{##2}{%
- \csname parsed@index[2]\endcsname}}\fi%
- \fi
- \ifnum \value{index@count}=3\relax%
- \ifnum\csname parsed@index[1]\endcsname>%
- \csname##2PLANES\endcsname\relax\typeout{\planemessage{##2}{%
- \csname parsed@index[1]\endcsname}}\fi%
- \ifnum\csname parsed@index[2]\endcsname>%
- \csname##2ROWS\endcsname\relax\typeout{\rowmessage{##2}{%
- \csname parsed@index[2]\endcsname}}\fi%
- \ifnum\csname parsed@index[2]\endcsname>%
- \csname##2COLS\endcsname\relax\typeout{\colmessage{##2}{%
- \csname parsed@index[3]\endcsname}}\fi%
+\def\hypercheckbounds{\def\rootmacro@aux##1##2{%
+ \ifcsname##1[##2]\endcsname\csname##1[##2]\endcsname\else
+ \readarrayboundfailmsg%
+ \typeout{readarray Warning: \readarraybackslash##1[##2] undefined:}%
+ \setcounter{index@count}{0}%
+ \parse@index##2,\relax%
+ \forloop{@index}{1}{\value{@index}<\numexpr\theindex@count+1}{%
+ \ifnum\parsed@index[\the@index]<1%
+ \relax\typeout{ \nonpos@message{##1}{##2}}\fi%
+ }%
+ \ifnum \value{index@count}=1\relax%
+ \ifnum\parsed@index[1]>\csname##1CELLS\endcsname\relax
+ \typeout{ \record@message{##1}{##2}}\fi%
+ \fi
+ \ifnum \value{index@count}=2\relax%
+ \ifnum\parsed@index[1]>\csname##1ROWS\endcsname\relax
+ \typeout{ \row@message{##1}{\parsed@index[1]}}\fi%
+ \ifnum\parsed@index[2]>\csname##1COLS\endcsname\relax
+ \typeout{ \col@message{##1}{\parsed@index[2]}}\fi%
+ \fi
+ \ifnum \value{index@count}=3\relax%
+ \ifnum\parsed@index[1]>\csname##1PLANES\endcsname\relax
+ \typeout{ \plane@message{##1}{\parsed@index[1]}}\fi%
+ \ifnum\parsed@index[2]>\csname##1ROWS\endcsname\relax
+ \typeout{ \row@message{##1}{\parsed@index[2]}}\fi%
+ \ifnum\parsed@index[3]>\csname##1COLS\endcsname\relax
+ \typeout{ \col@message{##1}{\parsed@index[3]}}\fi%
+ \fi%
\fi%
}\typeout{readarray: bounds hyperchecking ON}%
}
@@ -122,30 +120,30 @@ element-by-element basis.]
%
\def\getArg@toks[#1]{\Arg@toks\expandafter\expandafter\expandafter{\Arg@list[#1]}}
%
-\newcommand\@readdef[3]{%
+\def\@readdef#1#2#3{%
\clear@array{#3}%
\edef\former@recordcount{\csname #3CELLS\endcsname}%
\def\first@row{T}%
\def\first@plane{T}%
- \catcode\endlinechar=9 %
+ \catcode\endlinechar=\readarrayendlinechar\relax %
\def#2{}%
\setcounter{@record}{0}%
\openin\rdar@file=#1%
\loop\unless\ifeof\rdar@file%
- \read\rdar@file to\rdar@fileline % Reads a line of the file into \rdar@fileline%
+ \read\rdar@file to\rdar@fileline % Reads file line into \rdar@fileline%
\addtocounter{@record}{1}%
\expandafter\g@addto@macro\expandafter#2\expandafter{\rdar@fileline}%
- \ifthenelse{\equal{\rdar@fileline}{}}{}{\expandafter\g@addto@macro%
- \expandafter#2\expandafter{\read@array@sepchar}}%
+ \ifx\rdar@fileline\empty\else\expandafter\g@addto@macro%
+ \expandafter#2\expandafter{\read@array@sepchar}\fi%
\if T\first@row\read@array{#2}\setcounter{@col}{\numexpr(\Arg@listlen-1)}%
\edef\ncols{\arabic{@col}}\def\first@row{F}\setcounter{@row}{1}%
\else%
\if T\first@plane%
- \ifthenelse{\equal{\rdar@fileline}{}}{%
+ \ifx\rdar@fileline\empty
\edef\nrows{\arabic{@row}}\def\first@plane{F}%
- }{%
+ \else
\addtocounter{@row}{1}%
- }%
+ \fi
\fi%
\fi%
\def\record@name{\csname #3[\the@record]\endcsname}%
@@ -163,18 +161,17 @@ element-by-element basis.]
}
%
\def\read@array@newsyntax[#1]#2#3[#4,#5]{%
- \edef\@arrayident{\rdar@macroname#3}%
\setcounter{index@count}{0}%
\parse@index#5,\relax%
\ifnum\value{index@count}=1\relax%
- \def\ra@TermA{\readArrayij#1{#2}}%
- \edef\ra@TermB{{\@arrayident}{\csname parsed@index[1]\endcsname}}%
+ \def\ra@TermA{\read@Arrayij[#1]{#2}}%
+ \edef\ra@TermB{{\rdar@macroname#3}{\parsed@index[1]}}%
\expandafter\ra@TermA\ra@TermB%
\else
\ifnum\value{index@count}=2\relax%
- \def\ra@TermA{\readArrayijk#1{#2}}%
- \edef\ra@TermB{{\@arrayident}{\csname parsed@index[1]\endcsname}%
- {\csname parsed@index[2]\endcsname}}%
+ \def\ra@TermA{\read@Arrayijk[#1]{#2}}%
+ \edef\ra@TermB{{\rdar@macroname#3}{\parsed@index[1]}%
+ {\parsed@index[2]}}%
\expandafter\ra@TermA\ra@TermB%
\fi\fi
}
@@ -184,29 +181,27 @@ element-by-element basis.]
\read@array[#1]{#2}%
\setcounter{@plane}{\numexpr(\Arg@listlen/#5/#4)}%
\setcounter{use@args}{\numexpr\arabic{@plane}*#4*#5}%
- \ifthenelse{\arabic{use@args} > \Arg@listlen}{%
+ \ifnum\arabic{use@args} > \Arg@listlen\relax
\addtocounter{@plane}{-1}%
\setcounter{use@args}{\numexpr\arabic{@plane}*#4*#5}%
- }{}%
+ \fi%
\expandafter\edef\csname#3PLANES\endcsname{\arabic{@plane}}%
\expandafter\edef\csname#3ROWS\endcsname{#4}%
\expandafter\edef\csname#3COLS\endcsname{#5}%
\expandafter\edef\csname#3CELLS\endcsname{\arabic{use@args}}%
- \setcounter{@index}{0}%
\setcounter{@plane}{1}%
\setcounter{@row}{1}%
\setcounter{@col}{0}%
- \whiledo{\value{@index} < \value{use@args}}{%
- \addtocounter{@index}{1}%
+ \forloop{@index}{1}{\value{@index} < \numexpr\value{use@args}+1}{%
\addtocounter{@col}{1}%
- \ifthenelse{\value{@col} > #5}%
- {\addtocounter{@row}{1}%
- \addtocounter{@col}{-#5}}%
- {}%
- \ifthenelse{\value{@row} > #4}%
- {\addtocounter{@plane}{1}%
- \addtocounter{@row}{-#4}}%
- {}%
+ \ifnum\value{@col} > #5\relax
+ \addtocounter{@row}{1}%
+ \addtocounter{@col}{-#5}%
+ \fi
+ \ifnum\value{@row} > #4\relax
+ \addtocounter{@plane}{1}%
+ \addtocounter{@row}{-#4}%
+ \fi
\def\arg@name{\csname#3[\the@plane,\the@row,\the@col]\endcsname}%
\getArg@toks[\the@index]%
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter%
@@ -220,24 +215,22 @@ element-by-element basis.]
\read@array[#1]{#2}%
\setcounter{@row}{\numexpr(\Arg@listlen/#4)}%
\setcounter{use@args}{\numexpr\arabic{@row}*#4}%
- \ifthenelse{\arabic{use@args} > \Arg@listlen}{%
+ \ifnum\arabic{use@args} > \Arg@listlen\relax
\addtocounter{@row}{-1}%
\setcounter{use@args}{\numexpr\arabic{@row}*#4}%
- }{}%
+ \fi
\expandafter\edef\csname#3PLANES\endcsname{0}%
\expandafter\edef\csname#3ROWS\endcsname{\arabic{@row}}%
\expandafter\edef\csname#3COLS\endcsname{#4}%
\expandafter\edef\csname#3CELLS\endcsname{\arabic{use@args}}%
- \setcounter{@index}{0}%
\setcounter{@row}{1}%
\setcounter{@col}{0}%
- \whiledo{\value{@index} < \value{use@args}}{%
- \addtocounter{@index}{1}%
+ \forloop{@index}{1}{\value{@index} < \numexpr\value{use@args}+1}{%
\addtocounter{@col}{1}%
- \ifthenelse{\value{@col} > #4}%
- {\addtocounter{@row}{1}%
- \addtocounter{@col}{-#4}}%
- {}%
+ \ifnum\value{@col} > #4\relax
+ \addtocounter{@row}{1}%
+ \addtocounter{@col}{-#4}%
+ \fi
\def\arg@name{\csname#3[\the@row,\the@col]\endcsname}%
\getArg@toks[\the@index]%
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter%
@@ -246,44 +239,163 @@ element-by-element basis.]
\define@rootmacro{#3}%
}
%
-\newcommand\clear@array[1]{%
- \expandafter\ifx\csname #1\endcsname\relax\else%
- \setcounter{@row}{0}%
- \whiledo{\value{@row}<\csname #1ROWS\endcsname}{%
- \stepcounter{@row}%
+\newcommand\read@array[2][]{%
+ \bgroup%
+ \ifx\empty\read@array@sepchar
+ \setsepchar{\empty}%
+ \else
+ \expandafter\setsepchar\expandafter{\read@array@sepchar}%
+ \fi
+ \greadlist#1\Arg@list{#2}%
+ \egroup%
+ \edef\Arg@listCELLS{\Arg@listlen}%
+}
+%
+\def\clear@array#1{%
+ \ifcsname #1\endcsname%
+ \forloop{@row}{1}{\value{@row}<\numexpr\csname #1ROWS\endcsname+1}{%
\ifnum\csname #1COLS\endcsname=0\relax%
- \expandafter\let\csname #1[\the@row]\endcsname\relax%
+ \expandafter\let\csname #1[\the@row]\endcsname\undefined%
\else
- \setcounter{@col}{0}%
- \whiledo{\value{@col}<\csname #1COLS\endcsname}{%
- \stepcounter{@col}%
+ \forloop{@col}{1}{\value{@col}<\numexpr\csname #1COLS\endcsname+1}{%
\ifnum\csname #1PLANES\endcsname=0\relax%
- \expandafter\let\csname #1[\the@row,\the@col]\endcsname\relax%
+ \expandafter\let\csname #1[\the@row,\the@col]\endcsname
+ \undefined%
\else
- \setcounter{@plane}{0}%
- \whiledo{\value{@plane}<\csname #1PLANES\endcsname}{%
- \stepcounter{@plane}%
+ \forloop{@plane}{1}{\value{@plane}<\numexpr\csname #1PLANES\endcsname+1}{%
\expandafter%
- \let\csname #1[\the@plane,\the@row,\the@col]\endcsname\relax%
+ \let\csname #1[\the@plane,\the@row,\the@col]\endcsname
+ \undefined%
}%
\fi%
}%
\fi%
}%
+ \expandafter\let\csname #1PLANES\endcsname\undefined
+ \expandafter\let\csname #1ROWS\endcsname\undefined
+ \expandafter\let\csname #1PLANES\endcsname\undefined
+ \expandafter\let\csname #1\endcsname\undefined
\fi%
}
%
-\newcommand\read@array[2][]{%
- \bgroup%
- \expandafter\setsepchar\expandafter{\read@array@sepchar}%
- \greadlist#1\Arg@list{#2}%
- \egroup%
- \edef\Arg@listCELLS{\Arg@listlen}%
+\def\setvalue#1[#2]#3{%
+ \ifcsname\rdar@macroname#1[#2]\endcsname
+ \expandafter\def\csname\rdar@macroname#1[#2]\endcsname{#3}%
+ \else
+ \typeout{readarray Warning (setvalue = #3):
+ \readarraybackslash\rdar@macroname#1[#2] undefined.}%
+ \fi%
+}
+%
+\def\readarray@initializedata#1[#2]#3{%
+ \expandafter\def\csname
+ \rdar@macroname#1[#2]\expandafter\endcsname\expandafter{#3}%
+}
+%
+\def\initarray#1[#2]{%
+ \edef\@tmp{\rdar@macroname#1}%
+ \expandafter\clear@array\expandafter{\@tmp}%
+ \expandafter\define@rootmacro\expandafter{\@tmp}%
+ \setcounter{index@count}{0}%
+ \parse@index#2,\relax
+ \ifnum\value{index@count}=2\relax
+ \setcounter{use@args}{\numexpr\parsed@index[1]*\parsed@index[2]}
+ \expandafter\def\csname\@tmp PLANES\endcsname{0}
+ \expandafter\edef\csname\@tmp ROWS\endcsname{\parsed@index[1]}
+ \expandafter\edef\csname\@tmp COLS\endcsname{\parsed@index[2]}
+ \expandafter\edef\csname\@tmp CELLS\endcsname{\theuse@args}
+ \forloop{@row}{1}{\value{@row}<\numexpr\parsed@index[1]+1}{%
+ \forloop{@col}{1}{\value{@col}<\numexpr\parsed@index[2]+1}{%
+ \readarray@initializedata#1[\the@row,\the@col]{\readarrayinitvalue}}}
+ \else
+ \ifnum\value{index@count}=3\relax
+ \setcounter{use@args}{\numexpr\parsed@index[1]*
+ \parsed@index[2]*\parsed@index[3]}
+ \expandafter\edef\csname\@tmp PLANES\endcsname{\parsed@index[1]}
+ \expandafter\edef\csname\@tmp ROWS\endcsname{\parsed@index[2]}
+ \expandafter\edef\csname\@tmp COLS\endcsname{\parsed@index[3]}
+ \expandafter\edef\csname\@tmp CELLS\endcsname{\theuse@args}
+ \forloop{@plane}{1}{\value{@plane}<\numexpr\parsed@index[1]+1}{%
+ \forloop{@row}{1}{\value{@row}<\numexpr\parsed@index[2]+1}{%
+ \forloop{@col}{1}{\value{@col}<\numexpr\parsed@index[3]+1}{%
+ \readarray@initializedata#1[\the@plane,\the@row,\the@col]{%
+ \readarrayinitvalue}}}}
+ \else
+ [initarray ERROR: 2-D or 3-D arrays only]
+ \fi
+ \fi
+}
+%
+\def\mergearray#1#2[#3]{%
+ \setcounter{index@count}{0}%
+ \parse@index#3,\relax
+ \ifnum\value{index@count}=2\relax
+ \forloop{@row}{1}{\value{@row}<
+ \numexpr\csname\rdar@macroname#1ROWS\endcsname+1}{%
+ \forloop{@col}{1}{\value{@col}<
+ \numexpr\csname\rdar@macroname#1COLS\endcsname+1}{%
+ \edef\tmpA{\the\numexpr\the@row+\parsed@index[1]-1,%
+ \the\numexpr\the@col+\parsed@index[2]-1}%
+ \edef\tmpB{\csname\rdar@macroname#1[\the@row,\the@col]\endcsname}%
+ \def\tmpC{\setvalue#2[\tmpA]}%
+ \expandafter\tmpC\expandafter{\tmpB}}}%
+ \else
+ \ifnum\value{index@count}=3\relax
+ \forloop{@plane}{1}{\value{@plane}<
+ \numexpr\csname\rdar@macroname#1PLANES\endcsname+1}{%
+ \forloop{@row}{1}{\value{@row}<
+ \numexpr\csname\rdar@macroname#1ROWS\endcsname+1}{%
+ \forloop{@col}{1}{\value{@col}<
+ \numexpr\csname\rdar@macroname#1COLS\endcsname+1}{%
+ \edef\tmpA{\the\numexpr\the@plane+\parsed@index[1]-1,%
+ \the\numexpr\the@row+\parsed@index[2]-1,%
+ \the\numexpr\the@col+\parsed@index[3]-1}%
+ \edef\tmpB{\csname\rdar@macroname#1%
+ [\the@plane,\the@row,\the@col]\endcsname}%
+ \def\tmpC{\setvalue#2[\tmpA]}%
+ \expandafter\tmpC\expandafter{\tmpB}}}}%
+ \else
+ [mergearray ERROR: 2-D or 3-D arrays only]
+ \fi
+ \fi
+}
+%
+\def\addtoArg@toks#1{\Arg@toks\expandafter{\the\Arg@toks#1}}
+\def\xaddtoArg@toks#1{\expandafter\addtoArg@toks\expandafter{#1}}
+\def\xxaddtoArg@toks#1{\expandafter\xaddtoArg@toks\expandafter{#1}}
+%
+\def\typesetarray#1{\noindent\Arg@toks{}%
+ \ifnum\csname\rdar@macroname#1PLANES\endcsname>0\relax
+ \forloop{@plane}{1}{\value{@plane}<
+ \numexpr\csname\rdar@macroname#1PLANES\endcsname+1}{%
+ \ifnum\the@plane=1 \else\xaddtoArg@toks{\typesetplanesepchar}\fi%
+ \forloop{@row}{1}{\value{@row}<
+ \numexpr\csname\rdar@macroname#1ROWS\endcsname+1}{%
+ \ifnum\the@row=1 \else\xaddtoArg@toks{\typesetrowsepchar}\fi%
+ \forloop{@col}{1}{\value{@col}<
+ \numexpr\csname\rdar@macroname#1COLS\endcsname+1}{%
+ \ifnum\the@col=1 \else\xaddtoArg@toks{\typesetcolsepchar}\fi%
+ \xaddtoArg@toks{\expandafter\typesetcell\expandafter
+ {\csname\rdar@macroname#1[\the@plane,\the@row,\the@col]\endcsname}}}%
+ }%
+ }%
+ \else
+ \forloop{@row}{1}{\value{@row}<
+ \numexpr\csname\rdar@macroname#1ROWS\endcsname+1}{%
+ \ifnum\the@row=1 \else\xaddtoArg@toks{\typesetrowsepchar}\fi%
+ \forloop{@col}{1}{\value{@col}<
+ \numexpr\csname\rdar@macroname#1COLS\endcsname+1}{%
+ \ifnum\the@col=1 \else\xaddtoArg@toks{\typesetcolsepchar}\fi%
+ \xaddtoArg@toks{\expandafter\typesetcell\expandafter
+ {\csname\rdar@macroname#1[\the@row,\the@col]\endcsname}}%
+ }%
+ }%
+ \fi
+ \the\Arg@toks
}
%
\def\define@rootmacro#1{%
- \expandafter\def\csname#1\endcsname[##1]{%
- \expandafter\rootmacro@aux\csname #1[##1]\endcsname{#1}{##1}}%
+ \expandafter\def\csname#1\endcsname[##1]{\rootmacro@aux{#1}{##1}}%
}
%
\def\parse@index#1,#2\relax{%
@@ -291,21 +403,43 @@ element-by-element basis.]
\expandafter\gdef\csname parsed@index[\theindex@count]\endcsname{#1}%
\ifx\relax#2\relax\else\parse@index#2\relax\fi%
}
+%
+\def\parsed@index[#1]{\csname parsed@index[#1]\endcsname}
+%
% INITIALIZATION
+% ON \readdef, SEP CHAR INSERTED AFTER EACH RECORD;
+% ON \readarray, SEP CHAR SERVES AS DATA-FIELD SEPARATOR
\readarraysepchar{ }
-\nocheckbounds
+% ON \readdef, IGNORE END-LINE CHARS BY DEFAULT (NORMAL LaTeX MODE = 5)
+\readarrayendlinechar=9
+% DEFAULT CELL DATA FOR \initarray
+\def\readarrayinitvalue{-}
+% DEFAULT FIELD SEPARATORS FOR \typesetarray
+\def\typesetplanesepchar{\\---\\}
+\def\typesetrowsepchar{\\}
+\def\typesetcolsepchar{,}
+% DEFAULT CELL FORMATTING ON \typesetarray
+\def\typesetcell#1{#1}
%
-\def\nonposmessage#1#2{Negative index [#2] impermissable for #1.}
-\def\recordmessage#1#2{RECORD=#2 exceeds bounds(=\csname#1CELLS\endcsname) for #1.}
-\def\planemessage#1#2{PLANE=#2 exceeds bounds(=\csname#1PLANES\endcsname) for #1.}
-\def\rowmessage#1#2{ROW=#2 exceeds bounds(=\csname#1ROWS\endcsname) for #1.}
-\def\colmessage#1#2{COL=#2 exceeds bounds(=\csname#1COLS\endcsname) for #1.}
+\nocheckbounds% DEFAULT IS NO BOUNDS CHECKING
%
-\def\the@showargs@rule{\kern.2pt\rule{.8ex}{1.6ex}\hspace{.2pt}}%
-\def\readarrayboundfailmsg{?}% DISPLAYED WHEN ARRAY CALL OUT OF BOUNDS
+\def\nonpos@message#1#2{Nonpositive index [#2] prohibited for \ra@nm#1.}
+\def\record@message#1#2{%
+ RECORD=#2 exceeds bounds(=\csname#1CELLS\endcsname) for \ra@nm#1.}
+\def\plane@message#1#2{%
+ PLANE=#2 exceeds bounds(=\csname#1PLANES\endcsname) for \ra@nm#1.}
+\def\row@message#1#2{%
+ ROW=#2 exceeds bounds(=\csname#1ROWS\endcsname) for \ra@nm#1.}
+\def\col@message#1#2{%
+ COL=#2 exceeds bounds(=\csname#1COLS\endcsname) for \ra@nm#1.}
+%
+\def\readarrayboundfailmsg{?}% WHEN ARRAY CALL OUT OF BOUNDS, IF BOUNDS CHECKING ON
+\def\ra@nm#1.{\readarraybackslash#1.}
%
-% SUPPORT/DEBUG ROUTINES
+% SUPPORT/DEBUG ROUTINES
+% (THESE ARE DEPRECATED...CONSIDER USING \typesetarray AS AN ALTERNATIVE)
%
+\def\the@showargs@rule{\kern.2pt\rule{.8ex}{1.6ex}\hspace{.2pt}}%
% \arraydump INITIALIZATIONS
\def\row@spacer{\\}
\def\row@msg{\the@showargs@rule\hfill{\scriptsize\scshape$<$\row@sign~\arabic{@row}$>$}}
@@ -315,32 +449,27 @@ element-by-element basis.]
\def\close@out{}
%
\newcommand\arraydump[1]{%
- \edef\@arrayident{\rdar@macroname#1}%
- \expandafter\ifx\csname\@arrayident\endcsname\relax\else%
- \edef\ra@TmpA{\csname\@arrayident PLANES\endcsname}%
- \edef\ra@TmpB{\csname\@arrayident COLS\endcsname}%
+ \expandafter\ifx\csname\rdar@macroname#1\endcsname\relax\else%
+ \edef\ra@TmpA{\csname\rdar@macroname#1PLANES\endcsname}%
+ \edef\ra@TmpB{\csname\rdar@macroname#1COLS\endcsname}%
\def\ra@rank{3-D}%
\ifnum\ra@TmpA=0\relax\def\ra@TmpA{1}\def\plane@sign{\mbox{}}\def\ra@rank{2-D}%
\else\def\plane@sign{{\scriptsize\scshape Plane \arabic{@plane}}}\fi%
\ifnum\ra@TmpB=0\relax\def\ra@TmpB{1}\def\row@sign{Record}\def\ra@rank{1-D}%
\else\def\row@sign{Row}\fi%
\par\noindent\header@msg%
- \setcounter{@plane}{0}%
- \whiledo{\value{@plane}<\ra@TmpA}{%
- \stepcounter{@plane}%
+ \forloop{@plane}{1}{\value{@plane}<\numexpr\ra@TmpA+1}{%
\plane@msg%
- \setcounter{@row}{0}%
- \whiledo{\value{@row}<\csname\@arrayident ROWS\endcsname}{%
- \ifnum\value{@row}=0\relax\else\row@spacer\fi%
- \stepcounter{@row}%
- \setcounter{@col}{0}%
- \whiledo{\value{@col}<\ra@TmpB}{%
+ \forloop{@row}{1}{\value{@row}<
+ \numexpr\csname\rdar@macroname#1ROWS\endcsname+1}{%
+ \ifnum\value{@row}=1\relax\else\row@spacer\fi%
+ \forloop{@col}{1}{\value{@col}<
+ \numexpr\ra@TmpB+1}{%
\the@showargs@rule%
- \stepcounter{@col}%
- \ifnum\csname\@arrayident COLS\endcsname=0\relax%
+ \ifnum\csname\rdar@macroname#1COLS\endcsname=0\relax%
#1[\the@row]%
\else%
- \ifnum\csname\@arrayident PLANES\endcsname=0\relax%
+ \ifnum\csname\rdar@macroname#1PLANES\endcsname=0\relax%
#1[\the@row,\the@col]%
\else%
#1[\the@plane,\the@row,\the@col]%
@@ -355,13 +484,35 @@ element-by-element basis.]
\newcommand\scalardump[1]{\bgroup%
\def\row@spacer{}%
\def\row@msg{}%
- \def\header@msg{{\bfseries\csname\@arrayident CELLS\endcsname\ ELEMENTS:}%
+ \def\header@msg{{\bfseries\csname\rdar@macroname####1CELLS\endcsname\ ELEMENTS:}%
~\hrulefill\mbox{}\\}%
\def\last@row{}%
\def\plane@msg{}%
\def\close@out{\the@showargs@rule\\}%
\arraydump#1\egroup%
}
+
+\endinput
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+COMMANDS THAT WERE DEPRECATED IN v2.0 (2016-11-10), NOT BEING IN THE PREFERRED
+PACKAGE SYNTAX, THAT HAVE BEEN ELIMINATED in v3.0 (2021)
+CODE PROVIDED BELOW AS A COPY/PASTE LAST RESORT FOR STRAGGLERS
+
+\usepackage{ifthen}
%
% DEPRECATED COMMANDS (NOT PREFERRED EMBODIMENT OF PACKAGE SYNTAX)
%
@@ -422,6 +573,4 @@ element-by-element basis.]
\Arg@list[\value{@index}]}%
}%
}
-\endinput
-
diff --git a/macros/latex/contrib/readarray/readarray.tex b/macros/latex/contrib/readarray/readarray.tex
index 8376958419..bd9a4aa114 100644
--- a/macros/latex/contrib/readarray/readarray.tex
+++ b/macros/latex/contrib/readarray/readarray.tex
@@ -1,26 +1,5 @@
\documentclass{article}
-%% Copyright 2013 Steven B. Segletes
-%
-% 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.3c 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 Steven B. Segletes.
-% Revisions:
-% v1.01 Documentation revision
-% v1.1 Added \csname record\roman{@row}\endcsname to \readdef
-% v1.2 -Corrected the [truncated] LPPL license info
-% -Added \arrayij and \arrayijk, which can be put into \edef
-% -Used \romannumeral in preference to \roman{}, when possible,
-% to avoid unnecessary use of counters.
-% v1.3 -Moved \newread outside of \readdef, so as not to exhaust the
-% 16 allotted file streams (Thanks to Ken Kubota for the tip).
+
\usepackage{tabstackengine}[2016-10-04]
\usepackage{lmodern}
\usepackage[T1]{fontenc}
@@ -32,8 +11,7 @@
\def\cmd#1{\texttt{\string\ \unskip#1}}
\usepackage{readarray}
\usepackage{verbatimbox}
-\usepackage{filecontents}
-\begin{filecontents*}{file1data.txt}
+\begin{filecontents*}[overwrite]{file1data.txt}
A111 A112 A113 A114
A121 A122 A123 A124
A131 A132 A133 A134
@@ -42,7 +20,7 @@ A211 A212 A213 A214
A221 A222 A223 A224
A231 A232 A233 A234
\end{filecontents*}
-\begin{filecontents*}{file2data.txt}
+\begin{filecontents*}[overwrite]{file2data.txt}
\def{\dataA}{%
A111 A112 A113 A114
A121 A122 A123 A124
@@ -53,7 +31,7 @@ A221 A222 A223 A224
A231 A232 A233 A234
}
\end{filecontents*}
-\begin{filecontents*}{file3data.txt}
+\begin{filecontents*}[overwrite]{file3data.txt}
\textit{am} , \textit{are}, have \textit{been}, have \textit{been}
\textit{are}, \textit{are} , have \textit{been}, have \textit{been}
\textit{is} , \textit{are} , has \textit{been} , have \textit{been}
@@ -80,28 +58,44 @@ will \textit{be}, will \textit{be}, will have \textit{been}, will have \textit{b
\rule{0em}{.7em}\small Routines for inputting formatted array data and
recalling it on an element-by-element basis.\\
\rule{0em}{2.7em}\large Steven B. Segletes\\
-steven.b.segletes.civ@mail.mil\\
+SSegletes@verizon.net\\
\rule{0em}{1.7em}\readarrayPackageDate\\
V\readarrayPackageVersion
\end{center}
-\section*{Comments About Version 2.0}
+\subsection*{Comments About Version 3.0}
-Version 2.0 of the \rdar{} package has brought major changes,
+\vspace{-5pt}
+Version 3.0 of \rdar{} introduces several new features.
+Arrays can be initialized with the \vb|\initarray| command,
+ rather than being read from a file.
+With \vb|\setvalue|, the tokens of individual
+ array cells can be revised on demand.
+The contents of one array can be merged into another
+ by way of the \vb|\mergearray| command.
+The \vb|\typesetarray| command allows for versatile ways
+ to format your array output, including by way
+ of \vb|tabular| environments.
+The way end-of-line characters can be handled on a data-read
+ is made more versatile with this package version.
+There are many new things here---check them out.\vspace{-10pt}
+
+
+\subsubsection*{Comments About Version 2.0}
+
+\vspace{-5pt}
+Version 2.0 of the \rdar{} package brought major changes,
including a \textit{new and improved} syntax.
Functionally, the data-reading/parsing code of the package
- has been revised to use the powerful \loi{} package.
+ was revised to use the powerful \loi{} package.
This has two primary advantages: 1) the data that is read is no
longer expanded prior to the read, so that macros can be read
and stored in the data arrays using their unexpanded tokens; and 2)
list separators other than a space may now be employed
to parse the data into array cells.
-
-While a newer preferred syntax has been introduced for reading and
- recalling arrays, the deprecated syntax is still supported.
The user will also note other small changes, such as the fact that errors
arising from array-boundary violations now appear in the log file
- rather than the document itself.
+ rather than the document itself.\vspace{-10pt}
\section{Description and Commands}
@@ -117,7 +111,6 @@ Note: for 1-D arrays that are to be simply parsed on the basis of a
to do this, without the help of this package.
}
-\clearpage
The commands included in this package help the user to input data, define
it in terms of array elements, and recall those elements at will. Those
commands are:
@@ -127,8 +120,9 @@ commands are:
\textup{To place file data into a data macro:}\\
\rl\vb|\readdef{|filename\vb|}\|data-macro\\
\textup{To place file data into a 1-D file-record array:}\\
-\rl\vb|\readrecordarray{|filename\vb|}\|array-identifier\\
-\textup{To parse a data macro and place the results into a 2-D or 3-D array:}\\
+\rl\vb|\readrecordarray{|filename\vb|}\|array-identifier%
+ \hfill\textup{(1-D)}\\
+\textup{To parse a data macro and place the results into a new 2-D or 3-D array:}\\
\rl\vb|\readarray\|data-macro\vb|\|array-identifier\vb|[-,|columns\vb|]|%
\hfill\textup{(2-D)}\\
\rl\vb|\readarray\|data-macro\vb|\|array-identifier\vb|[-,|rows\vb|,|columns\vb|]|%
@@ -138,28 +132,60 @@ commands are:
\hfill\textup{(2-D)}\\
\rl\vb|\readarray*\|data-macro\vb|\|array-identifier\vb|[-,|rows\vb|,|columns\vb|]|%
\hfill\textup{(3-D)}\\
-\textup{Recall data from indexed array cell:}\\
+\textup{To create a new array, each cell initialized to a default
+ value:}\\
+\rl\vb|\initarray\|array-identifier\vb|[|rows\vb|,|columns\vb|]|%
+ \hfill\textup{(2-D)}\\
+\rl\vb|\initarray\|array-identifier\vb|[|planes\vb|,|rows\vb|,|columns%
+ \vb|]|\hfill\textup{(3-D)}\\
+\textup{To merge each cell of one array into another:}\\
+\rl\vb|\mergearray\|from-array-id\vb|\|to-array-id\vb|[|row\vb|,|%
+ column\vb|]|\hfill\textup{(2-D)}\\
+\rl\vb|\mergearray\|from-array-id\vb|\|to-array-id\vb|[|plane\vb|,|%
+ row\vb|,|column\vb|]|\hfill\textup{(3-D)}\\
+\textup{To typeset an array:}\\
+\rl\vb|\typesetarray\|array-identifier\hfill\textup{(2-D/3-D)}\\
+\textup{Recall (typeset) data from indexed array cell:}\\
\rl\vb|\|array-identifier\vb|[|row\vb|,|column\vb|]|%
\hfill\textup{(2-D)}\\
\rl\vb|\|array-identifier\vb|[|plane\vb|,|row\vb|,|column\vb|]|%
\hfill\textup{(3-D)}\\
\textup{To place the actual tokens of an array cell into a macro:}\\
-\rl\vb|\arraytomacro\|array-identifier\vb|[-,|columns\vb|]\|macro%
+\rl\vb|\arraytomacro\|array-identifier\vb|[|row\vb|,|column\vb|]\|macro%
\hfill\textup{(2-D)}\\
-\rl\vb|\arraytomacro\|array-identifier\vb|[-,|rows\vb|,|columns\vb|]\|macro%
- \hfill\textup{(3-D)}\\
-\textup{To change the array-parsing separator character:}\\
+\rl\vb|\arraytomacro\|array-identifier\vb|[|plane\vb|,|row\vb|,|column%
+ \vb|]\|macro\hfill\textup{(3-D)}\\
+\textup{To manually (re)set the value of an existing array cell:}\\
+\rl\vb|\setvalue\|array-identifier\vb|[|row\vb|,|column\vb|]{|%
+ value\vb|}|\hfill\textup{(2-D)}\\
+\rl\vb|\setvalue\|array-identifier\vb|[|plane\vb|,|row\vb|,|column\vb|]{|%
+ value\vb|}|\hfill\textup{(3-D)}\\
+\textup{To change the array-parsing separator for}
+ \vb|\readdef| \textup{and/or} \vb|\readarray|\textup{:}\\
\rl\vb|\readarraysepchar{|parsing-separator-char\vb|}|\\
+\textup{To change the default (=9) end-of-line catcode for}
+ \vb|\readdef|\textup{:}\\
+\rl\vb|\readarrayendlinechar=|end-of-line-catcode\\
+\textup{To redefine default cell initialization for} \vb|\initarray|
+ \textup{:}\\
+\rl\vb|\renewcommand\readarrayinitvalue{|value\vb|}|\\
+\textup{To redefine default cell format in} \vb|\typesetarray|\textup{:}\\
+\rl\vb|\renewcommand\typesetcell[1]{|format-for-\#1\vb|}|\\
+\textup{To redefine default plane, row, column separator formats for}
+ \vb|\typesetarray|\textup{:}\\
+\rl\vb|\renewcommand\typesetplanesepchar{|format\vb|}|\\
+\rl\vb|\renewcommand\typesetrowsepchar{|format\vb|}|\\
+\rl\vb|\renewcommand\typesetcolsepchar{|format\vb|}|\\
\textup{To select the level of bounds checking on array cell recall:}\\
\rl\vb|\nocheckbounds|\hfill OR\hfill%
\vb|\checkbounds|\hfill OR\hfill%
\vb|\hypercheckbounds|
\upshape
-In these commands, \cmd{}\textit{data-macro} is a command sequence into
+In these commands, \cmd{}\textit{data-macro} is a control sequence into
which the contents of \texttt{filename} are set into a \cmd{def}.
-The \textit{array-identifier} is a sequence of
- (catcode 11) letters that identify the array.
+The \cmd{}\textit{array-identifier} is the array into which cell data is
+ inserted.
The starred version of the commands are used if, during the array
creation, it is desired to automatically excise the array data of
leading and trailing spaces.
@@ -197,7 +223,7 @@ Individual records of the original file, from the most recent
In addition to the strings of fixed name created during the
\cmd{readdef}, there are various strings created during
the \cmd{readarray} whose name is a function of the
- \textit{array-identifier}, such as
+ \cmd{}\textit{array-identifier}, such as
\itshape
\rl\vb|\|array-identifier\vb|CELLS|\\
@@ -205,23 +231,10 @@ In addition to the strings of fixed name created during the
\rl\vb|\|array-identifier\vb|ROWS|\\
\rl\vb|\|array-identifier\vb|COLS|\upshape
-where \textit{array-identifier} is the alphabetic-character string by which
+where \cmd{}\textit{array-identifier} is the name
you have designated a particular array.
Their meaning will be discussed later in this document.
-Support routines which are generally not required directly by
-the user for the specification and recall of data arrays, but which are
-useful for debugging include
-the following:
-
-\itshape
-
-\rl\vb|\arraydump\|array-identifier\\%
-\rl\vb|\scalardump\|array-identifier%
-\upshape
-
-These macros print out the complete array, in either a structured or
- unstructured form, respectively.
\section{Data Structure}
@@ -229,7 +242,7 @@ The first requirement is to lay out a format for the data interface to
this package.
The {\rdar} package is set up to digest data separated by a user-defined
separator character.
-The default separator is a space character but, as of V2.0, the separator
+The default separator is a space character but the separator
may be specified by way of \vb|\readarraysepchar{|\textit{separator}\vb|}|.
The format for the data organization to be digested is as follows,
for 2-D arrays:
@@ -307,6 +320,41 @@ However, two things have been accomplished: 1) the file contents are \cmd{def}'e
into the data macro \cmd{dataA}; and 2) they are also placed into a 1-D
file record array, \cmd{ArrayRecord}.
+Regarding the point that end-of-line characters are replaced
+ with a data separator, these are controlled by two separate
+ mechanisms, each with its own control.
+First, end-of-lines are, by default discarded---this is accomplished
+ internally with \rdar{} setting \vb|\endlinechar| equal to 9,
+ during the \vb|\readdef|.
+This is not the native \LaTeX{} behavior.
+In \LaTeX{}, end-of-lines are converted into spaces, unless
+ preempted with a \vb|%| character or a line-ending control
+ sequence.
+To recover the \LaTeX{} way of treating end-of-lines, the
+ count \vb|\readarrayendlinechar| is provided, which can
+ be set in the manner desired for subsequent invocations
+ of \vb|\readdef|.
+For example, \vb|\readarrayendlinechar=5 | will change
+ subsequent treatment of end-of-line characters to the normal
+ \LaTeX{} treatment.
+
+The second aspect regarding end-of-lines is the data
+ separator inserted when the end-of-line is
+ reached. This is one of the functions of the
+ \vb|\readarraysepchar| macro, the argument to which
+ is the separator inserted into the read, when
+ end-of-line is encountered during a \vb|\readdef|.
+If you don't want any record separators inserted during
+ the \vb|\readdef|, one may set \vb|\readarraysepchar{}|.
+Note, however, that an empty \rdar{} sepchar, while valid
+ during a \vb|\readdef|, is meaningless during a
+ \vb|\readarray| invocation, since it would like to
+ use the sepchar to parse the data.
+Therefore, an empty sepchar should be redefined to
+ a meaningful value prior to invoking \vb|\readarray|.
+See section~\ref{s:sepchar} for more information on the
+ separator character.
+
There is no
\textit{requirement} that the input file be organized with structured rows
of data corresponding to individual file records, nor that blank
@@ -407,7 +455,7 @@ If an array name is reutilized, its prior definitions are cleared,
reutilization.
-\subsection{Creating 2-D and 3-D Arrays}
+\subsection{Creating 2-D and 3-D Arrays from Data}
The \cmd{readarray}\margcmd{readarray} command, used to convert
raw parsable data into data arrays,
@@ -424,10 +472,6 @@ There is a starred version of the command, \cmd{readarray*}, which is used
This option, is only relevant when the data separator is not already a
space.
-If an array name is reutilized, its prior definitions are cleared,
- so that ``old'' data is not inadvertantly retrieved following the
- reutilization.
-
\subsubsection{2-D Arrays}
\begin{sloppypar}
@@ -489,21 +533,66 @@ Data from the 2nd plane, 1st row, 2nd column can be obtained via
If, perchance, a row or plane is only partially defined by
\cmd{readarray}, the partial data is discarded from the array.
-\subsubsection{Array Parsing Separator}
+\subsubsection{Array Parsing Separator\label{s:sepchar}}
While it may be easily envisioned that the array data is numerical, this
need not be the case.
The array data may be text, and even formatted text.
-Furthermore, one may introduce space characters into the data of
- individual cells simply by resetting the \rdar{} parsing separator
- to something other than the default space, ``~''.
-This can be done, for example employing a comma as the separator,
- by way of \vb|\readarraysepchar{,}|.\margcmd{readarraysepchar}
+A key setting, either when inputting information from a file
+ by way of \vb|\readdef| or when parsing a \vb|\def|'ed
+ argument into an array by way of \vb|\readarray|, is the
+ macro \vb|\readarraysepchar|.\margcmd{readarraysepchar}
+
+The value of \vb|\readarraysepchar| is used in distinct
+ ways for \vb|\readdef| and \vb|\readarray|.
+For \vb|\readdef|, the separator is inserted into the
+ \vb|\data-macro|
+ definition whenever an end-line-char (end of record)
+ is encountered.
+For the subsequent \vb|\readarray| (with or without a \vb|*|), the
+ \vb|\readarraysepchar| is used to separate the data
+ contained in the \vb|\data-macro| into individual cell
+ data that will be placed into the \vb|\array-identifier|.
+
+For example, if your data file is comma separated, but the
+ last item of data in each record is not followed by a
+ trailing comma, setting \vb|\readarraysepchar{,}| will
+ assure that the comma gets inserted into the
+ \vb|\data-macro| after each record, during the
+ \vb|\readdef|.
+This will preclude confusion of the last item of
+ each record with the first item of the subsequent
+ record when the \vb|\readarray| is executed.
+
+If the trailing comma were present in the data file,
+ then \vb|\readarraysepchar{}| could be set for the
+ \vb|\readdef|, to avoid inserting an extra comma.
+However, it would have to be reset to a comma before
+ executing the \vb|\readarray|, in order to parse
+ the data using the comma to separate cell data.
+
+Finally, if one wished to employ lists rather than
+ arrays (wherein each row could have a variable
+ number of columns, for example), then one could
+ set \vb|\readarraysepchar{\\}| prior to the
+ \vb|\readdef|, so as to insert a \vb|\\| macro
+ between each record.
+Then, if the file data were otherwise comma separated,
+ one could use the \loi{} tools rather than \rdar{}
+ to absorb the data as a list, rather than an array.
+In this case, \vb|\setsepchar{\\/,}| would set a
+ two-tier nested parsing for \loi{}.
+Then, \vb|\readlist\|\textit{listname}\vb|{\|%
+ \textit{data-macro}\vb|}| would read the data into
+ a list, with a variable column dimension for each row,
+ based on the number of commas in each file record.
+
Note also, using the facilities of the underlying \loi{} package,
that compound separators are possible.
-For example, \textit{either} a comma \textit{or} a period may be used
+For example, when employing \vb|\readarray|.
+ \textit{either} a comma \textit{or} a period may be used
for the data parsing, by specifying a
\textbf{logical-OR} (\vb+||+) separated list: \vb:\readarraysepchar{,||.}:.
Similarly, a multicharacter separator is possible, so that setting
@@ -528,9 +617,18 @@ The sequence of commands
\readdef{file3data.txt}\dataC
\readarray*\dataC\tobeConjugation[-,\nrows,\ncols]
-will employ a comma separator to parse the file.
-It will then create a 3-D array using data from the file, placed into the
- array \cmd{tobeConjugation}.
+will read the file into \vb|\dataC|, adding a comma between
+ records.
+It will then employ a comma separator to parse the file.
+As a result, it will create a 3-D array using data from the
+ \vb|\dataC| macro, and create a parsed array by the name of
+ \cmd{tobeConjugation}.
+During the \vb|\readdef|, it will have been gleaned that the file
+ is arranged with 4 columns (stored in \vb|\ncols|) and
+ 3 rows per plane (stored in \vb|\nrows|).
+These row \& column specifications could be manually overridden
+ merely by specifying actual numbers in the bracketed argument to
+ \vb|\readarray|.
Leading/trailing spaces will be removed from the data, with the use of the
star form of the \cmd{readarray} command.
Data can then be directly accessed, so that, for example
@@ -545,8 +643,69 @@ The 3-D array metrics are \cmd{tobeConjugationPLANES},
\tobeConjugationCELLS.
respectively.
-
-\section{Recalling Data from Array Structures}
+\section{Initializing an Array Structure}
+
+With the \vb|readarray| macro described above, data can be
+ introduced into an array structure that is specifically created
+ to receive the data.
+However, sometimes, an array placeholder must be defined before
+ knowing exactly what will eventually reside there.
+For this purpose, that package provides \vb|\initarray|.
+ \margcmd{initarray}
+
+With a command like \vb|\initarray\z[3,4]|, a 2-D array identified
+ as \vb|\z| is created with 3 rows and 4 columns.
+Each cell is initialized with a standard value (default
+ \vb|-|).
+However, the standard initialization value may be changed,
+ for example, to a \vb|0| with an invocation of
+ \vb|\renewcommand\readarrayinitvalue{0}|.%
+ \margcmd{readarrayinitvalue}
+
+\section{Manually Setting Array-Cell Data}
+
+While \vb|\readarray| and \vb|\initarray| are used to create
+ new arrays and to populate their cells with content, we here
+ examine a way to update or change the content of a single existing
+ array cell.
+The command \vb|\setvalue|\margcmd{setvalue} is used to place
+ content into an existing array cell.
+Let us assume that the array \vb|\z| was created as a
+ 2-D array of size 3 rows by 4 columns.
+The command \vb|\setvalue\z[2,3]{xyz}| will replace the
+ existing content of the array's 2nd row and 3rd column
+ with the tokens \vb|xyz|.
+All other cells in the \vb|\z| array will remain as they
+ were; the pre-existing content of cell \vb|\z[2,3]|, once
+ replaced, will no longer be available.
+
+
+\section{Merging Data from Separate Arrays}
+
+The command \vb|\setvalue| was described as a way to replace
+ the contents of a single cell in an array.
+Here, we describe a way to replace the contents of multiple
+ cells at once, in the form of merging two arrays with the
+ macro \vb|\mergearray|\margcmd{mergearray}.
+This command sets up a loop of repeated invocations of
+ \vb|\setarray|.
+
+Let's assume that we had created arrays
+ \vb|\Q[10,10]| and \vb|\R[3,2]|.
+The command
+ \vb|\mergarray\R\Q[6,3]| will overlay the contents of
+ \vb|\R|'s 3x2 cells into the \vb|\Q| cells, beginning with
+ \vb|\Q[6,3]|.
+The overlay will, therefore, include the cells: \vb|[6,3]|, \vb|[6,4]|,
+ \vb|[7,3]|, \vb|[7,4]|, \vb|[8,3]|, and \vb|[8,4]|.
+If the overlay of the \textit{from-array} causes the bounds in
+ the \textit{to-array} to be exceeded, no copy is made of those
+ cells.
+However, a warning will be noted in the log file if error
+ checking is enabled.
+
+
+\section{Recalling Cell Data from Array Structures}
\begin{sloppypar}
While one must specify the number of columns and/or rows associated
@@ -597,6 +756,74 @@ is given by
which yields ``\tobeConjugation[3,2,4]''.
+\section{Typesetting Whole Arrays}
+
+Often, one wishes not just to recall the contents of a single
+ cell, but to recall a whole array for the purposes of typesetting.
+The command \vb|\typesetarray| does just that.
+Let us create an array \vb|\Q[2,2,2]| whose cell \vb|[i,j,k]| contains
+ the tokens ``($i,j,k$)'', where $i$, $j$ and $k$ denote a particular
+ plane, row and column of \vb|\Q|.
+If one invokes \vb|\typesetarray\Q|\margcmd{typesetarray}, the default
+ dump of the array will be:
+
+\initarray\Q[2,2,2]
+\setvalue\Q[1,1,1]{(1,1,1)}
+\setvalue\Q[1,2,1]{(1,2,1)}
+\setvalue\Q[1,1,2]{(1,1,2)}
+\setvalue\Q[1,2,2]{(1,2,2)}
+\setvalue\Q[2,1,1]{(2,1,1)}
+\setvalue\Q[2,2,1]{(2,2,1)}
+\setvalue\Q[2,1,2]{(2,1,2)}
+\setvalue\Q[2,2,2]{(2,2,2)}
+\typesetarray\Q
+
+The presentation of the array is governed by four defined macros,
+ whose definitions can be renewed:\\
+ \vb|\typesetplanesepchar| (default \vb|\\---\\|),\\
+ \vb|\typesetrowsepchar| (default \vb|\\|),\\
+ \vb|\typesetcolsepchar| (default \vb|,|) and\\
+ \vb|\typesetcell|,\\
+ the last of which takes 1 argument (the cell content) and, by
+ default, presents it unaltered.
+One can see that the default treatment separates columns with
+ a comma, performs a linefeed between each row, and
+ inserts an em-dash on a line by itself between each plane, which
+ is exactly how \vb|\Q| was presented above.
+
+However, these defaults can be renewed to produce a different
+ visual format, for example, that obtainable from a \vb|tabular|
+ environment.
+For example, upon issuing these renewals
+\begin{verbatim}
+\renewcommand\typesetplanesepchar{\\\hline}
+\renewcommand\typesetrowsepchar{\\}
+\renewcommand\typesetcolsepchar{&}
+\renewcommand\typesetcell[1]{\scriptsize\textbf{#1}}
+\end{verbatim}
+one may insert the \vb|\typesetarray| inside a \vb|\tabular|
+ and it will format according to those rules:
+\begin{verbatim}
+\begin{tabular}{cc}
+\hline
+\typesetarray\Q\\
+\hline
+\end{tabular}
+\end{verbatim}
+yielding the following output:
+\renewcommand\typesetplanesepchar{\\\hline}
+\renewcommand\typesetrowsepchar{\\}
+\renewcommand\typesetcolsepchar{&}
+\renewcommand\typesetcell[1]{\scriptsize\textbf{#1}}
+\begin{tabular}{cc}
+\hline
+\typesetarray\Q\\
+\hline
+\end{tabular}
+.
+
+%@@@
+
\section{Bounds Checking}
While the user is developing his or her application involving the {\rdar}
@@ -637,7 +864,7 @@ Results may be also expanded even with \cmd{checkbounds}
However, with \cmd{hypercheckbounds} set, full
expansion of array cells is no longer possible.
-\section{Accessing Array Cells if No Expansion is Required}
+\section{Transfer Array Cell Tokens to Macro}
With the normal use of \cmd{\rmfamily\itshape array-identifier} syntax
for accessing array cells,
@@ -652,68 +879,27 @@ The command takes the array name and index as the initial arguments followed
So, for example \vb|\arraytomacro\tobeConjugation[2,2,3]\thiscell| will
place the cell's original tokens in the macro \cmd{thiscell}.
-Upon detokenization, \cmd{thiscell} contains
+Upon detokenization, the macro \cmd{thiscell} contains
\arraytomacro\tobeConjugation[2,2,3]\thiscell
``\texttt{\detokenize\expandafter{\thiscell}}''.
-\section{Support Routines}
-
-The package provides two commands that can help one understand how a
- data set has been parsed into an array.
-Both of these commands dump the specified array to the document.
-In the case of \cmd{arraydump}\margcmd{arraydump}, the array is formatted
- in the structure of the array, broken up by columns, rows, and planes.
-In the case of \cmd{scalardump}\margcmd{scalardump}, however, the elements
- of the array are dumped sequentially, without reference to the array's
- heirarchy.
-
-For the case of 1-D record array \cmd{oneD} employed in prior sections, for
- example, the invocations of
-\rl\vb|\arraydump\oneD|\\
-\rl\vb|\scalardump\oneD|
+\section{Deprecated and Defunct Features}
-results in
-
-\arraydump\oneD
-\scalardump\oneD
-
-\clearpage
-
-The \cmd{twoD} equivalent, resulting from parsing the same data file as
- a 2-D, rather than a 1-D record array, is
-
-\rl\vb|\arraydump\twoD|\\
-\rl\vb|\scalardump\twoD|
-
-\arraydump\twoD
-\scalardump\twoD
-
-For the case of the 3-D array (earlier read as \cmd{threeD}),
-the \cmd{arraydump} would appear as
-
-\rl\vb|\arraydump\threeD|\\
-\rl\vb|\scalardump\threeD|
-
-\arraydump\threeD
-\scalardump\threeD
-
-Note that the \cmd{scalardump} of \cmd{threeD} is indistinguishable from
- that of \cmd{twoD}, since both arrays are comprised of the same data
- cells, though arrayed into different plane/row/column structures.
-
-\clearpage
-For comparison, the \cmd{arraydump} of \cmd{tobeConjugation} is
+\textbf{Deprecated}
-\arraydump\tobeConjugation
+The following commands are supplied, but are no longer the preferred
+embodiment of package syntax.
+\rl\vb|\arraydump|\\
+\rl\vb|\scalardump|
-\section{Deprecated, Vestigial, and Defunct Features}
+To replace the function of these, \vb|\typesetarray| is
+ the preferred embodiment.
-\textbf{Deprecated}
+\textbf{Defunct}
-The following commands are supplied, but are no longer the preferred
-embodiment of package syntax.
+The following macros are no longer supported.
\itshape
\rl\vb|\copyrecords{|array-identifier\vb|}|%
@@ -733,43 +919,15 @@ embodiment of package syntax.
\rl\vb|\arrayij{|array-identifier\vb|}{|row\vb|}{|column\vb|}|\\
\rl\vb|\arrayijk{|array-identifier\vb|}{|plane\vb|}{|row\vb|}{|%
column\vb|}|\upshape
-
-\textbf{Vestigial}
-
-The following support macros are provided but no longer recommended.
-Their capability is more fully served by way of the \loi{} package.
-
\itshape
\rl\vb|\getargsC{\|macro {\upshape or} string\vb|}|\\
\rl\vb|\arg|index\\
\rl\vb|\narg|\\
\rl\vb|\showargs|%
-\upshape
-
-Note that whereas \cmd{getargs} could previously (pre-V2.0 \rdar) employ
- only a space as the parsing separator, \cmd{getargs} now respects the
- currently set value of separator, as (re)defined by \cmd{readarraysepchar}.
-
-\textbf{Defunct}
-
-The following macros are no longer supported.
-
-\itshape
\rl\vb|\converttilde|\\
\rl\vb|\record|index
\upshape
-Since the package now supports arbitrary parsing separators,
- there is no need for the function of \cmd{converttilde}.
-However, were one desiring to parse, while treating hard spaces as spaces,
- this can be simply achieved under V2.0 \rdar{} by setting the
- parsing character as either a space or a hard space, using
- \vb:readarraysepchar{ ||~}:.
-Likewise, the indirect addressing (using a romannumeral \textit{index})
- provided by the internal command \cmd{record}\textit{index} is fully
- superceded by the ability to directly address any record of \rdar's
- 1-D record arrays.
-
\section{Acknowledgements}