summaryrefslogtreecommitdiff
path: root/macros/latex/contrib
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-04-05 03:01:24 +0000
committerNorbert Preining <norbert@preining.info>2022-04-05 03:01:24 +0000
commita4e931576165d0a4a143915f4725399272e06fee (patch)
treeef5b6d71c2223b9f58e61fbb25423d4042430198 /macros/latex/contrib
parent7548e4d37c2aaefd32fe0a9bcd83f8e71326dde1 (diff)
CTAN sync 202204050301
Diffstat (limited to 'macros/latex/contrib')
-rw-r--r--macros/latex/contrib/colorist/colorart.cls3
-rw-r--r--macros/latex/contrib/colorist/colorbook.cls3
-rw-r--r--macros/latex/contrib/colorist/colorist-doc.pdfbin101019 -> 101825 bytes
-rw-r--r--macros/latex/contrib/colorist/colorist-doc.tex16
-rw-r--r--macros/latex/contrib/colorist/colorist-fancy.sty113
-rw-r--r--macros/latex/contrib/colorist/colorist.sty2
-rw-r--r--macros/latex/contrib/commonunicode/LICENSE21
-rw-r--r--macros/latex/contrib/commonunicode/README.md10
-rw-r--r--macros/latex/contrib/commonunicode/doc/commonunicode.pdfbin0 -> 576959 bytes
-rw-r--r--macros/latex/contrib/commonunicode/doc/commonunicode.tex30
-rw-r--r--macros/latex/contrib/commonunicode/latex/commonunicode.sty1016
-rw-r--r--macros/latex/contrib/minimalist/minimalist-classical.sty126
-rw-r--r--macros/latex/contrib/minimalist/minimalist-doc.pdfbin103651 -> 103703 bytes
-rw-r--r--macros/latex/contrib/minimalist/minimalist-doc.tex14
-rw-r--r--macros/latex/contrib/minimalist/minimalist-plain.sty142
-rw-r--r--macros/latex/contrib/minimalist/minimalist.sty20
-rw-r--r--macros/latex/contrib/minimalist/minimart.cls6
-rw-r--r--macros/latex/contrib/minimalist/minimbook.cls6
-rw-r--r--macros/latex/contrib/projlib/ProjLib.dtx200
-rw-r--r--macros/latex/contrib/projlib/README.md21
-rw-r--r--macros/latex/contrib/scontents/README.md47
-rw-r--r--macros/latex/contrib/scontents/scontents.dtx731
-rw-r--r--macros/latex/contrib/scontents/scontents.ins10
-rw-r--r--macros/latex/contrib/scontents/scontents.pdfbin373717 -> 385642 bytes
-rw-r--r--macros/latex/contrib/siunitx/CHANGELOG.md11
-rw-r--r--macros/latex/contrib/siunitx/siunitx-code.pdfbin608847 -> 608331 bytes
-rw-r--r--macros/latex/contrib/siunitx/siunitx-number.dtx48
-rw-r--r--macros/latex/contrib/siunitx/siunitx.dtx2
-rw-r--r--macros/latex/contrib/siunitx/siunitx.pdfbin640391 -> 640392 bytes
29 files changed, 1984 insertions, 614 deletions
diff --git a/macros/latex/contrib/colorist/colorart.cls b/macros/latex/contrib/colorist/colorart.cls
index fd6bc08f62..98e55b01ae 100644
--- a/macros/latex/contrib/colorist/colorart.cls
+++ b/macros/latex/contrib/colorist/colorart.cls
@@ -19,7 +19,7 @@
\RequirePackage{l3keys2e}
\ProvidesExplClass
{colorart}
- {2022/03/28} {}
+ {2022/04/03} {}
{A colorful article style}
\tl_const:Nn \l__colorclass_base_class_tl { article }
@@ -119,6 +119,7 @@
\RequirePackage { colorist }
+\raggedbottom
\hfuzz=2pt
\vfuzz=2pt
diff --git a/macros/latex/contrib/colorist/colorbook.cls b/macros/latex/contrib/colorist/colorbook.cls
index 07389ebc5c..9e43b291af 100644
--- a/macros/latex/contrib/colorist/colorbook.cls
+++ b/macros/latex/contrib/colorist/colorbook.cls
@@ -19,7 +19,7 @@
\RequirePackage{l3keys2e}
\ProvidesExplClass
{colorbook}
- {2022/03/28} {}
+ {2022/04/03} {}
{A colorful book style}
\tl_const:Nn \l__colorclass_base_class_tl { book }
@@ -119,6 +119,7 @@
\RequirePackage { colorist }
+\raggedbottom
\hfuzz=2pt
\vfuzz=2pt
diff --git a/macros/latex/contrib/colorist/colorist-doc.pdf b/macros/latex/contrib/colorist/colorist-doc.pdf
index e187bcbc51..9e0720ff4c 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 064648846c..5a1e6d3955 100644
--- a/macros/latex/contrib/colorist/colorist-doc.tex
+++ b/macros/latex/contrib/colorist/colorist-doc.tex
@@ -37,7 +37,7 @@
\providecommand{\meta}[1]{$\langle${\normalfont\itshape#1}$\rangle$}
\lstset{moretexcs=%
{part,parttext,chapter,section,subsection,subsubsection,frontmatter,mainmatter,backmatter,tableofcontents,href,
- color,NameTheorem,CreateTheorem,cref,dnf,needgraph,UseLanguage,UseOtherLanguage,AddLanguageSetting,maketitle,address,curraddr,email,keywords,subjclass,thanks,dedicatory,TheDate,ProjLib,qedhere
+ color,NameTheorem,CreateTheorem,cref,DNF,needgraph,UseLanguage,UseOtherLanguage,AddLanguageSetting,maketitle,address,curraddr,email,keywords,subjclass,thanks,dedicatory,TheDate,ProjLib,qedhere
}
}
\lstnewenvironment{code}%
@@ -91,7 +91,7 @@
%%================================
\begin{document}
-\def\PackageVersion{2022/03/28}
+\def\PackageVersion{2022/04/03}
\title{{\normalfont\bfseries\color{main-text}\colorist{}}\\write your articles or books in a colorful way}
\author{Jinwen XU}
@@ -104,7 +104,7 @@
\begin{abstract}
\colorist{} is a series of styles and classes for you to typeset your articles or books in a colorful manner. The original intention in designing this series was to write drafts and notes that look colorful yet not dazzling. 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 \colorart{} class (with the option \texttt{allowbf}). You can think of it as a short introduction and demonstration.
+ Finally, this documentation is typeset using the \colorart{} class (with the option \texttt{use boldface}). You can think of it as a short introduction and demonstration.
\end{abstract}
@@ -175,7 +175,7 @@ Let's first look at a complete example of \colorart{} (the same works for \lebha
\maketitle
\begin{abstract}
- Ceci est un résumé. \dnf<(*\meta{some hint}*)>
+ Ceci est un résumé. \DNF<(*\meta{some hint}*)>
\end{abstract}
\begin{keyword}
AAA, BBB, CCC, DDD, EEE
@@ -267,7 +267,7 @@ In addition, you may also write in the \AmS{} fashion, i.e.:
\LevelThreeTitle{Draft marks}
\begin{code}
-\dnf<(*\meta{some hint}*)>
+\DNF<(*\meta{some hint}*)>
\end{code}
When you have some places that have not yet been finished yet, you can mark them with this command, which is especially useful during the draft stage.
@@ -380,7 +380,7 @@ In the next section, we will go through the options available.
\begin{tip}
During the draft stage, it is recommended to use the \verb|fast| option to speed up compilation. When in \verb|fast| mode, there will be a watermark ``DRAFT'' to indicate that you are currently in the draft mode.
\end{tip}
- \item \texttt{allowbf}
+ \item \texttt{use boldface}
\begin{itemize}
\item Allow boldface. When this option is enabled, the main title, the titles of all levels and the names of theorem-like environments will be bolded.
\end{itemize}
@@ -530,9 +530,9 @@ For aesthetics, adjacent definitions will be connected together automatically:
\LevelTwoTitle{Draft mark}
-You can use \lstinline|\dnf| to mark the unfinished part. For example:
+You can use \lstinline|\DNF| to mark the unfinished part. For example:
\begin{itemize}
- \item \lstinline|\dnf| or \lstinline|\dnf<...>|. The effect is: \dnf~ or \dnf<...>. \\The prompt text changes according to the current language. For example, it will be displayed as \UseOtherLanguage{French}{\dnf} in French mode.
+ \item \lstinline|\DNF| or \lstinline|\DNF<...>|. The effect is: \DNF~ or \DNF<...>. \\The prompt text changes according to the current language. For example, it will be displayed as \UseOtherLanguage{French}{\DNF} in French mode.
\end{itemize}
\LevelTwoTitle{Title, abstract and keywords}
diff --git a/macros/latex/contrib/colorist/colorist-fancy.sty b/macros/latex/contrib/colorist/colorist-fancy.sty
index cb625ce8ac..5f69f0857a 100644
--- a/macros/latex/contrib/colorist/colorist-fancy.sty
+++ b/macros/latex/contrib/colorist/colorist-fancy.sty
@@ -19,7 +19,7 @@
\RequirePackage{l3keys2e}
\ProvidesExplPackage
{colorist-fancy}
- {2022/03/28} {}
+ {2022/04/03} {}
{The fancy style of colorist}
\@ifpackageloaded { colorist } {}
@@ -403,10 +403,10 @@
{
\titlecontents{chapter}
[2em] % i.e., 0em (part) + 2em
- {\addvspace{1pc}\normalfont\color{maintheme}\sffamily \colorist_bfseries: }
- {\contentslabel{2em}}
- {\scshape\hspace*{-2em}}
- {\titlerule*[10pt]{\parbox{3pt}{\hspace*{-.25pt}\textcolor{main-text!15!paper}{.}}}\color{maintheme}\contentspage}
+ {\addvspace{1pc} \color{maintheme} \normalfont \sffamily \colorist_bfseries: \scshape }
+ {\contentslabel[ \raisebox{-.03\baselineskip}{ \large \normalfont \sffamily \colorist_bfseries: \thecontentslabel } ]{2em}}
+ {\hspace*{-2em}}
+ {\titlerule*[10pt]{\parbox{3pt}{\hspace*{-.25pt}\textcolor{main-text!15!paper}{.}}}\color{maintheme}\normalfont\sffamily\contentspage}
\titlecontents{section}
[4em] % i.e., 2em (chapter) + 2em
{\addvspace{.3pc}\normalfont\color{maintheme}\sffamily}
@@ -429,10 +429,10 @@
{
\titlecontents{section}
[2em] % i.e., 0em (part) + 2em
- {\addvspace{.3pc}\normalfont\color{maintheme}\sffamily}
- {\contentslabel{1.75em}}
+ {\addvspace{.3pc} \color{maintheme} \normalfont \sffamily \scshape }
+ {\contentslabel[ { \normalfont \sffamily \thecontentslabel } ]{1.75em}}
{\hspace*{-1.75em}}
- {\titlerule*[10pt]{\parbox{3pt}{\textcolor{main-text!15!paper}{.}}}\color{maintheme}\contentspage}
+ {\titlerule*[10pt]{\parbox{3pt}{\textcolor{main-text!15!paper}{.}}}\color{maintheme}\normalfont\sffamily\contentspage}
\titlecontents{subsection}
[4.5em] % i.e., 2em (section) + 2.5em
{\addvspace{.15pc}\normalfont\sffamily}
@@ -479,8 +479,8 @@
, PT = Esta~página~foi~intencionalmente~deixada~em~branco
, BR = Esta~página~foi~intencionalmente~deixada~em~branco
, ES = Esta~página~se~ha~dejado~intencionadamente~en~blanco
- , CN = 此页为有意留为空白
- , TC = 此頁為有意留為空白
+ , CN = \ziju{0.2} 此页为有意留为空白
+ , TC = \ziju{0.2} 此頁為有意留為空白
, JP = このページは意図的に空白にしてあります
, RU = Эта~страница~намеренно~оставлена~пустой
}
@@ -492,12 +492,76 @@
\hook_gput_next_code:nn { shipout/background }
{
\put(0.5\paperwidth,-0.5\paperheight){
- \makebox[0pt]{\large\color{main-text!10!paper}\bl@nkpagetext}}
+ \makebox[0pt]{\large\color{main-text!10!paper}\g_colorist_title_font_common_tl\bl@nkpagetext}}
}
\null\newpage\fi\fi
}
%%================================
+%% Index
+%%================================
+\RequirePackage { imakeidx }
+\makeindex[intoc]
+
+\RequirePackage { silence }
+\ExplSyntaxOff
+\WarningFilter{latex}{Writing or overwriting file}
+\begin{filecontents*}[overwrite]{\jobname.mst}
+delim_0 "\\IndexDotfill " % Filler between section heading and page number
+delim_1 "\\IndexDotfill " % Filler between subsection heading and page number
+headings_flag 1
+heading_prefix "\\IndexHeading{"
+heading_suffix "}\n"
+\end{filecontents*}
+\ExplSyntaxOn
+
+\projlib_langauge_define_multilingual_text:Nn \index_symbols_name
+ {
+ , EN = Symbols
+ , FR = Symboles
+ , DE = Symbole
+ , IT = Simboli
+ , PT = Símbolos
+ , BR = Símbolos
+ , ES = Símbolos
+ , CN = 符号
+ , TC = 符號
+ , JP = 記号
+ , RU = Символы
+ }
+
+\newcommand*{\IndexDotfill}
+ {
+ \nobreakspace\nobreakspace
+ \titlerule*[.67em]{\textcolor{main-text!15!paper}{.}}
+ \nobreakspace\nobreakspace
+ }
+\newcommand*{\IndexHeading}[1]
+ {
+ \str_if_eq:nnTF { #1 } { Symbols }
+ { \tl_set:Nn \l_tmpa_tl { \index_symbols_name } }
+ { \tl_set:Nn \l_tmpa_tl { #1 } }
+ \tikz\node[
+ rounded~corners=5pt,
+ draw=maintheme,
+ fill=maintheme!10,
+ line~width=1pt,
+ inner~sep=5pt,
+ align=center,
+ font=\large\sffamily\colorist_bfseries:,
+ minimum~width=\linewidth-\pgflinewidth,
+ ] { \l_tmpa_tl };
+ \nopagebreak
+ \par
+ \vspace{.3\baselineskip}
+ }
+\renewcommand*{\indexspace}
+ {
+ \par
+ \vspace{2pc~plus~.5pc~minus~.3pc}
+ }
+
+%%================================
%% Draft mark
%%================================
\RequirePackage { projlib-draft }
@@ -505,8 +569,10 @@
%%================================
%% Icons
%%================================
-\RequirePackage{tikz}
-\newcommand{\ideabulb}[2][0.15]
+\RequirePackage { tikz }
+\NewDocumentCommand \colorist_icon_ideabulb:w { O{0.15} m }
+ % #1 = scale
+ % #2 = color
{
\scalebox{#1}{
\begin{tikzpicture}
@@ -523,7 +589,9 @@
\end{tikzpicture}}
}
-\newcommand{\questionmark}[2][0.15]
+\NewDocumentCommand \colorist_icon_questionmark:w { O{0.15} m }
+ % #1 = scale
+ % #2 = color
{
\scalebox{#1}{
\begin{tikzpicture}
@@ -607,12 +675,15 @@
{
\providecommand{\phantomsection}{}
\RequirePackage { url }
- \newcommand{\href}[2]{#2}
+ \providecommand{\href}[2]{#2}
+ \providecommand{\texorpdfstring}[2]{#1}
}
{
- \PassOptionsToPackage { hidelinks,linktoc=all } { hyperref }
- \RequirePackage { bookmark }
\RequirePackage { hyperref }
+ \RequirePackage { bookmark }
+ \hypersetup{ hidelinks, linktoc = all }
+ \bookmarksetup{ numbered }
+ \renewcommand\Hy@numberline[1]{#1.~}
}
@@ -811,7 +882,8 @@
\reversemarginpar
\fi
\mparadjust{-.25em}
- \marginnote{\ideabulb[0.3]{orange}
+ \marginnote{
+ \colorist_icon_ideabulb:w [0.3] {orange}
\bool_if:NTF \l__colorist_is_book_bool
{
\hspace*{-.2em}
@@ -830,7 +902,8 @@
\reversemarginpar
\fi
\mparadjust{-.25em}
- \marginnote{\questionmark[0.3]{purple}
+ \marginnote{
+ \colorist_icon_questionmark:w [0.3] {purple}
\bool_if:NTF \l__colorist_is_book_bool
{
\hspace*{-.2em}
@@ -1027,6 +1100,8 @@
\theoremstyle{simple}
+\hook_gput_code:nnn { env/quote/begin } { colorist } { \small }
+
%%================================
%% Title block style
%%================================
diff --git a/macros/latex/contrib/colorist/colorist.sty b/macros/latex/contrib/colorist/colorist.sty
index ad936a1081..1095910ca9 100644
--- a/macros/latex/contrib/colorist/colorist.sty
+++ b/macros/latex/contrib/colorist/colorist.sty
@@ -19,7 +19,7 @@
\RequirePackage{l3keys2e}
\ProvidesExplPackage
{colorist}
- {2022/03/28} {}
+ {2022/04/03} {}
{A colorful style for articles and books}
\keys_define:nn { colorist }
diff --git a/macros/latex/contrib/commonunicode/LICENSE b/macros/latex/contrib/commonunicode/LICENSE
new file mode 100644
index 0000000000..4a910ee5ad
--- /dev/null
+++ b/macros/latex/contrib/commonunicode/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 Pablo Pizarro R.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/macros/latex/contrib/commonunicode/README.md b/macros/latex/contrib/commonunicode/README.md
new file mode 100644
index 0000000000..677924922b
--- /dev/null
+++ b/macros/latex/contrib/commonunicode/README.md
@@ -0,0 +1,10 @@
+# common-unicode
+
+A latex package that contains a list of the common Unicode symbols, which lets to use them without the need for complex latex stuff.
+
+This package is distributed under the terms of the MIT License.
+
+Author
+------
+
+[Pablo Pizarro R.](https://ppizarror.com) | 2022
diff --git a/macros/latex/contrib/commonunicode/doc/commonunicode.pdf b/macros/latex/contrib/commonunicode/doc/commonunicode.pdf
new file mode 100644
index 0000000000..f678973899
--- /dev/null
+++ b/macros/latex/contrib/commonunicode/doc/commonunicode.pdf
Binary files differ
diff --git a/macros/latex/contrib/commonunicode/doc/commonunicode.tex b/macros/latex/contrib/commonunicode/doc/commonunicode.tex
new file mode 100644
index 0000000000..270d8aa454
--- /dev/null
+++ b/macros/latex/contrib/commonunicode/doc/commonunicode.tex
@@ -0,0 +1,30 @@
+\documentclass{article}
+\usepackage[T1]{fontenc}
+\usepackage{hyperref}
+\hypersetup{colorlinks}
+\usepackage{commonunicode}
+
+\title{The commonunicode package}
+\author{Pablo Pizarro R. @ \href{https://ppizarror.com/}{ppizarror.com}}
+
+\date{\csname ver@commonunicode.sty\endcsname}
+
+\begin{document}
+
+\maketitle
+\tableofcontents
+
+\section{Introduction}
+
+The common-unicode package allows you to insert unicode characters into any latex document without the need to use complex commands, 𝑠𝑢𝑐𝘩 𝑎𝑠 𝑡𝘩𝑖𝑠 𝑜𝑛𝑒. \\
+
+\noindent To use this package:
+
+\textbackslash\texttt{usepackage\{commonunicode\}} \\
+
+As there is thousands of different characters, you can provide new ones! Simply create a new issue on the \href{https://github.com/ppizarror/common-unicode}{Github common-unicode repo}.
+
+\section{List of added unicodes}
+\input{commonunicode_list}
+
+\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/commonunicode/latex/commonunicode.sty b/macros/latex/contrib/commonunicode/latex/commonunicode.sty
new file mode 100644
index 0000000000..90ad545169
--- /dev/null
+++ b/macros/latex/contrib/commonunicode/latex/commonunicode.sty
@@ -0,0 +1,1016 @@
+% Common-unicode package
+%
+% A latex package that contains a list of the common unicode symbols,
+% which lets to use them without the need of complex latex stuff.
+%
+% Author: Pablo Pizarro R. @ppizarror.com
+
+\NeedsTeXFormat{LaTeX2e}[1994/06/01]
+\ProvidesPackage{commonunicode}[2022/04/03 v1.0.0]
+
+% Load packages
+\RequirePackage{amsfonts}
+\RequirePackage{amssymb}
+\RequirePackage{mathrsfs}
+\RequirePackage{mathtools}
+\RequirePackage{stmaryrd}
+\RequirePackage{wasysym}
+
+% Only load once (not needed in LaTeX, but does no harm).
+\csname COMMONUNICODE\string @loaded\endcsname
+\expandafter\let\csname COMMONUNICODE\string @loaded\endcsname\endinput
+
+% Greek letter definition
+\def\COMMONUNICODE@Alpha{A}
+\def\COMMONUNICODE@Beta{B}
+\def\COMMONUNICODE@Chi{X}
+\def\COMMONUNICODE@Epsilon{E}
+\def\COMMONUNICODE@Eta{H}
+\def\COMMONUNICODE@Iota{I}
+\def\COMMONUNICODE@Kappa{K}
+\def\COMMONUNICODE@Mu{M}
+\def\COMMONUNICODE@Nu{N}
+\def\COMMONUNICODE@Omicron{O}
+\def\COMMONUNICODE@omicron{o}
+\def\COMMONUNICODE@Rho{P}
+\def\COMMONUNICODE@Tau{T}
+\def\COMMONUNICODE@Zeta{Z}
+
+\def\COMMONUNICODE@LOCALunknownchar {\ensuremath{\mathrm{UNKNOWN\;CHAR}}}
+
+% Symbol definition
+\newsavebox{\@brxanglelr}
+\newcommand{\COMMONUNICODE@llangle}[1][]{\savebox{\@brxanglelr}{\(\m@th{#1\langle}\)}%
+ \mathopen{\copy\@brxanglelr\kern-0.5\wd\@brxanglelr\usebox{\@brxanglelr}}}
+\newcommand{\COMMONUNICODE@rrangle}[1][]{\savebox{\@brxanglelr}{\(\m@th{#1\rangle}\)}%
+ \mathclose{\copy\@brxanglelr\kern-0.5\wd\@brxanglelr\usebox{\@brxanglelr}}}
+
+% Create commands if not defined
+\ifx\DeclareUnicodeCharacter\undefined%
+\def\DeclareUnicodeCharacter#1#2{%
+ \def\tmp{#2}\uccode`\~="#1 \catcode"#1 \active%
+ \uppercase{\global\let~\tmp}%
+ \uccode`\~=0%
+}
+\fi%
+\newcommand\COMMONUNICODE@mapsfrom{\mathrel{\reflectbox{\ensuremath{\mapsto}}}}%
+
+% Setup unicode characters
+\ifdefined\DeclareUnicodeCharacter
+\DeclareUnicodeCharacter{000B}{~}
+\DeclareUnicodeCharacter{00A0}{~}
+\DeclareUnicodeCharacter{00A1}{\textexclamdown}
+\DeclareUnicodeCharacter{00A2}{\textcent}
+\DeclareUnicodeCharacter{00A3}{\pounds}
+\DeclareUnicodeCharacter{00A4}{\textcurrency}
+\DeclareUnicodeCharacter{00A5}{\textyen}
+\DeclareUnicodeCharacter{00A6}{\textbrokenbar}
+\DeclareUnicodeCharacter{00A7}{{\mathhexbox 278}}
+\DeclareUnicodeCharacter{00A8}{\"{ }}
+\DeclareUnicodeCharacter{00A9}{\copyright}
+\DeclareUnicodeCharacter{00AA}{\textordfeminine}
+\DeclareUnicodeCharacter{00AB}{\guillemotleft}
+\DeclareUnicodeCharacter{00AC}{\ensuremath{\neg}}
+\DeclareUnicodeCharacter{00AE}{\textregistered}
+\DeclareUnicodeCharacter{00AF}{\textasciimacron}
+\DeclareUnicodeCharacter{00B0}{\textsuperscript{o}}
+\DeclareUnicodeCharacter{00B1}{\ensuremath{\pm}}
+\DeclareUnicodeCharacter{00B2}{\textsuperscript{2}}
+\DeclareUnicodeCharacter{00B3}{\textsuperscript{3}}
+\DeclareUnicodeCharacter{00B5}{\textmu}
+\DeclareUnicodeCharacter{00B6}{{\mathhexbox 27B}}
+\DeclareUnicodeCharacter{00B7}{\ensuremath{\cdot}}
+\DeclareUnicodeCharacter{00B9}{\textsuperscript{1}}
+\DeclareUnicodeCharacter{00BA}{\textordmasculine}
+\DeclareUnicodeCharacter{00BB}{\guillemotright}
+\DeclareUnicodeCharacter{00BC}{\ensuremath{\frac{1}{4}}}
+\DeclareUnicodeCharacter{00BD}{\ensuremath{\frac{1}{2}}}
+\DeclareUnicodeCharacter{00BE}{\ensuremath{\frac{3}{4}}}
+\DeclareUnicodeCharacter{00BF}{\textquestiondown}
+\DeclareUnicodeCharacter{00D7}{\ensuremath{\times}}
+\DeclareUnicodeCharacter{00F7}{\ensuremath{\div}}
+\DeclareUnicodeCharacter{0131}{\ensuremath{\imath}}
+\DeclareUnicodeCharacter{02102}{\ensuremath{\mathbb{C}}}
+\DeclareUnicodeCharacter{0210D}{\ensuremath{\mathbb{H}}}
+\DeclareUnicodeCharacter{02115}{\ensuremath{\mathbb{N}}}
+\DeclareUnicodeCharacter{02119}{\ensuremath{\mathbb{P}}}
+\DeclareUnicodeCharacter{0211A}{\ensuremath{\mathbb{Q}}}
+\DeclareUnicodeCharacter{0211D}{\ensuremath{\mathbb{R}}}
+\DeclareUnicodeCharacter{02124}{\ensuremath{\mathbb{Z}}}
+\DeclareUnicodeCharacter{0237}{\ensuremath{\jmath}}
+\DeclareUnicodeCharacter{02B0}{\ensuremath{^h}}
+\DeclareUnicodeCharacter{02B2}{\ensuremath{^j}}
+\DeclareUnicodeCharacter{02B3}{\ensuremath{^r}}
+\DeclareUnicodeCharacter{02B7}{\ensuremath{^w}}
+\DeclareUnicodeCharacter{02B8}{\ensuremath{^y}}
+\DeclareUnicodeCharacter{02E1}{\ensuremath{^l}}
+\DeclareUnicodeCharacter{02E2}{\ensuremath{^s}}
+\DeclareUnicodeCharacter{02E3}{\ensuremath{^x}}
+\DeclareUnicodeCharacter{0302}{\ensuremath{\hat{\phantom{x}}}}
+\DeclareUnicodeCharacter{0308}{\ensuremath{\ddot{\phantom{x}}}}
+\DeclareUnicodeCharacter{0332}{\ensuremath{\underline{\phantom{x}}}}
+\DeclareUnicodeCharacter{0391}{\ensuremath{\COMMONUNICODE@Alpha}}
+\DeclareUnicodeCharacter{0392}{\ensuremath{\COMMONUNICODE@Beta}}
+\DeclareUnicodeCharacter{0393}{\ensuremath{\Gamma}}
+\DeclareUnicodeCharacter{0394}{\ensuremath{\Delta}}
+\DeclareUnicodeCharacter{0395}{\ensuremath{\COMMONUNICODE@Epsilon}}
+\DeclareUnicodeCharacter{0396}{\ensuremath{\COMMONUNICODE@Zeta}}
+\DeclareUnicodeCharacter{0397}{\ensuremath{\COMMONUNICODE@Eta}}
+\DeclareUnicodeCharacter{0398}{\ensuremath{\Theta}}
+\DeclareUnicodeCharacter{0399}{\COMMONUNICODE@Iota}
+\DeclareUnicodeCharacter{039A}{\COMMONUNICODE@Kappa}
+\DeclareUnicodeCharacter{039B}{\ensuremath{\Lambda}}
+\DeclareUnicodeCharacter{039C}{\COMMONUNICODE@Mu}
+\DeclareUnicodeCharacter{039D}{\COMMONUNICODE@Nu}
+\DeclareUnicodeCharacter{039E}{\ensuremath{\Xi}}
+\DeclareUnicodeCharacter{039F}{\COMMONUNICODE@Omicron}
+\DeclareUnicodeCharacter{03A0}{\ensuremath{\Pi}}
+\DeclareUnicodeCharacter{03A1}{\COMMONUNICODE@Rho}
+\DeclareUnicodeCharacter{03A3}{\ensuremath{\Sigma}}
+\DeclareUnicodeCharacter{03A4}{\COMMONUNICODE@Tau}
+\DeclareUnicodeCharacter{03A5}{\ensuremath{\Upsilon}}
+\DeclareUnicodeCharacter{03A6}{\ensuremath{\Phi}}
+\DeclareUnicodeCharacter{03A7}{\COMMONUNICODE@Chi}
+\DeclareUnicodeCharacter{03A8}{\ensuremath{\Psi}}
+\DeclareUnicodeCharacter{03A9}{\ensuremath{\Omega}}
+\DeclareUnicodeCharacter{03B1}{\ensuremath{\alpha}}
+\DeclareUnicodeCharacter{03B2}{\ensuremath{\beta}}
+\DeclareUnicodeCharacter{03B3}{\ensuremath{\gamma}}
+\DeclareUnicodeCharacter{03B4}{\ensuremath{\delta}}
+\DeclareUnicodeCharacter{03B5}{\ensuremath{\varepsilon}}
+\DeclareUnicodeCharacter{03B6}{\ensuremath{\zeta}}
+\DeclareUnicodeCharacter{03B7}{\ensuremath{\eta}}
+\DeclareUnicodeCharacter{03B8}{\ensuremath{\theta}}
+\DeclareUnicodeCharacter{03B9}{\ensuremath{\iota}}
+\DeclareUnicodeCharacter{03BA}{\ensuremath{\kappa}}
+\DeclareUnicodeCharacter{03BB}{\ensuremath{\lambda}}
+\DeclareUnicodeCharacter{03BC}{\ensuremath{\mu}}
+\DeclareUnicodeCharacter{03BD}{\ensuremath{\nu}}
+\DeclareUnicodeCharacter{03BE}{\ensuremath{\xi}}
+\DeclareUnicodeCharacter{03BF}{\COMMONUNICODE@omicron}
+\DeclareUnicodeCharacter{03C0}{\ensuremath{\pi}}
+\DeclareUnicodeCharacter{03C1}{\ensuremath{\rho}}
+\DeclareUnicodeCharacter{03C2}{\ensuremath{\varsigma}}
+\DeclareUnicodeCharacter{03C3}{\ensuremath{\sigma}}
+\DeclareUnicodeCharacter{03C4}{\ensuremath{\tau}}
+\DeclareUnicodeCharacter{03C5}{\ensuremath{\upsilon}}
+\DeclareUnicodeCharacter{03C6}{\ensuremath{\phi}}
+\DeclareUnicodeCharacter{03C7}{\ensuremath{\chi}}
+\DeclareUnicodeCharacter{03C8}{\ensuremath{\psi}}
+\DeclareUnicodeCharacter{03C9}{\ensuremath{\omega}}
+\DeclareUnicodeCharacter{03D0}{\ensuremath{\beta}}
+\DeclareUnicodeCharacter{03D1}{\ensuremath{\theta}}
+\DeclareUnicodeCharacter{03D5}{\ensuremath{\phi}}
+\DeclareUnicodeCharacter{03D6}{\ensuremath{\pi}}
+\DeclareUnicodeCharacter{03D8}{\ensuremath{Q}}
+\DeclareUnicodeCharacter{03D9}{\ensuremath{q}}
+\DeclareUnicodeCharacter{03DA}{\ensuremath{S}}
+\DeclareUnicodeCharacter{03DB}{\ensuremath{s}}
+\DeclareUnicodeCharacter{03DC}{\ensuremath{D}}
+\DeclareUnicodeCharacter{03DD}{\ensuremath{d}}
+\DeclareUnicodeCharacter{03DE}{\ensuremath{K}}
+\DeclareUnicodeCharacter{03DF}{\ensuremath{k}}
+\DeclareUnicodeCharacter{03E0}{\ensuremath{S}}
+\DeclareUnicodeCharacter{03E1}{\ensuremath{s}}
+\DeclareUnicodeCharacter{03F0}{\ensuremath{\varkappa}}
+\DeclareUnicodeCharacter{03F1}{\ensuremath{\rho}}
+\DeclareUnicodeCharacter{03F5}{\ensuremath{\epsilon}}
+\DeclareUnicodeCharacter{03F6}{\ensuremath{\backepsilon}}
+\DeclareUnicodeCharacter{041F}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{0432}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{0435}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{0438}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{043C}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{0440}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{0442}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{0BA8}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{0BBF}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{1100}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{11F9}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{1D2C}{\ensuremath{^A}}
+\DeclareUnicodeCharacter{1D2E}{\ensuremath{^B}}
+\DeclareUnicodeCharacter{1D30}{\ensuremath{^D}}
+\DeclareUnicodeCharacter{1D31}{\ensuremath{^E}}
+\DeclareUnicodeCharacter{1D33}{\ensuremath{^G}}
+\DeclareUnicodeCharacter{1D34}{\ensuremath{^H}}
+\DeclareUnicodeCharacter{1D35}{\ensuremath{^I}}
+\DeclareUnicodeCharacter{1D36}{\ensuremath{^J}}
+\DeclareUnicodeCharacter{1D37}{\ensuremath{^K}}
+\DeclareUnicodeCharacter{1D38}{\ensuremath{^L}}
+\DeclareUnicodeCharacter{1D39}{\ensuremath{^M}}
+\DeclareUnicodeCharacter{1D3A}{\ensuremath{^N}}
+\DeclareUnicodeCharacter{1D3C}{\ensuremath{^O}}
+\DeclareUnicodeCharacter{1D3E}{\ensuremath{^P}}
+\DeclareUnicodeCharacter{1D3F}{\ensuremath{^R}}
+\DeclareUnicodeCharacter{1D40}{\ensuremath{^T}}
+\DeclareUnicodeCharacter{1D400}{\ensuremath{\mathbf{A}}}
+\DeclareUnicodeCharacter{1D401}{\ensuremath{\mathbf{B}}}
+\DeclareUnicodeCharacter{1D402}{\ensuremath{\mathbf{C}}}
+\DeclareUnicodeCharacter{1D403}{\ensuremath{\mathbf{D}}}
+\DeclareUnicodeCharacter{1D404}{\ensuremath{\mathbf{E}}}
+\DeclareUnicodeCharacter{1D405}{\ensuremath{\mathbf{F}}}
+\DeclareUnicodeCharacter{1D406}{\ensuremath{\mathbf{G}}}
+\DeclareUnicodeCharacter{1D407}{\ensuremath{\mathbf{H}}}
+\DeclareUnicodeCharacter{1D408}{\ensuremath{\mathbf{I}}}
+\DeclareUnicodeCharacter{1D409}{\ensuremath{\mathbf{J}}}
+\DeclareUnicodeCharacter{1D40A}{\ensuremath{\mathbf{K}}}
+\DeclareUnicodeCharacter{1D40B}{\ensuremath{\mathbf{L}}}
+\DeclareUnicodeCharacter{1D40C}{\ensuremath{\mathbf{M}}}
+\DeclareUnicodeCharacter{1D40D}{\ensuremath{\mathbf{N}}}
+\DeclareUnicodeCharacter{1D40E}{\ensuremath{\mathbf{O}}}
+\DeclareUnicodeCharacter{1D40F}{\ensuremath{\mathbf{P}}}
+\DeclareUnicodeCharacter{1D41}{\ensuremath{^U}}
+\DeclareUnicodeCharacter{1D410}{\ensuremath{\mathbf{Q}}}
+\DeclareUnicodeCharacter{1D411}{\ensuremath{\mathbf{R}}}
+\DeclareUnicodeCharacter{1D412}{\ensuremath{\mathbf{S}}}
+\DeclareUnicodeCharacter{1D413}{\ensuremath{\mathbf{T}}}
+\DeclareUnicodeCharacter{1D414}{\ensuremath{\mathbf{U}}}
+\DeclareUnicodeCharacter{1D415}{\ensuremath{\mathbf{V}}}
+\DeclareUnicodeCharacter{1D416}{\ensuremath{\mathbf{W}}}
+\DeclareUnicodeCharacter{1D417}{\ensuremath{\mathbf{X}}}
+\DeclareUnicodeCharacter{1D418}{\ensuremath{\mathbf{Y}}}
+\DeclareUnicodeCharacter{1D419}{\ensuremath{\mathbf{Z}}}
+\DeclareUnicodeCharacter{1D41A}{\ensuremath{\mathbf{a}}}
+\DeclareUnicodeCharacter{1D41B}{\ensuremath{\mathbf{b}}}
+\DeclareUnicodeCharacter{1D41C}{\ensuremath{\mathbf{c}}}
+\DeclareUnicodeCharacter{1D41D}{\ensuremath{\mathbf{d}}}
+\DeclareUnicodeCharacter{1D41E}{\ensuremath{\mathbf{e}}}
+\DeclareUnicodeCharacter{1D41F}{\ensuremath{\mathbf{f}}}
+\DeclareUnicodeCharacter{1D42}{\ensuremath{^W}}
+\DeclareUnicodeCharacter{1D420}{\ensuremath{\mathbf{g}}}
+\DeclareUnicodeCharacter{1D421}{\ensuremath{\mathbf{h}}}
+\DeclareUnicodeCharacter{1D422}{\ensuremath{\mathbf{i}}}
+\DeclareUnicodeCharacter{1D423}{\ensuremath{\mathbf{j}}}
+\DeclareUnicodeCharacter{1D424}{\ensuremath{\mathbf{k}}}
+\DeclareUnicodeCharacter{1D425}{\ensuremath{\mathbf{l}}}
+\DeclareUnicodeCharacter{1D426}{\ensuremath{\mathbf{m}}}
+\DeclareUnicodeCharacter{1D427}{\ensuremath{\mathbf{n}}}
+\DeclareUnicodeCharacter{1D428}{\ensuremath{\mathbf{o}}}
+\DeclareUnicodeCharacter{1D429}{\ensuremath{\mathbf{p}}}
+\DeclareUnicodeCharacter{1D42A}{\ensuremath{\mathbf{q}}}
+\DeclareUnicodeCharacter{1D42B}{\ensuremath{\mathbf{r}}}
+\DeclareUnicodeCharacter{1D42C}{\ensuremath{\mathbf{s}}}
+\DeclareUnicodeCharacter{1D42D}{\ensuremath{\mathbf{t}}}
+\DeclareUnicodeCharacter{1D42E}{\ensuremath{\mathbf{u}}}
+\DeclareUnicodeCharacter{1D42F}{\ensuremath{\mathbf{v}}}
+\DeclareUnicodeCharacter{1D43}{\ensuremath{^a}}
+\DeclareUnicodeCharacter{1D430}{\ensuremath{\mathbf{w}}}
+\DeclareUnicodeCharacter{1D431}{\ensuremath{\mathbf{x}}}
+\DeclareUnicodeCharacter{1D432}{\ensuremath{\mathbf{y}}}
+\DeclareUnicodeCharacter{1D433}{\ensuremath{\mathbf{z}}}
+\DeclareUnicodeCharacter{1D434}{\ensuremath{\mathit{A}}}
+\DeclareUnicodeCharacter{1D435}{\ensuremath{\mathit{B}}}
+\DeclareUnicodeCharacter{1D436}{\ensuremath{\mathit{C}}}
+\DeclareUnicodeCharacter{1D437}{\ensuremath{\mathit{D}}}
+\DeclareUnicodeCharacter{1D438}{\ensuremath{\mathit{E}}}
+\DeclareUnicodeCharacter{1D439}{\ensuremath{\mathit{F}}}
+\DeclareUnicodeCharacter{1D43A}{\ensuremath{\mathit{G}}}
+\DeclareUnicodeCharacter{1D43B}{\ensuremath{\mathit{H}}}
+\DeclareUnicodeCharacter{1D43C}{\ensuremath{\mathit{I}}}
+\DeclareUnicodeCharacter{1D43D}{\ensuremath{\mathit{J}}}
+\DeclareUnicodeCharacter{1D43E}{\ensuremath{\mathit{K}}}
+\DeclareUnicodeCharacter{1D43F}{\ensuremath{\mathit{L}}}
+\DeclareUnicodeCharacter{1D440}{\ensuremath{\mathit{M}}}
+\DeclareUnicodeCharacter{1D441}{\ensuremath{\mathit{N}}}
+\DeclareUnicodeCharacter{1D442}{\ensuremath{\mathit{O}}}
+\DeclareUnicodeCharacter{1D443}{\ensuremath{\mathit{P}}}
+\DeclareUnicodeCharacter{1D444}{\ensuremath{\mathit{Q}}}
+\DeclareUnicodeCharacter{1D445}{\ensuremath{\mathit{R}}}
+\DeclareUnicodeCharacter{1D446}{\ensuremath{\mathit{S}}}
+\DeclareUnicodeCharacter{1D447}{\ensuremath{\mathit{T}}}
+\DeclareUnicodeCharacter{1D448}{\ensuremath{\mathit{U}}}
+\DeclareUnicodeCharacter{1D449}{\ensuremath{\mathit{V}}}
+\DeclareUnicodeCharacter{1D44A}{\ensuremath{\mathit{W}}}
+\DeclareUnicodeCharacter{1D44B}{\ensuremath{\mathit{X}}}
+\DeclareUnicodeCharacter{1D44C}{\ensuremath{\mathit{Y}}}
+\DeclareUnicodeCharacter{1D44D}{\ensuremath{\mathit{Z}}}
+\DeclareUnicodeCharacter{1D44E}{\ensuremath{\mathit{a}}}
+\DeclareUnicodeCharacter{1D44F}{\ensuremath{\mathit{b}}}
+\DeclareUnicodeCharacter{1D450}{\ensuremath{\mathit{c}}}
+\DeclareUnicodeCharacter{1D451}{\ensuremath{\mathit{d}}}
+\DeclareUnicodeCharacter{1D452}{\ensuremath{\mathit{e}}}
+\DeclareUnicodeCharacter{1D453}{\ensuremath{\mathit{f}}}
+\DeclareUnicodeCharacter{1D454}{\ensuremath{\mathit{g}}}
+\DeclareUnicodeCharacter{1D456}{\ensuremath{\mathit{i}}}
+\DeclareUnicodeCharacter{1D457}{\ensuremath{\mathit{j}}}
+\DeclareUnicodeCharacter{1D458}{\ensuremath{\mathit{k}}}
+\DeclareUnicodeCharacter{1D459}{\ensuremath{\mathit{l}}}
+\DeclareUnicodeCharacter{1D45A}{\ensuremath{\mathit{m}}}
+\DeclareUnicodeCharacter{1D45B}{\ensuremath{\mathit{n}}}
+\DeclareUnicodeCharacter{1D45C}{\ensuremath{\mathit{o}}}
+\DeclareUnicodeCharacter{1D45D}{\ensuremath{\mathit{p}}}
+\DeclareUnicodeCharacter{1D45E}{\ensuremath{\mathit{q}}}
+\DeclareUnicodeCharacter{1D45F}{\ensuremath{\mathit{r}}}
+\DeclareUnicodeCharacter{1D460}{\ensuremath{\mathit{s}}}
+\DeclareUnicodeCharacter{1D461}{\ensuremath{\mathit{t}}}
+\DeclareUnicodeCharacter{1D462}{\ensuremath{\mathit{u}}}
+\DeclareUnicodeCharacter{1D463}{\ensuremath{\mathit{v}}}
+\DeclareUnicodeCharacter{1D464}{\ensuremath{\mathit{w}}}
+\DeclareUnicodeCharacter{1D465}{\ensuremath{\mathit{x}}}
+\DeclareUnicodeCharacter{1D466}{\ensuremath{\mathit{y}}}
+\DeclareUnicodeCharacter{1D467}{\ensuremath{\mathit{z}}}
+\DeclareUnicodeCharacter{1D47}{\ensuremath{^b}}
+\DeclareUnicodeCharacter{1D48}{\ensuremath{^d}}
+\DeclareUnicodeCharacter{1D49}{\ensuremath{^e}}
+\DeclareUnicodeCharacter{1D49C}{\ensuremath{\mathscr{A}}}
+\DeclareUnicodeCharacter{1D49E}{\ensuremath{\mathscr{C}}}
+\DeclareUnicodeCharacter{1D49F}{\ensuremath{\mathscr{D}}}
+\DeclareUnicodeCharacter{1D4A2}{\ensuremath{\mathscr{G}}}
+\DeclareUnicodeCharacter{1D4A5}{\ensuremath{\mathscr{J}}}
+\DeclareUnicodeCharacter{1D4A6}{\ensuremath{\mathscr{K}}}
+\DeclareUnicodeCharacter{1D4A9}{\ensuremath{\mathscr{N}}}
+\DeclareUnicodeCharacter{1D4AA}{\ensuremath{\mathscr{O}}}
+\DeclareUnicodeCharacter{1D4AB}{\ensuremath{\mathscr{P}}}
+\DeclareUnicodeCharacter{1D4AC}{\ensuremath{\mathscr{Q}}}
+\DeclareUnicodeCharacter{1D4AE}{\ensuremath{\mathscr{S}}}
+\DeclareUnicodeCharacter{1D4AF}{\ensuremath{\mathscr{T}}}
+\DeclareUnicodeCharacter{1D4B0}{\ensuremath{\mathscr{U}}}
+\DeclareUnicodeCharacter{1D4B1}{\ensuremath{\mathscr{V}}}
+\DeclareUnicodeCharacter{1D4B2}{\ensuremath{\mathscr{W}}}
+\DeclareUnicodeCharacter{1D4B3}{\ensuremath{\mathscr{X}}}
+\DeclareUnicodeCharacter{1D4B4}{\ensuremath{\mathscr{Y}}}
+\DeclareUnicodeCharacter{1D4B5}{\ensuremath{\mathscr{Z}}}
+\DeclareUnicodeCharacter{1D4D}{\ensuremath{^g}}
+\DeclareUnicodeCharacter{1D4D0}{\ensuremath{\mathcal{A}}}
+\DeclareUnicodeCharacter{1D4D1}{\ensuremath{\mathcal{B}}}
+\DeclareUnicodeCharacter{1D4D2}{\ensuremath{\mathcal{C}}}
+\DeclareUnicodeCharacter{1D4D3}{\ensuremath{\mathcal{D}}}
+\DeclareUnicodeCharacter{1D4D4}{\ensuremath{\mathcal{E}}}
+\DeclareUnicodeCharacter{1D4D5}{\ensuremath{\mathcal{F}}}
+\DeclareUnicodeCharacter{1D4D6}{\ensuremath{\mathcal{G}}}
+\DeclareUnicodeCharacter{1D4D7}{\ensuremath{\mathcal{H}}}
+\DeclareUnicodeCharacter{1D4D8}{\ensuremath{\mathcal{I}}}
+\DeclareUnicodeCharacter{1D4D9}{\ensuremath{\mathcal{J}}}
+\DeclareUnicodeCharacter{1D4DA}{\ensuremath{\mathcal{K}}}
+\DeclareUnicodeCharacter{1D4DB}{\ensuremath{\mathcal{L}}}
+\DeclareUnicodeCharacter{1D4DC}{\ensuremath{\mathcal{M}}}
+\DeclareUnicodeCharacter{1D4DD}{\ensuremath{\mathcal{N}}}
+\DeclareUnicodeCharacter{1D4DE}{\ensuremath{\mathcal{O}}}
+\DeclareUnicodeCharacter{1D4DF}{\ensuremath{\mathcal{P}}}
+\DeclareUnicodeCharacter{1D4E0}{\ensuremath{\mathcal{Q}}}
+\DeclareUnicodeCharacter{1D4E1}{\ensuremath{\mathcal{R}}}
+\DeclareUnicodeCharacter{1D4E2}{\ensuremath{\mathcal{S}}}
+\DeclareUnicodeCharacter{1D4E3}{\ensuremath{\mathcal{T}}}
+\DeclareUnicodeCharacter{1D4E4}{\ensuremath{\mathcal{U}}}
+\DeclareUnicodeCharacter{1D4E5}{\ensuremath{\mathcal{V}}}
+\DeclareUnicodeCharacter{1D4E6}{\ensuremath{\mathcal{W}}}
+\DeclareUnicodeCharacter{1D4E7}{\ensuremath{\mathcal{X}}}
+\DeclareUnicodeCharacter{1D4E8}{\ensuremath{\mathcal{Y}}}
+\DeclareUnicodeCharacter{1D4E9}{\ensuremath{\mathcal{Z}}}
+\DeclareUnicodeCharacter{1D4F}{\ensuremath{^k}}
+\DeclareUnicodeCharacter{1D50}{\ensuremath{^m}}
+\DeclareUnicodeCharacter{1D504}{\ensuremath{\mathfrak{A}}}
+\DeclareUnicodeCharacter{1D505}{\ensuremath{\mathfrak{B}}}
+\DeclareUnicodeCharacter{1D507}{\ensuremath{\mathfrak{D}}}
+\DeclareUnicodeCharacter{1D508}{\ensuremath{\mathfrak{E}}}
+\DeclareUnicodeCharacter{1D509}{\ensuremath{\mathfrak{F}}}
+\DeclareUnicodeCharacter{1D50A}{\ensuremath{\mathfrak{G}}}
+\DeclareUnicodeCharacter{1D50D}{\ensuremath{\mathfrak{J}}}
+\DeclareUnicodeCharacter{1D50E}{\ensuremath{\mathfrak{K}}}
+\DeclareUnicodeCharacter{1D50F}{\ensuremath{\mathfrak{L}}}
+\DeclareUnicodeCharacter{1D510}{\ensuremath{\mathfrak{M}}}
+\DeclareUnicodeCharacter{1D511}{\ensuremath{\mathfrak{N}}}
+\DeclareUnicodeCharacter{1D512}{\ensuremath{\mathfrak{O}}}
+\DeclareUnicodeCharacter{1D513}{\ensuremath{\mathfrak{P}}}
+\DeclareUnicodeCharacter{1D514}{\ensuremath{\mathfrak{Q}}}
+\DeclareUnicodeCharacter{1D516}{\ensuremath{\mathfrak{S}}}
+\DeclareUnicodeCharacter{1D517}{\ensuremath{\mathfrak{T}}}
+\DeclareUnicodeCharacter{1D518}{\ensuremath{\mathfrak{U}}}
+\DeclareUnicodeCharacter{1D519}{\ensuremath{\mathfrak{V}}}
+\DeclareUnicodeCharacter{1D51A}{\ensuremath{\mathfrak{W}}}
+\DeclareUnicodeCharacter{1D51B}{\ensuremath{\mathfrak{X}}}
+\DeclareUnicodeCharacter{1D51C}{\ensuremath{\mathfrak{Y}}}
+\DeclareUnicodeCharacter{1D51E}{\ensuremath{\mathfrak{a}}}
+\DeclareUnicodeCharacter{1D51F}{\ensuremath{\mathfrak{b}}}
+\DeclareUnicodeCharacter{1D52}{\ensuremath{^o}}
+\DeclareUnicodeCharacter{1D520}{\ensuremath{\mathfrak{c}}}
+\DeclareUnicodeCharacter{1D521}{\ensuremath{\mathfrak{d}}}
+\DeclareUnicodeCharacter{1D522}{\ensuremath{\mathfrak{e}}}
+\DeclareUnicodeCharacter{1D523}{\ensuremath{\mathfrak{f}}}
+\DeclareUnicodeCharacter{1D524}{\ensuremath{\mathfrak{g}}}
+\DeclareUnicodeCharacter{1D525}{\ensuremath{\mathfrak{h}}}
+\DeclareUnicodeCharacter{1D526}{\ensuremath{\mathfrak{i}}}
+\DeclareUnicodeCharacter{1D527}{\ensuremath{\mathfrak{j}}}
+\DeclareUnicodeCharacter{1D528}{\ensuremath{\mathfrak{k}}}
+\DeclareUnicodeCharacter{1D529}{\ensuremath{\mathfrak{l}}}
+\DeclareUnicodeCharacter{1D52A}{\ensuremath{\mathfrak{m}}}
+\DeclareUnicodeCharacter{1D52B}{\ensuremath{\mathfrak{n}}}
+\DeclareUnicodeCharacter{1D52C}{\ensuremath{\mathfrak{o}}}
+\DeclareUnicodeCharacter{1D52D}{\ensuremath{\mathfrak{p}}}
+\DeclareUnicodeCharacter{1D52E}{\ensuremath{\mathfrak{q}}}
+\DeclareUnicodeCharacter{1D52F}{\ensuremath{\mathfrak{r}}}
+\DeclareUnicodeCharacter{1D530}{\ensuremath{\mathfrak{s}}}
+\DeclareUnicodeCharacter{1D531}{\ensuremath{\mathfrak{t}}}
+\DeclareUnicodeCharacter{1D532}{\ensuremath{\mathfrak{u}}}
+\DeclareUnicodeCharacter{1D533}{\ensuremath{\mathfrak{v}}}
+\DeclareUnicodeCharacter{1D534}{\ensuremath{\mathfrak{w}}}
+\DeclareUnicodeCharacter{1D535}{\ensuremath{\mathfrak{x}}}
+\DeclareUnicodeCharacter{1D536}{\ensuremath{\mathfrak{y}}}
+\DeclareUnicodeCharacter{1D537}{\ensuremath{\mathfrak{z}}}
+\DeclareUnicodeCharacter{1D538}{\ensuremath{\mathbb{A}}}
+\DeclareUnicodeCharacter{1D539}{\ensuremath{\mathbb{B}}}
+\DeclareUnicodeCharacter{1D53B}{\ensuremath{\mathbb{D}}}
+\DeclareUnicodeCharacter{1D53C}{\ensuremath{\mathbb{E}}}
+\DeclareUnicodeCharacter{1D53D}{\ensuremath{\mathbb{F}}}
+\DeclareUnicodeCharacter{1D53E}{\ensuremath{\mathbb{G}}}
+\DeclareUnicodeCharacter{1D540}{\ensuremath{\mathbb{I}}}
+\DeclareUnicodeCharacter{1D541}{\ensuremath{\mathbb{J}}}
+\DeclareUnicodeCharacter{1D542}{\ensuremath{\mathbb{K}}}
+\DeclareUnicodeCharacter{1D543}{\ensuremath{\mathbb{L}}}
+\DeclareUnicodeCharacter{1D544}{\ensuremath{\mathbb{M}}}
+\DeclareUnicodeCharacter{1D546}{\ensuremath{\mathbb{O}}}
+\DeclareUnicodeCharacter{1D54A}{\ensuremath{\mathbb{S}}}
+\DeclareUnicodeCharacter{1D54B}{\ensuremath{\mathbb{T}}}
+\DeclareUnicodeCharacter{1D54C}{\ensuremath{\mathbb{U}}}
+\DeclareUnicodeCharacter{1D54D}{\ensuremath{\mathbb{V}}}
+\DeclareUnicodeCharacter{1D54E}{\ensuremath{\mathbb{W}}}
+\DeclareUnicodeCharacter{1D54F}{\ensuremath{\mathbb{X}}}
+\DeclareUnicodeCharacter{1D550}{\ensuremath{\mathbb{Y}}}
+\DeclareUnicodeCharacter{1D552}{\ensuremath{\mathbb{a}}}
+\DeclareUnicodeCharacter{1D553}{\ensuremath{\mathbb{b}}}
+\DeclareUnicodeCharacter{1D554}{\ensuremath{\mathbb{c}}}
+\DeclareUnicodeCharacter{1D555}{\ensuremath{\mathbb{d}}}
+\DeclareUnicodeCharacter{1D556}{\ensuremath{\mathbb{e}}}
+\DeclareUnicodeCharacter{1D557}{\ensuremath{\mathbb{f}}}
+\DeclareUnicodeCharacter{1D558}{\ensuremath{\mathbb{g}}}
+\DeclareUnicodeCharacter{1D559}{\ensuremath{\mathbb{h}}}
+\DeclareUnicodeCharacter{1D55A}{\ensuremath{\mathbb{i}}}
+\DeclareUnicodeCharacter{1D55B}{\ensuremath{\mathbb{j}}}
+\DeclareUnicodeCharacter{1D55C}{\ensuremath{\mathbb{k}}}
+\DeclareUnicodeCharacter{1D55D}{\ensuremath{\mathbb{l}}}
+\DeclareUnicodeCharacter{1D55E}{\ensuremath{\mathbb{m}}}
+\DeclareUnicodeCharacter{1D55F}{\ensuremath{\mathbb{n}}}
+\DeclareUnicodeCharacter{1D56}{\ensuremath{^p}}
+\DeclareUnicodeCharacter{1D560}{\ensuremath{\mathbb{o}}}
+\DeclareUnicodeCharacter{1D561}{\ensuremath{\mathbb{p}}}
+\DeclareUnicodeCharacter{1D562}{\ensuremath{\mathbb{q}}}
+\DeclareUnicodeCharacter{1D563}{\ensuremath{\mathbb{r}}}
+\DeclareUnicodeCharacter{1D564}{\ensuremath{\mathbb{s}}}
+\DeclareUnicodeCharacter{1D565}{\ensuremath{\mathbb{t}}}
+\DeclareUnicodeCharacter{1D566}{\ensuremath{\mathbb{u}}}
+\DeclareUnicodeCharacter{1D567}{\ensuremath{\mathbb{v}}}
+\DeclareUnicodeCharacter{1D568}{\ensuremath{\mathbb{w}}}
+\DeclareUnicodeCharacter{1D569}{\ensuremath{\mathbb{x}}}
+\DeclareUnicodeCharacter{1D56A}{\ensuremath{\mathbb{y}}}
+\DeclareUnicodeCharacter{1D56B}{\ensuremath{\mathbb{z}}}
+\DeclareUnicodeCharacter{1D57}{\ensuremath{^t}}
+\DeclareUnicodeCharacter{1D58}{\ensuremath{^u}}
+\DeclareUnicodeCharacter{1D5B}{\ensuremath{^v}}
+\DeclareUnicodeCharacter{1D62}{\ensuremath{_i}}
+\DeclareUnicodeCharacter{1D629}{\ensuremath{\mathit{h}}}
+\DeclareUnicodeCharacter{1D63}{\ensuremath{_r}}
+\DeclareUnicodeCharacter{1D64}{\ensuremath{_u}}
+\DeclareUnicodeCharacter{1D65}{\ensuremath{_v}}
+\DeclareUnicodeCharacter{1D6E4}{\ensuremath{\Gamma}}
+\DeclareUnicodeCharacter{1D6E5}{\ensuremath{\Delta}}
+\DeclareUnicodeCharacter{1D6F1}{\ensuremath{\Pi}}
+\DeclareUnicodeCharacter{1D6F4}{\ensuremath{\Sigma}}
+\DeclareUnicodeCharacter{1D6FA}{\ensuremath{\Omega}}
+\DeclareUnicodeCharacter{1D6FC}{\ensuremath{\alpha}}
+\DeclareUnicodeCharacter{1D6FD}{\ensuremath{\beta}}
+\DeclareUnicodeCharacter{1D6FE}{\ensuremath{\gamma}}
+\DeclareUnicodeCharacter{1D6FF}{\ensuremath{\delta}}
+\DeclareUnicodeCharacter{1D700}{\ensuremath{\varepsilon}}
+\DeclareUnicodeCharacter{1D701}{\ensuremath{\zeta}}
+\DeclareUnicodeCharacter{1D702}{\ensuremath{\eta}}
+\DeclareUnicodeCharacter{1D703}{\ensuremath{\theta}}
+\DeclareUnicodeCharacter{1D704}{\ensuremath{\iota}}
+\DeclareUnicodeCharacter{1D705}{\ensuremath{\kappa}}
+\DeclareUnicodeCharacter{1D706}{\ensuremath{\lambda}}
+\DeclareUnicodeCharacter{1D707}{\ensuremath{\mu}}
+\DeclareUnicodeCharacter{1D708}{\ensuremath{\nu}}
+\DeclareUnicodeCharacter{1D709}{\ensuremath{\xi}}
+\DeclareUnicodeCharacter{1D70A}{\ensuremath{\COMMONUNICODE@omicron}}
+\DeclareUnicodeCharacter{1D70B}{\ensuremath{\pi}}
+\DeclareUnicodeCharacter{1D70C}{\ensuremath{\rho}}
+\DeclareUnicodeCharacter{1D70D}{\ensuremath{\varsigma}}
+\DeclareUnicodeCharacter{1D70E}{\ensuremath{\sigma}}
+\DeclareUnicodeCharacter{1D70F}{\ensuremath{\tau}}
+\DeclareUnicodeCharacter{1D710}{\ensuremath{\upsilon}}
+\DeclareUnicodeCharacter{1D711}{\ensuremath{\varphi}}
+\DeclareUnicodeCharacter{1D712}{\ensuremath{\chi}}
+\DeclareUnicodeCharacter{1D713}{\ensuremath{\psi}}
+\DeclareUnicodeCharacter{1D714}{\ensuremath{\omega}}
+\DeclareUnicodeCharacter{1D716}{\ensuremath{\epsilon}}
+\DeclareUnicodeCharacter{1D717}{\ensuremath{\vartheta}}
+\DeclareUnicodeCharacter{1D719}{\ensuremath{\phi}}
+\DeclareUnicodeCharacter{1D71A}{\ensuremath{\varrho}}
+\DeclareUnicodeCharacter{1D71B}{\ensuremath{\varpi}}
+\DeclareUnicodeCharacter{1D7D8}{\ensuremath{\mathbb{0}}}
+\DeclareUnicodeCharacter{1D7D9}{\ensuremath{\mathbb{1}}}
+\DeclareUnicodeCharacter{1D7DA}{\ensuremath{\mathbb{2}}}
+\DeclareUnicodeCharacter{1D7DB}{\ensuremath{\mathbb{3}}}
+\DeclareUnicodeCharacter{1D7DC}{\ensuremath{\mathbb{4}}}
+\DeclareUnicodeCharacter{1D7DD}{\ensuremath{\mathbb{5}}}
+\DeclareUnicodeCharacter{1D7DE}{\ensuremath{\mathbb{6}}}
+\DeclareUnicodeCharacter{1D7DF}{\ensuremath{\mathbb{7}}}
+\DeclareUnicodeCharacter{1D7E0}{\ensuremath{\mathbb{8}}}
+\DeclareUnicodeCharacter{1D7E1}{\ensuremath{\mathbb{9}}}
+\DeclareUnicodeCharacter{1D9C}{\ensuremath{^c}}
+\DeclareUnicodeCharacter{1DA0}{\ensuremath{^f}}
+\DeclareUnicodeCharacter{1DBB}{\ensuremath{^z}}
+\DeclareUnicodeCharacter{1F329}{\ensuremath{\lightning}}
+\DeclareUnicodeCharacter{2013}{--}
+\DeclareUnicodeCharacter{2014}{---}
+\DeclareUnicodeCharacter{2016}{\textbardbl}
+\DeclareUnicodeCharacter{2018}{\textquoteleft}
+\DeclareUnicodeCharacter{2019}{\textquoteright}
+\DeclareUnicodeCharacter{201A}{\quotesinglbase}
+\DeclareUnicodeCharacter{201C}{\textquotedblleft}
+\DeclareUnicodeCharacter{201D}{\textquotedblright}
+\DeclareUnicodeCharacter{201E}{\quotedblbase}
+\DeclareUnicodeCharacter{2020}{\ensuremath{\dagger}}
+\DeclareUnicodeCharacter{2021}{\ddag}
+\DeclareUnicodeCharacter{2022}{\ensuremath{\bullet}}
+\DeclareUnicodeCharacter{2023}{\ensuremath{\RHD}}
+\DeclareUnicodeCharacter{2026}{\ensuremath{\ldots}}
+\DeclareUnicodeCharacter{202F}{\,}
+\DeclareUnicodeCharacter{2030}{\textperthousand}
+\DeclareUnicodeCharacter{2031}{\textpertenthousand}
+\DeclareUnicodeCharacter{2032}{\ensuremath{\prime}}
+\DeclareUnicodeCharacter{2033}{\ensuremath{''}}
+\DeclareUnicodeCharacter{2034}{\ensuremath{'''}}
+\DeclareUnicodeCharacter{2035}{\ensuremath{\backprime}}
+\DeclareUnicodeCharacter{2038}{\ifmmode\widehat{}\else\textasciicircum\fi}
+\DeclareUnicodeCharacter{2039}{\guilsinglleft}
+\DeclareUnicodeCharacter{203A}{\guilsinglright}
+\DeclareUnicodeCharacter{203B}{\textreferencemark}
+\DeclareUnicodeCharacter{203C}{{!\kern -.5ex!}}
+\DeclareUnicodeCharacter{203D}{\textinterrobang}
+\DeclareUnicodeCharacter{203E}{\ensuremath{\overline{0}}}
+\DeclareUnicodeCharacter{2042}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{2045}{\textlquill}
+\DeclareUnicodeCharacter{2046}{\textrquill}
+\DeclareUnicodeCharacter{2047}{{?\kern -.5ex?}}
+\DeclareUnicodeCharacter{2048}{{?\kern -.5ex!}}
+\DeclareUnicodeCharacter{2049}{{!\kern -.5ex?}}
+\DeclareUnicodeCharacter{2052}{\textdiscount}
+\DeclareUnicodeCharacter{2062}{{}}
+\DeclareUnicodeCharacter{2070}{\ensuremath{^0}}
+\DeclareUnicodeCharacter{2071}{\ensuremath{^i}}
+\DeclareUnicodeCharacter{2074}{\ensuremath{^4}}
+\DeclareUnicodeCharacter{2075}{\ensuremath{^5}}
+\DeclareUnicodeCharacter{2076}{\ensuremath{^6}}
+\DeclareUnicodeCharacter{2077}{\ensuremath{^7}}
+\DeclareUnicodeCharacter{2078}{\ensuremath{^8}}
+\DeclareUnicodeCharacter{2079}{\ensuremath{^9}}
+\DeclareUnicodeCharacter{207A}{\ensuremath{^+}}
+\DeclareUnicodeCharacter{207B}{\ensuremath{^-}}
+\DeclareUnicodeCharacter{207C}{\ensuremath{^=}}
+\DeclareUnicodeCharacter{207D}{\ensuremath{^(}}
+\DeclareUnicodeCharacter{207E}{\ensuremath{^)}}
+\DeclareUnicodeCharacter{207F}{\ensuremath{^n}}
+\DeclareUnicodeCharacter{2080}{\ensuremath{_0}}
+\DeclareUnicodeCharacter{2081}{\ensuremath{_1}}
+\DeclareUnicodeCharacter{2082}{\ensuremath{_2}}
+\DeclareUnicodeCharacter{2083}{\ensuremath{_3}}
+\DeclareUnicodeCharacter{2084}{\ensuremath{_4}}
+\DeclareUnicodeCharacter{2085}{\ensuremath{_5}}
+\DeclareUnicodeCharacter{2086}{\ensuremath{_6}}
+\DeclareUnicodeCharacter{2087}{\ensuremath{_7}}
+\DeclareUnicodeCharacter{2088}{\ensuremath{_8}}
+\DeclareUnicodeCharacter{2089}{\ensuremath{_9}}
+\DeclareUnicodeCharacter{208A}{\ensuremath{_+}}
+\DeclareUnicodeCharacter{208B}{\ensuremath{_-}}
+\DeclareUnicodeCharacter{208C}{\ensuremath{_=}}
+\DeclareUnicodeCharacter{208D}{\ensuremath{_(}}
+\DeclareUnicodeCharacter{208E}{\ensuremath{_)}}
+\DeclareUnicodeCharacter{2090}{\ensuremath{_a}}
+\DeclareUnicodeCharacter{2091}{\ensuremath{_e}}
+\DeclareUnicodeCharacter{2092}{\ensuremath{_o}}
+\DeclareUnicodeCharacter{2093}{\ensuremath{_x}}
+\DeclareUnicodeCharacter{2095}{\ensuremath{_h}}
+\DeclareUnicodeCharacter{2096}{\ensuremath{_k}}
+\DeclareUnicodeCharacter{2097}{\ensuremath{_l}}
+\DeclareUnicodeCharacter{2098}{\ensuremath{_m}}
+\DeclareUnicodeCharacter{2099}{\ensuremath{_n}}
+\DeclareUnicodeCharacter{209A}{\ensuremath{_p}}
+\DeclareUnicodeCharacter{209B}{\ensuremath{_s}}
+\DeclareUnicodeCharacter{209C}{\ensuremath{_t}}
+\DeclareUnicodeCharacter{20AC}{\euro}
+\DeclareUnicodeCharacter{2102}{\ensuremath{\mathbb{C}}}
+\DeclareUnicodeCharacter{2107}{\ensuremath{\mathbb{E}}}
+\DeclareUnicodeCharacter{210A}{\ensuremath{\mathcal g}}
+\DeclareUnicodeCharacter{210B}{\ensuremath{\mathcal H}}
+\DeclareUnicodeCharacter{210C}{\ensuremath{\mathfrak H}}
+\DeclareUnicodeCharacter{210D}{\ensuremath{\mathbb{H}}}
+\DeclareUnicodeCharacter{210E}{\ensuremath{\mathit{h}}}
+\DeclareUnicodeCharacter{210F}{\ensuremath{\hbar}}
+\DeclareUnicodeCharacter{2110}{\ensuremath{\mathcal I}}
+\DeclareUnicodeCharacter{2111}{\ensuremath{\Im}}
+\DeclareUnicodeCharacter{2112}{\ensuremath{\mathcal L}}
+\DeclareUnicodeCharacter{2113}{\ensuremath{\ell}}
+\DeclareUnicodeCharacter{2115}{\ensuremath{\mathbb{N}}}
+\DeclareUnicodeCharacter{2118}{\ensuremath{\wp}}
+\DeclareUnicodeCharacter{2119}{\ensuremath{\mathbb{P}}}
+\DeclareUnicodeCharacter{211A}{\ensuremath{\mathbb{Q}}}
+\DeclareUnicodeCharacter{211B}{\ensuremath{\mathscr{R}}}
+\DeclareUnicodeCharacter{211C}{\ensuremath{\Re}}
+\DeclareUnicodeCharacter{211D}{\ensuremath{\mathbb{R}}}
+\DeclareUnicodeCharacter{2122}{\texttrademark}
+\DeclareUnicodeCharacter{2124}{\ensuremath{\mathbb{Z}}}
+\DeclareUnicodeCharacter{2126}{\ensuremath{\Omega}}
+\DeclareUnicodeCharacter{2127}{\ensuremath{\mho}}
+\DeclareUnicodeCharacter{2128}{\ensuremath{\mathfrak Z}}
+\DeclareUnicodeCharacter{212A}{\ensuremath{\mathrm K}}
+\DeclareUnicodeCharacter{212B}{\ensuremath{\mathring{\mathrm A}}}
+\DeclareUnicodeCharacter{212C}{\ensuremath{\mathcal B}}
+\DeclareUnicodeCharacter{212D}{\ensuremath{\mathfrak C}}
+\DeclareUnicodeCharacter{212E}{\textestimated}
+\DeclareUnicodeCharacter{212F}{\ensuremath{\mathcal e}}
+\DeclareUnicodeCharacter{2130}{\ensuremath{\mathcal E}}
+\DeclareUnicodeCharacter{2131}{\ensuremath{\mathcal F}}
+\DeclareUnicodeCharacter{2132}{\ensuremath{\Finv}}
+\DeclareUnicodeCharacter{2133}{\ensuremath{\mathscr{M}}}
+\DeclareUnicodeCharacter{2135}{\ensuremath{\aleph}}
+\DeclareUnicodeCharacter{2136}{\ensuremath{\beth}}
+\DeclareUnicodeCharacter{2137}{\ensuremath{\gimel}}
+\DeclareUnicodeCharacter{2138}{\ensuremath{\daleth}}
+\DeclareUnicodeCharacter{213C}{\ensuremath{\mathbb{\pi}}}
+\DeclareUnicodeCharacter{213D}{\ensuremath{\mathbb{\gamma}}}
+\DeclareUnicodeCharacter{213E}{\ensuremath{\mathbb{\Pi}}}
+\DeclareUnicodeCharacter{213F}{\ensuremath{\mathbb{\Gamma}}}
+\DeclareUnicodeCharacter{2140}{\ensuremath{\mathbb{\Sigma}}}
+\DeclareUnicodeCharacter{2141}{\ensuremath{\Game}}
+\DeclareUnicodeCharacter{2144}{\ensuremath{Y}}
+\DeclareUnicodeCharacter{2146}{\ensuremath{\mathrm{d}}}
+\DeclareUnicodeCharacter{2148}{\ensuremath{\imath}}
+\DeclareUnicodeCharacter{2149}{\ensuremath{\jmath}}
+\DeclareUnicodeCharacter{214B}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{2153}{\ensuremath{\frac{1}{3}}}
+\DeclareUnicodeCharacter{2154}{\ensuremath{\frac{2}{3}}}
+\DeclareUnicodeCharacter{2155}{\ensuremath{\frac{1}{5}}}
+\DeclareUnicodeCharacter{2156}{\ensuremath{\frac{2}{5}}}
+\DeclareUnicodeCharacter{2157}{\ensuremath{\frac{3}{5}}}
+\DeclareUnicodeCharacter{2158}{\ensuremath{\frac{4}{5}}}
+\DeclareUnicodeCharacter{2159}{\ensuremath{\frac{1}{6}}}
+\DeclareUnicodeCharacter{215A}{\ensuremath{\frac{5}{6}}}
+\DeclareUnicodeCharacter{215B}{\ensuremath{\frac{1}{8}}}
+\DeclareUnicodeCharacter{215D}{\ensuremath{\frac{5}{8}}}
+\DeclareUnicodeCharacter{215E}{\ensuremath{\frac{7}{8}}}
+\DeclareUnicodeCharacter{2190}{\ensuremath{\leftarrow}}
+\DeclareUnicodeCharacter{2191}{\ensuremath{\uparrow}}
+\DeclareUnicodeCharacter{2192}{\ensuremath{\rightarrow}}
+\DeclareUnicodeCharacter{2193}{\ensuremath{\downarrow}}
+\DeclareUnicodeCharacter{2194}{\ensuremath{\leftrightarrow}}
+\DeclareUnicodeCharacter{2195}{\ensuremath{\updownarrow}}
+\DeclareUnicodeCharacter{2196}{\ensuremath{\nwarrow}}
+\DeclareUnicodeCharacter{2197}{\ensuremath{\nearrow}}
+\DeclareUnicodeCharacter{2198}{\ensuremath{\searrow}}
+\DeclareUnicodeCharacter{2199}{\ensuremath{\swarrow}}
+\DeclareUnicodeCharacter{219A}{\ensuremath{\nleftarrow}}
+\DeclareUnicodeCharacter{219B}{\ensuremath{\nrightarrow}}
+\DeclareUnicodeCharacter{219E}{\ensuremath{\twoheadleftarrow}}
+\DeclareUnicodeCharacter{21A0}{\ensuremath{\twoheadrightarrow}}
+\DeclareUnicodeCharacter{21A2}{\ensuremath{\leftarrowtail}}
+\DeclareUnicodeCharacter{21A3}{\ensuremath{\rightarrowtail}}
+\DeclareUnicodeCharacter{21A4}{\ensuremath{\COMMONUNICODE@mapsfrom}}
+\DeclareUnicodeCharacter{21A6}{\ensuremath{\mapsto}}
+\DeclareUnicodeCharacter{21A9}{\ensuremath{\hookleftarrow}}
+\DeclareUnicodeCharacter{21AA}{\ensuremath{\hookrightarrow}}
+\DeclareUnicodeCharacter{21AB}{\ensuremath{\looparrowleft}}
+\DeclareUnicodeCharacter{21AC}{\ensuremath{\looparrowright}}
+\DeclareUnicodeCharacter{21AD}{\ensuremath{\leftrightsquigarrow}}
+\DeclareUnicodeCharacter{21AE}{\ensuremath{\nleftrightarrow}}
+\DeclareUnicodeCharacter{21AF}{\ensuremath{\lightning}}
+\DeclareUnicodeCharacter{21B0}{\ensuremath{\Lsh}}
+\DeclareUnicodeCharacter{21B1}{\ensuremath{\Rsh}}
+\DeclareUnicodeCharacter{21B6}{\ensuremath{\curvearrowleft}}
+\DeclareUnicodeCharacter{21B7}{\ensuremath{\curvearrowright}}
+\DeclareUnicodeCharacter{21BA}{\ensuremath{\circlearrowleft}}
+\DeclareUnicodeCharacter{21BB}{\ensuremath{\circlearrowright}}
+\DeclareUnicodeCharacter{21BC}{\ensuremath{\leftharpoonup}}
+\DeclareUnicodeCharacter{21BD}{\ensuremath{\leftharpoondown}}
+\DeclareUnicodeCharacter{21BE}{\ensuremath{\upharpoonright}}
+\DeclareUnicodeCharacter{21BF}{\ensuremath{\upharpoonleft}}
+\DeclareUnicodeCharacter{21C0}{\ensuremath{\rightharpoonup}}
+\DeclareUnicodeCharacter{21C1}{\ensuremath{\rightharpoondown}}
+\DeclareUnicodeCharacter{21C2}{\ensuremath{\downharpoonright}}
+\DeclareUnicodeCharacter{21C3}{\ensuremath{\downharpoonleft}}
+\DeclareUnicodeCharacter{21C4}{\ensuremath{\rightleftarrows}}
+\DeclareUnicodeCharacter{21C5}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{21C6}{\ensuremath{\leftrightarrows}}
+\DeclareUnicodeCharacter{21C7}{\ensuremath{\leftleftarrows}}
+\DeclareUnicodeCharacter{21C8}{\ensuremath{\upuparrows}}
+\DeclareUnicodeCharacter{21C9}{\ensuremath{\rightrightarrows}}
+\DeclareUnicodeCharacter{21CA}{\ensuremath{\downdownarrows}}
+\DeclareUnicodeCharacter{21CB}{\ensuremath{\leftrightharpoons}}
+\DeclareUnicodeCharacter{21CC}{\ensuremath{\rightleftharpoons}}
+\DeclareUnicodeCharacter{21CD}{\ensuremath{\nLeftarrow}}
+\DeclareUnicodeCharacter{21CE}{\ensuremath{\nLeftrightarrow}}
+\DeclareUnicodeCharacter{21CF}{\ensuremath{\nRightarrow}}
+\DeclareUnicodeCharacter{21D0}{\ensuremath{\Leftarrow}}
+\DeclareUnicodeCharacter{21D1}{\ensuremath{\Uparrow}}
+\DeclareUnicodeCharacter{21D2}{\ensuremath{\Rightarrow}}
+\DeclareUnicodeCharacter{21D3}{\ensuremath{\Downarrow}}
+\DeclareUnicodeCharacter{21D4}{\ensuremath{\Leftrightarrow}}
+\DeclareUnicodeCharacter{21D5}{\ensuremath{\Updownarrow}}
+\DeclareUnicodeCharacter{21D6}{\ensuremath{\nwarrow}}
+\DeclareUnicodeCharacter{21D7}{\ensuremath{\nearrow}}
+\DeclareUnicodeCharacter{21D8}{\ensuremath{\searrow}}
+\DeclareUnicodeCharacter{21D9}{\ensuremath{\swarrow}}
+\DeclareUnicodeCharacter{21DA}{\ensuremath{\Lleftarrow}}
+\DeclareUnicodeCharacter{21DB}{\ensuremath{\Rrightarrow}}
+\DeclareUnicodeCharacter{21DC}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{21DD}{\ensuremath{\rightsquigarrow}}
+\DeclareUnicodeCharacter{21E0}{\ensuremath{\dashleftarrow}}
+\DeclareUnicodeCharacter{21E2}{\ensuremath{\dashrightarrow}}
+\DeclareUnicodeCharacter{21E4}{\ensuremath{\Leftarrow}}
+\DeclareUnicodeCharacter{21E5}{\ensuremath{\Rightarrow}}
+\DeclareUnicodeCharacter{21F0}{\ensuremath{\mapsto}}
+\DeclareUnicodeCharacter{21FD}{\ensuremath{\leftarrow}}
+\DeclareUnicodeCharacter{21FE}{\ensuremath{\rightarrow}}
+\DeclareUnicodeCharacter{21FF}{\ensuremath{\leftrightarrow}}
+\DeclareUnicodeCharacter{2200}{\ensuremath{\forall}}
+\DeclareUnicodeCharacter{2201}{\ensuremath{\complement}}
+\DeclareUnicodeCharacter{2202}{\ensuremath{\partial}}
+\DeclareUnicodeCharacter{2203}{\ensuremath{\exists}}
+\DeclareUnicodeCharacter{2204}{\ensuremath{\not\exists}}
+\DeclareUnicodeCharacter{2205}{\ensuremath{\varnothing}}
+\DeclareUnicodeCharacter{2207}{\ensuremath{\nabla}}
+\DeclareUnicodeCharacter{2208}{\ensuremath{\in}}
+\DeclareUnicodeCharacter{2209}{\ensuremath{\notin}}
+\DeclareUnicodeCharacter{220B}{\ensuremath{\ni}}
+\DeclareUnicodeCharacter{220C}{\ensuremath{!\ni}}
+\DeclareUnicodeCharacter{220D}{\ensuremath{\bullet}}
+\DeclareUnicodeCharacter{220E}{{\tiny \ensuremath{\blacksquare}}}
+\DeclareUnicodeCharacter{220F}{\ensuremath{\prod}}
+\DeclareUnicodeCharacter{2210}{\ensuremath{\coprod}}
+\DeclareUnicodeCharacter{2211}{\ensuremath{\sum}}
+\DeclareUnicodeCharacter{2212}{-}
+\DeclareUnicodeCharacter{2213}{\ensuremath{\mp}}
+\DeclareUnicodeCharacter{2214}{\ensuremath{\dotplus}}
+\DeclareUnicodeCharacter{2215}{\ensuremath{/}}
+\DeclareUnicodeCharacter{2216}{\ensuremath{\smallsetminus}}
+\DeclareUnicodeCharacter{2217}{\ensuremath{\star}}
+\DeclareUnicodeCharacter{2218}{\ensuremath{\circ}}
+\DeclareUnicodeCharacter{2219}{\ensuremath{\bullet}}
+\DeclareUnicodeCharacter{221A}{\ensuremath{\sqrt{}}}
+\DeclareUnicodeCharacter{221B}{\ensuremath{\sqrt[3]{}}}
+\DeclareUnicodeCharacter{221C}{\ensuremath{\sqrt[4]{}}}
+\DeclareUnicodeCharacter{221D}{\ensuremath{\propto}}
+\DeclareUnicodeCharacter{221E}{\ensuremath{\infty}}
+\DeclareUnicodeCharacter{2220}{\ensuremath{\angle}}
+\DeclareUnicodeCharacter{2221}{\ensuremath{\measuredangle}}
+\DeclareUnicodeCharacter{2222}{\ensuremath{\sphericalangle}}
+\DeclareUnicodeCharacter{2223}{\ensuremath{\mid}}
+\DeclareUnicodeCharacter{2224}{\ensuremath{\nmid}}
+\DeclareUnicodeCharacter{2225}{\ensuremath{\parallel}}
+\DeclareUnicodeCharacter{2226}{\ensuremath{\nparallel}}
+\DeclareUnicodeCharacter{2227}{\ensuremath{\wedge}}
+\DeclareUnicodeCharacter{2228}{\ensuremath{\vee}}
+\DeclareUnicodeCharacter{2229}{\ensuremath{\cap}}
+\DeclareUnicodeCharacter{222A}{\ensuremath{\cup}}
+\DeclareUnicodeCharacter{222B}{\ensuremath{\int}}
+\DeclareUnicodeCharacter{222C}{\ensuremath{\iint}}
+\DeclareUnicodeCharacter{222D}{\ensuremath{\iiint}}
+\DeclareUnicodeCharacter{222E}{\ensuremath{\oint}}
+\DeclareUnicodeCharacter{222F}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{2230}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{2232}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{2233}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{2234}{\ensuremath{\therefore}}
+\DeclareUnicodeCharacter{2235}{\ensuremath{\because}}
+\DeclareUnicodeCharacter{2236}{:}
+\DeclareUnicodeCharacter{2237}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{2238}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{2239}{\ensuremath{\eqcolon}}
+\DeclareUnicodeCharacter{223C}{\ensuremath{\sim}}
+\DeclareUnicodeCharacter{223D}{\ensuremath{\backsim}}
+\DeclareUnicodeCharacter{223F}{\AC}
+\DeclareUnicodeCharacter{2240}{\ensuremath{\wr}}
+\DeclareUnicodeCharacter{2241}{\ensuremath{\nsim}}
+\DeclareUnicodeCharacter{2243}{\ensuremath{\simeq}}
+\DeclareUnicodeCharacter{2244}{\ensuremath{\not\simeq}}
+\DeclareUnicodeCharacter{2245}{\ensuremath{\cong}}
+\DeclareUnicodeCharacter{2247}{\ensuremath{\ncong}}
+\DeclareUnicodeCharacter{2248}{\ensuremath{\approx}}
+\DeclareUnicodeCharacter{2249}{\ensuremath{\not\approx}}
+\DeclareUnicodeCharacter{224A}{\ensuremath{\approxeq}}
+\DeclareUnicodeCharacter{224D}{\ensuremath{\asymp}}
+\DeclareUnicodeCharacter{224E}{\ensuremath{\Bumpeq}}
+\DeclareUnicodeCharacter{224F}{\ensuremath{\bumpeq}}
+\DeclareUnicodeCharacter{2250}{\ensuremath{\doteq}}
+\DeclareUnicodeCharacter{2251}{\ensuremath{\doteqdot}}
+\DeclareUnicodeCharacter{2252}{\ensuremath{\fallingdotseq}}
+\DeclareUnicodeCharacter{2253}{\ensuremath{\risingdotseq}}
+\DeclareUnicodeCharacter{2254}{\ensuremath{\coloneqq}}
+\DeclareUnicodeCharacter{2255}{\ensuremath{\eqqcolon}}
+\DeclareUnicodeCharacter{2256}{\ensuremath{\eqcirc}}
+\DeclareUnicodeCharacter{2257}{\ensuremath{\circeq}}
+\DeclareUnicodeCharacter{2258}{\ensuremath{\stackrel{\frown}{=}}}
+\DeclareUnicodeCharacter{2259}{\ensuremath{\stackrel{\wedge}{=}}}
+\DeclareUnicodeCharacter{225A}{\ensuremath{\stackrel{\vee}{=}}}
+\DeclareUnicodeCharacter{225B}{\ensuremath{\stackrel{\star}{=}}}
+\DeclareUnicodeCharacter{225C}{\ensuremath{\triangleq}}
+\DeclareUnicodeCharacter{225D}{\ensuremath{\stackrel{\text{\tiny def}}{=}}}
+\DeclareUnicodeCharacter{225F}{\ensuremath{\stackrel{\text{\tiny ?}}{=}}}
+\DeclareUnicodeCharacter{2260}{\ensuremath{\ne}}
+\DeclareUnicodeCharacter{2261}{\ensuremath{\equiv}}
+\DeclareUnicodeCharacter{2262}{\ensuremath{\not\equiv}}
+\DeclareUnicodeCharacter{2263}{\ensuremath{\stackrel{=}{=}}}
+\DeclareUnicodeCharacter{2264}{\ensuremath{\le}}
+\DeclareUnicodeCharacter{2265}{\ensuremath{\ge}}
+\DeclareUnicodeCharacter{2266}{\ensuremath{\leqq}}
+\DeclareUnicodeCharacter{2267}{\ensuremath{\geqq}}
+\DeclareUnicodeCharacter{2268}{\ensuremath{\lneqq}}
+\DeclareUnicodeCharacter{2269}{\ensuremath{\gneqq}}
+\DeclareUnicodeCharacter{226A}{\ensuremath{\ll}}
+\DeclareUnicodeCharacter{226B}{\ensuremath{\gg}}
+\DeclareUnicodeCharacter{226C}{\ensuremath{\between}}
+\DeclareUnicodeCharacter{226D}{\ensuremath{\not\asymp}}
+\DeclareUnicodeCharacter{226E}{\ensuremath{\nless}}
+\DeclareUnicodeCharacter{226F}{\ensuremath{\ngtr}}
+\DeclareUnicodeCharacter{2270}{\ensuremath{\nleq}}
+\DeclareUnicodeCharacter{2271}{\ensuremath{\ngeq}}
+\DeclareUnicodeCharacter{2272}{\ensuremath{\lesssim}}
+\DeclareUnicodeCharacter{2273}{\ensuremath{\gtrsim}}
+\DeclareUnicodeCharacter{2274}{\ensuremath{\not\lesssim}}
+\DeclareUnicodeCharacter{2275}{\ensuremath{\not\gtrsim}}
+\DeclareUnicodeCharacter{2276}{\ensuremath{\lessgtr}}
+\DeclareUnicodeCharacter{2277}{\ensuremath{\gtrless}}
+\DeclareUnicodeCharacter{2278}{\ensuremath{\not\lessgtr}}
+\DeclareUnicodeCharacter{2279}{\ensuremath{\not\gtrless}}
+\DeclareUnicodeCharacter{227A}{\ensuremath{\prec}}
+\DeclareUnicodeCharacter{227B}{\ensuremath{\succ}}
+\DeclareUnicodeCharacter{227C}{\ensuremath{\preccurlyeq}}
+\DeclareUnicodeCharacter{227D}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{227E}{\ensuremath{\precsim}}
+\DeclareUnicodeCharacter{227F}{\ensuremath{\succsim}}
+\DeclareUnicodeCharacter{2280}{\ensuremath{\nprec}}
+\DeclareUnicodeCharacter{2281}{\ensuremath{\nsucc}}
+\DeclareUnicodeCharacter{2282}{\ensuremath{\subset}}
+\DeclareUnicodeCharacter{2283}{\ensuremath{\supset}}
+\DeclareUnicodeCharacter{2284}{\ensuremath{\not\subset}}
+\DeclareUnicodeCharacter{2285}{\ensuremath{\not\supset}}
+\DeclareUnicodeCharacter{2286}{\ensuremath{\subseteq}}
+\DeclareUnicodeCharacter{2287}{\ensuremath{\supseteq}}
+\DeclareUnicodeCharacter{2288}{\ensuremath{\nsubseteq}}
+\DeclareUnicodeCharacter{2289}{\ensuremath{\nsupseteq}}
+\DeclareUnicodeCharacter{228A}{\ensuremath{\subsetneq}}
+\DeclareUnicodeCharacter{228B}{\ensuremath{\supsetneq}}
+\DeclareUnicodeCharacter{228E}{\ensuremath{\uplus}}
+\DeclareUnicodeCharacter{228F}{\ensuremath{\sqsubset}}
+\DeclareUnicodeCharacter{2290}{\ensuremath{\sqsupset}}
+\DeclareUnicodeCharacter{2291}{\ensuremath{\sqsubseteq}}
+\DeclareUnicodeCharacter{2292}{\ensuremath{\sqsupseteq}}
+\DeclareUnicodeCharacter{2293}{\ensuremath{\sqcap}}
+\DeclareUnicodeCharacter{2294}{\ensuremath{\sqcup}}
+\DeclareUnicodeCharacter{2295}{\ensuremath{\oplus}}
+\DeclareUnicodeCharacter{2296}{\ensuremath{\ominus}}
+\DeclareUnicodeCharacter{2297}{\ensuremath{\otimes}}
+\DeclareUnicodeCharacter{2298}{\ensuremath{\oslash}}
+\DeclareUnicodeCharacter{2299}{\ensuremath{\odot}}
+\DeclareUnicodeCharacter{229A}{\ensuremath{\circledcirc}}
+\DeclareUnicodeCharacter{229B}{\ensuremath{\circledast}}
+\DeclareUnicodeCharacter{229D}{\ensuremath{\circleddash}}
+\DeclareUnicodeCharacter{229E}{\ensuremath{\boxplus}}
+\DeclareUnicodeCharacter{229F}{\ensuremath{\boxminus}}
+\DeclareUnicodeCharacter{22A0}{\ensuremath{\boxtimes}}
+\DeclareUnicodeCharacter{22A1}{\ensuremath{\boxdot}}
+\DeclareUnicodeCharacter{22A2}{\ensuremath{\vdash}}
+\DeclareUnicodeCharacter{22A3}{\ensuremath{\dashv}}
+\DeclareUnicodeCharacter{22A4}{\ensuremath{\top}}
+\DeclareUnicodeCharacter{22A5}{\ensuremath{\bot}}
+\DeclareUnicodeCharacter{22A6}{\ensuremath{\vdash}}
+\DeclareUnicodeCharacter{22A7}{\ensuremath{\models}}
+\DeclareUnicodeCharacter{22A9}{\ensuremath{\Vdash}}
+\DeclareUnicodeCharacter{22AA}{\ensuremath{\Vvdash}}
+\DeclareUnicodeCharacter{22AB}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{22AC}{\ensuremath{\not\vdash}}
+\DeclareUnicodeCharacter{22AD}{\ensuremath{\not\vDash}}
+\DeclareUnicodeCharacter{22AE}{\ensuremath{\not\Vdash}}
+\DeclareUnicodeCharacter{22AF}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{22B2}{\ensuremath{\triangleleft}}
+\DeclareUnicodeCharacter{22B3}{\ensuremath{\triangleright}}
+\DeclareUnicodeCharacter{22B4}{\ensuremath{\unlhd}}
+\DeclareUnicodeCharacter{22B5}{\ensuremath{\unrhd}}
+\DeclareUnicodeCharacter{22B8}{\ensuremath{\multimap}}
+\DeclareUnicodeCharacter{22BA}{\ensuremath{\intercal}}
+\DeclareUnicodeCharacter{22BB}{\ensuremath{\veebar}}
+\DeclareUnicodeCharacter{22BC}{\ensuremath{\barwedge}}
+\DeclareUnicodeCharacter{22C0}{\ensuremath{\bigwedge}}
+\DeclareUnicodeCharacter{22C1}{\ensuremath{\bigvee}}
+\DeclareUnicodeCharacter{22C2}{\ensuremath{\bigcap}}
+\DeclareUnicodeCharacter{22C3}{\ensuremath{\bigcup}}
+\DeclareUnicodeCharacter{22C4}{\ensuremath{\diamond}}
+\DeclareUnicodeCharacter{22C5}{\ensuremath{\cdot}}
+\DeclareUnicodeCharacter{22C6}{\ensuremath{\star}}
+\DeclareUnicodeCharacter{22C7}{\ensuremath{\divideontimes}}
+\DeclareUnicodeCharacter{22C8}{\ensuremath{\bowtie}}
+\DeclareUnicodeCharacter{22C9}{\ensuremath{\ltimes}}
+\DeclareUnicodeCharacter{22CA}{\ensuremath{\rtimes}}
+\DeclareUnicodeCharacter{22CB}{\ensuremath{\leftthreetimes}}
+\DeclareUnicodeCharacter{22CC}{\ensuremath{\rightthreetimes}}
+\DeclareUnicodeCharacter{22CD}{\ensuremath{\backsimeq}}
+\DeclareUnicodeCharacter{22CE}{\ensuremath{\curlyvee}}
+\DeclareUnicodeCharacter{22CF}{\ensuremath{\curlywedge}}
+\DeclareUnicodeCharacter{22D0}{\ensuremath{\Subset}}
+\DeclareUnicodeCharacter{22D1}{\ensuremath{\Supset}}
+\DeclareUnicodeCharacter{22D2}{\ensuremath{\Cap}}
+\DeclareUnicodeCharacter{22D3}{\ensuremath{\Cup}}
+\DeclareUnicodeCharacter{22D4}{\ensuremath{\pitchfork}}
+\DeclareUnicodeCharacter{22D6}{\ensuremath{\lessdot}}
+\DeclareUnicodeCharacter{22D7}{\ensuremath{\gtrdot}}
+\DeclareUnicodeCharacter{22D8}{\ensuremath{\lll}}
+\DeclareUnicodeCharacter{22D9}{\ensuremath{\ggg}}
+\DeclareUnicodeCharacter{22DA}{\ensuremath{\lesseqgtr}}
+\DeclareUnicodeCharacter{22DB}{\ensuremath{\gtreqless}}
+\DeclareUnicodeCharacter{22DE}{\ensuremath{\curlyeqprec}}
+\DeclareUnicodeCharacter{22DF}{\ensuremath{\curlyeqsucc}}
+\DeclareUnicodeCharacter{22E0}{\ensuremath{\not\preceq}}
+\DeclareUnicodeCharacter{22E1}{\ensuremath{\not\succeq}}
+\DeclareUnicodeCharacter{22E2}{\ensuremath{\not\sqsubseteq}}
+\DeclareUnicodeCharacter{22E3}{\ensuremath{\not\sqsupseteq}}
+\DeclareUnicodeCharacter{22E4}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{22E5}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{22E6}{\ensuremath{\lnsim}}
+\DeclareUnicodeCharacter{22E7}{\ensuremath{\gnsim}}
+\DeclareUnicodeCharacter{22E8}{\ensuremath{\precnsim}}
+\DeclareUnicodeCharacter{22E9}{\ensuremath{\succnsim}}
+\DeclareUnicodeCharacter{22EA}{\ensuremath{\not\triangleleft}}
+\DeclareUnicodeCharacter{22EB}{\ensuremath{\not\triangleright}}
+\DeclareUnicodeCharacter{22EC}{\ensuremath{\not\trianglelefteq}}
+\DeclareUnicodeCharacter{22ED}{\ensuremath{\not\trianglerighteq}}
+\DeclareUnicodeCharacter{22EE}{\ensuremath{\vdots}}
+\DeclareUnicodeCharacter{22EF}{\ensuremath{\cdots}}
+\DeclareUnicodeCharacter{22F0}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{22F1}{\ensuremath{\ddots}}
+\DeclareUnicodeCharacter{2300}{\ensuremath{\diameter}}
+\DeclareUnicodeCharacter{2308}{\ensuremath{\lceil}}
+\DeclareUnicodeCharacter{2309}{\ensuremath{\rceil}}
+\DeclareUnicodeCharacter{230A}{\ensuremath{\lfloor}}
+\DeclareUnicodeCharacter{230B}{\ensuremath{\rfloor}}
+\DeclareUnicodeCharacter{2322}{\ensuremath{\frown}}
+\DeclareUnicodeCharacter{2323}{\ensuremath{\smile}}
+\DeclareUnicodeCharacter{2329}{\ensuremath{\langle}}
+\DeclareUnicodeCharacter{232A}{\ensuremath{\rangle}}
+\DeclareUnicodeCharacter{23CE}{\ensuremath{\hookleftarrow}}
+\DeclareUnicodeCharacter{2460}{\ensuremath{\text{1}}}
+\DeclareUnicodeCharacter{2461}{\ensuremath{\text{2}}}
+\DeclareUnicodeCharacter{2462}{\ensuremath{\text{3}}}
+\DeclareUnicodeCharacter{2463}{\ensuremath{\text{4}}}
+\DeclareUnicodeCharacter{2464}{\ensuremath{\text{5}}}
+\DeclareUnicodeCharacter{2465}{\ensuremath{\text{6}}}
+\DeclareUnicodeCharacter{2466}{\ensuremath{\text{7}}}
+\DeclareUnicodeCharacter{2467}{\ensuremath{\text{8}}}
+\DeclareUnicodeCharacter{2468}{\ensuremath{\text{9}}}
+\DeclareUnicodeCharacter{25A1}{\ensuremath{\square}}
+\DeclareUnicodeCharacter{25B3}{\ensuremath{\triangle}}
+\DeclareUnicodeCharacter{25C5}{\ensuremath{\triangleleft}}
+\DeclareUnicodeCharacter{2610}{\fbox{\ensuremath{\phantom{{\checkmark}}}}}
+\DeclareUnicodeCharacter{2611}{\fbox{\ensuremath{\checkmark}}}
+\DeclareUnicodeCharacter{2615}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{2621}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{2627}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{2639}{\ensuremath{\frownie}}
+\DeclareUnicodeCharacter{263A}{\ensuremath{\smiley}}
+\DeclareUnicodeCharacter{2660}{\ensuremath{\spadesuit}}
+\DeclareUnicodeCharacter{2661}{\ensuremath{\heartsuit}}
+\DeclareUnicodeCharacter{2662}{\ensuremath{\diamondsuit}}
+\DeclareUnicodeCharacter{2663}{\ensuremath{\clubsuit}}
+\DeclareUnicodeCharacter{266D}{\ensuremath{\flat}}
+\DeclareUnicodeCharacter{266E}{\ensuremath{\natural}}
+\DeclareUnicodeCharacter{266F}{\ensuremath{\sharp}}
+\DeclareUnicodeCharacter{26A0}{\ensuremath{\lower .25ex\hbox{\Large $\triangle$\hskip -1.25ex}!\;\,}}
+\DeclareUnicodeCharacter{2713}{\ensuremath{\checkmark}}
+\DeclareUnicodeCharacter{27C2}{\ensuremath{\perp}}
+\DeclareUnicodeCharacter{27E6}{\ensuremath{[}}
+\DeclareUnicodeCharacter{27E7}{\ensuremath{]}}
+\DeclareUnicodeCharacter{27E8}{\ensuremath{\langle}}
+\DeclareUnicodeCharacter{27E9}{\ensuremath{\rangle}}
+\DeclareUnicodeCharacter{27EA}{\ensuremath{\COMMONUNICODE@llangle}}
+\DeclareUnicodeCharacter{27EB}{\ensuremath{\COMMONUNICODE@rrangle}}
+\DeclareUnicodeCharacter{27F5}{\ensuremath{\longleftarrow}}
+\DeclareUnicodeCharacter{27F6}{\ensuremath{\longrightarrow}}
+\DeclareUnicodeCharacter{2983}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{2984}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{2985}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{2986}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{2987}{\ensuremath{(}}
+\DeclareUnicodeCharacter{2988}{\ensuremath{)}}
+\DeclareUnicodeCharacter{29F5}{\ensuremath{\setminus}}
+\DeclareUnicodeCharacter{2A00}{\ensuremath{\bigodot}}
+\DeclareUnicodeCharacter{2A01}{\ensuremath{\bigoplus}}
+\DeclareUnicodeCharacter{2A02}{\ensuremath{\bigotimes}}
+\DeclareUnicodeCharacter{2A05}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{2A06}{\ensuremath{\bigsqcup}}
+\DeclareUnicodeCharacter{2A0C}{\ensuremath{\iiiint}}
+\DeclareUnicodeCharacter{2A1D}{\ensuremath{\Join}}
+\DeclareUnicodeCharacter{2A3F}{\ensuremath{\amalg}}
+\DeclareUnicodeCharacter{2A7D}{\ensuremath{\leqslant}}
+\DeclareUnicodeCharacter{2A7E}{\ensuremath{\geqslant}}
+\DeclareUnicodeCharacter{2AA8}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{2AA9}{\COMMONUNICODE@LOCALunknownchar}
+\DeclareUnicodeCharacter{2AAF}{\ensuremath{\preceq}}
+\DeclareUnicodeCharacter{2AB0}{\ensuremath{\succeq}}
+\DeclareUnicodeCharacter{2C7C}{\ensuremath{_j}}
+\DeclareUnicodeCharacter{2E18}{\textinterrobangdown}
+\DeclareUnicodeCharacter{301A}{\ensuremath{[}}
+\DeclareUnicodeCharacter{301B}{\ensuremath{]}}
+\DeclareUnicodeCharacter{33D1}{\ensuremath{\ln}}
+\DeclareUnicodeCharacter{33D2}{\ensuremath{\log}}
+\DeclareUnicodeCharacter{D7B0}{\COMMONUNICODE@LOCALunknownchar}
+\fi
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/minimalist/minimalist-classical.sty b/macros/latex/contrib/minimalist/minimalist-classical.sty
index 11b9b94ad3..8da62f16f6 100644
--- a/macros/latex/contrib/minimalist/minimalist-classical.sty
+++ b/macros/latex/contrib/minimalist/minimalist-classical.sty
@@ -19,7 +19,7 @@
\RequirePackage{l3keys2e}
\ProvidesExplPackage
{minimalist-classical}
- {2022/03/28} {}
+ {2022/04/03} {}
{The classical style of minimalist}
\@ifpackageloaded { minimalist } {}
@@ -249,24 +249,6 @@
}
%%================================
-%% Line numbers
-%%================================
-\PassOptionsToPackage { pagewise,mathlines } { lineno }
-\RequirePackage { linenoamsmath }
-\renewcommand{\linenumberfont}{\ttfamily\color{main-text!7!paper}\footnotesize}
-\setlength{\linenumbersep}{1em}
-
-\newif\ifLNturnsON
-\def\LocallyStopLineNumbers{\LNturnsONfalse
- \ifLineNumbers\LNturnsONtrue\fi\nolinenumbers}
-\def\ResumeLineNumbers{\ifLNturnsON\linenumbers\fi}
-
-\hook_gput_code:nnn { cmd/tableofcontents/before } { minimalist } { \LocallyStopLineNumbers }
-\hook_gput_code:nnn { cmd/tableofcontents/after } { minimalist } { \ResumeLineNumbers }
-\hook_gput_code:nnn { env/bibliography/before } { minimalist } { \LocallyStopLineNumbers }
-\hook_gput_code:nnn { env/bibliography/after } { minimalist } { \ResumeLineNumbers }
-
-%%================================
%% Title format
%%================================
\RequirePackage [ explicit, newparttoc ] { titlesec }
@@ -274,7 +256,7 @@
\RequirePackage { ulem }
\cs_generate_variant:Nn \seq_set_split:Nnn { Nnx }
-\cs_new:Nn \minimalist_apply_title_numbering_style:N
+\cs_new:Nn \minimalist_apply_title_numbering_style:n
{
#1
}
@@ -459,7 +441,7 @@
\titlecontents{part}
[0em]
{\addvspace{1.5pc}\filcenter\normalfont}
- { \minimalist_apply_title_numbering_style:N { \thecontentslabel } \nopagebreak\\\nopagebreak\uppercase}
+ { \minimalist_apply_title_numbering_style:n { \thecontentslabel } \nopagebreak\\\nopagebreak\uppercase}
{}
{} % without page number
[\addvspace{.5pc}]
@@ -469,25 +451,25 @@
\titlecontents{chapter}
[2em] % i.e., 0em (part) + 2em
{\addvspace{.5pc}\normalfont}
- {\contentslabel[ \minimalist_apply_title_numbering_style:N { \thecontentslabel } ]{2em}}
+ {\contentslabel[ \minimalist_apply_title_numbering_style:n { \thecontentslabel } ]{2em}}
{\hspace*{-2em}}
{\titlerule*[1em]{\textcolor{main-text!15!paper}{.}}\contentspage}
\titlecontents{section}
[4em] % i.e., 2em (chapter) + 2em
{\normalfont}
- {\contentslabel[\textcolor{main-text!27!paper}{\small\g_minimalist_section_decoration_char_tl}\,\textcolor{main-text!90!paper}{ \minimalist_apply_title_numbering_style:N { \thecontentslabel } }\,\textcolor{main-text!27!paper}{\small\g_minimalist_section_decoration_char_tl}]{2em}}
+ {\contentslabel[\textcolor{main-text!27!paper}{\small\g_minimalist_section_decoration_char_tl}\,\textcolor{main-text!90!paper}{ \minimalist_apply_title_numbering_style:n { \thecontentslabel } }\,\textcolor{main-text!27!paper}{\small\g_minimalist_section_decoration_char_tl}]{2em}}
{\hspace*{-2em}}
{\titlerule*[1em]{\textcolor{main-text!15!paper}{.}}\contentspage}
\titlecontents{subsection}
[7em] % i.e., 4em (section) + 3em
{\normalfont}
- {\contentslabel[ \minimalist_apply_title_numbering_style:N { \thecontentslabel } ]{2.75em}}
+ {\contentslabel[ \minimalist_apply_title_numbering_style:n { \thecontentslabel } ]{2.75em}}
{\hspace*{-2.75em}}
{\titlerule*[1em]{\textcolor{main-text!15!paper}{.}}\contentspage}
\titlecontents{subsubsection}
[9.5em] % i.e., 7em (subsection) + 3.5em
{\normalfont}
- {\contentslabel[ \minimalist_apply_title_numbering_style:N { \thecontentslabel } ]{3.25em}}
+ {\contentslabel[ \minimalist_apply_title_numbering_style:n { \thecontentslabel } ]{3.25em}}
{\hspace*{-3.25em}}
{\titlerule*[1em]{\textcolor{main-text!15!paper}{.}}\contentspage}
}
@@ -495,19 +477,19 @@
\titlecontents{section}
[2em] % i.e., 0em (part) + 2em
{\normalfont}
- {\contentslabel[ \minimalist_apply_title_numbering_style:N { \thecontentslabel } ]{1.75em}}
+ {\contentslabel[ \minimalist_apply_title_numbering_style:n { \thecontentslabel } ]{1.75em}}
{\hspace*{-1.75em}}
{\titlerule*[1em]{\textcolor{main-text!15!paper}{.}}\contentspage}
\titlecontents{subsection}
[4.5em] % i.e., 2em (section) + 2.5em
{\normalfont}
- {\contentslabel[ \minimalist_apply_title_numbering_style:N { \thecontentslabel } ]{2.25em}}
+ {\contentslabel[ \minimalist_apply_title_numbering_style:n { \thecontentslabel } ]{2.25em}}
{\hspace*{-2.25em}}
{\titlerule*[1em]{\textcolor{main-text!15!paper}{.}}\contentspage}
\titlecontents{subsubsection}
[7.5em] % i.e., 4.5em (subsection) + 3em
{\normalfont}
- {\contentslabel[ \minimalist_apply_title_numbering_style:N { \thecontentslabel } ]{2.75em}}
+ {\contentslabel[ \minimalist_apply_title_numbering_style:n { \thecontentslabel } ]{2.75em}}
{\hspace*{-2.75em}}
{\titlerule*[1em]{\textcolor{main-text!15!paper}{.}}\contentspage}
}
@@ -549,8 +531,8 @@
, PT = Esta~página~foi~intencionalmente~deixada~em~branco
, BR = Esta~página~foi~intencionalmente~deixada~em~branco
, ES = Esta~página~se~ha~dejado~intencionadamente~en~blanco
- , CN = 此页为有意留为空白
- , TC = 此頁為有意留為空白
+ , CN = \ziju{0.2} 此页为有意留为空白
+ , TC = \ziju{0.2} 此頁為有意留為空白
, JP = このページは意図的に空白にしてあります
, RU = Эта~страница~намеренно~оставлена~пустой
}
@@ -562,12 +544,73 @@
\hook_gput_next_code:nn { shipout/background }
{
\put(0.5\paperwidth,-0.5\paperheight){
- \makebox[0pt]{\large\color{main-text!10!paper}\bl@nkpagetext}}
+ \makebox[0pt]{\large\color{main-text!10!paper}\g_minimalist_title_font_common_tl\bl@nkpagetext}}
}
\null\newpage\fi\fi
}
%%================================
+%% Index
+%%================================
+\RequirePackage { imakeidx }
+\makeindex[intoc]
+
+\RequirePackage { silence }
+\ExplSyntaxOff
+\WarningFilter{latex}{Writing or overwriting file}
+\begin{filecontents*}[overwrite]{\jobname.mst}
+delim_0 "\\IndexDotfill " % Filler between section heading and page number
+delim_1 "\\IndexDotfill " % Filler between subsection heading and page number
+headings_flag 1
+heading_prefix "\\IndexHeading{"
+heading_suffix "}\n"
+\end{filecontents*}
+\ExplSyntaxOn
+
+\projlib_langauge_define_multilingual_text:Nn \index_symbols_name
+ {
+ , EN = Symbols
+ , FR = Symboles
+ , DE = Symbole
+ , IT = Simboli
+ , PT = Símbolos
+ , BR = Símbolos
+ , ES = Símbolos
+ , CN = 符号
+ , TC = 符號
+ , JP = 記号
+ , RU = Символы
+ }
+
+\newcommand*{\IndexDotfill}
+ {
+ \nobreakspace\nobreakspace
+ \titlerule*[.67em]{\textcolor{main-text!15!paper}{.}}
+ \nobreakspace\nobreakspace
+ }
+\newcommand*{\IndexHeading}[1]
+ {
+ \str_if_eq:nnTF { #1 } { Symbols }
+ { \tl_set:Nn \l_tmpa_tl { \index_symbols_name } }
+ { \tl_set:Nn \l_tmpa_tl { #1 } }
+ \centerline{ \g_minimalist_title_font_common_tl \minimalist_apply_title_numbering_style:n { \l_tmpa_tl } }
+ \nopagebreak
+ \par
+ \vspace{.3\baselineskip}
+ }
+\renewcommand*{\indexspace}
+ {
+ \par
+ \vspace{2pc~plus~.5pc~minus~.3pc}
+ }
+
+\hook_gput_code:nnn { begindocument/before } { minimalist }
+ {
+ \hook_gput_code:nnn { cmd/printindex/before } { minimalist } { \LocallyStopLineNumbers }
+ \hook_gput_code:nnn { cmd/printindex/after } { minimalist } { \ResumeLineNumbers }
+ }
+
+%%================================
%% Draft mark
%%================================
\RequirePackage { projlib-draft }
@@ -621,12 +664,15 @@
{
\providecommand{\phantomsection}{}
\RequirePackage { url }
- \newcommand{\href}[2]{#2}
+ \providecommand{\href}[2]{#2}
+ \providecommand{\texorpdfstring}[2]{#1}
}
{
- \PassOptionsToPackage { hidelinks,linktoc=all } { hyperref }
- \RequirePackage { bookmark }
\RequirePackage { hyperref }
+ \RequirePackage { bookmark }
+ \hypersetup{ hidelinks, linktoc = all }
+ \bookmarksetup{ numbered }
+ \renewcommand\Hy@numberline[1]{#1.~}
}
\RequirePackage { projlib-theorem }
@@ -784,8 +830,8 @@
top = 0pt, bottom = 0pt,
left = 0pt, right = 0pt,
boxrule = 0pt, boxsep = 0pt,
- before~skip = 1em+\parskip,
- after~skip = 1.2em+\parskip,
+ before~skip = \parskip+\topsep+.25\baselineskip,
+ after~skip = \parskip+\topsep+.25\baselineskip,
breakable, lines~before~break=3,
]
}
@@ -803,14 +849,6 @@
}
}
-%%================================
-%% Index
-%%================================
-\hook_gput_code:nnn { begindocument/before } { minimalist }
- {
- \hook_gput_code:nnn { cmd/printindex/before } { minimalist } { \LocallyStopLineNumbers }
- \hook_gput_code:nnn { cmd/printindex/after } { minimalist } { \ResumeLineNumbers }
- }
%%================================
%% Title block style
diff --git a/macros/latex/contrib/minimalist/minimalist-doc.pdf b/macros/latex/contrib/minimalist/minimalist-doc.pdf
index 4a834618d8..88711cb5f5 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 5ff51c62cc..04283f464e 100644
--- a/macros/latex/contrib/minimalist/minimalist-doc.tex
+++ b/macros/latex/contrib/minimalist/minimalist-doc.tex
@@ -38,7 +38,7 @@
\providecommand{\meta}[1]{$\langle${\normalfont\itshape#1}$\rangle$}
\lstset{moretexcs=%
{linenumbers,nolinenumbers,part,parttext,chapter,section,subsection,subsubsection,frontmatter,mainmatter,backmatter,tableofcontents,href,
- color,NameTheorem,CreateTheorem,cref,dnf,UseLanguage,UseOtherLanguage,AddLanguageSetting,maketitle,address,curraddr,email,keywords,subjclass,thanks,dedicatory,TheDate,ProjLib,qedhere
+ color,NameTheorem,CreateTheorem,cref,DNF,UseLanguage,UseOtherLanguage,AddLanguageSetting,maketitle,address,curraddr,email,keywords,subjclass,thanks,dedicatory,TheDate,ProjLib,qedhere
}
}
\lstnewenvironment{code}%
@@ -95,7 +95,7 @@
%%================================
\begin{document}
-\def\PackageVersion{2022/03/28}
+\def\PackageVersion{2022/04/03}
\title{\minimalist{}, write your articles or books in a simple and clear way}
\author{Jinwen XU}
@@ -179,7 +179,7 @@ Let's first look at a complete example of \minimart{} (the same works for \einfa
\maketitle
\begin{abstract}
- Ceci est un résumé. \dnf<(*\meta{some hint}*)>
+ Ceci est un résumé. \DNF<(*\meta{some hint}*)>
\end{abstract}
\begin{keyword}
AAA, BBB, CCC, DDD, EEE
@@ -276,7 +276,7 @@ In addition, you may also write in the \AmS{} fashion, i.e.:
\medskip
\begin{code}
-\dnf<(*\meta{some hint}*)>
+\DNF<(*\meta{some hint}*)>
\end{code}
When you have some places that have not yet been finished yet, you can mark them with this command, which is especially useful during the draft stage.
@@ -381,7 +381,7 @@ In the next section, we will go through the options available.
\begin{tip}
During the draft stage, it is recommended to use the \verb|fast| option to speed up compilation. When in \verb|fast| mode, there will be a watermark ``DRAFT'' to indicate that you are currently in the draft mode.
\end{tip}
- \item \texttt{allowbf}
+ \item \texttt{use boldface}
\begin{itemize}
\item Allow boldface. When this option is enabled, the main title, the titles of all levels and the names of theorem-like environments will be bolded.
\end{itemize}
@@ -506,9 +506,9 @@ By default, when referenced, the name of the theorem matches the current context
\LevelTwoTitle{Draft mark}
-You can use \lstinline|\dnf| to mark the unfinished part. For example:
+You can use \lstinline|\DNF| to mark the unfinished part. For example:
\begin{itemize}
- \item \lstinline|\dnf| or \lstinline|\dnf<...>|. The effect is: \dnf~ or \dnf<...>. \\The prompt text changes according to the current language. For example, it will be displayed as \UseOtherLanguage{French}{\dnf} in French mode.
+ \item \lstinline|\DNF| or \lstinline|\DNF<...>|. The effect is: \DNF~ or \DNF<...>. \\The prompt text changes according to the current language. For example, it will be displayed as \UseOtherLanguage{French}{\DNF} in French mode.
\end{itemize}
\LevelTwoTitle{Title, abstract and keywords}
diff --git a/macros/latex/contrib/minimalist/minimalist-plain.sty b/macros/latex/contrib/minimalist/minimalist-plain.sty
index 3481c630dc..736c26aa2f 100644
--- a/macros/latex/contrib/minimalist/minimalist-plain.sty
+++ b/macros/latex/contrib/minimalist/minimalist-plain.sty
@@ -19,7 +19,7 @@
\RequirePackage{l3keys2e}
\ProvidesExplPackage
{minimalist-plain}
- {2022/03/28} {}
+ {2022/04/03} {}
{The plain style of minimalist}
\@ifpackageloaded { minimalist } {}
@@ -235,24 +235,6 @@
}
%%================================
-%% Line numbers
-%%================================
-\PassOptionsToPackage { pagewise,mathlines } { lineno }
-\RequirePackage { linenoamsmath }
-\renewcommand{\linenumberfont}{\ttfamily\color{main-text!7!paper}\footnotesize}
-\setlength{\linenumbersep}{1em}
-
-\newif\ifLNturnsON
-\def\LocallyStopLineNumbers{\LNturnsONfalse
- \ifLineNumbers\LNturnsONtrue\fi\nolinenumbers}
-\def\ResumeLineNumbers{\ifLNturnsON\linenumbers\fi}
-
-\hook_gput_code:nnn { cmd/tableofcontents/before } { minimalist } { \LocallyStopLineNumbers }
-\hook_gput_code:nnn { cmd/tableofcontents/after } { minimalist } { \ResumeLineNumbers }
-\hook_gput_code:nnn { env/bibliography/before } { minimalist } { \LocallyStopLineNumbers }
-\hook_gput_code:nnn { env/bibliography/after } { minimalist } { \ResumeLineNumbers }
-
-%%================================
%% Title format
%%================================
\RequirePackage [ explicit, newparttoc ] { titlesec }
@@ -260,11 +242,12 @@
\RequirePackage { ulem }
\cs_generate_variant:Nn \seq_set_split:Nnn { Nnx }
-\cs_new:Nn \minimalist_apply_title_numbering_style:N
+\cs_new:Nn \minimalist_apply_title_numbering_style:n
{
- \seq_set_split:Nnx \l_tmpa_seq { . } { #1 }
- \seq_set_map:NNn \l_tmpb_seq \l_tmpa_seq { \usefont{U}{zeur}{b}{n} ##1 }
- \textcolor{main-text!39!paper}{ \seq_use:Nn \l_tmpb_seq { $.$ } }
+ \tl_set:Nx \l_tmpa_tl { #1 }
+ \regex_replace_all:nnN { (\w) } { \c{textbf}{\1} } \l_tmpa_tl
+ \regex_replace_all:nnN { (\d) } { {\c{usefont}{U}{zeur}{b}{n}\1} } \l_tmpa_tl
+ \textcolor { main-text!39!paper } { \l_tmpa_tl }
}
\newcommand{\partstring}{\MakeUppercase{{\partname\nobreakspace\protect\thepart}}}
@@ -388,7 +371,7 @@
\titleformat{\section}
{\LocallyStopLineNumbers
\g_minimalist_title_font_section_tl\centering}
- {\raisebox{-.02\baselineskip}{\large \minimalist_apply_title_numbering_style:N { \thesection } }}{1em}
+ {\raisebox{-.02\baselineskip}{\large \minimalist_apply_title_numbering_style:n { \thesection } }}{1em}
{#1}
[\ResumeLineNumbers]
@@ -396,7 +379,7 @@
\titleformat{\subsection}
{\LocallyStopLineNumbers
\g_minimalist_title_font_subsection_tl}
- { \minimalist_apply_title_numbering_style:N { \thesubsection } }{.75em}
+ { \minimalist_apply_title_numbering_style:n { \thesubsection } }{.75em}
{#1}
[\ResumeLineNumbers]
@@ -405,14 +388,14 @@
{
\titleformat{\subsubsection}[runin]
{\g_minimalist_title_font_subsubsection_tl}
- { \minimalist_apply_title_numbering_style:N { \thesection } }{.5em}
+ { \minimalist_apply_title_numbering_style:n { \thesection } }{.5em}
{#1.}[\hspace*{.3em}]
}
{
\titleformat{\subsubsection}
{\LocallyStopLineNumbers
\g_minimalist_title_font_subsubsection_tl}
- { \minimalist_apply_title_numbering_style:N { \thesubsubsection } }{.5em}
+ { \minimalist_apply_title_numbering_style:n { \thesubsubsection } }{.5em}
{#1}
[\ResumeLineNumbers]
}
@@ -432,7 +415,7 @@
\titlecontents{part}
[0em]
{\addvspace{1.5pc}\filcenter\normalfont}
- { \minimalist_apply_title_numbering_style:N { \thecontentslabel } \nopagebreak\\\nopagebreak\uppercase}
+ { \minimalist_apply_title_numbering_style:n { \thecontentslabel } \nopagebreak\\\nopagebreak\uppercase}
{}
{} % without page number
[\addvspace{.5pc}]
@@ -442,25 +425,25 @@
\titlecontents{chapter}
[2em] % i.e., 0em (part) + 2em
{\addvspace{.5pc}\normalfont}
- {\contentslabel[ \minimalist_apply_title_numbering_style:N { \thecontentslabel } ]{2em}}
+ {\contentslabel[ \minimalist_apply_title_numbering_style:n { \thecontentslabel } ]{2em}}
{\hspace*{-2em}}
{\titlerule*[1em]{\textcolor{main-text!15!paper}{.}}\contentspage}
\titlecontents{section}
[4em] % i.e., 2em (chapter) + 2em
{\normalfont}
- {\contentslabel[ \minimalist_apply_title_numbering_style:N { \thecontentslabel } ]{2em}}
+ {\contentslabel[ \minimalist_apply_title_numbering_style:n { \thecontentslabel } ]{2em}}
{\hspace*{-2em}}
{\titlerule*[1em]{\textcolor{main-text!15!paper}{.}}\contentspage}
\titlecontents{subsection}
[7em] % i.e., 4em (section) + 3em
{\normalfont}
- {\contentslabel[ \minimalist_apply_title_numbering_style:N { \thecontentslabel } ]{2.75em}}
+ {\contentslabel[ \minimalist_apply_title_numbering_style:n { \thecontentslabel } ]{2.75em}}
{\hspace*{-2.75em}}
{\titlerule*[1em]{\textcolor{main-text!15!paper}{.}}\contentspage}
\titlecontents{subsubsection}
[9.5em] % i.e., 7em (subsection) + 3.5em
{\normalfont}
- {\contentslabel[ \minimalist_apply_title_numbering_style:N { \thecontentslabel } ]{3.25em}}
+ {\contentslabel[ \minimalist_apply_title_numbering_style:n { \thecontentslabel } ]{3.25em}}
{\hspace*{-3.25em}}
{\titlerule*[1em]{\textcolor{main-text!15!paper}{.}}\contentspage}
}
@@ -468,19 +451,19 @@
\titlecontents{section}
[2em] % i.e., 0em (part) + 2em
{\normalfont}
- {\contentslabel[ \minimalist_apply_title_numbering_style:N { \thecontentslabel } ]{1.75em}}
+ {\contentslabel[ \minimalist_apply_title_numbering_style:n { \thecontentslabel } ]{1.75em}}
{\hspace*{-1.75em}}
{\titlerule*[1em]{\textcolor{main-text!15!paper}{.}}\contentspage}
\titlecontents{subsection}
[4.5em] % i.e., 2em (section) + 2.5em
{\normalfont}
- {\contentslabel[ \minimalist_apply_title_numbering_style:N { \thecontentslabel } ]{2.25em}}
+ {\contentslabel[ \minimalist_apply_title_numbering_style:n { \thecontentslabel } ]{2.25em}}
{\hspace*{-2.25em}}
{\titlerule*[1em]{\textcolor{main-text!15!paper}{.}}\contentspage}
\titlecontents{subsubsection}
[7.5em] % i.e., 4.5em (subsection) + 3em
{\normalfont}
- {\contentslabel[ \minimalist_apply_title_numbering_style:N { \thecontentslabel } ]{2.75em}}
+ {\contentslabel[ \minimalist_apply_title_numbering_style:n { \thecontentslabel } ]{2.75em}}
{\hspace*{-2.75em}}
{\titlerule*[1em]{\textcolor{main-text!15!paper}{.}}\contentspage}
}
@@ -517,8 +500,8 @@
, PT = Esta~página~foi~intencionalmente~deixada~em~branco
, BR = Esta~página~foi~intencionalmente~deixada~em~branco
, ES = Esta~página~se~ha~dejado~intencionadamente~en~blanco
- , CN = 此页为有意留为空白
- , TC = 此頁為有意留為空白
+ , CN = \ziju{0.2} 此页为有意留为空白
+ , TC = \ziju{0.2} 此頁為有意留為空白
, JP = このページは意図的に空白にしてあります
, RU = Эта~страница~намеренно~оставлена~пустой
}
@@ -530,12 +513,73 @@
\hook_gput_next_code:nn { shipout/background }
{
\put(0.5\paperwidth,-0.5\paperheight){
- \makebox[0pt]{\large\color{main-text!10!paper}\bl@nkpagetext}}
+ \makebox[0pt]{\large\color{main-text!10!paper}\g_minimalist_title_font_common_tl\bl@nkpagetext}}
}
\null\newpage\fi\fi
}
%%================================
+%% Index
+%%================================
+\RequirePackage { imakeidx }
+\makeindex[intoc]
+
+\RequirePackage { silence }
+\ExplSyntaxOff
+\WarningFilter{latex}{Writing or overwriting file}
+\begin{filecontents*}[overwrite]{\jobname.mst}
+delim_0 "\\IndexDotfill " % Filler between section heading and page number
+delim_1 "\\IndexDotfill " % Filler between subsection heading and page number
+headings_flag 1
+heading_prefix "\\IndexHeading{"
+heading_suffix "}\n"
+\end{filecontents*}
+\ExplSyntaxOn
+
+\projlib_langauge_define_multilingual_text:Nn \index_symbols_name
+ {
+ , EN = Symbols
+ , FR = Symboles
+ , DE = Symbole
+ , IT = Simboli
+ , PT = Símbolos
+ , BR = Símbolos
+ , ES = Símbolos
+ , CN = 符号
+ , TC = 符號
+ , JP = 記号
+ , RU = Символы
+ }
+
+\newcommand*{\IndexDotfill}
+ {
+ \nobreakspace\nobreakspace
+ \titlerule*[.67em]{\textcolor{main-text!15!paper}{.}}
+ \nobreakspace\nobreakspace
+ }
+\newcommand*{\IndexHeading}[1]
+ {
+ \str_if_eq:nnTF { #1 } { Symbols }
+ { \tl_set:Nn \l_tmpa_tl { \index_symbols_name } }
+ { \tl_set:Nn \l_tmpa_tl { #1 } }
+ \centerline{ \g_minimalist_title_font_common_tl \minimalist_apply_title_numbering_style:n { \l_tmpa_tl } }
+ \nopagebreak
+ \par
+ \vspace{.3\baselineskip}
+ }
+\renewcommand*{\indexspace}
+ {
+ \par
+ \vspace{2pc~plus~.5pc~minus~.3pc}
+ }
+
+\hook_gput_code:nnn { begindocument/before } { minimalist }
+ {
+ \hook_gput_code:nnn { cmd/printindex/before } { minimalist } { \LocallyStopLineNumbers }
+ \hook_gput_code:nnn { cmd/printindex/after } { minimalist } { \ResumeLineNumbers }
+ }
+
+%%================================
%% Draft mark
%%================================
\RequirePackage { projlib-draft }
@@ -576,12 +620,15 @@
{
\providecommand{\phantomsection}{}
\RequirePackage { url }
- \newcommand{\href}[2]{#2}
+ \providecommand{\href}[2]{#2}
+ \providecommand{\texorpdfstring}[2]{#1}
}
{
- \PassOptionsToPackage { hidelinks,linktoc=all } { hyperref }
- \RequirePackage { bookmark }
\RequirePackage { hyperref }
+ \RequirePackage { bookmark }
+ \hypersetup{ hidelinks, linktoc = all }
+ \bookmarksetup{ numbered }
+ \renewcommand\Hy@numberline[1]{#1.~}
}
\RequirePackage { projlib-theorem }
@@ -739,8 +786,8 @@
top = 0pt, bottom = 0pt,
left = 0pt, right = 0pt,
boxrule = 0pt, boxsep = 0pt,
- before~skip = 1em+\parskip,
- after~skip = 1.2em+\parskip,
+ before~skip = \parskip+\topsep+.25\baselineskip,
+ after~skip = \parskip+\topsep+.25\baselineskip,
breakable, lines~before~break=3,
]
}
@@ -758,14 +805,7 @@
}
}
-%%================================
-%% Index
-%%================================
-\hook_gput_code:nnn { begindocument/before } { minimalist }
- {
- \hook_gput_code:nnn { cmd/printindex/before } { minimalist } { \LocallyStopLineNumbers }
- \hook_gput_code:nnn { cmd/printindex/after } { minimalist } { \ResumeLineNumbers }
- }
+\hook_gput_code:nnn { env/quote/begin } { minimalist } { \small }
%%================================
%% Title block style
diff --git a/macros/latex/contrib/minimalist/minimalist.sty b/macros/latex/contrib/minimalist/minimalist.sty
index 9a7a7fbd06..e8796eafdc 100644
--- a/macros/latex/contrib/minimalist/minimalist.sty
+++ b/macros/latex/contrib/minimalist/minimalist.sty
@@ -19,7 +19,7 @@
\RequirePackage{l3keys2e}
\ProvidesExplPackage
{minimalist}
- {2022/03/28} {}
+ {2022/04/03} {}
{A simple and clear style for articles and books}
\keys_define:nn { minimalist }
@@ -73,6 +73,24 @@
}
%%================================
+%% Line numbers
+%%================================
+\PassOptionsToPackage { pagewise,mathlines } { lineno }
+\RequirePackage { linenoamsmath }
+\renewcommand{\linenumberfont}{\ttfamily\color{main-text!7!paper}\footnotesize}
+\setlength{\linenumbersep}{1em}
+
+\newif\ifLNturnsON
+\def\LocallyStopLineNumbers{\LNturnsONfalse
+ \ifLineNumbers\LNturnsONtrue\fi\nolinenumbers}
+\def\ResumeLineNumbers{\ifLNturnsON\linenumbers\fi}
+
+\hook_gput_code:nnn { cmd/tableofcontents/before } { minimalist } { \LocallyStopLineNumbers }
+\hook_gput_code:nnn { cmd/tableofcontents/after } { minimalist } { \ResumeLineNumbers }
+\hook_gput_code:nnn { env/bibliography/before } { minimalist } { \LocallyStopLineNumbers }
+\hook_gput_code:nnn { env/bibliography/after } { minimalist } { \ResumeLineNumbers }
+
+%%================================
%% Paper configuration
%%================================
\RequirePackage { projlib-paper }
diff --git a/macros/latex/contrib/minimalist/minimart.cls b/macros/latex/contrib/minimalist/minimart.cls
index b9b2a86689..28af7fd1c3 100644
--- a/macros/latex/contrib/minimalist/minimart.cls
+++ b/macros/latex/contrib/minimalist/minimart.cls
@@ -19,7 +19,7 @@
\RequirePackage{l3keys2e}
\ProvidesExplClass
{minimart}
- {2022/03/28} {}
+ {2022/04/03} {}
{A simple and clear article style}
\tl_const:Nn \l__minimclass_base_class_tl { article }
@@ -140,6 +140,10 @@
\RequirePackage { minimalist }
+\raggedbottom
+\hfuzz=2pt
+\vfuzz=2pt
+
%%================================
%% Fonts
%%================================
diff --git a/macros/latex/contrib/minimalist/minimbook.cls b/macros/latex/contrib/minimalist/minimbook.cls
index 65c08a2fdc..c416799745 100644
--- a/macros/latex/contrib/minimalist/minimbook.cls
+++ b/macros/latex/contrib/minimalist/minimbook.cls
@@ -19,7 +19,7 @@
\RequirePackage{l3keys2e}
\ProvidesExplClass
{minimbook}
- {2022/03/28} {}
+ {2022/04/03} {}
{A simple and clear book style}
\tl_const:Nn \l__minimclass_base_class_tl { book }
@@ -140,6 +140,10 @@
\RequirePackage { minimalist }
+\raggedbottom
+\hfuzz=2pt
+\vfuzz=2pt
+
%%================================
%% Fonts
%%================================
diff --git a/macros/latex/contrib/projlib/ProjLib.dtx b/macros/latex/contrib/projlib/ProjLib.dtx
index dd0b2e393f..03de30a0d0 100644
--- a/macros/latex/contrib/projlib/ProjLib.dtx
+++ b/macros/latex/contrib/projlib/ProjLib.dtx
@@ -20,77 +20,77 @@
%<*ProjLib>
\ProvidesExplPackage
{ProjLib}
- {2022/03/28} {}
+ {2022/04/03} {}
{Collective interface of the ProjLib toolkit}
%</ProjLib>
%
%<*projlib-author>
\ProvidesExplPackage
{projlib-author}
- {2022/03/28} {}
+ {2022/04/03} {}
{Enhanced author information block}
%</projlib-author>
%
%<*projlib-datetime>
\ProvidesExplPackage
{projlib-datetime}
- {2022/03/28} {}
+ {2022/04/03} {}
{Convert numeric date-time string to natural language}
%</projlib-datetime>
%
%<*projlib-draft>
\ProvidesExplPackage
{projlib-draft}
- {2022/03/28} {}
+ {2022/04/03} {}
{Useful commands during draft stage}
%</projlib-draft>
%
%<*projlib-font>
\ProvidesExplPackage
{projlib-font}
- {2022/03/28} {}
+ {2022/04/03} {}
{Font selection and configuration}
%</projlib-font>
%
%<*projlib-language>
\ProvidesExplPackage
{projlib-language}
- {2022/03/28} {}
+ {2022/04/03} {}
{Multi-language configuration}
%</projlib-language>
%
%<*projlib-logo>
\ProvidesExplPackage
{projlib-logo}
- {2022/03/28} {}
+ {2022/04/03} {}
{The ProjLib logo}
%</projlib-logo>
%
%<*projlib-math>
\ProvidesExplPackage
{projlib-math}
- {2022/03/28} {}
+ {2022/04/03} {}
{Efficient math setup}
%</projlib-math>
%
%<*projlib-paper>
\ProvidesExplPackage
{projlib-paper}
- {2022/03/28} {}
+ {2022/04/03} {}
{Configuration of the paper style}
%</projlib-paper>
%
%<*projlib-theorem>
\ProvidesExplPackage
{projlib-theorem}
- {2022/03/28} {}
+ {2022/04/03} {}
{Configuration of theorem-like environments}
%</projlib-theorem>
%
%<*projlib-titlepage>
\ProvidesExplPackage
{projlib-titlepage}
- {2022/03/28} {}
+ {2022/04/03} {}
{Commands for rendering the title page}
%</projlib-titlepage>
@@ -499,10 +499,20 @@
, month-year .code:n = { \tl_set:Nn \g__projlib_datetime_input_format_tl { day-month-year } }
, day-month .code:n = { \tl_set:Nn \g__projlib_datetime_input_format_tl { day-month-year } }
, only-year-month .code:n = { \tl_set:Nn \l__projlib_datetime_output_format_tl { only-year-month } }
- , only-month-day .code:n = { \tl_set:Nn \l__projlib_datetime_output_format_tl { only-month-day } }
- , only-year .code:n = { \tl_set:Nn \l__projlib_datetime_output_format_tl { only-year } }
- , only-month .code:n = { \tl_set:Nn \l__projlib_datetime_output_format_tl { only-month } }
- , only-day .code:n = { \tl_set:Nn \l__projlib_datetime_output_format_tl { only-day } }
+ , only~year~month .meta:n = { only-year-month }
+ , only year month .meta:n = { only-year-month }
+ , only-month-day .code:n = { \tl_set:Nn \l__projlib_datetime_output_format_tl { only-month-day } }
+ , only~month~day .meta:n = { only-month-day }
+ , only month day .meta:n = { only-month-day }
+ , only-year .code:n = { \tl_set:Nn \l__projlib_datetime_output_format_tl { only-year } }
+ , only~year .meta:n = { only-year }
+ , only year .meta:n = { only-year }
+ , only-month .code:n = { \tl_set:Nn \l__projlib_datetime_output_format_tl { only-month } }
+ , only~month .meta:n = { only-month }
+ , only month .meta:n = { only-month }
+ , only-day .code:n = { \tl_set:Nn \l__projlib_datetime_output_format_tl { only-day } }
+ , only~day .meta:n = { only-day }
+ , only day .meta:n = { only-day }
, unknown .code:n = {}
}
@@ -2176,72 +2186,73 @@
}
-\projlib_langauge_define_multilingual_text:Nn \projlib_draft_dnf_text
+\projlib_langauge_define_multilingual_text:Nn \projlib_draft_DNF_text
{
- EN = To\ be\ finished ,
- FR = Pas\ encore\ fini ,
- DE = Nicht\ beendet ,
- IT = Per\ essere\ finito ,
- PT = Não\ terminou ,
- BR = Não\ terminou ,
- ES = Estar\ terminado ,
- CN = 这里尚未完成 ,
- TC = 這裡尚未完成 ,
- JP = 終わってない ,
- RU = Не\ закончен ,
+ EN = To ~ be ~ finished ,
+ FR = Pas ~ encore ~ fini ,
+ DE = Nicht ~ beendet ,
+ IT = Per ~ essere ~ finito ,
+ PT = Não ~ terminou ,
+ BR = Não ~ terminou ,
+ ES = Estar ~ terminado ,
+ CN = 这里尚未完成 ,
+ TC = 這裡尚未完成 ,
+ JP = 終わってない ,
+ RU = Не ~ закончен ,
}
-\projlib_langauge_define_multilingual_text:Nn \projlib_draft_dnf_report_text
+\projlib_langauge_define_multilingual_text:Nn \projlib_draft_DNF_report_text
{
- EN = { Below\ is\ a\ list\ of\ outstanding\ items,
- \ followed\ by\ the\ corresponding\ page\ numbers. } ,
- FR = { Voici\ la\ liste\ des\ éléments\ en\ suspens,
- \ suivie\ des\ numéros\ de\ page\ correspondants. } ,
- DE = { Unten\ ist\ eine\ Liste\ der\ ausstehenden\ Posten,
- \ gefolgt\ von\ den\ entsprechenden\ Seitenzahlen. } ,
- IT = { Qui\ sotto\ c'è\ una\ lista\ di\ voci\ in\ sospeso,
- \ seguita\ dai\ numeri\ di\ pagina\ corrispondenti. } ,
- PT = { Abaixo\ está\ uma\ lista\ de\ itens\ pendentes,
- \ seguida\ dos\ números\ de\ página\ correspondentes. } ,
- BR = { Abaixo\ está\ uma\ lista\ de\ itens\ pendentes,
- \ seguida\ dos\ números\ de\ página\ correspondentes. } ,
- ES = { Aquí está\ la\ lista\ de\ elementos\ pendientes,
- \ seguida\ de\ los\ números\ de\ página\ correspondientes. } ,
- CN = { 以下是未完成事项列表,括号内注明了对应的页码。 } ,
- TC = { 以下是未完成事項的列表,括號內註明了對應頁碼。 } ,
- JP = { 以下は、未解決の項目とそれに対応するページ番号の一覧です。 } ,
- RU = { Ниже\ приведен\ список\ невыполненных\ пунктов
- \ с\ соответствующими\ номерами\ страниц\ в\ скобках. } ,
+ EN = { Below ~ is ~ a ~ list ~ of ~ outstanding ~ items, ~
+ followed ~ by ~ the ~ corresponding ~ page ~ numbers. } ,
+ FR = { Voici ~ la ~ liste ~ des ~ éléments ~ en ~ suspens, ~
+ suivie ~ des ~ numéros ~ de ~ page ~ correspondants. } ,
+ DE = { Unten ~ ist ~ eine ~ Liste ~ der ~ ausstehenden ~ Posten, ~
+ gefolgt ~ von ~ den ~ entsprechenden ~ Seitenzahlen. } ,
+ IT = { Qui ~ sotto ~ c'è ~ una ~ lista ~ di ~ voci ~ in ~ sospeso, ~
+ seguita ~ dai ~ numeri ~ di ~ pagina ~ corrispondenti. } ,
+ PT = { Abaixo ~ está ~ uma ~ lista ~ de ~ itens ~ pendentes, ~
+ seguida ~ dos ~ números ~ de ~ página ~ correspondentes. } ,
+ BR = { Abaixo ~ está ~ uma ~ lista ~ de ~ itens ~ pendentes, ~
+ seguida ~ dos ~ números ~ de ~ página ~ correspondentes. } ,
+ ES = { Aquí está ~ la ~ lista ~ de ~ elementos ~ pendientes, ~
+ seguida ~ de ~ los ~ números ~ de ~ página ~ correspondientes. } ,
+ CN = { 以下是未完成事项列表,括号内注明了对应的页码。 } ,
+ TC = { 以下是未完成事項的列表,括號內註明了對應頁碼。 } ,
+ JP = { 以下は、未解決の項目とそれに対応するページ番号の一覧です。 } ,
+ RU = { Ниже ~ приведен ~ список ~ невыполненных ~ пунктов ~
+ с ~ соответствующими ~ номерами ~ страниц ~ в ~ скобках. } ,
}
-\tl_new:c { projlib_draft_dnf_font }
-\tl_gset:cn { projlib_draft_dnf_font } { \normalfont \ttfamily \bfseries \small }
+\tl_new:c { projlib_draft_DNF_font }
+\tl_gset:cn { projlib_draft_DNF_font } { \small \normalfont \bfseries \ttfamily \hyphenchar\font=`\-\spaceskip=.5em ~ plus ~ .5em\xspaceskip=.5em }
-\definecolor { projlib_draft_dnf_color } { RGB } { 21, 122, 20 }
+\definecolor { projlib_draft_DNF_color } { RGB } { 21, 122, 20 }
-\newcounter { projlib_draft_dnf_counter }
+\newcounter { projlib_draft_DNF_counter }
-\tl_new:N \g__projlib_draft_dnf_report_tl
+\tl_new:N \g__projlib_draft_DNF_report_tl
-\NewDocumentCommand \dnf { D<>{} }
+\NewDocumentCommand \DNF { D<>{} }
{
\noindent
\group_begin:
- \projlib_draft_dnf_font
- \stepcounter { projlib_draft_dnf_counter }
- \projlib_draft_plain_box:nn { projlib_draft_dnf_color }
+ \projlib_draft_DNF_font
+ \stepcounter { projlib_draft_DNF_counter }
+ \projlib_draft_plain_box:nn { projlib_draft_DNF_color }
{
- \projlib_draft_dnf_text
+ \projlib_draft_DNF_text
\nobreakspace
- \# \theprojlib_draft_dnf_counter
+ \# \theprojlib_draft_DNF_counter
\tl_if_blank:nF { #1 } { \, : ~ }
- #1
+ \tl_trim_spaces:n { #1 }
}
\group_end:
- \tl_gput_right:Nx \g__projlib_draft_dnf_report_tl
+ \tl_gput_right:Nx \g__projlib_draft_DNF_report_tl
{
+ \noindent
\# \,
- \int_value:w \theprojlib_draft_dnf_counter
+ \int_value:w \theprojlib_draft_DNF_counter
\c_space_tl \c_space_tl
$\langle$
\skip_horizontal:n { 0.1em }
@@ -2255,8 +2266,10 @@
\skip_horizontal:n { 0.1em }
$\rangle$
\nobreakspace
- \IfNoValueF { #1 } { : ~ }
- #1 \newline
+ \exp_not:n { \tl_if_blank:nF { #1 } { : ~ } }
+ \exp_not:n { \tl_trim_spaces:n { #1 } }
+ \par \skip_vertical:n { -\parskip }
+ \skip_vertical:n { .15\baselineskip }
}
}
@@ -2264,15 +2277,16 @@
{
\hook_gput_code:nnn { enddocument } { projlib-draft }
{
- \tl_if_blank:VF \g__projlib_draft_dnf_report_tl
+ \tl_if_blank:VF \g__projlib_draft_DNF_report_tl
{
\clearpage
- \pagestyle{empty}
+ \pagestyle { empty }
+ \color { projlib_draft_DNF_color }
\noindent
- \color { projlib_draft_dnf_color }
- \projlib_draft_dnf_font
- \projlib_draft_dnf_report_text \\[0.75\baselineskip]
- \g__projlib_draft_dnf_report_tl
+ \projlib_draft_DNF_font
+ \projlib_draft_DNF_report_text
+ \par \bigskip
+ \g__projlib_draft_DNF_report_tl
}
}
}
@@ -3018,7 +3032,7 @@
{ % #1 = command name (with backslash)
% #2 = key-value name configuration
\keyval_parse:nnn
- {}
+ { \use_none:n }
{ \__projlib_langauge_define_multilingual_text_do:nnn { \cs_to_str:N #1 } }
{ #2 }
\tl_gset:Nn #1
@@ -3041,6 +3055,14 @@
{
\projlib_langauge_define_multilingual_text:Nn #1 { #2 }
}
+
+
+\PassOptionsToPackage { autostyle } { csquotes }
+\RequirePackage { csquotes }
+
+\DeclareQuoteStyle { schinese } {“} {”} {‘} {’}
+\DeclareQuoteStyle { tchinese } {“} {”} {‘} {’}
+\DeclareQuoteStyle { japanese } {「} {」} {『} {』}
%</projlib-language>
%
%<*projlib-logo>
@@ -3379,6 +3401,42 @@
\projlib_math_define_shortcut:nnn { #1 } { #3 } { #2 }
}
}
+
+
+\cs_new:Nn \__projlib_math_list_of_symbols_entry:nnnn
+ % #1 = column one width
+ % #2 = column two width
+ % #3 = symbol
+ % #4 = description
+ {
+ \noindent
+ \begin { tabular } { p{#1} p{#2} }
+ \parbox [t] { #1 } { #3 } & \parbox [t] { #2 } { #4 }
+ \end { tabular }
+ \par
+ \skip_vertical:n { -\parskip }
+ }
+
+\cs_new:Nn \projlib_math_list_of_symbols:nnn
+ % #1 = column one width
+ % #2 = column two width
+ % #3 = key-val list
+ {
+ \keyval_parse:nnn
+ { \use_none:n }
+ { \__projlib_math_list_of_symbols_entry:nnnn { #1 } { #2 } }
+ { #3 }
+ }
+
+\NewDocumentCommand \ProjLibListOfSymbols { O{0.17\textwidth} O{0.75\textwidth} m }
+ {
+ \projlib_math_list_of_symbols:nnn { #1 } { #2 } { #3 }
+ }
+
+\ProvideDocumentCommand \ListOfSymbols { O{0.17\textwidth} O{0.75\textwidth} m }
+ {
+ \projlib_math_list_of_symbols:nnn { #1 } { #2 } { #3 }
+ }
%</projlib-math>
%
%<*projlib-paper>
@@ -3594,7 +3652,7 @@
\cs_generate_variant:Nn \keyval_parse:nnn { nno }
\keyval_parse:nno
- { }
+ { \use_none:n }
{ \projlib_theorem_preset_theorem_style:nn }
{ \l__projlib_theorem_theorem_style_tl }
diff --git a/macros/latex/contrib/projlib/README.md b/macros/latex/contrib/projlib/README.md
index 3e927c0fb5..ab478f4771 100644
--- a/macros/latex/contrib/projlib/README.md
+++ b/macros/latex/contrib/projlib/README.md
@@ -4,10 +4,10 @@
# The `ProjLib` Toolkit
-This bundle is dated 2022/03/28. Please note that the documentations are not yet up-to-date.
-
> **ProjLib** can be interpreted as "***Proj**ect **Lib**rary*" (in English), or as "***Proj**et **Lib**re*" (in French, meaning "*Free Project*").
+**This bundle is dated 2022/04/03. Please note that the documentations are not yet up-to-date.**
+
## Introduction
`ProjLib` is a collection of tools that help you write LaTeX document. With the main package `ProjLib` loaded (note that it is *case-sensitive*), you no longer need to manually configure the appropriate multilingual settings nor to set up the theorem-like environments. In addition, a series of auxiliary functionalities are introduced.
@@ -31,31 +31,32 @@ The modules include:
- `\thanks` can be written outside `\author`;
- The `abstract` environment can be placed before `\maketitle`.
1. module `datetime` - *Convert numeric date-time string to natural language*
- - Offering `\TheDate` and `\Thedate` to convert numeric date-time string to normal datetime format, with multi-language support (if the command names `\TheDate` or `\Thedate` are occupied, then one can switch to the longer version `\ProjLibDate` and `\ProjLibdate`).
- - Offering `\ProjLibToday` and `\ProjLibToday` (with the module `language` enabled, `\today` is redefined into `\ProjLibToday`, and thus supports the arguments like `only-year-month`).
+ - `\TheDate` and `\Thedate` for converting numeric date-time string to natural language, with multi-language support (if the command names `\TheDate` or `\Thedate` are occupied, then one can switch to the longer version `\ProjLibDate` and `\ProjLibdate`).
+ - `\ProjLibToday` and `\ProjLibToday` (with the module `language` enabled, `\today` is redefined into `\ProjLibToday`, and thus supports the arguments like `only-year-month`).
- Multiple input and output format available.
1. module `draft` - *Useful commands during draft stage*
- - Offering `\dnf` for marking unfinished part. In addition, a report of all unfinished places shall be printed at the last of your document.
+ - `\DNF` for marking unfinished part. In addition, a report of all unfinished places shall be printed at the last of your document.
1. module `font` - *Font selection and configuration*
- Supporting Palatino, Times, Garamond, Biolinum, Noto, etc.
1. module `language` - *Multi-language configuration*
- - Offering `\UseLanguage`, `\UseOtherLanguage` for selecting languages, and `\AddLanguageSetting` for adding language-specific settings.
- - Define multilingual text string with `\DefineMultilingualText`.
+ - `\UseLanguage`, `\UseOtherLanguage` for selecting languages, and `\AddLanguageSetting` for adding language-specific settings.
+ - `\DefineMultilingualText` for defining multilingual text strings.
- Currently support Chinese (simplified and traditional), English, French, German, Italien, Japanese, Portuguese (European and Brazilian), Russian and Spanish.
1. module `logo` - *The ProjLib logo*
- Draw the `ProjLib` logo in colorful or colorless fashion.
1. module `math` - *Efficient math setup*
- - Offering `\DefineOperator` and `\DefineShortcut` for setting up math macros efficiently
+ - `\DefineOperator` and `\DefineShortcut` for setting up math macros efficiently
+ - `\ListOfSymbols` for printing list of symboks
1. module `paper` - *Configuration of the paper style*
- Paper style configuration, with the themes `yellow`, `green`, `light gray`, `gray`, `dark`, etc.
1. module `theorem` - *Configuration of theorem-like environments*
- - Set up theorem-like environments based on the package `create-theorem`, and in particular, support options `name as is` and `name as context` for referencing names
+ - `\CreateTheorem`, `\SetTheorem` and more: setting up theorem-like environments based on the package `create-theorem`, and in particular, supporting the modes `name as is` and `name as context` for referencing names
- Support options `simple name` and `complex name` for referencing names
- Preset environments include: `assertion`, `assumption`, `axiom`, `conclusion`, `conjecture`, `convention`, `corollary`, `definition`, `definition-proposition`, `definition-theorem`, `example`, `exercise`, `fact`, `hypothesis`, `lemma`, `notation`, `observation`, `postulate`, `problem`, `property`, `proposition`, `question`, `remark`, `theorem`, and the corresponding unnumbered version with an asterisk `*` in the name.
1. module `titlepage` - *Commands for rendering the title page*
- Currently support two title page styles: `default` and `simple`.
-> Since module `theorem.sty` (and thus `ProjLib`) uses `cleveref`, it should be loaded after `varioref` and `hyperref`.
+> Since the module `theorem` uses `cleveref`, it should be loaded after `varioref` and `hyperref` (same for the main package `ProjLib`).
## How to get these files
You can get the `.sty` files mentioned above simply by compiling `ProjLib.ins`:
diff --git a/macros/latex/contrib/scontents/README.md b/macros/latex/contrib/scontents/README.md
index fe1c537bf1..95b0291960 100644
--- a/macros/latex/contrib/scontents/README.md
+++ b/macros/latex/contrib/scontents/README.md
@@ -1,42 +1,48 @@
## scontents — Stores LaTeX contents in memory or files
-- Version: 1.9
-- Date: 2020-01-21
-- Author: Pablo González
+
+Release v2.0 \[2022-04-04\]
## Description
+
This package allows to store `LaTeX` code, including _"verbatim"_, in <code>&lt;sequences&gt;</code>
using the `l3seq` module of `expl3`. The <code>&lt;stored content&gt;</code> can be used
as many times as desired in the document, additionally you can write to <code>&lt;external files&gt;</code>
or show it in <code>&lt;verbatim style&gt;</code>.
## Requirements
+
The package loads and depends on updated versions of:
- [expl3](https://ctan.org/pkg/expl3)
- [l3keys2e](https://ctan.org/pkg/l3keys2e)
-- [xparse](https://ctan.org/pkg/xparse)
## Installation
-The package `scontents` is present in `TeXLive` and `MiKTeX`, use the
+The package `scontents` is present in `TeX Live` and `MiKTeX`, use the
package manager to install.
-For manual installation, download `scontents.zip` and unzip it,
+For manual installation, download [scontents.zip](http://mirrors.ctan.org/macros/latex/contrib/scontents.zip) and unzip it,
then run:
+
```
-$ pdftex scontents.ins
+$ luatex scontents.ins
```
-and move all files to appropriate locations:
+
+Now the different files must be moved into the different directories in your
+installation `TDS` tree or in your `TEXMFHOME`:
+
```
- scontents.tex -> TDS:tex/generic/scontents/
- scontents-code.tex -> TDS:tex/generic/scontents/
- scontents.sty -> TDS:tex/latex/scontents/
- t-scontents.mkiv -> TDS:tex/context/third/scontents/
- scontents.pdf -> TDS:doc/latex/scontents/
- README.md -> TDS:doc/latex/scontents/
- scontents.dtx -> TDS:source/latex/scontents/
- scontents.ins -> TDS:source/latex/scontents/
+ scontents.tex -> TDS:tex/generic/scontents/scontents.tex
+ scontents-code.tex -> TDS:tex/generic/scontents/scontents-code.tex
+ scontents.sty -> TDS:tex/latex/scontents/scontents.sty
+ t-scontents.mkiv -> TDS:tex/context/third/scontents/t-scontents.mkiv
+ scontents.pdf -> TDS:doc/latex/scontents/scontents.pdf
+ scontents.dtx -> TDS:source/latex/scontents/scontents.dtx
+ scontents.ins -> TDS:source/latex/scontents/scontents.ins
```
-then run `mktexlsr`.
+
+then run `mktexlsr`. To produce the documentation with source code run `luatex scontents.ins` and
+`lualatex scontents.dtx` three times.
+
## Examples
The file <code>&lt;scontents.pdf&gt;</code> contains attached examples, which can be extracted
@@ -45,14 +51,21 @@ from the PDF viewer or from the command line by running:
```
$ pdfdetach -saveall scontents.pdf
```
+
and then you can use the excellent `arara` tool to compile them.
## License
+
The scontents package may be modified and distributed under the terms and
conditions of the [LaTeX Project Public License](https://www.latex-project.org/lppl/), version 1.3c or greater.
## Contents
+
- README.md (this file)
- scontents.pdf (documentation)
- scontents.dtx (master file that produced all files)
- scontents.ins (installer to extract all files)
+
+## Author and copyright
+
+Copyright 2019-2022 by Pablo González L.
diff --git a/macros/latex/contrib/scontents/scontents.dtx b/macros/latex/contrib/scontents/scontents.dtx
index f13db2db83..d82fec48c0 100644
--- a/macros/latex/contrib/scontents/scontents.dtx
+++ b/macros/latex/contrib/scontents/scontents.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2019-2020 by Pablo González L <pablgonz@educarchile.cl>
+% Copyright (C) 2019-2022 by Pablo González L <pablgonz@educarchile.cl>
%
% This work may be distributed and/or modified under the conditions of the
% LaTeX Project Public License, either version 1.3c of this license or (at
@@ -32,23 +32,27 @@
% so that entries written to both streams end up in the same file.
\usepackage[english]{babel}
\usepackage[top=0.5in,bottom=0.3in,left=2in,right=0.7in,footskip=0.2in,headheight=1cm,headsep=0.27cm]{geometry}
-\usepackage[osf,mono=false,scale=0.95,llscaled=0.95]{libertine}
+\usepackage[osf,nomath,mono=false,ScaleSF=0.95,ScaleRM=0.95]{libertinus-otf}
+% Set Monospace font, fix 'quotes' in verbatim
+\usepackage{sourcecodepro}
+\defaultfontfeatures[\ttfamily]
+ {
+ Numbers = OldStyle,
+ Scale = 0.80,
+ Extension = .otf,
+ }
\setmonofont[
- Numbers = OldStyle,
- Scale = 0.80,
UprightFont = *-Regular,
ItalicFont = *-RegularIt,
BoldFont = *-Semibold,
BoldItalicFont = *-SemiboldIt,
- RawFeature = {+zero,+ss06},
- FontFace = {m}{sc}{LinBiolinum_R.otf},
- Extension = .otf]{SourceCodePro}
-\newfontfamily\sourcecodeprolight{SourceCodePro-Regular.otf}[
+ RawFeature = {+zero,+ss06}]{SourceCodePro}
+\newfontfamily\mysourcecodeprolight{SourceCodePro-Regular.otf}[
Scale = 0.80,FakeStretch =0.75,
FontFace = {m}{it}{Font =SourceCodePro-RegularIt.otf,Color=FF0000}]
\RenewDocumentCommand{\MacroLongFont}{}
{
- \sourcecodeprolight\small
+ \mysourcecodeprolight\small
}
% The character of visible space is now taken from Latin Modern Mono
% to prevent fonts in T1. The original definition for xetex/luatex is
@@ -69,12 +73,13 @@
\newfontfamily\fetamontotf{ffmw10.otf}[
Scale = 0.95,%
RawFeature = {+latn,+rand,+kern,+size},%
- FontFace = {bx}{n}{ffmw10.otf},
+ FontFace = {b}{n}{ffmw10.otf},% fix raplece font
]
\usepackage[svgnames]{xcolor}
\usepackage[sf,bf,compact,medium,pagestyles]{titlesec}
-\usepackage{lastpage,imakeidx,microtype,attachfile2}
-\usepackage{adjustbox,multicol,listings,accsupp,titletoc,hypdestopt}
+\usepackage{lastpage,microtype,attachfile2}
+\usepackage{adjustbox,multicol,listings,accsupp,titletoc}
+\usepackage{imakeidx}
\usepackage{scontents} % main
\usepackage[contents]{colordoc}
% \show\docCodelineNo
@@ -102,6 +107,21 @@
|catcode`| 12|gdef|sxmacro@code#1% \end{macrocode*}[|liii@xmacro@code[#1]|end[macrocode*]]
|endgroup
+% Patching colordoc.sty to work with doc v3 (TeX Live 2022 & lualatex-dev)
+\usepackage{etoolbox}
+\makeatletter
+\@ifpackagelater{doc}{2022-06-01}%
+ {\patchcmd\macro@finish
+ {\ifnot@excluded % \if
+ \edef\@tempa{\noexpand\SpecialIndex{\bslash\macro@namepart}}%
+ \@tempa \fi}%
+ {\maybe@index@macro \macro@namepart}
+ {}{\FAILED}%
+ \let\default@color\current@color
+ }%
+ {}
+\makeatother
+
\EnableCrossrefs
% \PageIndex % \CodelineIndex undoes what \PageIndex does
% \CodelineIndex tries to open another write stream for the index file. We don't
@@ -128,8 +148,8 @@
\ExplSyntaxOff
\indexsetup{level=\section,firstpagestyle=myheader,othercode=\pagestyle{myheader}}
-\makeindex[name=userdoc,options=-s gind.ist,columnsep=15pt,title={Index of Documentation}]
-\makeindex[options=-s gind.ist,columnsep=15pt,title={Index of Implementation}]
+\makeindex[name=userdoc,options={-q -s gind.ist},columnsep=15pt,title={Index of Documentation}]
+\makeindex[options={-q -s gind.ist},columnsep=15pt,title={Index of Implementation}]
% Now, after imakeidx opens the write stream for the index file, we copy
% the reference to \@indexfile:
\makeatletter
@@ -420,7 +440,7 @@
% Reserved words 6 (optcolor)
keywordstyle = [6]{\color{optcolor}},%
keywords = [6]{store-cmd,store-env,print-env,print-cmd,write-env,%
- start,stopt,wrapper,sep,step,before,after,write-out,%
+ start,stopt,wrapper,sep,step,before,after,write-out,write-cmd,%
overwrite,width-tab,force-eol,inner,outer,I,J,M,L,Ascheol},%
% Reserved words 7 (OrangeRed)
keywordstyle = [7]{\color{OrangeRed}},%
@@ -501,18 +521,18 @@
\lstMakeShortInline[language=scontents-doc,basicstyle=\ttfamily]§
% Get file info
-\GetFileInfo{\jobname.sty}
+\GetFileInfo{scontents.sty}
% Config hyperref
\hypersetup{
allcolors = linkcolor,
- colorlinks = true,%
- linktoc = all,%
- pdftitle = {.:: The scontents package --- \fileinfo{} ::.},%
+ colorlinks = true,
+ linktoc = all,
+ pdftitle = {.:: The scontents package --- \fileinfo{} ::.},
pdfauthor = {Pablo González L},
- pdfsubject = {Documentation for \fileversion{} [\filedate] },%
- pdfkeywords = {sequences, contents, external files, expl3, xparse, l3seq, store contents},
- bookmarksopenlevel = 1,%
+ pdfsubject = {Documentation for \fileversion{} [\filedate] },
+ pdfkeywords = {sequences, contents, external files, expl3, l3seq, store contents},
+ bookmarksopenlevel = 1
}
% Configuration titleps and titlesec
@@ -530,7 +550,7 @@
}
\setfoot{\rlap{\hskip\dimexpr-\oddsidemargin-1in\relax%
\parbox{1.93\paperwidth}{\hfil\thepage\,/\,\pageref{LastPage}}}}%
- {\parbox{\textwidth}{\raggedright \textcolor{gray}{\raisebox{-1pt}{\textcopyright}{}2019--2020 by Pablo González}}}%
+ {\parbox{\textwidth}{\raggedright \textcolor{gray}{\raisebox{-1pt}{\textcopyright}{}2019--2022 by Pablo González}}}%
{}%
\sethead{\llap{\raisebox{0.55cm}{\parbox{\dimexpr\oddsidemargin+1in\relax}{\makebox[0pt][l]{\hspace{15pt}\pkglogo\space\fileversion}}}}}
{\raisebox{0.55cm}{\parbox{\textwidth}{\hspace*{-\oddsidemargin}\centering\small\S.\thesection\space\sectiontitle}}}%
@@ -580,12 +600,12 @@
% \scalebox{1.57}{\pkglogo}\\[2pt]
% \Large
% \textsf{Stores \hologo{LaTeX}}{ \fetamontotf{contents} }\\[3pt]
-% \fileversion{} --- \filedate\thanks{
+% \fileversion \quad \filedate\thanks{
% This file describes a documentation for \fileversion, last revised
% \filedate.}\\[25pt]
% \author{
% \large
-% \raisebox{-1pt}{\textcopyright}{}2019--2020 by Pablo González\thanks{
+% \raisebox{-1pt}{\textcopyright}{}2019--2022 by Pablo González\thanks{
% E-mail: \textcolor{OrangeRed}{\textsf{\guillemotleft}}\email{pablgonz@educarchile.cl}\textcolor{OrangeRed}{\textsf{\guillemotright}}.
% }%
% }
@@ -610,12 +630,23 @@
%
% \setlength{\parskip}{3pt}
%
+% \section{Description of the package}
+%
+% \begin{scontents}[store-env=description, print-env=true]
+% The \mypkg*{scontents} package allows to \mymeta{store contents} in \mymeta{sequences}
+% or \mymeta{external files}. In some ways it is similar to the \mypkg{filecontentsdef}
+% package, with the difference in which the \mymeta{content} is stored. The idea behind
+% this package is to get an approach to \hologo{ConTeXt} \enquote{\emph{buffers}} by
+% making use \mymeta{sequences}.
+% \end{scontents}
+%
% \section{Motivation and Acknowledgments}
%
% In \hologo{LaTeX} there is no direct way to record content for later use, although
% you can do this using §\macros§, recording \mymeta[type=rm]{verbatim content} is a
-% problem, usually you can avoid this by creating external files or boxes. The
-% general idea of this package is to try to imitate this implementation
+% problem, usually you can avoid this by creating external files or boxes.
+%
+% The general idea of this package is to try to imitate this implementation
% \enquote{\emph{buffers}} that has \hologo{ConTeXt} which allows you to save content in
% memory, including \emph{verbatim}, to be used later. The package
% \mypkg{filecontentsdef} solves this problem and since \mypkg{expl3} has an
@@ -625,7 +656,7 @@
% Fran\c{c}ois Burnol} who was kind enough to take my requirements into account
% and add the \myenv{filecontentsdefmacro} environment. Also a special thanks to
% Phelype Oleinik who has collaborated and adapted a large part of the code and
-% all \hologo{LaTeX3} team for their great work and to the different members
+% all \hologo{LaTeX} team for their great work and to the different members
% of the \href{https://tex.stackexchange.com}{TeX-SX} community who have provided
% great answers and ideas. Here a note of the main ones:
%
@@ -641,6 +672,10 @@
% \item \href{https://tex.stackexchange.com/q/373647/7832}{Collect contents of an environment (that contains verbatim content)}
% \end{enumerate}
%
+% \thispagestyle{plain}
+% \newpage
+% \pagestyle{myheader}
+%
% \section{License and Requirements}
% \label{sec:licence}
%
@@ -649,30 +684,41 @@
% (\url{http://www.latex-project.org/lppl.txt}). The software has the status
% \enquote{maintained}.
%
-% \medskip
-%
-% The \mypkg*{scontents} package loads \mypkg{expl3}, \mypkg{xparse} and
+% The \mypkg*{scontents} package loads \mypkg{expl3} (minimum version 2020-02-08) and
% \mypkg{l3keys2e}. This package can be used with "plain", "context", "xelatex",
% "lualatex", "pdflatex" and the classical workflow §latex>dvips>ps2pdf§.
%
-% \thispagestyle{plain}
-%
-% \newpage
-%
-% \pagestyle{myheader}
-%
% \section{The \texttt{scontents} package}
% \label{sec:pkgscontents}
%
-% \subsection{Description of the package and load}
+% \subsection{Installation}
%
-% \begin{scontents}[store-env=description, print-env=true]
-% The \mypkg*{scontents} package allows to \mymeta{store contents} in \mymeta{sequences}
-% or \mymeta{external files}. In some ways it is similar to the \mypkg{filecontentsdef}
-% package, with the difference in which the \mymeta{content} is stored. The idea behind
-% this package is to get an approach to \hologo{ConTeXt} \enquote{\emph{buffers}} by
-% making use \mymeta{sequences}.
-% \end{scontents}
+% The package \mypkg*{scontents} is present in \hologo{TeX} Live and \hologo{MiKTeX},
+% use the package manager to install. For manual installation, download
+% \href{https://mirrors.ctan.org/macros/latex/contrib/scontents.zip}{scontents.zip}
+% and unzip it, run \lstinline[language=scontents-doc,basicstyle=\ttfamily]+luatex scontents.ins+
+% and move all files to appropriate locations, then run "mktexlsr". To produce the documentation
+% with source code run \lstinline[language=scontents-doc,basicstyle=\ttfamily]+luatex scontents.ins+ and
+% "lualatex scontents.dtx" three times.
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{examplecode}[frame=single,language={}]
+ scontents.tex > TDS:tex/generic/scontents/
+ scontents-code.tex > TDS:tex/generic/scontents/
+ scontents.sty > TDS:tex/latex/scontents/
+ t-scontents.mkiv > TDS:tex/context/third/scontents/
+ scontents.pdf > TDS:doc/latex/scontents/
+ README.md > TDS:doc/latex/scontents/
+ scontents.dtx > TDS:source/latex/scontents/
+ scontents.ins > TDS:source/latex/scontents/
+\end{examplecode}
+% \iffalse
+%</example>
+% \fi
+%
+% \subsection{Loading and options}
%
% The package is loaded in the usual way:
%
@@ -731,10 +777,10 @@
%
% Some users use horizontal "TAB"s \enquote{\LKeyTab} from keyboard to indented the source
% code of the document and depending on the text editor used, some will use real "TAB"s
-% (\enquote{hard tabs}), others with \enquote{soft tabs}(\verb*| | or \verb*| |)
+% (\enquote{\emph{hard tabs}}), others with \enquote{\emph{soft tabs}}(\verb*| | or \verb*| |)
% or both.
%
-% At first glance it may seem the same, but the way in which "TAB"s (\enquote{hard tabs})
+% At first glance it may seem the same, but the way in which "TAB"s (\enquote{\emph{hard tabs}})
% are processed according to the context in which they are found within
% a file, both in \mymeta{reading}\footnote{Check the answer given by Ulrich Diez
% in \href{https://tex.stackexchange.com/a/508103/7832}{Keyboard TAB
@@ -746,7 +792,7 @@
% are treated as explicit spaces (in most contexts) and is the behavior when
% \mymeta{stored contents}, but when \mymeta{writing files} these are preserved.
%
-% With a \hologo{TeX}Live distribution, the "TAB" character is \enquote{printable}
+% With a \hologo{TeX} Live distribution, the "TAB" character is \enquote{\emph{printable}}
% for "latex", "pdflatex" and "lualatex", but if you use "xelatex" you
% must add the \texttt{\textcolor{optcolor}{-8bit}} option on the command
% line, otherwise you will get \hologo{TeX}-"TAB" (§^^I§) in the \mymeta{output file}.
@@ -796,7 +842,7 @@
% environment and the \mykey{store-cmd} key of the \ics*{Scontents} command. This key is
% only available as a package option or using \ics*{setupsc}.
%
-% \newpage
+% \medskip
%
% \keyexamp{overwrite}{true \textnormal{\textcolor{lightgray}{\textbar}} false}{false}
% Sets whether the \mymeta{files} generated by \mykey{write-out} and \mykey{write-env}
@@ -1198,7 +1244,6 @@ This text is in the outer environment (after nested).
% stored in the \mymarg{seq name}. The key \mykey{width-tab} is available for
% this command.
%
-%
% \subsection{The environment \env{verbatimsc}}
% \label{sec:verbatimsc}
%
@@ -1209,14 +1254,11 @@ This text is in the outer environment (after nested).
% contents.
% \end{function}
%
-% One consideration to keep in mind is that this is a \emph{representation}
-% of the \mymeta{stored content} in a \emph{verbatim} environment and not
-% a real \emph{verbatim} environment. The \mypkg{verbatim} package is not
-% compatible with the implementation of the \myenv*{verbatimsc} environment.
+% One consideration to keep in mind is that this is a \enquote{\emph{representation}}
+% of the \mymeta{stored content} in a \enquote{\emph{verbatim}} environment.
%
-%^^A \newpage
-%
-% The \myenv*{verbatimsc} environment can be customized in the following ways:
+% The \myenv*{verbatimsc} environment can be customized in the
+% following ways after loading the \mypkg*{scontents} package:
%
% Using the package \mypkg{fancyvrb}:
% \iffalse
@@ -1227,6 +1269,7 @@ This text is in the outer environment (after nested).
\let\verbatimsc\@undefined
\let\endverbatimsc\@undefined
\makeatother
+\usepackage{fancyvrb}
\DefineVerbatimEnvironment{verbatimsc}{Verbatim}{numbers=left}
\end{examplecode}
% \iffalse
@@ -1624,7 +1667,6 @@ This is from the verbatim environment:
% \textattachfile[color=linkcolor,print=false]{scexamp5.ltx}{\faFile*[regular]}.
% \lstinputlisting[language=scontents-doc,numbers=left]{scexamp5.ltx}
%
-%
% \subsubsection*{Example 6}
%
% \iffalse
@@ -1796,7 +1838,7 @@ and more.+
%<*example>
% \fi
\begin{scontents}[write-out=scexamp9.ltx]
-% arara: xelatex : {shell: true, options: [-8bit]}
+% arara: xelatex: {shell: true, options: [-8bit]}
% arara: clean: { extensions: [ aux, log] }
\documentclass{article}
\usepackage{scontents}
@@ -1852,7 +1894,6 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
%
% \newpage
%
-%
% \section{Change history}
% \label{sec:changes}
%
@@ -1864,11 +1905,18 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
%
% \setlist[itemize,1]{label=\textendash,wide=0.5em,nosep,noitemsep,leftmargin=10pt}
% \newlength\descrwidth
-% \settowidth{\descrwidth}{\textsf{v1.0, (ctan), 2019-07-30} }
+% \settowidth{\descrwidth}{\textsf{v1.0a, (ctan), 2019-07-30} }
%
% \begin{description}[font=\small\sffamily,wide=0pt,style=multiline,leftmargin=\descrwidth,nosep,noitemsep]
% \item [\fileversion{} (ctan), \filedate]
% \begin{itemize}
+% \item Adapting the |verbatimsc| environment (compatibility |verbatim| package).
+% \item Removed compatibility layer for older \hologo{LaTeX} releases.
+% \item Fix loader in \hologo{plainTeX} and \hologo{ConTeXt}.
+% \item Minor adjustments in the documentation.
+% \end{itemize}
+% \item [v1.9 (ctan), 2020-01-21]
+% \begin{itemize}
% \item Update and improvements in the internal code.
% \item Updating the generic code for |I/O| verification.
% \item Add |write-cmd| and |write-out| keys for |\Scontents*|.
@@ -1916,7 +1964,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
% \item Added |force-eol|, |verb-font| and |width-tab| keys.
% \item The extra space has been removed when you run |\getstored|.
% \item Internal code has been rewritten more efficiently.
-% \item Remove |\typestored|.
+% \item Remove starred argument for |\typestored|.
% \item Remove |filecontentsdef| dependency.
% \item Changing |\regex_replace_all:| for |\tl_replace_all:|.
% \end{itemize}
@@ -1948,15 +1996,15 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
% \def\section*#1{\stdsection{#1}}
%
% \begin{thebibliography}{9}
-% \bibitem{expl3} The \hologo{LaTeX3} Project. \enquote{The \textsf{expl3}
+% \bibitem{expl3} The \hologo{LaTeX} Project. \enquote{The \textsf{expl3}
% package}. Available from
% \textsc{ctan}, \url{https://www.ctan.org/pkg/expl3}, 2020.
%
-% \bibitem{xparse} The \hologo{LaTeX3} Project. \enquote{The \textsf{xparse}
+% \bibitem{xparse} The \hologo{LaTeX} Project. \enquote{The \textsf{xparse}
% package}. Available from
% \textsc{ctan}, \url{https://www.ctan.org/pkg/xparse}, 2020.
%
-% \bibitem{l3keys} The \hologo{LaTeX3} Project. \enquote{The \textsf{l3keys2e}
+% \bibitem{l3keys} The \hologo{LaTeX} Project. \enquote{The \textsf{l3keys2e}
% package}. Available from
% \textsc{ctan}, \url{https://www.ctan.org/pkg/l3keys2e}, 2020.
%
@@ -2005,38 +2053,30 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
%
% Now we define some common macros to hold the package date and version:
% \begin{macrocode}
-%<loader>\def\ScontentsFileDate{2020-01-21}%
-%<core>\def\ScontentsCoreFileDate{2020-01-21}%
+%<loader>\def\ScontentsFileDate{2022-04-04}%
+%<core>\def\ScontentsCoreFileDate{2022-04-04}%
%<*loader>
-\def\ScontentsFileVersion{1.9}%
+\def\ScontentsFileVersion{2.0}%
\def\ScontentsFileDescription{Stores LaTeX contents in memory or files}%
% \end{macrocode}
%
% The \LaTeX{} loader is fairly simple: just load the dependencies, load the
% core code, and then set interfaces up.
%
-% We also check if the \pkg{verbatim} package is loaded and show a compatibility
-% warning.
% \begin{macrocode}
%<*latex>
-\RequirePackage{expl3,xparse,l3keys2e}[2019/05/28]
+\RequirePackage{l3keys2e}[2020/02/08]
\ProvidesExplPackage
{scontents} {\ScontentsFileDate} {\ScontentsFileVersion} {\ScontentsFileDescription}
-\@ifpackageloaded { verbatim }
- {
- \msg_set:nnn { scontents } { unsupported-verbatim }
- {
- The~implementation~of~the~'verbatimsc'~environment~used~by~
- \iow_char:N \\typestored~is~not~compatible~with~package~'verbatim'.~
- Review~the~documentation~and~redefine~the~'verbatimsc'~environment.
- }
- \msg_warning:nn { scontents } { unsupported-verbatim }
- } { }
%</latex>
% \end{macrocode}
-% The Plain and \hologo{ConTeXt} loaders are similar (probably because I don't
-% know how to make a proper \hologo{ConTeXt} module :-). We define a
-% \LaTeX{}-style §\ver@scontents.sty§ macro with version info (just in case):
+%
+% The \hologo{plainTeX} and \hologo{ConTeXt} loaders are similar
+% (probably because I don't know how to make a proper \hologo{ConTeXt}
+% module :-). We define a \LaTeX{}-style §\ver@scontents.sty§ macro with
+% version info (just in case) and add §\ExplSyntaxOn§ to be able to load
+% \pkg{xparse} later.
+%
% \begin{macrocode}
%<*!latex>
%<context>\writestatus{loading}{User Module scontents v\ScontentsFileVersion}
@@ -2049,8 +2089,8 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
%</!latex>
% \end{macrocode}
%
-% In Plain, check that the package isn't being loaded twice (\LaTeX{} and
-% \hologo{ConTeXt} already defend against that):
+% In \hologo{plainTeX}, check that the package isn't being loaded twice
+% (\LaTeX{} and \hologo{ConTeXt} already defend against that):
% \begin{macrocode}
%<*plain>
\msg_gset:nnn { scontents } { already-loaded }
@@ -2064,14 +2104,18 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
%</plain>
% \end{macrocode}
%
-% \begin{macro}{\g_@@_end_verbatimsc_tl,\c_@@_end_env_tl}
-% A token list to match when ending \env{verbatimsc} and \env{scontents}
-% environments.
+% \subsection{Definition of variables by format}
+%
+% We define and set variables that must be handled separately in order
+% to work properly with \hologo{plainTeX}, \hologo{ConTeXt} and \LaTeX.
+%
+% \begin{macro}{\g_@@_end_verbatimsc_tl}
+% A global token list \cs{g_@@_end_verbatimsc_tl} match when ending
+% \env{verbatimsc} environment.
%
% \begin{macrocode}
\tl_new:N \g_@@_end_verbatimsc_tl
-\tl_gset_rescan:Nnn
- \g_@@_end_verbatimsc_tl
+\tl_gset_rescan:Nnn \g_@@_end_verbatimsc_tl
{
\char_set_catcode_other:N \\
%<*latex>
@@ -2082,6 +2126,16 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
%<latex> { \end{verbatimsc} }
%<plain> { \endverbatimsc }
%<context> { \stopverbatimsc }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c_@@_end_env_tl,\l_@@_env_name_tl}
+% A token list \cs{c_@@_end_env_tl} match when ending environments
+% defined by \cs{newenvsc}, \cs{l_@@_env_name_tl} storing the name
+% of environments defined by \cs{newenvsc}.
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_env_name_tl
\tl_const:Nx \c_@@_end_env_tl
{
\c_backslash_str
@@ -2099,13 +2153,15 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
\file_input:n { scontents-code.tex }
% \end{macrocode}
%
-% Sometimes we need to detect the format from within a macro:
+% \begin{macro}{\@@_format_case:nnn}
+% Sometimes we need to detect the format from within a macro:
% \begin{macrocode}
\cs_new:Npn \@@_format_case:nnn #1 #2 #3
%<latex> {#1} % LaTeX
%<plain> {#2} % Plain/Generic
%<context> {#3} % ConTeXt
% \end{macrocode}
+% \end{macro}
%
% Checking that the package was loaded with the proper loader code. This code
% was copied from \texttt{expl3-code.tex}.
@@ -2156,10 +2212,45 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
\next
% \end{macrocode}
%
-% \subsection{Definition of common keys}
+% \subsection{Definition of temporary variables}
+%
+% \begin{macro}{\l_@@_macro_tmp_tl,\l_@@_temp_tl,\g_@@_temp_tl,\l_@@_tmpa_int,
+% \l_@@_temp_bool}
+% The token list \cs{l_@@_macro_tmp_tl} is a temporary token list to
+% hold the contents of the macro/environment. \cs{l_@@_temp_tl},
+% \cs{g_@@_temp_tl}, \cs{l_@@_tmpa_int} and \cs{l_@@_temp_bool} are
+% generic temporary vars.
+% \begin{macrocode}
+\tl_new:N \l_@@_macro_tmp_tl
+\tl_new:N \l_@@_temp_tl
+\tl_new:N \g_@@_temp_tl
+\int_new:N \l_@@_tmpa_int
+\bool_new:N \l_@@_temp_bool
+% \end{macrocode}
+% \end{macro}
%
-% We create some common \mymeta{keys} that will be used by the options passed to
-% the package as well as by the environments and commands defined.
+% \subsection{Compatibility layer with \hologo{plainTeX} and \hologo{ConTeXt}}
+%
+% When loading the package outside of \LaTeX{} we can't usually use
+% \pkg{xparse}. However since \pkg{xparse} now \pkg{ltcmd} is part of
+% the \LaTeX{} kernel is loadable in any format.
+%
+% \begin{macrocode}
+%</core>
+%<*loader&!latex>
+\int_set:Nn \l_@@_tmpa_int { \char_value_catcode:n { `\@ } }
+\char_set_catcode_letter:N \@
+\file_input:n { xparse-generic.tex }
+\char_set_catcode:nn { `\@ } { \l_@@_tmpa_int }
+%</loader&!latex>
+%<*core>
+% \end{macrocode}
+%
+% \subsection{Definition of keys for the package}
+%
+% We create some common \mymeta{keys} that will be used by the options
+% passed to the package as well as by the environments and commands
+% defined.
%
% \begin{macrocode}
\keys_define:nn { scontents }
@@ -2198,74 +2289,78 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
%<plain|context> { verb-font .initial:n = \tt }
% \end{macrocode}
%
-% In \LaTeX{} mode we load \mypkg{l3keys2e} process the \mymeta{keys} as options
-% passed on to the package, the package \pkg{l3keys2e} will verify the
-% \mymeta{keys} and will return an error when they are \emph{unknown}.
+% In \LaTeX{} mode we load \mypkg{l3keys2e} process the \mymeta{keys}
+% as options passed on to the package, the package \pkg{l3keys2e} will
+% verify the \mymeta{keys} and will return an error when they are
+% \emph{unknown}.
% \begin{macrocode}
%<latex>\ProcessKeysOptions { scontents }
%<*core>
% \end{macrocode}
%
-% \subsection{Internal variables}
+% \subsection{Internal variables and utility functions}
+%
+% \begin{macro}{\l_@@_fname_out_tl,\l_@@_every_line_env_tl,\l_@@_file_iow}
+% The token list \cs{l_@@_fname_out_tl} is used for store the name of
+% the \meta{output file}, when there's one. Its value is set by the
+% keys §write-env§, §write-out§ and §write-cmd§.
+%
+% The token list \cs{l_@@_every_line_env_tl} holds the contents of an
+% environment, \env{scontents} by default, as it's being read.
+% \cs{l_@@_file_iow} is an output stream for saving the contents of an
+% environment (or command) to a file.
%
-% Now we declare the internal variables we will use.
+% This variables is used by the function \cs{@@_file_tl_write_start:n}
+% (see \ref{the:environment:itself}).
%
-% \begin{macro}{\l_@@_macro_tmp_tl,\l_@@_fname_out_tl,\l_@@_temp_tl,
-% \l_@@_file_tl,\g_@@_temp_tl,\l_@@_foreach_name_seq_tl,
-% \l_@@_foreach_before_tl,\l_@@_foreach_after_tl}
-% \cs{l_@@_macro_tmp_tl} is a temporary token list to hold the contents
-% of the macro/environment, \cs{l_@@_fname_out_tl} is used as the name
-% of the output file, when there's one, \cs{l_@@_file_tl} holds the contents
-% of an environment as it's being read, and \cs{l_@@_temp_tl} and
-% \cs{g_@@_temp_tl} are generic temporary token lists.
+% \begin{macrocode}
+\tl_new:N \l_@@_fname_out_tl
+\tl_new:N \l_@@_every_line_env_tl
+\iow_new:N \l_@@_file_iow
+% \end{macrocode}
+% \end{macro}
%
+% \begin{macro}{\l_@@_foreach_name_seq_tl,\l_@@_foreach_before_tl,\l_@@_foreach_after_tl}
% \cs{l_@@_foreach_name_seq_tl} is the name assigned to the sequence on
% which the loop will be made, \cs{l_@@_foreach_before_tl} and \cs{l_@@_foreach_after_tl}
% are token lists in which the assigned material will be placed before
% and after the execution of the §\foreachsc§ loop.
%
% \begin{macrocode}
-\tl_new:N \l_@@_macro_tmp_tl
-\tl_new:N \l_@@_fname_out_tl
-\tl_new:N \l_@@_temp_tl
-\tl_new:N \l_@@_file_tl
-\tl_new:N \g_@@_temp_tl
\tl_new:N \l_@@_foreach_name_seq_tl
\tl_new:N \l_@@_foreach_before_tl
\tl_new:N \l_@@_foreach_after_tl
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\l_@@_seq_item_int,\l_@@_env_nesting_int,\l_@@_tmpa_int,
-% \l_@@_foreach_stop_int}
+% \begin{macro}{\l_@@_seq_item_int,\l_@@_env_nesting_int,\l_@@_foreach_stop_int}
% \cs{l_@@_seq_item_int} stores the index in the sequence of the item
-% requested to \cs{typestored} or \cs{meaningsc}. \cs{l_@@_env_nesting_int}
+% requested to §\typestored§ or §\meaningsc§. \cs{l_@@_env_nesting_int}
% stores the current nesting level of the \env{scontents} environment.
-% \cs{l_@@_foreach_stop_int} will save the value at which the §\foreachsc§
-% loop will stop.
+% \cs{l_@@_foreach_stop_int} will save the value at which the §\foreachsc§
+% loop will stop.
%
% \begin{macrocode}
\int_new:N \l_@@_foreach_stop_int
\int_new:N \l_@@_seq_item_int
\int_new:N \l_@@_env_nesting_int
-\int_new:N \l_@@_tmpa_int
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\l_@@_writing_bool,\l_@@_storing_bool}
+% \begin{macro}{\l_@@_writing_bool,\l_@@_storing_bool,\l_@@_writable_bool}
% The boolean \cs{l_@@_writing_bool} keeps track of whether we should write
% to a file, and \cs{l_@@_storing_bool} determines whether it is in write-only
-% mode when the §write-out§ option is used.
+% mode when the key §write-out§ is used.
%
% \begin{macrocode}
\bool_new:N \l_@@_writing_bool
\bool_set_false:N \l_@@_writing_bool
\bool_new:N \l_@@_storing_bool
\bool_set_true:N \l_@@_storing_bool
+\bool_new:N \l_@@_writable_bool
% \end{macrocode}
% \end{macro}
%
-%
% \begin{macro}{\l_@@_foreach_before_bool,\l_@@_foreach_after_bool,
% \l_@@_foreach_stop_bool,\l_@@_foreach_wrapper_bool}
% Boolean variables used by the §\foreachsc§ loop.
@@ -2279,7 +2374,6 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
\bool_set_false:N \l_@@_foreach_stop_bool
\bool_new:N \l_@@_foreach_wrapper_bool
\bool_set_false:N \l_@@_foreach_wrapper_bool
-\bool_new:N \l_@@_writable_bool
% \end{macrocode}
% \end{macro}
%
@@ -2313,20 +2407,25 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\l_@@_file_iow}
-% An output stream for saving the contents of an environment to a file.
+% \begin{macro}{\l_@@_save_sf_int,\l_@@_save_skip}
+% Internal variables used by functions \cs{@@_bsphack:} and \cs{@@_esphack:}.
%
% \begin{macrocode}
-\iow_new:N \l_@@_file_iow
+\int_new:N \l_@@_save_sf_int
+\skip_new:N \l_@@_save_skip
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_rescan_tokens:n}
-% \cs{tl_rescan:nn} doesn't fit the needs of this package because
-% it does not allow catcode changes inside the argument, so verbatim
-% commands used inside one of \mypkg*{scontents}'s commands/environments
-% will not work. Here we create a private copy of \cs{tex_scantokens:D}
-% which will serve our purposes.
+% \begin{macro}{\@@_rescan_tokens:n,\@@_rescan_tokens:x,\@@_rescan_tokens:V}
+% The function \cs{tl_rescan:nn} provided by \pkg{expl3} doesn't fit
+% the needs of this package because it does not allow catcode changes
+% inside the argument, so verbatim commands used inside one of
+% \mypkg*{scontents}'s commands/environments will not work. Here we
+% create a private copy of \cs{tex_scantokens:D} which will serve our
+% purposes. See the answer by Ulrich Diez in
+% \href{https://tex.stackexchange.com/a/577183/7832}{How do use
+% \{<setup>\} in \textbackslash tl_set_rescan:Nnn to replace
+% \textbackslash scantokens?}
%
% \begin{macrocode}
\cs_new_protected:Npn \@@_rescan_tokens:n #1 { \tex_scantokens:D {#1} }
@@ -2345,7 +2444,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
%
% \begin{macro}[int]{\tl_remove_once:NV,\tl_replace_all:Nxx,
% \tl_replace_all:Nxn,\tl_replace_all:Nnx,\tl_if_empty:fTF}
-% Some nonstandard variants.
+% Some nonstandard kernel variants.
%
% \begin{macrocode}
\cs_generate_variant:Nn \tl_remove_once:Nn { NV }
@@ -2406,7 +2505,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
\bool_set_true:N \l_@@_writing_bool
\tl_set:Nn \l_@@_fname_out_tl {#1}
},
- write-env .value_required:n = true,
+ write-cmd .value_required:n = true,
write-out .value_required:n = true,
print-cmd .meta:nn = { scontents } { print-cmd = #1 },
print-cmd .default:n = true,
@@ -2476,7 +2575,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
%
% \subsection{Handling undefined keys}
%
-% The \mymeta{keys} are stored in the token list variable \cs{l_keys_key_tl},
+% The \mymeta{keys} are stored in the token list variable \cs{l_keys_key_str},
% and the value (if any) is passed as an argument to each \mymeta{function}.
%
% \subsubsection{Undefined keys for environment \env{scontents}}
@@ -2490,7 +2589,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
%
% \begin{macrocode}
\cs_new_protected:Npn \@@_parse_environment_keys:n #1
- { \exp_args:NV \@@_parse_environment_keys:nn \l_keys_key_tl {#1} }
+ { \exp_args:NV \@@_parse_environment_keys:nn \l_keys_key_str {#1} }
\cs_new_protected:Npn \@@_parse_environment_keys:nn #1#2
{
\tl_if_blank:nTF {#2}
@@ -2511,7 +2610,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
%
% \begin{macrocode}
\cs_new_protected:Npn \@@_parse_command_keys:n #1
- { \exp_args:NV \@@_parse_command_keys:nn \l_keys_key_tl {#1} }
+ { \exp_args:NV \@@_parse_command_keys:nn \l_keys_key_str {#1} }
\cs_new_protected:Npn \@@_parse_command_keys:nn #1#2
{
\tl_if_blank:nTF {#2}
@@ -2538,7 +2637,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
{ \msg_error:nnnn { scontents } { for-key-value-unknown } {#1} {#2} }
}
\cs_new_protected:Npn \@@_parse_foreach_keys:n #1
- { \exp_args:NV \@@_parse_foreach_keys:nn \l_keys_key_tl {#1} }
+ { \exp_args:NV \@@_parse_foreach_keys:nn \l_keys_key_str {#1} }
% \end{macrocode}
% \end{macro}
%
@@ -2564,7 +2663,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
%
% \begin{macrocode}
\cs_new_protected:Npn \@@_parse_type_meaning_key:n #1
- { \exp_args:NV \@@_parse_type_meaning_key:nn \l_keys_key_tl {#1} }
+ { \exp_args:NV \@@_parse_type_meaning_key:nn \l_keys_key_str {#1} }
\cs_new_protected:Npn \@@_parse_type_meaning_key:nn #1#2
{
\tl_if_empty:fTF { \int_to_roman:n { -0 #1 } }
@@ -2582,123 +2681,15 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
% \end{macrocode}
% \end{macro}
%
-% \subsection{Compatibility layer with Plain}
-%
-% When loading the package outside of \LaTeX{} we can't usually use \pkg{xparse}.
-% However since \pkg{xparse} doesn't actually hold any dependency with \LaTeX{}
-% except for package-loading commands, we can emulate those commands (much like
-% in \pkg{miniltx}) so that \pkg{xparse} is loadable in any format.
-%
-% The bunch of macros below is adapted from the \LaTeX{} kernel (greatly simplified).
-% \begin{macrocode}
-%</core>
-%<*loader&!latex>
-\seq_new:N \l_@@_compat_seq
-\cs_new_protected:Npn \@@_compat_redefine:Npn #1
- {
- \seq_put_right:Nn \l_@@_compat_seq {#1}
- \cs_set_eq:cN { @@_saved_\cs_to_str:N #1: } #1
- \cs_new_protected:Npn #1
- }
-\cs_new_protected:Npn \@@_compat_restore:
- { \seq_map_function:NN \l_@@_compat_seq \@@_compat_restore:N }
-\cs_new_protected:Npn \@@_compat_restore:N #1
- {
- \cs_set_eq:Nc #1 { @@_saved_\cs_to_str:N #1: }
- \cs_undefine:c { @@_saved_\cs_to_str:N #1: }
- }
-\cs_generate_variant:Nn \@@_compat_redefine:Npn { c }
-\cs_new_protected:Npn \@@_optarg:nn #1 #2
- { \peek_charcode_ignore_spaces:NTF [ {#1} {#1[#2]} }
-\cs_new_protected:Npn \@@_stararg:nn #1 #2
- { \peek_charcode_remove_ignore_spaces:NTF * {#1} {#2} }
-\@@_compat_redefine:Npn \RequirePackage
- { \@@_optarg:nn { \@@_require_auxi:wn } { } }
-\cs_new_protected:Npn \@@_require_auxi:wn [#1] #2
- { \@@_optarg:nn { \@@_require_auxii:wnw [{#1}]{#2} } { } }
-\cs_new:Npn \@@_zap_space:ww #1~#2
- {
- #1 \if_meaning:w #2 \q_mark
- \exp_after:wN \use_none:n
- \else:
- \exp_after:wN \@@_zap_space:ww
- \fi: #2
- }
-\cs_new_protected:Npn \@@_require_auxii:wnw [#1] #2 [#3]
- {
- \tl_set:Nx \l_@@_temp_tl { \@@_zap_space:ww #2 ~ \q_mark }
- \clist_map_function:NN \l_@@_temp_tl \@@_require_auxiii:n
- }
-\cs_new_protected:Npn \@@_require_auxiii:n #1
- {
- \str_if_eq:eeF {expl3} {#1}
- { \msg_error:nnn { scontents } { invalid-package } {#1} }
- }
-\msg_new:nnn { scontents } { invalid-package }
- { Package~'#1'~invalid~in~scontents.~This~is~an~error~in~scontents. }
-\@@_compat_redefine:cpn { @ifpackagelater } #1
- { \exp_args:Nc \@@_package_later_aux:Nn { ver@#1.sty } }
-\cs_new_protected:Npn \@@_package_later_aux:Nn #1 #2
- {
- \int_compare:nNnTF
- { \exp_after:wN \@@_parse_version:w #1 //00 \q_mark } <
- { \exp_after:wN \@@_parse_version:w #2 //00 \q_mark }
- }
-\cs_new:Npn \@@_parse_version:w #1 { \@@_parse_version_auxi:w 0#1 }
-\cs_new:Npn \@@_parse_version_auxi:w #1/#2/#3#4#5 \q_mark
- { \@@_parse_version_auxii:w #1-#2-#3#4 \q_mark }
-\cs_new:Npn \@@_parse_version_auxii:w #1-#2-#3#4#5 \q_mark
- { \tl_if_blank:nF {#2} {#1} #2 #3 #4 }
-\@@_compat_redefine:Npn \ProvidesExplPackage #1 #2 #3 #4
- { \@@_provides_aux:nn {#1} { #2 \tl_if_empty:nF {#3} {#3~} #4 } }
-\cs_new_protected:Npn \@@_provides_aux:nn #1 #2
- {
- \tl_gset:cx { ver@#1.sty } {#2}
- \iow_log:n { Package~#1:~#2 }
- \ExplSyntaxOn
- }
-\@@_compat_redefine:Npn \DeclareOption
- { \@@_stararg:nn { \use_none:n } { \use_none:nn } }
-\@@_compat_redefine:Npn \ProcessOptions
- { \@@_stararg:nn { } { } }
-% \end{macrocode}
-%
-% Now that the compatibility layer is defined, we can finally load \pkg{xparse}.
-% \pkg{xparse} expects to be loaded with §\ExplSyntaxOff§ (not much harm would
-% be done otherwise, but just to be on the safe side).
-%
-% Within \pkg{xparse} a §\RequirePackage{expl3}§ is done. We can ignore that since
-% we have already loaded \pkg{expl3}. Next, a §\@ifpackagelater§ test is done:
-% we do that test too to ensure that \pkg{xparse} is compatible with the current
-% running version of \pkg{expl3}. The following §\ProvidesExplPackage§ simply
-% defines §\ver@xparse.sty§ for any other package that might uset it, and then
-% does §\ExplSyntaxOn§. At the end of the package, \pkg{xparse} parses (heh)
-% the package options. Since we don't have those in non-\LaTeX{} formats, they are
-% ignored. Okay, so load \pkg{xparse}:
-% \begin{macrocode}
-\int_set:Nn \l_@@_tmpa_int { \char_value_catcode:n { `\@ } }
-\char_set_catcode_letter:N \@
-\exp_after:wN
-\ExplSyntaxOff
-\file_input:n { xparse.sty }
-\ExplSyntaxOn
-\char_set_catcode:nn { `\@ } { \l_@@_tmpa_int }
-\@@_compat_restore:
-%</loader&!latex>
-%<*core>
-% \end{macrocode}
-% (actually we don't need to do §\ExplSyntaxOn§ there because we don't have
-% \LaTeX{}'s full package loading mechanism, so the \pkg{expl3} syntax remains
-% active after \pkg{xparse} is loaded, but it doesn't harm either).
-%
% \subsection{Programming of the sequences}
%
% The storage of the package is done using |seq| variables. Here we
% set up the macros that will manage the variables.
-% \begin{macro}{\@@_append_contents:nn}
-% \cs{@@_append_contents:nn} creates a seq variable if one didn't
-% exist and appends the contents in the argument to the right of the
-% sequence.
+%
+% \begin{macro}{\@@_append_contents:nn,\@@_append_contents:Vx}
+% The function \cs{@@_append_contents:nn} creates a |seq| variable if
+% one didn't exist and appends the contents in the argument to the
+% right of the sequence.
%
% \begin{macrocode}
\cs_new_protected:Npn \@@_append_contents:nn #1#2
@@ -2714,7 +2705,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
% \end{macro}
%
% \begin{macro}{\@@_getfrom_seq:nn,\@@_getfrom_seq:nnn}
-% \cs{@@_getfrom_seq:nn} retrieves the saved item from the
+% The function \cs{@@_getfrom_seq:nn} retrieves the saved item from the
% sequence.
%
% \begin{macrocode}
@@ -2739,8 +2730,8 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_lastfrom_seq:n}
-% \cs{@@_lastfrom_seq:n} retrieves the last saved item from the
+% \begin{macro}{\@@_lastfrom_seq:n,\@@_lastfrom_seq:V}
+% The function \cs{@@_lastfrom_seq:n} retrieves the last saved item from the
% sequence when \cs{l_@@_print_env_bool} or \cs{l_@@_print_cmd_bool}
% is true.
%
@@ -2758,7 +2749,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
% \end{macro}
%
% \begin{macro}{\@@_store_to_seq:NN}
-% The \cs{@@_store_to_seq:NN} writes the recorded contents
+% The function \cs{@@_store_to_seq:NN} writes the recorded contents
% in §#1§ to the log and stores it in §#2§.
%
% \begin{macrocode}
@@ -2770,7 +2761,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
% \end{macrocode}
% \end{macro}
%
-% \subsection{Construction of environment \env{scontents}}
+% \subsection{The command \cs{newenvsc} and environment \env{scontents}}
%
% In order to be able to define environments that behave similarly to
% \myenv{scontents}, we define a generic environment and make all other
@@ -2778,14 +2769,17 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
%
% \subsubsection{The command \cs{newenvsc}}
%
-% \begin{macro}{\newenvsc,\l_@@_env_name_tl,\@@_scontents_setenv:nn}
-% The \cs{newenvsc} command defines two functions \cs[no-index]{@@_\#1_env_begin:}
-% and \cs[no-index]{@@_\#1_env_end:}, which set the current environment's
-% default properties and then call the generic \cs{@@_env_generic_begin:} and
-% \cs{@@_env_generic_end:}.
+% \begin{macro}{\newenvsc,\@@_env_setting:nn,\@@_env_define:nnn}
+% The internal function \cs{@@_env_setting:nn} defines two
+% functions \cs[no-index]{@@_\#1_env_begin:} and
+% \cs[no-index]{@@_\#1_env_end:}, which set the current environment's
+% name in §#1§ and \cs{l_@@_env_name_tl} and default properties in §#2§
+% then call \cs{@@_setup_verb_processor:}, the generic
+% \cs{@@_env_generic_begin:} and \cs{@@_env_generic_end:}.
+%
+% Finally the function \cs{@@_env_define:nnn} will create the environments.
% \begin{macrocode}
-\tl_new:N \l_@@_env_name_tl
-\cs_new_protected:Npn \@@_scontents_setenv:nn #1 #2
+\cs_new_protected:Npn \@@_env_setting:nn #1 #2
{
\cs_new_protected:cpn { @@_#1_env_begin: }
{
@@ -2803,12 +2797,12 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
}
%</core>
%<*loader>
-\NewDocumentCommand { \newenvsc } { m O{} }
+\NewDocumentCommand \newenvsc { m O{} }
{
%<latex|plain> \cs_if_exist:cTF { #1 }
%<context> \cs_if_exist:cTF { start #1 }
{ \msg_error:nnn { scontents } { env-already-defined } {#1} }
- { \@@_scontents_setenv:nn {#1} {#2} }
+ { \@@_env_setting:nn {#1} {#2} }
}
\cs_new_protected:Npn \@@_env_define:nnn #1 #2 #3
{
@@ -2831,11 +2825,10 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
%
% \subsubsection{Generic definition of the environment}
%
-% \begin{macro}{
-% \@@_env_generic_begin:,
-% \@@_env_generic_begin:,
-% }
-% Now we define the generic environment \cs{@@_env_generic_begin:}
+% \begin{macro}{\@@_env_generic_begin:,\@@_env_generic_end:}
+%
+% Now we define the generic environment functions
+% \cs{@@_env_generic_begin:} and \cs{@@_env_generic_end:}.
% \begin{macrocode}
\cs_new_protected:Npn \@@_env_generic_begin:
{
@@ -2846,7 +2839,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
{
\@@_stop_environment:
\@@_finish_storing:NNN \l_@@_macro_tmp_tl
- \l_@@_name_seq_env_tl \l_@@_print_env_bool
+ \l_@@_name_seq_env_tl \l_@@_print_env_bool
}
% \end{macrocode}
% \end{macro}
@@ -2860,7 +2853,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
% \startscontents,
% \stopscontents,
% }
-% Now defining the \myenv{scontents} environment should be easy:
+% Finaly defining the \myenv{scontents} environment should be easy :)
% \begin{macrocode}
%</core>
%<loader>\newenvsc{scontents}
@@ -2870,9 +2863,6 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
%
% \subsubsection{key val for environment}
%
-% Define a \myoarg{key \textnormal{\textcolor{gray}{=}} val} for
-% environment \env{scontents}
-%
% \begin{macro}{\@@_grab_optional:n,\@@_grab_optional:w}
% The macro \cs{@@_grab_optional:w} is called from the
% \env{scontents} environment with the tokens following the
@@ -2904,9 +2894,10 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
% \end{macro}
%
% \subsubsection{The environment itself}
+% \label{the:environment:itself}
%
% \begin{macro}{\@@_start_environment:w,\@@_start_after_option:w,
-% \@@_check_line_process:xn,\@@_stop_environment:}
+% \@@_check_line_process:xn,\@@_stop_environment:}
% Here we make §^^I§, §^^L§ and §^^M§ active characters so that the end of
% line can be \enquote{seen} to be used as a delimiter, and \hologo{TeX} doesn't try to
% eliminate space-like characters.
@@ -2916,19 +2907,21 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
% to do the heavy lifting. \cs{@@_grab_optional:w} processes the optional
% argument and calls \cs{@@_start_after_option:w}.
%
-% \cs{@@_start_after_option:w} also checks for trailing tokens after
-% the optional argument and issues an error if any.
+% The function \cs{@@_start_after_option:w} also checks for trailing
+% tokens after the optional argument and issues an error if any.
%
-% In all cases, \cs{@@_check_line_process:xn} ckecks that
+% In all cases, the function \cs{@@_check_line_process:xn} ckecks that
% everything past §\begin{scontents}§ is empty and then process
-% the environment. \cs{@@_check_line_process:xn} calls the
-% \cs{@@_file_tl_write_start:V} function, which will then read the contents
+% the environment.
+%
+% The function \cs{@@_check_line_process:xn} calls the function
+% \cs{@@_file_tl_write_start:V} which will then read the contents
% of the environment and optionally store them in a token list or write to
% an external file.
%
-% When that's done, \cs{@@_file_write_stop:N} does the cleanup. This part of
-% the code is inspired and adapted from the code of the package \pkg{xsimverb}
-% by Clemens Niederberger.
+% When that's done, the function \cs{@@_file_write_stop:N} does the
+% cleanup. This part of the code is inspired and adapted from the code of
+% the package \pkg{xsimverb} by Clemens Niederberger.
%
% \begin{macrocode}
\group_begin:
@@ -2966,8 +2959,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
{ \l_@@_storing_bool }
{ \tl_if_empty_p:N \l_@@_macro_tmp_tl }
{
- \msg_warning:nnx { scontents } { empty-environment }
- { \l_@@_env_name_tl }
+ \msg_warning:nnx { scontents } { empty-environment } { \l_@@_env_name_tl }
}
}
% \end{macrocode}
@@ -3005,7 +2997,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
\iow_open:Nn \l_@@_file_iow {#1}
}
{ \bool_set_false:N \l_@@_writable_bool }
- \tl_clear:N \l_@@_file_tl
+ \tl_clear:N \l_@@_every_line_env_tl
\seq_map_function:NN \l_char_special_seq \char_set_catcode_other:N
\int_step_function:nnnN { 128 } { 1 } { 255 } \char_set_catcode_letter:n
\cs_set_protected:Npx \@@_ret:w ##1 ^^M
@@ -3087,7 +3079,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
\bool_if:NT \l_@@_storing_bool
{
\tl_set:Nn \exp_not:N #1
- { \exp_args:NV \@@_remove_leading_nl:n \l_@@_file_tl }
+ { \exp_args:NV \@@_remove_leading_nl:n \l_@@_every_line_env_tl }
}
}
}
@@ -3111,20 +3103,17 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{
-% \@@_verb_processor_output:n,
-% \@@_verb_processor_output:x,
-% }
-% \cs{@@_verb_processor_output:n} does the output of each line read,
-% to a token list and to a file, depending on the booleans
-% \cs{l_@@_writing_bool} and \cs{l_@@_storing_bool}.
+% \begin{macro}{\@@_verb_processor_output:n,\@@_verb_processor_output:x}
+% The function \cs{@@_verb_processor_output:n} does the output of
+% each line read, to a token list and to a file, depending on the
+% booleans \cs{l_@@_writing_bool} and \cs{l_@@_storing_bool}.
% \begin{macrocode}
\cs_new_protected:Npn \@@_verb_processor_output:n #1
{
\bool_if:NT \l_@@_writable_bool
{ \iow_now:Nn \l_@@_file_iow {#1} }
\bool_if:NT \l_@@_storing_bool
- { \tl_put_right:Nn \l_@@_file_tl { ^^J #1 } }
+ { \tl_put_right:Nn \l_@@_every_line_env_tl { ^^J #1 } }
}
\group_end:
\cs_generate_variant:Nn \@@_verb_processor_output:n { x }
@@ -3169,6 +3158,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
}
\cs_new:Npn \@@_use_none_delimit_by_q_stop:w #1 \q_@@_stop { }
% \end{macrocode}
+%
% In \LaTeX{}, environments start with §\begin{<env>}§, so checking if a
% string contains §\begin{scontents}§ is straightforward. Since no §}§ can
% appear inside §<env>§, then just a macro delimited by §}§ is enough.
@@ -3194,6 +3184,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
\exp_not:N \q_@@_stop
}
% \end{macrocode}
+%
% In other formats, however, we don't have an \enquote{end anchor} to delimit the
% environment name, so a delimited macro won't help. We have to search for
% the entire environment command (usually §\scontents§ and §\startscontents§).
@@ -3263,11 +3254,14 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[int]{\verbatimsc,\endverbatimsc}
-% In Plain we emulate \LaTeX's \env{verbatim} environment.
+% \subsection{The environment \env{verbatimsc}}
+%
+% \begin{macro}[int]{\verbatimsc,\endverbatimsc,\@@_verbatimsc_aux:,
+% \@@_vobeyspaces:,\@@_xverb:,\@@_nolig_list:,\@@_xobeysp:}
+% In \hologo{plainTeX} we emulate \LaTeX's \env{verbatim} environment.
+%
% \begin{macrocode}
%<*plain>
-\bool_new:N \l_@@_temp_bool
\cs_new_protected:Npn \verbatimsc
{
\group_begin:
@@ -3279,9 +3273,9 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
\cs_new_protected:Npn \@@_verbatimsc_aux:
{
\skip_vertical:N \parskip
- \int_set:Nn \parindent { 0pt }
+ \dim_zero:N \parindent
\skip_set:Nn \parfillskip { 0pt plus 1fil }
- \int_set:Nn \parskip { 0pt plus0pt minus0pt }
+ \skip_set:Nn \parskip { 0pt plus0pt minus0pt }
\tex_par:D
\bool_set_false:N \l_@@_temp_bool
\cs_set:Npn \par
@@ -3332,20 +3326,28 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
% \end{macrocode}
% \end{macro}
%
+%
+% \subsection{The command \cs{Scontents}}
+%
+% User command to \mymeta{stored content}, adapted from code by Ulrich
+% Diez in \href{https://tex.stackexchange.com/a/472044/7832}{Stringify
+% input - \textbackslash string on token list}
+% and code by user siracusa in
+% \href{https://tex.stackexchange.com/a/500281/7832}{Convert a macro from
+% Latex2e to expl3}
+%
% \begin{macro}{\@@_bsphack:,\@@_esphack:}
-% \pkg{xparse} also requires \LaTeX's §\dospecials§. In case it doesn't
-% exist (at the time \pkg{scontents} is loaded) we define §\dospecials§
-% to use the \cs{l_char_special_seq}.
+% We emulate §\@bsphack§ and §\@esphack§ for \hologo{plainTeX}.
+% This is necessary to prevent unwanted spaces when the §print-cmd§
+% key is false.
% \begin{macrocode}
%<*core>
-\int_new:N \l_@@_save_sf_int
-\dim_new:N \l_@@_save_skip_dim
\cs_new_protected:Npn \@@_bsphack:
{
\scan_stop:
\mode_if_horizontal:T
{
- \dim_set_eq:NN \l_@@_save_skip_dim \tex_lastskip:D
+ \skip_set_eq:NN \l_@@_save_skip \tex_lastskip:D
\int_set_eq:NN \l_@@_save_sf_int \tex_spacefactor:D
}
}
@@ -3355,9 +3357,9 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
\mode_if_horizontal:T
{
\int_set_eq:NN \tex_spacefactor:D \l_@@_save_sf_int
- \dim_compare:nNnT { \l_@@_save_skip_dim } > { \c_zero_dim }
+ \dim_compare:nNnT { \l_@@_save_skip } > { \c_zero_skip }
{
- \dim_compare:nNnT { \tex_lastskip:D } = { \c_zero_dim }
+ \skip_if_eq:nnT { \tex_lastskip:D } { \c_zero_skip }
{
\nobreak
\skip_horizontal:n { \c_zero_skip }
@@ -3374,32 +3376,20 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
% \end{macrocode}
% \end{macro}
%
-% \subsection{The command \cs{Scontents}}
-%
-% User command to \mymeta{stored content}, adapted from
-% \url{https://tex.stackexchange.com/a/500281/7832}.
-%
% \begin{macro}{
% \Scontents,
-% \@@_norm_arg:n,
-% \@@_Scontents_auxi:N,
% \@@_Scontents_internal:nn,
+% \@@_norm_arg:n,
% \@@_verb_arg:w,
-% \@@_verb_arg_internal:n,
% }
-% The §\Scontents§ macro starts by parsing an optional argument and
-% then delegates to \cs{@@_verb_arg:w} or \cs{@@_norm_arg:n} depending whether
-% a star (§*§) argument is present.
-%
-% \cs{@@_norm_arg:n} grabs a normal argument, adds it to the |seq| varaible,
-% and optionally prints it.
-%
-% \cs{@@_verb_arg:w} grabs a verbatim argument using \pkg{xparse}'s |+v|
-% argument parser.
+% The §\Scontents§ command starts by parsing an optional argument to
+% the function \cs{@@_Scontents_internal:nn} then delegates to
+% \cs{@@_verb_arg:w} or \cs{@@_norm_arg:n} depending whether a star
+% (§*§) argument is present.
%
% \begin{macrocode}
%<*loader>
-\NewDocumentCommand { \Scontents }{ !s !O{} }
+\NewDocumentCommand \Scontents { !s !O{} }
{ \@@_Scontents_internal:nn {#1} {#2} }
%</loader>
%<*core>
@@ -3414,17 +3404,43 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
{ \@@_verb_arg:w }
{ \@@_norm_arg:n }
}
+% \end{macrocode}
+%
+% The function \cs{@@_norm_arg:n} grabs a normal argument, adds it to
+% the |seq| varaible and optionally prints it.
+%
+% \begin{macrocode}
\cs_new_protected:Npn \@@_norm_arg:n #1
{
\tl_set:Nn \l_@@_temp_tl {#1}
\@@_Scontents_finish:
}
+% \end{macrocode}
+%
+% The function \cs{@@_verb_arg:w} grabs a verbatim argument using
+% \pkg{xparse}'s |+v| argument parser.
+%
+% \begin{macrocode}
%</core>
%<*loader>
-\NewDocumentCommand { \@@_verb_arg:w } { +v }
+\NewDocumentCommand \@@_verb_arg:w { +v }
{ \@@_verb_arg_internal:n {#1} }
%</loader>
%<*core>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{
+% \@@_verb_arg_internal:n,
+% \@@_Scontents_finish:,
+% \@@_file_write_cmd:nn,
+% \@@_file_write_cmd:VV,
+% }
+%
+% The function \cs{@@_verb_arg_internal:n} replace all §\^^M§ by
+% §\^^J§ then adds it to the |seq| varaible.
+%
+% \begin{macrocode}
\cs_new_protected:Npn \@@_verb_arg_internal:n #1
{
\tl_set:Nn \l_@@_temp_tl {#1}
@@ -3434,8 +3450,10 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
\cs_new_protected:Npn \@@_Scontents_finish:
{
\@@_file_write_cmd:VV \l_@@_fname_out_tl \l_@@_temp_tl
- \@@_finish_storing:NNN \l_@@_temp_tl
- \l_@@_name_seq_cmd_tl \l_@@_print_cmd_bool
+ \@@_finish_storing:NNN
+ \l_@@_temp_tl
+ \l_@@_name_seq_cmd_tl
+ \l_@@_print_cmd_bool
\use:x
{
\group_end:
@@ -3451,6 +3469,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
\iow_close:N \l_@@_file_iow
}
}
+\cs_generate_variant:Nn \@@_file_write_cmd:nn { VV }
\prg_new_protected_conditional:Npnn \@@_file_if_writable:n #1 { T, F, TF }
{
\bool_if:NTF \l_@@_writing_bool
@@ -3474,20 +3493,19 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
}
{ \prg_return_false: }
}
-\cs_generate_variant:Nn \@@_file_write_cmd:nn { VV }
% \end{macrocode}
% \end{macro}
%
% \subsection{The command \cs{getstored}}
%
-% \begin{macro}{\getstored}
+% \begin{macro}{\getstored,\@@_getstored_internal:nn}
% User command §\getstored§ to extract \mymeta{stored content} in |seq|
% (robust).
%
% \begin{macrocode}
%</core>
%<*loader>
-\NewDocumentCommand { \getstored } { O{-1} m }
+\NewDocumentCommand \getstored { O{-1} m }
{ \@@_getstored_internal:nn {#1} {#2} }
%</loader>
%<*core>
@@ -3506,13 +3524,13 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
%
% \subsection{The command \cs{foreachsc}}
%
-% \begin{macro}{\foreachsc}
+% \begin{macro}{\foreachsc,\@@_foreachsc_internal:nn,\@@_foreach_add_body:n}
% User command §\foreachsc§ to loop over \mymeta{stored content} in |seq|.
%
% \begin{macrocode}
%</core>
%<*loader>
-\NewDocumentCommand { \foreachsc } { o m }
+\NewDocumentCommand \foreachsc { o m }
{ \@@_foreachsc_internal:nn {#1} {#2} }
%</loader>
%<*core>
@@ -3561,14 +3579,15 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
%
% \subsection{The command \cs{typestored}}
%
-% \begin{macro}{\typestored,\@@_verb_print:N,\@@_xverb:w,verbatimsc}
+% \begin{macro}{\typestored,\@@_typestored_internal:nn,\@@_verb_print:N,
+% \@@_xverb:w}
% The §\typestored§ commands fetches a buffer from memory, prints it
% to the log file, and then calls \cs{@@_verb_print:N}.
%
% \begin{macrocode}
%</core>
%<*loader>
-\NewDocumentCommand { \typestored } { o m }
+\NewDocumentCommand \typestored { o m }
{ \@@_typestored_internal:nn {#1} {#2} }
%</loader>
%<*core>
@@ -3616,11 +3635,6 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
\cs_set_eq:NN ^^M \@@_verb_print_EOL:
}
\group_end:
-% \end{macrocode}
-%
-% Finally, the §verbatimsc§ environment is defined.
-%
-% \begin{macrocode}
\cs_new_protected:Npn \@@_xverb:
{
\char_set_catcode_active:n { 9 }
@@ -3628,6 +3642,18 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
\@@_xverb:w
}
%</core>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{verbatimsc,\startverbatimsc,\stopverbatimsc}
+% Finally the \hologo{LaTeX} and \hologo{ConTeXt} version of
+% §verbatimsc§ environment is defined.
+%
+% The macro §\endverbatim§ in the second argument of the §verbatimsc§
+% environment is only needed for compatibility with the \pkg{verbatim}
+% package.
+%
+% \begin{macrocode}
%<*loader>
%<*!context>
\use:x
@@ -3645,7 +3671,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
\cs_set_eq:cN { @xverbatim } \@@_xverb:
\verbatim
}
- { }
+ { \endverbatim }
%</latex>
%<context>\definetyping[verbatimsc]
%</loader>
@@ -3653,7 +3679,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
% \end{macrocode}
% \end{macro}
%
-% \subsection{Some auxiliaries}
+% \subsubsection{Some auxiliaries functions}
%
% \begin{macro}{\@@_tabs_to_spaces:}
% In a verbatim context the |TAB| character is made active and set
@@ -3705,9 +3731,8 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
% \end{macro}
%
% \begin{macro}{
-% \@@_set_active_eq:NN,
-% \@@_make_control_chars_active:,
-% }
+% \@@_set_active_eq:NN, \@@_make_control_chars_active:,
+% \@@_plain_disable_outer_par:}
% Shortcut definitions for common catcode changes.
% The §^^L§ needs a special treatment in non-\LaTeX{} mode
% because in Plain\,\TeX{} it is an §\outer§ token.
@@ -3758,7 +3783,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
% \begin{macrocode}
%</core>
%<*loader>
-\NewDocumentCommand { \setupsc } { +m }
+\NewDocumentCommand \setupsc { +m }
{ \keys_set:nn { scontents } {#1} }
%</loader>
%<*core>
@@ -3767,13 +3792,13 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
%
% \subsection{The command \cs{meaningsc}}
%
-% \begin{macro}{\meaningsc}
+% \begin{macro}{\meaningsc,\@@_meaningsc_internal:nn,\@@_meaningsc:n}
% User command §\meaningsc§ to see content stored in |seq|.
%
% \begin{macrocode}
%</core>
%<*loader>
-\NewDocumentCommand { \meaningsc } { o m }
+\NewDocumentCommand \meaningsc { o m }
{ \@@_meaningsc_internal:nn {#1} {#2} }
%</loader>
%<*core>
@@ -3810,7 +3835,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
% \begin{macrocode}
%</core>
%<*loader>
-\NewExpandableDocumentCommand { \countsc } { m }
+\NewExpandableDocumentCommand \countsc { m }
{ \seq_count:c { g_@@_name_#1_seq } }
%</loader>
%<*core>
@@ -3826,7 +3851,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows):
% \begin{macrocode}
%</core>
%<*loader>
-\NewDocumentCommand { \cleanseqsc } { m }
+\NewDocumentCommand \cleanseqsc { m }
{ \seq_clear_new:c { g_@@_name_#1_seq } }
%</loader>
%<*core>
diff --git a/macros/latex/contrib/scontents/scontents.ins b/macros/latex/contrib/scontents/scontents.ins
index c5770ae484..32b3e52331 100644
--- a/macros/latex/contrib/scontents/scontents.ins
+++ b/macros/latex/contrib/scontents/scontents.ins
@@ -1,9 +1,9 @@
-\input l3docstrip.tex
+\input docstrip.tex
\keepsilent
\askforoverwritefalse
\declarepreamble\standard
-Copyright (C) 2019-2020 by Pablo González L <pablgonz@educarchile.cl>
+Copyright (C) 2019-2022 by Pablo González L <pablgonz@educarchile.cl>
This work may be distributed and/or modified under the conditions of the
LaTeX Project Public License, either version 1.3c of this license or (at
@@ -33,11 +33,11 @@ and the derived files scontents.sty,
\declarepreamble\context
\string\module
[ file=t-scontents,
- version=1.9,
+ version=2.0,
title=\string\CONTEXT\ User Module,
subtitle=Storing Contents,
author=Pablo González,
- date=2020-01-21,
+ date=2022-04-04,
copyright=Pablo González,
email=pablgonz@educarchile.cl,
license=LPPL]
@@ -60,7 +60,7 @@ and the derived files scontents.sty,
\Msg{* To finish the installation you have to move the files into a }
\Msg{* directory searched by TeX. See README.md for instructions.}
\Msg{*}
-\Msg{* To produce the documentation with source code run xelatex }%
+\Msg{* To produce the documentation with source code run lualatex }%
\Msg{* thrice on file scontents.dtx }%
\Msg{*}
\Msg{* Happy TeXing!}
diff --git a/macros/latex/contrib/scontents/scontents.pdf b/macros/latex/contrib/scontents/scontents.pdf
index 4b5dfbc9c3..73255df198 100644
--- a/macros/latex/contrib/scontents/scontents.pdf
+++ b/macros/latex/contrib/scontents/scontents.pdf
Binary files differ
diff --git a/macros/latex/contrib/siunitx/CHANGELOG.md b/macros/latex/contrib/siunitx/CHANGELOG.md
index 63b5abae99..cec77aae34 100644
--- a/macros/latex/contrib/siunitx/CHANGELOG.md
+++ b/macros/latex/contrib/siunitx/CHANGELOG.md
@@ -7,6 +7,14 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to
## [Unreleased]
+## [v3.0.50] - 2022-04-04
+
+### Fixed
+- Spacing of sign when using "output-exponent-marker" (see issue
+ [\#600](https://github.com/josephwright/siunitx/issues/600))
+- Behavior of "minimum-decimal-digits" with uncertainties (see issue
+ [\#601](https://github.com/josephwright/siunitx/issues/601))
+
## [v3.0.49] - 2022-02-15
### Added
@@ -1721,7 +1729,8 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to
### Added
- First public testing release (as `si`)
-[Unreleased]: https://github.com/josephwright/siunitx/compare/v3.0.49...HEAD
+[Unreleased]: https://github.com/josephwright/siunitx/compare/v3.0.50...HEAD
+[v3.0.50]: https://github.com/josephwright/siunitx/compare/v3.0.49...v3.0.50
[v3.0.49]: https://github.com/josephwright/siunitx/compare/v3.0.48...v3.0.49
[v3.0.48]: https://github.com/josephwright/siunitx/compare/v3.0.47...v3.0.48
[v3.0.47]: https://github.com/josephwright/siunitx/compare/v3.0.46...v3.0.47
diff --git a/macros/latex/contrib/siunitx/siunitx-code.pdf b/macros/latex/contrib/siunitx/siunitx-code.pdf
index 6537e87694..6b05035a14 100644
--- a/macros/latex/contrib/siunitx/siunitx-code.pdf
+++ b/macros/latex/contrib/siunitx/siunitx-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/siunitx/siunitx-number.dtx b/macros/latex/contrib/siunitx/siunitx-number.dtx
index 19b505bc33..4f3708e706 100644
--- a/macros/latex/contrib/siunitx/siunitx-number.dtx
+++ b/macros/latex/contrib/siunitx/siunitx-number.dtx
@@ -2112,9 +2112,9 @@
%
% \begin{macro}{\@@_digits:NN}
% \begin{macro}[EXP]{\@@_digits:nnnnnnn}
-% \begin{macro}[EXP]{\@@_digits:Nn}
% \begin{macro}[EXP]{\@@_digits:nn}
-% \begin{macro}[EXP]{\@@_digits_S:n}
+% \begin{macro}[EXP]{\@@_digits_uncert:nnn}
+% \begin{macro}[EXP]{\@@_digits_uncert_S:nn}
% Forcing a minimum number of digits in each part is quite easy. As
% the common case is that we don't do anything here, there is no real need
% to optimise the calculation (normally also numbers have only a few digits).
@@ -2128,31 +2128,37 @@
{
\exp_not:n { {#1} {#2} }
{
- \@@_digits:Nn \l_@@_min_integer_int {#3}
+ \@@_digits:nn \l_@@_min_integer_int {#3}
\exp_not:n {#3}
}
{
\exp_not:n {#4}
- \@@_digits:Nn \l_@@_min_decimal_int {#4}
+ \@@_digits:nn \l_@@_min_decimal_int {#4}
}
- { \tl_if_blank:nF {#5} { \@@_digits_uncert:nn #5 } }
+ { \tl_if_blank:nF {#5} { \@@_digits_uncert:nnn {#4} #5 } }
\exp_not:n { {#6} {#7} }
}
-\cs_new:Npn \@@_digits:Nn #1#2
+\cs_new:Npn \@@_digits:nn #1#2
{
\int_compare:nNnT
{ #1 - \tl_count:n {#2} } > 0
- { \prg_replicate:nn { #1 - \tl_count:n {#2} } { 0 } }
+ { \prg_replicate:nn { #1 - \tl_count:n {#2} } { 0 } }
}
-\cs_new:Npn \@@_digits_uncert:nn #1#2
+\cs_new:Npn \@@_digits_uncert:nnn #1#2#3
{
- { #1 }
- { \use:c { @@_digits_uncert_ #1 :n } {#2} }
+ { #2 }
+ { \use:c { @@_digits_uncert_ #2 :nn } {#1} {#3} }
}
-\cs_new:Npn \@@_digits_uncert_S:n #1
+\cs_new:Npn \@@_digits_uncert_S:nn #1#2
{
- \exp_not:n {#1}
- \@@_digits:Nn \l_@@_min_decimal_int {#1}
+ \exp_not:n {#2}
+ \@@_digits:nn
+ {
+ \int_max:nn
+ { 0 }
+ { \l_@@_min_decimal_int - \tl_count:n {#1} + 1 }
+ }
+ {#2}
}
% \end{macrocode}
% \end{macro}
@@ -3643,25 +3649,25 @@
\exp_not:n {#5}
\exp_not:V \l_@@_exponent_base_tl
^
- { \@@_output_exponent_auxiii:nn {#1} {#2} }
+ { \@@_output_exponent_auxiii:nnn { } {#1} {#2} }
}
\cs_new:Npn \@@_output_exponent_auxii:nnnnn #1#2#3#4#5
{
\exp_not:n {#5}
\exp_not:V \l_@@_output_exp_marker_tl
- \@@_output_exponent_auxiii:nn {#1} {#2}
+ \@@_output_exponent_auxiii:nnn { \mathord } {#1} {#2}
}
-\cs_new:Npn \@@_output_exponent_auxiii:nn #1#2
+\cs_new:Npn \@@_output_exponent_auxiii:nnn #1#2#3
{
- \tl_if_blank:nTF {#1}
+ \tl_if_blank:nTF {#2}
{
\bool_lazy_and:nnT
{ \l_@@_implicit_plus_bool }
- { ! \str_if_eq_p:nn {#2} { 0 } }
- { + }
+ { ! \str_if_eq_p:nn {#3} { 0 } }
+ { #1 + }
}
- { \exp_not:n {#1} }
- \@@_output_digits:nn { integer } {#2}
+ { \exp_not:n {#1#2} }
+ \@@_output_digits:nn { integer } {#3}
}
% \end{macrocode}
% A do-nothing marker used to allow shuffling of the output and so expandable
diff --git a/macros/latex/contrib/siunitx/siunitx.dtx b/macros/latex/contrib/siunitx/siunitx.dtx
index 0bd7fa2a8a..d1de5e34da 100644
--- a/macros/latex/contrib/siunitx/siunitx.dtx
+++ b/macros/latex/contrib/siunitx/siunitx.dtx
@@ -121,7 +121,7 @@
%
% Identify the package and give the over all version information.
% \begin{macrocode}
-\ProvidesExplPackage {siunitx} {2022-02-15} {3.0.49}
+\ProvidesExplPackage {siunitx} {2022-04-04} {3.0.50}
{A comprehensive (SI) units package}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/siunitx/siunitx.pdf b/macros/latex/contrib/siunitx/siunitx.pdf
index d737b16cf8..f66535f7ea 100644
--- a/macros/latex/contrib/siunitx/siunitx.pdf
+++ b/macros/latex/contrib/siunitx/siunitx.pdf
Binary files differ