%%^^A%% um-code-compat.dtx -- part of UNICODE-MATH %%^^A%% Compatibility with 3rd party packages. % \section{Compatibility} % % \begin{macrocode} %<*package> % \end{macrocode} % % \begin{macro}{\@@_check_and_fix:NNnnn} % \darg{command} % \darg{factory command} % \darg{parameter text} % \darg{expected replacement text} % \darg{new replacement text} % Tries to patch \meta{command}. % If \meta{command} is undefined, do nothing. % Otherwise it must be a macro with the given \meta{parameter text} and \meta{expected replacement text}, created by the given \meta{factory command} or equivalent. % In this case it will be overwritten using the \meta{parameter text} and the \meta{new replacement text for \LuaTeX} or the \meta{new replacement text for \XeTeX}, depending on the engine. % Otherwise issue a warning and don’t overwrite. % \begin{macrocode} \cs_new_protected_nopar:Nn \@@_check_and_fix:NNnnn { \cs_if_exist:NT #1 { \token_if_macro:NTF #1 { \group_begin: #2 \@@_tmpa:w #3 { #4 } \cs_if_eq:NNTF #1 \@@_tmpa:w { \msg_info:nnx { unicode-math } { patch-macro } { \token_to_str:N #1 } \group_end: #2 #1 #3 { #5 } } { \msg_warning:nnxxx { unicode-math } { wrong-meaning } { \token_to_str:N #1 } { \token_to_meaning:N #1 } { \token_to_meaning:N \@@_tmpa:w } \group_end: } } { \msg_warning:nnx { unicode-math } { macro-expected } { \token_to_str:N #1 } } } } % \end{macrocode} % \end{macro} % % \section{Patching/augmenting 3rd-party packages} % % \subsection{\pkg{url}} % Here we need to get \pkg{url} in a state such that % when it switches to math mode and enters \ascii\ characters, the maths % setup (i.e., \pkg{unicode-math}) doesn't remap the symbols into Plane 1. % Which is what \cs{symliteral} is intended to do. % This is the same as writing, e.g., |\def\UrlFont{\ttfamily\@@_switch_to:n{literal}}| % but activates automatically so documents that might change the \cs{url} % font through the standard interface still work correctly. % \begin{macrocode} \AtEndOfPackageFile * {url} { \tl_put_left:Nn \Url@FormatString { \@@_switch_to:n {literal} } \tl_put_right:Nn \UrlSpecials { \do \` { \mathchar`\` } \do \' { \mathchar`\' } \do \$ { \mathchar`\$ } \do \& { \mathchar`\& } } } % \end{macrocode} % % % \subsection{\pkg{mathtools}} % % \pkg{mathtools}’s |\cramped| command and others that make use of its internal version use an incorrect font dimension. % % The \XeTeX\ version is pretty similar to the legacy version, only using the correct font dimensions. % Note we used `\verb|\XeTeXradical|' with the family 255 to be almost sure % that the radical rule width is not set. Former use of `\verb|\newfam|' had an % upsetting effect on legacy math alphabets. % \begin{macrocode} %<*XE> \AtEndOfPackageFile * { mathtools } { \@@_check_and_fix:NNnnn \MT_cramped_internal:Nn \cs_set_nopar:Npn { #1 #2 } { \sbox \z@ { $ \m@th #1 \nulldelimiterspace = \z@ \radical \z@ { #2 } $ } \ifx #1 \displaystyle \dimen@ = \fontdimen 8 \textfont 3 \advance \dimen@ .25 \fontdimen 5 \textfont 2 \else \dimen@ = 1.25 \fontdimen 8 \ifx #1 \textstyle \textfont \else \ifx #1 \scriptstyle \scriptfont \else \scriptscriptfont \fi \fi 3 \fi \advance \dimen@ -\ht\z@ \ht\z@ = -\dimen@ \box\z@ } { \hbox_set:Nn \l_tmpa_box { \color@setgroup \c_math_toggle_token \m@th #1 \dim_zero:N \nulldelimiterspace \XeTeXradical 255 ~ 0 ~ { #2 } \c_math_toggle_token \color@endgroup } \box_set_ht:Nn \l_tmpa_box { \box_ht:N \l_tmpa_box - \@@_radical_vgap:N #1 } \box_use_drop:N \l_tmpa_box } } % % \end{macrocode} % % \begin{macro}{\overbracket} % \begin{macro}{\underbracket} % \pkg{mathtools}’s |\overbracket| and |\underbracket| take optional % arguments and are defined in terms of rules, so we keep them, and rename % ours to |\Uoverbracket| and |\Uunderbracket|. % % Original definition used the height of |\braceld| which is not available % with Unicode fonts, so we are hard coding the $5/18$ex suggested by % \pkg{mathtools}’s documentation. % \begin{macrocode} \AtEndOfPackageFile * { mathtools } { \cs_set_eq:NN \MToverbracket \overbracket \cs_set_eq:NN \MTunderbracket \underbracket \AtBeginDocument { \msg_warning:nn { unicode-math } { mathtools-overbracket } \cs_set:Npn \downbracketfill #1 #2 { \tl_set:Nn \l_MT_bracketheight_fdim {.27ex} \downbracketend {#1} {#2} \leaders \vrule \@height #1 \@depth \z@ \hfill \downbracketend {#1} {#2} } \cs_set:Npn \upbracketfill #1 #2 { \tl_set:Nn \l_MT_bracketheight_fdim {.27ex} \upbracketend {#1} {#2} \leaders \vrule \@height \z@ \@depth #1 \hfill \upbracketend {#1} {#2} } \cs_set_eq:NN \Uoverbracket \overbracket \cs_set_eq:NN \Uunderbracket \underbracket \cs_set_eq:NN \overbracket \MToverbracket \cs_set_eq:NN \underbracket \MTunderbracket } } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\dblcolon} % \begin{macro}{\coloneqq} % \begin{macro}{\Coloneqq} % \begin{macro}{\eqqcolon} % \pkg{mathtools} defines several commands as combinations of colons and % other characters, but with meanings incompatible to \pkg{unicode-math}. % Thus we issue a warning. Because \pkg{mathtools} uses % \cmd{\providecommand} \cmd{\AtBeginDocument}, we can just define the % offending commands here. % \begin{macrocode} \AtEndOfPackageFile * { mathtools } { \msg_warning:nn { unicode-math } { mathtools-colon } \NewDocumentCommand \dblcolon { } { \Colon } \NewDocumentCommand \coloneqq { } { \coloneq } \NewDocumentCommand \Coloneqq { } { \Coloneq } \NewDocumentCommand \eqqcolon { } { \eqcolon } } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \subsection{\pkg{colonequals}} % % \begin{macro}{\ratio} % \begin{macro}{\coloncolon} % \begin{macro}{\minuscolon} % \begin{macro}{\colonequals} % \begin{macro}{\equalscolon} % \begin{macro}{\coloncolonequals} % Similarly to \pkg{mathtools}, the \pkg{colonequals} defines several colon % combinations. Fortunately there are no name clashes, so we can just % overwrite their definitions. % \begin{macrocode} \AtEndOfPackageFile * { colonequals } { \msg_warning:nn { unicode-math } { colonequals } \RenewDocumentCommand \ratio { } { \mathratio } \RenewDocumentCommand \coloncolon { } { \Colon } \RenewDocumentCommand \minuscolon { } { \dashcolon } \RenewDocumentCommand \colonequals { } { \coloneq } \RenewDocumentCommand \equalscolon { } { \eqcolon } \RenewDocumentCommand \coloncolonequals { } { \Coloneq } } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macrocode} % % \end{macrocode} \endinput % /© % % ------------------------------------------------ % The UNICODE-MATH package % ------------------------------------------------ % This package is free software and may be redistributed and/or modified under % the conditions of the LaTeX Project Public License, version 1.3c or higher % (your choice): . % ------------------------------------------------ % Copyright 2006-2019 Will Robertson, LPPL "maintainer" % Copyright 2010-2017 Philipp Stephani % Copyright 2011-2017 Joseph Wright % Copyright 2012-2015 Khaled Hosny % ------------------------------------------------ % % ©/