summaryrefslogtreecommitdiff
path: root/macros
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2021-07-24 03:01:03 +0000
committerNorbert Preining <norbert@preining.info>2021-07-24 03:01:03 +0000
commit9c5706814f2f593a9f52c51ad02b61e9bacd9ee4 (patch)
treefd31ea72f451724d8ad7908c945f0f6a40cdcda9 /macros
parent9e46b83b2d49ad6f5d4285266a81c9af1dd3d74e (diff)
CTAN sync 202107240301
Diffstat (limited to 'macros')
-rw-r--r--macros/latex/contrib/easybook/easybook.dtx35
-rw-r--r--macros/latex/contrib/easybook/easybook.pdfbin598988 -> 599164 bytes
-rw-r--r--macros/latex/contrib/ifallfalse/README.md4
-rw-r--r--macros/latex/contrib/ifallfalse/ifallfalse.dtx47
-rw-r--r--macros/latex/contrib/ifallfalse/ifallfalse.pdfbin176927 -> 178390 bytes
-rw-r--r--macros/latex/contrib/macrolist/README.md2
-rw-r--r--macros/latex/contrib/macrolist/macrolist.dtx13
-rw-r--r--macros/latex/contrib/macrolist/macrolist.pdfbin188569 -> 184302 bytes
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-french.pdfbin463891 -> 466543 bytes
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-french.tex84
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix.dtx416
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix.pdfbin1339461 -> 1355018 bytes
-rw-r--r--macros/latex/contrib/projlib/ProjLib-doc-cn.pdfbin326597 -> 327901 bytes
-rw-r--r--macros/latex/contrib/projlib/ProjLib-doc-en.pdfbin202113 -> 204461 bytes
-rw-r--r--macros/latex/contrib/projlib/ProjLib-doc-fr.pdfbin203801 -> 206071 bytes
-rw-r--r--macros/latex/contrib/projlib/ProjLib-doc.dtx17
-rw-r--r--macros/latex/contrib/projlib/ProjLib.dtx34
-rw-r--r--macros/latex/contrib/spbmark/spbmark.dtx56
-rw-r--r--macros/latex/contrib/spbmark/spbmark.pdfbin68498 -> 68676 bytes
-rw-r--r--macros/luatex/generic/luaxml/README2
-rw-r--r--macros/luatex/generic/luaxml/luaxml-domobject.lua3
-rw-r--r--macros/luatex/generic/luaxml/luaxml-namedentities.lua4167
-rw-r--r--macros/luatex/generic/luaxml/luaxml-transform.lua281
-rw-r--r--macros/luatex/generic/luaxml/luaxml.pdfbin107935 -> 118190 bytes
-rw-r--r--macros/luatex/generic/luaxml/luaxml.tex260
25 files changed, 3095 insertions, 2326 deletions
diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx
index 6f1bd7bf07..accfe35b85 100644
--- a/macros/latex/contrib/easybook/easybook.dtx
+++ b/macros/latex/contrib/easybook/easybook.dtx
@@ -28,7 +28,7 @@
%
% \title{\sffamily easybook 文档类手册}
% \author{瞿毅}
-% \date{2021/07/22\hskip 1em\relax v1.27L\thanks{\url{https://gitee.com/texl3/easybook}}}
+% \date{2021/07/22\hskip 1em\relax v1.27N\thanks{\url{https://gitee.com/texl3/easybook}}}
%
% \maketitle
% \begin{abstract}
@@ -148,7 +148,7 @@
% cjkfont = <adobe|fandol|founder|mac|macnew|macold|ubuntu|windows|none>
% \end{syntax}
% 中文字体采用 \CTeX 宏集包含的字库并与其一致,具体配置方案可以查看 \CTeX 使用手册。它与 \opt{fontset} 选项是等效的,如果没有指定 \opt{cjkfont} 的值,将会自动检测用户的操作系统并选择相应的字体。
-% \changes{v1.27L}{2021/07/12}{新增 \opt{cjkfont} 选项设置中文字体,原 \opt{font} 选项设置英文字体,中文字体使用 \CTeX 的字库。}
+% \changes{v1.27N}{2021/07/12}{新增 \opt{cjkfont} 选项设置中文字体,原 \opt{font} 选项设置英文字体,中文字体使用 \CTeX 的字库。}
% \end{function}
%
% 如果需要使用其它中文字体,可以在启用选项 \opt{cjkfont = none} 后,再使用 \pkg{xeCJK} 宏包的相关命令设置字体以及声明字体族:
@@ -548,7 +548,7 @@
% \end{function}
%
% \begin{optdesc}
-% \item[thmbox] 开启定理环境盒子的边框,需载入 \pkg{tcolorbox} 宏包才生效。这个选项与 \pkg{thmtools} 中并不一致,\pkg{thmtools} 的同名选项包括 L、M 和 S 三个参数。
+% \item[thmbox] 开启定理环境盒子的边框,需载入 \pkg{tcolorbox} 宏包才生效。这个选项与 \pkg{thmtools} 中并不一致,\pkg{thmtools} 的同名选项包括 \opt{L}、\opt{M} 和 \opt{S} 三个参数。
% \item[within] 定理编号跟随的计数器,默认跟随章的编号,也可以跟随其它定理环境的编号,当计数器增加时定理编号会从零开始,空置时不跟随其它计数器。
% \item[headpunct] 定理标题末尾后的标记,在换行符或第一段内容的间隔之前。
% \item[bodyfont] 定理内容部分的字体,包括字体族、字体系列、字体尺寸和字体形状命令。
@@ -684,7 +684,7 @@
% \tn{easyfoot}\oarg{位置}\marg{内容}
% \tn{markrule}\oarg{长度|(\tn{textwidth})}\parg{颜色名}\marg{线宽|(0.75pt)}[<上间距>+<下间距>]
% \end{syntax}
-% 命令 \tn{easyhead} 和 \tn{easyfoot} 的使用方法与 \tn{fancyhead} 和 \tn{fancyfoot} 完全相同,它们需要在 \opt{head-foot} 选项中使用,设置的是一个名为 \opt{fancy} 的页面风格。\pkg{fancyhdr} 将页眉页脚分成了左中右和奇数页(odd)、偶数页(even)共12个部分,可选参数中E、O代表偶数、奇数,L、C 和 R 代表左、中和右部分。单面打印时,含有偶数的选项无效。
+% 命令 \tn{easyhead} 和 \tn{easyfoot} 的使用方法与 \tn{fancyhead} 和 \tn{fancyfoot} 完全相同,它们需要在 \opt{head-foot} 选项中使用,设置的是一个名为 \opt{fancy} 的页面风格。\pkg{fancyhdr} 将页眉页脚分成了左中右和奇数页(odd)、偶数页(even)共 12 个部分,可选参数中 \opt{E} 和 \opt{O} 代表偶数和奇数,\opt{L}、\opt{C} 和 \opt{R} 代表左、中和右部分。单面打印时,含有偶数的选项无效。
% \changes{v1.26}{2021/06/14}{增加页眉页脚的横线绘制命令 \tn{markrule}。}
% \end{function}
%
@@ -717,7 +717,7 @@
% \end{syntax}
% \ding{229} 以上选项路径为 \opt{hdrset/...} \\
% \changes{v1.25}{2021/05/12}{增加脚注样式设置选项。}
-% \changes{v1.27L}{2021/07/14}{增加脚注内容格式选项 \opt{fntext-form} 和脚注类型选项 \opt{footnotetype}。}
+% \changes{v1.27N}{2021/07/14}{增加脚注内容格式选项 \opt{fntext-form} 和脚注类型选项 \opt{footnotetype}。}
% \end{function}
%
% \begin{optdesc}
@@ -747,7 +747,7 @@
% numsep = <编号后间距|(1em)>
% \end{syntax}
% \ding{229} 以上选项路径为 \opt{tocset/(level)/...} \\
-% \opt{tocset} 将目录样式交给 \pkg{titletoc} 处理,\opt{(level)} 代表 part、chapter、section、subsection、figure、table 和 lstlisting 级别的目录,而使用 list 级别可以统一设置图片、表格和代码目录的样式。
+% \opt{tocset} 将目录样式交给 \pkg{titletoc} 处理,\opt{(level)} 代表 \opt{part}、\opt{chapter}、\opt{section}、\opt{subsection}、\opt{figure}、\opt{table} 和 \opt{lstlisting} 级别的目录,而使用 \opt{list} 级别可以统一设置图片、表格和代码目录的样式。
% \changes{v1.21}{2021/01/13}{增加配置目录样式的选项。}
% \changes{v1.24}{2021/04/20}{增加目录中编号与标题的间距选项 \opt{numsep}。}
% \changes{v1.25}{2021/05/14}{可以分别设置图片、表格和代码目录的格式。}
@@ -905,7 +905,7 @@
% \tn{end}\{hangparas\}
% \end{syntax}
% \tn{hangpara} 命令使其后的一个段落保持悬挂缩进,\env{hangparas} 环境使其中的段落均保持悬挂缩进。缩进将以 \meta{缩进长度} 从每个段落的 \meta{缩进开始行数} 开始。
-% \changes{v1.27L}{2021/07/11}{增加悬挂缩进段落命令 \tn{hangpara} 和环境 \env{hangparas}。}
+% \changes{v1.27N}{2021/07/11}{增加悬挂缩进段落命令 \tn{hangpara} 和环境 \env{hangparas}。}
% \end{function}
%
% \subsection{代码}
@@ -1079,7 +1079,7 @@
% \tn{end}\{eqcomp\}
% \end{syntax}
% 一些公式之后可以使用基于列表环境的 \env{eqcomp} 进行符号对照。\tn{symb} 需要在环境内使用,带有星号的命令可单独在文本段落使用。对照列表第二个 \meta{键值列表} 与 \pkg{enumitem} 的选项相同,一般较少用到,可以用于设置垂直间距等。第一个 \meta{键值列表} 也可以使用 \tn{seteqcomp} 全局设置,选项如下:
-% \changes{v1.27L}{2021/07/22}{增加公式符号对照环境 \env{eqcomp} 和命令 \tn{symb}。}
+% \changes{v1.27N}{2021/07/22}{增加公式符号对照环境 \env{eqcomp} 和命令 \tn{symb}。}
% \end{function}
%
% \begin{function}{width,delim,space,item-align,delim-align,intro,font,mode}
@@ -1099,8 +1099,8 @@
% \item[width] 设置适当的符号宽度可以防止文字重叠和边界溢出等问题。
% \item[delim] 符号对照的引导符,\tn{symb} 的 \meta{引导符} 和对齐方式是基于这个符号的宽度。
% \item[space] 符号间隙为引导符两侧与符号和说明文字间的距离。
-% \item[item-align] 符号的对齐方式,分为左(l)、中(c)和右(r)三种对齐方式。
-% \item[delim-align] 引导符的对齐方式,分为左(l)、中(c)和右(r)三种对齐方式。
+% \item[item-align] 符号的对齐方式,分为左(\opt{l})、中(\opt{c})和右(\opt{r})三种对齐方式。
+% \item[delim-align] 引导符的对齐方式,分为左(\opt{l})、中(\opt{c})和右(\opt{r})三种对齐方式。
% \item[intro] 符号对照的说明文字,应当为简短的几个字,只显示在第一行,其后为悬挂缩进的对照列表。
% \item[font] 符号的字体,数学和文本符号模式应采用不同的字体命令,最后一个命令可以接受一个参数,这个参数为符号。
% \item[mode] 符号字体模式,可以为数学字体或者文本字体。
@@ -1308,6 +1308,13 @@
% \newblock (2020-12-31)
% \urlprefix\url{https://www.ctan.org/pkg/biblatex}
%
+% \bibitem{eqexpl}
+% Konstantin Morenko.
+% \newblock \textit{The \pkg{eqexpl} package} [EB/OL].
+% \newblock version 1.1,
+% \newblock (2019-07-01)
+% \urlprefix\url{https://www.ctan.org/pkg/eqexpl}
+%
% \bibitem{xmuthesis}
% Camuse Cao.
% \newblock \textit{\pkg{xmuthesis}: 厦门大学论文模板} [EB/OL].
@@ -1327,7 +1334,7 @@
%<*class>
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
\RequirePackage{l3keys2e}
-\ProvidesExplClass{easybook}{2021/07/22}{1.27L}
+\ProvidesExplClass{easybook}{2021/07/22}{1.27N}
{Typeset Chinese theses or books}
\bool_set_false:N \l__eb_compile_draft_bool
@@ -1621,7 +1628,7 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
\RequirePackage{l3keys2e,etoolbox}
-\ProvidesExplPackage{easybase}{2021/07/22}{1.27L}
+\ProvidesExplPackage{easybase}{2021/07/22}{1.27N}
{Typeset Chinese theses or books}
\cs_generate_variant:Nn \int_to_arabic:n { v }
@@ -3001,7 +3008,7 @@
item-align .initial:n = r,
delim-align .tl_set:N = \l__eb_eqsymb_delim_align_tl,
delim-align .initial:n = c,
- intro .tl_set: = \l__eb_eqsymb_intro_tl,
+ intro .tl_set:N = \l__eb_eqsymb_intro_tl,
font .tl_set:N = \l__eb_eqsymb_font_tl,
mode .tl_set:N = \l__eb_eqsymb_mode_tl,
mode .initial:n = math
@@ -3562,7 +3569,7 @@
}
%</package>
%<*tcolorbox>
-\ProvidesExplFile{eb-tcolorbox.cfg}{2021/07/22}{1.27L}
+\ProvidesExplFile{eb-tcolorbox.cfg}{2021/07/22}{1.27N}
{Customization of tcolorbox for easybook}
\cs_new_protected:Npn \eb_tcb_theorem_set:n #1
diff --git a/macros/latex/contrib/easybook/easybook.pdf b/macros/latex/contrib/easybook/easybook.pdf
index 2462854b67..d1fb4c495f 100644
--- a/macros/latex/contrib/easybook/easybook.pdf
+++ b/macros/latex/contrib/easybook/easybook.pdf
Binary files differ
diff --git a/macros/latex/contrib/ifallfalse/README.md b/macros/latex/contrib/ifallfalse/README.md
index 925d98f471..072e82ff87 100644
--- a/macros/latex/contrib/ifallfalse/README.md
+++ b/macros/latex/contrib/ifallfalse/README.md
@@ -1,4 +1,4 @@
-# The LaTeX package ifallfalse - version 1.0.1 (2021/07/12)
+# The LaTeX package ifallfalse - version 2.0.0 (2021/07/22)
> Copyright (C) 2021 Dennis Chen <proofprogram@gmail.com>
>
@@ -36,4 +36,4 @@ Run
pdflatex ifallfalse.dtx
-to generate `ifallfalse.pdf`, which contains the package documentation.
+to generate `ifallfalse.pdf`, which contains the package documentation. \ No newline at end of file
diff --git a/macros/latex/contrib/ifallfalse/ifallfalse.dtx b/macros/latex/contrib/ifallfalse/ifallfalse.dtx
index 9d5e630f73..adfe09065e 100644
--- a/macros/latex/contrib/ifallfalse/ifallfalse.dtx
+++ b/macros/latex/contrib/ifallfalse/ifallfalse.dtx
@@ -15,7 +15,7 @@
% \iffalse
%<package>
%<package>\NeedsTeXFormat{LaTeX2e}
-%<package>\ProvidesPackage{ifallfalse}[2021/07/12 v1.0.1 Compare string against set of other strings]
+%<package>\ProvidesPackage{ifallfalse}[2021/07/22 v2.0.0 Compare string against set of other strings]
%<*driver>
\documentclass{ltxdoc}
@@ -30,14 +30,16 @@
%</driver>
% \fi
%
-% \changes{v.1.0.1}{2021/07/12}{Fix errant references to allfalse environment and add limitations}
+% \changes{v2.0.0}{2021/07/22}{Add comments after lines in allfalse to prevent extra spacing from popping up}
+% \changes{v1.0.1}{2021/07/12}{Fix errant references to allfalse environment and add limitations}
% \changes{v1.0.0}{2021/07/01}{Initial version}
%
% \GetFileInfo{ifallfalse.sty}
%
% \title{\textsf{ifallfalse} -- Compare string against set of strings}
% \author{Dennis Chen \\ proofprogram@gmail.com}
-% \date{\fileversion, v. \filedate\thanks{\url{https://github.com/chennisden/ifallfalse}}}
+% \changes{v2.0.0}{2021/07/22}{Remove errant `v' in date}
+% \date{\fileversion, \filedate\thanks{\url{https://github.com/chennisden/ifallfalse}}}
%
% \maketitle
%
@@ -52,11 +54,11 @@
% \DescribeEnv{allfalse}
% To set up an allfalse environment, simply write
% \begin{verbatim}
-%\begin{allfalse}{string}{action}
+%\begin{allfalse}{string}{true branch}{false branch}
%
%\end{allfalse}
% \end{verbatim}
-% \textsf{string} will be compared to the set of strings (which we will declare via |\orcheck|), and if \textsf{string} does not match the set of strings, \textsf{action} will be executed.
+% \textsf{string} will be compared to the set of strings (which we will declare via |\orcheck|), and if \textsf{string} does not match the set of strings, \textsf{false branch} will be executed. Otherwise, \textsf{true branch} will be executed.
%
% \DescribeMacro{\orcheck}
%
@@ -71,12 +73,16 @@
% \section{Example}
%
% Here is a simple example to demonstrate how \textsf{allfalse} is used.
+%
+% \changes{v2.0.0}{2021/07/22}{Change allfalse environment to match update}
+% \changes{v2.0.0}{2021/07/22}{Use ifallfalse package in example}
% \begin{verbatim}
%\documentclass{minimal}
+%\usepackage{ifallfalse}
%
%\begin{document}
%
-%\begin{allfalse}{purple}{This color is not red, blue, or green!}
+%\begin{allfalse}{purple}{}{This color is not red, blue, or green!}
% \orcheck{red}
% \orcheck{blue}
% \orcheck{green}
@@ -85,24 +91,35 @@
%\end{document}
% \end{verbatim}
%
-% In this case, because \textsf{purple} does not match \textsf{red}, \textsf{blue}, or \textsf{green}, the action --- which is printing \textsf{This color is not red, blue, or green!} --- will execute at that location inside the document.
+% In this case, because \textsf{purple} does not match \textsf{red}, \textsf{blue}, or \textsf{green}, the false branch --- which is \textsf{This color is not red, blue, or green!} --- will execute at that location inside the document.
%
% \section{Implementation}
%
% These are the implementation details of package \textsf{allfalse}. Because the package is so short, we can explain everything.
%
+% \changes{v2.0.0}{2021/07/22}{Create true and false branch}
% \begin{environment}{allfalse}
% When setting up allfalse, we locally define the |\comparedstring| macro with the first argument that the environment takes in. This is what will be compared against all the strings passed in through the |\orcheck| declarations inside the environment.
%
% Then, we define our body of logic (which we will be adding onto through |\orcheck|) to just initially consist of the action we would like to perform if |\comparedstring| matches none of the strings passed in through |\orcheck|.
+%
+% Finally, we execute our logicbody, which will change |\ifallfalse@branch| to be false if appropriate. Then, the appropriate action will be executed.
% \begin{macrocode}
-\newenvironment{allfalse}[2]
-{
- \def\comparedstring{#1}
- \def\logicbody{#2}
+\newenvironment{allfalse}[3]
+{%
+ \newif\ifallfalse@branch\allfalse@branchtrue%
+ \def\comparedstring{#1}%
+ \def\trueaction{#2}%
+ \def\falseaction{#3}%
+ \def\logicbody{\protect\allfalse@branchfalse}%
}
-{
- \logicbody
+{%
+ \logicbody%
+ \ifallfalse@branch
+ \trueaction%
+ \else
+ \falseaction%
+ \fi
}
% \end{macrocode}
% \end{environment}
@@ -118,10 +135,10 @@
% \begin{verbatim}
% \if\else
% \if\else
-% \ldots action
+% \ldots \allfalse@branchfalse
% \fi\ldots \fi
% \end{verbatim}
-% Logically, \textsf{action} will only execute if all the conditions are false; in other words, it will only execute if |\comparedstring| does not match any of the strings passed in via |\orcheck|. This is because each |\else| branch must execute.
+% Logically, |\allfalse@branchfalse| will only execute if all the conditions are false; in other words, it will only execute if |\comparedstring| does not match any of the strings passed in via |\orcheck|. This is because each |\else| branch must execute.
% \end{itemize}
% \begin{macrocode}
\newcommand*\@allfalsename{allfalse}
diff --git a/macros/latex/contrib/ifallfalse/ifallfalse.pdf b/macros/latex/contrib/ifallfalse/ifallfalse.pdf
index 44df77fa26..a8bdb834f2 100644
--- a/macros/latex/contrib/ifallfalse/ifallfalse.pdf
+++ b/macros/latex/contrib/ifallfalse/ifallfalse.pdf
Binary files differ
diff --git a/macros/latex/contrib/macrolist/README.md b/macros/latex/contrib/macrolist/README.md
index 61ac3d679d..8eff3b4f96 100644
--- a/macros/latex/contrib/macrolist/README.md
+++ b/macros/latex/contrib/macrolist/README.md
@@ -1,4 +1,4 @@
-# The LaTeX package macrolist - version 1.0.2 (2021/07/17)
+# The LaTeX package macrolist - version 1.1.1 (2021/07/23)
> Copyright (C) 2021 Dennis Chen <proofprogram@gmail.com>
>
diff --git a/macros/latex/contrib/macrolist/macrolist.dtx b/macros/latex/contrib/macrolist/macrolist.dtx
index 7a564fc448..3ccbc85edc 100644
--- a/macros/latex/contrib/macrolist/macrolist.dtx
+++ b/macros/latex/contrib/macrolist/macrolist.dtx
@@ -16,7 +16,7 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{macrolist}[2021/07/16 v1.0.1 Create lists of macros and perform operations on them]
+\ProvidesPackage{macrolist}[2021/07/23 v1.1.1 Create lists of macros and perform operations on them]
\RequirePackage{pgffor}
%</package>
@@ -75,6 +75,14 @@
}
% \fi
%
+% \changes{v1.1.0}{2021/07/22}{Add listexists}
+% \DescribeMacro{\listexists}
+% Writing |\listexists{listname}{true}{false}| will execute \textsf{true} if \textsf{listname} exists and \textsf{false} otherwise.
+%
+% \iffalse
+\newcommand{\listexists}[3]{\ifcsname c@macrolist@list@#1\endcsname#2\else#3\fi}
+% \fi
+%
% \DescribeMacro{\listelement}
%
% To execute the \textsf{i}th element of \textsf{listname}, write |\listelement{listname}{i}|. Note that \textit{lists are 1-indexed}, meaning the first element is numbered 1, the second element numbered 2, and so on.
@@ -178,10 +186,11 @@
% \fi
%
% \DescribeMacro{\listforeach}
+% \changes{v1.1.1}{2021/07/23}{Fix foreach doc by removing incorrect begin}
%
% To write a for each loop, write
% \begin{verbatim}
-%\begin{listforeach}{listname}{\element}[begin][end]{action}
+%\listforeach{listname}{\element}[begin][end]{action}
% \end{verbatim}
%
%
diff --git a/macros/latex/contrib/macrolist/macrolist.pdf b/macros/latex/contrib/macrolist/macrolist.pdf
index 1f5be69f8b..94986e435d 100644
--- a/macros/latex/contrib/macrolist/macrolist.pdf
+++ b/macros/latex/contrib/macrolist/macrolist.pdf
Binary files differ
diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.pdf b/macros/latex/contrib/nicematrix/nicematrix-french.pdf
index 8f455bfe5d..6965309fe9 100644
--- a/macros/latex/contrib/nicematrix/nicematrix-french.pdf
+++ b/macros/latex/contrib/nicematrix/nicematrix-french.pdf
Binary files differ
diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.tex b/macros/latex/contrib/nicematrix/nicematrix-french.tex
index 4db0a583f1..d941d2f9f8 100644
--- a/macros/latex/contrib/nicematrix/nicematrix-french.tex
+++ b/macros/latex/contrib/nicematrix/nicematrix-french.tex
@@ -29,8 +29,6 @@
\titlespacing*{\section}{0pt}{6.5ex plus 1ex minus .2ex}{4.3ex plus .2ex}
\titlespacing*{\subsection}{0pt}{4.5ex plus 1ex minus .2ex}{2ex plus .2ex}
-\usepackage{multicol}
-\setlength{\columnseprule}{0.4pt}
\def\LetterAt{@}
\def\interitem{\vspace{7mm plus 2 mm minus 3mm}}
@@ -524,7 +522,7 @@ couleur ;
couleur (la valeur par défaut de cette clé est la couleur courante des filets du
tableau) ;
\item la clé |color| prend en argument une couleur et l'applique au contenu et
-trace également le cadre avec cette couleur.
+trace également le cadre avec cette couleur ;
\item la clé |line-width| fixe la largeur des filets servant pour le cadre (n'a
d'intérêt que si |draw| ou |hvlines| est utilisée) ;
\item la clé |rounded-corners| impose des coins arrondis (pour le cadre dessiné
@@ -536,7 +534,15 @@ cette clé prend comme valeur une liste d'éléments parmi les suivants : |left|
|right|, |top| et |bottom| ;
\item les clés |t| et |b| réglent la ligne de base qui sera donnée au bloc quand
celui-ci est constitué de plusieurs lignes (séparées par la commande |\\|) ;
-\item la clé |hvlines| trace tous les filets horizontaux et verticaux dans le bloc.
+\item la clé |hvlines| trace tous les filets horizontaux et verticaux dans le
+bloc ;
+\item \colorbox{yellow!50}{\textbf{Nouveau 5.19}}\enskip quand la clé |tikz| est
+utilisée, le chemin Tikz correspondant au rectangle délimitant le bloc est
+exécuté avec Tikz\footnote{Tikz doit être chargé préalablement (par défaut,
+ \pkg{nicematrix} ne charge que \textsc{pgf}), faute de quoi, une erreur sera
+ levée.} en utilisant comme options la valeur de cette clé |tikz| (qui doit
+donc être une liste de clés Tikz applicables à un chemin de Tikz). Pour des
+exemple d'utilisation de cette clé |tikz|, voir p.~\pageref{tikz-key-examples}.
\end{itemize}
@@ -932,7 +938,7 @@ p.~\pageref{OnlyMainNiceMatrix}.
Les outils proposés par \pkg{nicematrix} pour tracer des filets sont les
suivants :
\begin{itemize}
-\item les clés |hlines|, |vlines| et |hvlines| ;
+\item les clés |hlines|, |vlines|, |hvlines| et |hvlines-except-borders|;
\item le spécificateur «\verb+|+» dans le préambule (pour les environnements à
préambule) ;
\item la commande |\Hline|.
@@ -986,7 +992,7 @@ $\begin{pNiceMatrix}[vlines,rules/width=0.2pt]
-\subsubsection{La clé hvlines}
+\subsubsection{Les clés hvlines et hvlines-except-borders}
\label{hvlines}
La clé |hvlines|, qui ne prend pas de valeur, est la conjonction des clés
@@ -1739,7 +1745,7 @@ Dupont & Chantal & 15 janvier 1998 \\
\colorbox{yellow!50}{\bfseries Nouveau 5.18}\enskip La commande |\RowStyle|
prend en argument des instructions de mise en forme qui seront appliquées à
-chacune des cellules restantes sur la rangée en cours.
+chacune des cases restantes sur la rangée en cours.
\medskip
Elle prend aussi en premier argument optionnel, entre crochets, une liste de
@@ -2902,8 +2908,8 @@ fin de tableau selon un type de liste défini par l'extension \pkg{enumitem}.
\begin{scope}
\fvset{commandchars=\~\#\!}
\begin{Verbatim}
-\begin{NiceTabular}{@{}llr@{}}[first-row,code-for-first-row = \bfseries]
-\toprule
+\begin{NiceTabular}{@{}llr@{}}
+\toprule \RowStyle{\bfseries}
Nom & Prénom & Date de naissance \\
\midrule
Achard~emphase#\tabularnote{La famille Achard est une très ancienne famille du Poitou.}!
@@ -2918,8 +2924,8 @@ Dupont & Chantal & 15 janvier 1998 \\
\end{scope}
\begin{center}
-\begin{NiceTabular}{@{}llr@{}}[first-row,code-for-first-row = \bfseries]
-\toprule
+\begin{NiceTabular}{@{}llr@{}}
+\toprule \RowStyle{\bfseries}
Nom & Prénom & Date de naissance \\
\midrule
Achard\tabularnote{La famille Achard est une très ancienne famille du Poitou.}
@@ -3844,11 +3850,11 @@ noix & noisette & brugnon
Les nœuds que l'on vient de décrire ne sont pas accessibles par défaut dans le
|\CodeBefore| (décrit p.~\pageref{code-before}). \par\nobreak
-\colorbox{yellow!50}{\textbf{Nouveau 5.16}}\enskip On peut rendre ces nœuds
-accessibles dans le |\CodeBefore| en utilisant la clé |create-cell-nodes| du
-mot-clé |\CodeBefore| (dans ce cas-là, les nœuds sont créés une première fois
-avant la construction du tableau en utilisant des informations écrites dans le
-fichier |aux| puis recréés lors de la composition du tableau proprement dit).
+On peut rendre ces nœuds accessibles dans le |\CodeBefore| en utilisant la clé
+|create-cell-nodes| du mot-clé |\CodeBefore| (dans ce cas-là, les nœuds sont
+créés une première fois avant la construction du tableau en utilisant des
+informations écrites dans le fichier |aux| puis recréés lors de la composition
+du tableau proprement dit).
\subsection{Les nœuds indiquant la position des filets}
@@ -4294,6 +4300,44 @@ L'extension \pkg{nicematrix} n'est pas compatible avec la classe \cls{ieeeaccess
\section{Exemples}
+\subsection{Utilisation de la clé «tikz» de la commande \textbackslash Block}
+
+\label{tikz-key-examples}
+
+
+\begin{Verbatim}
+\ttfamily \small
+\begin{NiceTabular}{m{4.5cm}m{4.5cm}m{4.5cm}}[hvlines]
+ \Block[~emphase#tikz={pattern=grid,pattern color=lightgray}@]{}
+ {pattern = grid,\\ pattern color = lightgray}
+& \Block[~emphase#tikz={pattern = north west lines,pattern color=blue}@]{}
+ {pattern = north west lines,\\ pattern color = blue}
+& \Block[~emphase#tikz={outer color = red!50, inner color=white }@]{2-1}
+ {outer color = red!50,\\ inner color = white} \\
+ \Block[~emphase#tikz={pattern = sixpointed stars, pattern color = blue!15}@]{}
+ {pattern = sixpointed stars,\\ pattern color = blue!15}
+& \Block[~emphase#tikz={left color = blue!50}@]{}
+ {left color = blue!50} \\
+\end{NiceTabular}
+\end{Verbatim}
+
+\begin{center}
+\ttfamily \small
+\begin{NiceTabular}{m{4.5cm}m{4.5cm}m{4.5cm}}[hvlines]
+ \Block[tikz={pattern=grid,pattern color=lightgray}]{}
+ {pattern = grid,\\ pattern color = lightgray}
+& \Block[tikz={pattern = north west lines,pattern color=blue}]{}
+ {pattern = north west lines,\\ pattern color = blue}
+& \Block[tikz={outer color = red!50, inner color=white }]{2-1}
+ {outer color = red!50,\\ inner color = white} \\
+ \Block[tikz={pattern = sixpointed stars, pattern color = blue!15}]{}
+ {pattern = sixpointed stars,\\ pattern color = blue!15}
+& \Block[tikz={left color = blue!50}]{}
+ {left color = blue!50} \\
+\end{NiceTabular}
+\end{center}
+
+
\subsection{Notes dans les tableaux}
\label{ex:notes}
@@ -4362,8 +4406,8 @@ nombre total de notes dans le tableau). On utilise alors la clé |widest*| de
\ExplSyntaxOff
\fvset{commandchars=\~\#\!}
\begin{Verbatim}
-\begin{NiceTabular}{@{}llr@{}}[first-row,code-for-first-row = \bfseries]
-\toprule
+\begin{NiceTabular}{@{}llr@{}}
+\toprule \RowStyle{\bfseries}
Nom & Prénom & Date de naissance \\
\midrule
Achard~emphase#\tabularnote{La famille Achard est une très ancienne famille du Poitou.}!
@@ -4377,8 +4421,8 @@ Dupont & Chantal & 15 janvier 1998 \\
\end{Verbatim}
\begin{center}
-\begin{NiceTabular}{@{}llr@{}}[first-row,code-for-first-row = \bfseries]
-\toprule
+\begin{NiceTabular}{@{}llr@{}}
+\toprule \RowStyle{\bfseries}
Nom & Prénom & Date de naissance \\
\midrule
Achard\tabularnote{La famille Achard est une très ancienne famille du Poitou.}
diff --git a/macros/latex/contrib/nicematrix/nicematrix.dtx b/macros/latex/contrib/nicematrix/nicematrix.dtx
index fdaa5ac42a..095a776390 100644
--- a/macros/latex/contrib/nicematrix/nicematrix.dtx
+++ b/macros/latex/contrib/nicematrix/nicematrix.dtx
@@ -15,8 +15,8 @@
%
% \fi
% \iffalse
-\def\myfileversion{5.18}
-\def\myfiledate{2021/07/15}
+\def\myfileversion{5.19}
+\def\myfiledate{2021/07/23}
%
%
%<*batchfile>
@@ -65,8 +65,6 @@ version 2005/12/01 or later.
\usepackage{titlesec}
\titlespacing*{\section}{0pt}{6.5ex plus 1ex minus .2ex}{4.3ex plus .2ex}
\titlespacing*{\subsection}{0pt}{4.5ex plus 1ex minus .2ex}{2ex plus .2ex}
-\usepackage{multicol}
-\setlength{\columnseprule}{0.4pt}
\usepackage{footnotehyper}
\usepackage{varwidth}
\def\LetterAt{@}
@@ -160,7 +158,7 @@ version 2005/12/01 or later.
% The package \pkg{nicematrix} is entirely contained in the file
% |nicematrix.sty|. This file may be put in the current directory or in a
% |texmf| tree. However, the best is to install \pkg{nicematrix} with a TeX
-% distribution as MiKTeX, TeXlive or MacTeX.
+% distribution such as MiKTeX, TeXlive or MacTeX.
%
% \bigskip
% \emph{Remark}: If you use LaTeX via Internet with, for example, Overleaf, you
@@ -583,7 +581,15 @@ version 2005/12/01 or later.
% by |left|, |right|, |top| and |bottom|;
% \item the keys |t| and |b| fix the base line that will be given to the block
% when it has a multi-line content (the lines are separated by |\\|);
-% \item the keys |hvlines| draws all the vertical and horizontal rules in the block.
+% \item the keys |hvlines| draws all the vertical and horizontal rules in the
+% block;
+% \item \colorbox{yellow!50}{\textbf{New 5.19}}\enskip when the key |tikz| is
+% used, the Tikz path corresponding of the rectangle which delimits the block is
+% executed with Tikz\footnote{Tikz should be loaded (by default,
+% \pkg{nicematrix} only loads \textsc{pgf}) and, if it's not, an error will be
+% raised.} by using as options the value of that key |tikz| (which must be a
+% list of keys allowed for a Tikz path). For examples, cf.
+% p.~\pageref{tikz-key-examples}.
% \end{itemize}
%
% \interitem
@@ -955,7 +961,7 @@ version 2005/12/01 or later.
%
% Here are the tools provided by \pkg{nicematrix} for the rules.
% \begin{itemize}
-% \item the keys |hlines|, |vlines| and |hvlines|;
+% \item the keys |hlines|, |vlines|, |hvlines| and |hvlines-except-borders|;
% \item the specifier ``\verb+|+'' in the preamble (for the environments with
% preamble);
% \item the command |\Hline|.
@@ -967,7 +973,7 @@ version 2005/12/01 or later.
% \begin{itemize}
% \item These blocks are:
% \begin{itemize}
-% \item the blocks created by the command |\Block|\footnote{And also the command \verb|\multicolumn| also
+% \item the blocks created by the command |\Block|\footnote{And also the command \verb|\multicolumn| but
% it's recommended to use instead |\Block| in the environments of
% \pkg{nicematrix}.} presented
% p.~\pageref{Block};
@@ -1007,7 +1013,7 @@ version 2005/12/01 or later.
%
%
%
-% \subsubsection{The key hvlines}
+% \subsubsection{The keys hvlines and hvlines-except-borders}
% \label{hvlines}
%
% The key |hvlines| (no value) is the conjonction of the keys |hlines| and |vlines|.
@@ -1035,7 +1041,7 @@ version 2005/12/01 or later.
%
% \bigskip
% \colorbox{yellow!50}{\bfseries New 5.17}\enskip The key
-% |hvlines-except-corners| is similar to the key |hvlines| but does not draw the
+% |hvlines-except-borders| is similar to the key |hvlines| but does not draw the
% rules on the horizontal and vertical borders of the array.
%
% \subsubsection{The (empty) corners}
@@ -1438,7 +1444,7 @@ version 2005/12/01 or later.
% \begin{BVerbatim}[boxwidth=9cm,baseline=c]
% $\begin{NiceArray}{lll}[hvlines]
% \CodeBefore
-% ~emphase#code-before = \rowcolor{red!15}{1,3-5,8-}@
+% ~emphase#\rowcolor{red!15}{1,3-5,8-}@
% \Body
% a_1 & b_1 & c_1 \\
% a_2 & b_2 & c_2 \\
@@ -2670,7 +2676,7 @@ version 2005/12/01 or later.
% \bigskip
% \colorbox{yellow!50}{\bfseries New 5.18}\enskip In fact, the command
% |\SubMatrix| also takes in two optional arguments specified by the
-% traditionnal symbols |^| and |_| for material in superscript and subscript.
+% traditional symbols |^| and |_| for material in superscript and subscript.
%
% \medskip
% \begin{scope}
@@ -2697,7 +2703,7 @@ version 2005/12/01 or later.
% \bigskip
% The options of the command |\SubMatrix| are as follows:
% \begin{itemize}
-% \item |left-xshift| and |right-shift| shift horizontally the delimiters (there
+% \item |left-xshift| and |right-xshift| shift horizontally the delimiters (there
% exists also the key |xshift| which fixes both parameters);
% \item |extra-height| adds a quantity to the total height of the delimiters
% (height |\ht| + depth |\dp|);
@@ -2869,8 +2875,8 @@ version 2005/12/01 or later.
% \begin{scope}
% \fvset{commandchars=\~\#\!}
% \begin{Verbatim}
-% \begin{NiceTabular}{@{}llr@{}}[first-row,code-for-first-row = \bfseries]
-% \toprule
+% \begin{NiceTabular}{@{}llr@{}}
+% \toprule \RowStyle{\bfseries}
% Last name & First name & Birth day \\
% \midrule
% Achard\tabularnote{~emphase#Achard is an old family of the Poitou.!}
@@ -2885,8 +2891,8 @@ version 2005/12/01 or later.
% \end{scope}
%
% \begin{center}
-% \begin{NiceTabular}{@{}llr@{}}[first-row,code-for-first-row = \bfseries]
-% \toprule
+% \begin{NiceTabular}{@{}llr@{}}
+% \toprule \RowStyle{\bfseries}
% Last name & First name & Birth day \\
% \midrule
% Achard\tabularnote{Achard is an old family of the Poitou.}
@@ -3796,11 +3802,11 @@ version 2005/12/01 or later.
% The nodes we have described are not available by default in the |\CodeBefore|
% (described p.~\pageref{code-before}).\par\nobreak
%
-% \colorbox{yellow!50}{\textbf{New 5.16}}\enskip It's possible to have these
-% nodes available in the |\CodeBefore| by using the key |create-cell-nodes| of
-% the keyword |\CodeBefore| (in that case, the nodes are created first before
-% the construction of the array by using informations written on the |aux| file
-% and created a second time during the contruction of the array itself).
+% It's possible to have these nodes available in the |\CodeBefore| by using the
+% key |create-cell-nodes| of the keyword |\CodeBefore| (in that case, the nodes
+% are created first before the construction of the array by using informations
+% written on the |aux| file and created a second time during the contruction of
+% the array itself).
%
% \subsection{The nodes which indicate the position of the rules}
%
@@ -4232,6 +4238,43 @@ version 2005/12/01 or later.
%
% \section{Examples}
%
+% \subsection{Utilisation of the key ``tikz'' of the command \textbackslash Block}
+%\label{tikz-key-examples}
+%
+%
+% \begin{Verbatim}
+% \ttfamily \small
+% \begin{NiceTabular}{m{4.5cm}m{4.5cm}m{4.5cm}}[hvlines]
+% \Block[~emphase#tikz={pattern=grid,pattern color=lightgray}@]{}
+% {pattern = grid,\\ pattern color = lightgray}
+% & \Block[~emphase#tikz={pattern = north west lines,pattern color=blue}@]{}
+% {pattern = north west lines,\\ pattern color = blue}
+% & \Block[~emphase#tikz={outer color = red!50, inner color=white }@]{2-1}
+% {outer color = red!50,\\ inner color = white} \\
+% \Block[~emphase#tikz={pattern = sixpointed stars, pattern color = blue!15}@]{}
+% {pattern = sixpointed stars,\\ pattern color = blue!15}
+% & \Block[~emphase#tikz={left color = blue!50}@]{}
+% {left color = blue!50} \\
+% \end{NiceTabular}
+% \end{Verbatim}
+%
+% \begin{center}
+% \ttfamily \small
+% \begin{NiceTabular}{m{4.5cm}m{4.5cm}m{4.5cm}}[hvlines]
+% \Block[tikz={pattern=grid,pattern color=lightgray}]{}
+% {pattern = grid,\\ pattern color = lightgray}
+% & \Block[tikz={pattern = north west lines,pattern color=blue}]{}
+% {pattern = north west lines,\\ pattern color = blue}
+% & \Block[tikz={outer color = red!50, inner color=white }]{2-1}
+% {outer color = red!50,\\ inner color = white} \\
+% \Block[tikz={pattern = sixpointed stars, pattern color = blue!15}]{}
+% {pattern = sixpointed stars,\\ pattern color = blue!15}
+% & \Block[tikz={left color = blue!50}]{}
+% {left color = blue!50} \\
+% \end{NiceTabular}
+% \end{center}
+%
+%
% \subsection{Notes in the tabulars}
%
% \label{ex:notes}
@@ -4302,8 +4345,8 @@ version 2005/12/01 or later.
% }
% \ExplSyntaxOff
% \begin{Verbatim}
-% \begin{NiceTabular}{~@{}llr~@{}}[first-row,code-for-first-row = \bfseries]
-% \toprule
+% \begin{NiceTabular}{~@{}llr~@{}}
+% \toprule \RowStyle{\bfseries}
% Last name & First name & Birth day \\
% \midrule
% Achard\tabularnote{~emphase#Achard is an old family of the Poitou.@}
@@ -4317,8 +4360,8 @@ version 2005/12/01 or later.
% \end{Verbatim}
%
% \begin{center}
-% \begin{NiceTabular}{@{}llr@{}}[first-row,code-for-first-row = \bfseries]
-% \toprule
+% \begin{NiceTabular}{@{}llr@{}}
+% \toprule \RowStyle{\bfseries}
% Last name & First name & Birth day \\
% \midrule
% Achard\tabularnote{Achard is an old family of the Poitou.}
@@ -5002,7 +5045,8 @@ version 2005/12/01 or later.
% \end{macrocode}
%
%
-% We give the traditional declaration of a package written with |expl3|:
+% We give the traditional declaration of a package written with the L3
+% programming layer.
% \begin{macrocode}
\RequirePackage{l3keys2e}
\ProvidesExplPackage
@@ -5250,10 +5294,6 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
-% We need that line for the case where you use \verb+||+ with \pkg{colortbl} loaded.
-% \begin{macrocode}
-\cs_set_protected:Npn \CT@drsc@ { }
-% \end{macrocode}
%
% \bigskip
% We have to redefine |\cline| for several reasons. The command |\@@_cline| will
@@ -5478,7 +5518,8 @@ version 2005/12/01 or later.
% For compatibility with versions prior to 5.0, we provide a load-time option
% |define_L_C_R|. With this option, it's possible to use the letters |L|, |C|
% and |R| instead of |l|, |c| and |r| in the preamble of the environments of
-% \pkg{nicematrix} as it was mandatory before version~5.0.
+% \pkg{nicematrix} as it was mandatory before version~5.0. This key will
+% probably be deleted in a future version.
% \begin{macrocode}
\bool_new:N \c_@@_define_L_C_R_bool
% \end{macrocode}
@@ -5639,6 +5680,7 @@ version 2005/12/01 or later.
\tl_new:N \g_@@_aux_tl
% \end{macrocode}
%
+%
% \bigskip
% \begin{macrocode}
\cs_new_protected:Npn \@@_test_if_math_mode:
@@ -5743,6 +5785,21 @@ version 2005/12/01 or later.
\tl_new:N \l_@@_rules_color_tl
% \end{macrocode}
%
+% \bigskip
+% The number of letters |X| in the preamble of the array.
+% \begin{macrocode}
+\int_new:N \g_@@_nb_of_X_int
+% \end{macrocode}
+%
+% If there is at least one |X|-column in the preamble of the array, the
+% following flag will be raised via the |aux| file. The length
+% |l_@@_x_columns_dim| will be the width of the |X|-columns. That value is
+% computed after the contruction of the array during the first compilation in
+% order to be used in the following run.
+% \begin{macrocode}
+\bool_new:N \l_@@_X_columns_aux_bool
+\dim_new:N \l_@@_X_columns_dim
+% \end{macrocode}
%
% \bigskip
% This boolean will be used only to detect in an expandable way whether we are
@@ -5805,9 +5862,9 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
-% \pkg{expl3} provides scratch dimensions |\l_tmpa_dim| and |\l_tmpb_dim|. We
-% creates two more in the same spirit (if they don't exist yet: that's why we
-% use |\dim_zero_new:N|).
+% The L3 programming layer provides scratch dimensions |\l_tmpa_dim| and
+% |\l_tmpb_dim|. We creates two more in the same spirit (if they don't exist
+% yet: that's why we use |\dim_zero_new:N|).
% \begin{macrocode}
\dim_zero_new:N \l_tmpc_dim
\dim_zero_new:N \l_tmpd_dim
@@ -5933,11 +5990,12 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \medskip
-% The following parameters correspond to the keys |fill|, |draw|, |borders| and
-% |rounded-corners| of the command |\Block|.
+% The following parameters correspond to the keys |fill|, |draw|, |tikz|, |borders|,
+% and |rounded-corners| of the command |\Block|.
% \begin{macrocode}
\tl_new:N \l_@@_fill_tl
\tl_new:N \l_@@_draw_tl
+\seq_new:N \l_@@_tikz_seq
\clist_new:N \l_@@_borders_clist
\dim_new:N \l_@@_rounded_corners_dim
% \end{macrocode}
@@ -5946,8 +6004,7 @@ version 2005/12/01 or later.
% |corners| is used).
%
% \medskip
-% The following token list correspond to the key |color| of the command
-% |\Block|.
+% The following token list correspond to the key |color| of the command |\Block|.
% \begin{macrocode}
\tl_new:N \l_@@_color_tl
% \end{macrocode}
@@ -7126,7 +7183,13 @@ version 2005/12/01 or later.
% \begin{macrocode}
\cs_new_protected:Npn \@@_Cell:
{
- \tl_gclear:N \g_@@_exit_cell_tl
+% \end{macrocode}
+% The token list |\g_@@_post_treatment_cell_tl| will be set during the
+% composition of the box |\l_@@_cell_box| and will be used \emph{after} the
+% composition in order to modify that box (that's why it's called a
+% \emph{post-treatment}).
+% \begin{macrocode}
+ \tl_gclear:N \g_@@_post_treatment_cell_tl
% \end{macrocode}
% At the beginning of the cell, we link |\CodeAfter| to a command which do
% \emph{not} begin with |\omit| (whereas the standard version of |\CodeAfter|
@@ -7285,7 +7348,12 @@ version 2005/12/01 or later.
{
\@@_math_toggle_token:
\hbox_set_end:
- \g_@@_exit_cell_tl
+% \end{macrocode}
+% The token list |\g_@@_post_treatment_cell_tl| is (potentially) set during the
+% composition of the box |\l_@@_cell_box| and is used now \emph{after} the
+% composition in order to modify that box.
+% \begin{macrocode}
+ \g_@@_post_treatment_cell_tl
\bool_if:NT \g_@@_rotate_bool \@@_rotate_cell_box:
\@@_adjust_size_box:
% \end{macrocode}
@@ -8044,7 +8112,7 @@ version 2005/12/01 or later.
{
\tl_gput_right:Nn \g_@@_row_style_tl
{
- \tl_gput_right:Nn \g_@@_exit_cell_tl
+ \tl_gput_right:Nn \g_@@_post_treatment_cell_tl
{ \dim_set:Nn \l_@@_cell_space_top_limit_dim { #1 } }
}
} ,
@@ -8053,7 +8121,7 @@ version 2005/12/01 or later.
{
\tl_gput_right:Nn \g_@@_row_style_tl
{
- \tl_gput_right:Nn \g_@@_exit_cell_tl
+ \tl_gput_right:Nn \g_@@_post_treatment_cell_tl
{ \dim_set:Nn \l_@@_cell_space_bottom_limit_dim { #1 } }
}
} ,
@@ -8439,6 +8507,29 @@ version 2005/12/01 or later.
% End of the construction of the array (in the box |\l_@@_the_array_box|).
%
% \bigskip
+% Now, if there is at least one |X|-column in the environment, we compute the
+% width that those columns will have (in the next compilation).
+% \begin{macrocode}
+ \int_compare:nNnT \g_@@_nb_of_X_int > 0
+ {
+ \bool_if:NTF \l_@@_X_columns_aux_bool
+ { \dim_set_eq:NN \l_tmpa_dim \l_@@_X_columns_dim }
+ {
+ \dim_set:Nn \l_tmpa_dim
+ {
+ ( \textwidth - \box_wd:N \l_@@_the_array_box )
+ / \int_use:N \g_@@_nb_of_X_int
+ }
+ }
+ \tl_gput_right:Nx \g_@@_aux_tl
+ {
+ \bool_set_true:N \l_@@_X_columns_aux_bool
+ \dim_set:Nn \l_@@_X_columns_dim { \dim_use:N \l_tmpa_dim }
+ }
+ }
+% \end{macrocode}
+%
+% \bigskip
% It the user has used the key |last-row| with a value, we control that the
% given value is correct (since we have just constructed the array, we know the
% real number of rows of the array).
@@ -8626,10 +8717,11 @@ version 2005/12/01 or later.
% current environment.
% \begin{macrocode}
\iow_now:Nn \@mainaux { \ExplSyntaxOn }
+ \iow_now:Nn \@mainaux { \char_set_catcode_space:n { 32 } }
\iow_now:Nx \@mainaux
{
\tl_gset:cn { c_@@_ \int_use:N \g_@@_env_int _ tl }
- \iow_newline: { \iow_newline: \exp_not:V \g_@@_aux_tl }
+ { \exp_not:V \g_@@_aux_tl }
}
\iow_now:Nn \@mainaux { \ExplSyntaxOff }
% \end{macrocode}
@@ -8660,7 +8752,7 @@ version 2005/12/01 or later.
% using |\newcolumntype|).
%
% Since we use the tools of \pkg{array} to do this expansion, we will have a
-% programmation which is not in the style of \pkg{expl3}.
+% programmation which is not in the style of the L3 programming layer.
%
%
% \bigskip
@@ -8686,7 +8778,7 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% First, we have to store our preamble in the token register |\@temptokena|
-% (those ``token registers'' are \emph{not} supported by \pkg{expl3}).
+% (those ``token registers'' are \emph{not} supported by the L3 programming layer).
% \begin{macrocode}
\exp_args:NV \@temptokena \g_@@_preamble_tl
% \end{macrocode}
@@ -8729,6 +8821,10 @@ version 2005/12/01 or later.
}
}
% \end{macrocode}
+% The number of letters |X| in the preamble of the array.
+% \begin{macrocode}
+ \int_gzero:N \g_@@_nb_of_X_int
+% \end{macrocode}
% The sequence |\g_@@_cols_vlsim_seq| will contain the numbers of the columns
% where you will to have to draw vertical lines in the potential sub-matrices
% (hence the name |vlism|).
@@ -8784,7 +8880,7 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
-% We complete the preamble with the potential ``exterior columns''.
+% We complete the preamble with the potential ``exterior columns'' (on both sides).
% \begin{macrocode}
\int_compare:nNnTF \l_@@_first_col_int = 0
{ \tl_gput_left:NV \g_@@_preamble_tl \c_@@_preamble_first_col_tl }
@@ -8811,7 +8907,7 @@ version 2005/12/01 or later.
{ \tl_gput_right:Nn \g_@@_preamble_tl { @ { } } }
}
% \end{macrocode}
-% We add a last column to raise a good error message when the user put more
+% We add a last column to raise a good error message when the user puts more
% columns than allowed by its preamble. However, for technical reasons, it's not
% possible to do that in |{NiceTabular*}| (|\l_@@_tabular_width_dim|=0pt).
% \begin{macrocode}
@@ -8837,8 +8933,8 @@ version 2005/12/01 or later.
@ { \@@_patch_preamble_ii:nn #1 }
| { \@@_patch_preamble_iii:n #1 }
p { \@@_patch_preamble_iv:nnn t #1 }
- m { \@@_patch_preamble_iv:nnn c #1 }
b { \@@_patch_preamble_iv:nnn b #1 }
+ m { \@@_patch_preamble_iv:nnn b #1 }
\@@_w: { \@@_patch_preamble_v:nnnn { } #1 }
\@@_W: { \@@_patch_preamble_v:nnnn { \cs_set_eq:NN \hss \hfil } #1 }
\@@_true_c: { \@@_patch_preamble_vi:n #1 }
@@ -8848,6 +8944,7 @@ version 2005/12/01 or later.
) { \@@_patch_preamble_viii:nn #1 }
] { \@@_patch_preamble_viii:nn #1 }
\} { \@@_patch_preamble_viii:nn #1 }
+ X { \@@_patch_preamble_xii: }
C { \@@_error:nn { old~column~type } #1 }
L { \@@_error:nn { old~column~type } #1 }
R { \@@_error:nn { old~column~type } #1 }
@@ -8959,7 +9056,7 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \medskip
-% For |p|, |m| and |b|
+% For |p| and |b|
% \begin{macrocode}
\cs_new_protected:Npn \@@_patch_preamble_iv:nnn #1 #2 #3
{
@@ -8968,14 +9065,29 @@ version 2005/12/01 or later.
> {
\@@_Cell:
\begin { minipage } [ #1 ] { \dim_eval:n { #3 } }
- \mode_leave_vertical:
+% \end{macrocode}
+% The following lines have been taken from |array.sty|.
+% \begin{macrocode}
+ \everypar
+ {
+ \vrule height \box_ht:N \@arstrutbox width \c_zero_dim
+ \everypar { }
+ }
+ \g_@@_row_style_tl % added the 2021-07-17
\arraybackslash
- \vrule height \box_ht:N \@arstrutbox depth 0 pt width 0 pt
}
c
< {
- \vrule height 0 pt depth \box_dp:N \@arstrutbox width 0 pt
+% \end{macrocode}
+% The following line has been taken from |array.sty|.
+% \begin{macrocode}
+ \@finalstrut \@arstrutbox
\end { minipage }
+% \end{macrocode}
+% If the letter in the preamble is |m|, you require a post-treatment for the box
+% |\l_@@_cell_box|.
+% \begin{macrocode}
+ \str_if_eq:nnT { #2 } m \@@_center_cell_box:
\@@_end_Cell:
}
}
@@ -8987,6 +9099,42 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+% \bigskip
+% The following command will be used in |m|-columns in order to center
+% vertically the box. In fact, despite its name, the command does not always
+% center the cell. Indeed, if there is only one row in the cell, it should not
+% be centered vertically. It's not possible to know the number of rows of the
+% cell. However, you consider (as in \pkg{array}) that if the height of the cell
+% is no more that the height of |\@arstrutbox|, there is only one row.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_center_cell_box:
+ {
+% \end{macrocode}
+% By putting instructions in |\g_@@_post_treatment_cell_tl|, we require a
+% post-treatment of the box |\l_@@_cell_box|.
+% \begin{macrocode}
+ \tl_gput_right:Nn \g_@@_post_treatment_cell_tl
+ {
+ \int_compare:nNnT
+ { \box_ht:N \l_@@_cell_box }
+ >
+ { \box_ht:N \@arstrutbox }
+ {
+ \hbox_set:Nn \l_@@_cell_box
+ {
+ \box_move_down:nn
+ {
+ ( \box_ht:N \l_@@_cell_box - \box_ht:N \@arstrutbox
+ + \baselineskip ) / 2
+ }
+ { \box_use:N \l_@@_cell_box }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+%
+%
% \medskip
% For |w| and |W|
% \begin{macrocode}
@@ -9192,7 +9340,42 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
-%
+% \bigskip
+% For the case of a letter |X|
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_patch_preamble_xii:
+ {
+ \int_gincr:N \g_@@_nb_of_X_int
+% \end{macrocode}
+% We test whether you know the width of the |X|-columns by reading the value in
+% the |aux| file (of course, this is not possible at the first compilation).
+% \begin{macrocode}
+ \bool_if:NTF \l_@@_X_columns_aux_bool
+ { \exp_args:NNNV \@@_patch_preamble_iv:nnn t p \l_@@_X_columns_dim }
+ {
+ \tl_gput_right:Nn \g_@@_preamble_tl
+ {
+ > {
+ \@@_Cell:
+ \tl_set:Nn \l_@@_cell_type_tl { c }
+% \end{macrocode}
+% The following code will nullify the box of the cell.
+% \begin{macrocode}
+ \tl_gput_right:Nn \g_@@_post_treatment_cell_tl
+ { \hbox_set:Nn \l_@@_cell_box { } }
+% \end{macrocode}
+% The content of the cell is composed in |\l_tmpa_box| which will be discarded.
+% \begin{macrocode}
+ }
+ c
+ < { \@@_end_Cell: }
+ }
+ \int_gincr:N \c@jCol
+ \@@_patch_preamble_x:n
+ }
+ }
+% \end{macrocode}
+%
% \bigskip
% \subsection*{The redefinition of \textbackslash multicolumn}
%
@@ -9555,7 +9738,13 @@ version 2005/12/01 or later.
% notes (that means that a |\vtop{\hsize=...}| is not enough).
% \begin{macrocode}
\begin { minipage } [ t ] { \box_wd:N \l_@@_the_array_box }
- \box_use_drop:N \l_@@_the_array_box
+% \end{macrocode}
+% The |\hbox| avoids that the |pgfpicture| inside |\@@_draw_blocks| adds a extra
+% vertical space before the notes.
+% \begin{macrocode}
+ \hbox:n
+ {
+ \box_use_drop:N \l_@@_the_array_box
% \end{macrocode}
% We have to draw the blocks right now because there may be tabular notes in
% some blocks (which are not mono-column: the blocks which are mono-column
@@ -9563,8 +9752,9 @@ version 2005/12/01 or later.
% extra nodes before creating the blocks since there are |medium| nodes to create
% for the blocks.
% \begin{macrocode}
- \@@_create_extra_nodes:
- \seq_if_empty:NF \g_@@_blocks_seq \@@_draw_blocks:
+ \@@_create_extra_nodes:
+ \seq_if_empty:NF \g_@@_blocks_seq \@@_draw_blocks:
+ }
\bool_lazy_or:nnT
{ \int_compare_p:nNn \c@tabularnote > 0 }
{ ! \tl_if_empty_p:V \l_@@_tabularnote_tl }
@@ -9729,6 +9919,10 @@ version 2005/12/01 or later.
\vcenter
{
\vbox_to_ht:nn
+% \end{macrocode}
+% Here, you should use |\box_ht_plus_dp:N| when TeXLive 2021 will be available
+% on Overleaf.
+% \begin{macrocode}
{ \box_ht:N \l_tmpa_box + \box_dp:N \l_tmpa_box }
{ }
}
@@ -9742,6 +9936,10 @@ version 2005/12/01 or later.
\c_math_toggle_token
\left .
\vbox_to_ht:nn
+% \end{macrocode}
+% Here, you should use |\box_ht_plus_dp:N| when TeXLive 2021 will be available
+% on Overleaf.
+% \begin{macrocode}
{ \box_ht:N \l_tmpa_box + \box_dp:N \l_tmpa_box }
{ }
\right #2
@@ -10022,8 +10220,8 @@ version 2005/12/01 or later.
% \begin{macrocode}
\int_gset:Nn \g_tmpa_int 1
\bool_if:NTF \g_@@_last_col_found_bool
- { \prg_replicate:nn { \g_@@_col_total_int - 3 } }
- { \prg_replicate:nn { \g_@@_col_total_int - 2 } }
+ { \prg_replicate:nn { \int_max:nn { \g_@@_col_total_int - 3 } 0 } }
+ { \prg_replicate:nn { \int_max:nn { \g_@@_col_total_int - 2 } 0 } }
{
&
\omit
@@ -10465,8 +10663,7 @@ version 2005/12/01 or later.
\int_use:N \l_@@_first_col_int ,
\int_use:N \c@jCol ,
\int_use:N \g_@@_col_total_int
- }
- \iow_newline:
+ }
}
% \end{macrocode}
% We write also the potential content of |\g_@@_pos_of_blocks_seq| (it will be
@@ -10478,7 +10675,6 @@ version 2005/12/01 or later.
{
\seq_gset_from_clist:Nn \exp_not:N \g_@@_pos_of_blocks_seq
{ \seq_use:Nnnn \g_@@_pos_of_blocks_seq , , , }
- \iow_newline:
}
}
\seq_if_empty:NF \g_@@_multicolumn_cells_seq
@@ -10487,10 +10683,8 @@ version 2005/12/01 or later.
{
\seq_gset_from_clist:Nn \exp_not:N \g_@@_multicolumn_cells_seq
{ \seq_use:Nnnn \g_@@_multicolumn_cells_seq , , , }
- \iow_newline:
\seq_gset_from_clist:Nn \exp_not:N \g_@@_multicolumn_sizes_seq
{ \seq_use:Nnnn \g_@@_multicolumn_sizes_seq , , , }
- \iow_newline:
}
}
% \end{macrocode}
@@ -10674,12 +10868,12 @@ version 2005/12/01 or later.
{
\tl_gset:Nn \exp_not:N \g_@@_code_before_tl
{ \exp_not:V \g_nicematrix_code_before_tl }
- \iow_newline:
}
\bool_set_true:N \l_@@_code_before_bool
}
% \end{macrocode}
-%
+%
+%
% \begin{macrocode}
% \bool_if:NT \l_@@_code_before_bool \@@_write_aux_for_cell_nodes:
% \end{macrocode}
@@ -11787,7 +11981,7 @@ version 2005/12/01 or later.
%
%
% \bigskip
-% \subsection*{The actual instructions for drawing the dotted line with Tikz}
+% \subsection*{The actual instructions for drawing the dotted lines with Tikz}
%
% The command |\@@_draw_line:| should be used in a |{pgfpicture}|. It has six
% implicit arguments:
@@ -11916,7 +12110,7 @@ version 2005/12/01 or later.
\group_begin:
% \end{macrocode}
% The dimension |\l_@@_l_dim| is the length $\ell$ of the line to draw. We use
-% the floating point reals of \pkg{expl3} to compute this length.
+% the floating point reals of the L3 programming layer to compute this length.
% \begin{macrocode}
\dim_zero_new:N \l_@@_l_dim
\dim_set:Nn \l_@@_l_dim
@@ -13373,9 +13567,12 @@ version 2005/12/01 or later.
\dim_set_eq:NN \l_tmpb_dim \pgf@x
\@@_qpoint:n { row - \@@_succ:n { #4 } }
\dim_set_eq:NN \l_tmpc_dim \pgf@y
- \bool_lazy_and:nnT
- { \int_compare_p:nNn { #2 } > 1 }
- { ! \tl_if_blank_p:V \CT@drsc@ }
+ \bool_lazy_all:nT
+ {
+ { \int_compare_p:nNn { #2 } > 1 }
+ { \cs_if_exist_p:N \CT@drsc@ } % condition added in version 5.18a
+ { ! \tl_if_blank_p:V \CT@drsc@ }
+ }
{
\group_begin:
\CT@drsc@
@@ -13768,7 +13965,6 @@ version 2005/12/01 or later.
{
\seq_set_from_clist:Nn \exp_not:N \l_@@_corners_cells_seq
{ \seq_use:Nnnn \l_@@_corners_cells_seq , , , }
- \iow_newline:
}
}
}
@@ -14701,9 +14897,15 @@ version 2005/12/01 or later.
% why we have two macros: |\@@_Block_iv:nnnnn| and |\@@_Block_v:nnnnn| (the five
% arguments of those macros are provided by curryfication).
% \begin{macrocode}
- \bool_lazy_or:nnTF
- { \int_compare_p:nNn { \l_tmpa_int } = 1 }
- { \int_compare_p:nNn { \l_tmpb_int } = 1 }
+ \bool_if:nTF
+ {
+ (
+ \int_compare_p:nNn { \l_tmpa_int } = 1
+ ||
+ \int_compare_p:nNn { \l_tmpb_int } = 1
+ )
+ && ! \tl_if_empty_p:n { #5 }
+ }
{ \exp_args:Nxx \@@_Block_iv:nnnnn }
{ \exp_args:Nxx \@@_Block_v:nnnnn }
{ \l_tmpa_int } { \l_tmpb_int } { #3 } { #4 } { #5 }
@@ -14742,9 +14944,9 @@ version 2005/12/01 or later.
% \end{macrocode}
% For a mono-column block, if the user has specified a color for the column in
% the preamble of the array, we want to fix that color in the box we construct.
-% We do that with |\set@color| and not |\color_ensure_current:| because that
-% command seems to be bugged: it doesn't work in XeLaTeX when \pkg{fontspec} is
-% loaded.
+% We do that with |\set@color| and not |\color_ensure_current:| (in order to use
+% |\color_ensure_current:| safely, you should load \pkg{l3backend} before the
+% |\documentclass| with |\RequirePackage{expl3}|).
% \begin{macrocode}
\tl_if_empty:NTF \l_@@_color_tl
{ \int_compare:nNnT { #2 } = 1 \set@color }
@@ -14932,6 +15134,11 @@ version 2005/12/01 or later.
% \begin{macrocode}
\keys_define:nn { NiceMatrix / Block / SecondPass }
{
+ tikz .code:n =
+ \bool_if:NTF \c_@@_tikz_loaded_bool
+ { \seq_put_right:Nn \l_@@_tikz_seq { { #1 } } }
+ { \@@_error:n { tikz~key~without~tikz } } ,
+ tikz .value_required:n = true ,
fill .tl_set:N = \l_@@_fill_tl ,
fill .value_required:n = true ,
draw .tl_set:N = \l_@@_draw_tl ,
@@ -15031,7 +15238,7 @@ version 2005/12/01 or later.
%
% \begin{macrocode}
\cs_new_protected:Npn \@@_Block_v:nnnnnn #1 #2 #3 #4 #5 #6
- {
+ {
% \end{macrocode}
% The sequence of the positions of the blocks will be used when drawing the rules
% (in fact, there is also the |\multicolumn| and the |\diagbox| in that sequence).
@@ -15107,6 +15314,21 @@ version 2005/12/01 or later.
}
}
% \end{macrocode}
+%
+% \begin{macrocode}
+ \seq_if_empty:NF \l_@@_tikz_seq
+ {
+ \tl_gput_right:Nx \g_nicematrix_code_before_tl
+ {
+ \@@_block_tikz:nnnnn
+ { #1 }
+ { #2 }
+ { \int_use:N \l_@@_last_row_int }
+ { \int_use:N \l_@@_last_col_int }
+ { \seq_use:Nn \l_@@_tikz_seq { , } }
+ }
+ }
+% \end{macrocode}
%
% \medskip
% \begin{macrocode}
@@ -15630,6 +15852,25 @@ version 2005/12/01 or later.
line-width .dim_set:N = \l_@@_line_width_dim
}
% \end{macrocode}
+%
+% \bigskip
+% The following command will be used if the key |tikz| has been used for the
+% command |\Block|. The arguments |#1| and |#2| are the coordinates of the first
+% cell and |#3| and |#4| the coordinates of the last cell of the block. |#5| is
+% a comma-separated list of the Tikz keys used with the path.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_block_tikz:nnnnn #1 #2 #3 #4 #5
+ {
+ \begin { tikzpicture }
+ \clist_map_inline:nn { #5 }
+ {
+ \path [ ##1 ]
+ ( #1 -| #2 ) rectangle ( \@@_succ:n { #3 } -| \@@_succ:n { #4 } ) ;
+ }
+ \end { tikzpicture }
+ }
+% \end{macrocode}
+%
%
% \subsection*{How to draw the dotted lines transparently}
% \begin{macrocode}
@@ -16821,7 +17062,7 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
-%
+%
% \begin{macrocode}
\@@_msg_new:nn { too~much~cols~for~matrix~with~last~col }
{
@@ -17121,6 +17362,15 @@ version 2005/12/01 or later.
If~you~go~on,~this~specification~of~border~will~be~ignored.
}
% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { tikz~key~without~tikz }
+ {
+ You~can't~use~the~key~'tikz'~for~the~command~'\token_to_str:N
+ \Block'~because~you~have~not~loaded~Tikz.~
+ If~you~go~on,~this~key~will~be~ignored.
+ }
+% \end{macrocode}
%
% \begin{macrocode}
\@@_msg_new:nn { last-col~non~empty~for~NiceArray }
@@ -17257,7 +17507,7 @@ version 2005/12/01 or later.
}
{
The~available~keys~are~(in~alphabetic~order):~b,~borders,~c,~draw,~fill,~
- hvlines,~l,~line-width,~rounded-corners,~r~and~t.
+ hvlines,~l,~line-width,~rounded-corners,~r,~t~and~tikz.
}
% \end{macrocode}
%
@@ -18064,6 +18314,10 @@ version 2005/12/01 or later.
%
% New command |\RowStyle|
%
+% \subsection*{Changes between versions 5.18 and 5.19}
+%
+% New key |tikz| for the command |\Block|.
+%
% \PrintIndex
%
% \tableofcontents
diff --git a/macros/latex/contrib/nicematrix/nicematrix.pdf b/macros/latex/contrib/nicematrix/nicematrix.pdf
index 18b8189cdf..db334606da 100644
--- a/macros/latex/contrib/nicematrix/nicematrix.pdf
+++ b/macros/latex/contrib/nicematrix/nicematrix.pdf
Binary files differ
diff --git a/macros/latex/contrib/projlib/ProjLib-doc-cn.pdf b/macros/latex/contrib/projlib/ProjLib-doc-cn.pdf
index b237591ac0..ee69f8e313 100644
--- a/macros/latex/contrib/projlib/ProjLib-doc-cn.pdf
+++ b/macros/latex/contrib/projlib/ProjLib-doc-cn.pdf
Binary files differ
diff --git a/macros/latex/contrib/projlib/ProjLib-doc-en.pdf b/macros/latex/contrib/projlib/ProjLib-doc-en.pdf
index ece459f91d..595ebf9f25 100644
--- a/macros/latex/contrib/projlib/ProjLib-doc-en.pdf
+++ b/macros/latex/contrib/projlib/ProjLib-doc-en.pdf
Binary files differ
diff --git a/macros/latex/contrib/projlib/ProjLib-doc-fr.pdf b/macros/latex/contrib/projlib/ProjLib-doc-fr.pdf
index eb34d5f83e..40b469a972 100644
--- a/macros/latex/contrib/projlib/ProjLib-doc-fr.pdf
+++ b/macros/latex/contrib/projlib/ProjLib-doc-fr.pdf
Binary files differ
diff --git a/macros/latex/contrib/projlib/ProjLib-doc.dtx b/macros/latex/contrib/projlib/ProjLib-doc.dtx
index 6932d8bf52..6da315bd79 100644
--- a/macros/latex/contrib/projlib/ProjLib-doc.dtx
+++ b/macros/latex/contrib/projlib/ProjLib-doc.dtx
@@ -109,7 +109,7 @@
%<*ProjLib-doc-cn>
\title{\ProjLib{} 工具集\\[.3\baselineskip]\normalsize 使用指南}
\author{许锦文}
-\thanks{对应版本.~~\texttt{\ProjLib{}~2021/07/12}}
+\thanks{对应版本.~~\texttt{\ProjLib{}~2021/07/23}}
\email{\href{mailto:ProjLib@outlook.com}{ProjLib@outlook.com}}
\date{2021年7月,北京}
%</ProjLib-doc-cn>
@@ -117,7 +117,7 @@
%<*ProjLib-doc-en>
\title{\ProjLib{}~\,Toolkit\\[.3\baselineskip]\normalsize User Manual}
\author{Jinwen XU}
-\thanks{Corresponding to: \texttt{\ProjLib{}~2021/07/12}}
+\thanks{Corresponding to: \texttt{\ProjLib{}~2021/07/23}}
\email{\href{mailto:ProjLib@outlook.com}{ProjLib@outlook.com}}
\date{July 2021, Beijing}
%</ProjLib-doc-en>
@@ -125,7 +125,7 @@
%<*ProjLib-doc-fr>
\title{La boîte à outils~\,\ProjLib{}\\[.3\baselineskip]\normalsize Manuel d'utilisation}
\author{Jinwen XU}
-\thanks{Correspondant à : \texttt{\ProjLib{}~2021/07/12}}
+\thanks{Correspondant à : \texttt{\ProjLib{}~2021/07/23}}
\email{\href{mailto:ProjLib@outlook.com}{ProjLib@outlook.com}}
\date{juillet 2021, à Pékin}
%</ProjLib-doc-fr>
@@ -829,8 +829,8 @@ For details on how to select a language, please refer to the section on \PJLlang
\PJLdraft{} propose les macros suivantes :
\begin{itemize}
- \item \lstinline|\dnf| ou \lstinline|\dnf<...>|. L'effet est : \dnf~ ou \dnf<...>. \\Le texte à l'intérieur changera en fonction de la langue actuelle. Par exemple, il sera affiché sous la forme \UseOtherLanguage{English}{\dnf} en mode anglais.
- \item \lstinline|\needgraph| ou \lstinline|\needgraph<...>|. L'effet est : \needgraph ou \needgraph<...>Le texte de l'invite change en fonction de la langue actuelle. Par exemple, en mode anglais, il sera affiché sous la forme \UseOtherLanguage{English}{\needgraph}
+ \item \lstinline|\dnf| ou \lstinline|\dnf<...>|. L'effet est : \dnf~ ou \dnf<...>. \\Le texte à l'intérieur changera en fonction de la langue actuelle. Par exemple, il sera affiché sous la forme \UseOtherLanguage{English}{\dnf} en mode anglais.
+ \item \lstinline|\needgraph| ou \lstinline|\needgraph<...>|. L'effet est : \needgraph ou \needgraph<...>Le texte de l'invite change en fonction de la langue actuelle. Par exemple, en mode anglais, il sera affiché sous la forme \UseOtherLanguage{English}{\needgraph}
\end{itemize}
Pour plus de détails sur la façon de sélectionner une langue, veuillez vous référer à la section sur \PJLlang{}.
@@ -1530,11 +1530,11 @@ Ensuite, créez cet environnement de l'une des cinq manières suivantes :
\begin{itemize}
\item \lstinline|\CreateTheorem*{|\meta{name of environment}\lstinline|}|
\begin{itemize}
- \item Define an unnumbered environment \meta{name of environment}
+ \item Définir un environnement non numéroté \meta{name of environment}
\end{itemize}
\item \lstinline|\CreateTheorem{|\meta{name of environment}\lstinline|}|
\begin{itemize}
- \item Définir un environnement non numéroté \meta{name of environment}, numéroté dans l'ordre 1,2,3,\dots
+ \item Définir un environnement numéroté \meta{name of environment}, numéroté dans l'ordre 1, 2, 3, \dots
\end{itemize}
\item \lstinline|\CreateTheorem{|\meta{name of environment}\lstinline|}[|\meta{numbered like}\lstinline|]|
\begin{itemize}
@@ -1590,7 +1590,6 @@ définit un environnement non numéroté \lstinline|proofidea*| et un environnem
\begin{itemize}[itemsep=.6em]
\item \PJLauthor{} 仍然处于初步阶段,在很多方面还远远比不上相对成熟的 \textsf{authblk}。
\item \PJLlang{}:针对 \textsf{polyglossia} 的设置仍然存在许多问题,因此现在主要功能都是通过 \textsf{babel} 实现的。
- \item \PJLlang{}:语言选项的设定存在问题,如 \texttt{chinese} 会导致 \textsf{babel} 报错,并且不同选项间还可能产生冲突。
\item \PJLpaper{} 的 \texttt{preview} 功能主要是通过 \textsf{geometry} 宏包实现的,因此在 \textsc{\textsf{Koma}} 文档类中效果不好。
\item \PJLthm{} 对于定理类环境的编号与样式设定目前还无法由用户更改。
\item \PJLthm{}:智能引用针对所有 \PJLlang{} 已支持语言的本地化尚不完整,主要是中文、日文与俄文。
@@ -1605,7 +1604,6 @@ définit un environnement non numéroté \lstinline|proofidea*| et un environnem
\begin{itemize}[itemsep=.6em]
\item \PJLauthor{} is still in its preliminary stage, its effect is not as good as the relatively mature \textsf{authblk}.
\item \PJLlang{}: It is still quite problematic with the configuration of \textsf{polyglossia}, so main features are implemented through \textsf{babel} for now.
- \item \PJLlang{}: There are some problems with the language options. For example, \texttt{chinese} will cause errors with \textsf{babel}. Also, conflicts among multiple options may occur.
\item \PJLpaper{}: the \texttt{preview} option is mainly implemented with the help of package \textsf{geometry}, so it does not work quite as well in the \textsc{\textsf{Koma}} document classes.
\item \PJLthm{}: The numbering and theorem-style settings of the theorem-like environments cannot be accessed by the user at present.
\item \PJLthm{}: The localization of \textsf{cleveref} is not yet complete for all supported languages of \PJLlang{}, especially for Chinese, Japanese and Russian.
@@ -1620,7 +1618,6 @@ définit un environnement non numéroté \lstinline|proofidea*| et un environnem
\begin{itemize}[itemsep=.6em]
\item \PJLauthor{} est encore à son stade préliminaire, son effet n'est pas aussi bon que le \textsf{authblk} qui est relativement mature.
\item \PJLlang{} : C'est encore assez problématique avec la configuration de \textsf{polyglossia}, donc les fonctionnalités principales sont implémentées via \textsf{babel} pour le moment.
- \item \PJLlang{} : Il y a quelques problèmes avec les options de langue. Par exemple, \texttt{chinese} provoquera des erreurs avec \textsf{babel}. D'autre part, des conflits entre plusieurs options peuvent survenir.
\item \PJLpaper{} : l'option \texttt{preview} est principalement implémentée à l'aide du package \textsf{geometry}, elle ne fonctionne donc pas aussi bien dans les classes de documents \textsc{\textsf{Koma}}.
\item \PJLthm{} : les paramètres de numérotation et de style théorème des environnements de type théorème ne sont actuellement pas accessibles à l'utilisateur.
\item \PJLthm{} : la localisation de \textsf{cleveref} n'est pas encore finie pour toutes les langues prises en charge par \PJLlang{}, en particulier pour le chinois, le japonais et le russe.
diff --git a/macros/latex/contrib/projlib/ProjLib.dtx b/macros/latex/contrib/projlib/ProjLib.dtx
index b48967e488..634c196156 100644
--- a/macros/latex/contrib/projlib/ProjLib.dtx
+++ b/macros/latex/contrib/projlib/ProjLib.dtx
@@ -18,57 +18,57 @@
%
%<*ProjLib>
\ProvidesPackage{ProjLib}
- [2021/07/12 The collective interface of ProjLib toolkit]
+ [2021/07/23 The collective interface of ProjLib toolkit]
%</ProjLib>
%
%<*PJLamssim>
\ProvidesPackage{PJLamssim}
- [2021/07/12 Simulate some features of amsart]
+ [2021/07/23 Simulate some features of amsart]
%</PJLamssim>
%
%<*PJLauthor>
\ProvidesPackage{PJLauthor}
- [2021/07/12 Enhanced author information block]
+ [2021/07/23 Enhanced author information block]
%</PJLauthor>
%
%<*PJLdate>
\ProvidesPackage{PJLdate}
- [2021/07/12 Convert yyyy-mm-dd to normal datetime format]
+ [2021/07/23 Convert yyyy-mm-dd to normal datetime format]
%</PJLdate>
%
%<*PJLdraft>
\ProvidesPackage{PJLdraft}
- [2021/07/12 Some useful macros for the draft stage]
+ [2021/07/23 Some useful macros for the draft stage]
%</PJLdraft>
%
%<*PJLlang>
\ProvidesPackage{PJLlang}
- [2021/07/12 Multi-language configuration]
+ [2021/07/23 Multi-language configuration]
%</PJLlang>
%
%<*PJLlogo>
\ProvidesPackage{PJLlogo}
- [2021/07/12 The ProjLib logo]
+ [2021/07/23 The ProjLib logo]
%</PJLlogo>
%
%<*PJLmath>
\ProvidesPackage{PJLmath}
- [2021/07/12 Useful math macros and shortcuts]
+ [2021/07/23 Useful math macros and shortcuts]
%</PJLmath>
%
%<*PJLpaper>
\ProvidesPackage{PJLpaper}
- [2021/07/12 Paper style configuration]
+ [2021/07/23 Paper style configuration]
%</PJLpaper>
%
%<*PJLthm>
\ProvidesPackage{PJLthm}
- [2021/07/12 Theorem setup and configuration]
+ [2021/07/23 Theorem setup and configuration]
%</PJLthm>
%
%<*PJLtoolkit>
\ProvidesPackage{PJLtoolkit}
- [2021/07/12 Collective interface of ProjLib Toolkit]
+ [2021/07/23 Collective interface of ProjLib Toolkit]
%</PJLtoolkit>
%
%# 下面两行引入宏包的代码是所有文件共用的。
@@ -615,6 +615,18 @@
%# Process options
\ProcessKeyvalOptions*\relax
+%# 从全局参数中去除 chinese 和 Chinese
+%# Remove chinese and Chinese from global options
+\ExplSyntaxOn
+\cs_new_protected:cpn { @clearglobaloption } #1
+ {
+ \clist_remove_all:cn { @classoptionslist } { #1 }
+ }
+\ExplSyntaxOff
+
+\@clearglobaloption{chinese}
+\@clearglobaloption{Chinese}
+
%# 默认语言:英语
%# Default main language: English
\providecommand{\PJLlang@mainlang}{EN}
diff --git a/macros/latex/contrib/spbmark/spbmark.dtx b/macros/latex/contrib/spbmark/spbmark.dtx
index 33498e535e..ba9cc49e69 100644
--- a/macros/latex/contrib/spbmark/spbmark.dtx
+++ b/macros/latex/contrib/spbmark/spbmark.dtx
@@ -23,7 +23,7 @@
%
% \title{\pkg{spbmark} -- Customize superscripts and subscripts}
% \author{Qu Yi}
-% \date{2021/07/22\hskip 1em\relax v1.02\thanks{\url{https://github.com/texl3/spbmark}}}
+% \date{2021/07/22\hskip 1em\relax v1.03\thanks{\url{https://github.com/texl3/spbmark}}}
%
% \maketitle
% \begin{abstract}
@@ -136,7 +136,7 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2018/12/31]
\RequirePackage{xparse,l3keys2e}
-\ProvidesExplPackage{spbmark}{2021/07/22}{1.02}
+\ProvidesExplPackage{spbmark}{2021/07/22}{1.03}
{Customize superscripts and subscripts}
\cs_new_protected:Npn \spb_define:n { \keys_define:nn { spbmark } }
@@ -175,8 +175,6 @@
\tl_set:Nn \l__spb_boxb_wd_tl { \box_wd:N \l_tmpb_box }
\cs_new:Npn \spb_tmp_boxa_use: { \box_use:N \l_tmpa_box }
\cs_new:Npn \spb_tmp_boxb_use: { \box_use:N \l_tmpb_box }
-\cs_new:Npn \spb_tmp_hboxa_set:n #1 { \hbox_set:Nn \l_tmpa_box {#1} }
-\cs_new:Npn \spb_tmp_hboxb_set:n #1 { \hbox_set:Nn \l_tmpb_box {#1} }
\cs_new:Npn \spb_box_max_dim_horizontal:
{
\skip_horizontal:n
@@ -194,6 +192,26 @@
\spb_boxwd_subtract:nnnn { -0.5 } { 0.5 } {#1} {#2}
\use:c { spb_tmp_#1_use: }
}
+\cs_new:Npn \spb_math_print_store:nnn #1#2#3
+ {
+ \hbox_set:Nn \l_tmpa_box
+ { \ensuremath{#1{\spb_math:nn {#2} {#3}}} }
+ }
+\cs_new:Npn \spb_text_print_store:nnn #1#2#3
+ {
+ \hbox_set:Nn \l_tmpa_box
+ { #1{\use:c { spb@text#2script@save }{#3}} }
+ }
+\cs_new:Npn \spb_math_print_store:nnnn #1#2#3#4
+ {
+ \hbox_set:Nn \l_tmpa_box { \ensuremath{#1{\spb@sp@save{#2}}} }
+ \hbox_set:Nn \l_tmpb_box { \ensuremath{#3{\spb@sb@save{#4}}} }
+ }
+\cs_new:Npn \spb_text_print_store:nnnn #1#2#3#4
+ {
+ \hbox_set:Nn \l_tmpa_box { #1{\spb@textsuperscript@save{#2}} }
+ \hbox_set:Nn \l_tmpb_box { #3{\spb@textsubscript@save{#4}} }
+ }
\cs_set_eq:NN \spb@textsuperscript@save \textsuperscript
\cs_set_eq:NN \spb@textsubscript@save \textsubscript
\cs_set_eq:NN \spb@sp@save \sp
@@ -211,6 +229,7 @@
\tl_if_empty:nF {#1} { \box_set_ht:Nn \l_tmpb_box {#1} }
\tl_if_novalue:nF {#2} { \box_set_dp:Nn \l_tmpb_box {#2} }
}
+
\clist_map_inline:nn
{ super,sub }
{
@@ -222,18 +241,11 @@
}
{
\IfBooleanTF{##1}
+ {\spb_math_print_store:nnn {##4} {#1} {##5}}
{
- \spb_tmp_hboxa_set:n
- { \ensuremath{##4{\spb_math:nn {#1} {##5}}} }
- }{
\mode_if_math:TF
- {
- \spb_tmp_hboxa_set:n
- { \ensuremath{##4{\spb_math:nn {#1} {##5}}} }
- }{
- \spb_tmp_hboxa_set:n
- { ##4{\use:c { spb@text#1script@save }{##5}} }
- }
+ { \spb_math_print_store:nnn {##4} {#1} {##5} }
+ { \spb_text_print_store:nnn {##4} {#1} {##5} }
}
\hbox_set_to_wd:Nnn \l_tmpb_box { \l__spb_boxa_wd_tl + ##6 }
{ \hss\box_move_up:nn {##2} { \spb_tmp_boxa_use: } }
@@ -248,19 +260,11 @@
}
{
\IfBooleanTF{#1}
+ {\spb_math_print_store:nnnn {#4} {#5} {#8} {#6}}
{
- \spb_tmp_hboxa_set:n { \ensuremath{#4{\spb@sp@save{#5}}} }
- \spb_tmp_hboxb_set:n { \ensuremath{#8{\spb@sb@save{#6}}} }
- }{
\mode_if_math:TF
- {
- \spb_tmp_hboxa_set:n { \ensuremath{#4{\spb@sp@save{#5}}} }
- \spb_tmp_hboxb_set:n { \ensuremath{#8{\spb@sb@save{#6}}} }
- }
- {
- \spb_tmp_hboxa_set:n { #4{\spb@textsuperscript@save{#5}} }
- \spb_tmp_hboxb_set:n { #8{\spb@textsubscript@save{#6}} }
- }
+ { \spb_math_print_store:nnnn {#4} {#5} {#8} {#6} }
+ { \spb_text_print_store:nnnn {#4} {#5} {#8} {#6} }
}
\hbox_set_to_wd:Nnn \l_tmpa_box { \l__spb_boxa_wd_tl + #7 }
{ \hss\box_move_up:nn {#2} { \spb_tmp_boxa_use: } }
@@ -282,7 +286,7 @@
\spb_box_max_dim_horizontal:
}
{
- \dim_compare:nTF { \l__spb_boxa_wd_tl > \l__spb_boxb_wd_tl }
+ \dim_compare:nNnTF { \l__spb_boxa_wd_tl } > { \l__spb_boxb_wd_tl }
{ \spb_boxwd_script_align:nn { boxa } { boxb } }
{ \spb_boxwd_script_align:nn { boxb } { boxa } }
}
diff --git a/macros/latex/contrib/spbmark/spbmark.pdf b/macros/latex/contrib/spbmark/spbmark.pdf
index 541ea467ed..1c3f271fe9 100644
--- a/macros/latex/contrib/spbmark/spbmark.pdf
+++ b/macros/latex/contrib/spbmark/spbmark.pdf
Binary files differ
diff --git a/macros/luatex/generic/luaxml/README b/macros/luatex/generic/luaxml/README
index 9ac304ea1d..e41f3100ea 100644
--- a/macros/luatex/generic/luaxml/README
+++ b/macros/luatex/generic/luaxml/README
@@ -28,7 +28,7 @@ Author
------
Michal Hoftich
Email: michal.h21@gmail.com
-Version: v0.1n, 2020-12-20
+Version: v0.1o, 2021-07-23
Original authors: Paul Chakravarti and Manoel Campos (http://manoelcampos.com)
diff --git a/macros/luatex/generic/luaxml/luaxml-domobject.lua b/macros/luatex/generic/luaxml/luaxml-domobject.lua
index 19850ce456..7829c13b1e 100644
--- a/macros/luatex/generic/luaxml/luaxml-domobject.lua
+++ b/macros/luatex/generic/luaxml/luaxml-domobject.lua
@@ -67,6 +67,9 @@ local function serialize_dom(parser, current,level, output)
for k, v in pairs(attr) do
t[#t+1] = string.format("%s='%s'", k, escape_attr(v))
end
+ -- sort attributes alphabetically. this will ensure that
+ -- their order will not change between several executions of dom:serialize()
+ table.sort(t)
if #t == 0 then return "" end
-- add space before attributes
return " " .. table.concat(t, " ")
diff --git a/macros/luatex/generic/luaxml/luaxml-namedentities.lua b/macros/luatex/generic/luaxml/luaxml-namedentities.lua
index 5c5ff00777..9a26f448f6 100644
--- a/macros/luatex/generic/luaxml/luaxml-namedentities.lua
+++ b/macros/luatex/generic/luaxml/luaxml-namedentities.lua
@@ -1,2233 +1,2234 @@
+local utf8 = require "utf8"
return {
-["Implies"]="⇒",
-["longrightarrow"]="⟶",
-["precneqq"]="⪵",
-["geqslant"]="⩾",
-["Product"]="∏",
-["Scirc"]="Ŝ",
-["lvnE"]="≨︀",
-["dotminus"]="∸",
-["sscr"]="𝓈",
-["capdot"]="⩀",
-["dlcrop"]="⌍",
-["omacr"]="ō",
-["sext"]="✶",
-["xutri"]="△",
-["xrArr"]="⟹",
-["glE"]="⪒",
-["NotSupersetEqual"]="⊉",
-["backsim"]="∽",
+["Subset"]="⋐",
+["Chi"]="Χ",
+["tprime"]="‴",
+["lneq"]="⪇",
+["RightUpTeeVector"]="⥜",
+["cscr"]="𝒸",
+["leftrightarrows"]="⇆",
+["LeftRightVector"]="⥎",
+["Laplacetrf"]="ℒ",
+["boxHd"]="╤",
+["GreaterSlantEqual"]="⩾",
+["sqsub"]="⊏",
+["nvdash"]="⊬",
+["boxHu"]="╧",
+["vcy"]="в",
+["DiacriticalDoubleAcute"]="˝",
+["nvHarr"]="⤄",
+["lnapprox"]="⪉",
+["fscr"]="𝒻",
+["OverBracket"]="⎴",
+["pm"]="±",
+["ovbar"]="⌽",
+["larrhk"]="↩",
+["atilde"]="ã",
+["Igrave"]="Ì",
+["profsurf"]="⌓",
+["Sigma"]="Σ",
+["rHar"]="⥤",
+["Gcedil"]="Ģ",
+["sect"]="§",
+["nmid"]="∤",
+["escr"]="ℯ",
+["delta"]="δ",
+["male"]="♂",
+["Integral"]="∫",
+["RightUpVectorBar"]="⥔",
+["alefsym"]="ℵ",
+["nsqsube"]="⋢",
+["Nacute"]="Ń",
+["mcomma"]="⨩",
+["ApplyFunction"]=utf8.char(8289),
+["rfisht"]="⥽",
+["phmmat"]="ℳ",
+["rarrw"]="↝",
+["backepsilon"]="϶",
+["hscr"]="𝒽",
+["middot"]="·",
+["ldrushar"]="⥋",
+["supne"]="⊋",
+["Longleftrightarrow"]="⟺",
+["Oacute"]="Ó",
+["af"]="⁡",
["sup"]="⊃",
-["realpart"]="ℜ",
+["lozenge"]="◊",
+["scy"]="с",
+["gscr"]="ℊ",
+["smallsetminus"]="∖",
["hardcy"]="ъ",
-["sqcap"]="⊓",
-["brvbar"]="¦",
-["LT"]="<",
-["udarr"]="⇅",
-["lozf"]="⧫",
-["Eogon"]="Ę",
-["frac18"]="⅛",
-["lesssim"]="≲",
-["wedbar"]="⩟",
-["EmptyVerySmallSquare"]="▫",
-["aring"]="å",
-["lesdoto"]="⪁",
-["ltquest"]="⩻",
-["LeftUpTeeVector"]="⥠",
-["FilledSmallSquare"]="◼",
-["mho"]="℧",
-["NotGreaterTilde"]="≵",
-["xharr"]="⟷",
-["NotSucceedsEqual"]="⪰̸",
-["sqsupset"]="⊐",
-["Ccedil"]="Ç",
-["aacute"]="á",
-["succcurlyeq"]="≽",
-["gneq"]="⪈",
-["forall"]="∀",
-["rightharpoonup"]="⇀",
-["leftarrow"]="←",
-["ang"]="∠",
-["mapstoup"]="↥",
-["xscr"]="𝓍",
-["NotTildeEqual"]="≄",
-["ograve"]="ò",
-["boxdl"]="┐",
-["DownLeftVectorBar"]="⥖",
-["nsup"]="⊅",
-["shchcy"]="щ",
-["demptyv"]="⦱",
-["apos"]="'",
-["between"]="≬",
-["leftrightsquigarrow"]="↭",
-["gtcc"]="⪧",
-["grave"]="`",
-["bigodot"]="⨀",
-["oline"]="‾",
-["angmsdad"]="⦫",
-["NotCongruent"]="≢",
-["gtquest"]="⩼",
-["fltns"]="▱",
-["smeparsl"]="⧤",
-["Eta"]="Η",
-["ltdot"]="⋖",
-["rhard"]="⇁",
-["rscr"]="𝓇",
-["ETH"]="Ð",
-["iocy"]="ё",
-["semi"]=";",
-["nexists"]="∄",
-["approxeq"]="≊",
-["compfn"]="∘",
-["sstarf"]="⋆",
-["angrtvbd"]="⦝",
-["gnap"]="⪊",
-["mDDot"]="∺",
-["udblac"]="ű",
-["Acirc"]="Â",
-["UnderParenthesis"]="⏝",
-["nisd"]="⋺",
-["lneq"]="⪇",
-["Dagger"]="‡",
-["qscr"]="𝓆",
-["gneqq"]="≩",
-["doteqdot"]="≑",
["DoubleVerticalBar"]="∥",
-["emptyset"]="∅",
-["lEg"]="⪋",
-["subseteq"]="⊆",
-["dwangle"]="⦦",
-["dotplus"]="∔",
-["NotPrecedesSlantEqual"]="⋠",
-["bnot"]="⌐",
-["LeftDownVector"]="⇃",
-["leg"]="⋚",
-["Therefore"]="∴",
-["Omega"]="Ω",
-["acE"]="∾̳",
-["Auml"]="Ä",
-["xvee"]="⋁",
-["Eacute"]="É",
-["LeftFloor"]="⌊",
-["swnwar"]="⤪",
-["Jukcy"]="Є",
-["nless"]="≮",
-["NotSquareSupersetEqual"]="⋣",
-["larrfs"]="⤝",
-["gcy"]="г",
-["solbar"]="⌿",
-["rharul"]="⥬",
-["dscy"]="ѕ",
-["yen"]="¥",
-["ForAll"]="∀",
-["DownArrow"]="↓",
-["qprime"]="⁗",
-["NegativeThickSpace"]="​",
-["part"]="∂",
-["Iukcy"]="І",
-["ltcc"]="⪦",
-["xlArr"]="⟸",
-["fcy"]="ф",
-["gl"]="≷",
+["Yuml"]="Ÿ",
+["plusdu"]="⨥",
+["NotSucceedsSlantEqual"]="⋡",
+["nwnear"]="⤧",
+["lfloor"]="⌊",
+["rcy"]="р",
+["jscr"]="𝒿",
+["AMP"]="&",
+["acute"]="´",
+["uacute"]="ú",
+["Or"]="⩔",
+["rdldhar"]="⥩",
+["langd"]="⦑",
+["Iacute"]="Í",
+["spar"]="∥",
+["ucy"]="у",
["rsh"]="↱",
-["lrhar"]="⇋",
-["divide"]="÷",
-["bemptyv"]="⦰",
-["rx"]="℞",
-["ecy"]="э",
-["ApplyFunction"]="⁡",
-["divideontimes"]="⋇",
-["prod"]="∏",
-["boxHU"]="╩",
-["HARDcy"]="Ъ",
-["mstpos"]="∾",
-["llcorner"]="⌞",
-["rsquor"]="’",
-["NotTildeFullEqual"]="≇",
-["mlcp"]="⫛",
-["cemptyv"]="⦲",
-["Proportional"]="∝",
-["DiacriticalDoubleAcute"]="˝",
-["dcy"]="д",
-["Yacute"]="Ý",
-["egsdot"]="⪘",
-["hslash"]="ℏ",
-["infin"]="∞",
-["Auml"]="Ä",
-["Wcirc"]="Ŵ",
-["larrtl"]="↢",
-["Aacute"]="Á",
-["LeftTriangleEqual"]="⊴",
-["NegativeMediumSpace"]="​",
-["TripleDot"]="⃛",
-["utdot"]="⋰",
-["isinv"]="∈",
-["looparrowright"]="↬",
-["loang"]="⟬",
-["multimap"]="⊸",
-["NotLessEqual"]="≰",
-["midcir"]="⫰",
-["nge"]="≱",
-["quot"]="\"",
-["REG"]="®",
-["div"]="÷",
-["complexes"]="ℂ",
-["lhblk"]="▄",
-["gvnE"]="≩︀",
-["leftharpoonup"]="↼",
-["it"]="⁢",
-["clubsuit"]="♣",
-["iff"]="⇔",
-["Hacek"]="ˇ",
-["CircleTimes"]="⊗",
-["Cacute"]="Ć",
-["rarrtl"]="↣",
-["RightDownVector"]="⇂",
-["rarrfs"]="⤞",
-["UpArrowBar"]="⤒",
-["male"]="♂",
-["RightTriangle"]="⊳",
+["Kcedil"]="Ķ",
+["iscr"]="𝒾",
+["lambda"]="λ",
+["lbrkslu"]="⦍",
+["napE"]="⩰̸",
+["shcy"]="ш",
+["nsupE"]="⫆̸",
+["Ycirc"]="Ŷ",
+["sect"]="§",
+["precnapprox"]="⪹",
+["iocy"]="ё",
+["dzcy"]="џ",
+["ETH"]="Ð",
["GreaterTilde"]="≳",
-["Barwed"]="⌆",
-["ltlarr"]="⥶",
-["Zdot"]="Ż",
-["parsim"]="⫳",
-["Ugrave"]="Ù",
-["Dot"]="¨",
-["circleddash"]="⊝",
-["rsaquo"]="›",
-["hyphen"]="‐",
-["angrt"]="∟",
-["RightTriangleEqual"]="⊵",
-["Darr"]="↡",
-["ulcrop"]="⌏",
-["olcir"]="⦾",
-["gimel"]="ℷ",
-["gel"]="⋛",
-["SquareSubset"]="⊏",
-["Uacute"]="Ú",
-["gt"]=">",
-["lnap"]="⪉",
-["Union"]="⋃",
+["coprod"]="∐",
+["rpar"]=")",
+["lthree"]="⋋",
+["ImaginaryI"]="ⅈ",
+["DoubleUpDownArrow"]="⇕",
+["intercal"]="⊺",
+["spadesuit"]="♠",
+["boxVH"]="╬",
+["smashp"]="⨳",
["nu"]="ν",
-["and"]="∧",
-["ltcir"]="⩹",
-["Fscr"]="ℱ",
-["ee"]="ⅇ",
-["laquo"]="«",
-["Hfr"]="ℌ",
-["prec"]="≺",
-["imagline"]="ℐ",
-["precnsim"]="⋨",
-["zhcy"]="ж",
+["Agrave"]="À",
+["boxtimes"]="⊠",
+["sext"]="✶",
+["nsub"]="⊄",
+["oelig"]="œ",
+["GreaterEqual"]="≥",
+["TRADE"]="™",
+["dtrif"]="▾",
+["nless"]="≮",
["mu"]="μ",
-["rlarr"]="⇄",
-["pound"]="£",
-["origof"]="⊶",
-["rfloor"]="⌋",
-["lnsim"]="⋦",
-["nVdash"]="⊮",
-["otimes"]="⊗",
-["iuml"]="ï",
-["Cscr"]="𝒞",
-["lsime"]="⪍",
-["ngeqq"]="≧̸",
-["Del"]="∇",
-["Coproduct"]="∐",
-["NotSubsetEqual"]="⊈",
-["HilbertSpace"]="ℋ",
-["frac58"]="⅝",
-["cap"]="∩",
-["roang"]="⟭",
-["intlarhk"]="⨗",
-["DownTee"]="⊤",
-["thickapprox"]="≈",
-["prnap"]="⪹",
-["laquo"]="«",
-["lesdot"]="⩿",
-["inodot"]="ı",
-["Hscr"]="ℋ",
-["YIcy"]="Ї",
-["ctdot"]="⋯",
-["thetav"]="ϑ",
-["DoubleUpDownArrow"]="⇕",
-["succ"]="≻",
-["nbumpe"]="≏̸",
-["ReverseElement"]="∋",
-["Oacute"]="Ó",
-["equest"]="≟",
-["Lt"]="≪",
-["Nacute"]="Ń",
-["DiacriticalTilde"]="˜",
-["Escr"]="ℰ",
+["larrsim"]="⥳",
+["GreaterEqualLess"]="⋛",
+["Uuml"]="Ü",
+["LeftArrowBar"]="⇤",
+["ntrianglerighteq"]="⋭",
+["DiacriticalDot"]="˙",
+["LongLeftArrow"]="⟵",
+["agrave"]="à",
+["lmoustache"]="⎰",
+["nvDash"]="⊭",
+["para"]="¶",
+["nlt"]="≮",
+["Eacute"]="É",
+["spades"]="♠",
+["lrcorner"]="⌟",
+["checkmark"]="✓",
+["lessdot"]="⋖",
+["opar"]="⦷",
+["nVDash"]="⊯",
+["pertenk"]="‱",
+["range"]="⦥",
+["Pr"]="⪻",
+["Gammad"]="Ϝ",
+["ape"]="≊",
+["Longleftarrow"]="⟸",
+["boxV"]="║",
+["rightthreetimes"]="⋌",
+["gnap"]="⪊",
+["vzigzag"]="⦚",
+["Ecirc"]="Ê",
+["npar"]="∦",
+["notinvb"]="⋷",
+["Tau"]="Τ",
+["blank"]="␣",
+["Kappa"]="Κ",
+["rmoust"]="⎱",
+["GJcy"]="Ѓ",
+["ufisht"]="⥾",
+["NotLeftTriangleBar"]="⧏̸",
+["bigvee"]="⋁",
+["lrhar"]="⇋",
+["supset"]="⊃",
+["uwangle"]="⦧",
+["UpTeeArrow"]="↥",
+["supE"]="⫆",
+["imof"]="⊷",
+["leg"]="⋚",
+["notniva"]="∌",
+["nvgt"]=">⃒",
+["rthree"]="⋌",
+["yfr"]="𝔶",
+["uHar"]="⥣",
+["nshortmid"]="∤",
+["biguplus"]="⨄",
+["barvee"]="⊽",
+["iff"]="⇔",
["boxvH"]="╪",
-["Ifr"]="ℑ",
-["mp"]="∓",
-["ell"]="ℓ",
-["Iacute"]="Í",
+["simrarr"]="⥲",
+["Egrave"]="È",
+["ntilde"]="ñ",
+["VerticalTilde"]="≀",
+["sigmaf"]="ς",
+["khcy"]="х",
+["planck"]="ℏ",
["NotNestedGreaterGreater"]="⪢̸",
+["NonBreakingSpace"]=" ",
+["OpenCurlyQuote"]="‘",
+["supsim"]="⫈",
+["cudarrl"]="⤸",
+["theta"]="θ",
+["notindot"]="⋵̸",
+["Omicron"]="Ο",
+["ccedil"]="ç",
+["colone"]="≔",
+["bscr"]="𝒷",
+["Dagger"]="‡",
+["comma"]=",",
+["Acirc"]="Â",
+["plankv"]="ℏ",
+["boxdr"]="┌",
+["rarrap"]="⥵",
+["rmoustache"]="⎱",
+["LeftAngleBracket"]="⟨",
+["Cacute"]="Ć",
+["blk34"]="▓",
+["rfloor"]="⌋",
+["awconint"]="∳",
+["sfrown"]="⌢",
+["middot"]="·",
+["ascr"]="𝒶",
+["dot"]="˙",
+["caron"]="ˇ",
+["image"]="ℑ",
+["esdot"]="≐",
+["ohbar"]="⦵",
+["rarrb"]="⇥",
+["submult"]="⫁",
+["plusb"]="⊞",
+["oopf"]="𝕠",
+["breve"]="˘",
+["conint"]="∮",
+["angrt"]="∟",
+["nbump"]="≎̸",
["raquo"]="»",
-["Zcy"]="З",
-["micro"]="µ",
-["dzigrarr"]="⟿",
-["rtrif"]="▸",
-["Uuml"]="Ü",
-["nvHarr"]="⤄",
-["leqslant"]="⩽",
-["tritime"]="⨻",
-["nlarr"]="↚",
+["Iuml"]="Ï",
+["Rcedil"]="Ŗ",
+["minus"]="−",
+["nsucceq"]="⪰̸",
+["telrec"]="⌕",
+["CHcy"]="Ч",
+["nrightarrow"]="↛",
["NotRightTriangle"]="⋫",
-["apid"]="≋",
-["succeq"]="⪰",
-["NotEqualTilde"]="≂̸",
-["varphi"]="ϕ",
-["Vert"]="‖",
-["int"]="∫",
-["lurdshar"]="⥊",
-["lneqq"]="≨",
-["Jsercy"]="Ј",
-["Superset"]="⊃",
-["subsetneqq"]="⫋",
-["gap"]="⪆",
-["ssmile"]="⌣",
-["Ugrave"]="Ù",
+["zfr"]="𝔷",
+["succ"]="≻",
+["Aacute"]="Á",
+["NestedLessLess"]="≪",
+["RightTeeArrow"]="↦",
+["homtht"]="∻",
+["Cup"]="⋓",
+["lcub"]="{",
+["race"]="∽̱",
+["THORN"]="Þ",
+["propto"]="∝",
+["odblac"]="ő",
+["mumap"]="⊸",
+["filig"]="fi",
+["ecir"]="≖",
+["DoubleRightArrow"]="⇒",
+["npreceq"]="⪯̸",
+["female"]="♀",
+["LeftFloor"]="⌊",
+["gtrarr"]="⥸",
+["dotsquare"]="⊡",
+["map"]="↦",
+["OverBrace"]="⏞",
+["zopf"]="𝕫",
+["rang"]="⟩",
+["laquo"]="«",
+["elsdot"]="⪗",
+["frac56"]="⅚",
+["Iuml"]="Ï",
+["ocirc"]="ô",
+["clubs"]="♣",
["IOcy"]="Ё",
-["ltimes"]="⋉",
-["UnderBracket"]="⎵",
-["subseteqq"]="⫅",
-["Dscr"]="𝒟",
-["dtrif"]="▾",
-["raquo"]="»",
-["hbar"]="ℏ",
-["ge"]="≥",
-["cudarrr"]="⤵",
-["icy"]="и",
-["plusdo"]="∔",
-["bull"]="•",
-["weierp"]="℘",
-["mapsto"]="↦",
-["Uring"]="Ů",
-["supplus"]="⫀",
-["Succeeds"]="≻",
-["Ascr"]="𝒜",
-["cdot"]="ċ",
-["nwarr"]="↖",
-["target"]="⌖",
-["dharr"]="⇂",
-["curlyvee"]="⋎",
-["supE"]="⫆",
-["emsp13"]=" ",
-["ltrie"]="⊴",
-["olarr"]="↺",
-["RightTeeVector"]="⥛",
-["Vvdash"]="⊪",
-["larrsim"]="⥳",
-["varsubsetneq"]="⊊︀",
-["Not"]="⫬",
-["CenterDot"]="·",
-["PlusMinus"]="±",
-["aring"]="å",
-["Nscr"]="𝒩",
-["delta"]="δ",
-["npre"]="⪯̸",
-["Vcy"]="В",
-["NotVerticalBar"]="∤",
-["scpolint"]="⨓",
-["rcedil"]="ŗ",
-["Lmidot"]="Ŀ",
-["DScy"]="Ѕ",
-["nsubseteq"]="⊈",
-["ngE"]="≧̸",
-["NotSquareSubsetEqual"]="⋢",
+["scnE"]="⪶",
+["deg"]="°",
+["simgE"]="⪠",
+["nap"]="≉",
+["blacktriangle"]="▴",
["edot"]="ė",
-["Ucy"]="У",
-["lessapprox"]="⪅",
-["niv"]="∋",
-["Kscr"]="𝒦",
-["LeftVectorBar"]="⥒",
-["nhpar"]="⫲",
-["scedil"]="ş",
-["Uacute"]="Ú",
-["ntrianglelefteq"]="⋬",
-["Otilde"]="Õ",
-["iexcl"]="¡",
-["lbrke"]="⦋",
-["simdot"]="⩪",
-["sigmaf"]="ς",
-["Bfr"]="𝔅",
-["pitchfork"]="⋔",
-["ngeqslant"]="⩾̸",
-["Pscr"]="𝒫",
-["gsime"]="⪎",
-["Ouml"]="Ö",
-["rarrsim"]="⥴",
-["subE"]="⫅",
-["otimesas"]="⨶",
-["lfloor"]="⌊",
-["prop"]="∝",
-["imacr"]="ī",
-["blacktriangleleft"]="◂",
-["Ntilde"]="Ñ",
-["llarr"]="⇇",
-["nsucc"]="⊁",
-["PartialD"]="∂",
-["Iacute"]="Í",
-["gdot"]="ġ",
-["Afr"]="𝔄",
-["Igrave"]="Ì",
-["csub"]="⫏",
-["Mscr"]="ℳ",
-["Scy"]="С",
-["bsime"]="⋍",
-["nequiv"]="≢",
-["scnap"]="⪺",
-["Tab"]=" ",
-["Equal"]="⩵",
-["blacklozenge"]="⧫",
-["nrarrc"]="⤳̸",
-["divide"]="÷",
-["RightUpDownVector"]="⥏",
-["iinfin"]="⧜",
-["precnapprox"]="⪹",
-["dArr"]="⇓",
-["orslope"]="⩗",
-["Rcy"]="Р",
-["sqsub"]="⊏",
-["OverBracket"]="⎴",
-["sum"]="∑",
-["ncedil"]="ņ",
-["ltrPar"]="⦖",
-["ii"]="ⅈ",
-["Gcirc"]="Ĝ",
-["SucceedsTilde"]="≿",
-["RightFloor"]="⌋",
-["osol"]="⊘",
-["barwedge"]="⌅",
-["twoheadrightarrow"]="↠",
-["Gscr"]="𝒢",
-["acy"]="а",
-["dtdot"]="⋱",
-["rbrke"]="⦌",
-["imath"]="ı",
-["Hcirc"]="Ĥ",
-["num"]="#",
-["nprec"]="⊀",
-["smallsetminus"]="∖",
-["lesges"]="⪓",
-["LeftUpVector"]="↿",
-["gtdot"]="⋗",
-["theta"]="θ",
-["kappav"]="ϰ",
-["jmath"]="ȷ",
-["Lscr"]="ℒ",
-["Aogon"]="Ą",
-["ltrif"]="◂",
-["DownArrowUpArrow"]="⇵",
+["epsiv"]="ϵ",
+["napprox"]="≉",
+["NotGreaterSlantEqual"]="⩾̸",
["prap"]="⪷",
-["Racute"]="Ŕ",
-["curlyeqprec"]="⋞",
-["bepsi"]="϶",
-["blacktriangle"]="▴",
-["nvap"]="≍⃒",
-["Supset"]="⋑",
-["angmsd"]="∡",
-["boxul"]="┘",
-["LessSlantEqual"]="⩽",
-["GT"]=">",
-["nexist"]="∄",
-["ccupssm"]="⩐",
+["lnap"]="⪉",
+["circledS"]="Ⓢ",
+["lang"]="⟨",
+["qprime"]="⁗",
+["aelig"]="æ",
+["ncongdot"]="⩭̸",
+["supdsub"]="⫘",
+["nltrie"]="⋬",
+["xopf"]="𝕩",
+["LeftDownVector"]="⇃",
+["duarr"]="⇵",
+["urcorner"]="⌝",
+["nvltrie"]="⊴⃒",
+["Pi"]="Π",
["Eacute"]="É",
-["ddarr"]="⇊",
+["nGtv"]="≫̸",
+["icirc"]="î",
+["twoheadleftarrow"]="↞",
+["divide"]="÷",
+["yopf"]="𝕪",
["ntlg"]="≸",
-["Iscr"]="ℐ",
-["Jcirc"]="Ĵ",
-["Sacute"]="Ś",
-["capand"]="⩄",
-["gesdoto"]="⪂",
-["olcross"]="⦻",
-["amalg"]="⨿",
-["rarrlp"]="↬",
-["NotLeftTriangle"]="⋪",
-["reals"]="ℝ",
-["bigcup"]="⋃",
-["NJcy"]="Њ",
-["Odblac"]="Ő",
-["hArr"]="⇔",
-["RightArrowLeftArrow"]="⇄",
-["SOFTcy"]="Ь",
-["Lambda"]="Λ",
-["RightCeiling"]="⌉",
-["Vdash"]="⊩",
-["elinters"]="⏧",
-["lsimg"]="⪏",
-["Nopf"]="ℕ",
-["Esim"]="⩳",
-["vzigzag"]="⦚",
-["acd"]="∿",
+["Darr"]="↡",
+["hslash"]="ℏ",
+["Coproduct"]="∐",
+["profline"]="⌒",
+["imagline"]="ℐ",
+["chcy"]="ч",
["ccedil"]="ç",
-["lbarr"]="⤌",
-["nmid"]="∤",
-["Backslash"]="∖",
-["Laplacetrf"]="ℒ",
-["npr"]="⊀",
-["nap"]="≉",
-["nsupseteqq"]="⫆̸",
-["igrave"]="ì",
-["LJcy"]="Љ",
-["lessgtr"]="≶",
-["angle"]="∠",
-["lAarr"]="⇚",
-["notin"]="∉",
-["orv"]="⩛",
-["gtreqqless"]="⪌",
-["CircleMinus"]="⊖",
-["Diamond"]="⋄",
-["map"]="↦",
-["nvsim"]="∼⃒",
-["pi"]="π",
-["pluscir"]="⨢",
-["boxVH"]="╬",
-["QUOT"]="\"",
-["duarr"]="⇵",
-["lgE"]="⪑",
-["lmoust"]="⎰",
-["lsquo"]="‘",
-["rightrightarrows"]="⇉",
-["times"]="×",
-["iuml"]="ï",
-["andslope"]="⩘",
-["order"]="ℴ",
-["Sub"]="⋐",
-["capcap"]="⩋",
-["nabla"]="∇",
-["ntriangleleft"]="⋪",
-["blk14"]="░",
-["Kopf"]="𝕂",
-["lArr"]="⇐",
-["Qopf"]="ℚ",
-["circledS"]="Ⓢ",
-["omid"]="⦶",
-["ord"]="⩝",
-["lvertneqq"]="≨︀",
-["updownarrow"]="↕",
-["yacute"]="ý",
-["ni"]="∋",
-["hamilt"]="ℋ",
-["Jopf"]="𝕁",
-["CupCap"]="≍",
-["lbrack"]="[",
-["preccurlyeq"]="≼",
-["Ropf"]="ℝ",
-["lessdot"]="⋖",
-["blank"]="␣",
-["SucceedsEqual"]="⪰",
-["triangleleft"]="◃",
-["ring"]="˚",
-["omega"]="ω",
-["bowtie"]="⋈",
-["Sqrt"]="√",
-["uuml"]="ü",
-["Udblac"]="Ű",
-["diams"]="♦",
-["Oslash"]="Ø",
-["real"]="ℜ",
-["egrave"]="è",
-["prurel"]="⊰",
-["LeftUpDownVector"]="⥑",
-["TildeEqual"]="≃",
-["cuwed"]="⋏",
-["times"]="×",
-["ap"]="≈",
-["lowast"]="∗",
-["Lopf"]="𝕃",
-["bdquo"]="„",
-["blacktriangledown"]="▾",
-["vBarv"]="⫩",
-["Longleftarrow"]="⟸",
-["lesg"]="⋚︀",
-["Popf"]="ℙ",
-["iogon"]="į",
-["vellip"]="⋮",
-["Ntilde"]="Ñ",
-["cwconint"]="∲",
-["boxv"]="│",
-["boxbox"]="⧉",
-["langd"]="⦑",
-["diam"]="⋄",
-["boxHu"]="╧",
-["acute"]="´",
-["Uopf"]="𝕌",
-["Fcy"]="Ф",
-["vee"]="∨",
-["eqslantless"]="⪕",
-["NotLeftTriangleEqual"]="⋬",
-["OverBrace"]="⏞",
-["beta"]="β",
-["Otilde"]="Õ",
-["fjlig"]="fj",
-["uacute"]="ú",
-["CirclePlus"]="⊕",
-["Mellintrf"]="ℳ",
-["Vopf"]="𝕍",
-["Gcy"]="Г",
-["searhk"]="⤥",
-["boxur"]="└",
-["LeftTeeVector"]="⥚",
-["nsubE"]="⫅̸",
-["gvertneqq"]="≩︀",
-["eqcirc"]="≖",
-["nrightarrow"]="↛",
-["DJcy"]="Ђ",
-["tdot"]="⃛",
-["Dcy"]="Д",
-["Sopf"]="𝕊",
-["range"]="⦥",
-["agrave"]="à",
-["gtrsim"]="≳",
-["RightArrowBar"]="⇥",
-["larrlp"]="↫",
-["le"]="≤",
-["xi"]="ξ",
-["gla"]="⪥",
-["GT"]=">",
-["leftarrowtail"]="↢",
-["commat"]="@",
-["rightarrowtail"]="↣",
-["approx"]="≈",
-["sdot"]="⋅",
-["Topf"]="𝕋",
-["Ecy"]="Э",
-["eplus"]="⩱",
-["cir"]="○",
-["Rarrtl"]="⤖",
-["Emacr"]="Ē",
-["Dcaron"]="Ď",
-["Sc"]="⪼",
+["PrecedesEqual"]="⪯",
+["jcirc"]="ĵ",
+["nang"]="∠⃒",
+["Icirc"]="Î",
+["nbumpe"]="≏̸",
+["incare"]="℅",
+["tint"]="∭",
+["nhArr"]="⇎",
+["emsp13"]=" ",
+["blacktriangleleft"]="◂",
+["Star"]="⋆",
+["hkswarow"]="⤦",
+["NegativeThickSpace"]="​",
+["eDot"]="≑",
+["Euml"]="Ë",
+["scaron"]="š",
+["RightDownVectorBar"]="⥕",
["cent"]="¢",
-["rtri"]="▹",
-["cedil"]="¸",
-["spades"]="♠",
-["upsilon"]="υ",
-["boxminus"]="⊟",
-["angmsdaa"]="⦨",
-["zdot"]="ż",
-["Bcy"]="Б",
-["Zscr"]="𝒵",
-["looparrowleft"]="↫",
-["Dfr"]="𝔇",
-["Bumpeq"]="≎",
-["nLeftarrow"]="⇍",
-["equiv"]="≡",
-["Ccaron"]="Č",
-["UpperLeftArrow"]="↖",
-["SubsetEqual"]="⊆",
-["nrArr"]="⇏",
-["loarr"]="⇽",
-["minusdu"]="⨪",
-["sup3"]="³",
-["Zopf"]="ℤ",
-["elsdot"]="⪗",
-["NotLessLess"]="≪̸",
-["eta"]="η",
-["ubrcy"]="ў",
-["Yscr"]="𝒴",
+["jukcy"]="є",
+["backsimeq"]="⋍",
+["Ncy"]="Н",
+["DD"]="ⅅ",
+["circledast"]="⊛",
+["ccirc"]="ĉ",
+["rsaquo"]="›",
+["YIcy"]="Ї",
+["iquest"]="¿",
+["NotExists"]="∄",
+["iukcy"]="і",
+["Tab"]=" ",
+["Equilibrium"]="⇌",
+["nLt"]="≪⃒",
+["yen"]="¥",
+["CircleDot"]="⊙",
+["CircleMinus"]="⊖",
+["topf"]="𝕥",
+["equivDD"]="⩸",
+["DoubleLeftRightArrow"]="⇔",
+["ngsim"]="≵",
+["upuparrows"]="⇈",
+["ll"]="≪",
+["cirscir"]="⧂",
+["ShortLeftArrow"]="←",
+["angmsdag"]="⦮",
+["shortmid"]="∣",
+["ngeqslant"]="⩾̸",
["subset"]="⊂",
-["Cfr"]="ℭ",
-["harrcir"]="⥈",
-["supsetneq"]="⊋",
-["LeftUpVectorBar"]="⥘",
-["LT"]="<",
-["DoubleLeftArrow"]="⇐",
+["curvearrowleft"]="↶",
+["gdot"]="ġ",
["circledcirc"]="⊚",
-["bkarow"]="⤍",
-["rangd"]="⦒",
-["downharpoonright"]="⇂",
-["Wopf"]="𝕎",
-["ast"]="*",
-["planck"]="ℏ",
-["gtrdot"]="⋗",
-["Ffr"]="𝔉",
-["rArr"]="⇒",
-["VeryThinSpace"]=" ",
-["Ecaron"]="Ě",
-["RightVectorBar"]="⥓",
-["divonx"]="⋇",
-["Xopf"]="𝕏",
-["nsubset"]="⊂⃒",
-["Otimes"]="⨷",
-["bot"]="⊥",
-["nsime"]="≄",
-["thorn"]="þ",
-["subsetneq"]="⊊",
-["nltri"]="⋪",
-["Cayleys"]="ℭ",
-["Efr"]="𝔈",
-["Intersection"]="⋂",
-["UnderBar"]="_",
-["fpartint"]="⨍",
-["Iuml"]="Ï",
-["rsquo"]="’",
-["ecir"]="≖",
-["nis"]="⋼",
-["fscr"]="𝒻",
-["hellip"]="…",
-["ogt"]="⧁",
-["ntgl"]="≹",
-["frac14"]="¼",
-["squf"]="▪",
-["circ"]="ˆ",
-["prE"]="⪳",
+["Pcy"]="П",
+["asymp"]="≈",
+["boxUr"]="╙",
+["uopf"]="𝕦",
+["frac15"]="⅕",
+["Iacute"]="Í",
+["Utilde"]="Ũ",
+["Congruent"]="≡",
+["nhpar"]="⫲",
+["capbrcup"]="⩉",
["ordf"]="ª",
-["ZHcy"]="Ж",
-["NegativeVeryThinSpace"]="​",
-["quot"]="\"",
-["excl"]="!",
-["sqcaps"]="⊓︀",
-["gfr"]="𝔤",
-["varsigma"]="ς",
-["nwarrow"]="↖",
-["reg"]="®",
+["SOFTcy"]="Ь",
+["nlArr"]="⇍",
+["not"]="¬",
+["ffllig"]="ffl",
+["nprec"]="⊀",
+["Hat"]="^",
+["Auml"]="Ä",
+["ntriangleleft"]="⋪",
["longmapsto"]="⟼",
-["And"]="⩓",
-["cuvee"]="⋎",
-["zwj"]="‍",
-["plankv"]="ℏ",
-["varepsilon"]="ϵ",
-["Aopf"]="𝔸",
-["UpTee"]="⊥",
-["lescc"]="⪨",
-["ltri"]="◃",
-["iiint"]="∭",
-["ccups"]="⩌",
-["alefsym"]="ℵ",
-["succneqq"]="⪶",
-["hscr"]="𝒽",
-["Or"]="⩔",
-["yuml"]="ÿ",
-["rcub"]="}",
-["lt"]="<",
-["vArr"]="⇕",
-["EqualTilde"]="≂",
-["vDash"]="⊨",
-["RightArrow"]="→",
-["dlcorn"]="⌞",
-["Barv"]="⫧",
-["nsc"]="⊁",
-["Proportion"]="∷",
-["iota"]="ι",
-["gscr"]="ℊ",
-["abreve"]="ă",
-["ThickSpace"]="  ",
-["szlig"]="ß",
-["lhard"]="↽",
-["emptyv"]="∅",
-["Tau"]="Τ",
-["sharp"]="♯",
-["bNot"]="⫭",
-["LongLeftRightArrow"]="⟷",
-["frac23"]="⅔",
-["NotEqual"]="≠",
-["scE"]="⪴",
-["jfr"]="𝔧",
-["bscr"]="𝒷",
-["uhblk"]="▀",
-["frac35"]="⅗",
-["TSHcy"]="Ћ",
-["ntrianglerighteq"]="⋭",
-["Tcedil"]="Ţ",
-["NotGreaterFullEqual"]="≧̸",
-["asympeq"]="≍",
-["oror"]="⩖",
-["ecirc"]="ê",
-["ohbar"]="⦵",
-["Rho"]="Ρ",
-["iacute"]="í",
-["ascr"]="𝒶",
+["nvrtrie"]="⊵⃒",
+["timesb"]="⊠",
+["lsh"]="↰",
+["Jcy"]="Й",
+["gcirc"]="ĝ",
+["Oacute"]="Ó",
+["vartriangleright"]="⊳",
+["NotRightTriangleEqual"]="⋭",
+["Rightarrow"]="⇒",
+["ast"]="*",
+["hamilt"]="ℋ",
+["Ncedil"]="Ņ",
+["apE"]="⩰",
+["macr"]="¯",
+["cwconint"]="∲",
+["Kcy"]="К",
+["Ucirc"]="Û",
+["hcirc"]="ĥ",
+["yacy"]="я",
+["uml"]="¨",
+["popf"]="𝕡",
+["bumpE"]="⪮",
+["varnothing"]="∅",
["RightUpVector"]="↾",
-["Ocirc"]="Ô",
-["cedil"]="¸",
-["sect"]="§",
-["angmsdab"]="⦩",
-["FilledVerySmallSquare"]="▪",
-["curlywedge"]="⋏",
-["lesdotor"]="⪃",
-["esdot"]="≐",
-["eqvparsl"]="⧥",
-["Cap"]="⋒",
-["dscr"]="𝒹",
-["rbrace"]="}",
-["nsccue"]="⋡",
-["neArr"]="⇗",
-["rightthreetimes"]="⋌",
-["plusmn"]="±",
-["Ubreve"]="Ŭ",
-["ifr"]="𝔦",
-["Poincareplane"]="ℌ",
-["leftrightarrows"]="⇆",
-["scnsim"]="⋩",
-["cscr"]="𝒸",
-["NotHumpEqual"]="≏̸",
-["capbrcup"]="⩉",
-["curarr"]="↷",
-["notinvb"]="⋷",
-["LeftArrow"]="←",
-["Gopf"]="𝔾",
-["ldrushar"]="⥋",
-["nscr"]="𝓃",
-["Gg"]="⋙",
-["ouml"]="ö",
-["nsce"]="⪰̸",
-["cupbrcap"]="⩈",
-["nLt"]="≪⃒",
-["bullet"]="•",
-["nsqsupe"]="⋣",
-["rect"]="▭",
-["lbrace"]="{",
-["Fopf"]="𝔽",
-["COPY"]="©",
-["epar"]="⋕",
-["mscr"]="𝓂",
-["odsold"]="⦼",
-["cupor"]="⩅",
-["not"]="¬",
-["subsim"]="⫇",
-["hoarr"]="⇿",
+["curren"]="¤",
["Scedil"]="Ş",
-["eacute"]="é",
-["emsp"]=" ",
-["uml"]="¨",
-["igrave"]="ì",
-["pscr"]="𝓅",
+["FilledVerySmallSquare"]="▪",
+["dollar"]="$",
+["Lcy"]="Л",
+["longrightarrow"]="⟶",
["LeftTee"]="⊣",
-["Cedilla"]="¸",
-["Iopf"]="𝕀",
-["HumpEqual"]="≏",
-["les"]="⩽",
-["Rcedil"]="Ŗ",
-["lsquor"]="‚",
-["raemptyv"]="⦳",
-["NotSucceedsSlantEqual"]="⋡",
-["SuchThat"]="∋",
-["vert"]="|",
-["backcong"]="≌",
-["Hopf"]="ℍ",
-["CircleDot"]="⊙",
-["Kappa"]="Κ",
-["conint"]="∮",
-["DZcy"]="Џ",
-["prsim"]="≾",
-["Copf"]="ℂ",
-["curvearrowright"]="↷",
-["twixt"]="≬",
-["curren"]="¤",
-["rtriltri"]="⧎",
-["jscr"]="𝒿",
-["cupcup"]="⩊",
+["excl"]="!",
+["acirc"]="â",
+["wp"]="℘",
+["lcaron"]="ľ",
+["NotGreaterFullEqual"]="≧̸",
+["CounterClockwiseContourIntegral"]="∳",
+["sup2"]="²",
+["rnmid"]="⫮",
["Lcedil"]="Ļ",
-["supseteqq"]="⫆",
-["bfr"]="𝔟",
-["lesseqqgtr"]="⪋",
-["leftleftarrows"]="⇇",
-["Bopf"]="𝔹",
-["acute"]="´",
-["blacktriangleright"]="▸",
-["frac34"]="¾",
-["Gbreve"]="Ğ",
-["Updownarrow"]="⇕",
-["iscr"]="𝒾",
-["sigmav"]="ς",
-["trade"]="™",
-["minusb"]="⊟",
-["GJcy"]="Ѓ",
-["TildeFullEqual"]="≅",
-["DoubleRightTee"]="⊨",
-["nang"]="∠⃒",
["ddotseq"]="⩷",
-["copy"]="©",
-["Eopf"]="𝔼",
-["Psi"]="Ψ",
-["UpperRightArrow"]="↗",
-["geqq"]="≧",
-["subedot"]="⫃",
-["nvlArr"]="⤂",
-["Ncedil"]="Ņ",
-["vsupne"]="⊋︀",
-["supset"]="⊃",
-["squarf"]="▪",
-["LeftDoubleBracket"]="⟦",
-["utrif"]="▴",
-["Dopf"]="𝔻",
-["ape"]="≊",
-["gEl"]="⪌",
-["COPY"]="©",
-["afr"]="𝔞",
-["Acy"]="А",
-["ldquor"]="„",
-["because"]="∵",
-["Pr"]="⪻",
-["OverBar"]="‾",
-["lang"]="⟨",
-["mopf"]="𝕞",
-["crarr"]="↵",
-["Epsilon"]="Ε",
-["Nfr"]="𝔑",
-["kjcy"]="ќ",
-["TildeTilde"]="≈",
-["bsim"]="∽",
-["lcy"]="л",
-["larrb"]="⇤",
-["ncong"]="≇",
-["ENG"]="Ŋ",
-["brvbar"]="¦",
-["Rightarrow"]="⇒",
+["tbrk"]="⎴",
+["mlcp"]="⫛",
+["rarrhk"]="↪",
+["Tilde"]="∼",
+["Mcy"]="М",
+["aring"]="å",
+["rarrsim"]="⥴",
["nopf"]="𝕟",
-["Wfr"]="𝔚",
-["ljcy"]="љ",
+["aelig"]="æ",
+["order"]="ℴ",
["diamondsuit"]="♦",
-["latail"]="⤙",
-["lambda"]="λ",
-["frac14"]="¼",
-["mcy"]="м",
-["nparsl"]="⫽⃥",
-["lBarr"]="⤎",
-["subdot"]="⪽",
-["frac12"]="½",
-["kopf"]="𝕜",
-["LeftCeiling"]="⌈",
+["nvsim"]="∼⃒",
+["lhard"]="↽",
+["commat"]="@",
+["qint"]="⨌",
+["lsquo"]="‘",
+["sqcaps"]="⊓︀",
+["circlearrowleft"]="↺",
+["NotElement"]="∉",
+["measuredangle"]="∡",
+["Atilde"]="Ã",
+["CapitalDifferentialD"]="ⅅ",
+["kgreen"]="ĸ",
+["Cscr"]="𝒞",
+["NotLessEqual"]="≰",
+["trpezium"]="⏢",
+["ne"]="≠",
+["NotSuperset"]="⊃⃒",
+["nearrow"]="↗",
+["ncong"]="≇",
+["doteqdot"]="≑",
+["supmult"]="⫂",
+["longleftrightarrow"]="⟷",
+["Rarr"]="↠",
+["DoubleUpArrow"]="⇑",
+["Dscr"]="𝒟",
+["mp"]="∓",
+["jmath"]="ȷ",
["erarr"]="⥱",
-["pre"]="⪯",
-["varr"]="↕",
-["Pi"]="Π",
-["sub"]="⊂",
-["ncy"]="н",
-["marker"]="▮",
-["rpargt"]="⦔",
-["supe"]="⊇",
-["veebar"]="⊻",
-["checkmark"]="✓",
-["nbsp"]=" ",
-["sqsupseteq"]="⊒",
-["upharpoonright"]="↾",
+["searrow"]="↘",
+["Sup"]="⋑",
+["lvnE"]="≨︀",
+["ffilig"]="ffi",
+["NotSquareSupersetEqual"]="⋣",
+["bullet"]="•",
+["bigstar"]="★",
+["cylcty"]="⌭",
+["nvle"]="≤⃒",
+["TildeFullEqual"]="≅",
["lopf"]="𝕝",
-["Omicron"]="Ο",
-["ccaps"]="⩍",
-["lrhard"]="⥭",
-["Lstrok"]="Ł",
-["Mfr"]="𝔐",
-["njcy"]="њ",
-["ocy"]="о",
-["Zcaron"]="Ž",
-["NotSucceeds"]="⊁",
-["rarrbfs"]="⤠",
-["gtrapprox"]="⪆",
-["oS"]="Ⓢ",
-["diamond"]="⋄",
-["gesdot"]="⪀",
-["urcorner"]="⌝",
-["lotimes"]="⨴",
-["pertenk"]="‱",
-["rfisht"]="⥽",
-["Zfr"]="ℨ",
-["Map"]="⤅",
-["cross"]="✗",
-["DifferentialD"]="ⅆ",
-["boxtimes"]="⊠",
-["horbar"]="―",
-["lg"]="≶",
-["orarr"]="↻",
-["Vbar"]="⫫",
-["ropf"]="𝕣",
-["NotDoubleVerticalBar"]="∦",
-["Sfr"]="𝔖",
-["Iuml"]="Ï",
+["sqsupseteq"]="⊒",
+["lt"]="<",
+["geqslant"]="⩾",
+["quot"]="\"",
+["le"]="≤",
+["square"]="□",
+["sigma"]="σ",
+["prE"]="⪳",
+["rtrie"]="⊵",
+["triangleq"]="≜",
+["Fscr"]="ℱ",
+["DiacriticalTilde"]="˜",
+["SucceedsSlantEqual"]="≽",
+["mopf"]="𝕞",
+["Ecaron"]="Ě",
+["UpArrowDownArrow"]="⇅",
+["ges"]="⩾",
+["nsqsupe"]="⋣",
+["ubrcy"]="ў",
+["Gscr"]="𝒢",
+["HARDcy"]="Ъ",
+["jopf"]="𝕛",
+["gtquest"]="⩼",
+["iinfin"]="⧜",
+["twixt"]="≬",
+["ltrie"]="⊴",
+["csub"]="⫏",
+["Hscr"]="ℋ",
["leftharpoondown"]="↽",
-["atilde"]="ã",
-["VerticalTilde"]="≀",
-["DoubleContourIntegral"]="∯",
-["longleftarrow"]="⟵",
+["RightUpDownVector"]="⥏",
+["LongLeftRightArrow"]="⟷",
["Im"]="ℑ",
-["RightUpVectorBar"]="⥔",
-["nGg"]="⋙̸",
-["scap"]="⪸",
-["nrarr"]="↛",
-["ycy"]="ы",
-["ucirc"]="û",
-["qopf"]="𝕢",
-["oopf"]="𝕠",
-["yacute"]="ý",
-["Xfr"]="𝔛",
+["dcaron"]="ď",
+["barwedge"]="⌅",
+["nexist"]="∄",
+["blacktriangledown"]="▾",
["fork"]="⋔",
-["in"]="∈",
-["xcap"]="⋂",
-["check"]="✓",
-["jcy"]="й",
-["Phi"]="Φ",
-["doteq"]="≐",
-["vBar"]="⫨",
-["frown"]="⌢",
-["Iogon"]="Į",
-["gnsim"]="⋧",
-["nsupset"]="⊃⃒",
+["rhard"]="⇁",
+["cent"]="¢",
+["RightTriangle"]="⊳",
+["Eta"]="Η",
+["dotminus"]="∸",
+["nles"]="⩽̸",
+["larrtl"]="↢",
+["LeftTriangleEqual"]="⊴",
+["hopf"]="𝕙",
+["gammad"]="ϝ",
+["gsime"]="⪎",
+["llhard"]="⥫",
+["precapprox"]="⪷",
+["profalar"]="⌮",
+["lnE"]="≨",
+["ddagger"]="‡",
+["leq"]="≤",
+["smile"]="⌣",
+["robrk"]="⟧",
+["Jscr"]="𝒥",
+["triangleleft"]="◃",
+["acd"]="∿",
+["prod"]="∏",
+["atilde"]="ã",
+["seArr"]="⇘",
+["therefore"]="∴",
+["iopf"]="𝕚",
+["solbar"]="⌿",
+["kcedil"]="ķ",
+["NotHumpEqual"]="≏̸",
+["nspar"]="∦",
+["frac14"]="¼",
+["nsime"]="≄",
+["DoubleLongLeftArrow"]="⟸",
+["sccue"]="≽",
+["models"]="⊧",
+["SupersetEqual"]="⊇",
+["iquest"]="¿",
+["oline"]="‾",
+["lparlt"]="⦓",
+["triplus"]="⨹",
+["nequiv"]="≢",
+["nlE"]="≦̸",
+["nldr"]="‥",
["equals"]="=",
-["angmsdac"]="⦪",
-["odash"]="⊝",
-["Hstrok"]="Ħ",
-["homtht"]="∻",
-["maltese"]="✠",
+["Agrave"]="À",
+["ccaron"]="č",
+["Yacute"]="Ý",
+["Oslash"]="Ø",
+["udarr"]="⇅",
+["ang"]="∠",
+["dopf"]="𝕕",
+["comp"]="∁",
+["caps"]="∩︀",
+["bowtie"]="⋈",
+["glj"]="⪤",
+["ltquest"]="⩻",
+["cirmid"]="⫯",
+["ordm"]="º",
["esim"]="≂",
-["realine"]="ℛ",
-["straightepsilon"]="ϵ",
-["utri"]="▵",
-["primes"]="ℙ",
-["dbkarow"]="⤏",
-["NotLessTilde"]="≴",
-["nvrArr"]="⤃",
-["cularrp"]="⤽",
-["supsup"]="⫖",
-["rang"]="⟩",
-["nshortmid"]="∤",
-["NotCupCap"]="≭",
-["gnE"]="≩",
-["otilde"]="õ",
+["reals"]="ℝ",
["LeftTriangle"]="⊲",
-["oelig"]="œ",
-["curarrm"]="⤼",
-["orderof"]="ℴ",
-["DoubleLongLeftArrow"]="⟸",
-["OverParenthesis"]="⏜",
-["amacr"]="ā",
-["copysr"]="℗",
-["acirc"]="â",
-["LeftArrowRightArrow"]="⇆",
-["filig"]="fi",
-["uopf"]="𝕦",
-["rlhar"]="⇌",
-["dharl"]="⇃",
-["rAarr"]="⇛",
-["rarrw"]="↝",
-["isin"]="∈",
-["simg"]="⪞",
-["NoBreak"]="⁠",
-["rAtail"]="⤜",
-["ndash"]="–",
-["IJlig"]="IJ",
-["dfr"]="𝔡",
-["ohm"]="Ω",
-["breve"]="˘",
-["ccedil"]="ç",
-["topf"]="𝕥",
-["nvDash"]="⊭",
-["RBarr"]="⤐",
-["clubs"]="♣",
-["napos"]="ʼn",
+["flat"]="♭",
+["eopf"]="𝕖",
+["lap"]="⪅",
+["not"]="¬",
+["ENG"]="Ŋ",
+["DiacriticalAcute"]="´",
+["sharp"]="♯",
+["longleftarrow"]="⟵",
+["dblac"]="˝",
+["UpArrow"]="↑",
+["npre"]="⪯̸",
+["bopf"]="𝕓",
+["DScy"]="Ѕ",
+["bepsi"]="϶",
+["angrtvb"]="⊾",
+["ccaps"]="⩍",
+["UnderParenthesis"]="⏝",
+["subne"]="⊊",
+["succnsim"]="⋩",
+["Bumpeq"]="≎",
+["xvee"]="⋁",
+["colon"]=":",
+["deg"]="°",
+["fnof"]="ƒ",
+["Uarr"]="↟",
+["Zcaron"]="Ž",
+["copf"]="𝕔",
+["Theta"]="Θ",
+["omicron"]="ο",
+["ntriangleright"]="⋫",
+["DoubleLongRightArrow"]="⟹",
+["UnderBrace"]="⏟",
+["GT"]=">",
+["lEg"]="⪋",
+["supplus"]="⫀",
+["acute"]="´",
+["GT"]=">",
+["upsilon"]="υ",
+["sc"]="≻",
+["xrarr"]="⟶",
+["eng"]="ŋ",
+["it"]="⁢",
+["Ntilde"]="Ñ",
+["Mu"]="Μ",
+["CircleTimes"]="⊗",
+["NotTildeTilde"]="≉",
+["NotLessLess"]="≪̸",
+["vellip"]="⋮",
+["cularrp"]="⤽",
+["UnderBracket"]="⎵",
+["aopf"]="𝕒",
+["itilde"]="ĩ",
+["latail"]="⤙",
+["Nu"]="Ν",
+["Ascr"]="𝒜",
+["complement"]="∁",
+["gjcy"]="ѓ",
+["radic"]="√",
+["maltese"]="✠",
+["glE"]="⪒",
+["plusmn"]="±",
+["curvearrowright"]="↷",
+["gt"]=">",
+["Colone"]="⩴",
+["Bscr"]="ℬ",
+["ic"]="⁣",
+["clubsuit"]="♣",
+["djcy"]="ђ",
+["Oopf"]="𝕆",
+["ltrPar"]="⦖",
["ngtr"]="≯",
-["Tstrok"]="Ŧ",
-["lrarr"]="⇆",
-["eqslantgtr"]="⪖",
-["efr"]="𝔢",
-["gne"]="⪈",
-["csube"]="⫑",
-["Xi"]="Ξ",
-["sopf"]="𝕤",
+["eqcirc"]="≖",
+["Hacek"]="ˇ",
+["vdash"]="⊢",
+["NotCupCap"]="≭",
+["Gdot"]="Ġ",
+["jsercy"]="ј",
+["marker"]="▮",
+["Nopf"]="ℕ",
+["Wfr"]="𝔚",
+["boxHD"]="╦",
+["mho"]="℧",
+["ulcrop"]="⌏",
+["DifferentialD"]="ⅆ",
+["aacute"]="á",
+["lpar"]="(",
+["angle"]="∠",
+["rharu"]="⇀",
+["Breve"]="˘",
+["Dot"]="¨",
+["rect"]="▭",
+["NotNestedLessLess"]="⪡̸",
+["boxplus"]="⊞",
+["NotSucceeds"]="⊁",
+["gnapprox"]="⪊",
+["DownLeftTeeVector"]="⥞",
+["Xfr"]="𝔛",
+["Lang"]="⟪",
+["Element"]="∈",
+["sung"]="♪",
+["RightVectorBar"]="⥓",
+["simne"]="≆",
["LeftVector"]="↼",
-["ggg"]="⋙",
-["Ubrcy"]="Ў",
-["die"]="¨",
-["topbot"]="⌶",
+["Idot"]="İ",
+["QUOT"]="\"",
+["nsmid"]="∤",
+["fjlig"]="fj",
+["Ufr"]="𝔘",
+["cuvee"]="⋎",
+["real"]="ℜ",
+["luruhar"]="⥦",
+["NotRightTriangleBar"]="⧐̸",
+["target"]="⌖",
+["lharu"]="↼",
+["CloseCurlyQuote"]="’",
+["rAtail"]="⤜",
+["nparallel"]="∦",
+["brvbar"]="¦",
+["Vfr"]="𝔙",
+["wedbar"]="⩟",
+["REG"]="®",
+["boxur"]="└",
+["Rcaron"]="Ř",
+["Rang"]="⟫",
+["sqsubseteq"]="⊑",
+["div"]="÷",
+["boxul"]="┘",
+["Cdot"]="Ċ",
+["vsupnE"]="⫌︀",
+["zeetrf"]="ℨ",
+["Sfr"]="𝔖",
+["roang"]="⟭",
+["LessTilde"]="≲",
+["equiv"]="≡",
+["frac12"]="½",
+["eacute"]="é",
+["rrarr"]="⇉",
+["nearhk"]="⤤",
+["Zopf"]="ℤ",
+["SucceedsTilde"]="≿",
+["ap"]="≈",
+["lfisht"]="⥼",
+["timesd"]="⨰",
+["UpDownArrow"]="↕",
+["xuplus"]="⨄",
+["cularr"]="↶",
+["iprod"]="⨼",
+["AElig"]="Æ",
+["rationals"]="ℚ",
+["geqq"]="≧",
+["Tfr"]="𝔗",
+["Yopf"]="𝕐",
+["rtimes"]="⋊",
+["Tcaron"]="Ť",
+["srarr"]="→",
+["diam"]="⋄",
+["mid"]="∣",
+["imath"]="ı",
+["PlusMinus"]="±",
+["isin"]="∈",
+["vprop"]="∝",
+["RightArrowLeftArrow"]="⇄",
+["NotSubset"]="⊂⃒",
+["bigtriangledown"]="▽",
+["ldsh"]="↲",
+["Qfr"]="𝔔",
+["nvap"]="≍⃒",
+["vert"]="|",
+["Xopf"]="𝕏",
+["lBarr"]="⤎",
+["egsdot"]="⪘",
+["Tcedil"]="Ţ",
+["xi"]="ξ",
+["LeftUpVectorBar"]="⥘",
+["circ"]="ˆ",
+["ocir"]="⊚",
+["gtlPar"]="⦕",
["Rfr"]="ℜ",
-["ofcir"]="⦿",
-["imped"]="Ƶ",
-["plusmn"]="±",
-["nles"]="⩽̸",
+["RightTriangleBar"]="⧐",
+["nwarhk"]="⤣",
+["zhcy"]="ж",
+["Iukcy"]="І",
+["plusdo"]="∔",
+["boxv"]="│",
+["minusb"]="⊟",
+["Ncaron"]="Ň",
+["angmsdaa"]="⦨",
+["varsubsetneqq"]="⫋︀",
+["cirfnint"]="⨐",
+["LongRightArrow"]="⟶",
+["ddarr"]="⇊",
+["piv"]="ϖ",
+["fopf"]="𝕗",
+["Ofr"]="𝔒",
+["fflig"]="ff",
+["Jukcy"]="Є",
+["xhArr"]="⟺",
+["ncy"]="н",
+["Scaron"]="Š",
+["TildeEqual"]="≃",
+["subrarr"]="⥹",
+["iacute"]="í",
+["ogt"]="⧁",
+["nvge"]="≥⃒",
+["vee"]="∨",
+["UnderBar"]="_",
+["andslope"]="⩘",
+["gopf"]="𝕘",
+["Pfr"]="𝔓",
+["die"]="¨",
+["Uopf"]="𝕌",
+["RightArrowBar"]="⇥",
+["orarr"]="↻",
+["Precedes"]="≺",
+["oror"]="⩖",
+["straightepsilon"]="ϵ",
+["cong"]="≅",
+["TScy"]="Ц",
+["nleftarrow"]="↚",
+["DZcy"]="Џ",
+["horbar"]="―",
+["Topf"]="𝕋",
+["Cayleys"]="ℭ",
+["leqq"]="≦",
+["curlyeqprec"]="⋞",
+["nLeftarrow"]="⇍",
["pcy"]="п",
-["permil"]="‰",
-["notinE"]="⋹̸",
-["bigoplus"]="⨁",
-["boxplus"]="⊞",
-["doublebarwedge"]="⌆",
-["ccaron"]="č",
-["asymp"]="≈",
-["sup1"]="¹",
-["bumpeq"]="≏",
-["nrtrie"]="⋭",
-["larrbfs"]="⤟",
-["emacr"]="ē",
-["gtrless"]="≷",
-["Kfr"]="𝔎",
-["plus"]="+",
-["risingdotseq"]="≓",
-["notindot"]="⋵̸",
-["Subset"]="⋐",
-["CloseCurlyDoubleQuote"]="”",
+["realine"]="ℛ",
["nlsim"]="≴",
-["dcaron"]="ď",
-["boxVR"]="╠",
-["lne"]="⪇",
-["Pfr"]="𝔓",
-["rightsquigarrow"]="↝",
-["phone"]="☎",
-["DiacriticalDot"]="˙",
-["Congruent"]="≡",
-["SquareIntersection"]="⊓",
-["ordf"]="ª",
-["loz"]="◊",
-["cire"]="≗",
-["ecaron"]="ě",
-["nsub"]="⊄",
+["Rarrtl"]="⤖",
+["CupCap"]="≍",
+["vDash"]="⊨",
+["shortparallel"]="∥",
+["ExponentialE"]="ⅇ",
+["Sopf"]="𝕊",
+["iiota"]="℩",
+["Nfr"]="𝔑",
+["pointint"]="⨕",
+["NotGreaterLess"]="≹",
+["olcross"]="⦻",
+["kcy"]="к",
+["complexes"]="ℂ",
+["varepsilon"]="ϵ",
["Fouriertrf"]="ℱ",
-["Qfr"]="𝔔",
-["dblac"]="˝",
-["sc"]="≻",
-["xrarr"]="⟶",
-["ImaginaryI"]="ⅈ",
-["angmsdag"]="⦮",
-["wopf"]="𝕨",
-["middot"]="·",
-["gsiml"]="⪐",
-["biguplus"]="⨄",
-["Prime"]="″",
-["bigcirc"]="◯",
-["vsubnE"]="⫋︀",
-["lrtri"]="⊿",
-["nparallel"]="∦",
-["lbbrk"]="❲",
-["dotsquare"]="⊡",
-["rceil"]="⌉",
-["gesles"]="⪔",
-["roarr"]="⇾",
-["simplus"]="⨤",
-["lagran"]="ℒ",
-["pr"]="≺",
+["rho"]="ρ",
+["Lsh"]="↰",
+["exponentiale"]="ⅇ",
+["hookrightarrow"]="↪",
+["Ropf"]="ℝ",
+["lAtail"]="⤛",
+["Kfr"]="𝔎",
+["bsim"]="∽",
+["jcy"]="й",
+["frac34"]="¾",
+["DotDot"]="⃜",
+["thorn"]="þ",
+["ThickSpace"]="  ",
+["SquareUnion"]="⊔",
+["frac58"]="⅝",
+["dfisht"]="⥿",
+["MediumSpace"]=" ",
+["Lfr"]="𝔏",
+["Qopf"]="ℚ",
+["ntgl"]="≹",
+["LessFullEqual"]="≦",
+["malt"]="✠",
+["mcy"]="м",
+["NotGreaterEqual"]="≱",
+["bottom"]="⊥",
+["NotSucceedsEqual"]="⪰̸",
+["lcedil"]="ļ",
+["infintie"]="⧝",
+["Lcaron"]="Ľ",
+["NotSquareSubset"]="⊏̸",
+["brvbar"]="¦",
+["fallingdotseq"]="≒",
+["AElig"]="Æ",
+["swarhk"]="⤦",
+["Ifr"]="ℑ",
+["pi"]="π",
+["lcy"]="л",
+["copy"]="©",
+["dlcorn"]="⌞",
+["oacute"]="ó",
+["gtreqless"]="⋛",
+["neArr"]="⇗",
+["ZHcy"]="Ж",
+["Vdashl"]="⫦",
+["darr"]="↓",
+["circeq"]="≗",
+["yuml"]="ÿ",
+["Jfr"]="𝔍",
+["Product"]="∏",
+["boxDL"]="╗",
+["el"]="⪙",
+["supe"]="⊇",
+["frac13"]="⅓",
+["Barwed"]="⌆",
+["larrpl"]="⤹",
+["SHCHcy"]="Щ",
+["LeftUpDownVector"]="⥑",
+["Diamond"]="⋄",
+["DownLeftVectorBar"]="⥖",
+["Cross"]="⨯",
+["ncup"]="⩂",
+["supnE"]="⫌",
+["lne"]="⪇",
+["micro"]="µ",
+["lowbar"]="_",
+["perp"]="⊥",
+["sqcap"]="⊓",
+["Gfr"]="𝔊",
+["raemptyv"]="⦳",
+["gesl"]="⋛︀",
+["drcrop"]="⌌",
+["boxUL"]="╝",
+["becaus"]="∵",
+["gne"]="⪈",
+["scap"]="⪸",
+["swarrow"]="↙",
+["nesim"]="≂̸",
+["DoubleDot"]="¨",
+["Mopf"]="𝕄",
+["apid"]="≋",
+["InvisibleComma"]="⁣",
+["Backslash"]="∖",
["mnplus"]="∓",
+["niv"]="∋",
+["Hfr"]="ℌ",
+["rarrlp"]="↬",
+["Because"]="∵",
+["parsl"]="⫽",
+["sup1"]="¹",
+["Lt"]="≪",
+["par"]="∥",
["Iota"]="Ι",
-["NestedLessLess"]="≪",
-["utilde"]="ũ",
-["mldr"]="…",
-["bigstar"]="★",
-["micro"]="µ",
-["percnt"]="%",
-["fllig"]="fl",
-["euml"]="ë",
-["circledR"]="®",
-["lltri"]="◺",
-["IEcy"]="Е",
-["notniva"]="∌",
-["or"]="∨",
-["curvearrowleft"]="↶",
-["gnapprox"]="⪊",
-["NotLessSlantEqual"]="⩽̸",
-["Cconint"]="∰",
-["NotSucceedsTilde"]="≿̸",
-["gammad"]="ϝ",
-["rightharpoondown"]="⇁",
-["CounterClockwiseContourIntegral"]="∳",
-["supdot"]="⪾",
-["upsi"]="υ",
-["nvle"]="≤⃒",
["beth"]="ℶ",
-["nhArr"]="⇎",
-["Gamma"]="Γ",
-["complement"]="∁",
-["xoplus"]="⨁",
-["chi"]="χ",
-["backepsilon"]="϶",
-["nsube"]="⊈",
-["aopf"]="𝕒",
-["para"]="¶",
-["drbkarow"]="⤐",
-["Dstrok"]="Đ",
+["Lopf"]="𝕃",
+["Cap"]="⋒",
+["Aring"]="Å",
+["rarr"]="→",
+["Efr"]="𝔈",
+["bigcup"]="⋃",
+["DownLeftRightVector"]="⥐",
+["lesges"]="⪓",
+["NegativeThinSpace"]="​",
+["DownRightTeeVector"]="⥟",
+["npolint"]="⨔",
+["gEl"]="⪌",
+["lltri"]="◺",
+["ogon"]="˛",
+["LessEqualGreater"]="⋚",
+["sqsupset"]="⊐",
+["NotSubsetEqual"]="⊈",
+["Ubrcy"]="Ў",
+["ShortDownArrow"]="↓",
+["ugrave"]="ù",
+["Dcaron"]="Ď",
+["subE"]="⫅",
+["divide"]="÷",
+["bigotimes"]="⨂",
+["dscy"]="ѕ",
+["wreath"]="≀",
+["Jopf"]="𝕁",
+["pre"]="⪯",
+["tdot"]="⃛",
+["Cfr"]="ℭ",
+["Uogon"]="Ų",
+["softcy"]="ь",
["isinE"]="⋹",
-["Ecirc"]="Ê",
-["aelig"]="æ",
-["ulcorner"]="⌜",
-["Lcaron"]="Ľ",
-["bopf"]="𝕓",
-["midast"]="*",
-["barvee"]="⊽",
-["nvgt"]=">⃒",
-["bnequiv"]="≡⃥",
-["caron"]="ˇ",
-["andand"]="⩕",
-["eparsl"]="⧣",
-["xhArr"]="⟺",
-["Yuml"]="Ÿ",
-["fallingdotseq"]="≒",
-["vltri"]="⊲",
-["gtrarr"]="⥸",
-["nGtv"]="≫̸",
-["congdot"]="⩭",
-["lfisht"]="⥼",
-["nrtri"]="⋫",
-["prnsim"]="⋨",
-["nsupE"]="⫆̸",
-["Colone"]="⩴",
-["SquareSuperset"]="⊐",
-["boxUL"]="╝",
-["Rrightarrow"]="⇛",
-["nleftrightarrow"]="↮",
-["Conint"]="∯",
-["ffilig"]="ffi",
-["nleqq"]="≦̸",
-["drcrop"]="⌌",
-["boxh"]="─",
-["Lang"]="⟪",
-["ldrdhar"]="⥧",
-["rbrack"]="]",
+["Dstrok"]="Đ",
+["Jsercy"]="Ј",
+["capdot"]="⩀",
+["realpart"]="ℜ",
+["hearts"]="♥",
+["Atilde"]="Ã",
+["LeftArrowRightArrow"]="⇆",
+["upharpoonleft"]="↿",
+["Iopf"]="𝕀",
+["Intersection"]="⋂",
+["midcir"]="⫰",
+["ocirc"]="ô",
+["sdot"]="⋅",
+["Dfr"]="𝔇",
+["gla"]="⪥",
+["DiacriticalGrave"]="`",
+["Ubreve"]="Ŭ",
+["int"]="∫",
+["PrecedesSlantEqual"]="≼",
+["Square"]="□",
+["Acy"]="А",
+["Hopf"]="ℍ",
+["precsim"]="≾",
+["nleq"]="≰",
+["urcorn"]="⌝",
+["hyphen"]="‐",
+["FilledSmallSquare"]="◼",
+["zdot"]="ż",
+["ndash"]="–",
+["hbar"]="ℏ",
+["Wopf"]="𝕎",
+["Esim"]="⩳",
+["subsetneq"]="⊊",
+["boxhD"]="╥",
+["searhk"]="⤥",
+["late"]="⪭",
+["blacktriangleright"]="▸",
+["auml"]="ä",
+["NotLessTilde"]="≴",
+["Bfr"]="𝔅",
+["grave"]="`",
+["ltlarr"]="⥶",
+["Aogon"]="Ą",
+["sdote"]="⩦",
+["gtrsim"]="≳",
["nvinfin"]="⧞",
+["lgE"]="⪑",
+["mdash"]="—",
+["Vopf"]="𝕍",
+["leftrightarrow"]="↔",
+["RBarr"]="⤐",
+["amalg"]="⨿",
+["preccurlyeq"]="≼",
+["EqualTilde"]="≂",
+["scpolint"]="⨓",
+["NotHumpDownHump"]="≎̸",
+["uparrow"]="↑",
+["downarrow"]="↓",
+["boxdL"]="╕",
+["Hstrok"]="Ħ",
+["Ccaron"]="Č",
["succsim"]="≿",
-["boxhu"]="┴",
-["tau"]="τ",
-["incare"]="℅",
-["flat"]="♭",
-["angst"]="Å",
-["Oslash"]="Ø",
-["Vfr"]="𝔙",
-["tscy"]="ц",
-["lates"]="⪭︀",
-["eopf"]="𝕖",
-["Because"]="∵",
-["frac25"]="⅖",
-["daleth"]="ℸ",
-["ic"]="⁣",
-["ensp"]=" ",
-["lrm"]="‎",
-["DoubleLeftRightArrow"]="⇔",
-["kappa"]="κ",
-["fopf"]="𝕗",
-["cularr"]="↶",
-["shy"]="­",
-["yen"]="¥",
-["glj"]="⪤",
-["dzcy"]="џ",
-["expectation"]="ℰ",
-["dash"]="‐",
-["female"]="♀",
-["UnderBrace"]="⏟",
-["rotimes"]="⨵",
-["caps"]="∩︀",
-["copf"]="𝕔",
-["lparlt"]="⦓",
-["NotLess"]="≮",
-["simrarr"]="⥲",
-["dtri"]="▿",
-["supne"]="⊋",
-["block"]="█",
-["siml"]="⪝",
-["blk12"]="▒",
-["natural"]="♮",
-["frac34"]="¾",
+["RightFloor"]="⌋",
+["DownBreve"]="̑",
+["succapprox"]="⪸",
+["dsol"]="⧶",
+["napid"]="≋̸",
+["nprcue"]="⋠",
+["Eopf"]="𝔼",
+["ell"]="ℓ",
+["cupdot"]="⊍",
+["Not"]="⫬",
+["zigrarr"]="⇝",
+["downharpoonright"]="⇂",
+["nisd"]="⋺",
+["lotimes"]="⨴",
+["plusmn"]="±",
+["ngE"]="≧̸",
+["odash"]="⊝",
+["emptyset"]="∅",
+["squarf"]="▪",
+["NotGreaterTilde"]="≵",
+["NotTildeFullEqual"]="≇",
+["DownArrowUpArrow"]="⇵",
+["nwarrow"]="↖",
+["looparrowright"]="↬",
+["Dopf"]="𝔻",
+["oplus"]="⊕",
+["UpEquilibrium"]="⥮",
+["leftthreetimes"]="⋋",
+["DoubleLeftTee"]="⫤",
+["nabla"]="∇",
+["RuleDelayed"]="⧴",
+["euml"]="ë",
+["varsupsetneqq"]="⫌︀",
+["upsi"]="υ",
+["supsup"]="⫖",
+["bsol"]="\\",
+["Copf"]="ℂ",
+["DDotrahd"]="⤑",
+["Upsilon"]="Υ",
+["UpperRightArrow"]="↗",
+["nedot"]="≐̸",
+["NotEqual"]="≠",
+["bumpeq"]="≏",
+["emsp14"]=" ",
["frac38"]="⅜",
-["Ufr"]="𝔘",
-["gg"]="≫",
-["Square"]="□",
-["lt"]="<",
-["erDot"]="≓",
-["RightAngleBracket"]="⟩",
-["LeftDownTeeVector"]="⥡",
-["NotGreaterGreater"]="≫̸",
-["uogon"]="ų",
-["ocirc"]="ô",
-["sung"]="♪",
-["dollar"]="$",
-["Scaron"]="Š",
-["top"]="⊤",
-["iopf"]="𝕚",
-["udhar"]="⥮",
-["gjcy"]="ѓ",
-["ncap"]="⩃",
-["circlearrowleft"]="↺",
-["bernou"]="ℬ",
-["angmsdaf"]="⦭",
-["ldsh"]="↲",
-["isins"]="⋴",
-["RoundImplies"]="⥰",
-["bigtriangledown"]="▽",
-["LeftAngleBracket"]="⟨",
-["HorizontalLine"]="─",
-["Vdashl"]="⫦",
-["rHar"]="⥤",
-["Tcaron"]="Ť",
-["LeftDownVectorBar"]="⥙",
-["jopf"]="𝕛",
-["LeftRightVector"]="⥎",
-["LessGreater"]="≶",
+["DownTeeArrow"]="↧",
+["Bopf"]="𝔹",
+["capand"]="⩄",
+["nleqq"]="≦̸",
+["ratio"]="∶",
+["eplus"]="⩱",
+["nge"]="≱",
+["laquo"]="«",
+["urtri"]="◹",
+["LeftUpVector"]="↿",
+["gl"]="≷",
+["Gt"]="≫",
+["andd"]="⩜",
+["Lstrok"]="Ł",
+["gamma"]="γ",
+["Sc"]="⪼",
+["Aopf"]="𝔸",
+["pluscir"]="⨢",
+["Itilde"]="Ĩ",
+["DoubleRightTee"]="⊨",
+["pluse"]="⩲",
+["iiint"]="∭",
+["dotplus"]="∔",
+["vrtri"]="⊳",
+["Proportion"]="∷",
+["bne"]="=⃥",
+["cuepr"]="⋞",
+["vBar"]="⫨",
+["yucy"]="ю",
+["PrecedesTilde"]="≾",
+["varr"]="↕",
+["leftarrowtail"]="↢",
+["rangle"]="⟩",
+["subsub"]="⫕",
+["rightarrowtail"]="↣",
+["oslash"]="ø",
+["mapstodown"]="↧",
+["sqsube"]="⊑",
+["NewLine"]="\n",
+["Vdash"]="⊩",
+["num"]="#",
+["umacr"]="ū",
+["InvisibleTimes"]="⁢",
+["bemptyv"]="⦰",
+["Iogon"]="Į",
+["ssmile"]="⌣",
+["timesbar"]="⨱",
+["Tstrok"]="Ŧ",
+["Icy"]="И",
+["zacute"]="ź",
+["Cedilla"]="¸",
+["daleth"]="ℸ",
+["semi"]=";",
+["ssetmn"]="∖",
+["subdot"]="⪽",
+["Bernoullis"]="ℬ",
+["otimesas"]="⨶",
+["circleddash"]="⊝",
+["circlearrowright"]="↻",
+["NotLeftTriangleEqual"]="⋬",
+["NotTilde"]="≁",
["npart"]="∂̸",
-["nsmid"]="∤",
-["RightTriangleBar"]="⧐",
-["nesim"]="≂̸",
-["deg"]="°",
-["LeftTeeArrow"]="↤",
-["NotHumpDownHump"]="≎̸",
-["tridot"]="◬",
-["lceil"]="⌈",
-["ExponentialE"]="ⅇ",
-["tosa"]="⤩",
-["gopf"]="𝕘",
-["ContourIntegral"]="∮",
-["late"]="⪭",
-["bbrk"]="⎵",
-["half"]="½",
-["boxhd"]="┬",
-["hopf"]="𝕙",
-["Ouml"]="Ö",
-["Atilde"]="Ã",
+["Gbreve"]="Ğ",
+["gtrless"]="≷",
+["pound"]="£",
+["curlyeqsucc"]="⋟",
+["blacklozenge"]="⧫",
+["ldca"]="⤶",
+["nsucc"]="⊁",
+["top"]="⊤",
+["ufr"]="𝔲",
+["sscr"]="𝓈",
+["eDDot"]="⩷",
+["Updownarrow"]="⇕",
+["loz"]="◊",
+["Gcy"]="Г",
+["boxdl"]="┐",
+["napos"]="ʼn",
+["Sqrt"]="√",
+["xsqcup"]="⨆",
+["Implies"]="⇒",
+["uring"]="ů",
+["thetav"]="ϑ",
+["iiiint"]="⨌",
+["nLeftrightarrow"]="⇎",
+["lobrk"]="⟦",
+["xfr"]="𝔵",
+["Abreve"]="Ă",
+["micro"]="µ",
+["quatint"]="⨖",
+["congdot"]="⩭",
+["nrtrie"]="⋭",
+["Fcy"]="Ф",
+["hksearow"]="⤥",
+["LowerLeftArrow"]="↙",
+["rdca"]="⤷",
+["OverBar"]="‾",
+["frac12"]="½",
+["imacr"]="ī",
+["boxVL"]="╣",
+["sfr"]="𝔰",
+["ensp"]=" ",
+["dwangle"]="⦦",
+["boxh"]="─",
+["Eogon"]="Ę",
+["imped"]="Ƶ",
+["Ecy"]="Э",
+["lates"]="⪭︀",
+["phi"]="φ",
+["minusd"]="∸",
["planckh"]="ℎ",
-["MinusPlus"]="∓",
-["uharl"]="↿",
-["aleph"]="ℵ",
-["boxHD"]="╦",
-["lesseqgtr"]="⋚",
-["colon"]=":",
-["SquareSupersetEqual"]="⊒",
-["isinsv"]="⋳",
-["lnapprox"]="⪉",
-["PrecedesSlantEqual"]="≼",
+["Ocirc"]="Ô",
+["lE"]="≦",
+["sum"]="∑",
+["lrtri"]="⊿",
+["ruluhar"]="⥨",
+["lAarr"]="⇚",
+["DownArrow"]="↓",
+["zscr"]="𝓏",
+["questeq"]="≟",
+["ngeqq"]="≧̸",
+["And"]="⩓",
+["Dcy"]="Д",
+["angrtvbd"]="⦝",
+["rarrpl"]="⥅",
+["thkap"]="≈",
+["Otimes"]="⨷",
+["lesssim"]="≲",
+["gE"]="≧",
+["ouml"]="ö",
+["nsubseteq"]="⊈",
+["bigcirc"]="◯",
+["boxVR"]="╠",
+["Vert"]="‖",
+["naturals"]="ℕ",
+["plussim"]="⨦",
+["wscr"]="𝓌",
+["raquo"]="»",
+["bigodot"]="⨀",
+["dashv"]="⊣",
+["hairsp"]=" ",
+["inodot"]="ı",
+["vnsup"]="⊃⃒",
+["cire"]="≗",
+["vartriangleleft"]="⊲",
+["rbrke"]="⦌",
["boxuL"]="╛",
-["csup"]="⫐",
-["hstrok"]="ħ",
+["sce"]="⪰",
+["nrtri"]="⋫",
+["loarr"]="⇽",
+["ShortRightArrow"]="→",
+["xscr"]="𝓍",
+["Bcy"]="Б",
+["HumpEqual"]="≏",
+["lmidot"]="ŀ",
+["DownLeftVector"]="↽",
+["leftharpoonup"]="↼",
+["lbbrk"]="❲",
+["rarrtl"]="↣",
+["SucceedsEqual"]="⪰",
+["HumpDownHump"]="≎",
+["Vee"]="⋁",
+["Gopf"]="𝔾",
+["otilde"]="õ",
+["ofr"]="𝔬",
+["Sub"]="⋐",
+["gnE"]="≩",
+["SquareSuperset"]="⊐",
["leftrightharpoons"]="⇋",
-["boxuR"]="╘",
-["DD"]="ⅅ",
-["Longrightarrow"]="⟹",
+["tosa"]="⤩",
+["Ucirc"]="Û",
+["mscr"]="𝓂",
+["Exists"]="∃",
+["langle"]="⟨",
+["rfr"]="𝔯",
+["THORN"]="Þ",
+["gtreqqless"]="⪌",
+["eqvparsl"]="⧥",
+["NotCongruent"]="≢",
+["phiv"]="ϕ",
+["lsquor"]="‚",
+["prec"]="≺",
+["igrave"]="ì",
+["Fopf"]="𝔽",
+["nwArr"]="⇖",
+["nscr"]="𝓃",
+["gescc"]="⪩",
+["intprod"]="⨼",
+["larrlp"]="↫",
+["AMP"]="&",
+["psi"]="ψ",
+["mDDot"]="∺",
+["VDash"]="⊫",
+["Lleftarrow"]="⇚",
+["mfr"]="𝔪",
+["gesles"]="⪔",
+["kscr"]="𝓀",
+["Omega"]="Ω",
+["bumpe"]="≏",
+["NotDoubleVerticalBar"]="∦",
+["frac18"]="⅛",
+["ecolon"]="≕",
+["compfn"]="∘",
+["supdot"]="⪾",
+["Alpha"]="Α",
+["rsquor"]="’",
+["percnt"]="%",
+["pfr"]="𝔭",
+["frasl"]="⁄",
+["lscr"]="𝓁",
+["aleph"]="ℵ",
+["swArr"]="⇙",
+["uuml"]="ü",
+["uacute"]="ú",
+["scE"]="⪴",
+["hellip"]="…",
+["ulcorner"]="⌜",
+["prnap"]="⪹",
+["Gg"]="⋙",
+["wedge"]="∧",
+["SquareSubset"]="⊏",
+["qscr"]="𝓆",
+["kfr"]="𝔨",
+["RightTee"]="⊢",
+["eqsim"]="≂",
+["rbrksld"]="⦎",
+["ohm"]="Ω",
+["lozf"]="⧫",
+["cups"]="∪︀",
["epsilon"]="ε",
-["NotTildeTilde"]="≉",
+["ncap"]="⩃",
+["Leftarrow"]="⇐",
+["ultri"]="◸",
+["egrave"]="è",
+["vBarv"]="⫩",
+["bNot"]="⫭",
["nfr"]="𝔫",
-["Vscr"]="𝒱",
-["Ncy"]="Н",
-["boxUl"]="╜",
-["searr"]="↘",
-["ddagger"]="‡",
-["KHcy"]="Х",
-["NotSuperset"]="⊃⃒",
-["Uparrow"]="⇑",
-["nsqsube"]="⋢",
-["Imacr"]="Ī",
-["nspar"]="∦",
-["supsetneqq"]="⫌",
-["Sscr"]="𝒮",
-["lobrk"]="⟦",
-["mfr"]="𝔪",
-["acirc"]="â",
-["subne"]="⊊",
-["Icirc"]="Î",
-["Re"]="ℜ",
-["nearrow"]="↗",
+["rsqb"]="]",
+["OpenCurlyDoubleQuote"]="“",
+["rsquo"]="’",
+["Del"]="∇",
+["smtes"]="⪬︀",
+["varphi"]="ϕ",
+["CirclePlus"]="⊕",
+["prcue"]="≼",
+["curren"]="¤",
+["nltri"]="⋪",
+["oscr"]="ℴ",
+["Wcirc"]="Ŵ",
+["prime"]="′",
+["ifr"]="𝔦",
+["apos"]="'",
+["UpTee"]="⊥",
+["lescc"]="⪨",
+["NegativeMediumSpace"]="​",
+["DownTee"]="⊤",
+["NotSquareSubsetEqual"]="⋢",
+["LowerRightArrow"]="↘",
+["wr"]="≀",
+["andand"]="⩕",
+["gvnE"]="≩︀",
+["lfr"]="𝔩",
+["lowast"]="∗",
+["gfr"]="𝔤",
+["digamma"]="ϝ",
+["cemptyv"]="⦲",
+["ubreve"]="ŭ",
+["dstrok"]="đ",
+["expectation"]="ℰ",
+["sime"]="≃",
+["ltrif"]="◂",
+["iacute"]="í",
+["chi"]="χ",
+["erDot"]="≓",
+["Vcy"]="В",
+["boxhd"]="┬",
+["DoubleDownArrow"]="⇓",
+["lArr"]="⇐",
+["demptyv"]="⦱",
+["smt"]="⪪",
+["intcal"]="⊺",
+["in"]="∈",
+["capcup"]="⩇",
+["kjcy"]="ќ",
+["Ccirc"]="Ĉ",
+["bnequiv"]="≡⃥",
+["Emacr"]="Ē",
+["siml"]="⪝",
+["jfr"]="𝔧",
+["gesdoto"]="⪂",
+["efr"]="𝔢",
+["precneqq"]="⪵",
+["because"]="∵",
+["Udblac"]="Ű",
+["lg"]="≶",
+["boxvr"]="├",
+["fpartint"]="⨍",
+["rbbrk"]="❳",
+["LT"]="<",
+["cap"]="∩",
+["circledR"]="®",
+["notinvc"]="⋶",
+["zwj"]="‍",
+["nle"]="≰",
+["hfr"]="𝔥",
+["bigsqcup"]="⨆",
+["nGg"]="⋙̸",
+["doublebarwedge"]="⌆",
["YUcy"]="Ю",
-["eqsim"]="≂",
-["UnionPlus"]="⊎",
-["topcir"]="⫱",
-["boxVL"]="╣",
-["Xscr"]="𝒳",
-["QUOT"]="\"",
-["RightDownVectorBar"]="⥕",
-["epsi"]="ε",
-["natur"]="♮",
-["leftthreetimes"]="⋋",
-["hercon"]="⊹",
-["lHar"]="⥢",
-["Aring"]="Å",
-["Kcedil"]="Ķ",
-["kfr"]="𝔨",
-["Oacute"]="Ó",
+["empty"]="∅",
+["nacute"]="ń",
+["Acirc"]="Â",
+["bigtriangleup"]="△",
+["hybull"]="⁃",
+["Ycy"]="Ы",
+["isindot"]="⋵",
+["iota"]="ι",
+["numero"]="№",
+["cfr"]="𝔠",
+["llarr"]="⇇",
+["lrhard"]="⥭",
+["cross"]="✗",
["zwnj"]="‌",
-["plusdu"]="⨥",
-["Kcy"]="К",
-["sqcup"]="⊔",
-["zscr"]="𝓏",
-["Assign"]="≔",
-["zopf"]="𝕫",
-["lstrok"]="ł",
-["zigrarr"]="⇝",
-["ShortDownArrow"]="↓",
-["simlE"]="⪟",
-["mid"]="∣",
["zeta"]="ζ",
-["gE"]="≧",
-["zeetrf"]="ℨ",
-["qfr"]="𝔮",
+["precnsim"]="⋨",
+["zcy"]="з",
["zcaron"]="ž",
-["Yacute"]="Ý",
-["hksearow"]="⤥",
-["Atilde"]="Ã",
-["zacute"]="ź",
-["bsemi"]="⁏",
-["bigtriangleup"]="△",
-["yuml"]="ÿ",
-["yucy"]="ю",
+["xodot"]="⨀",
+["RightDownTeeVector"]="⥝",
+["ljcy"]="љ",
["yscr"]="𝓎",
-["yopf"]="𝕪",
["yicy"]="ї",
-["urcorn"]="⌝",
-["Aacute"]="Á",
-["backsimeq"]="⋍",
-["ShortUpArrow"]="↑",
+["Rcy"]="Р",
+["nsubset"]="⊂⃒",
+["yen"]="¥",
+["ycy"]="ы",
+["simeq"]="≃",
+["dharr"]="⇂",
+["ycirc"]="ŷ",
+["hArr"]="⇔",
+["yacute"]="ý",
+["yacute"]="ý",
["xwedge"]="⋀",
-["Jcy"]="Й",
-["nltrie"]="⋬",
-["starf"]="★",
-["zfr"]="𝔷",
-["comma"]=",",
-["xsqcup"]="⨆",
-["boxVr"]="╟",
-["cirscir"]="⧂",
-["ucirc"]="û",
-["Cross"]="⨯",
-["naturals"]="ℕ",
-["quaternions"]="ℍ",
-["xopf"]="𝕩",
-["xodot"]="⨀",
+["xoplus"]="⨁",
+["nparsl"]="⫽⃥",
+["PartialD"]="∂",
+["YAcy"]="Я",
+["xrArr"]="⟹",
+["xotime"]="⨂",
+["sstarf"]="⋆",
+["yuml"]="ÿ",
+["Int"]="∬",
+["bsolb"]="⧅",
["xnis"]="⋻",
-["lsaquo"]="‹",
-["xlarr"]="⟵",
-["Zacute"]="Ź",
-["vdash"]="⊢",
-["submult"]="⫁",
-["Oscr"]="𝒪",
+["xmap"]="⟼",
+["hercon"]="⊹",
+["xlArr"]="⟸",
+["xharr"]="⟷",
+["rbrack"]="]",
["xdtri"]="▽",
-["LowerRightArrow"]="↘",
+["diamond"]="⋄",
["xcup"]="⋃",
-["Ycy"]="Ы",
-["timesb"]="⊠",
-["Ucirc"]="Û",
-["eth"]="ð",
-["wscr"]="𝓌",
-["ratail"]="⤚",
-["wr"]="≀",
-["Ograve"]="Ò",
-["wp"]="℘",
-["euml"]="ë",
-["yfr"]="𝔶",
-["rangle"]="⟩",
-["hearts"]="♥",
+["subsup"]="⫓",
+["lneqq"]="≨",
+["dharl"]="⇃",
+["Scy"]="С",
+["wopf"]="𝕨",
+["rightleftharpoons"]="⇌",
+["wfr"]="𝔴",
+["nsupseteqq"]="⫆̸",
+["boxuR"]="╘",
+["permil"]="‰",
["wedgeq"]="≙",
-["wedge"]="∧",
-["gtcir"]="⩺",
-["par"]="∥",
-["swarr"]="↙",
-["phiv"]="ϕ",
-["NotElement"]="∉",
-["alpha"]="α",
-["SquareUnion"]="⊔",
-["parsl"]="⫽",
+["eparsl"]="⧣",
+["RoundImplies"]="⥰",
+["afr"]="𝔞",
+["vsubne"]="⊊︀",
+["sup2"]="²",
["vscr"]="𝓋",
-["rharu"]="⇀",
-["vrtri"]="⊳",
-["comp"]="∁",
-["Agrave"]="À",
-["rdca"]="⤷",
-["vprop"]="∝",
-["Tscr"]="𝒯",
["vopf"]="𝕧",
-["ldca"]="⤶",
+["lbrace"]="{",
["vnsub"]="⊂⃒",
-["gbreve"]="ğ",
-["NotSquareSubset"]="⊏̸",
-["verbar"]="|",
-["YAcy"]="Я",
+["vltri"]="⊲",
+["Uacute"]="Ú",
+["vfr"]="𝔳",
+["sacute"]="ś",
+["njcy"]="њ",
+["frac35"]="⅗",
+["squf"]="▪",
["veeeq"]="≚",
-["downharpoonleft"]="⇃",
-["Star"]="⋆",
-["xfr"]="𝔵",
-["nges"]="⩾̸",
-["GreaterGreater"]="⪢",
-["vartriangleright"]="⊳",
-["rcy"]="р",
-["vartheta"]="ϑ",
-["varsupsetneqq"]="⫌︀",
-["dashv"]="⊣",
+["lsime"]="⪍",
+["mapstoleft"]="↤",
["varsupsetneq"]="⊋︀",
-["Ncaron"]="Ň",
-["varsubsetneqq"]="⫋︀",
+["varsubsetneq"]="⊊︀",
+["Tcy"]="Т",
+["cwint"]="∱",
+["varsigma"]="ς",
+["LessGreater"]="≶",
["varrho"]="ϱ",
-["triangledown"]="▿",
-["varpi"]="ϖ",
-["sol"]="/",
-["ssetmn"]="∖",
-["varnothing"]="∅",
+["varpropto"]="∝",
+["pr"]="≺",
+["backprime"]="‵",
["varkappa"]="ϰ",
-["vangrt"]="⦜",
-["Leftarrow"]="⇐",
-["Qscr"]="𝒬",
-["uwangle"]="⦧",
-["rarrap"]="⥵",
+["Poincareplane"]="ℌ",
+["roplus"]="⨮",
+["Edot"]="Ė",
+["copysr"]="℗",
["uuml"]="ü",
+["dfr"]="𝔡",
["uuarr"]="⇈",
+["uogon"]="ų",
+["Uscr"]="𝒰",
+["gel"]="⋛",
+["olarr"]="↺",
+["lsaquo"]="‹",
+["omacr"]="ō",
+["utdot"]="⋰",
+["or"]="∨",
+["Ocirc"]="Ô",
+["ClockwiseContourIntegral"]="∲",
+["SmallCircle"]="∘",
+["gtcc"]="⪧",
["uscr"]="𝓊",
-["urtri"]="◹",
-["uring"]="ů",
-["sect"]="§",
-["quatint"]="⨖",
["urcrop"]="⌎",
-["wfr"]="𝔴",
-["duhar"]="⥯",
-["upuparrows"]="⇈",
-["macr"]="¯",
-["SmallCircle"]="∘",
-["upsih"]="ϒ",
-["uplus"]="⊎",
-["shy"]="­",
-["uparrow"]="↑",
+["ContourIntegral"]="∮",
+["szlig"]="ß",
+["egs"]="⪖",
+["Ucy"]="У",
+["ange"]="⦤",
+["upharpoonright"]="↾",
+["xcap"]="⋂",
["uml"]="¨",
-["eDot"]="≑",
-["blk34"]="▓",
-["umacr"]="ū",
-["ultri"]="◸",
-["rbbrk"]="❳",
+["nsubseteqq"]="⫅̸",
["ulcorn"]="⌜",
-["uharr"]="↾",
+["uhblk"]="▀",
+["scirc"]="ŝ",
+["shy"]="­",
+["uharl"]="↿",
["ugrave"]="ù",
-["Ograve"]="Ò",
-["nsupseteq"]="⊉",
-["ufisht"]="⥾",
-["Breve"]="˘",
-["ucy"]="у",
-["cylcty"]="⌭",
-["ubreve"]="ŭ",
-["SHcy"]="Ш",
-["boxdR"]="╒",
-["awint"]="⨑",
-["uHar"]="⥣",
+["lstrok"]="ł",
+["Gamma"]="Γ",
+["udhar"]="⥮",
+["udblac"]="ű",
+["ucirc"]="û",
+["loang"]="⟬",
+["uarr"]="↑",
["uArr"]="⇑",
-["REG"]="®",
-["twoheadleftarrow"]="↞",
+["twoheadrightarrow"]="↠",
["tstrok"]="ŧ",
-["iprod"]="⨼",
["tshcy"]="ћ",
+["tscy"]="ц",
+["angsph"]="∢",
+["kappa"]="κ",
["tscr"]="𝓉",
-["trpezium"]="⏢",
-["ycirc"]="ŷ",
-["larrhk"]="↩",
-["triplus"]="⨹",
+["tritime"]="⨻",
+["trisb"]="⧍",
["triminus"]="⨺",
-["Rsh"]="↱",
-["becaus"]="∵",
-["Acirc"]="Â",
+["trie"]="≜",
+["tridot"]="◬",
+["aacute"]="á",
["trianglerighteq"]="⊵",
+["RightTeeVector"]="⥛",
["triangleright"]="▹",
-["hkswarow"]="⤦",
-["triangleq"]="≜",
-["AElig"]="Æ",
["trianglelefteq"]="⊴",
-["varpropto"]="∝",
["triangle"]="▵",
-["tprime"]="‴",
+["NegativeVeryThinSpace"]="​",
+["triangledown"]="▿",
+["dash"]="‐",
+["trade"]="™",
["topfork"]="⫚",
+["Upsi"]="ϒ",
+["topcir"]="⫱",
+["loplus"]="⨭",
+["Zdot"]="Ż",
+["lbrke"]="⦋",
+["angmsd"]="∡",
+["dArr"]="⇓",
+["topbot"]="⌶",
["toea"]="⤨",
-["ac"]="∾",
-["timesd"]="⨰",
-["UpArrowDownArrow"]="⇅",
-["timesbar"]="⨱",
-["llhard"]="⥫",
-["CHcy"]="Ч",
-["odblac"]="ő",
-["THORN"]="Þ",
-["notni"]="∌",
-["nbump"]="≎̸",
-["eqcolon"]="≕",
+["iexcl"]="¡",
+["acirc"]="â",
+["easter"]="⩮",
+["CloseCurlyDoubleQuote"]="”",
+["cupcup"]="⩊",
+["rlhar"]="⇌",
+["nsimeq"]="≄",
+["Uparrow"]="⇑",
+["tau"]="τ",
+["npr"]="⊀",
+["phone"]="☎",
+["emacr"]="ē",
+["SHcy"]="Ш",
+["gtdot"]="⋗",
+["ReverseUpEquilibrium"]="⥯",
["tilde"]="˜",
-["simgE"]="⪠",
-["intercal"]="⊺",
-["thetasym"]="ϑ",
-["xcirc"]="◯",
+["angmsdac"]="⦪",
+["duhar"]="⥯",
+["approxeq"]="≊",
+["NotSupersetEqual"]="⊉",
+["thorn"]="þ",
+["thksim"]="∼",
+["subsim"]="⫇",
+["bnot"]="⌐",
["thinsp"]=" ",
["thicksim"]="∼",
-["LeftArrowBar"]="⇤",
-["Uuml"]="Ü",
-["DownTeeArrow"]="↧",
-["cent"]="¢",
-["hookleftarrow"]="↩",
-["odiv"]="⨸",
-["therefore"]="∴",
-["ClockwiseContourIntegral"]="∲",
-["Ofr"]="𝔒",
-["auml"]="ä",
-["frac12"]="½",
-["nRightarrow"]="⇏",
-["kcedil"]="ķ",
-["DownRightVectorBar"]="⥗",
-["boxDL"]="╗",
+["gt"]=">",
+["UpperLeftArrow"]="↖",
+["thetasym"]="ϑ",
+["simlE"]="⪟",
+["bbrktbrk"]="⎶",
+["Jcirc"]="Ĵ",
+["cedil"]="¸",
+["NotLessSlantEqual"]="⩽̸",
+["rx"]="℞",
+["infin"]="∞",
+["curlyvee"]="⋎",
+["LeftArrow"]="←",
+["tfr"]="𝔱",
+["blacksquare"]="▪",
+["emptyv"]="∅",
+["Mellintrf"]="ℳ",
+["aogon"]="ą",
+["succnapprox"]="⪺",
+["tcy"]="т",
+["ecaron"]="ě",
["tcedil"]="ţ",
-["boxUr"]="╙",
-["icirc"]="î",
-["lmoustache"]="⎰",
-["prime"]="′",
-["ngeq"]="≱",
-["nshortparallel"]="∦",
+["boxhU"]="╨",
+["boxVl"]="╢",
+["gacute"]="ǵ",
+["tcaron"]="ť",
+["boxDr"]="╓",
+["bump"]="≎",
+["blk12"]="▒",
+["RightArrow"]="→",
+["els"]="⪕",
+["apacir"]="⩯",
+["acy"]="а",
+["omid"]="⦶",
+["boxbox"]="⧉",
+["iecy"]="е",
["szlig"]="ß",
-["Egrave"]="È",
-["sqsubset"]="⊏",
-["NotRightTriangleEqual"]="⋭",
-["swarrow"]="↙",
-["Ucirc"]="Û",
-["DownArrowBar"]="⤓",
-["Lfr"]="𝔏",
+["upsih"]="ϒ",
+["swnwar"]="⤪",
+["Icirc"]="Î",
+["swarr"]="↙",
+["times"]="×",
+["Ograve"]="Ò",
+["hoarr"]="⇿",
+["NotTildeEqual"]="≄",
+["IEcy"]="Е",
+["iexcl"]="¡",
+["bdquo"]="„",
+["TildeTilde"]="≈",
+["nshortparallel"]="∦",
+["subedot"]="⫃",
+["supsetneq"]="⊋",
+["CenterDot"]="·",
+["lessapprox"]="⪅",
+["LeftVectorBar"]="⥒",
+["bigoplus"]="⨁",
+["supseteqq"]="⫆",
+["drcorn"]="⌟",
+["hstrok"]="ħ",
+["HorizontalLine"]="─",
+["curarrm"]="⤼",
+["lopar"]="⦅",
["wcirc"]="ŵ",
-["LessLess"]="⪡",
-["Tilde"]="∼",
-["empty"]="∅",
-["swarhk"]="⤦",
-["DownLeftVector"]="↽",
-["Uscr"]="𝒰",
-["khcy"]="х",
-["gesl"]="⋛︀",
-["supsub"]="⫔",
-["malt"]="✠",
-["cirmid"]="⫯",
-["PrecedesTilde"]="≾",
-["lharul"]="⥪",
-["rightleftharpoons"]="⇌",
-["Ccedil"]="Ç",
-["plusb"]="⊞",
-["nsupe"]="⊉",
-["geq"]="≥",
-["dHar"]="⥥",
-["lcedil"]="ļ",
-["ange"]="⦤",
-["supseteq"]="⊇",
-["Upsi"]="ϒ",
-["mapstodown"]="↧",
-["profalar"]="⌮",
-["cupdot"]="⊍",
-["mapstoleft"]="↤",
-["xotime"]="⨂",
-["tbrk"]="⎴",
-["supmult"]="⫂",
-["disin"]="⋲",
["suphsub"]="⫗",
-["eg"]="⪚",
+["Otilde"]="Õ",
+["EmptySmallSquare"]="◻",
["supedot"]="⫄",
-["NonBreakingSpace"]=" ",
-["Euml"]="Ë",
-["bsolhsub"]="⟈",
-["supdsub"]="⫘",
+["Kopf"]="𝕂",
+["boxminus"]="⊟",
+["csupe"]="⫒",
+["Ffr"]="𝔉",
+["origof"]="⊶",
["sup3"]="³",
-["DoubleLeftTee"]="⫤",
-["angrtvb"]="⊾",
-["supsim"]="⫈",
-["sup2"]="²",
-["sup2"]="²",
-["circledast"]="⊛",
-["rfr"]="𝔯",
-["darr"]="↓",
-["rarrhk"]="↪",
-["macr"]="¯",
+["boxH"]="═",
+["vsubnE"]="⫋︀",
+["Hcirc"]="Ĥ",
+["block"]="█",
+["bsolhsub"]="⟈",
+["Supset"]="⋑",
+["GreaterFullEqual"]="≧",
["sup1"]="¹",
-["aacute"]="á",
-["oscr"]="ℴ",
-["lharu"]="↼",
-["telrec"]="⌕",
-["Dashv"]="⫤",
-["succnsim"]="⋩",
-["AElig"]="Æ",
-["Vee"]="⋁",
-["succnapprox"]="⪺",
-["CapitalDifferentialD"]="ⅅ",
+["llcorner"]="⌞",
+["sopf"]="𝕤",
+["larrbfs"]="⤟",
+["succneqq"]="⪶",
+["part"]="∂",
+["eacute"]="é",
+["COPY"]="©",
+["frac23"]="⅔",
+["dbkarow"]="⤏",
+["succeq"]="⪰",
+["notni"]="∌",
+["Euml"]="Ë",
+["harrcir"]="⥈",
+["leftrightsquigarrow"]="↭",
+["xcirc"]="◯",
+["caret"]="⁁",
+["les"]="⩽",
+["lharul"]="⥪",
+["bsime"]="⋍",
+["DoubleLeftArrow"]="⇐",
+["ecirc"]="ê",
+["subsetneqq"]="⫋",
+["crarr"]="↵",
+["cuwed"]="⋏",
+["Ugrave"]="Ù",
+["Gcirc"]="Ĝ",
+["LeftTriangleBar"]="⧏",
["gsim"]="≳",
-["succapprox"]="⪸",
-["rmoustache"]="⎱",
-["DotEqual"]="≐",
-["subsup"]="⫓",
-["Gcedil"]="Ģ",
-["questeq"]="≟",
-["lthree"]="⋋",
-["cong"]="≅",
-["lcub"]="{",
-["radic"]="√",
-["subrarr"]="⥹",
-["nvlt"]="<⃒",
+["RightTriangleEqual"]="⊵",
+["lacute"]="ĺ",
+["Ccedil"]="Ç",
+["ee"]="ⅇ",
+["heartsuit"]="♥",
+["coloneq"]="≔",
+["subseteq"]="⊆",
+["NotSucceedsTilde"]="≿̸",
["subplus"]="⪿",
-["bigsqcup"]="⨆",
-["downarrow"]="↓",
-["auml"]="ä",
-["boxdL"]="╕",
-["boxvr"]="├",
-["lbrkslu"]="⦍",
-["bigwedge"]="⋀",
-["apacir"]="⩯",
-["Wscr"]="𝒲",
-["iecy"]="е",
-["VerticalSeparator"]="❘",
-["Yfr"]="𝔜",
+["cupcap"]="⩆",
+["Amacr"]="Ā",
+["angst"]="Å",
+["supsetneqq"]="⫌",
+["sube"]="⊆",
+["imagpart"]="ℑ",
+["Lambda"]="Λ",
+["Afr"]="𝔄",
+["sub"]="⊂",
["strns"]="¯",
["straightphi"]="ϕ",
-["kcy"]="к",
-["aogon"]="ą",
-["star"]="☆",
-["caret"]="⁁",
-["cups"]="∪︀",
-["iquest"]="¿",
-["spar"]="∥",
-["NotExists"]="∄",
-["Gt"]="≫",
+["boxvL"]="╡",
+["dagger"]="†",
+["eta"]="η",
+["KHcy"]="Х",
+["Yfr"]="𝔜",
+["lbrack"]="[",
+["VerticalBar"]="∣",
+["rightleftarrows"]="⇄",
+["fltns"]="▱",
+["verbar"]="|",
+["RightAngleBracket"]="⟩",
+["DownRightVector"]="⇁",
+["Lacute"]="Ĺ",
+["sol"]="/",
+["lrm"]="‎",
+["lesdot"]="⩿",
+["nleqslant"]="⩽̸",
+["capcap"]="⩋",
["squ"]="□",
-["sqsupe"]="⊒",
-["subnE"]="⫋",
+["xutri"]="△",
+["TSHcy"]="Ћ",
+["gap"]="⪆",
+["gtrdot"]="⋗",
+["scnap"]="⪺",
+["bkarow"]="⤍",
+["NotPrecedes"]="⊀",
+["suphsol"]="⟉",
["sqsup"]="⊐",
-["sqsubseteq"]="⊑",
-["ffr"]="𝔣",
-["UpTeeArrow"]="↥",
-["middot"]="·",
-["DoubleLongRightArrow"]="⟹",
-["sqsube"]="⊑",
-["sce"]="⪰",
-["Sup"]="⋑",
-["cacute"]="ć",
-["GreaterFullEqual"]="≧",
-["pfr"]="𝔭",
-["Lleftarrow"]="⇚",
-["heartsuit"]="♥",
-["precsim"]="≾",
-["nsucceq"]="⪰̸",
+["epsi"]="ε",
+["sqsubset"]="⊏",
+["check"]="✓",
+["UpArrowBar"]="⤒",
+["NotPrecedesEqual"]="⪯̸",
+["csube"]="⫑",
+["nsupset"]="⊃⃒",
+["lesdoto"]="⪁",
["sqcups"]="⊔︀",
-["Igrave"]="Ì",
-["iquest"]="¿",
-["Pcy"]="П",
-["thksim"]="∼",
-["djcy"]="ђ",
-["hfr"]="𝔥",
-["spadesuit"]="♠",
-["rbrkslu"]="⦐",
-["shcy"]="ш",
-["barwed"]="⌅",
-["rpar"]=")",
-["iiiint"]="⨌",
-["solb"]="⧄",
-["Integral"]="∫",
-["napE"]="⩰̸",
-["softcy"]="ь",
-["NotRightTriangleBar"]="⧐̸",
-["Mu"]="Μ",
-["frasl"]="⁄",
-["Icy"]="И",
-["dfisht"]="⥿",
+["suplarr"]="⥻",
+["nsim"]="≁",
+["NotEqualTilde"]="≂̸",
+["nearr"]="↗",
+["SquareIntersection"]="⊓",
+["intlarhk"]="⨗",
+["Ecirc"]="Ê",
+["vangrt"]="⦜",
+["fllig"]="fl",
+["Leftrightarrow"]="⇔",
+["primes"]="ℙ",
+["nvlArr"]="⤂",
["smte"]="⪬",
-["smt"]="⪪",
-["bottom"]="⊥",
-["oacute"]="ó",
-["ofr"]="𝔬",
+["ltri"]="◃",
+["Tscr"]="𝒯",
["smid"]="∣",
-["ReverseUpEquilibrium"]="⥯",
-["smashp"]="⨳",
-["slarr"]="←",
-["simne"]="≆",
-["LeftRightArrow"]="↔",
-["thkap"]="≈",
-["nlArr"]="⇍",
-["chcy"]="ч",
-["not"]="¬",
-["kgreen"]="ĸ",
-["simeq"]="≃",
-["LongRightArrow"]="⟶",
-["sime"]="≃",
-["sigma"]="σ",
-["odot"]="⊙",
-["amp"]="&",
-["Longleftrightarrow"]="⟺",
-["Upsilon"]="Υ",
-["upharpoonleft"]="↿",
-["bigotimes"]="⨂",
-["parallel"]="∥",
-["ffllig"]="ffl",
-["shortparallel"]="∥",
-["boxdr"]="┌",
-["shortmid"]="∣",
-["Euml"]="Ë",
-["UpDownArrow"]="↕",
-["lcaron"]="ľ",
-["sfrown"]="⌢",
-["harr"]="↔",
-["dsol"]="⧶",
-["Beta"]="Β",
-["srarr"]="→",
-["boxHd"]="╤",
+["smeparsl"]="⧤",
+["rarrc"]="⤳",
+["divideontimes"]="⋇",
+["eth"]="ð",
+["boxvR"]="╞",
+["copy"]="©",
+["nges"]="⩾̸",
+["fcy"]="ф",
+["ShortUpArrow"]="↑",
+["simplus"]="⨤",
+["frac45"]="⅘",
+["nexists"]="∄",
+["LeftTeeArrow"]="↤",
+["leftleftarrows"]="⇇",
+["simg"]="⪞",
+["euro"]="€",
+["simdot"]="⩪",
+["sim"]="∼",
+["sigmav"]="ς",
+["iuml"]="ï",
+["updownarrow"]="↕",
+["shy"]="­",
+["solb"]="⧄",
["nesear"]="⤨",
+["Umacr"]="Ū",
+["uharr"]="↾",
+["Therefore"]="∴",
+["Barv"]="⫧",
+["amacr"]="ā",
["setmn"]="∖",
-["DoubleDot"]="¨",
["setminus"]="∖",
-["andd"]="⩜",
-["leftrightarrow"]="↔",
+["Sscr"]="𝒮",
["seswar"]="⤩",
-["eogon"]="ę",
-["bne"]="=⃥",
-["DownBreve"]="̑",
-["nLtv"]="≪̸",
-["nprcue"]="⋠",
-["SucceedsSlantEqual"]="≽",
-["downdownarrows"]="⇊",
-["seArr"]="⇘",
-["Utilde"]="Ũ",
-["Gammad"]="Ϝ",
-["sdote"]="⩦",
-["iexcl"]="¡",
-["nvdash"]="⊬",
-["csupe"]="⫒",
+["ccupssm"]="⩐",
+["searr"]="↘",
["sdotb"]="⊡",
-["scsim"]="≿",
-["bcy"]="б",
-["NotTilde"]="≁",
-["minus"]="−",
-["scnE"]="⪶",
-["scirc"]="ŝ",
-["oplus"]="⊕",
-["para"]="¶",
-["Ycirc"]="Ŷ",
-["notinva"]="∉",
-["nLl"]="⋘̸",
-["Aring"]="Å",
-["THORN"]="Þ",
-["numero"]="№",
-["scaron"]="š",
-["bsol"]="\\",
-["harrw"]="↭",
-["exponentiale"]="ⅇ",
-["eDDot"]="⩷",
-["AMP"]="&",
-["gamma"]="γ",
-["opar"]="⦷",
-["cwint"]="∱",
-["GreaterEqual"]="≥",
-["bigcap"]="⋂",
-["rtimes"]="⋊",
-["integers"]="ℤ",
-["easter"]="⩮",
+["icirc"]="î",
+["amp"]="&",
+["gcy"]="г",
+["Aacute"]="Á",
+["boxvh"]="┼",
+["bfr"]="𝔟",
+["OverParenthesis"]="⏜",
+["sqsupe"]="⊒",
+["amp"]="&",
+["frac14"]="¼",
+["ZeroWidthSpace"]="​",
+["Colon"]="∷",
+["Proportional"]="∝",
+["thickapprox"]="≈",
+["subseteqq"]="⫅",
+["IJlig"]="IJ",
+["scedil"]="ş",
+["lrarr"]="⇆",
+["angmsdaf"]="⦭",
+["downharpoonleft"]="⇃",
["RightDoubleBracket"]="⟧",
+["half"]="½",
+["larr"]="←",
["sbquo"]="‚",
-["cfr"]="𝔠",
-["ruluhar"]="⥨",
-["image"]="ℑ",
-["nleqslant"]="⩽̸",
-["Yopf"]="𝕐",
-["apE"]="⩰",
-["NotPrecedesEqual"]="⪯̸",
-["rsqb"]="]",
-["rtrie"]="⊵",
-["rthree"]="⋌",
-["amp"]="&",
-["eng"]="ŋ",
-["ll"]="≪",
-["rrarr"]="⇉",
-["RightTee"]="⊢",
-["ETH"]="Ð",
-["ReverseEquilibrium"]="⇋",
-["langle"]="⟨",
+["Vscr"]="𝒱",
+["nVdash"]="⊮",
+["DownRightVectorBar"]="⥗",
+["RightDownVector"]="⇂",
+["disin"]="⋲",
+["nsce"]="⪰̸",
+["rbrace"]="}",
+["MinusPlus"]="∓",
+["rtrif"]="▸",
+["parsim"]="⫳",
+["supseteq"]="⊇",
+["Superset"]="⊃",
+["Verbar"]="‖",
["Zeta"]="Ζ",
-["roplus"]="⨮",
-["there4"]="∴",
-["DownRightTeeVector"]="⥟",
-["npar"]="∦",
-["robrk"]="⟧",
-["exist"]="∃",
-["lfr"]="𝔩",
-["VDash"]="⊫",
-["rnmid"]="⫮",
-["rmoust"]="⎱",
+["nsccue"]="⋡",
+["bsemi"]="⁏",
+["ldquor"]="„",
+["curarr"]="↷",
+["rscr"]="𝓇",
+["rppolint"]="⨒",
+["rpargt"]="⦔",
+["rotimes"]="⨵",
+["Equal"]="⩵",
+["ropf"]="𝕣",
+["ropar"]="⦆",
+["roarr"]="⇾",
+["odot"]="⊙",
+["natural"]="♮",
+["slarr"]="←",
+["angmsdae"]="⦬",
+["acE"]="∾̳",
["rlm"]="‏",
-["Ccirc"]="Ĉ",
-["imagpart"]="ℑ",
-["Equilibrium"]="⇌",
-["dd"]="ⅆ",
-["cuepr"]="⋞",
-["Agrave"]="À",
-["cuesc"]="⋟",
-["square"]="□",
-["notnivc"]="⋽",
-["rbrksld"]="⦎",
+["COPY"]="©",
+["iogon"]="į",
+["nleftrightarrow"]="↮",
+["reg"]="®",
+["risingdotseq"]="≓",
+["rightsquigarrow"]="↝",
+["dtri"]="▿",
+["Larr"]="↞",
+["icy"]="и",
+["gimel"]="ℷ",
["cup"]="∪",
-["OpenCurlyDoubleQuote"]="“",
-["Lacute"]="Ĺ",
-["NewLine"]="\n",
-["Sigma"]="Σ",
-["Abreve"]="Ă",
-["rightleftarrows"]="⇄",
-["tint"]="∭",
-["angmsdae"]="⦬",
-["Leftrightarrow"]="⇔",
-["rdquor"]="”",
-["Verbar"]="‖",
-["Gfr"]="𝔊",
+["DJcy"]="Ђ",
+["gtrapprox"]="⪆",
+["rightharpoonup"]="⇀",
+["prsim"]="≾",
+["rightharpoondown"]="⇁",
+["frac16"]="⅙",
+["nbsp"]=" ",
+["cedil"]="¸",
+["numsp"]=" ",
["rightarrow"]="→",
["rhov"]="ϱ",
-["Alpha"]="Α",
-["rho"]="ρ",
-["DownLeftTeeVector"]="⥞",
-["ntriangleright"]="⋫",
+["rdquo"]="”",
+["rharul"]="⥬",
+["frac34"]="¾",
+["ldrdhar"]="⥧",
+["gnsim"]="⋧",
+["rtriltri"]="⧎",
+["emsp"]=" ",
+["rlarr"]="⇄",
+["Oslash"]="Ø",
+["LeftDownTeeVector"]="⥡",
["reg"]="®",
-["Int"]="∬",
-["agrave"]="à",
-["Ecirc"]="Ê",
-["NotReverseElement"]="∌",
-["backprime"]="‵",
-["Jfr"]="𝔍",
+["LeftTeeVector"]="⥚",
+["gsiml"]="⪐",
+["QUOT"]="\"",
+["blk14"]="░",
+["rightrightarrows"]="⇉",
+["NotGreaterGreater"]="≫̸",
+["Xscr"]="𝒳",
+["Re"]="ℜ",
+["Ouml"]="Ö",
["rdsh"]="↳",
-["jsercy"]="ј",
-["Bscr"]="ℬ",
-["boxH"]="═",
-["leq"]="≤",
-["NotPrecedes"]="⊀",
-["coloneq"]="≔",
-["boxvh"]="┼",
-["larr"]="←",
-["ncup"]="⩂",
-["EmptySmallSquare"]="◻",
-["vartriangleleft"]="⊲",
-["iacute"]="í",
-["nVDash"]="⊯",
-["lap"]="⪅",
-["precapprox"]="⪷",
-["ecolon"]="≕",
-["lsqb"]="[",
+["and"]="∧",
+["larrb"]="⇤",
+["TripleDot"]="⃛",
+["bcy"]="б",
+["diams"]="♦",
+["veebar"]="⊻",
+["rcub"]="}",
+["Scirc"]="Ŝ",
+["ac"]="∾",
+["rceil"]="⌉",
+["rcedil"]="ŗ",
+["cupbrcap"]="⩈",
+["rcaron"]="ř",
+["cuesc"]="⋟",
+["HilbertSpace"]="ℋ",
+["plus"]="+",
+["rbrkslu"]="⦐",
+["LessLess"]="⪡",
+["macr"]="¯",
+["notinE"]="⋹̸",
["rbarr"]="⤍",
-["yacy"]="я",
-["efDot"]="≒",
-["ratio"]="∶",
-["wreath"]="≀",
-["nearhk"]="⤤",
-["rarrpl"]="⥅",
-["nvge"]="≥⃒",
-["searrow"]="↘",
-["thorn"]="þ",
-["rdquo"]="”",
-["LessFullEqual"]="≦",
-["nvrtrie"]="⊵⃒",
-["nsubseteqq"]="⫅̸",
-["nedot"]="≐̸",
-["VerticalLine"]="|",
-["lsh"]="↰",
-["DownRightVector"]="⇁",
-["ecirc"]="ê",
-["andv"]="⩚",
-["trie"]="≜",
-["race"]="∽̱",
+["abreve"]="ă",
+["sqcup"]="⊔",
+["ratail"]="⤚",
+["VeryThinSpace"]=" ",
+["Uarrocir"]="⥉",
+["rarrfs"]="⤞",
+["Odblac"]="Ő",
+["Imacr"]="Ī",
+["ordm"]="º",
+["odsold"]="⦼",
+["NJcy"]="Њ",
+["Yacute"]="Ý",
+["rarrbfs"]="⤠",
+["prop"]="∝",
+["notin"]="∉",
+["vsupne"]="⊋︀",
+["bigcap"]="⋂",
+["Phi"]="Φ",
+["Ograve"]="Ò",
+["Yscr"]="𝒴",
+["approx"]="≈",
+["racute"]="ŕ",
+["ggg"]="⋙",
+["lmoust"]="⎰",
["rBarr"]="⤏",
-["lbrksld"]="⦏",
-["emsp14"]=" ",
-["RuleDelayed"]="⧴",
-["vsubne"]="⊊︀",
-["ShortLeftArrow"]="←",
-["gtlPar"]="⦕",
+["gneqq"]="≩",
+["isinv"]="∈",
+["harr"]="↔",
+["rArr"]="⇒",
+["rAarr"]="⇛",
+["quot"]="\"",
["quest"]="?",
-["dot"]="˙",
-["RightVector"]="⇀",
-["rppolint"]="⨒",
-["Hat"]="^",
-["zcy"]="з",
-["suplarr"]="⥻",
-["boxhU"]="╨",
-["puncsp"]=" ",
-["GreaterLess"]="≷",
-["psi"]="ψ",
-["ncaron"]="ň",
-["SupersetEqual"]="⊇",
-["propto"]="∝",
-["preceq"]="⪯",
-["frac56"]="⅚",
-["NotLessGreater"]="≸",
-["jukcy"]="є",
-["swArr"]="⇙",
-["profline"]="⌒",
+["iuml"]="ï",
+["LeftRightArrow"]="↔",
+["LeftDoubleBracket"]="⟦",
+["gesdot"]="⪀",
+["Ntilde"]="Ñ",
+["boxUR"]="╚",
+["exist"]="∃",
+["subnE"]="⫋",
+["ograve"]="ò",
+["qopf"]="𝕢",
+["Zacute"]="Ź",
+["qfr"]="𝔮",
+["dcy"]="д",
+["NotReverseElement"]="∌",
+["DotEqual"]="≐",
+["VerticalLine"]="|",
+["pscr"]="𝓅",
+["prurel"]="⊰",
+["cdot"]="ċ",
+["bprime"]="‵",
+["ltdot"]="⋖",
+["prnsim"]="⋨",
+["curlywedge"]="⋏",
["prnE"]="⪵",
-["larrpl"]="⤹",
-["af"]="⁡",
-["profsurf"]="⌓",
-["Larr"]="↞",
+["REG"]="®",
+["sup3"]="³",
+["preceq"]="⪯",
+["LeftDownVectorBar"]="⥙",
+["ForAll"]="∀",
["forkv"]="⫙",
-["prcue"]="≼",
-["RightUpTeeVector"]="⥜",
+["varpi"]="ϖ",
+["nrArr"]="⇏",
["pound"]="£",
-["ugrave"]="ù",
-["popf"]="𝕡",
-["frac78"]="⅞",
-["suphsol"]="⟉",
-["loplus"]="⨭",
-["pointint"]="⨕",
-["cupcap"]="⩆",
-["LessTilde"]="≲",
-["pm"]="±",
-["blacksquare"]="▪",
["plustwo"]="⨧",
-["copy"]="©",
-["plussim"]="⨦",
-["Lcy"]="Л",
-["pluse"]="⩲",
-["ropar"]="⦆",
-["OpenCurlyQuote"]="‘",
+["shchcy"]="щ",
+["cacute"]="ć",
+["Dashv"]="⫤",
+["lHar"]="⥢",
+["NotLeftTriangle"]="⋪",
+["gbreve"]="ğ",
+["boxDl"]="╖",
+["Beta"]="Β",
+["ReverseEquilibrium"]="⇋",
["plusacir"]="⨣",
-["Exists"]="∃",
-["piv"]="ϖ",
-["phmmat"]="ℳ",
-["angzarr"]="⍼",
-["vsupnE"]="⫌︀",
-["phi"]="φ",
-["perp"]="⊥",
-["rdldhar"]="⥩",
-["ccirc"]="ĉ",
-["Tfr"]="𝔗",
-["Tcy"]="Т",
-["circeq"]="≗",
-["InvisibleTimes"]="⁢",
-["OElig"]="Œ",
-["trisb"]="⧍",
-["Rcaron"]="Ř",
-["olt"]="⧀",
-["UpArrow"]="↑",
-["DDotrahd"]="⤑",
-["Uarrocir"]="⥉",
-["lacute"]="ĺ",
+["eqslantgtr"]="⪖",
+["ecy"]="э",
+["pitchfork"]="⋔",
+["ctdot"]="⋯",
+["odiv"]="⨸",
+["lesseqqgtr"]="⪋",
+["GreaterLess"]="≷",
+["Ocy"]="О",
+["weierp"]="℘",
+["Uring"]="Ů",
+["period"]=".",
+["nis"]="⋼",
+["cudarrr"]="⤵",
+["boxHU"]="╩",
+["Ouml"]="Ö",
+["Assign"]="≔",
+["Lscr"]="ℒ",
+["parallel"]="∥",
+["there4"]="∴",
+["cupor"]="⩅",
+["nwarr"]="↖",
+["para"]="¶",
+["ouml"]="ö",
+["otimes"]="⊗",
+["drbkarow"]="⤐",
+["puncsp"]=" ",
+["otilde"]="õ",
+["Vvdash"]="⊪",
+["osol"]="⊘",
["oslash"]="ø",
-["Uarr"]="↟",
-["bsolb"]="⧅",
-["gt"]=">",
-["ordm"]="º",
-["Itilde"]="Ĩ",
-["ordm"]="º",
-["Jscr"]="𝒥",
-["Rarr"]="↠",
-["measuredangle"]="∡",
+["dd"]="ⅆ",
+["NotPrecedesSlantEqual"]="⋠",
+["orv"]="⩛",
+["orslope"]="⩗",
+["KJcy"]="Ќ",
+["larrfs"]="⤝",
+["orderof"]="ℴ",
+["asympeq"]="≍",
+["ord"]="⩝",
+["NotLess"]="≮",
+["NotGreater"]="≯",
+["ThinSpace"]=" ",
+["ominus"]="⊖",
["DoubleLongLeftRightArrow"]="⟺",
-["lmidot"]="ŀ",
-["period"]=".",
+["lesseqgtr"]="⋚",
["operp"]="⦹",
-["bprime"]="‵",
-["numsp"]=" ",
-["ominus"]="⊖",
-["nldr"]="‥",
+["quaternions"]="ℍ",
+["boxdR"]="╒",
+["omega"]="ω",
+["Kscr"]="𝒦",
+["lessgtr"]="≶",
+["utilde"]="ũ",
+["olt"]="⧀",
+["Rho"]="Ρ",
+["olcir"]="⦾",
+["oint"]="∮",
["ograve"]="ò",
-["omicron"]="ο",
-["nearr"]="↗",
-["jcirc"]="ĵ",
-["nlE"]="≦̸",
-["deg"]="°",
-["frac13"]="⅓",
-["tcy"]="т",
-["lowbar"]="_",
-["vfr"]="𝔳",
-["ogon"]="˛",
-["sim"]="∼",
-["ocirc"]="ô",
-["Icirc"]="Î",
-["ocir"]="⊚",
-["ZeroWidthSpace"]="​",
+["Succeeds"]="≻",
+["Igrave"]="Ì",
+["eogon"]="ę",
+["Uacute"]="Ú",
+["bbrk"]="⎵",
+["ocy"]="о",
+["bcong"]="≌",
["oast"]="⊛",
-["smile"]="⌣",
-["bigvee"]="⋁",
["oacute"]="ó",
-["Egrave"]="È",
-["nwnear"]="⤧",
-["nwarhk"]="⤣",
-["rationals"]="ℚ",
-["DiacriticalGrave"]="`",
-["npreceq"]="⪯̸",
-["rarrc"]="⤳",
-["Uogon"]="Ų",
-["InvisibleComma"]="⁣",
-["nvltrie"]="⊴⃒",
-["digamma"]="ϝ",
-["cirE"]="⧃",
-["AMP"]="&",
-["Theta"]="Θ",
-["frac15"]="⅕",
-["fnof"]="ƒ",
-["icirc"]="î",
-["Cdot"]="Ċ",
-["ngsim"]="≵",
-["sube"]="⊆",
-["tcaron"]="ť",
+["cir"]="○",
+["angmsdab"]="⦩",
+["Iscr"]="ℐ",
+["ldquo"]="“",
+["RightVector"]="⇀",
+["euml"]="ë",
+["between"]="≬",
+["oS"]="Ⓢ",
+["downdownarrows"]="⇊",
+["nvlt"]="<⃒",
+["lurdshar"]="⥊",
+["starf"]="★",
+["xlarr"]="⟵",
+["Aring"]="Å",
+["Xi"]="Ξ",
+["gtcir"]="⩺",
+["Nscr"]="𝒩",
+["elinters"]="⏧",
+["ntrianglelefteq"]="⋬",
+["Vbar"]="⫫",
["ntilde"]="ñ",
-["ufr"]="𝔲",
-["Mcy"]="М",
-["Delta"]="Δ",
-["vnsup"]="⊃⃒",
-["lAtail"]="⤛",
-["DoubleUpArrow"]="⇑",
-["aelig"]="æ",
-["lscr"]="𝓁",
-["Rscr"]="ℛ",
-["capcup"]="⩇",
-["npolint"]="⨔",
-["gesdotol"]="⪄",
-["uacute"]="ú",
-["bumpE"]="⪮",
-["drcorn"]="⌟",
-["notnivb"]="⋾",
-["notinvc"]="⋶",
-["ovbar"]="⌽",
-["Mopf"]="𝕄",
-["NotGreater"]="≯",
-["boxDr"]="╓",
-["lrcorner"]="⌟",
-["nleq"]="≰",
-["nleftarrow"]="↚",
-["nle"]="≰",
+["andv"]="⩚",
+["Rsh"]="↱",
+["angmsdad"]="⦫",
+["nsup"]="⊅",
+["nbsp"]=" ",
+["SquareSupersetEqual"]="⊒",
+["ETH"]="Ð",
+["nsube"]="⊈",
+["DoubleContourIntegral"]="∯",
+["nsubE"]="⫅̸",
+["angmsdah"]="⦯",
+["NotLessGreater"]="≸",
+["awint"]="⨑",
+["rtri"]="▹",
+["nsc"]="⊁",
["boxvl"]="┤",
-["Downarrow"]="⇓",
-["hcirc"]="ĥ",
+["beta"]="β",
+["LessSlantEqual"]="⩽",
+["supsub"]="⫔",
+["agrave"]="à",
+["LeftUpTeeVector"]="⥠",
+["nrarrw"]="↝̸",
+["ltcc"]="⪦",
+["nrarrc"]="⤳̸",
+["frac78"]="⅞",
+["nvrArr"]="⤃",
+["igrave"]="ì",
+["barwed"]="⌅",
+["Mscr"]="ℳ",
+["nrarr"]="↛",
+["SubsetEqual"]="⊆",
+["notnivc"]="⋽",
+["notnivb"]="⋾",
+["succcurlyeq"]="≽",
+["eth"]="ð",
+["notinva"]="∉",
+["Otilde"]="Õ",
+["star"]="☆",
+["rangd"]="⦒",
+["Psi"]="Ψ",
+["nsupe"]="⊉",
+["mapstoup"]="↥",
+["LJcy"]="Љ",
+["looparrowleft"]="↫",
+["nlarr"]="↚",
+["Ll"]="⋘",
+["ordf"]="ª",
+["ni"]="∋",
+["Delta"]="Δ",
+["NotVerticalBar"]="∤",
+["backcong"]="≌",
+["NoBreak"]="⁠",
["nharr"]="↮",
-["tfr"]="𝔱",
-["nlt"]="≮",
-["gacute"]="ǵ",
-["colone"]="≔",
-["Rang"]="⟫",
["ngt"]="≯",
-["ntilde"]="ñ",
-["vcy"]="в",
-["boxvL"]="╡",
-["NotLeftTriangleBar"]="⧏̸",
-["NestedGreaterGreater"]="≫",
-["xmap"]="⟼",
-["napid"]="≋̸",
-["LeftTriangleBar"]="⧏",
-["SquareSubsetEqual"]="⊑",
-["eacute"]="é",
-["ne"]="≠",
-["ncongdot"]="⩭̸",
-["boxvR"]="╞",
-["PrecedesEqual"]="⪯",
-["Omacr"]="Ō",
-["egs"]="⪖",
-["ouml"]="ö",
-["nbsp"]=" ",
-["xuplus"]="⨄",
-["napprox"]="≉",
-["CloseCurlyQuote"]="’",
-["nacute"]="ń",
-["Chi"]="Χ",
-["subsub"]="⫕",
-["gescc"]="⪩",
-["gcirc"]="ĝ",
-["Lsh"]="↰",
-["sfr"]="𝔰",
-["circlearrowright"]="↻",
-["rcaron"]="ř",
-["ThinSpace"]=" ",
-["otilde"]="õ",
-["TRADE"]="™",
-["cudarrl"]="⤸",
-["lat"]="⪫",
-["nLeftrightarrow"]="⇎",
-["leqq"]="≦",
-["dagger"]="†",
-["dstrok"]="đ",
-["sacute"]="ś",
-["Amacr"]="Ā",
-["mumap"]="⊸",
-["models"]="⊧",
-["DiacriticalAcute"]="´",
-["minusd"]="∸",
-["hybull"]="⁃",
-["ijlig"]="ij",
-["fflig"]="ff",
-["NotGreaterEqual"]="≱",
-["Colon"]="∷",
-["boxV"]="║",
-["DotDot"]="⃜",
-["mdash"]="—",
-["hairsp"]=" ",
-["bcong"]="≌",
-["mcomma"]="⨩",
-["cirfnint"]="⨐",
-["TScy"]="Ц",
-["luruhar"]="⥦",
-["awconint"]="∳",
-["nsim"]="≁",
-["els"]="⪕",
-["imof"]="⊷",
-["lpar"]="(",
-["lozenge"]="◊",
-["oint"]="∮",
-["Umacr"]="Ū",
-["Sum"]="∑",
-["lopar"]="⦅",
-["racute"]="ŕ",
-["LessEqualGreater"]="⋚",
-["Wedge"]="⋀",
-["bbrktbrk"]="⎶",
-["RightDownTeeVector"]="⥝",
-["HumpDownHump"]="≎",
-["rarrb"]="⇥",
-["longleftrightarrow"]="⟷",
-["lnE"]="≨",
-["NotGreaterSlantEqual"]="⩾̸",
-["Nu"]="Ν",
-["NotNestedLessLess"]="⪡̸",
-["UpEquilibrium"]="⥮",
-["boxhD"]="╥",
-["el"]="⪙",
-["boxDR"]="╔",
-["Gdot"]="Ġ",
-["itilde"]="ĩ",
-["isindot"]="⋵",
-["GreaterEqualLess"]="⋛",
-["Ll"]="⋘",
-["nrarrw"]="↝̸",
-["supnE"]="⫌",
-["epsiv"]="ϵ",
-["Element"]="∈",
-["gtreqless"]="⋛",
+["Pscr"]="𝒫",
["laemptyv"]="⦴",
-["nGt"]="≫⃒",
-["angsph"]="∢",
-["lE"]="≦",
-["kscr"]="𝓀",
-["Ocy"]="О",
-["LowerLeftArrow"]="↙",
-["dopf"]="𝕕",
-["iukcy"]="і",
-["atilde"]="ã",
-["DoubleRightArrow"]="⇒",
-["oslash"]="ø",
-["rarr"]="→",
-["intprod"]="⨼",
-["hookrightarrow"]="↪",
-["intcal"]="⊺",
-["infintie"]="⧝",
-["escr"]="ℯ",
-["iiota"]="℩",
-["curren"]="¤",
-["Bernoullis"]="ℬ",
-["angmsdah"]="⦯",
-["ShortRightArrow"]="→",
-["boxUR"]="╚",
-["ges"]="⩾",
-["DoubleDownArrow"]="⇓",
+["utrif"]="▴",
+["ngeq"]="≱",
+["ncedil"]="ņ",
+["ncaron"]="ň",
+["boxhu"]="┴",
["NotSquareSuperset"]="⊐̸",
+["bull"]="•",
+["SquareSubsetEqual"]="⊑",
+["VerticalSeparator"]="❘",
+["natur"]="♮",
+["ffr"]="𝔣",
+["rdquor"]="”",
+["lagran"]="ℒ",
+["nRightarrow"]="⇏",
+["nLtv"]="≪̸",
+["nLl"]="⋘̸",
+["Epsilon"]="Ε",
+["csup"]="⫐",
+["leftarrow"]="←",
+["nGt"]="≫⃒",
+["multimap"]="⊸",
+["mstpos"]="∾",
+["SuchThat"]="∋",
+["mldr"]="…",
+["midast"]="*",
+["Sum"]="∑",
+["vartheta"]="ϑ",
+["mapsto"]="↦",
+["nsupseteq"]="⊉",
+["Oscr"]="𝒪",
+["forall"]="∀",
+["aring"]="å",
+["ltimes"]="⋉",
+["ltcir"]="⩹",
+["lt"]="<",
+["ii"]="ⅈ",
+["equest"]="≟",
+["scsim"]="≿",
+["lsqb"]="[",
+["lsimg"]="⪏",
+["Egrave"]="È",
+["Downarrow"]="⇓",
["lsim"]="≲",
-["bump"]="≎",
-["curlyeqsucc"]="⋟",
-["SHCHcy"]="Щ",
-["frac45"]="⅘",
-["qint"]="⨌",
-["Precedes"]="≺",
-["RightTeeArrow"]="↦",
-["frac16"]="⅙",
-["euro"]="€",
-["smtes"]="⪬︀",
-["eth"]="ð",
-["ldquo"]="“",
-["equivDD"]="⩸",
-["Oopf"]="𝕆",
+["eqslantless"]="⪕",
+["ucirc"]="û",
+["Auml"]="Ä",
+["lnsim"]="⋦",
+["uplus"]="⊎",
+["lhblk"]="▄",
+["Ugrave"]="Ù",
+["dlcrop"]="⌍",
+["OElig"]="Œ",
+["lesg"]="⋚︀",
+["lesdotor"]="⪃",
+["eg"]="⪚",
+["lvertneqq"]="≨︀",
+["leqslant"]="⩽",
+["ccups"]="⩌",
+["lceil"]="⌈",
+["auml"]="ä",
+["RightCeiling"]="⌉",
+["lbrksld"]="⦏",
+["lbarr"]="⤌",
+["lat"]="⪫",
+["Rscr"]="ℛ",
+["Zcy"]="З",
+["bigwedge"]="⋀",
+["Prime"]="″",
+["boxDR"]="╔",
+["scnsim"]="⋩",
+["efDot"]="≒",
+["kopf"]="𝕜",
+["minusdu"]="⨪",
+["kappav"]="ϰ",
["boxVh"]="╫",
-["GreaterSlantEqual"]="⩾",
-["KJcy"]="Ќ",
-["egrave"]="è",
-["NotGreaterLess"]="≹",
-["boxVl"]="╢",
-["MediumSpace"]=" ",
-["LongLeftArrow"]="⟵",
-["uarr"]="↑",
-["Ocirc"]="Ô",
-["Idot"]="İ",
-["bumpe"]="≏",
-["nwArr"]="⇖",
-["NegativeThinSpace"]="​",
-["coprod"]="∐",
-["VerticalBar"]="∣",
-["sccue"]="≽",
-["boxDl"]="╖",
-["NotSubset"]="⊂⃒",
-["Edot"]="Ė",
-["scy"]="с",
-["Cup"]="⋓",
+["Uuml"]="Ü",
["centerdot"]="·",
-["nsimeq"]="≄",
-["DownLeftRightVector"]="⥐",
+["isinsv"]="⋳",
+["isins"]="⋴",
+["bot"]="⊥",
+["integers"]="ℤ",
+["Racute"]="Ŕ",
+["ijlig"]="ij",
+["bernou"]="ℬ",
+["Cconint"]="∰",
+["doteq"]="≐",
+["hookleftarrow"]="↩",
+["epar"]="⋕",
+["harrw"]="↭",
+["dzigrarr"]="⟿",
+["Zscr"]="𝒵",
+["alpha"]="α",
+["times"]="×",
+["egrave"]="è",
+["UnionPlus"]="⊎",
+["Qscr"]="𝒬",
+["Omacr"]="Ō",
+["Zfr"]="ℨ",
+["gneq"]="⪈",
+["divonx"]="⋇",
+["gesdotol"]="⪄",
+["gvertneqq"]="≩︀",
+["geq"]="≥",
+["utri"]="▵",
+["ge"]="≥",
+["vArr"]="⇕",
+["Rrightarrow"]="⇛",
+["frac25"]="⅖",
+["LeftCeiling"]="⌈",
+["GreaterGreater"]="⪢",
+["LT"]="<",
+["Longrightarrow"]="⟹",
+["eqcolon"]="≕",
+["ofcir"]="⦿",
+["boxUl"]="╜",
+["Wscr"]="𝒲",
+["Sacute"]="Ś",
+["Union"]="⋃",
+["gg"]="≫",
+["DownArrowBar"]="⤓",
+["Escr"]="ℰ",
+["ecirc"]="ê",
+["Lmidot"]="Ŀ",
+["Wedge"]="⋀",
+["frown"]="⌢",
+["ring"]="˚",
+["dtdot"]="⋱",
+["Ccedil"]="Ç",
+["Conint"]="∯",
+["dscr"]="𝒹",
+["Map"]="⤅",
+["EmptyVerySmallSquare"]="▫",
+["backsim"]="∽",
+["angzarr"]="⍼",
+["dHar"]="⥥",
+["Mfr"]="𝔐",
+["cirE"]="⧃",
+["Popf"]="ℙ",
+["NestedGreaterGreater"]="≫",
+["ReverseElement"]="∋",
+["boxVr"]="╟",
}
diff --git a/macros/luatex/generic/luaxml/luaxml-transform.lua b/macros/luatex/generic/luaxml/luaxml-transform.lua
index 1bf5077a38..9ea4595ea7 100644
--- a/macros/luatex/generic/luaxml/luaxml-transform.lua
+++ b/macros/luatex/generic/luaxml/luaxml-transform.lua
@@ -1,15 +1,14 @@
--- adapted code from https://github.com/michal-h21/luaxml-mathml
+--- XML transformation module for LuaXML
+-- @module luaxml-tranform
+-- @author Michal Hoftich <michal.h21@gmail.com
+
+-- code originaly comes from from https://github.com/michal-h21/luaxml-mathml
--
local domobject = require "luaxml-domobject"
local cssquery = require "luaxml-cssquery"
-- initialize CSS selector object
local css = cssquery()
--- we need to define different actions for XML elements. The default action is
--- to just process child elements and return the result
-local function default_action(element)
- return process_children(element)
-end
-- convert Unicode characters to TeX sequences
local unicodes = {
@@ -26,6 +25,15 @@ local unicodes = {
[125] = "\\}"
}
+local function match_css(element,csspar)
+ local css = csspar or css
+ local selectors = css:match_querylist(element)
+ if #selectors == 0 then return nil end
+ -- return function with the highest specificity
+ return selectors[1].func
+end
+
+
local function process_text(text, parameters)
local parameters = parameters or {}
-- spaces are collapsed by default. set verbatim=true to disable it.
@@ -37,26 +45,59 @@ local function process_text(text, parameters)
t[#t+1] = unicodes[char] or utf8.char(char)
end
local text = table.concat(t)
- if not verbatim then
+ if parameters.collapse_newlines==true then
+ text = text:gsub("\n", " ")
+ end
+ -- verbatim can be set in parameters table. it prevent collapsing of spaces.
+ if not parameters.verbatim then
text = text:gsub("(%s%s+)", function(a) return a:sub(1,1) end)
end
return text
end
--- use template string to place the processed children
-local function simple_content(s,parameters)
- return function(element)
- local content = process_children(element,parameters)
- -- process attrubutes
- -- attribute should be marked as @{name}
- local expanded = s:gsub("@{(.-)}", function(name)
- return process_text(element:get_attribute(name) or "")
- end)
- --
- return expanded:gsub("%%s", function(a) return content end)
+-- this function is initialized later, I need the declaration here
+-- to prevent Lua run-time error
+local process_tree
+
+--- Transform DOM element and it's children
+-- @param element DOM element
+-- @param parameters Table with settings
+-- @return Transformed string
+local function process_children(element, parameters)
+ -- accumulate text from children elements
+ local t = {}
+ -- sometimes we may get text node
+ if type(element) ~= "table" then return element end
+ for i, elem in ipairs(element:get_children()) do
+ if elem:is_text() then
+ -- concat text
+ t[#t+1] = process_text(elem:get_text(), parameters)
+ elseif elem:is_element() then
+ -- recursivelly process child elements
+ t[#t+1] = process_tree(elem)
+ end
end
+ return table.concat(t)
end
+-- we need to define different actions for XML elements. The default action is
+-- to just process child elements and return the result
+local function default_action(element)
+ return process_children(element)
+end
+
+function process_tree(element)
+ -- find specific action for the element, or use the default action
+ local element_name = element:get_element_name()
+ local action = match_css(element) or default_action
+ return action(element)
+end
+
+
+--- return nth child element
+-- @param element DOM element to be processed
+-- @param count Number of child element that should be returned
+-- @return DOM object, or nil if it cannot be found
local function get_child_element(element, count)
-- return specified child element
local i = 0
@@ -70,54 +111,81 @@ local function get_child_element(element, count)
end
end
+
+--- Default transforming function. It replaces %s by text content of the
+-- element, and @ {attrname} by value of an attribute
+-- @param s Template string
+-- @param parameters Table with settings
+-- @return transforming function
+local function simple_content(s,parameters)
+ return function(element)
+ local content = process_children(element,parameters)
+ local parameters = parameters or {}
+ -- process attrubutes
+ -- attribute should be marked as @{name}
+ local expanded = s:gsub("@{(.-)}", function(name)
+ return process_text(element:get_attribute(name) or "", parameters)
+ end)
+ -- process child elements
+ expanded = expanded:gsub("@<(.-)>",function(name)
+ -- @<.> return element's content
+ if name == "." then
+ return content
+ -- @<1> returns first child element's content
+ elseif name:match("^[0-9]+$") then
+ local child = get_child_element(element, tonumber(name))
+ if child then
+ return process_children(child, parameters)
+ end
+ -- @<CSS selector> returns contents of matched selectors
+ else
+ local t = {}
+ for _, child in ipairs(element:query_selector(name)) do
+ t[#t+1] = process_children(child, parameters)
+ end
+ -- concetanate results, separated by parameters.separator
+ local separator = parameters.separator or ""
+ return table.concat(t, separator)
+ end
+ end)
+
+ return expanded:gsub("%%s", function(a) return content end)
+ end
+end
+
+
+
-- actions for particular elements
local actions = {
}
--- add more complicated action
-local function add_custom_action(selector, fn)
+--- Use function to transform selected element
+-- @param selector CSS selector for the matching element
+-- @param fn Function that transforms the selected DOM element.
+-- @param csspar cssquery object. Default is set by the library, so it is not necessary to use.
+local function add_custom_action(selector, fn, csspar)
+ local css = csspar or css
css:add_selector(selector,fn)
end
--- normal actions
-local function add_action(selector, template, parameters)
+--- Use template to transform selected template
+-- @param selector CSS selector for the matching element
+-- @param template String template
+-- @param parameters Table with extra parameters. Use "verbatim=true" to keep spacing in the processed text.
+-- @param csspar cssquery object. Default is set by the library, so it is not necessary to use.
+local function add_action(selector, template, parameters, csspar)
+ local css = csspar or css
css:add_selector(selector, simple_content(template, parameters))
end
-function process_children(element, parameters)
- -- accumulate text from children elements
- local t = {}
- -- sometimes we may get text node
- if type(element) ~= "table" then return element end
- for i, elem in ipairs(element:get_children()) do
- if elem:is_text() then
- -- concat text
- t[#t+1] = process_text(elem:get_text(), parameters)
- elseif elem:is_element() then
- -- recursivelly process child elements
- t[#t+1] = process_tree(elem)
- end
- end
- return table.concat(t)
-end
-local function match_css(element)
- local selectors = css:match_querylist(element)
- if #selectors == 0 then return nil end
- -- return function with the highest specificity
- return selectors[1].func
-end
-function process_tree(element)
- -- find specific action for the element, or use the default action
- local element_name = element:get_element_name()
- local action = match_css(element) or default_action
- return action(element)
-end
-
-function parse_xml(content)
+--- Transform XML string
+-- @param content String with XML content
+-- @return transformed string
+local function parse_xml(content)
-- parse XML string and process it
local dom = domobject.parse(content)
-- start processing of DOM from the root element
@@ -126,6 +194,9 @@ function parse_xml(content)
end
+--- Transform XML file
+-- @param filename XML file name
+-- @return transformed string
local function load_file(filename)
local f = io.open(filename, "r")
local content = f:read("*all")
@@ -133,12 +204,16 @@ local function load_file(filename)
return parse_xml(content)
end
-function process_dom(dom)
+--- Transform XML DOM object
+-- @param dom DOM object
+-- @return transformed string
+local function process_dom(dom)
return process_tree(dom:root_node())
end
-
-function print_tex(content)
+--- print transformed file to PDF using LuaTeX functions
+-- @param content String to be printed
+local function print_tex(content)
-- we need to replace "\n" characters with calls to tex.sprint
for s in content:gmatch("([^\n]*)") do
tex.sprint(s)
@@ -146,15 +221,109 @@ function print_tex(content)
end
+-- make Transformer objec
+local Transformer
+
+--- Make new Transformer object
+-- @return Tranformer object
+local function new()
+ local self = setmetatable({}, Transformer)
+ self.css = cssquery()
+ -- use the default unicodes table that escapes special LaTeX characters
+ self.unicodes = unicodes
+ return self
+end
+
+--- @type Transformer
+Transformer = {}
+Transformer.__index = Transformer
+-- the library uses shared css variable. in order to support multiple transformers,
+-- we need to save the original state, set the self.css variable as the global variable
+-- execute library function and then set the original function back
+--
+function Transformer:save_css()
+ self.old_css = css
+ css = self.css
+ -- we must also save unicodes table
+ self.old_unicodes = unicodes
+ unicodes = self.unicodes
+end
+
+function Transformer:restore_css()
+ css = self.old_css
+ unicodes = self.old_unicodes
+end
+
+--- add a new template
+-- @param selector CSS selector that should be matched
+-- @param template use %s for element's text, and @ {name} to access attribute "name"
+-- @param parameters table with extra parameters
+-- @see add_action
+function Transformer:add_action(selector, template, parameters )
+ add_action(selector, template, parameters, self.css)
+end
+
+--- Use function for transformation
+-- @param selector CSS selector that should be matched
+-- @param fn DOM transforming function
+-- @see add_custom_action
+function Transformer:add_custom_action(selector, fn )
+ add_custom_action(selector, fn, self.css)
+end
+
+-- all methods that use transformation functions must
+-- correctly handle the cssquery object that this library uses
+
+--- Parse XML string
+-- @param content String with XML content
+-- @return transformed string
+-- @see parse_xml
+function Transformer:parse_xml(content)
+ self:save_css()
+ local result = parse_xml(content)
+ self:restore_css()
+ return result
+end
+
+-- make method for load_file function
+
+--- Transform XML file
+-- @param filename XML file name
+-- @return transformed string
+-- @see load_file
+function Transformer:load_file(filename)
+ self:save_css()
+ local result = load_file(filename)
+ self:restore_css()
+ return result
+end
+
+-- make method for process_dom function
+
+--- Transform XML DOM object
+-- @param dom DOM object
+-- @return transformed string
+-- @see process_dom
+function Transformer:process_dom(dom)
+ self:save_css()
+ local result = process_dom(dom)
+ self:restore_css()
+ return result
+end
+
+
+--- @export
local M = {
parse_xml = parse_xml,
process_children = process_children,
+ get_child_element= get_child_element,
print_tex = print_tex,
add_action = add_action,
add_custom_action = add_custom_action,
simple_content = simple_content,
load_file = load_file,
- process_dom = process_dom
+ process_dom = process_dom,
+ new = new
}
diff --git a/macros/luatex/generic/luaxml/luaxml.pdf b/macros/luatex/generic/luaxml/luaxml.pdf
index 405a7b311b..ee61139644 100644
--- a/macros/luatex/generic/luaxml/luaxml.pdf
+++ b/macros/luatex/generic/luaxml/luaxml.pdf
Binary files differ
diff --git a/macros/luatex/generic/luaxml/luaxml.tex b/macros/luatex/generic/luaxml/luaxml.tex
index 8857458a0f..1030422db9 100644
--- a/macros/luatex/generic/luaxml/luaxml.tex
+++ b/macros/luatex/generic/luaxml/luaxml.tex
@@ -7,7 +7,7 @@
\usepackage{framed}
% Version is defined in the makefile, use default values when compiled directly
\ifdefined\version\else
-\def\version{v0.1n}
+\def\version{v0.1o}
\let\gitdate\date
\fi
\newcommand\modulename[1]{\subsection{#1}\label{sec:#1}}
@@ -170,7 +170,7 @@ end
It supports also |XML| namespaces, using \verb_namespace|element_ syntax.
-\subsubsection{Supported CSS selectors}
+\subsubsection{Supported CSS selectors}\label{sec:css_selectors}
The \verb|query_selector| method supports following CSS selectors:
@@ -296,6 +296,7 @@ body:replace_node(oldbody)
\section{The \texttt{CssQuery} library}
+\label{sec:cssquery_library}
This library serves mainly as a support for the
\texttt{DOM\_Object:query\_selector} function. It also supports adding
@@ -385,9 +386,260 @@ repository\footnote{\url{https://github.com/michal-h21/LuaXML/blob/master/exampl
\section{The \texttt{luaxml-transform} library}
This library is still a bit experimental. It enables XML transformation based
-on CSS selector templates. It is better to use XSLT in general, but it may
-succeed for simpler tasks\footnote{See this example: \url{https://tex.stackexchange.com/a/574004/2891}}.
+on CSS selector templates.
+It isn't nearly as powerful as XSLT, but it may suffice for simpler tasks.
+
+\subsection{Basic example}
+
+\begin{verbatim}
+local transform = require "luaxml-transform"
+
+local transformer = transform.new()
+local xml_text = [[<section>hello <b>world</b></section>]]
+
+-- transformatio rules
+transformer:add_action("section", "\\section{@<.>}")
+transformer:add_action("b", "\\textbf{@<.>}")
+
+-- transform and print the result to the document
+local result = transformer:parse_xml(xml_text)
+transform.print_tex("\\verb|" .. result .. "|")
+\end{verbatim}
+\begin{framed}
+\begin{luacode*}
+local transform = require "luaxml-transform"
+
+local transformer = transform.new()
+local xml_text = [[<section>hello <b>world</b></section>]]
+
+-- transformatio rules
+transformer:add_action("section", "\\section{@<.>}")
+transformer:add_action("b", "\\textbf{@<.>}")
+
+-- transform and print the result to the document
+local result = transformer:parse_xml(xml_text)
+transform.print_tex("\\verb|" .. result .. "|")
+\end{luacode*}
+\end{framed}
+
+\subsection{The Transform object }
+
+The \texttt{luaxml-transform} library provides several functions.
+Most important of them is \verb|new()|. It returns a Transform object,
+that can be used for the transformations. It is possible to transform
+XML using text templates, or Lua functions. In both cases, actions for
+elements are selected using CSS selectors. If there is no action for
+an element, it's text content and text from transformed child elements,
+is placed to the output string.
+
+There are two methods for action specification, \verb|add_action| for
+text templates, and \verb|add_custom_action| for Lua functions.
+
+\subsubsection{Transforming using templates}
+
+Template actions can be added using the \verb|add_action| method:
+
+\begin{verbatim}
+transformer:add_action("CSS selector", "template", {parameters table})
+\end{verbatim}
+
+For details about CSS selectors, see the \texttt{CssQuery} library
+(see page~\pageref{sec:cssquery_library}). Templates can contain
+arbitrary text, with special instructions that can insert transformed
+text contents of the element, contents of specific element, or element's
+attributes.
+
+
+\noindent\textbf{Instruction syntax:}
+
+\begin{description}
+ \item[\verb|@\{attribute name\}|] insert value of an attribute
+ \item[\verb|@<.>|] insert transformed content of the element
+ \item[\verb|@<number>|] insert transformed content of the child element
+ selected by it's number in the list of children
+ \item[\verb|@<element name>|] insert transformed content of the named child element
+\end{description}
+
+\noindent\textbf{Parameters}
+
+The parameters table can hold following values:
+
+\begin{description}
+ \item[verbatim] -- by default, spaces are collapsed. This is useful in general, but you may want to
+ keep spaces, for example in program listings. Set \texttt{verbatim=true} in this case.
+ \item[separator] -- when you select element by names (\verb|@<element name>|), you can use this parameter
+ set the separator between possible multiple instances of the child element.
+\end{description}
+
+\noindent\textbf{Examples:}
+
+\noindent\textbf{Process children}
+
+\begin{verbatim}
+local transformer = transform.new()
+transformer:add_action("a", "@<.>")
+-- ignore element <b>
+transformer:add_action("b", "")
+local result = transformer:parse_xml("<x><a>hello</a><b>, world</b></x>")
+transform.print_tex(result)
+\end{verbatim}
+\begin{framed}
+\begin{luacode*}
+
+local transform = require "luaxml-transform"
+
+local transformer = transform.new()
+transformer:add_action("a", "@<.>")
+-- ignore element <b>
+transformer:add_action("b", "")
+local result = transformer:parse_xml("<x><a>hello</a><b>, world</b></x>")
+transform.print_tex(result)
+\end{luacode*}
+\end{framed}
+
+\noindent\textbf{Select elements by their position}
+
+\begin{verbatim}
+local transformer = transform.new()
+-- swap child elements
+transformer:add_action("x", "@<2>, @<1>")
+local result = transformer:parse_xml("<x><a>world</a>, <b>hello</b></x>")
+transform.print_tex(result)
+\end{verbatim}
+
+\begin{framed}
+\begin{luacode*}
+
+local transform = require "luaxml-transform"
+
+local transformer = transform.new()
+transformer:add_action("x", "@<2>, @<1>")
+local result = transformer:parse_xml("<x><a>world</a>, <b>hello</b></x>")
+transform.print_tex(result)
+\end{luacode*}
+\end{framed}
+
+
+\noindent\textbf{Select elements by name}
+\begin{verbatim}
+local transformer = transform.new()
+transformer:add_action("x", "@<a>")
+local result = transformer:parse_xml("<x><a>hello</a><b>, world</b></x>")
+transform.print_tex(result)
+\end{verbatim}
+\begin{framed}
+\begin{luacode*}
+
+local transform = require "luaxml-transform"
+local transformer = transform.new()
+transformer:add_action("x", "@<a>")
+local result = transformer:parse_xml("<x><a>hello</a><b>, world</b></x>")
+transform.print_tex(result)
+\end{luacode*}
+\end{framed}
+
+\noindent\textbf{Select attributes}
+\begin{verbatim}
+local transformer = transform.new()
+transformer:add_action("b", "\\textbf{@<.>}")
+-- this will select only <b> elements with "style" attribute
+transformer:add_action("b[style]", "\\textcolor{@{style}}{\\textbf{@<.>}}")
+local text = '<x><b>hello</b> <b style="red">world</b></x>'
+local result = transformer:parse_xml(text)
+transform.print_tex(result)
+\end{verbatim}
+\begin{framed}
+\begin{luacode*}
+
+local transform = require "luaxml-transform"
+local transformer = transform.new()
+transformer:add_action("b", "\\textbf{@<.>}")
+-- this will select only <b> elements with "style" attribute
+transformer:add_action("b[style]", "\\textcolor{@{style}}{\\textbf{@<.>}}")
+local text = '<x><b>hello</b> <b style="red">world</b></x>'
+local result = transformer:parse_xml(text)
+transform.print_tex("\\verb|" .. result .. "|")
+\end{luacode*}
+\end{framed}
+
+\subsubsection{Transforming using Lua functions}
+
+You can use Lua functions for more complex transformations where simple templates don't suffice.
+
+\begin{verbatim}
+transformer:add_custom_action("CSS selector", function)
+\end{verbatim}
+
+
+\noindent\textbf{Example}
+\begin{verbatim}
+local transformer = transform.new()
+local xml_text = "<x><a>world</a><b>hello, </b></x>"
+-- load helper functions
+local get_child_element = transform.get_child_element
+local process_children = transform.process_children
+-- define custom action
+transformer:add_custom_action("x", function(el)
+ -- it basically just swaps child elements,
+ -- like in the template @<2>@<1>
+ local first = process_children(get_child_element(el, 1))
+ local second = process_children(get_child_element(el, 2))
+ return second .. first
+end)
+local result = transformer:parse_xml(xml_text)
+transform.print_tex(result)
+\end{verbatim}
+
+\begin{framed}
+\begin{luacode*}
+
+local transform = require "luaxml-transform"
+local transformer = transform.new()
+local xml_text = "<x><a>world</a><b>hello, </b></x>"
+-- load helper functions
+local get_child_element = transform.get_child_element
+local process_children = transform.process_children
+-- define custom action
+transformer:add_custom_action("x", function(el)
+ -- it basically just swaps child elements,
+ -- like in the template @<2>@<1>
+ local first = process_children(get_child_element(el, 1))
+ local second = process_children(get_child_element(el, 2))
+ return second .. first
+end)
+local result = transformer:parse_xml(xml_text)
+transform.print_tex(result)
+\end{luacode*}
+\end{framed}
+
+\subsubsection{Character handling}
+
+You may want to escape certain characters, or replace them with
+\LaTeX\ commands. You can use the \texttt{unicodes} table contained
+in the Transform object:
+
+
+\begin{verbatim}
+local transformer = transform.new()
+-- you must use the Unicode character code
+transformer.unicodes[124] = "\\textbar"
+local text = '<x>|</x>'
+local result = transformer:parse_xml(text)
+transform.print_tex(result)
+\end{verbatim}
+
+\begin{framed}
+\begin{luacode*}
+local transform = require "luaxml-transform"
+local transformer = transform.new()
+-- you must use the Unicode character code
+transformer.unicodes[124] = "\\textbar"
+local text = '<x>|</x>'
+local result = transformer:parse_xml(text)
+transform.print_tex("\\verb|" .. result .. "|")
+\end{luacode*}
+\end{framed}
\section{The API documentation}