diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/breqn/flexisym.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/breqn/flexisym.dtx | 1603 |
1 files changed, 1603 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/breqn/flexisym.dtx b/Master/texmf-dist/source/latex/breqn/flexisym.dtx new file mode 100644 index 00000000000..45e16f3d4c6 --- /dev/null +++ b/Master/texmf-dist/source/latex/breqn/flexisym.dtx @@ -0,0 +1,1603 @@ +% \iffalse meta-comment +% +% Copyright (C) 1997-2003 by Michael J. Downes +% Copyright (C) 2007-2008 by Morten Hoegholm +% Copyright (C) 2007-2014 by Lars Madsen +% Copyright (C) 2007-2014 by Will Robertson +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either +% version 1.3 of this license or (at your option) any later +% version. The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of +% LaTeX version 2005/12/01 or later. +% +% This work has the LPPL maintenance status "maintained". +% +% This Current Maintainer of this work is Will Robertson. +% +% This work consists of the main source file flexisym.dtx +% and the derived files +% flexisym.sty, flexisym.pdf, flexisym.ins, +% cmbase.sym, mathpazo.sym, mathptmx.sym, msabm.sym. +% +% Distribution: +% CTAN:macros/latex/contrib/mh/flexisym.dtx +% CTAN:macros/latex/contrib/mh/flexisym.pdf +% +% Unpacking: +% (a) If flexisym.ins is present: +% tex flexisym.ins +% (b) Without flexisym.ins: +% tex flexisym.dtx +% (c) If you insist on using LaTeX +% latex \let\install=y\input{flexisym.dtx} +% (quote the arguments according to the demands of your shell) +% +% Documentation: +% The class ltxdoc loads the configuration file ltxdoc.cfg +% if available. Here you can specify further options, e.g. +% use A4 as paper format: +% \PassOptionsToClass{a4paper}{article} +% +% Programm calls to get the documentation (example): +% pdflatex flexisym.dtx +% makeindex -s gind.ist flexisym.idx +% pdflatex flexisym.dtx +% makeindex -s gind.ist flexisym.idx +% pdflatex flexisym.dtx +% +% Installation: +% TDS:tex/latex/breqn/flexisym.sty +% TDS:tex/latex/breqn/cmbase.sym +% TDS:tex/latex/breqn/mathpazo.sym +% TDS:tex/latex/breqn/mathptmx.sym +% TDS:tex/latex/breqn/msabm.sym +% TDS:doc/latex/breqn/flexisym.pdf +% TDS:source/latex/breqn/flexisym.dtx +% +%<*ignore> +\begingroup + \def\x{LaTeX2e} +\expandafter\endgroup +\ifcase 0\ifx\install y1\fi\expandafter + \ifx\csname processbatchFile\endcsname\relax\else1\fi + \ifx\fmtname\x\else 1\fi\relax +\else\csname fi\endcsname +%</ignore> +%<*install> +\input docstrip.tex +\Msg{************************************************************************} +\Msg{* Installation} +\Msg{* Package: flexisym 2014/06/10 v0.97c Flexisym (MH)} +\Msg{************************************************************************} + +\keepsilent +\askforoverwritefalse + +\preamble + +This is a generated file. + +Copyright (C) 1997-2003 by Michael J. Downes +Copyright (C) 2007-2010 by Morten Hoegholm +Copyright (C) 2007-2014 by Lars Madsen +Copyright (C) 2007-2014 by Will Robertson + +This work may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either +version 1.3 of this license or (at your option) any later +version. The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of +LaTeX version 2005/12/01 or later. + +This work has the LPPL maintenance status "maintained". + +The Current Maintainer of this work is Will Robertson. + +This work consists of the main source file flexisym.dtx +and the derived files + flexisym.sty, flexisym.pdf, flexisym.ins, + cmbase.sym, mathpazo.sym, mathptmx.sym, msabm.sym. + +\endpreamble + +\generate{% + \file{flexisym.ins}{\from{flexisym.dtx}{install}}% + \usedir{tex/latex/breqn}% + \file{flexisym.sty}{\from{flexisym.dtx}{package}}% + \file{cmbase.sym}{\from{flexisym.dtx}{cmbase}}% + \file{mathpazo.sym}{\from{flexisym.dtx}{mathpazo}}% + \file{mathptmx.sym}{\from{flexisym.dtx}{mathptmx}}% + \file{msabm.sym}{\from{flexisym.dtx}{msabm}}% +} + +\obeyspaces +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* files into a directory searched by TeX:} +\Msg{*} +\Msg{* flexisym.sty, cmbase.sym, mathpazo.sym, mathptmx.sym, msabm.sym} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} + +\endbatchfile +%</install> +%<*ignore> +\fi +%</ignore> +%<*driver> +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{flexisym.drv}% + [2014/06/10 v0.97c flexisym (MH)] +\documentclass{ltxdoc} +\CodelineIndex +\EnableCrossrefs +\setcounter{IndexColumns}{2} +%\providecommand*\meta[1]{\ensuremath\langle\textit{#1}\ensuremath\rangle} +\providecommand*\pkg[1]{\textsf{#1}} +\providecommand*\cls[1]{\textsf{#1}} +\providecommand*\opt[1]{\texttt{#1}} +\providecommand*\env[1]{\texttt{#1}} +\providecommand*\fn[1]{\texttt{#1}} +\makeatletter +\providecommand{\AmS}{{\protect\AmSfont + A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}} +\providecommand{\AmSfont}{% + \usefont{OMS}{cmsy}{\if\expandafter\@car\f@series\@nil bb\else m\fi}{n}} +\makeatother +\newenvironment{aside}{\begin{quote}\bfseries}{\end{quote}} +\begin{document} + \DocInput{flexisym.dtx} +\end{document} +%</driver> +% \fi +% +% \title{The \textsf{flexisym} package} +% \date{2008/08/08 v0.97a} +% \author{Author: Morten H\o gholm\\ Inactively maintained by Will Robertson\\ Feedback: \texttt{https://github.com/wspr/breqn/issues}} +% +% \maketitle +% +% \part*{User's guide} +% +% For now, the user's guide is in breqn. +% +% \StopEventually{} +% \part*{Implementation} +% +% \section{flexisym} +% +% \begin{macrocode} +%<*package> +\RequirePackage{expl3}[2009/08/05] +\ProvidesExplPackage{flexisym}{2013/03/16}{0.97c}{Make math characters macros} + +\edef\do{% + \noexpand\AtEndOfPackage{% + \catcode\number`\"=\number\catcode`\" + \relax + }% +} +\do \let\do\relax +\catcode`\"=12 +\let\@sym\@gobble +\DeclareOption{robust}{% + \def\@sym#1{% + \ifx\protect\@typeset@protect \else\protect#1\exp_after:wN\use_none:nnnn\fi + }% +} +% \end{macrocode} +% The math groups (mg) here relate to |\textfont|$n$. +% \begin{macrocode} +\def\mg@bin{2}% binary operators +\def\mg@rel{2}% relations +%%\def\mg@nre{B}% negated relations +\def\mg@del{3}% delimiters +%%\def\mg@arr{B}% arrows +\def\mg@acc{0}% accents +\def\mg@cop{3}% cumulative operators (sum, int) +\def\mg@latin{1}% (Latin) letters +\def\mg@greek{1}% (lowercase) Greek +\def\mg@Greek{0}% (capital) Greek +%%\def\mg@bflatin{4}% bold upright Latin letters ? +%%\def\mg@Bbb{B}% blackboard bold +\def\mg@cal{2}% script/calligraphic +%%\def\mg@frak{5}% Fraktur letters +\def\mg@digit{0}% decimal digits % 1 = oldstyle, 0 = capital +% \end{macrocode} +% This is how we insert mathchars. The command has three arguments: +% class, fam and slot postion and so it is always given as +% hexadecimal. This way of separating things should make it easier +% to get this to work with XeTeX et al.\ which have many more slot +% positions +% \begin{macrocode} +\cs_set_protected:Nn \math_char:NNn { + \tex_mathchar:D \__int_eval:w " #1#2#3 \__int_eval_end: +} +% \end{macrocode} +% Delimiters and radicals are similar except here we have both small +% and large variant. Radicals have no class. +% \begin{macrocode} +\cs_set_protected:Nn \math_delimiter:NNnNn { + \tex_delimiter:D \__int_eval:w " #1#2#3#4#5 \__int_eval_end: +} +\cs_set_protected:Nn \math_radical:NnNn { + \tex_radical:D \__int_eval:w " #1#2#3#4 \__int_eval_end: +} +\cs_set_protected:Nn \math_accent:NNnn { + \tex_mathaccent:D \__int_eval:w " #1 #2 #3 \__int_eval_end: {#4} +} + +\let\sumlimits\displaylimits +\let\intlimits\nolimits +\let\namelimits\displaylimits +% \end{macrocode} +% \TeX\ defines eight types of atoms. +% \begin{enumerate}\addtocounter{enumi}{-1} +% \item Ordinary +% \item Operators +% \item Binary +% \item Relation +% \item Open +% \item Close +% \item Punctuation +% \item Inner +% \end{enumerate} +% \TeX\ defines eight math classes. +% \begin{enumerate}\addtocounter{enumi}{-1} +% \item Ordinary +% \item Operators +% \item Binary +% \item Relation +% \item Open +% \item Close +% \item Punctuation +% \item Variable family +% \end{enumerate} +% flexisym/breqn extends this to types of classes. +% \begin{enumerate}\addtocounter{enumi}{-1} +% \item Ordinary: (Ord), Bidirectional delimiters (DeB), Radicals +% (Rad), Accented items (Acc) +% \item Operators: Cumulative Operators sum-like (COs), Cumulative +% Operators integral-like (COi) +% \item Binary: (Bin) +% \item Relation: (Rel), Arrow delimiters (DeA) +% \item Open: (DeL) +% \item Close (DeR) +% \item Punctuation: (Pun) +% \item Variable family: (Var) +% \end{enumerate} +% +% Here's an overview of what we are about to do. Math chars of each +% type as defined by us need a basic operation for inserting it. We +% will call that function |\math_bsym_|\meta{type}|:Nn|. Next there +% are compund symbols for each type which we name +% |\math_bcsym_|\meta{type}|:Nn|. Also, there is inline mode and +% display mode which are different. We will call them for +% |\math_isym_|\meta{type}|:Nn| |\math_icsym_|\meta{type}|:Nn| for +% inline mode and |\math_dsym_|\meta{type}|:Nn| and +% |\math_dcsym_|\meta{type}|:Nn|. The code uses the terms +% |\math_sym_|\meta{type}|:Nn| and |\math_csym_|\meta{type}|:Nn| for +% the current meaning of things. First up the basic definitions. |#1| +% is the math group it is from and |#2| is the slot position. +% \begin{macrocode} +\cs_new:Npn \math_bsym_Ord:Nn {\math_char:NNn 0 }% \m@Ord +\cs_new:Npn \math_bsym_Var:Nn {\math_char:NNn 7 }% \m@Var +\cs_new:Npn \math_bsym_Bin:Nn {\math_char:NNn 2 }% \m@Bin +\cs_new:Npn \math_bsym_Rel:Nn {\math_char:NNn 3 }% \m@Bin +\cs_new:Npn \math_bsym_Pun:Nn {\math_char:NNn 6 }% \m@Pun +\cs_new:Nn \math_bsym_COs:Nn { \math_char:NNn 1 #1 {#2} \sumlimits }% \m@COs +\cs_new:Nn \math_bsym_COi:Nn { \math_char:NNn 1 #1 {#2} \intlimits }% \m@COi +\cs_new:Nn \math_bsym_DeL:Nn { \math_sd_del_aux:Nnn 4 #1{#2} }% \m@DeL +\cs_new:Nn \math_bsym_DeR:Nn { \math_sd_del_aux:Nnn 5 #1{#2} }% \m@DeR +\cs_new:Nn \math_bsym_DeB:Nn { \math_sd_del_aux:Nnn 0 #1{#2} }% \m@DeB +\cs_new:Nn \math_bsym_DeA:Nn { \math_sd_del_aux:Nnn 3 #1{#2} }% \m@DeA +\cs_new:Nn \math_bsym_Rad:Nn { \math_sd_rad_aux:Nn #1{#2} }% \m@Rad +\cs_new:Npn \math_bsym_Acc:Nn #1#2#3#4 {\math_accent:NNnn #1#2{#3}{#4}}% name is wrong + +% \end{macrocode} +% Next is somewhat complicated internally. The way it is done is that +% delimiters and radicals need information about the smallest version +% of the symbol. If this smallest delimiter (SD) is defined, then use +% it. We have these functions to help us return the number. Extract +% the numbers to use and stick a function in front of it. +% +% Code changed because now we require the smallest delimiter to be +% defined (it may be the same, no problem in that). So the two +% arguments present in |\math_bsym_DeL:Nn| are the location of +% extensible version (where the font will do the rest for us +% automatically). For each delimiter, a pointer is defined using the +% extensible characters family and slot as name and value equal to +% family and position of the smallest version. For |(| in standard +% \LaTeX\ this is |{del}{00}| and |{OT1}{28}| respectively. Hence, +% |\math_bsym_DeL:Nn \mg@del {00}| must expand to +% |\math_delimiter:NNnNn 4 \mg@OT1 {28}\mg@del{00}|. So first expand +% away to get to the smallest version. Then call next function which +% shuffles the arguments around. +% \begin{macrocode} +\cs_set:Npn \math_sd_del_aux:Nnn #1#2#3{ + \exp_args:Nf \math_sd_del_auxi:nN {\use:c{sd@#2#3}} #1 #2{#3} +} +\cs_set:Npn \math_sd_del_auxi:nN #1#2{ \math_delimiter:NNnNn #2 #1 } +% \end{macrocode} +% Same for radicals. +% \begin{macrocode} +\cs_set:Npn \math_sd_rad_aux:Nn #1#2{ + \exp_args:Nf \math_sd_rad_auxi:n {\use:c{sd@#1#2}} #1 {#2} +} +\cs_set:Npn \math_sd_rad_auxi:n #1{ \math_radical:NnNn #1 } + + +% \cs_set:Npn \math_sd_aux:nn #1#2 { +% %\exp_args:Nnf \use:nn { #1} { \math_sd_auxi:Nn #2 } +% \exp_args:Nnf \use:nn { #1} { \use:c{sd@\use:nn#2} } +% } +% \cs_set:Npn \math_sd_auxi:Nn #1#2 { +% \cs_if_free:cTF {sd@#1#2} +% { #1{#2} } +% { \use:c{sd@#1#2} } +% } +% \end{macrocode} +% compound symbols here +% \begin{macrocode} +\cs_set_protected:Npn \math_bcsym_Ord:Nn #1#2 { \@symtype \mathord { \OrdSymbol {#2} } }%\@symOrd +\cs_set_protected:Npn \math_bcsym_Var:Nn #1#2 { \@symtype \mathord { \OrdSymbol {#2} } }%\@symVar +\cs_set_protected:Npn \math_bcsym_Bin:Nn #1#2 { \@symtype \mathbin { \OrdSymbol {#2} } }%\@symBin +\cs_set_protected:Npn \math_bcsym_Rel:Nn #1#2 { \@symtype \mathrel { \OrdSymbol {#2} } }%\@symRel +\cs_set_protected:Npn \math_bcsym_Pun:Nn #1#2 { \@symtype \mathpunct { \OrdSymbol {#2} } }%\@symPun +\cs_set_protected:Npn \math_bcsym_COi:Nn #1#2 { \@symtype \mathop { \OrdSymbol {#2} \intlimits } }%\@symCOi +\cs_set_protected:Npn \math_bcsym_COs:Nn #1#2 { \@symtype \mathop { \OrdSymbol {#2} \sumlimits } }%\@symCOs +\cs_set_protected:Npn \math_bcsym_DeL:Nn #1#2 { \@symtype \mathopen { \OrdSymbol {#2} } }%\@symDeL +\cs_set_protected:Npn \math_bcsym_DeR:Nn #1#2 { \@symtype \mathclose { \OrdSymbol {#2} } }%\@symDeR +\cs_set_protected:Npn \math_bcsym_DeB:Nn #1#2 { \@symtype \mathord { \OrdSymbol {#2} } }%\@symDeB +\cs_set_protected:Npn \math_bcsym_DeA:Nn #1#2 { \@symtype \mathrel { \OrdSymbol {#2} } }%\@symDeA +\cs_set_protected:Npn \math_bcsym_Acc:Nn {\@sym}%\@symAcc FIX! +% These three? +\cs_set_protected:Npn \math_bcsym_Ope:Nn #1#2{\@symtype\mathopen{\OrdSymbol{#2}}}%\@symVar +\cs_set_protected:Npn \math_bcsym_Clo:Nn #1#2{\@symtype\mathclose{\OrdSymbol{#2}}}%\@symVar +\cs_set_protected:Npn \math_bcsym_Inn:Nn #1#2{\@symtype\mathinner{\OrdSymbol{#2}}}%\@symVar + +\let\@symtype\@firstofone +\let\sym@global\global +% \end{macrocode} +% +% +% +% +% The inline variants, using the basic operations. Currently we do not +% do anything to inline math. +% \begin{macrocode} +\cs_new:Npn \math_isym_Ord:Nn { \math_bsym_Ord:Nn }% \m@Ord +\cs_new:Npn \math_isym_Var:Nn { \math_bsym_Var:Nn }% \m@Var +\cs_new:Npn \math_isym_Bin:Nn { \math_bsym_Bin:Nn }% \m@Bin +\cs_new:Npn \math_isym_Rel:Nn { \math_bsym_Rel:Nn }% \m@Bin +\cs_new:Npn \math_isym_Pun:Nn { \math_bsym_Pun:Nn }% \m@Pun +\cs_new:Npn \math_isym_COs:Nn { \math_bsym_COs:Nn }% \m@COs +\cs_new:Npn \math_isym_COi:Nn { \math_bsym_COi:Nn }% \m@COi +\cs_new:Npn \math_isym_DeL:Nn { \math_bsym_DeL:Nn }% \m@DeL +\cs_new:Npn \math_isym_DeR:Nn { \math_bsym_DeR:Nn }% \m@DeR +\cs_new:Npn \math_isym_DeB:Nn { \math_bsym_DeB:Nn }% \m@DeB +\cs_new:Npn \math_isym_DeA:Nn { \math_bsym_DeA:Nn }% \m@DeA +\cs_new:Npn \math_isym_Rad:Nn { \math_bsym_Rad:Nn }% \m@Rad +\cs_new:Npn \math_isym_Acc:Nn { \math_bsym_DeL:Nn }% name is wrong +% inline compound +\cs_set_protected:Npn \math_icsym_Ord:Nn { \math_bcsym_Ord:Nn } +\cs_set_protected:Npn \math_icsym_Var:Nn { \math_bcsym_Var:Nn } +\cs_set_protected:Npn \math_icsym_Bin:Nn { \math_bcsym_Bin:Nn } +\cs_set_protected:Npn \math_icsym_Rel:Nn { \math_bcsym_Rel:Nn } +\cs_set_protected:Npn \math_icsym_Pun:Nn { \math_bcsym_Pun:Nn } +\cs_set_protected:Npn \math_icsym_COi:Nn { \math_bcsym_COi:Nn } +\cs_set_protected:Npn \math_icsym_COs:Nn { \math_bcsym_COs:Nn } +\cs_set_protected:Npn \math_icsym_DeL:Nn { \math_bcsym_DeL:Nn } +\cs_set_protected:Npn \math_icsym_DeR:Nn { \math_bcsym_DeR:Nn } +\cs_set_protected:Npn \math_icsym_DeB:Nn { \math_bcsym_DeB:Nn } +\cs_set_protected:Npn \math_icsym_DeA:Nn { \math_bcsym_DeA:Nn } +\cs_set_protected:Npn \math_icsym_Acc:Nn { \math_bcsym_Acc:Nn } +\cs_set_protected:Npn \math_icsym_Ope:Nn { \math_bcsym_Ope:Nn } +\cs_set_protected:Npn \math_icsym_Clo:Nn { \math_bcsym_Clo:Nn } +\cs_set_protected:Npn \math_icsym_Inn:Nn { \math_bcsym_Inn:Nn } +% \end{macrocode} +% +% The display variants, using the basic operations. Currently we do +% not do anything to inline math. +% \begin{macrocode} +\cs_new:Npn \math_dsym_Ord:Nn { \math_bsym_Ord:Nn } +\cs_new:Npn \math_dsym_Var:Nn { \math_bsym_Var:Nn } +\cs_new:Npn \math_dsym_Bin:Nn { \math_bsym_Bin:Nn } +\cs_new:Npn \math_dsym_Rel:Nn { \math_bsym_Rel:Nn } +\cs_new:Npn \math_dsym_Pun:Nn { \math_bsym_Pun:Nn } +\cs_new:Npn \math_dsym_COs:Nn { \math_bsym_COs:Nn } +\cs_new:Npn \math_dsym_COi:Nn { \math_bsym_COi:Nn } +\cs_new:Npn \math_dsym_DeL:Nn { \math_bsym_DeL:Nn } +\cs_new:Npn \math_dsym_DeR:Nn { \math_bsym_DeR:Nn } +\cs_new:Npn \math_dsym_DeB:Nn { \math_bsym_DeB:Nn } +\cs_new:Npn \math_dsym_DeA:Nn { \math_bsym_DeA:Nn } +\cs_new:Npn \math_dsym_Rad:Nn { \math_bsym_Rad:Nn } +\cs_new:Npn \math_dsym_Acc:Nn { \math_bsym_DeL:Nn } +% inline compound +\cs_set_protected:Npn \math_dcsym_Ord:Nn { \math_bcsym_Ord:Nn } +\cs_set_protected:Npn \math_dcsym_Var:Nn { \math_bcsym_Var:Nn } +\cs_set_protected:Npn \math_dcsym_Bin:Nn { \math_bcsym_Bin:Nn } +\cs_set_protected:Npn \math_dcsym_Rel:Nn { \math_bcsym_Rel:Nn } +\cs_set_protected:Npn \math_dcsym_Pun:Nn { \math_bcsym_Pun:Nn } +\cs_set_protected:Npn \math_dcsym_COi:Nn { \math_bcsym_COi:Nn } +\cs_set_protected:Npn \math_dcsym_COs:Nn { \math_bcsym_COs:Nn } +\cs_set_protected:Npn \math_dcsym_DeL:Nn { \math_bcsym_DeL:Nn } +\cs_set_protected:Npn \math_dcsym_DeR:Nn { \math_bcsym_DeR:Nn } +\cs_set_protected:Npn \math_dcsym_DeB:Nn { \math_bcsym_DeB:Nn } +\cs_set_protected:Npn \math_dcsym_DeA:Nn { \math_bcsym_DeA:Nn } +\cs_set_protected:Npn \math_dcsym_Acc:Nn { \math_bcsym_Acc:Nn } +\cs_set_protected:Npn \math_dcsym_Ope:Nn { \math_bcsym_Ope:Nn } +\cs_set_protected:Npn \math_dcsym_Clo:Nn { \math_bcsym_Clo:Nn } +\cs_set_protected:Npn \math_dcsym_Inn:Nn { \math_bcsym_Inn:Nn } +% \end{macrocode} +% Almost ready now! Now just need two commands to initialize these +% settings. +% +% \begin{macrocode} +\cs_set:Npn \math_setup_inline_symbols: + { + \cs_set_eq:NN \math_sym_Ord:Nn \math_isym_Ord:Nn + \cs_set_eq:NN \math_sym_Var:Nn \math_isym_Var:Nn + \cs_set_eq:NN \math_sym_Bin:Nn \math_isym_Bin:Nn + \cs_set_eq:NN \math_sym_Rel:Nn \math_isym_Rel:Nn + \cs_set_eq:NN \math_sym_Pun:Nn \math_isym_Pun:Nn + \cs_set_eq:NN \math_sym_COs:Nn \math_isym_COs:Nn + \cs_set_eq:NN \math_sym_COi:Nn \math_isym_COi:Nn + \cs_set_eq:NN \math_sym_DeL:Nn \math_isym_DeL:Nn + \cs_set_eq:NN \math_sym_DeR:Nn \math_isym_DeR:Nn + \cs_set_eq:NN \math_sym_DeB:Nn \math_isym_DeL:Nn + \cs_set_eq:NN \math_sym_DeA:Nn \math_isym_DeA:Nn + \cs_set_eq:NN \math_sym_Rad:Nn \math_isym_Rad:Nn + \cs_set_eq:NN \math_sym_Acc:Nn \math_isym_DeL:Nn + \cs_set_eq:NN \math_csym_Ord:Nn \math_icsym_Ord:Nn + \cs_set_eq:NN \math_csym_Var:Nn \math_icsym_Var:Nn + \cs_set_eq:NN \math_csym_Bin:Nn \math_icsym_Bin:Nn + \cs_set_eq:NN \math_csym_Rel:Nn \math_icsym_Rel:Nn + \cs_set_eq:NN \math_csym_Pun:Nn \math_icsym_Pun:Nn + \cs_set_eq:NN \math_csym_COi:Nn \math_icsym_COi:Nn + \cs_set_eq:NN \math_csym_COs:Nn \math_icsym_COs:Nn + \cs_set_eq:NN \math_csym_DeL:Nn \math_icsym_DeL:Nn + \cs_set_eq:NN \math_csym_DeR:Nn \math_icsym_DeR:Nn + \cs_set_eq:NN \math_csym_DeB:Nn \math_icsym_DeB:Nn + \cs_set_eq:NN \math_csym_DeA:Nn \math_icsym_DeA:Nn + \cs_set_eq:NN \math_csym_Acc:Nn \math_icsym_Acc:Nn + \cs_set_eq:NN \math_csym_Ope:Nn \math_icsym_Ope:Nn + \cs_set_eq:NN \math_csym_Clo:Nn \math_icsym_Clo:Nn + \cs_set_eq:NN \math_csym_Inn:Nn \math_icsym_Inn:Nn + } + +\cs_set:Npn \math_setup_display_symbols: + { + \cs_set_eq:NN \math_sym_Ord:Nn \math_dsym_Ord:Nn + \cs_set_eq:NN \math_sym_Var:Nn \math_dsym_Var:Nn + \cs_set_eq:NN \math_sym_Bin:Nn \math_dsym_Bin:Nn + \cs_set_eq:NN \math_sym_Rel:Nn \math_dsym_Rel:Nn + \cs_set_eq:NN \math_sym_Pun:Nn \math_dsym_Pun:Nn + \cs_set_eq:NN \math_sym_COs:Nn \math_dsym_COs:Nn + \cs_set_eq:NN \math_sym_COi:Nn \math_dsym_COi:Nn + \cs_set_eq:NN \math_sym_DeL:Nn \math_dsym_DeL:Nn + \cs_set_eq:NN \math_sym_DeR:Nn \math_dsym_DeR:Nn + \cs_set_eq:NN \math_sym_DeB:Nn \math_dsym_DeL:Nn + \cs_set_eq:NN \math_sym_DeA:Nn \math_dsym_DeA:Nn + \cs_set_eq:NN \math_sym_Rad:Nn \math_dsym_Rad:Nn + \cs_set_eq:NN \math_sym_Acc:Nn \math_dsym_DeL:Nn + \cs_set_eq:NN \math_csym_Ord:Nn \math_dcsym_Ord:Nn + \cs_set_eq:NN \math_csym_Var:Nn \math_dcsym_Var:Nn + \cs_set_eq:NN \math_csym_Bin:Nn \math_dcsym_Bin:Nn + \cs_set_eq:NN \math_csym_Rel:Nn \math_dcsym_Rel:Nn + \cs_set_eq:NN \math_csym_Pun:Nn \math_dcsym_Pun:Nn + \cs_set_eq:NN \math_csym_COi:Nn \math_dcsym_COi:Nn + \cs_set_eq:NN \math_csym_COs:Nn \math_dcsym_COs:Nn + \cs_set_eq:NN \math_csym_DeL:Nn \math_dcsym_DeL:Nn + \cs_set_eq:NN \math_csym_DeR:Nn \math_dcsym_DeR:Nn + \cs_set_eq:NN \math_csym_DeB:Nn \math_dcsym_DeB:Nn + \cs_set_eq:NN \math_csym_DeA:Nn \math_dcsym_DeA:Nn + \cs_set_eq:NN \math_csym_Acc:Nn \math_dcsym_Acc:Nn + \cs_set_eq:NN \math_csym_Ope:Nn \math_dcsym_Ope:Nn + \cs_set_eq:NN \math_csym_Clo:Nn \math_dcsym_Clo:Nn + \cs_set_eq:NN \math_csym_Inn:Nn \math_dcsym_Inn:Nn + } +% \end{macrocode} +% Phew, that was it. +% +% Well, almost. We need to set them up for use properly. Should they +% be added to |\everymath|? Probably, for math within +% displays. However, this is a lot of extra processing which we could +% tackle in the display setup. +% \begin{macrocode} +\math_setup_inline_symbols: +% \end{macrocode} +% +% Need an active character for a second. Don't rely on |~| being +% active! +% \begin{macrocode} +\edef\tmp{\catcode\z@=\the\catcode\z@} +\catcode\z@=\active +\def\DeclareFlexSymbol#1#2#3#4{% + \begingroup + \cs_set_protected:Npx\@tempb{ + \exp_not:N\@sym\exp_not:N#1\exp_not:c{math_sym_#2:Nn} + \exp_not:c{mg@#3}{#4} + } + \ifcat\exp_not:N#1\relax + \sym@global\let#1\@tempb + \else + \sym@global\mathcode`#1="8000\relax + \lccode\z@=`#1\relax + \lowercase{\sym@global\let^^@\@tempb}% zero char + \fi + \endgroup +} +\tmp % restore catcode +\cs_set:Npn \DeclareFlexDelimiter #1#2#3#4#5#6{ + \DeclareFlexSymbol{#1}{#2}{#3}{#4} + \cs_gset:cpx{sd@\use:c{mg@#3}#4}{\exp_not:c{mg@#5}{#6}} +} + +% \end{macrocode} +% |\DeclareFlexCompoundSymbol{\cdots}{Inn}{\cdotp\cdotp\cdotp}| +% |\def\@symInn#1#2{\@symtype\mathinner{\OrdSymbol{#2}}}| +% |\@symtype \mathinner{\OrdSymbol{\cdtop\cdotp\cdotp}}| +% \begin{macrocode} +\def\DeclareFlexCompoundSymbol#1#2#3{% + \exp_args:NNo \DeclareRobustCommand#1{\csname math_csym_#2:Nn\endcsname#1{#3}}% + \sym@global\let#1#1\relax +} +\DeclareRobustCommand\textchar{\text@char\textfont} +\DeclareRobustCommand\scriptchar{\text@char\scriptfont}% +% \end{macrocode} +% Simplified the next bit because now the slot is read as one argument +% so no afterassignment and what have you. Just drop the char +% directly. +% \begin{macrocode} +\def\text@char@sym#1#2#3#4{% #3=fam, #4=slot + \begingroup + \cs_set_eq:NN \@sym \prg_do_nothing: % defense against infinite loops +% \end{macrocode} +% the next line will result in |\scriptfont|\meta{num}, where |#3| +% provides the \meta{num}. +% \begin{macrocode} + \the\text@script@char#3% + \char"#4\endgroup +} +\edef\tmp{\catcode\z@=\the\catcode\z@} +\catcode\z@=\active +\def\text@char#1#2{\begingroup + \check@mathfonts + \cs_set_eq:NN \text@script@char #1 + \cs_set_eq:NN \@sym \text@char@sym + \cs_set_eq:NN \@symtype \use_ii:nn + \cs_set_eq:NN \OrdSymbol \use:n + \cs_set_eq:NN \ifmmode \iftrue + \everymath{$\use_none:n}%$ + \def\mkern{\muskip\z@} + \cs_set_eq:NN\mskip\mkern + \ifcat\relax\noexpand#2% true if #2 is a cs. + #2% + \else + \lccode\z@=\expandafter`\string#2\relax + \lowercase{^^@}% + \fi + \endgroup +} +\tmp % restore catcode +\providecommand\textprime{} +\DeclareRobustCommand\textprime{\leavevmode + \raise.8ex\hbox{\text@char\scriptfont\prime}% +} +\@ifundefined{resetMathstrut@}{}{% + \def\resetMathstrut@{% + \setbox\z@\hbox{\textchar\vert}% + \ht\Mathstrutbox@\ht\z@ \dp\Mathstrutbox@\dp\z@ + }% +} +% \end{macrocode} +% Arrow fills. changed to 7mu as in amsmath +% \begin{macrocode} +\@ifundefined{rightarrowfill@}{}{% + \def\rightarrowfill@#1{\m@th\setboxz@h{$#1\relbar$}\ht\z@\z@ + $#1\copy\z@\mkern-7mu\cleaders + \hbox{$#1\mkern-2mu\box\z@\mkern-2mu$}\hfill + \mkern-6mu\OrdSymbol{\rightarrow}$} + \def\leftarrowfill@#1{\m@th\setboxz@h{$#1\relbar$}\ht\z@\z@ + $#1\OrdSymbol{\leftarrow}\mkern-6mu\cleaders + \hbox{$#1\mkern-2mu\copy\z@\mkern-2mu$}\hfill + \mkern-7mu\box\z@$} + \def\leftrightarrowfill@#1{\m@th\setboxz@h{$#1\relbar$}\ht\z@\z@ + $#1\OrdSymbol{\leftarrow}\mkern-6mu\cleaders + \hbox{$#1\mkern-2mu\box\z@\mkern-2mu$}\hfill + \mkern-6mu\OrdSymbol{\rightarrow}$} +} +% \end{macrocode} +% hey, this looks like a simple case switch... +% \begin{macrocode} +\def\binrel@sym#1#2#3#4{% + \xdef\binrel@@##1{% + \ifx\math_sym_Ord:Nn #2 \math_csym_Ord:Nn + \else\ifx\math_sym_Var:Nn#2 \math_csym_Var:Nn + \else\ifx\math_sym_COs:Nn#2 \math_csym_COs:Nn + \else\ifx\math_sym_COi:Nn#2 \math_csym_COi:Nn + \else\ifx\math_sym_Bin:Nn#2 \math_csym_Bin:Nn + \else\ifx\math_sym_Rel:Nn#2 \math_csym_Rel:Nn + \else\ifx\math_sym_Pun:Nn#2 \math_csym_Pun:Nn + \else\exp_not:N\@symErr \fi\fi\fi\fi\fi\fi\fi + ?{\exp_not:N\OrdSymbol{##1}}}% +} + +\def\binrel@a{% + \def\math_sym_Ord:Nn##1##2{\gdef\binrel@@####1{\math_sym_Ord:Nn##1{\OrdSymbol{####1}}}}% + \def\math_sym_Var:Nn##1##2{\gdef\binrel@@####1{\math_sym_Var:Nn##1{\OrdSymbol{####1}}}}% + \def\math_sym_COs:Nn##1##2{\gdef\binrel@@####1{\math_sym_COs:Nn##1{\OrdSymbol{####1}}}}% + \def\math_sym_COi:Nn##1##2{\gdef\binrel@@####1{\math_sym_COi:Nn##1{\OrdSymbol{####1}}}}% + \def\math_sym_Bin:Nn##1##2{\gdef\binrel@@####1{\math_sym_Bin:Nn##1{\OrdSymbol{####1}}}}% + \def\math_sym_Rel:Nn##1##2{\gdef\binrel@@####1{\math_sym_Rel:Nn##1{\OrdSymbol{####1}}}}% + \def\math_sym_Pun:Nn##1##2{\gdef\binrel@@####1{\math_sym_Pun:Nn##1{\OrdSymbol{####1}}}}% +} +\def\binrel@#1{% + \setbox\z@\hbox{$% + \let\mathchoice\@gobblethree + \let\@sym\binrel@sym \binrel@a + #1$}% +} +\def\@symextension{sym} +\newcommand\usesymbols[1]{% + \clist_map_variable:nNn{#1}\@tempb{% + \exp_args:No\@onefilewithoptions{\@tempb}[][]\@symextension + }% +} +% Need to introduce \ProvidesExplFile somehow +\newcommand\ProvidesSymbols[1]{\ProvidesFile{#1.sym}} +\DeclareRobustCommand{\not}[1]{\math_csym_Rel:Nn\not{\OrdSymbol{\notRel#1}}} +\DeclareRobustCommand{\OrdSymbol}[1]{% + \begingroup\mathchars@reset#1\endgroup +} +\def\mathchars@reset{\let\@sym\@sym@ord \let\@symtype\@symtype@ord + \let\OrdSymbol\relax} +\def\@symtype@ord#1#{}% a strange sort of \@gobble +\def\@sym@ord#1#2{\exp_after:wN\@sym@ord@a\string#2\@nil}% +% \end{macrocode} +% Read delimited argument here. We want to find first character of +% DeA, Bin, etc. and the control sequence checked agains is |\m@DeL|, +% |\m@Pun|, etc. The lccode trick makes the . into an @ with catcode +% 12. This is what results when the code is called with +% |\string|. Beware of this when we change internal names for math +% groups! If a Delimiter is found, insert it with class 0 but use the +% smallest version available. Otherwise just insert math char of class +% 0. The code here is not pretty and it indicates it should be tackled +% differently! +% \begin{macrocode} +\begingroup +\lccode`\.=`\_ \lowercase{\endgroup +\def\@sym@ord@a#1.#2.}#3#4\@nil#5#6{% + \if D#3 + %\math_ord_delim_aux:Nn #5{#6} + \math_sd_del_aux:Nnn 0 #5{#6}% check if this works! + \else + \math_char:NNn 0 #5{#6} + \fi +} +\cs_set:Nn \math_ord_delim_aux:Nn { + \math_sd_aux:nn { \math_char:NNn 0 } {#1{#2}} +} +% \end{macrocode} +% +% +% Before declaring any math characters active, we have to take care of +% a small problem with \pkg{amsmath} v2.x, if it is loaded before +% \pkg{flexisym}. \cs{std@minus} and \cs{std@equal} are defined as +% \begin{verbatim} +% \mathchardef\std@minus\mathcode`\-\relax +% \mathchardef\std@equal\mathcode`\=\relax +% \end{verbatim} +% in \fn{amsmath.sty} and again \cs{AtBeginDocument}. The +% latter is because +% \begin{quote} +% In case some alternative math fonts are loaded +% later. [\fn{amsmath.dtx}] +% \end{quote} +% The problem arises because \pkg{flexisym} sets the mathcode of all +% symbols to $32768$ which is illegal for a \cs{mathchardef}. +% +% We have to remove the assignments from the \cs{AtBeginDocument} hook +% as they will cause an error there. +% \begin{macrocode} +\@ifpackageloaded{amsmath}{% + \begingroup +% \end{macrocode} +% Split the contents of \cs{@begindocumenthook} by reading what we +% search for as a delimited argument and ensure these two assignments +% do not take place. It is questionable if anything reasonable can be +% done to them. In the case of a package such as \pkg{mathpazo} which defines +% \begin{verbatim} +%\DeclareMathSymbol{=}{\mathrel}{upright}{"3D} +% \end{verbatim} +% the \cs{Relbar} will look wrong if we don't use the correct +% symbol. The way to solve this is define additional \fn{.sym} files +% which contain the definition of \cs{relbar} and \cs{Relbar} +% needed. We need those additional files anyway for things like +% \cs{joinord}. +% \begin{macrocode} + \long\def\next#1\mathchardef\std@minus\mathcode`\-\relax + \mathchardef\std@equal\mathcode`\=\relax#2\flexi@stop{% + \toks@{#1#2}% + \xdef\@begindocumenthook{\the\toks@}% + }% + \expandafter\next\@begindocumenthook\flexi@stop + \endgroup +}{} +% \end{macrocode} +% +% There is problem when using \cs{DeclareMathOperator} as the +% operators defined call a command \cs{newmcodes@} which relies on the +% mathcode of \texttt{-} being less than 32768. We delay the +% definition \cs{AtBeginDocument} in case \pkg{amssymb} hasn't been +% loaded yet. +% \begin{macrocode} +\AtBeginDocument{% +\def\newmcodes@{% + \mathcode `\'39\space + \mathcode `\*42\space + \mathcode `\."613A\space + \ifnum\mathcode`\-=45\space + \else +% \end{macrocode} +% The extra check. Don't do anything if \texttt{-} is math active. +% \begin{macrocode} + \ifnum\mathcode`\-=32768\space + \else + \mathchardef \std@minus \mathcode `\-\relax + \fi + \fi + \mathcode `\-45\space + \mathcode `\/47\space + \mathcode `\:"603A\space\relax +}% +} +% \end{macrocode} +% +% And we then continue with the options. +% \begin{macrocode} +\DeclareOption{mathstyleoff}{% + \PassOptionsToPackage{noactivechars}{mathstyle}} +\DeclareOption{cmbase}{\usesymbols{cmbase}} +\DeclareOption{mathpazo}{\usesymbols{mathpazo}} +\DeclareOption{mathptmx}{\usesymbols{mathptmx}} +\ExecuteOptions{cmbase} +\ProcessOptions\relax +\renewcommand{\lnot}{\neg} +\renewcommand{\land}{\wedge} +\renewcommand{\lor}{\vee} +\renewcommand{\le}{\leq} +\renewcommand{\ge}{\geq} +\renewcommand{\ne}{\neq} +\renewcommand{\owns}{\ni} +\renewcommand{\gets}{\leftarrow} +\renewcommand{\to}{\rightarrow} +\renewcommand{\|}{\Vert} +\RequirePackage{mathstyle} +%</package>\endinput +% \end{macrocode} +% +% \section{cmbase, mathpazo, mathptmx} +% +% +% For each math font package we define a corresponding symbol file +% with extension \fn{sym}. The Computer Modern base is called +% \opt{cmbase} and \opt{mathpazo} and \opt{mathptmx} corresponds to +% the packages. The definitions are almost identical as they mostly +% concern the positions in the math font encodings. Look for +% differences in \cs{joinord}, \cs{relbar} and \cs{Relbar}. If you +% inspect the source code, you'll see that the support for +% \pkg{mathptmx} didn't require any work but I thought it better to +% create a \fn{sym} file to maintain a uniform interface. +% +% \begin{aside} +% Open question on \verb"!" and \verb"?": maybe they +% should have type `Pun' instead of `DeR'. Need to +% search for uses in math in AMS archives. Or, maybe add a special +% `Clo' type for them: non-extensible closing delimiter. +% \end{aside} +% +% +% +% Default mathgroup setup. +% \changes{v0.3}{2010/07/11}{fixed bugs regarding capital greek +% letters in mathpazo and mathptmx} +% \begin{macrocode} +%<*cmbase|mathpazo|mathptmx> +%<cmbase>\ProvidesSymbols{cmbase}[2007/12/19 v0.92] +%<mathpazo>\ProvidesSymbols{mathpazo}[2010/07/11 v0.3] +%<mathptmx>\ProvidesSymbols{mathptmx}[2010/07/11 v0.3] +\ExplSyntaxOn +\cs_gset:cpx {mg@OT1} {\hexnumber@\symoperators} +\cs_gset:cpx {mg@OML} {\hexnumber@\symletters} +\cs_gset:cpx {mg@OMS} {\hexnumber@\symsymbols} +\cs_gset:cpx {mg@OMX} {\hexnumber@\symlargesymbols} +\cs_gset:Npx \mg@bin {\mg@OMS} +\cs_gset:Npx \mg@del {\mg@OMX} +\cs_gset:Npx \mg@digit {\exp_not:c{mg@OT1}} +\cs_gset:Npn \mg@latin {\mg@OML} +\cs_gset_eq:NN \mg@Latin \mg@latin +\cs_gset_eq:NN \mg@greek \mg@latin +%<cmbase|mathptmx>\cs_gset_eq:NN\mg@Greek\mg@digit +% \end{macrocode} +% Mathpazo takes the upper case greeks from the letter font if +% slantedGreek is in effect, but from \emph{upright} if not. Mathptmx +% also takes the slanted greek from the letter font. +% \begin{macrocode} +%<mathpazo>\@ifpackagewith{mathpazo}{slantedGreek}{% +%<mathpazo> \cs_gset_eq:NN\mg@Greek\mg@latin +%<mathpazo>}{% +%<mathpazo> \cs_gset:cpx{mg@Greek}{\hexnumber@\symupright} +%<mathpazo>} +%<mathptmx>\@ifpackagewith{mathptmx}{slantedGreek}{% +%<mathptmx> \cs_gset_eq:NN\mg@Greek\mg@latin +%<mathptmx>}{} +\cs_gset_eq:NN \mg@rel \mg@bin +\cs_gset_eq:NN \mg@ord \mg@bin +\cs_gset_eq:NN \mg@cop \mg@del +% \end{macrocode} +% +% +% Symbols from the 128-character \fn{cmr} encoding. +% Paren and square bracket delimiters from this encoding are covered +% by the definitions in the \fn{cmex} section, however. +% \begin{macrocode} +\DeclareFlexSymbol{!} {Pun}{OT1}{21} +\DeclareFlexSymbol{+} {Bin}{OT1}{2B} +\DeclareFlexSymbol{:} {Rel}{OT1}{3A} +\DeclareFlexSymbol{\colon}{Pun}{OT1}{3A} +\DeclareFlexSymbol{;} {Pun}{OT1}{3B} +\DeclareFlexSymbol{=} {Rel}{OT1}{3D} +\DeclareFlexSymbol{?} {Pun}{OT1}{3F} +% \end{macrocode} +% \AmS\TeX, and therefore the \pkg{amsmath} package, make the +% uppercase Greek letters class 0 (nonvariable) instead of 7 +% (variable), to eliminate the glaring inconsistency with lowercase +% Greek. (In plain \TeX , \verb"{\bf\Delta}" works, while +% \verb"{\bf\delta}" doesn't.) Let us try to make them both +% variable (fonts permitting) instead of nonvariable. +% \begin{macrocode} +\DeclareFlexSymbol{\Gamma} {Var}{Greek}{00} +\DeclareFlexSymbol{\Delta} {Var}{Greek}{01} +\DeclareFlexSymbol{\Theta} {Var}{Greek}{02} +\DeclareFlexSymbol{\Lambda} {Var}{Greek}{03} +\DeclareFlexSymbol{\Xi} {Var}{Greek}{04} +\DeclareFlexSymbol{\Pi} {Var}{Greek}{05} +\DeclareFlexSymbol{\Sigma} {Var}{Greek}{06} +\DeclareFlexSymbol{\Upsilon}{Var}{Greek}{07} +\DeclareFlexSymbol{\Phi} {Var}{Greek}{08} +\DeclareFlexSymbol{\Psi} {Var}{Greek}{09} +\DeclareFlexSymbol{\Omega} {Var}{Greek}{0A} +% \end{macrocode} +% Decimal digits. +% \begin{macrocode} +\DeclareFlexSymbol{0}{Var}{digit}{30} +\DeclareFlexSymbol{1}{Var}{digit}{31} +\DeclareFlexSymbol{2}{Var}{digit}{32} +\DeclareFlexSymbol{3}{Var}{digit}{33} +\DeclareFlexSymbol{4}{Var}{digit}{34} +\DeclareFlexSymbol{5}{Var}{digit}{35} +\DeclareFlexSymbol{6}{Var}{digit}{36} +\DeclareFlexSymbol{7}{Var}{digit}{37} +\DeclareFlexSymbol{8}{Var}{digit}{38} +\DeclareFlexSymbol{9}{Var}{digit}{39} +% \end{macrocode} +% Symbols from the 128-character \fn{cmmi} encoding. +% \begin{macrocode} +\DeclareFlexSymbol{,}{Pun}{OML}{3B} +\DeclareFlexSymbol{.}{Ord}{OML}{3A} +\DeclareFlexSymbol{/}{Ord}{OML}{3D} +\DeclareFlexSymbol{<}{Rel}{OML}{3C} +\DeclareFlexSymbol{>}{Rel}{OML}{3E} +% \end{macrocode} +% To do: make the Var property of lc Greek work properly. +% \begin{macrocode} +\DeclareFlexSymbol{\alpha} {Var}{greek}{0B} +\DeclareFlexSymbol{\beta} {Var}{greek}{0C} +\DeclareFlexSymbol{\gamma} {Var}{greek}{0D} +\DeclareFlexSymbol{\delta} {Var}{greek}{0E} +\DeclareFlexSymbol{\epsilon} {Var}{greek}{0F} +\DeclareFlexSymbol{\zeta} {Var}{greek}{10} +\DeclareFlexSymbol{\eta} {Var}{greek}{11} +\DeclareFlexSymbol{\theta} {Var}{greek}{12} +\DeclareFlexSymbol{\iota} {Var}{greek}{13} +\DeclareFlexSymbol{\kappa} {Var}{greek}{14} +\DeclareFlexSymbol{\lambda} {Var}{greek}{15} +\DeclareFlexSymbol{\mu} {Var}{greek}{16} +\DeclareFlexSymbol{\nu} {Var}{greek}{17} +\DeclareFlexSymbol{\xi} {Var}{greek}{18} +\DeclareFlexSymbol{\pi} {Var}{greek}{19} +\DeclareFlexSymbol{\rho} {Var}{greek}{1A} +\DeclareFlexSymbol{\sigma} {Var}{greek}{1B} +\DeclareFlexSymbol{\tau} {Var}{greek}{1C} +\DeclareFlexSymbol{\upsilon} {Var}{greek}{1D} +\DeclareFlexSymbol{\phi} {Var}{greek}{1E} +\DeclareFlexSymbol{\chi} {Var}{greek}{1F} +\DeclareFlexSymbol{\psi} {Var}{greek}{20} +\DeclareFlexSymbol{\omega} {Var}{greek}{21} +\DeclareFlexSymbol{\varepsilon}{Var}{greek}{22} +\DeclareFlexSymbol{\vartheta} {Var}{greek}{23} +\DeclareFlexSymbol{\varpi} {Var}{greek}{24} +\DeclareFlexSymbol{\varrho} {Var}{greek}{25} +\DeclareFlexSymbol{\varsigma} {Var}{greek}{26} +\DeclareFlexSymbol{\varphi} {Var}{greek}{27} +% \end{macrocode} +% Note that in plain \TeX\ \cs{imath} and \cs{jmath} are +% not variable-font. But if a \verb"j" changes font to, let's +% say, sans serif or calligraphic, a dotless \verb"j" in the same +% context should change font in the same way. +% \begin{macrocode} +\DeclareFlexSymbol{\imath} {Var}{OML}{7B} +\DeclareFlexSymbol{\jmath} {Var}{OML}{7C} +\DeclareFlexSymbol{\ell} {Ord}{OML}{60} +\DeclareFlexSymbol{\wp} {Ord}{OML}{7D} +\DeclareFlexSymbol{\partial} {Ord}{OML}{40} +\DeclareFlexSymbol{\flat} {Ord}{OML}{5B} +\DeclareFlexSymbol{\natural} {Ord}{OML}{5C} +\DeclareFlexSymbol{\sharp} {Ord}{OML}{5D} +\DeclareFlexSymbol{\triangleleft} {Bin}{OML}{2F} +\DeclareFlexSymbol{\triangleright} {Bin}{OML}{2E} +\DeclareFlexSymbol{\star} {Bin}{OML}{3F} +\DeclareFlexSymbol{\smile} {Rel}{OML}{5E} +\DeclareFlexSymbol{\frown} {Rel}{OML}{5F} +\DeclareFlexSymbol{\leftharpoonup} {Rel}{OML}{28} +\DeclareFlexSymbol{\leftharpoondown} {Rel}{OML}{29} +\DeclareFlexSymbol{\rightharpoonup} {Rel}{OML}{2A} +\DeclareFlexSymbol{\rightharpoondown}{Rel}{OML}{2B} +% \end{macrocode} +% Latin +% \begin{macrocode} +\DeclareFlexSymbol{a}{Var}{latin}{61} +\DeclareFlexSymbol{b}{Var}{latin}{62} +\DeclareFlexSymbol{c}{Var}{latin}{63} +\DeclareFlexSymbol{d}{Var}{latin}{64} +\DeclareFlexSymbol{e}{Var}{latin}{65} +\DeclareFlexSymbol{f}{Var}{latin}{66} +\DeclareFlexSymbol{g}{Var}{latin}{67} +\DeclareFlexSymbol{h}{Var}{latin}{68} +\DeclareFlexSymbol{i}{Var}{latin}{69} +\DeclareFlexSymbol{j}{Var}{latin}{6A} +\DeclareFlexSymbol{k}{Var}{latin}{6B} +\DeclareFlexSymbol{l}{Var}{latin}{6C} +\DeclareFlexSymbol{m}{Var}{latin}{6D} +\DeclareFlexSymbol{n}{Var}{latin}{6E} +\DeclareFlexSymbol{o}{Var}{latin}{6F} +\DeclareFlexSymbol{p}{Var}{latin}{70} +\DeclareFlexSymbol{q}{Var}{latin}{71} +\DeclareFlexSymbol{r}{Var}{latin}{72} +\DeclareFlexSymbol{s}{Var}{latin}{73} +\DeclareFlexSymbol{t}{Var}{latin}{74} +\DeclareFlexSymbol{u}{Var}{latin}{75} +\DeclareFlexSymbol{v}{Var}{latin}{76} +\DeclareFlexSymbol{w}{Var}{latin}{77} +\DeclareFlexSymbol{x}{Var}{latin}{78} +\DeclareFlexSymbol{y}{Var}{latin}{79} +\DeclareFlexSymbol{z}{Var}{latin}{7A} +\DeclareFlexSymbol{A}{Var}{Latin}{41} +\DeclareFlexSymbol{B}{Var}{Latin}{42} +\DeclareFlexSymbol{C}{Var}{Latin}{43} +\DeclareFlexSymbol{D}{Var}{Latin}{44} +\DeclareFlexSymbol{E}{Var}{Latin}{45} +\DeclareFlexSymbol{F}{Var}{Latin}{46} +\DeclareFlexSymbol{G}{Var}{Latin}{47} +\DeclareFlexSymbol{H}{Var}{Latin}{48} +\DeclareFlexSymbol{I}{Var}{Latin}{49} +\DeclareFlexSymbol{J}{Var}{Latin}{4A} +\DeclareFlexSymbol{K}{Var}{Latin}{4B} +\DeclareFlexSymbol{L}{Var}{Latin}{4C} +\DeclareFlexSymbol{M}{Var}{Latin}{4D} +\DeclareFlexSymbol{N}{Var}{Latin}{4E} +\DeclareFlexSymbol{O}{Var}{Latin}{4F} +\DeclareFlexSymbol{P}{Var}{Latin}{50} +\DeclareFlexSymbol{Q}{Var}{Latin}{51} +\DeclareFlexSymbol{R}{Var}{Latin}{52} +\DeclareFlexSymbol{S}{Var}{Latin}{53} +\DeclareFlexSymbol{T}{Var}{Latin}{54} +\DeclareFlexSymbol{U}{Var}{Latin}{55} +\DeclareFlexSymbol{V}{Var}{Latin}{56} +\DeclareFlexSymbol{W}{Var}{Latin}{57} +\DeclareFlexSymbol{X}{Var}{Latin}{58} +\DeclareFlexSymbol{Y}{Var}{Latin}{59} +\DeclareFlexSymbol{Z}{Var}{Latin}{5A} +% \end{macrocode} +% The \cs{ldotPun} glyph is used in constructing the +% \cs{ldots} symbol. It is just a period with a different math +% symbol class. \cs{lhookRel} and \cs{rhookRel} are used +% in a similar way for building hooked arrow symbols. +% \begin{macrocode} +\DeclareFlexSymbol{\ldotPun}{Pun}{OML}{3A} +\def\ldotp{\ldotPun} +\DeclareFlexSymbol{\lhookRel}{Rel}{OML}{2C} +\DeclareFlexSymbol{\rhookRel}{Rel}{OML}{2D} +% \end{macrocode} +% Symbols from the 128-character \fn{cmsy} encoding. +% \begin{macrocode} +\DeclareFlexSymbol{*} {Bin}{bin}{03} % \ast +\DeclareFlexSymbol{-} {Bin}{bin}{00} +\DeclareFlexSymbol{|} {Ord}{OMS}{6A} +\DeclareFlexSymbol{\aleph} {Ord}{ord}{40} +\DeclareFlexSymbol{\Re} {Ord}{ord}{3C} +\DeclareFlexSymbol{\Im} {Ord}{ord}{3D} +\DeclareFlexSymbol{\infty} {Ord}{ord}{31} +\DeclareFlexSymbol{\prime} {Ord}{ord}{30} +\DeclareFlexSymbol{\emptyset} {Ord}{ord}{3B} +\DeclareFlexSymbol{\nabla} {Ord}{ord}{72} +\DeclareFlexSymbol{\top} {Ord}{ord}{3E} +\DeclareFlexSymbol{\bot} {Ord}{ord}{3F} +\DeclareFlexSymbol{\triangle} {Ord}{ord}{34} +\DeclareFlexSymbol{\forall} {Ord}{ord}{38} +\DeclareFlexSymbol{\exists} {Ord}{ord}{39} +\DeclareFlexSymbol{\neg} {Ord}{ord}{3A} +\DeclareFlexSymbol{\clubsuit} {Ord}{ord}{7C} +\DeclareFlexSymbol{\diamondsuit}{Ord}{ord}{7D} +\DeclareFlexSymbol{\heartsuit} {Ord}{ord}{7E} +\DeclareFlexSymbol{\spadesuit} {Ord}{ord}{7F} +\DeclareFlexSymbol{\smallint} {COs}{OMS}{73} +% \end{macrocode} +% Binary operators. +% \begin{macrocode} +\DeclareFlexSymbol{\bigtriangleup} {Bin}{bin}{34} +\DeclareFlexSymbol{\bigtriangledown}{Bin}{bin}{35} +\DeclareFlexSymbol{\wedge} {Bin}{bin}{5E} +\DeclareFlexSymbol{\vee} {Bin}{bin}{5F} +\DeclareFlexSymbol{\cap} {Bin}{bin}{5C} +\DeclareFlexSymbol{\cup} {Bin}{bin}{5B} +\DeclareFlexSymbol{\ddagger} {Bin}{bin}{7A} +\DeclareFlexSymbol{\dagger} {Bin}{bin}{79} +\DeclareFlexSymbol{\sqcap} {Bin}{bin}{75} +\DeclareFlexSymbol{\sqcup} {Bin}{bin}{74} +\DeclareFlexSymbol{\uplus} {Bin}{bin}{5D} +\DeclareFlexSymbol{\amalg} {Bin}{bin}{71} +\DeclareFlexSymbol{\diamond} {Bin}{bin}{05} +\DeclareFlexSymbol{\bullet} {Bin}{bin}{0F} +\DeclareFlexSymbol{\wr} {Bin}{bin}{6F} +\DeclareFlexSymbol{\div} {Bin}{bin}{04} +\DeclareFlexSymbol{\odot} {Bin}{bin}{0C} +\DeclareFlexSymbol{\oslash} {Bin}{bin}{0B} +\DeclareFlexSymbol{\otimes} {Bin}{bin}{0A} +\DeclareFlexSymbol{\ominus} {Bin}{bin}{09} +\DeclareFlexSymbol{\oplus} {Bin}{bin}{08} +\DeclareFlexSymbol{\mp} {Bin}{bin}{07} +\DeclareFlexSymbol{\pm} {Bin}{bin}{06} +\DeclareFlexSymbol{\circ} {Bin}{bin}{0E} +\DeclareFlexSymbol{\bigcirc} {Bin}{bin}{0D} +\DeclareFlexSymbol{\setminus} {Bin}{bin}{6E} +\DeclareFlexSymbol{\cdot} {Bin}{bin}{01} +\DeclareFlexSymbol{\ast} {Bin}{bin}{03} +\DeclareFlexSymbol{\times} {Bin}{bin}{02} +% \end{macrocode} +% Relation symbols. +% \begin{macrocode} +\DeclareFlexSymbol{\propto} {Rel}{rel}{2F} +\DeclareFlexSymbol{\sqsubseteq} {Rel}{rel}{76} +\DeclareFlexSymbol{\sqsupseteq} {Rel}{rel}{77} +\DeclareFlexSymbol{\parallel} {Rel}{rel}{6B} +\DeclareFlexSymbol{\mid} {Rel}{rel}{6A} +\DeclareFlexSymbol{\dashv} {Rel}{rel}{61} +\DeclareFlexSymbol{\vdash} {Rel}{rel}{60} +\DeclareFlexSymbol{\nearrow} {Rel}{rel}{25} +\DeclareFlexSymbol{\searrow} {Rel}{rel}{26} +\DeclareFlexSymbol{\nwarrow} {Rel}{rel}{2D} +\DeclareFlexSymbol{\swarrow} {Rel}{rel}{2E} +\DeclareFlexSymbol{\Leftrightarrow}{Rel}{rel}{2C} +\DeclareFlexSymbol{\Leftarrow} {Rel}{rel}{28} +\DeclareFlexSymbol{\Rightarrow} {Rel}{rel}{29} +\DeclareFlexSymbol{\leq} {Rel}{rel}{14} +\DeclareFlexSymbol{\geq} {Rel}{rel}{15} +\DeclareFlexSymbol{\succ} {Rel}{rel}{1F} +\DeclareFlexSymbol{\prec} {Rel}{rel}{1E} +\DeclareFlexSymbol{\approx} {Rel}{rel}{19} +\DeclareFlexSymbol{\succeq} {Rel}{rel}{17} +\DeclareFlexSymbol{\preceq} {Rel}{rel}{16} +\DeclareFlexSymbol{\supset} {Rel}{rel}{1B} +\DeclareFlexSymbol{\subset} {Rel}{rel}{1A} +\DeclareFlexSymbol{\supseteq} {Rel}{rel}{13} +\DeclareFlexSymbol{\subseteq} {Rel}{rel}{12} +\DeclareFlexSymbol{\in} {Rel}{rel}{32} +\DeclareFlexSymbol{\ni} {Rel}{rel}{33} +\DeclareFlexSymbol{\gg} {Rel}{rel}{1D} +\DeclareFlexSymbol{\ll} {Rel}{rel}{1C} +\DeclareFlexSymbol{\leftrightarrow}{Rel}{rel}{24} +\DeclareFlexSymbol{\leftarrow} {Rel}{rel}{20} +\DeclareFlexSymbol{\rightarrow} {Rel}{rel}{21} +\DeclareFlexSymbol{\sim} {Rel}{rel}{18} +\DeclareFlexSymbol{\simeq} {Rel}{rel}{27} +\DeclareFlexSymbol{\perp} {Rel}{rel}{3F} +\DeclareFlexSymbol{\equiv} {Rel}{rel}{11} +\DeclareFlexSymbol{\asymp} {Rel}{rel}{10} +% \end{macrocode} +% The \cs{notRel} glyph is a special zero-width glyph intended only +% for use in constructing negated symbols. \cs{mapstoRel} and +% \cs{cdotPun} have similar but more restricted applications. +% \begin{macrocode} +\DeclareFlexSymbol{\notRel} {Rel}{rel}{36} +\DeclareFlexSymbol{\mapstoOrd}{Ord}{OMS}{37} +\DeclareFlexSymbol{\cdotOrd} {Ord}{OMS}{01} +\cs_set:Npn\cdotp{\mathpunct{\cdotOrd}} +% \end{macrocode} +% Symbols from the 128-character \fn{cmex} encoding. +% \verb"COs" stands for `cumulative operator +% (sum-like)'. +% \verb"COi" stands for `cumulative operator +% (integral-like)'. These typically differ only in the +% default placement of limits. \verb"cop" stands for +% `cumulative operator math group'. +% \begin{macrocode} +\DeclareFlexSymbol{\coprod} {COs}{cop}{60} +\DeclareFlexSymbol{\bigvee} {COs}{cop}{57} +\DeclareFlexSymbol{\bigwedge} {COs}{cop}{56} +\DeclareFlexSymbol{\biguplus} {COs}{cop}{55} +\DeclareFlexSymbol{\bigcap} {COs}{cop}{54} +\DeclareFlexSymbol{\bigcup} {COs}{cop}{53} +\DeclareFlexSymbol{\int} {COi}{cop}{52} +\DeclareFlexSymbol{\prod} {COs}{cop}{51} +\DeclareFlexSymbol{\sum} {COs}{cop}{50} +\DeclareFlexSymbol{\bigotimes}{COs}{cop}{4E} +\DeclareFlexSymbol{\bigoplus} {COs}{cop}{4C} +\DeclareFlexSymbol{\bigodot} {COs}{cop}{4A} +\DeclareFlexSymbol{\oint} {COi}{cop}{48} +\DeclareFlexSymbol{\bigsqcup} {COs}{cop}{46} +% \end{macrocode} +% Delimiter symbols. +% \verb"DeL" stands for `delimiter (left)'. +% \verb"DeR" stands for `delimiter (right)'. +% \verb"DeB" stands for `delimiter (bidirectional)'. +% The principal encoding point for an extensible delimiter is the +% first link in the list of linked sizes as specified in the font metric +% information. +% For a math encoding such as OT1/OML/OMS/OMX where not all sizes of a +% given delimiter reside in a given font, the extra encoding point for the +% smallest delimiter must be supplied by defining +% \begin{verbatim} +% \sd@GXX +% \end{verbatim} +% where G is the mathgroup and XX is the hexadecimal glyph +% position. |\DeclareFlexDelimiter| does that for us. +% \begin{macrocode} +\DeclareFlexDelimiter{\rangle}{DeR}{del}{0B}{OMS}{69} +\DeclareFlexDelimiter{\langle}{DeL}{del}{0A}{OMS}{68} +\DeclareFlexDelimiter{\rbrace}{DeR}{del}{09}{OMS}{67} +\DeclareFlexDelimiter{\lbrace}{DeL}{del}{08}{OMS}{66} +\DeclareFlexDelimiter{\rceil} {DeR}{del}{07}{OMS}{65} +\DeclareFlexDelimiter{\lceil} {DeL}{del}{06}{OMS}{64} +\DeclareFlexDelimiter{\rfloor}{DeR}{del}{05}{OMS}{63} +\DeclareFlexDelimiter{\lfloor}{DeL}{del}{04}{OMS}{62} +\DeclareFlexDelimiter{(} {DeL}{del}{00}{OT1}{28} +\DeclareFlexDelimiter{)} {DeR}{del}{01}{OT1}{29} +\DeclareFlexDelimiter{[} {DeL}{del}{02}{OT1}{5B} +\DeclareFlexDelimiter{]} {DeR}{del}{03}{OT1}{5D} +\DeclareFlexDelimiter{\lVert} {DeL}{del}{0D}{OMS}{6B} +\DeclareFlexDelimiter{\rVert} {DeR}{del}{0D}{OMS}{6B} +\DeclareFlexDelimiter{\lvert} {DeL}{del}{0C}{OMS}{6A} +\DeclareFlexDelimiter{\rvert} {DeR}{del}{0C}{OMS}{6A} +\DeclareFlexDelimiter{\Vert} {DeB}{del}{0D}{OMS}{6B} +\DeclareFlexDelimiter{\vert} {DeB}{del}{0C}{OMS}{6A} +% \end{macrocode} +% Maybe make the vert bars mathord instead of delimiter, to discourage +% poor usage. +% \begin{macrocode} +\DeclareFlexDelimiter{|}{DeB}{del}{0C}{OMS}{6A} +\DeclareFlexDelimiter{/}{DeB}{del}{0E}{OML}{3D} +% \end{macrocode} +% +% +% These wacky delimiters need to be supported I guess for +% compabitility reasons. +% The DeA delimiter type is a special case used only for these +% arrows. +% \begin{macrocode} +\DeclareFlexDelimiter{\lmoustache} {DeL}{del}{40}{del}{7A} +\DeclareFlexDelimiter{\rmoustache} {DeR}{del}{41}{del}{7B} +\DeclareFlexDelimiter{\lgroup} {DeL}{del}{3A}{del}{3A} +\DeclareFlexDelimiter{\rgroup} {DeR}{del}{3B}{del}{3B} +\DeclareFlexDelimiter{\bracevert} {DeB}{del}{3E}{del}{3E} +\DeclareFlexDelimiter{\arrowvert} {DeB}{del}{3C}{OMS}{6A} +\DeclareFlexDelimiter{\Arrowvert} {DeB}{del}{3D}{OMS}{6B} +\DeclareFlexDelimiter{\uparrow} {DeA}{del}{78}{OMS}{22} +\DeclareFlexDelimiter{\downarrow} {DeA}{del}{79}{OMS}{23} +\DeclareFlexDelimiter{\updownarrow}{DeA}{del}{3F}{OMS}{6C} +\DeclareFlexDelimiter{\Uparrow} {DeA}{del}{7E}{OMS}{2A} +\DeclareFlexDelimiter{\Downarrow} {DeA}{del}{7F}{OMS}{2B} +\DeclareFlexDelimiter{\Updownarrow}{DeA}{del}{77}{OMS}{6D} +\DeclareFlexDelimiter{\backslash} {DeB}{del}{0F}{OMS}{6E} +% \end{macrocode} +% +% +% +% +% \section{Some compound symbols} +% The following symbols are not robust in standard \LaTeX\ +% because they use \verb"#" or \cs{mathpalette} (which is not +% robust and contains a \verb"#" in its expansion): \cs{angle}, +% \cs{cong}, \cs{notin}, \cs{rightleftharpoons}. +% +% In this definition of \cs{hbar}, the symbol is cobbled together +% from a math italic h and the cmr overbar accent glyph. +% \begin{macrocode} +\DeclareFlexSymbol{\hbarOrd}{Ord}{OT1}{16} +\DeclareFlexCompoundSymbol{\hbar}{Ord}{\hbarOrd\mkern-9mu h} +% \end{macrocode} +% For \cs{surd}, the interior symbol gets math class 1 +% (cumulative operator) to make the glyph vertically centered on the +% math axis, but the desired horizontal spacing is the spacing for a +% mathord. (Couldn't it just be class mathopen, though?) +% \begin{macrocode} +\DeclareFlexSymbol{\surdOrd}{Ord}{OMS}{70} +\DeclareFlexCompoundSymbol{\surd}{Ord}{\mathop{\surdOrd}} +% \end{macrocode} +% As shown in this definition of \cs{angle}, rule dimens are not +% allowed to use math-units, unfortunately. +% \begin{macrocode} +\DeclareFlexCompoundSymbol{\angle}{Ord}{% + \vbox{\ialign{% + $\m@th\scriptstyle##$\crcr + \notRel\mathrel{\mkern14mu}\crcr + \noalign{\nointerlineskip}% + \mkern2.5mu\leaders\hrule \@height.34pt\hfill\mkern2.5mu\crcr + }}% +} +% \end{macrocode} +% The \cs{not} function, which is defined in the \pkg{flexisym} +% package, requires a suitably defined \cs{notRel} symbol. +% \begin{macrocode} +\DeclareFlexCompoundSymbol{\neq}{Rel}{\not{=}} +% \end{macrocode} +% . +% \begin{macrocode} +\DeclareFlexCompoundSymbol{\mapsto}{Rel}{\mapstoOrd\rightarrow} +% \end{macrocode} +% The \cs{@vereq} function ends by centering the whole +% construction on the math axis, unlike \cs{buildrel} where the base +% symbol remains at its normal altitude. Furthermore, +% \cs{@vereq} leaves the math style of the top symbol as given +% instead of downsizing to scriptstyle. +% \begin{macrocode} +\DeclareFlexCompoundSymbol{\cong}{Rel}{\mathpalette\@vereq\sim} +% \end{macrocode} +% The \cs{m@th} in the \fn{fontmath.ltx} definition of +% \cs{notin} is superfluous unless \cs{c@ncel} doesn't include +% it (which was perhaps true in an older version of +% \fn{plain.tex}?). +% \begin{macrocode} +\providecommand*\joinord{} +%<cmbase|mathptmx>\renewcommand*\joinord{\mkern-3mu } +%<mathpazo>\renewcommand*\joinord{\mkern-3.45mu } +\DeclareFlexCompoundSymbol{\notin}{Rel}{\mathpalette\c@ncel\in} +\DeclareFlexCompoundSymbol{\rightleftharpoons}{Rel}{\mathpalette\rlh@{}} +\DeclareFlexCompoundSymbol{\doteq}{Rel}{\buildrel\textstyle.\over=} +\DeclareFlexCompoundSymbol{\hookrightarrow}{Rel}{\lhookRel\joinord\rightarrow} +\DeclareFlexCompoundSymbol{\hookleftarrow}{Rel}{\leftarrow\joinord\rhookRel} +\DeclareFlexCompoundSymbol{\bowtie}{Rel}{\triangleright\joinord\triangleleft} +\DeclareFlexCompoundSymbol{\models}{Rel}{\vert\joinord=} +\DeclareFlexCompoundSymbol{\Longrightarrow}{Rel}{\Relbar\joinord\Rightarrow} +\DeclareFlexCompoundSymbol{\longrightarrow}{Rel}{\relbar\joinord\rightarrow} +\DeclareFlexCompoundSymbol{\Longleftarrow}{Rel}{\Leftarrow\joinord\Relbar} +\DeclareFlexCompoundSymbol{\longleftarrow}{Rel}{\leftarrow\joinord\relbar} +\DeclareFlexCompoundSymbol{\longmapsto}{Rel}{\mapstochar\longrightarrow} +\DeclareFlexCompoundSymbol{\longleftrightarrow}{Rel}{\leftarrow\joinord\rightarrow} +\DeclareFlexCompoundSymbol{\Longleftrightarrow}{Rel}{\Leftarrow\joinord\Rightarrow} +% \end{macrocode} +% Here is what you get from the old definition of \cs{iff}. +% \begin{verbatim} +% \glue 2.77771 plus 2.77771 +% \glue(\thickmuskip) 2.77771 plus 2.77771 +% \OMS/cmsy/m/n/10 ( +% \hbox(0.0+0.0)x-1.66663 +% .\kern -1.66663 +% \OMS/cmsy/m/n/10 ) +% \penalty 500 +% \glue 2.77771 plus 2.77771 +% \glue(\thickmuskip) 2.77771 plus 2.77771 +% \end{verbatim} +% Looks like it could be simplified slightly. But it's not so +% easy as it looks to do it without screwing up the line breaking +% possibilities. +% \begin{macrocode} +\renewcommand*\iff{% + \mskip\thickmuskip\Longleftrightarrow\mskip\thickmuskip +} +% \end{macrocode} +% Some dotly symbols. +% \begin{macrocode} +\DeclareFlexCompoundSymbol{\cdots}{Inn}{\cdotp\cdotp\cdotp}% +\DeclareFlexCompoundSymbol{\vdots}{Ord}{% + \vbox{\baselineskip4\p@ \lineskiplimit\z@ + \kern6\p@\hbox{.}\hbox{.}\hbox{.}}} +\DeclareFlexCompoundSymbol{\ddots}{Inn}{% + \mkern1mu\raise7\p@ + \vbox{\kern7\p@\hbox{.}}\mkern2mu% + \raise4\p@\hbox{.}\mkern2mu\raise\p@\hbox{.}\mkern1mu% +} +% \end{macrocode} +% . +% \begin{macrocode} +\def\relbar{\begingroup \def\smash@{tb}% in case amsmath is loaded + \mathpalette\mathsm@sh{\mathchar"200 }\endgroup} +% \end{macrocode} +% For \cs{Relbar} we take an equal sign of class $0$ (Ord) from the +% operator family. For \fn{cmr} and \pkg{mathptmx} we know this is +% family $0$. +% \begin{macrocode} +%<cmbase|mathptmx>\def\Relbar{\mathchar"3D } +% \end{macrocode} +% For the \pkg{mathpazo} setup we need to use the equal sign from +% \fn{cmr} and so must insert class $0$ and use the symbol from the +% upright symbols. +% \begin{macrocode} +%<mathpazo>\edef\Relbar{\mathchar\string"\hexnumber@\symupright3D } +% \end{macrocode} +% Done. +% \begin{macrocode} +\ExplSyntaxOff +%</cmbase|mathpazo|mathptmx> +% \end{macrocode} +% Various synonyms such as \cs{le} for \cs{leq} and +% \cs{to} for \cs{rightarrow} are defined in +% \pkg{flexisym} with \cs{def} instead of \cs{let}, for +% slower execution speed but smaller chance of synchronization +% problems. +% +% +% +% \begin{macrocode} +%<*msabm> +\ProvidesSymbols{msabm}[2001/09/08 v0.91] +\ExplSyntaxOn +% \end{macrocode} +% \begin{macrocode} +\RequirePackage{amsfonts}\relax +% \end{macrocode} +% \begin{macrocode} +\cs_gset:cpx{mg@MSA}{\hexnumber@\symAMSa}% +\cs_gset:cpx{mg@MSB}{\hexnumber@\symAMSb}% +% \end{macrocode} +% \begin{macrocode} +\DeclareFlexSymbol{\boxdot} {Bin}{MSA}{00} +\DeclareFlexSymbol{\boxplus} {Bin}{MSA}{01} +\DeclareFlexSymbol{\boxtimes} {Bin}{MSA}{02} +\DeclareFlexSymbol{\square} {Ord}{MSA}{03} +\DeclareFlexSymbol{\blacksquare} {Ord}{MSA}{04} +\DeclareFlexSymbol{\centerdot} {Bin}{MSA}{05} +\DeclareFlexSymbol{\lozenge} {Ord}{MSA}{06} +\DeclareFlexSymbol{\blacklozenge} {Ord}{MSA}{07} +\DeclareFlexSymbol{\circlearrowright} {Rel}{MSA}{08} +\DeclareFlexSymbol{\circlearrowleft} {Rel}{MSA}{09} +% \end{macrocode} +% In amsfonts.sty: +% \begin{macrocode} +%%\DeclareFlexSymbol{\rightleftharpoons}{Rel}{MSA}{0A} +\DeclareFlexSymbol{\leftrightharpoons} {Rel}{MSA}{0B} +\DeclareFlexSymbol{\boxminus} {Bin}{MSA}{0C} +\DeclareFlexSymbol{\Vdash} {Rel}{MSA}{0D} +\DeclareFlexSymbol{\Vvdash} {Rel}{MSA}{0E} +\DeclareFlexSymbol{\vDash} {Rel}{MSA}{0F} +\DeclareFlexSymbol{\twoheadrightarrow} {Rel}{MSA}{10} +\DeclareFlexSymbol{\twoheadleftarrow} {Rel}{MSA}{11} +\DeclareFlexSymbol{\leftleftarrows} {Rel}{MSA}{12} +\DeclareFlexSymbol{\rightrightarrows} {Rel}{MSA}{13} +\DeclareFlexSymbol{\upuparrows} {Rel}{MSA}{14} +\DeclareFlexSymbol{\downdownarrows} {Rel}{MSA}{15} +\DeclareFlexSymbol{\upharpoonright} {Rel}{MSA}{16} + \let\restriction\upharpoonright +\DeclareFlexSymbol{\downharpoonright} {Rel}{MSA}{17} +\DeclareFlexSymbol{\upharpoonleft} {Rel}{MSA}{18} +\DeclareFlexSymbol{\downharpoonleft} {Rel}{MSA}{19} +\DeclareFlexSymbol{\rightarrowtail} {Rel}{MSA}{1A} +\DeclareFlexSymbol{\leftarrowtail} {Rel}{MSA}{1B} +\DeclareFlexSymbol{\leftrightarrows} {Rel}{MSA}{1C} +\DeclareFlexSymbol{\rightleftarrows} {Rel}{MSA}{1D} +\DeclareFlexSymbol{\Lsh} {Rel}{MSA}{1E} +\DeclareFlexSymbol{\Rsh} {Rel}{MSA}{1F} +\DeclareFlexSymbol{\rightsquigarrow} {Rel}{MSA}{20} +\DeclareFlexSymbol{\leftrightsquigarrow}{Rel}{MSA}{21} +\DeclareFlexSymbol{\looparrowleft} {Rel}{MSA}{22} +\DeclareFlexSymbol{\looparrowright} {Rel}{MSA}{23} +\DeclareFlexSymbol{\circeq} {Rel}{MSA}{24} +\DeclareFlexSymbol{\succsim} {Rel}{MSA}{25} +\DeclareFlexSymbol{\gtrsim} {Rel}{MSA}{26} +\DeclareFlexSymbol{\gtrapprox} {Rel}{MSA}{27} +\DeclareFlexSymbol{\multimap} {Rel}{MSA}{28} +\DeclareFlexSymbol{\therefore} {Rel}{MSA}{29} +\DeclareFlexSymbol{\because} {Rel}{MSA}{2A} +\DeclareFlexSymbol{\doteqdot} {Rel}{MSA}{2B} + \let\Doteq\doteqdot +\DeclareFlexSymbol{\triangleq} {Rel}{MSA}{2C} +\DeclareFlexSymbol{\precsim} {Rel}{MSA}{2D} +\DeclareFlexSymbol{\lesssim} {Rel}{MSA}{2E} +\DeclareFlexSymbol{\lessapprox} {Rel}{MSA}{2F} +\DeclareFlexSymbol{\eqslantless} {Rel}{MSA}{30} +\DeclareFlexSymbol{\eqslantgtr} {Rel}{MSA}{31} +\DeclareFlexSymbol{\curlyeqprec} {Rel}{MSA}{32} +\DeclareFlexSymbol{\curlyeqsucc} {Rel}{MSA}{33} +\DeclareFlexSymbol{\preccurlyeq} {Rel}{MSA}{34} +\DeclareFlexSymbol{\leqq} {Rel}{MSA}{35} +\DeclareFlexSymbol{\leqslant} {Rel}{MSA}{36} +\DeclareFlexSymbol{\lessgtr} {Rel}{MSA}{37} +\DeclareFlexSymbol{\backprime} {Ord}{MSA}{38} +\DeclareFlexSymbol{\risingdotseq} {Rel}{MSA}{3A} +\DeclareFlexSymbol{\fallingdotseq} {Rel}{MSA}{3B} +\DeclareFlexSymbol{\succcurlyeq} {Rel}{MSA}{3C} +\DeclareFlexSymbol{\geqq} {Rel}{MSA}{3D} +\DeclareFlexSymbol{\geqslant} {Rel}{MSA}{3E} +\DeclareFlexSymbol{\gtrless} {Rel}{MSA}{3F} +% \end{macrocode} +% in amsfonts.sty +% \begin{macrocode} +%% \DeclareFlexSymbol{\sqsubset} {Rel}{MSA}{40} +%% \DeclareFlexSymbol{\sqsupset} {Rel}{MSA}{41} +\DeclareFlexSymbol{\vartriangleright} {Rel}{MSA}{42} +\DeclareFlexSymbol{\vartriangleleft} {Rel}{MSA}{43} +\DeclareFlexSymbol{\trianglerighteq} {Rel}{MSA}{44} +\DeclareFlexSymbol{\trianglelefteq} {Rel}{MSA}{45} +\DeclareFlexSymbol{\bigstar} {Ord}{MSA}{46} +\DeclareFlexSymbol{\between} {Rel}{MSA}{47} +\DeclareFlexSymbol{\blacktriangledown} {Ord}{MSA}{48} +\DeclareFlexSymbol{\blacktriangleright} {Rel}{MSA}{49} +\DeclareFlexSymbol{\blacktriangleleft} {Rel}{MSA}{4A} +\DeclareFlexSymbol{\vartriangle} {Rel}{MSA}{4D} +\DeclareFlexSymbol{\blacktriangle} {Ord}{MSA}{4E} +\DeclareFlexSymbol{\triangledown} {Ord}{MSA}{4F} +\DeclareFlexSymbol{\eqcirc} {Rel}{MSA}{50} +\DeclareFlexSymbol{\lesseqgtr} {Rel}{MSA}{51} +\DeclareFlexSymbol{\gtreqless} {Rel}{MSA}{52} +\DeclareFlexSymbol{\lesseqqgtr} {Rel}{MSA}{53} +\DeclareFlexSymbol{\gtreqqless} {Rel}{MSA}{54} +\DeclareFlexSymbol{\Rrightarrow} {Rel}{MSA}{56} +\DeclareFlexSymbol{\Lleftarrow} {Rel}{MSA}{57} +\DeclareFlexSymbol{\veebar} {Bin}{MSA}{59} +\DeclareFlexSymbol{\barwedge} {Bin}{MSA}{5A} +\DeclareFlexSymbol{\doublebarwedge} {Bin}{MSA}{5B} +% \end{macrocode} +% In amsfonts.sty +% \begin{macrocode} +%%\DeclareFlexSymbol{\angle} {Ord}{MSA}{5C} +\DeclareFlexSymbol{\measuredangle} {Ord}{MSA}{5D} +\DeclareFlexSymbol{\sphericalangle} {Ord}{MSA}{5E} +\DeclareFlexSymbol{\varpropto} {Rel}{MSA}{5F} +\DeclareFlexSymbol{\smallsmile} {Rel}{MSA}{60} +\DeclareFlexSymbol{\smallfrown} {Rel}{MSA}{61} +\DeclareFlexSymbol{\Subset} {Rel}{MSA}{62} +\DeclareFlexSymbol{\Supset} {Rel}{MSA}{63} +\DeclareFlexSymbol{\Cup} {Bin}{MSA}{64} + \let\doublecup\Cup +\DeclareFlexSymbol{\Cap} {Bin}{MSA}{65} + \let\doublecap\Cap +\DeclareFlexSymbol{\curlywedge} {Bin}{MSA}{66} +\DeclareFlexSymbol{\curlyvee} {Bin}{MSA}{67} +\DeclareFlexSymbol{\leftthreetimes} {Bin}{MSA}{68} +\DeclareFlexSymbol{\rightthreetimes} {Bin}{MSA}{69} +\DeclareFlexSymbol{\subseteqq} {Rel}{MSA}{6A} +\DeclareFlexSymbol{\supseteqq} {Rel}{MSA}{6B} +\DeclareFlexSymbol{\bumpeq} {Rel}{MSA}{6C} +\DeclareFlexSymbol{\Bumpeq} {Rel}{MSA}{6D} +\DeclareFlexSymbol{\lll} {Rel}{MSA}{6E} + \let\llless\lll +\DeclareFlexSymbol{\ggg} {Rel}{MSA}{6F} + \let\gggtr\ggg +\DeclareFlexSymbol{\circledS} {Ord}{MSA}{73} +\DeclareFlexSymbol{\pitchfork} {Rel}{MSA}{74} +\DeclareFlexSymbol{\dotplus} {Bin}{MSA}{75} +\DeclareFlexSymbol{\backsim} {Rel}{MSA}{76} +\DeclareFlexSymbol{\backsimeq} {Rel}{MSA}{77} +\DeclareFlexSymbol{\complement} {Ord}{MSA}{7B} +\DeclareFlexSymbol{\intercal} {Bin}{MSA}{7C} +\DeclareFlexSymbol{\circledcirc} {Bin}{MSA}{7D} +\DeclareFlexSymbol{\circledast} {Bin}{MSA}{7E} +\DeclareFlexSymbol{\circleddash} {Bin}{MSA}{7F} +% \end{macrocode} +% Begin AMSb declarations +% \begin{macrocode} +\DeclareFlexSymbol{\lvertneqq} {Rel}{MSB}{00} +\DeclareFlexSymbol{\gvertneqq} {Rel}{MSB}{01} +\DeclareFlexSymbol{\nleq} {Rel}{MSB}{02} +\DeclareFlexSymbol{\ngeq} {Rel}{MSB}{03} +\DeclareFlexSymbol{\nless} {Rel}{MSB}{04} +\DeclareFlexSymbol{\ngtr} {Rel}{MSB}{05} +\DeclareFlexSymbol{\nprec} {Rel}{MSB}{06} +\DeclareFlexSymbol{\nsucc} {Rel}{MSB}{07} +\DeclareFlexSymbol{\lneqq} {Rel}{MSB}{08} +\DeclareFlexSymbol{\gneqq} {Rel}{MSB}{09} +\DeclareFlexSymbol{\nleqslant} {Rel}{MSB}{0A} +\DeclareFlexSymbol{\ngeqslant} {Rel}{MSB}{0B} +\DeclareFlexSymbol{\lneq} {Rel}{MSB}{0C} +\DeclareFlexSymbol{\gneq} {Rel}{MSB}{0D} +\DeclareFlexSymbol{\npreceq} {Rel}{MSB}{0E} +\DeclareFlexSymbol{\nsucceq} {Rel}{MSB}{0F} +\DeclareFlexSymbol{\precnsim} {Rel}{MSB}{10} +\DeclareFlexSymbol{\succnsim} {Rel}{MSB}{11} +\DeclareFlexSymbol{\lnsim} {Rel}{MSB}{12} +\DeclareFlexSymbol{\gnsim} {Rel}{MSB}{13} +\DeclareFlexSymbol{\nleqq} {Rel}{MSB}{14} +\DeclareFlexSymbol{\ngeqq} {Rel}{MSB}{15} +\DeclareFlexSymbol{\precneqq} {Rel}{MSB}{16} +\DeclareFlexSymbol{\succneqq} {Rel}{MSB}{17} +\DeclareFlexSymbol{\precnapprox} {Rel}{MSB}{18} +\DeclareFlexSymbol{\succnapprox} {Rel}{MSB}{19} +\DeclareFlexSymbol{\lnapprox} {Rel}{MSB}{1A} +\DeclareFlexSymbol{\gnapprox} {Rel}{MSB}{1B} +\DeclareFlexSymbol{\nsim} {Rel}{MSB}{1C} +\DeclareFlexSymbol{\ncong} {Rel}{MSB}{1D} +\DeclareFlexSymbol{\diagup} {Ord}{MSB}{1E} +\DeclareFlexSymbol{\diagdown} {Ord}{MSB}{1F} +\DeclareFlexSymbol{\varsubsetneq} {Rel}{MSB}{20} +\DeclareFlexSymbol{\varsupsetneq} {Rel}{MSB}{21} +\DeclareFlexSymbol{\nsubseteqq} {Rel}{MSB}{22} +\DeclareFlexSymbol{\nsupseteqq} {Rel}{MSB}{23} +\DeclareFlexSymbol{\subsetneqq} {Rel}{MSB}{24} +\DeclareFlexSymbol{\supsetneqq} {Rel}{MSB}{25} +\DeclareFlexSymbol{\varsubsetneqq} {Rel}{MSB}{26} +\DeclareFlexSymbol{\varsupsetneqq} {Rel}{MSB}{27} +\DeclareFlexSymbol{\subsetneq} {Rel}{MSB}{28} +\DeclareFlexSymbol{\supsetneq} {Rel}{MSB}{29} +\DeclareFlexSymbol{\nsubseteq} {Rel}{MSB}{2A} +\DeclareFlexSymbol{\nsupseteq} {Rel}{MSB}{2B} +\DeclareFlexSymbol{\nparallel} {Rel}{MSB}{2C} +\DeclareFlexSymbol{\nmid} {Rel}{MSB}{2D} +\DeclareFlexSymbol{\nshortmid} {Rel}{MSB}{2E} +\DeclareFlexSymbol{\nshortparallel} {Rel}{MSB}{2F} +\DeclareFlexSymbol{\nvdash} {Rel}{MSB}{30} +\DeclareFlexSymbol{\nVdash} {Rel}{MSB}{31} +\DeclareFlexSymbol{\nvDash} {Rel}{MSB}{32} +\DeclareFlexSymbol{\nVDash} {Rel}{MSB}{33} +\DeclareFlexSymbol{\ntrianglerighteq}{Rel}{MSB}{34} +\DeclareFlexSymbol{\ntrianglelefteq} {Rel}{MSB}{35} +\DeclareFlexSymbol{\ntriangleleft} {Rel}{MSB}{36} +\DeclareFlexSymbol{\ntriangleright} {Rel}{MSB}{37} +\DeclareFlexSymbol{\nleftarrow} {Rel}{MSB}{38} +\DeclareFlexSymbol{\nrightarrow} {Rel}{MSB}{39} +\DeclareFlexSymbol{\nLeftarrow} {Rel}{MSB}{3A} +\DeclareFlexSymbol{\nRightarrow} {Rel}{MSB}{3B} +\DeclareFlexSymbol{\nLeftrightarrow} {Rel}{MSB}{3C} +\DeclareFlexSymbol{\nleftrightarrow} {Rel}{MSB}{3D} +\DeclareFlexSymbol{\divideontimes} {Bin}{MSB}{3E} +\DeclareFlexSymbol{\varnothing} {Ord}{MSB}{3F} +\DeclareFlexSymbol{\nexists} {Ord}{MSB}{40} +\DeclareFlexSymbol{\Finv} {Ord}{MSB}{60} +\DeclareFlexSymbol{\Game} {Ord}{MSB}{61} +% \end{macrocode} +% In amsfonts.sty: +% \begin{macrocode} +%%\DeclareFlexSymbol{\mho} {Ord}{MSB}{66} +\DeclareFlexSymbol{\eth} {Ord}{MSB}{67} +\DeclareFlexSymbol{\eqsim} {Rel}{MSB}{68} +\DeclareFlexSymbol{\beth} {Ord}{MSB}{69} +\DeclareFlexSymbol{\gimel} {Ord}{MSB}{6A} +\DeclareFlexSymbol{\daleth} {Ord}{MSB}{6B} +\DeclareFlexSymbol{\lessdot} {Bin}{MSB}{6C} +\DeclareFlexSymbol{\gtrdot} {Bin}{MSB}{6D} +\DeclareFlexSymbol{\ltimes} {Bin}{MSB}{6E} +\DeclareFlexSymbol{\rtimes} {Bin}{MSB}{6F} +\DeclareFlexSymbol{\shortmid} {Rel}{MSB}{70} +\DeclareFlexSymbol{\shortparallel} {Rel}{MSB}{71} +\DeclareFlexSymbol{\smallsetminus} {Bin}{MSB}{72} +\DeclareFlexSymbol{\thicksim} {Rel}{MSB}{73} +\DeclareFlexSymbol{\thickapprox} {Rel}{MSB}{74} +\DeclareFlexSymbol{\approxeq} {Rel}{MSB}{75} +\DeclareFlexSymbol{\succapprox} {Rel}{MSB}{76} +\DeclareFlexSymbol{\precapprox} {Rel}{MSB}{77} +\DeclareFlexSymbol{\curvearrowleft} {Rel}{MSB}{78} +\DeclareFlexSymbol{\curvearrowright} {Rel}{MSB}{79} +\DeclareFlexSymbol{\digamma} {Ord}{MSB}{7A} +\DeclareFlexSymbol{\varkappa} {Ord}{MSB}{7B} +\DeclareFlexSymbol{\Bbbk} {Ord}{MSB}{7C} +\DeclareFlexSymbol{\hslash} {Ord}{MSB}{7D} +% \end{macrocode} +% In amsfonts.sty: +% \begin{macrocode} +%%\DeclareFlexSymbol{\hbar} {Ord}{MSB}{7E} +\DeclareFlexSymbol{\backepsilon} {Rel}{MSB}{7F} +\ExplSyntaxOff +%</msabm> +% \end{macrocode} +% +% \PrintIndex +% +% \Finale |