% \iffalse meta-comment % % Copyright (C) 1993-2024 % The LaTeX Project and any individual authors listed elsewhere % in this file. % % This file is part of the LaTeX base system. % ------------------------------------------- % % It may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3c % of this license or (at your option) any later version. % The latest version of this license is in % https://www.latex-project.org/lppl.txt % and version 1.3c or later is part of all distributions of LaTeX % version 2008 or later. % % This file has the LPPL maintenance status "maintained". % % The list of all files belonging to the LaTeX base distribution is % given in the file `manifest.txt'. See also `legal.txt' for additional % information. % % The list of derived (unpacked) files belonging to the distribution % and covered by LPPL is defined by the unpacking scripts (with % extension .ins) which are part of the distribution. % % \fi % \iffalse %%% From File: fontdef.dtx %<*dtx> \ProvidesFile{fontdef.dtx} % %\ProvidesFile{fonttext.ltx} %\ProvidesFile{fontmath.ltx} %<+cfgtext>\ProvidesFile{fonttext.cfg} %<+cfgmath>\ProvidesFile{fontmath.cfg} %<+cfgprel>\ProvidesFile{preload.cfg} %\ProvidesFile{fontdef.drv} % \fi % \ProvidesFile{fontdef.dtx} %<-latexrelease> [2021/01/15 v3.0i LaTeX Kernel % \iftrue (\else %(Text %(Math %<+cfgtext>(Uncustomized text %<+cfgmath>(Uncustomized math %<+cfgprel>(Uncustomized preload % \fi %<-latexrelease> font setup)] % % %\iffalse This is a META comment % % File `fontdef.dtx'. % Copyright (C) 1989-1999 Frank Mittelbach and Rainer Sch\"opf, % All rights reserved. % %\fi % % \changes{v2.1a}{1993/12/01}{Update for LaTeX2e} % \changes{v2.2a}{1994/10/14}{New coding} % \changes{v2.2i}{1994/12/02}{Commented out \cs{ldots}. ASAJ.} % \changes{v2.2j}{1995/05/11}{Updates to some plain macros} % \changes{v2.2l}{1995/10/03}{\cs{@@sqrt} from patch file for /1701} % \changes{v2.2o}{1996/05/17}{\cs{@@sqrt} removed, at last} % \changes{v2.2p}{1996/11/20}{lowercase fd and enc.def file names /1044} % \changes{v2.2x}{1999/01/05}{Need special protection for character % \texttt{\char62} in \cs{changes} entry.} % % \title{The \texttt{fontdef.dtx} file\thanks % {This file has version number \fileversion, dated \filedate}} % \author{Frank Mittelbach \and Rainer Sch\"opf} % % \def\dst{{\normalfont\scshape docstrip}} % \setcounter{StandardModuleDepth}{1} % % % \MaintainedByLaTeXTeam{latex} % \maketitle % % \section{Introduction} % % This file is used to generate the files \texttt{fonttext.ltx} (text % font declarations) and \texttt{fontmath.ltx} (math font % declarations), which are used during the format generation. It % contains the declaration of the standard text encodings used at the % site as well as a minimal subset of font shape groups that NFSS will % look at to ensure that the specified encodings are valid. % % The math part contains the setup for math encodings as well as the % default math symbol declarations that belong to the encoding. % % It is possible to change this setup (by using other fonts, or % defaults) without losing the ability to % process documents written at other sites. Portability in this sense % means that a document will compile without errors. It does not mean, % however, that identical output will be produced. For this it is % necessary that the distributed setup is used at both installations. % % \section{Customization} % % You are not allowed to change this source file! If you want to % change the default encodings and/or the font shape groups preloaded % you should create a copy of \texttt{fonttext.ltx} % under the name \texttt{fonttext.cfg} and change this copy. If % \LaTeXe{} finds a file of this name it will use it, otherwise it % uses the standard file which is \texttt{fontdef.ltx}. % % If you don't plan to use Computer Modern much or at all, it might % (!) be a good idea to make your own \texttt{fonttext.cfg}. Look at % the comments below (docstrip module `text') to see what should % go into such a file. % % To change the math font setup use a copy of \texttt{fontmath.ltx} % under the name \texttt{fontmath.cfg} and change this copy. However, % dealing with this interface is even more a job for an expert than % changing the text font setup --- in short, we don't encourage either. % % \begin{quote} % \textbf{Warning:} please note that we don't support customised % \LaTeX{} versions. Thus, before sending in a bug report please try % your test file with a \LaTeX{} format which is not customised and % send in the log from that version (unless the problem goes away). % \end{quote} % % Please note: the following standard encodings have to % be defined in all local variants of \texttt{font....cfg} to guarantee % that all \LaTeX{} installations behave in the same way. % \begin{center} % \begin{tabular}{ll} % |T1| & Cork \TeX{} text encoding \\ % |OT1| & old \TeX{} text encoding \\ % |U| & unknown encoding \\ % |OML| & old \TeX{} math letters encoding \\ % |OMS| & old \TeX{} math symbols encoding \\ % |OMX| & old \TeX{} math extension symbols encoding\\ % |TU| & Unicode % \end{tabular} % \end{center} % Notice that some of these encodings are `old' in the sense that we % hope that they will be superseded soon by encoding standards defined % by the \TeX{} user community. Therefore this set of default encodings % may change in the future. % % The first candidate is |OT1| which will soon be replaced by |T1|, the % official \TeX{} text encoding. % % \begin{quote}\textbf{Warning:} % If you add additional encodings to this file there is no guarantee % any longer that files processable at your installation will also be % processable at other installations. Thus, if you make use of % such an encoding in your document, e.g.~if you intend to typeset in % Cyrillic (|OT2| encoding), you need to specify this encoding in the % preamble of your document prior to sending it to another % installation. Once the encoding is specified in that place in your % document, the document is processable at all \LaTeX{} installations % (provided they have suitable fonts installed). % % For this reason we suggest that you define a short package file that % sets up an additional encoding used at your site (rather than % putting the encoding into this file) since this package can easily % be shipped with your document. % \end{quote} % % % \MaybeStop{} % % \section{The \texttt{docstrip} modules} % % The following modules are used to direct \texttt{docstrip} in % generating external files: % \begin{center} % \begin{tabular}{ll} % driver & produce a documentation driver file \\ % text & produce the file \texttt{fonttext.ltx}\\ % math & produce the file \texttt{fontmath.ltx}\\ % cfgtext & produce a dummy \texttt{fonttext.cfg} file\\ % cfgmath & produce a dummy \texttt{fontmath.cfg} file\\ % \end{tabular} % \end{center} % A typical \texttt{docstrip} command file would then have entries like: % \begin{verbatim} %\generateFile{fonttext.ltx}{t}{\from{fontdef.dtx}{text}} %\end{verbatim} % % % \section{A driver for this document} % % The next bit of code contains the documentation driver file for % \TeX{}, i.e.~the file that will produce the documentation you are % currently reading. It will be extracted from this file by the % \dst{} program. % \begin{macrocode} %<*driver> \documentclass{ltxdoc} \GetFileInfo{fontdef.dtx} \begin{document} \DocInput{fontdef.dtx} \end{document} % % \end{macrocode} % % % % \section{The \texttt{fonttext.ltx} file} % % The identification is done earlier on with a |\ProvidesFile| % declaration. % \begin{macrocode} %<*text> \typeout{=== Don't modify this file, use a .cfg file instead ===^^J} % \end{macrocode} % % \subsection{Encodings} % % This file declares the standard encodings for text and math % fonts. All others should be declared in packages or in the % documents directly. % % For every text encoding there are normally a number of encoding % specific commands, e.g.~accents, special characters, etc. (The % definition for such a command might have to change when the % encoding is changed, because the character is in a different % position, or not available at all, or the accent is produced in a % different way.) This is handled by a general mechanism which is % described in \texttt{ltoutenc.dtx}. % % By convention, text encoding specific declarations, including the % |\DeclareFontEncoding| declaration, are kept in separate file of % the form \meta{enc}\texttt{enc.def}, e.g.~\texttt{ot1enc.def}. This % allows other applications to make use of the declarations as % well. % % Similar to the default encoding, the loading of the encoding % files for the two major text encodings shouldn't be changed. % In particular, the \texttt{inputenc} package depends on this. % \changes{v2.2s}{1997/12/20}{Added documentation} % % \changes{v2.1d}{1994/01/05}{Removed nf prefix from file names.} % \changes{v2.1f}{1994/05/14}{Removed .def files.} % \changes{v2.1g}{1994/05/16}{Removed \cs{DeclareFontEncoding} for ot1 % and t1 and input .def files instead} % \changes{v2.2c}{1994/10/25}{Added OMSenc.def} % \changes{v2.2d}{1994/10/31}{Added OMLenc.def ...} % \changes{v2.2e}{1994/10/31}{... and moved further down} % \changes{v2.2f}{1994/11/07}{(DPC) Updated to use \cs{ProvidesFile}} % \changes{v2.2h}{1994/11/16}{(DPC) Removed \cmd\{ and \cmd\}} % \changes{v3.0a}{2016/12/03}{(DPC) Default to TU encoding for Unicode TeX engines} % \begin{macrocode} \input {omlenc.def} \input {omsenc.def} % \end{macrocode} % Documents containing a lot of accented characters should really % be using T1 fonts. We therefore load this last so that T1 encoding % specific commands are executed as fast as possible (encoding % files are no longer reloaded in \texttt{fontenc}. % \changes{v3.0f}{2020/01/25}{Load t1enc.def last (gh/255)} % \begin{macrocode} \input {ot1enc.def} \input {t1enc.def} % \end{macrocode} % % \begin{macrocode} \input{ts1enc.def} % \end{macrocode} % % % % \changes{v3.0a}{2016/12/03}{(DPC) Default to TU encoding for Unicode TeX engines} % \begin{macrocode} \ifx\Umathcode\@undefined % \end{macrocode} % % We then set the default text font encoding. This will % hopefully change some day to |T1|. This setting should \emph{not} % be changed to produce a portable format. % \begin{macrocode} \fontencoding{OT1} % \end{macrocode} % % The initial \texttt{fontenc} package load list if an 8-bit \TeX{} % engine is used: % \changes{v3.0g}{2020/02/11}{Provide value for \cs{@fontenc@load@list} (gh/273)} % \begin{macrocode} \def\@fontenc@load@list{\@elt{T1,OT1}} % \end{macrocode} % % % % % \begin{macrocode} \def\rmsubstdefault{cmr} \def\sfsubstdefault{cmss} \def\ttsubstdefault{cmtt} \LoadFontDefinitionFile{TS1}{cmr} % \end{macrocode} % % \begin{macrocode} \else % \end{macrocode} % Unicode. % \begin{macrocode} \input {tuenc.def} \fontencoding{TU} % \end{macrocode} % % The initial \texttt{fontenc} package load list if a Unicode % engine is used: % \changes{v3.0g}{2020/02/11}{Provide value for \cs{@fontenc@load@list} (gh/273)} % \begin{macrocode} \def\@fontenc@load@list{\@elt{TU}} % \end{macrocode} % % \begin{macrocode} \DeclareFontSubstitution{TU}{lmr}{m}{n} \LoadFontDefinitionFile{TU}{lmr} \LoadFontDefinitionFile{TU}{lmss} \LoadFontDefinitionFile{TU}{lmtt} % \end{macrocode} % % \begin{macrocode} \def\rmsubstdefault{lmr} \def\sfsubstdefault{lmss} \def\ttsubstdefault{lmtt} \LoadFontDefinitionFile{TS1}{lmr} % \end{macrocode} % % \begin{macrocode} \DeclareFontSubstitution{TU}{lmr}{m}{n} % \end{macrocode} % End of Unicode branch. % \begin{macrocode} \fi % \end{macrocode} % % If different encodings for text fonts are in use one could put % the common setup into |\DeclareFontEncodingDefaults|. There is % now a better mechanism so using this interface is discouraged! % \begin{macrocode} \DeclareFontEncodingDefaults{}{} % \end{macrocode} % % Then we define the default substitution for every encoding. % This release of \LaTeXe{} assumes that the ec fonts are % available. It is possible to change this to point to some other % font family (e.g., Times with the appropriate encoding if it is % available) without making documents non-portable. However, in % such a case documents will produce different page breaks at other % sites. The substitution defaults can all be changed without % losing portability as long as there are font shape definitions % for the selected substitutions. % \begin{macrocode} \DeclareFontSubstitution{T1}{cmr}{m}{n} \DeclareFontSubstitution{OT1}{cmr}{m}{n} % \end{macrocode} % % For every encoding declaration, \LaTeXe{} will try to verify that % the given substitution information makes sense, i.e.~that it is % impossible to go into an endless loop if font substitution % happens. This is done at the moment the |\begin{document}| is % encountered. \LaTeXe{} will then check that for every encoding the % substitution defaults form a valid font shape group, which means % that it will check if there is a |\DeclareFontShape| declaration % for this combination. We will therefore load the corresponding % |.fd| files now. If we don't do this they would be loaded at % verification time (i.e.~at |\begin{document}| which would delay % processing unnecessarily. % % \begin{quote} % \textbf{Warning:} Please note that this means that you have to % regenerate the format whenever you change any of these % \texttt{.fd} files since \LaTeXe{} will not read \texttt{.fd} % files if it already knows about the encoding/family % combination. % \end{quote} % % \changes{v2.2m}{1995/11/01}{add \cs{nfss@catcodes} for internal/1932} % The |\nfss@catcodes| ensures that white space is ignored in any % definitions made in the fd files. % \begin{macrocode} \begingroup \nfss@catcodes \input {t1cmr.fd} \input {ot1cmr.fd} \endgroup % \end{macrocode} % % We also load some other font definition files which are normally % needed in a document. This is only done for processing speed and % you can comment the next two lines out to save some memory. If % necessary these files are then loaded when your document is % processed. (Loading |.fd| files is a less drastic step compared % to preloading fonts because the number of fonts is limited 255 at % (nearly) every \TeX{} installation, while the amount of main memory % is not a limiting factor at most installations.) % % \begin{macrocode} \begingroup \nfss@catcodes \input {ot1cmss.fd} \input {ot1cmtt.fd} \endgroup % \end{macrocode} % % Even with all the precautions it is still possible that NFSS will % run into problems, for example, when a |.fd| file contains % corrupted data. To guard against such cases NFSS has a very % low-level fallback font that is installed with the following line. % \begin{macrocode} \DeclareErrorFont{OT1}{cmr}{m}{n}{10} % \end{macrocode} % This means, ``if everything else fails use Computer Modern Roman % normal shape at 10pt in the old text encoding''. % You can change the font used but the encoding should be the same % as the one specified with |\fontencoding| above. % % % \subsection{Defaults} % % To allow the use of |\rmfamily|, |\sffamily|, etc.\ in documents % even if non-standard families are used we provide nine macros % which hold the name of the corresponding families, series, and so % on. This makes it easy to use other font families (like Times % Roman, etc.). One simply has to redefine these defaults. % % All these hooks have to be defined in this file but you can % change their meaning (except for |\encodingdefault|) without % making documents non-portable. % % % \begin{macro}{\encodingdefault} % \begin{macro}{\rmdefault} % \begin{macro}{\sfdefault} % \begin{macro}{\ttdefault} % The following three definitions set up the meaning for % |\rmfamily|, |\sffamily|, and |\ttfamily|. % \begin{macrocode} \ifx\Umathcode\@undefined \newcommand\encodingdefault{OT1} \newcommand\rmdefault{cmr} \newcommand\sfdefault{cmss} \newcommand\ttdefault{cmtt} \else \newcommand\encodingdefault{TU} \newcommand\rmdefault{lmr} \fontfamily{\rmdefault} \newcommand\sfdefault{lmss} \newcommand\ttdefault{lmtt} \fi % %\IncludeInRelease{2017/01/01}% % {\encodingdefault}{TU encoding default}% %\ifx\Umathcode\@undefined %\renewcommand\encodingdefault{OT1} %\fontencoding{\encodingdefault} %\renewcommand\rmdefault{cmr} %\fontfamily{\rmdefault} %\renewcommand\sfdefault{cmss} %\renewcommand\ttdefault{cmtt} %\else %\renewcommand\encodingdefault{TU} %%done in everyjob\fontencoding{\encodingdefault} %\renewcommand\rmdefault{lmr} %\fontfamily{\rmdefault} %\renewcommand\sfdefault{lmss} %\renewcommand\ttdefault{lmtt} %\fi %\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% % {\encodingdefault}{TU encoding default}% %\fontencoding{OT1} %\renewcommand\encodingdefault{OT1} %\fontencoding{\encodingdefault} %\renewcommand\rmdefault{cmr} %\fontfamily{\rmdefault} %\renewcommand\sfdefault{cmss} %\renewcommand\ttdefault{cmtt} %\EndIncludeInRelease %<*text> % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\bfdefault} % \begin{macro}{\mddefault} % Series changing commands are influenced by the following hooks. % \changes{v3.0e}{2019/12/17}{Set \cs{bfdefault} to ``b''} % \begin{macrocode} \newcommand\bfdefault{b} % overwritten below (for rollback) \newcommand\mddefault{m} % overwritten below (for rollback) % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\itdefault} % \begin{macro}{\sldefault} % \begin{macro}{\scdefault} % \begin{macro}{\updefault} % % Shape changing commands use the following hooks. % \changes{v3.0e}{2019/12/17}{Set \cs{updefault} to ``up''} % \begin{macrocode} \newcommand\itdefault{it} \newcommand\sldefault{sl} \newcommand\scdefault{sc} \newcommand\updefault{up} % overwritten below (for rollback) % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macrocode} % %<*text|latexrelease> %\IncludeInRelease{2020/02/02}% % {\updefault}{font defaults change}% % \begin{macrocode} \renewcommand\updefault{up} % \end{macrocode} % We append \cs{@empty} to the series value so that we can detect % if it got changed via \cs{def} or \cs{renewcommand} later. % \changes{v3.0h}{2020/03/19}{Support legacy use of \cs{bfdefault} % and \cs{mddefault} (gh/306)} % \begin{macrocode} \renewcommand\bfdefault{b\@empty} \renewcommand\mddefault{m\@empty} % \end{macrocode} % % \begin{macrocode} \let\bfdefault@previous\bfdefault \let\mddefault@previous\mddefault % %\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% % {\updefault}{font defaults change}% % %\renewcommand\updefault{n} %\renewcommand\bfdefault{bx} % %\let\bfdefault@previous\undefined %\let\mddefault@previous\undefined %\EndIncludeInRelease %<*text> % \end{macrocode} % % \begin{macro}{\familydefault} % \begin{macro}{\seriesdefault} % \begin{macro}{\shapedefault} % Finally we have the hooks that describe the behaviour of % the |\normalfont| command. To stay portable, the definition of % |\encodingdefault| should \emph{not} be changed and should match % the setting above for |\fontencoding|. All other values can be % set according to your taste. % \changes{v3.0a}{2016/12/03}{(DPC) Default to TU encoding for Unicode TeX engines} % \begin{macrocode} \newcommand\familydefault{\rmdefault} \newcommand\seriesdefault{\mddefault} % \end{macrocode} % In previous releases \cs{shapedefault} pointed to \cs{updefault} % which resolved to \texttt{n}, but these days that is no longer % the case (and \texttt{up} is wrong when you want to do a % reset. So we now use \texttt{n} explicitly. % \changes{v3.0e}{2019/12/17}{Set \cs{shapedefault} explicitly to ``n''} % \begin{macrocode} \newcommand\shapedefault{n} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % % This finishes the low-level setup in \texttt{fonttext.ltx}. % \begin{macrocode} % % \end{macrocode} % % % % % \section{The \texttt{fontmath.ltx} file} % % The identification is done earlier on with a |\ProvidesFile| % declaration. % \begin{macrocode} %<*math> \typeout{=== Don't modify this file, use a .cfg file instead ===^^J} % \end{macrocode} % % \subsection{The font encodings used} % % \begin{macrocode} \DeclareFontEncoding{OML}{}{} \DeclareFontEncoding{OMS}{}{} \DeclareFontEncoding{OMX}{}{} % \end{macrocode} % Finally a declaration for |U| encoding which serves for all fonts % that do not fit standard encodings. For math this sets up % |\noaccents@| providing for AMS-\LaTeX{}. This macro is used % therein to handle accented characters if they are not supported % by the font. In other words, if fonts with |U| encoding are used % in math, all accents (like from |\breve|) are obtained from some % other font that has them. % \begin{macrocode} \DeclareFontEncoding{U}{}{\noaccents@} % \end{macrocode} % The encodings for math are next: % \begin{macrocode} \DeclareFontSubstitution{OML}{cmm}{m}{it} \DeclareFontSubstitution{OMS}{cmsy}{m}{n} \DeclareFontSubstitution{OMX}{cmex}{m}{n} \DeclareFontSubstitution{U}{cmr}{m}{n} % \end{macrocode} % % \begin{macrocode} \begingroup \nfss@catcodes \input {omlcmm.fd} \input {omscmsy.fd} \input {omxcmex.fd} \input {ucmr.fd} \endgroup % \end{macrocode} % % \subsubsection{Symbolfont and Alphabet declarations} % % We now define the basic symbol fonts used by \LaTeX{}. % These four symbol fonts must be defined by this file. % % It is possible to make the symbol fonts point to other external % fonts without losing the ability to process documents written % at other sites, as long as one defines the same symbol font names % with the same encodings, e.g.~|operators| with |OT1| etc. % If other encodings are used documents become non-portable. % Such a change should therefore be done in a package file. % % \changes{v2.1e}{1994/01/19}{Added missing setting for symbols in % bold version.} % \begin{macrocode} \DeclareSymbolFont{operators} {OT1}{cmr} {m}{n} \DeclareSymbolFont{letters} {OML}{cmm} {m}{it} \DeclareSymbolFont{symbols} {OMS}{cmsy}{m}{n} \DeclareSymbolFont{largesymbols}{OMX}{cmex}{m}{n} % \end{macrocode} % % \begin{macrocode} \SetSymbolFont{operators}{bold}{OT1}{cmr} {bx}{n} \SetSymbolFont{letters} {bold}{OML}{cmm} {b}{it} \SetSymbolFont{symbols} {bold}{OMS}{cmsy}{b}{n} % \end{macrocode} % % Below are the seven math alphabets which are defined by NFSS. % Again they must be defined by this file. % However, as before you can change the fonts used without losing % portability, but you should be careful when changing the encoding % since that may make documents come out wrong. % \begin{macrocode} \DeclareSymbolFontAlphabet{\mathrm} {operators} \DeclareSymbolFontAlphabet{\mathnormal}{letters} \DeclareSymbolFontAlphabet{\mathcal} {symbols} \DeclareMathAlphabet {\mathbf}{OT1}{cmr}{bx}{n} \DeclareMathAlphabet {\mathsf}{OT1}{cmss}{m}{n} \DeclareMathAlphabet {\mathit}{OT1}{cmr}{m}{it} \DeclareMathAlphabet {\mathtt}{OT1}{cmtt}{m}{n} % \end{macrocode} % Given the currently available fonts we cannot bold-en |\mathbf| % and |\mathtt| but in principle one could use `ultra bold' or % something. The alphabets defined via |\DeclareSymbolFontAlphabet| % will change automatically in a new math version if the % corresponding symbol font changes. % \begin{macrocode} \SetMathAlphabet\mathsf{bold}{OT1}{cmss}{bx}{n} \SetMathAlphabet\mathit{bold}{OT1}{cmr}{bx}{it} % \end{macrocode} % % % \subsection{Math font sizes} % \changes{v2.2f}{1994/11/07} % {(DPC) Add \cs{DeclareMathSizes} declarations} % % The declarations below declare the text, script and scriptscript % size to be used for each text font size. % % All occurrences of sizes longer than a single character are replaced % with the macro name that holds them, saving a number of % tokens (but losing a bit of speed, so this may not stay this way). % \begin{macrocode} \DeclareMathSizes{5}{5}{5}{5} \DeclareMathSizes{6}{6}{5}{5} \DeclareMathSizes{7}{7}{5}{5} \DeclareMathSizes{8}{8}{6}{5} \DeclareMathSizes{9}{9}{6}{5} \DeclareMathSizes{\@xpt}{\@xpt}{7}{5} \DeclareMathSizes{\@xipt}{\@xipt}{8}{6} \DeclareMathSizes{\@xiipt}{\@xiipt}{8}{6} \DeclareMathSizes{\@xivpt}{\@xivpt}{\@xpt}{7} \DeclareMathSizes{\@xviipt}{\@xviipt}{\@xiipt}{\@xpt} \DeclareMathSizes{\@xxpt}{\@xxpt}{\@xivpt}{\@xiipt} \DeclareMathSizes{\@xxvpt}{\@xxvpt}{\@xxpt}{\@xviipt} % \end{macrocode} % % \subsection{The math symbol assignments} % % We start by setting up math codes for most of the characters % typed in directly from the keyboard. Most of them are normally % already setup up in the same way by Ini\TeX{}. However, we repeat % them here to have a complete setup which can be exchanged with % another if desired. % % \subsubsection{The letters} % \begin{macrocode} \DeclareMathSymbol{a}{\mathalpha}{letters}{`a} \DeclareMathSymbol{b}{\mathalpha}{letters}{`b} \DeclareMathSymbol{c}{\mathalpha}{letters}{`c} \DeclareMathSymbol{d}{\mathalpha}{letters}{`d} \DeclareMathSymbol{e}{\mathalpha}{letters}{`e} \DeclareMathSymbol{f}{\mathalpha}{letters}{`f} \DeclareMathSymbol{g}{\mathalpha}{letters}{`g} \DeclareMathSymbol{h}{\mathalpha}{letters}{`h} \DeclareMathSymbol{i}{\mathalpha}{letters}{`i} \DeclareMathSymbol{j}{\mathalpha}{letters}{`j} \DeclareMathSymbol{k}{\mathalpha}{letters}{`k} \DeclareMathSymbol{l}{\mathalpha}{letters}{`l} \DeclareMathSymbol{m}{\mathalpha}{letters}{`m} \DeclareMathSymbol{n}{\mathalpha}{letters}{`n} \DeclareMathSymbol{o}{\mathalpha}{letters}{`o} \DeclareMathSymbol{p}{\mathalpha}{letters}{`p} \DeclareMathSymbol{q}{\mathalpha}{letters}{`q} \DeclareMathSymbol{r}{\mathalpha}{letters}{`r} \DeclareMathSymbol{s}{\mathalpha}{letters}{`s} \DeclareMathSymbol{t}{\mathalpha}{letters}{`t} \DeclareMathSymbol{u}{\mathalpha}{letters}{`u} \DeclareMathSymbol{v}{\mathalpha}{letters}{`v} \DeclareMathSymbol{w}{\mathalpha}{letters}{`w} \DeclareMathSymbol{x}{\mathalpha}{letters}{`x} \DeclareMathSymbol{y}{\mathalpha}{letters}{`y} \DeclareMathSymbol{z}{\mathalpha}{letters}{`z} % \end{macrocode} % % \begin{macrocode} \DeclareMathSymbol{A}{\mathalpha}{letters}{`A} \DeclareMathSymbol{B}{\mathalpha}{letters}{`B} \DeclareMathSymbol{C}{\mathalpha}{letters}{`C} \DeclareMathSymbol{D}{\mathalpha}{letters}{`D} \DeclareMathSymbol{E}{\mathalpha}{letters}{`E} \DeclareMathSymbol{F}{\mathalpha}{letters}{`F} \DeclareMathSymbol{G}{\mathalpha}{letters}{`G} \DeclareMathSymbol{H}{\mathalpha}{letters}{`H} \DeclareMathSymbol{I}{\mathalpha}{letters}{`I} \DeclareMathSymbol{J}{\mathalpha}{letters}{`J} \DeclareMathSymbol{K}{\mathalpha}{letters}{`K} \DeclareMathSymbol{L}{\mathalpha}{letters}{`L} \DeclareMathSymbol{M}{\mathalpha}{letters}{`M} \DeclareMathSymbol{N}{\mathalpha}{letters}{`N} \DeclareMathSymbol{O}{\mathalpha}{letters}{`O} \DeclareMathSymbol{P}{\mathalpha}{letters}{`P} \DeclareMathSymbol{Q}{\mathalpha}{letters}{`Q} \DeclareMathSymbol{R}{\mathalpha}{letters}{`R} \DeclareMathSymbol{S}{\mathalpha}{letters}{`S} \DeclareMathSymbol{T}{\mathalpha}{letters}{`T} \DeclareMathSymbol{U}{\mathalpha}{letters}{`U} \DeclareMathSymbol{V}{\mathalpha}{letters}{`V} \DeclareMathSymbol{W}{\mathalpha}{letters}{`W} \DeclareMathSymbol{X}{\mathalpha}{letters}{`X} \DeclareMathSymbol{Y}{\mathalpha}{letters}{`Y} \DeclareMathSymbol{Z}{\mathalpha}{letters}{`Z} % \end{macrocode} % % \subsubsection{The digits} % % \begin{macrocode} \DeclareMathSymbol{0}{\mathalpha}{operators}{`0} \DeclareMathSymbol{1}{\mathalpha}{operators}{`1} \DeclareMathSymbol{2}{\mathalpha}{operators}{`2} \DeclareMathSymbol{3}{\mathalpha}{operators}{`3} \DeclareMathSymbol{4}{\mathalpha}{operators}{`4} \DeclareMathSymbol{5}{\mathalpha}{operators}{`5} \DeclareMathSymbol{6}{\mathalpha}{operators}{`6} \DeclareMathSymbol{7}{\mathalpha}{operators}{`7} \DeclareMathSymbol{8}{\mathalpha}{operators}{`8} \DeclareMathSymbol{9}{\mathalpha}{operators}{`9} % \end{macrocode} % % % \subsubsection{Punctuation, brace, etc. keys} % % \begin{macrocode} \DeclareMathSymbol{!}{\mathclose}{operators}{"21} \DeclareMathSymbol{*}{\mathbin}{symbols}{"03} % \ast \DeclareMathSymbol{+}{\mathbin}{operators}{"2B} \DeclareMathSymbol{,}{\mathpunct}{letters}{"3B} \DeclareMathSymbol{-}{\mathbin}{symbols}{"00} \DeclareMathSymbol{.}{\mathord}{letters}{"3A} \DeclareMathSymbol{:}{\mathrel}{operators}{"3A} \DeclareMathSymbol{;}{\mathpunct}{operators}{"3B} \DeclareMathSymbol{=}{\mathrel}{operators}{"3D} \DeclareMathSymbol{?}{\mathclose}{operators}{"3F} % \end{macrocode} % The following symbols are defined as delimiters below % which automatically defines them as math symbols. % \begin{macrocode} %\DeclareMathSymbol{(}{\mathopen}{operators}{"28} %\DeclareMathSymbol{)}{\mathclose}{operators}{"29} %\DeclareMathSymbol{/}{\mathord}{letters}{"3D} %\DeclareMathSymbol{[}{\mathopen}{operators}{"5B} %\DeclareMathSymbol{]}{\mathclose}{operators}{"5D} %\DeclareMathSymbol{|}{\mathord}{symbols}{"6A} %\DeclareMathSymbol{<}{\mathrel}{letters}{"3C} %\DeclareMathSymbol{>}{\mathrel}{letters}{"3E} % \end{macrocode} % % Should all of the following being activated by default? Probably % not. % \begin{macrocode} %\DeclareMathSymbol{`\{}{\mathopen}{symbols}{"66} %\DeclareMathSymbol{`\}}{\mathclose}{symbols}{"67} %\DeclareMathSymbol{`\\}{\mathord}{symbols}{"6E} % \backslash \mathcode`\ ="8000 % \space \mathcode`\'="8000 % ^\prime \mathcode`\_="8000 % \_ % \end{macrocode} % % % \subsubsection{Delimitercodes for characters} % \changes{v2.2q}{1997/01/08} % {Use \cs{DeclareMathDelimiter} to set delimiter codes} % \changes{v2.2u}{1998/04/15} % {Use new syntax for \cs{DeclareMathDelimiter}} % [to be completed] % % Finally, Ini\TeX{} sets all |\delcode| values to -1, except % |\delcode`.=0| % \begin{macrocode} \DeclareMathDelimiter{(}{\mathopen} {operators}{"28}{largesymbols}{"00} \DeclareMathDelimiter{)}{\mathclose}{operators}{"29}{largesymbols}{"01} \DeclareMathDelimiter{[}{\mathopen} {operators}{"5B}{largesymbols}{"02} \DeclareMathDelimiter{]}{\mathclose}{operators}{"5D}{largesymbols}{"03} % \end{macrocode} % % The next two are considered to be relations when not used in the context % of a delimiter! And worse, they do even represent different glyphs when % being used as delimiter and not as delimiter. This is a user level syntax % inherited from plain \TeX{}. Therefore we explicitly redefine the math % symbol definitions for these symbols afterwards. % \changes{v2.2v}{1998/04/17} % {Reinsert symbol defs for \texttt{<} and \texttt{\char62} chars.} % \begin{macrocode} \DeclareMathDelimiter{<}{\mathopen}{symbols}{"68}{largesymbols}{"0A} \DeclareMathDelimiter{>}{\mathclose}{symbols}{"69}{largesymbols}{"0B} \DeclareMathSymbol{<}{\mathrel}{letters}{"3C} \DeclareMathSymbol{>}{\mathrel}{letters}{"3E} % \end{macrocode} % And here is another case where the non-delimiter version produces a % glyph different from the delimiter version. % \changes{v2.2w}{1998/04/18} % {Reinsert symbol def for \texttt{/} char.} % \begin{macrocode} \DeclareMathDelimiter{/}{\mathord}{operators}{"2F}{largesymbols}{"0E} \DeclareMathSymbol{/}{\mathord}{letters}{"3D} % \end{macrocode} % % \begin{macrocode} \DeclareMathDelimiter{|}{\mathord}{symbols}{"6A}{largesymbols}{"0C} % \end{macrocode} % % \begin{macrocode} \expandafter\DeclareMathDelimiter\@backslashchar {\mathord}{symbols}{"6E}{largesymbols}{"0F} % \end{macrocode} % N.B. |{| and |}| should NOT get delcodes; % otherwise parameter grouping fails! % % % \subsection{Symbols accessed via control sequences} % % \subsubsection{Greek letters} % % \begin{macrocode} \DeclareMathSymbol{\alpha}{\mathord}{letters}{"0B} \DeclareMathSymbol{\beta}{\mathord}{letters}{"0C} \DeclareMathSymbol{\gamma}{\mathord}{letters}{"0D} \DeclareMathSymbol{\delta}{\mathord}{letters}{"0E} \DeclareMathSymbol{\epsilon}{\mathord}{letters}{"0F} \DeclareMathSymbol{\zeta}{\mathord}{letters}{"10} \DeclareMathSymbol{\eta}{\mathord}{letters}{"11} \DeclareMathSymbol{\theta}{\mathord}{letters}{"12} \DeclareMathSymbol{\iota}{\mathord}{letters}{"13} \DeclareMathSymbol{\kappa}{\mathord}{letters}{"14} \DeclareMathSymbol{\lambda}{\mathord}{letters}{"15} \DeclareMathSymbol{\mu}{\mathord}{letters}{"16} \DeclareMathSymbol{\nu}{\mathord}{letters}{"17} \DeclareMathSymbol{\xi}{\mathord}{letters}{"18} \DeclareMathSymbol{\pi}{\mathord}{letters}{"19} \DeclareMathSymbol{\rho}{\mathord}{letters}{"1A} \DeclareMathSymbol{\sigma}{\mathord}{letters}{"1B} \DeclareMathSymbol{\tau}{\mathord}{letters}{"1C} \DeclareMathSymbol{\upsilon}{\mathord}{letters}{"1D} \DeclareMathSymbol{\phi}{\mathord}{letters}{"1E} \DeclareMathSymbol{\chi}{\mathord}{letters}{"1F} \DeclareMathSymbol{\psi}{\mathord}{letters}{"20} \DeclareMathSymbol{\omega}{\mathord}{letters}{"21} \DeclareMathSymbol{\varepsilon}{\mathord}{letters}{"22} \DeclareMathSymbol{\vartheta}{\mathord}{letters}{"23} \DeclareMathSymbol{\varpi}{\mathord}{letters}{"24} \DeclareMathSymbol{\varrho}{\mathord}{letters}{"25} \DeclareMathSymbol{\varsigma}{\mathord}{letters}{"26} \DeclareMathSymbol{\varphi}{\mathord}{letters}{"27} \DeclareMathSymbol{\Gamma}{\mathalpha}{operators}{"00} \DeclareMathSymbol{\Delta}{\mathalpha}{operators}{"01} \DeclareMathSymbol{\Theta}{\mathalpha}{operators}{"02} \DeclareMathSymbol{\Lambda}{\mathalpha}{operators}{"03} \DeclareMathSymbol{\Xi}{\mathalpha}{operators}{"04} \DeclareMathSymbol{\Pi}{\mathalpha}{operators}{"05} \DeclareMathSymbol{\Sigma}{\mathalpha}{operators}{"06} \DeclareMathSymbol{\Upsilon}{\mathalpha}{operators}{"07} \DeclareMathSymbol{\Phi}{\mathalpha}{operators}{"08} \DeclareMathSymbol{\Psi}{\mathalpha}{operators}{"09} \DeclareMathSymbol{\Omega}{\mathalpha}{operators}{"0A} % \end{macrocode} % % % \subsubsection{Ordinary symbols} % % \begin{macrocode} \DeclareMathSymbol{\aleph}{\mathord}{symbols}{"40} \DeclareMathSymbol{\imath}{\mathord}{letters}{"7B} \DeclareMathSymbol{\jmath}{\mathord}{letters}{"7C} \DeclareMathSymbol{\ell}{\mathord}{letters}{"60} \DeclareMathSymbol{\wp}{\mathord}{letters}{"7D} \DeclareMathSymbol{\Re}{\mathord}{symbols}{"3C} \DeclareMathSymbol{\Im}{\mathord}{symbols}{"3D} \DeclareMathSymbol{\partial}{\mathord}{letters}{"40} \DeclareMathSymbol{\infty}{\mathord}{symbols}{"31} \DeclareMathSymbol{\prime}{\mathord}{symbols}{"30} \DeclareMathSymbol{\emptyset}{\mathord}{symbols}{"3B} \DeclareMathSymbol{\nabla}{\mathord}{symbols}{"72} \DeclareMathSymbol{\top}{\mathord}{symbols}{"3E} \DeclareMathSymbol{\bot}{\mathord}{symbols}{"3F} \DeclareMathSymbol{\triangle}{\mathord}{symbols}{"34} \DeclareMathSymbol{\forall}{\mathord}{symbols}{"38} \DeclareMathSymbol{\exists}{\mathord}{symbols}{"39} \DeclareMathSymbol{\neg}{\mathord}{symbols}{"3A} % \end{macrocode} % Alias: % \changes{v3.0e}{2019/12/21}{Distangle alias (gh/184)} % \begin{macrocode} % \let\lnot=\neg \DeclareMathSymbol{\lnot}{\mathord}{symbols}{"3A} % \end{macrocode} % % \begin{macrocode} \DeclareMathSymbol{\flat}{\mathord}{letters}{"5B} \DeclareMathSymbol{\natural}{\mathord}{letters}{"5C} \DeclareMathSymbol{\sharp}{\mathord}{letters}{"5D} \DeclareMathSymbol{\clubsuit}{\mathord}{symbols}{"7C} \DeclareMathSymbol{\diamondsuit}{\mathord}{symbols}{"7D} \DeclareMathSymbol{\heartsuit}{\mathord}{symbols}{"7E} \DeclareMathSymbol{\spadesuit}{\mathord}{symbols}{"7F} % \end{macrocode} % % \changes{v3.0c}{2019/08/27}{Various commands made robust throughout % the file} % \begin{macrocode} \DeclareRobustCommand\hbar{{\mathchar'26\mkern-9muh}} \DeclareRobustCommand\surd{{\mathchar"1270}} \DeclareRobustCommand\angle{{\vbox{\ialign{$\m@th\scriptstyle##$\crcr \not\mathrel{\mkern14mu}\crcr \noalign{\nointerlineskip} \mkern2.5mu\leaders\hrule \@height.34pt\hfill\mkern2.5mu\crcr}}}} % \end{macrocode} % % % \subsubsection{Large Operators} % % \begin{macrocode} \DeclareMathSymbol{\coprod}{\mathop}{largesymbols}{"60} \DeclareMathSymbol{\bigvee}{\mathop}{largesymbols}{"57} \DeclareMathSymbol{\bigwedge}{\mathop}{largesymbols}{"56} \DeclareMathSymbol{\biguplus}{\mathop}{largesymbols}{"55} \DeclareMathSymbol{\bigcap}{\mathop}{largesymbols}{"54} \DeclareMathSymbol{\bigcup}{\mathop}{largesymbols}{"53} \DeclareMathSymbol{\intop}{\mathop}{largesymbols}{"52} \DeclareRobustCommand\int{\intop\nolimits} \DeclareMathSymbol{\prod}{\mathop}{largesymbols}{"51} \DeclareMathSymbol{\sum}{\mathop}{largesymbols}{"50} \DeclareMathSymbol{\bigotimes}{\mathop}{largesymbols}{"4E} \DeclareMathSymbol{\bigoplus}{\mathop}{largesymbols}{"4C} \DeclareMathSymbol{\bigodot}{\mathop}{largesymbols}{"4A} \DeclareMathSymbol{\ointop}{\mathop}{largesymbols}{"48} \DeclareRobustCommand\oint{\ointop\nolimits} \DeclareMathSymbol{\bigsqcup}{\mathop}{largesymbols}{"46} \DeclareMathSymbol{\smallint}{\mathop}{symbols}{"73} % \end{macrocode} % % % \subsubsection{Binary symbols} % % \changes{v2.3a}{2004/02/04} % {Added bigtriangle synonyms for stmaryrd} % \begin{macrocode} \DeclareMathSymbol{\triangleleft}{\mathbin}{letters}{"2F} \DeclareMathSymbol{\triangleright}{\mathbin}{letters}{"2E} \DeclareMathSymbol{\bigtriangleup}{\mathbin}{symbols}{"34} \DeclareMathSymbol{\bigtriangledown}{\mathbin}{symbols}{"35} % \end{macrocode} % Alias: % \changes{v3.0e}{2019/12/21}{Distangle alias (gh/184)} % \begin{macrocode} % \let \varbigtriangledown \bigtriangledown % \let \varbigtriangleup \bigtriangleup \DeclareMathSymbol{\varbigtriangleup}{\mathbin}{symbols}{"34} \DeclareMathSymbol{\varbigtriangledown}{\mathbin}{symbols}{"35} % \end{macrocode} % % These last two synonyms are needed because the \textsf{stmaryrd} % package redefines them as Operators. % % \begin{macrocode} \DeclareMathSymbol{\wedge}{\mathbin}{symbols}{"5E} \DeclareMathSymbol{\vee}{\mathbin}{symbols}{"5F} % \end{macrocode} % Alias: % \changes{v3.0e}{2019/12/21}{Distangle alias (gh/184)} % \begin{macrocode} % \let\land=\wedge % \let\lor=\vee \DeclareMathSymbol{\land}{\mathbin}{symbols}{"5E} \DeclareMathSymbol{\lor}{\mathbin}{symbols}{"5F} % \end{macrocode} % % \begin{macrocode} \DeclareMathSymbol{\cap}{\mathbin}{symbols}{"5C} \DeclareMathSymbol{\cup}{\mathbin}{symbols}{"5B} \DeclareMathSymbol{\ddagger}{\mathbin}{symbols}{"7A} \DeclareMathSymbol{\dagger}{\mathbin}{symbols}{"79} \DeclareMathSymbol{\sqcap}{\mathbin}{symbols}{"75} \DeclareMathSymbol{\sqcup}{\mathbin}{symbols}{"74} \DeclareMathSymbol{\uplus}{\mathbin}{symbols}{"5D} \DeclareMathSymbol{\amalg}{\mathbin}{symbols}{"71} \DeclareMathSymbol{\diamond}{\mathbin}{symbols}{"05} \DeclareMathSymbol{\bullet}{\mathbin}{symbols}{"0F} \DeclareMathSymbol{\wr}{\mathbin}{symbols}{"6F} \DeclareMathSymbol{\div}{\mathbin}{symbols}{"04} \DeclareMathSymbol{\odot}{\mathbin}{symbols}{"0C} \DeclareMathSymbol{\oslash}{\mathbin}{symbols}{"0B} \DeclareMathSymbol{\otimes}{\mathbin}{symbols}{"0A} \DeclareMathSymbol{\ominus}{\mathbin}{symbols}{"09} \DeclareMathSymbol{\oplus}{\mathbin}{symbols}{"08} \DeclareMathSymbol{\mp}{\mathbin}{symbols}{"07} \DeclareMathSymbol{\pm}{\mathbin}{symbols}{"06} \DeclareMathSymbol{\circ}{\mathbin}{symbols}{"0E} \DeclareMathSymbol{\bigcirc}{\mathbin}{symbols}{"0D} \DeclareMathSymbol{\setminus}{\mathbin}{symbols}{"6E} \DeclareMathSymbol{\cdot}{\mathbin}{symbols}{"01} \DeclareMathSymbol{\ast}{\mathbin}{symbols}{"03} \DeclareMathSymbol{\times}{\mathbin}{symbols}{"02} \DeclareMathSymbol{\star}{\mathbin}{letters}{"3F} % \end{macrocode} % % % \subsubsection{Relations} % % \begin{macrocode} \DeclareMathSymbol{\propto}{\mathrel}{symbols}{"2F} \DeclareMathSymbol{\sqsubseteq}{\mathrel}{symbols}{"76} \DeclareMathSymbol{\sqsupseteq}{\mathrel}{symbols}{"77} \DeclareMathSymbol{\parallel}{\mathrel}{symbols}{"6B} \DeclareMathSymbol{\mid}{\mathrel}{symbols}{"6A} \DeclareMathSymbol{\dashv}{\mathrel}{symbols}{"61} \DeclareMathSymbol{\vdash}{\mathrel}{symbols}{"60} \DeclareMathSymbol{\nearrow}{\mathrel}{symbols}{"25} \DeclareMathSymbol{\searrow}{\mathrel}{symbols}{"26} \DeclareMathSymbol{\nwarrow}{\mathrel}{symbols}{"2D} \DeclareMathSymbol{\swarrow}{\mathrel}{symbols}{"2E} \DeclareMathSymbol{\Leftrightarrow}{\mathrel}{symbols}{"2C} \DeclareMathSymbol{\Leftarrow}{\mathrel}{symbols}{"28} \DeclareMathSymbol{\Rightarrow}{\mathrel}{symbols}{"29} \DeclareRobustCommand\neq{\not=} % \end{macrocode} % As \cs{neq} is robust we should not use \cs{let} to define % \cs{ne} as then it would change if \cs{neq} changes. % \changes{v3.0d}{2019/09/21}{Distangle alias (gh/184)} % \begin{macrocode} \DeclareRobustCommand\ne{\not=} % \end{macrocode} % It would ok to use \cs{let} for those declared by % \cs{DeclareMathSymbol} but for a cleaner interface we avoid it % always (just in case the internals change). % \begin{macrocode} \DeclareMathSymbol{\leq}{\mathrel}{symbols}{"14} \DeclareMathSymbol{\geq}{\mathrel}{symbols}{"15} % \end{macrocode} % Alias: % \changes{v3.0e}{2019/12/21}{Distangle alias (gh/184)} % \begin{macrocode} % \let\le=\leq % \let\ge=\geq \DeclareMathSymbol{\le}{\mathrel}{symbols}{"14} \DeclareMathSymbol{\ge}{\mathrel}{symbols}{"15} % \end{macrocode} % % \begin{macrocode} \DeclareMathSymbol{\succ}{\mathrel}{symbols}{"1F} \DeclareMathSymbol{\prec}{\mathrel}{symbols}{"1E} \DeclareMathSymbol{\approx}{\mathrel}{symbols}{"19} \DeclareMathSymbol{\succeq}{\mathrel}{symbols}{"17} \DeclareMathSymbol{\preceq}{\mathrel}{symbols}{"16} \DeclareMathSymbol{\supset}{\mathrel}{symbols}{"1B} \DeclareMathSymbol{\subset}{\mathrel}{symbols}{"1A} \DeclareMathSymbol{\supseteq}{\mathrel}{symbols}{"13} \DeclareMathSymbol{\subseteq}{\mathrel}{symbols}{"12} \DeclareMathSymbol{\in}{\mathrel}{symbols}{"32} \DeclareMathSymbol{\ni}{\mathrel}{symbols}{"33} % \end{macrocode} % Alias: % \changes{v3.0e}{2019/12/21}{Distangle alias (gh/184)} % \begin{macrocode} % \let\owns=\ni \DeclareMathSymbol{\owns}{\mathrel}{symbols}{"33} % \end{macrocode} % % \begin{macrocode} \DeclareMathSymbol{\gg}{\mathrel}{symbols}{"1D} \DeclareMathSymbol{\ll}{\mathrel}{symbols}{"1C} \DeclareMathSymbol{\not}{\mathrel}{symbols}{"36} \DeclareMathSymbol{\leftrightarrow}{\mathrel}{symbols}{"24} \DeclareMathSymbol{\leftarrow}{\mathrel}{symbols}{"20} \DeclareMathSymbol{\rightarrow}{\mathrel}{symbols}{"21} % \end{macrocode} % Alias: % \changes{v3.0e}{2019/12/21}{Distangle alias (gh/184)} % \begin{macrocode} % \let\gets=\leftarrow % \let\to=\rightarrow \DeclareMathSymbol{\gets}{\mathrel}{symbols}{"20} \DeclareMathSymbol{\to}{\mathrel}{symbols}{"21} % \end{macrocode} % % \begin{macrocode} \DeclareMathSymbol{\mapstochar}{\mathrel}{symbols}{"37} \DeclareRobustCommand\mapsto{\mapstochar\rightarrow} \DeclareMathSymbol{\sim}{\mathrel}{symbols}{"18} \DeclareMathSymbol{\simeq}{\mathrel}{symbols}{"27} \DeclareMathSymbol{\perp}{\mathrel}{symbols}{"3F} \DeclareMathSymbol{\equiv}{\mathrel}{symbols}{"11} \DeclareMathSymbol{\asymp}{\mathrel}{symbols}{"10} \DeclareMathSymbol{\smile}{\mathrel}{letters}{"5E} \DeclareMathSymbol{\frown}{\mathrel}{letters}{"5F} \DeclareMathSymbol{\leftharpoonup}{\mathrel}{letters}{"28} \DeclareMathSymbol{\leftharpoondown}{\mathrel}{letters}{"29} \DeclareMathSymbol{\rightharpoonup}{\mathrel}{letters}{"2A} \DeclareMathSymbol{\rightharpoondown}{\mathrel}{letters}{"2B} % \end{macrocode} % % Here cometh much profligate robustification of math constructs. % Warning: some of these commands may become non-robust if an % AMS package is loaded. % % Further potential problems: some math font packages may make % unfortunate assumptions about some of these definitions that are % not true of the robust versions we need. % \changes{v2.3}{2004/02/02} % {Many things from here on made robust} % \begin{macrocode} \DeclareRobustCommand \cong{\mathrel{\mathpalette\@vereq\sim}} % congruence sign \def\@vereq#1#2{\lower.5\p@\vbox{\lineskiplimit\maxdimen\lineskip-.5\p@ \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr=\crcr}}} \DeclareRobustCommand \notin{\mathrel{\m@th\mathpalette\c@ncel\in}} \def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}} \DeclareRobustCommand \rightleftharpoons{\mathrel{\mathpalette\rlh@{}}} \def\rlh@#1{\vcenter{\m@th\hbox{\ooalign{\raise2pt \hbox{$#1\rightharpoonup$}\crcr $#1\leftharpoondown$}}}} \DeclareRobustCommand \doteq{\buildrel\textstyle.\over=} % \end{macrocode} % % \subsubsection{Arrows} % % \begin{macrocode} \DeclareRobustCommand \joinrel{\mathrel{\mkern-3mu}} \DeclareRobustCommand \relbar{\mathrel{\smash-}} % \smash, because - % has the same height as + % \end{macrocode} % In contrast to \texttt{plain.tex} |\Relbar| got braces around the % equal sign to guard against it being ``math active'' expanding to % |\futurelet...|. This might be the case when packages are % implementing shorthands for math, e.g. |=>| meaning |\Rightarrow| % etc. It would actually be better not to use |=| in such % definitions but instead define something like |\mathequalsign| % and use this. However we can't do this now as it would break % other math layouts where characters are in different places % (since those wouldn't know about the need for a new command name). % \changes{v2.2z}{2001/06/04}{Guard against math active equal sign in % \cs{Relbar} (pr/3333)} % \begin{macrocode} \DeclareRobustCommand \Relbar{\mathrel{=}} \DeclareMathSymbol{\lhook}{\mathrel}{letters}{"2C} \DeclareRobustCommand\hookrightarrow{\lhook\joinrel\rightarrow} \DeclareMathSymbol{\rhook}{\mathrel}{letters}{"2D} \DeclareRobustCommand\hookleftarrow{\leftarrow\joinrel\rhook} \DeclareRobustCommand \bowtie{\mathrel\triangleright\joinrel\mathrel\triangleleft} % \end{macrocode} % % \changes{v2.2z}{2001/06/04}{Guard against math active equal and pipe % sign in \cs{models} (pr/3333)} % \begin{macrocode} \DeclareRobustCommand \models{\mathrel{|}\joinrel\Relbar} \DeclareRobustCommand \Longrightarrow{\Relbar\joinrel\Rightarrow} % \end{macrocode} % % LaTeX Change: |\longrightarrow| and |\longleftarrow| redefined to make % then robust. % \begin{macrocode} \DeclareRobustCommand\longrightarrow {\relbar\joinrel\rightarrow} \DeclareRobustCommand\longleftarrow {\leftarrow\joinrel\relbar} % \end{macrocode} % % \begin{macrocode} \DeclareRobustCommand \Longleftarrow{\Leftarrow\joinrel\Relbar} \DeclareRobustCommand \longmapsto{\mapstochar\longrightarrow} \DeclareRobustCommand \longleftrightarrow{\leftarrow\joinrel\rightarrow} \DeclareRobustCommand \Longleftrightarrow{\Leftarrow\joinrel\Rightarrow} \DeclareRobustCommand \iff{\;\Longleftrightarrow\;} % \end{macrocode} % % % \subsubsection{Punctuation symbols} % % \begin{macrocode} \DeclareMathSymbol{\ldotp}{\mathpunct}{letters}{"3A} \DeclareMathSymbol{\cdotp}{\mathpunct}{symbols}{"01} \DeclareMathSymbol{\colon}{\mathpunct}{operators}{"3A} % \end{macrocode} % % % This is commented out, since |\ldots| is now defined in ltoutenc.dtx. % \begin{macrocode} %\def\@ldots{\mathinner{\ldotp\ldotp\ldotp}} %\DeclareRobustCommand\ldots % {\relax\ifmmode\@ldots\else\mbox{$\m@th\@ldots\,$}\fi} % \end{macrocode} % % \begin{macrocode} \DeclareRobustCommand \cdots{\mathinner{\cdotp\cdotp\cdotp}} \DeclareRobustCommand \vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@ \kern6\p@\hbox{.}\hbox{.}\hbox{.}}} \DeclareRobustCommand \ddots{\mathinner{\mkern1mu\raise7\p@ \vbox{\kern7\p@\hbox{.}}\mkern2mu \raise4\p@\hbox{.}\mkern2mu\raise\p@\hbox{.}\mkern1mu}} % \end{macrocode} % % % \subsubsection{Math accents} % % \begin{macrocode} \DeclareMathAccent{\acute}{\mathalpha}{operators}{"13} \DeclareMathAccent{\grave}{\mathalpha}{operators}{"12} \DeclareMathAccent{\ddot}{\mathalpha}{operators}{"7F} \DeclareMathAccent{\tilde}{\mathalpha}{operators}{"7E} \DeclareMathAccent{\bar}{\mathalpha}{operators}{"16} \DeclareMathAccent{\breve}{\mathalpha}{operators}{"15} \DeclareMathAccent{\check}{\mathalpha}{operators}{"14} \DeclareMathAccent{\hat}{\mathalpha}{operators}{"5E} \DeclareMathAccent{\vec}{\mathord}{letters}{"7E} \DeclareMathAccent{\dot}{\mathalpha}{operators}{"5F} \DeclareMathAccent{\widetilde}{\mathord}{largesymbols}{"65} \DeclareMathAccent{\widehat}{\mathord}{largesymbols}{"62} % \end{macrocode} % For some reason plain \TeX{} never bothered to provide % a ring accent in math (although it is available in the fonts), % but since we got a request for it here we go: % \changes{v2.2t}{1998/04/11}{Added \cs{mathring} accent (pr2785)} % \begin{macrocode} \DeclareMathAccent{\mathring}{\mathalpha}{operators}{"17} % \end{macrocode} % % % \subsubsection{Radicals} % % \changes{v2.2o}{1996/05/17}{\cs{@@sqrt} removed, at last} % \begin{macrocode} \DeclareMathRadical{\sqrtsign}{symbols}{"70}{largesymbols}{"70} % \end{macrocode} % % % \subsubsection{Over and under something, etc} % % \begin{macrocode} \DeclareRobustCommand\overrightarrow[1]{\vbox{\m@th\ialign{##\crcr \rightarrowfill\crcr\noalign{\kern-\p@\nointerlineskip} $\hfil\displaystyle{#1}\hfil$\crcr}}} \DeclareRobustCommand\overleftarrow[1]{\vbox{\m@th\ialign{##\crcr \leftarrowfill\crcr\noalign{\kern-\p@\nointerlineskip}% $\hfil\displaystyle{#1}\hfil$\crcr}}} \DeclareRobustCommand\overbrace[1] {\mathop{\vbox{\m@th\ialign{##\crcr\noalign{\kern3\p@}% \downbracefill\crcr\noalign{\kern3\p@\nointerlineskip}% $\hfil\displaystyle{#1}\hfil$\crcr}}}\limits} \DeclareRobustCommand\underbrace[1]{\mathop{\vtop{\m@th\ialign{##\crcr $\hfil\displaystyle{#1}\hfil$\crcr \noalign{\kern3\p@\nointerlineskip}% \upbracefill\crcr\noalign{\kern3\p@}}}}\limits} % \end{macrocode} % (quite a waste of tokens, IMHO --- Frank) % \begin{macrocode} \DeclareRobustCommand\skew[3] {{\muskip\z@#1mu\divide\muskip\z@\tw@ \mkern\muskip\z@ #2{\mkern-\muskip\z@{#3}\mkern\muskip\z@}\mkern-\muskip\z@}{}} % \end{macrocode} % % \changes{v2.2n}{1995/11/21}{Incorporate changed figures, % as in plain.tex} % \begin{macrocode} \DeclareRobustCommand\rightarrowfill{$\m@th\smash-\mkern-7mu% \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill \mkern-7mu\mathord\rightarrow$} \DeclareRobustCommand\leftarrowfill{$\m@th\mathord\leftarrow\mkern-7mu% \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill \mkern-7mu\smash-$} \DeclareMathSymbol{\braceld}{\mathord}{largesymbols}{"7A} \DeclareMathSymbol{\bracerd}{\mathord}{largesymbols}{"7B} \DeclareMathSymbol{\bracelu}{\mathord}{largesymbols}{"7C} \DeclareMathSymbol{\braceru}{\mathord}{largesymbols}{"7D} \DeclareRobustCommand\downbracefill{$\m@th \setbox\z@\hbox{$\braceld$}% \braceld\leaders\vrule \@height\ht\z@ \@depth\z@\hfill\braceru \bracelu\leaders\vrule \@height\ht\z@ \@depth\z@\hfill\bracerd$} \DeclareRobustCommand\upbracefill{$\m@th \setbox\z@\hbox{$\braceld$}% \bracelu\leaders\vrule \@height\ht\z@ \@depth\z@\hfill\bracerd \braceld\leaders\vrule \@height\ht\z@ \@depth\z@\hfill\braceru$} % \end{macrocode} % % \subsubsection{Delimiters} % % \begin{macrocode} \DeclareMathDelimiter{\lmoustache} % top from (, bottom from ) {\mathopen}{largesymbols}{"7A}{largesymbols}{"40} \DeclareMathDelimiter{\rmoustache} % top from ), bottom from ( {\mathclose}{largesymbols}{"7B}{largesymbols}{"41} \DeclareMathDelimiter{\arrowvert} % arrow without arrowheads {\mathord}{symbols}{"6A}{largesymbols}{"3C} \DeclareMathDelimiter{\Arrowvert} % double arrow without arrowheads {\mathord}{symbols}{"6B}{largesymbols}{"3D} \DeclareMathDelimiter{\Vert} {\mathord}{symbols}{"6B}{largesymbols}{"0D} % \end{macrocode} % \cs{DeclareMathDelimiter} produces a command that is robust (with % an internal macro containing the payload) so we should not use % \cs{let} for making an alias % \changes{v3.0d}{2019/09/21}{Distangle alias (gh/184)} % \begin{macrocode} %\let\|=\Vert \DeclareMathDelimiter{\|} {\mathord}{symbols}{"6B}{largesymbols}{"0D} % \end{macrocode} % % \begin{macrocode} \DeclareMathDelimiter{\vert} {\mathord}{symbols}{"6A}{largesymbols}{"0C} \DeclareMathDelimiter{\uparrow} {\mathrel}{symbols}{"22}{largesymbols}{"78} \DeclareMathDelimiter{\downarrow} {\mathrel}{symbols}{"23}{largesymbols}{"79} \DeclareMathDelimiter{\updownarrow} {\mathrel}{symbols}{"6C}{largesymbols}{"3F} \DeclareMathDelimiter{\Uparrow} {\mathrel}{symbols}{"2A}{largesymbols}{"7E} \DeclareMathDelimiter{\Downarrow} {\mathrel}{symbols}{"2B}{largesymbols}{"7F} \DeclareMathDelimiter{\Updownarrow} {\mathrel}{symbols}{"6D}{largesymbols}{"77} \DeclareMathDelimiter{\backslash} % for double coset G\backslash H {\mathord}{symbols}{"6E}{largesymbols}{"0F} \DeclareMathDelimiter{\rangle} {\mathclose}{symbols}{"69}{largesymbols}{"0B} \DeclareMathDelimiter{\langle} {\mathopen}{symbols}{"68}{largesymbols}{"0A} \DeclareMathDelimiter{\rbrace} {\mathclose}{symbols}{"67}{largesymbols}{"09} \DeclareMathDelimiter{\lbrace} {\mathopen}{symbols}{"66}{largesymbols}{"08} \DeclareMathDelimiter{\rceil} {\mathclose}{symbols}{"65}{largesymbols}{"07} \DeclareMathDelimiter{\lceil} {\mathopen}{symbols}{"64}{largesymbols}{"06} \DeclareMathDelimiter{\rfloor} {\mathclose}{symbols}{"63}{largesymbols}{"05} \DeclareMathDelimiter{\lfloor} {\mathopen}{symbols}{"62}{largesymbols}{"04} % \end{macrocode} % % \begin{macro}{\lgroup} % \begin{macro}{\rgroup} % \begin{macro}{\bracevert} % There are three plain \TeX{} delimiters which are not fully % supported by NFSS, since they partly point into a bold cmr font. % Allocating a full symbol font, just to have three delimiters % seems a bit too much given the limited space available. For this % reason only the extensible sizes are supported. If this is not % desired one can use, without losing portability, define |\mathbf| % and |\mathtt| as font symbol alphabet (setting up % \texttt{cmr/bx/n} and \texttt{cmtt/m/n} as symbol fonts first) % and modify the delimiter declarations to point with their % small variant to those symbol fonts. (This is done in % \texttt{oldlfont.dtx} so look there for examples.) % \begin{macrocode} \DeclareMathDelimiter{\lgroup} % extensible ( with sharper tips {\mathopen}{largesymbols}{"3A}{largesymbols}{"3A} \DeclareMathDelimiter{\rgroup} % extensible ) with sharper tips {\mathclose}{largesymbols}{"3B}{largesymbols}{"3B} \DeclareMathDelimiter{\bracevert} % the vertical bar that extends braces {\mathord}{largesymbols}{"3E}{largesymbols}{"3E} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \subsection{Math versions of text commands} % % \changes{v2.2k}{1995/06/05}{Moved math commands from ltoutenc.dtx.} % % The |\mathunderscore| here is really a text definition, so it has % been put back into |ltoutenc.dtx| (by Chris, 30/04/97) and should % be removed from here. % % These symbols are the math versions of text commands such as |\P|, % |\$|, etc. % \begin{macro}{\mathparagraph} % \changes{v2.2q}{1997/01/08} % {Define using \cs{DeclareMathSymbol}} % \begin{macro}{\mathsection} % \begin{macro}{\mathdollar} % \begin{macro}{\mathsterling} % \begin{macro}{\mathunderscore} % These math symbols are not in plain \TeX. % \begin{macrocode} \DeclareMathSymbol{\mathparagraph}{\mathord}{symbols}{"7B} \DeclareMathSymbol{\mathsection}{\mathord}{symbols}{"78} \DeclareMathSymbol{\mathdollar}{\mathord}{operators}{"24} % \end{macrocode} % % \begin{macrocode} \DeclareRobustCommand\mathsterling{\mathit{\mathchar"7024}} \DeclareRobustCommand\mathunderscore{\kern.06em\vbox{\hrule\@width.3em}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\mathellipsis} % This is plain \TeX's |\ldots|. % \begin{macrocode} \DeclareRobustCommand\mathellipsis{\mathinner{\ldotp\ldotp\ldotp}}% % \end{macrocode} % \end{macro} % % \subsection{Other special functions and parameters} % % \subsubsection{Biggggg} % % \changes{v3.0b}{2018/09/24}{Start LR-mode if necessary (git/49)} % \begin{macrocode} % %<*math|latexrelease> %\IncludeInRelease{2018/12/01}% % {\Big}{Start LR-mode}% \DeclareRobustCommand\big[1]{\leavevmode@ifvmode {\hbox{$\left#1\vbox to8.5\p@{}\right.\n@space$}}} \DeclareRobustCommand\Big[1]{\leavevmode@ifvmode {\hbox{$\left#1\vbox to11.5\p@{}\right.\n@space$}}} \DeclareRobustCommand\bigg[1]{\leavevmode@ifvmode {\hbox{$\left#1\vbox to14.5\p@{}\right.\n@space$}}} \DeclareRobustCommand\Bigg[1]{\leavevmode@ifvmode {\hbox{$\left#1\vbox to17.5\p@{}\right.\n@space$}}} % %\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% % {\Big}{Start LR-mode}% %\def\big#1{{\hbox{$\left#1\vbox to8.5\p@{}\right.\n@space$}}} %\def\Big#1{{\hbox{$\left#1\vbox to11.5\p@{}\right.\n@space$}}} %\def\bigg#1{{\hbox{$\left#1\vbox to14.5\p@{}\right.\n@space$}}} %\def\Bigg#1{{\hbox{$\left#1\vbox to17.5\p@{}\right.\n@space$}}} %\EndIncludeInRelease %<*math> % \end{macrocode} % % \begin{macrocode} \def\n@space{\nulldelimiterspace\z@ \m@th} % \end{macrocode} % % % % \subsubsection{The log-like functions} % % \begin{macro}{\operator@font} % The |\operator@font| determines the symbol font used for log-like % functions. % \begin{macrocode} \def\operator@font{\mathgroup\symoperators} % \end{macrocode} % \end{macro} % % % \subsubsection{Parameters} % % \begin{macrocode} \thinmuskip=3mu \medmuskip=4mu plus 2mu minus 4mu \thickmuskip=5mu plus 5mu % \end{macrocode} % % % This finishes the low-level setup in \texttt{fontmath.ltx}. % \begin{macrocode} % % \end{macrocode} % % % \section{Default cfg files} % % We provide default \texttt{cfg} files here to ensure that % on installations that search large file trees we do not pick up % some strange customisation files from somewhere. % \changes{v2.2y}{2001/06/02}{Provide default cfg files (pr/3264)} % \begin{macrocode} %<*cfgtext|cfgmath|cfgprel> %% %% %% %% Load the standard setup: %% %<+cfgtext>\input{fonttext.ltx} %<+cfgmath>\input{fontmath.ltx} %<+cfgprel>\input{preload.ltx} %% %% Small changes could go here; see documentation in cfgguide.tex for %% allowed modifications. %% %% In particular it is not allowed to misuse this configuration file %% to modify internal LaTeX commands! %% %% If you use this file as the basis for configuration please change %% the \ProvidesFile lines to clearly identify your modification, e.g., %% %<+cfgtext>%% \ProvidesFile{fonttext.cfg}[2001/06/01 %<+cfgmath>%% \ProvidesFile{fonttext.cfg}[2001/06/01 %<+cfgprel>%% \ProvidesFile{preload.cfg}[2001/06/01 %% Customised local font setup] %% %% % % \end{macrocode} % % \Finale % \endinput