diff options
author | Norbert Preining <norbert@preining.info> | 2022-04-05 03:01:24 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2022-04-05 03:01:24 +0000 |
commit | a4e931576165d0a4a143915f4725399272e06fee (patch) | |
tree | ef5b6d71c2223b9f58e61fbb25423d4042430198 /macros/latex/contrib | |
parent | 7548e4d37c2aaefd32fe0a9bcd83f8e71326dde1 (diff) |
CTAN sync 202204050301
Diffstat (limited to 'macros/latex/contrib')
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 Binary files differindex e187bcbc51..9e0720ff4c 100644 --- a/macros/latex/contrib/colorist/colorist-doc.pdf +++ b/macros/latex/contrib/colorist/colorist-doc.pdf 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 Binary files differnew file mode 100644 index 0000000000..f678973899 --- /dev/null +++ b/macros/latex/contrib/commonunicode/doc/commonunicode.pdf 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 Binary files differindex 4a834618d8..88711cb5f5 100644 --- a/macros/latex/contrib/minimalist/minimalist-doc.pdf +++ b/macros/latex/contrib/minimalist/minimalist-doc.pdf 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><sequences></code> using the `l3seq` module of `expl3`. The <code><stored content></code> can be used as many times as desired in the document, additionally you can write to <code><external files></code> or show it in <code><verbatim style></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><scontents.pdf></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 Binary files differindex 4b5dfbc9c3..73255df198 100644 --- a/macros/latex/contrib/scontents/scontents.pdf +++ b/macros/latex/contrib/scontents/scontents.pdf 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 Binary files differindex 6537e87694..6b05035a14 100644 --- a/macros/latex/contrib/siunitx/siunitx-code.pdf +++ b/macros/latex/contrib/siunitx/siunitx-code.pdf 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 Binary files differindex d737b16cf8..f66535f7ea 100644 --- a/macros/latex/contrib/siunitx/siunitx.pdf +++ b/macros/latex/contrib/siunitx/siunitx.pdf |