%% %% This is file `babel.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% babel.dtx (with options: `package') %% %% %% Copyright (C) 2012-2021 Javier Bezos and Johannes L. Braams. %% Copyright (C) 1989-2012 Johannes L. Braams and %% any individual authors listed elsewhere in this file. %% All rights reserved. %% %% This file is part of the Babel system. %% -------------------------------------- %% %% It 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 2003/12/01 or later. %% %% This work has the LPPL maintenance status "maintained". %% %% The Current Maintainer of this work is Javier Bezos. %% %% 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. %% \NeedsTeXFormat{LaTeX2e}[2005/12/01] \ProvidesPackage{babel}[2021/02/22 3.54 The Babel package] \@ifpackagewith{babel}{debug} {\providecommand\bbl@trace[1]{\message{^^J[ #1 ]}}% \let\bbl@debug\@firstofone \ifx\directlua\@undefined\else \directlua{ Babel = Babel or {} Babel.debug = true }% \fi} {\providecommand\bbl@trace[1]{}% \let\bbl@debug\@gobble \ifx\directlua\@undefined\else \directlua{ Babel = Babel or {} Babel.debug = false }% \fi} \bbl@trace{Basic macros} \def\bbl@stripslash{\expandafter\@gobble\string} \def\bbl@add#1#2{% \bbl@ifunset{\bbl@stripslash#1}% {\def#1{#2}}% {\expandafter\def\expandafter#1\expandafter{#1#2}}} \def\bbl@xin@{\@expandtwoargs\in@} \def\bbl@csarg#1#2{\expandafter#1\csname bbl@#2\endcsname}% \def\bbl@cs#1{\csname bbl@#1\endcsname} \def\bbl@cl#1{\csname bbl@#1@\languagename\endcsname} \def\bbl@loop#1#2#3{\bbl@@loop#1{#3}#2,\@nnil,} \def\bbl@loopx#1#2{\expandafter\bbl@loop\expandafter#1\expandafter{#2}} \def\bbl@@loop#1#2#3,{% \ifx\@nnil#3\relax\else \def#1{#3}#2\bbl@afterfi\bbl@@loop#1{#2}% \fi} \def\bbl@for#1#2#3{\bbl@loopx#1{#2}{\ifx#1\@empty\else#3\fi}} \def\bbl@add@list#1#2{% \edef#1{% \bbl@ifunset{\bbl@stripslash#1}% {}% {\ifx#1\@empty\else#1,\fi}% #2}} \long\def\bbl@afterelse#1\else#2\fi{\fi#1} \long\def\bbl@afterfi#1\fi{\fi#1} \def\bbl@exp#1{% \begingroup \let\\\noexpand \def\<##1>{\expandafter\noexpand\csname##1\endcsname}% \edef\bbl@exp@aux{\endgroup#1}% \bbl@exp@aux} \def\bbl@tempa#1{% \long\def\bbl@trim##1##2{% \futurelet\bbl@trim@a\bbl@trim@c##2\@nil\@nil#1\@nil\relax{##1}}% \def\bbl@trim@c{% \ifx\bbl@trim@a\@sptoken \expandafter\bbl@trim@b \else \expandafter\bbl@trim@b\expandafter#1% \fi}% \long\def\bbl@trim@b#1##1 \@nil{\bbl@trim@i##1}} \bbl@tempa{ } \long\def\bbl@trim@i#1\@nil#2\relax#3{#3{#1}} \long\def\bbl@trim@def#1{\bbl@trim{\def#1}} \begingroup \gdef\bbl@ifunset#1{% \expandafter\ifx\csname#1\endcsname\relax \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi} \bbl@ifunset{ifcsname}% {}% {\gdef\bbl@ifunset#1{% \ifcsname#1\endcsname \expandafter\ifx\csname#1\endcsname\relax \bbl@afterelse\expandafter\@firstoftwo \else \bbl@afterfi\expandafter\@secondoftwo \fi \else \expandafter\@firstoftwo \fi}} \endgroup \def\bbl@ifblank#1{% \bbl@ifblank@i#1\@nil\@nil\@secondoftwo\@firstoftwo\@nil} \long\def\bbl@ifblank@i#1#2\@nil#3#4#5\@nil{#4} \def\bbl@ifset#1#2#3{% \bbl@ifunset{#1}{#3}{\bbl@exp{\\\bbl@ifblank{#1}}{#3}{#2}}} \def\bbl@forkv#1#2{% \def\bbl@kvcmd##1##2##3{#2}% \bbl@kvnext#1,\@nil,} \def\bbl@kvnext#1,{% \ifx\@nil#1\relax\else \bbl@ifblank{#1}{}{\bbl@forkv@eq#1=\@empty=\@nil{#1}}% \expandafter\bbl@kvnext \fi} \def\bbl@forkv@eq#1=#2=#3\@nil#4{% \bbl@trim@def\bbl@forkv@a{#1}% \bbl@trim{\expandafter\bbl@kvcmd\expandafter{\bbl@forkv@a}}{#2}{#4}} \def\bbl@vforeach#1#2{% \def\bbl@forcmd##1{#2}% \bbl@fornext#1,\@nil,} \def\bbl@fornext#1,{% \ifx\@nil#1\relax\else \bbl@ifblank{#1}{}{\bbl@trim\bbl@forcmd{#1}}% \expandafter\bbl@fornext \fi} \def\bbl@foreach#1{\expandafter\bbl@vforeach\expandafter{#1}} \def\bbl@replace#1#2#3{% in #1 -> repl #2 by #3 \toks@{}% \def\bbl@replace@aux##1#2##2#2{% \ifx\bbl@nil##2% \toks@\expandafter{\the\toks@##1}% \else \toks@\expandafter{\the\toks@##1#3}% \bbl@afterfi \bbl@replace@aux##2#2% \fi}% \expandafter\bbl@replace@aux#1#2\bbl@nil#2% \edef#1{\the\toks@}} \ifx\detokenize\@undefined\else % Unused macros if old Plain TeX \bbl@exp{\def\\\bbl@parsedef##1\detokenize{macro:}}#2->#3\relax{% \def\bbl@tempa{#1}% \def\bbl@tempb{#2}% \def\bbl@tempe{#3}} \def\bbl@sreplace#1#2#3{% \begingroup \expandafter\bbl@parsedef\meaning#1\relax \def\bbl@tempc{#2}% \edef\bbl@tempc{\expandafter\strip@prefix\meaning\bbl@tempc}% \def\bbl@tempd{#3}% \edef\bbl@tempd{\expandafter\strip@prefix\meaning\bbl@tempd}% \bbl@xin@{\bbl@tempc}{\bbl@tempe}% If not in macro, do nothing \ifin@ \bbl@exp{\\\bbl@replace\\\bbl@tempe{\bbl@tempc}{\bbl@tempd}}% \def\bbl@tempc{% Expanded an executed below as 'uplevel' \\\makeatletter % "internal" macros with @ are assumed \\\scantokens{% \bbl@tempa\\\@namedef{\bbl@stripslash#1}\bbl@tempb{\bbl@tempe}}% \catcode64=\the\catcode64\relax}% Restore @ \else \let\bbl@tempc\@empty % Not \relax \fi \bbl@exp{% For the 'uplevel' assignments \endgroup \bbl@tempc}} % empty or expand to set #1 with changes \fi \def\bbl@ifsamestring#1#2{% \begingroup \protected@edef\bbl@tempb{#1}% \edef\bbl@tempb{\expandafter\strip@prefix\meaning\bbl@tempb}% \protected@edef\bbl@tempc{#2}% \edef\bbl@tempc{\expandafter\strip@prefix\meaning\bbl@tempc}% \ifx\bbl@tempb\bbl@tempc \aftergroup\@firstoftwo \else \aftergroup\@secondoftwo \fi \endgroup} \chardef\bbl@engine=% \ifx\directlua\@undefined \ifx\XeTeXinputencoding\@undefined \z@ \else \tw@ \fi \else \@ne \fi \def\bbl@bsphack{% \ifhmode \hskip\z@skip \def\bbl@esphack{\loop\ifdim\lastskip>\z@\unskip\repeat\unskip}% \else \let\bbl@esphack\@empty \fi} \def\bbl@cased{% \ifx\oe\OE \expandafter\in@\expandafter {\expandafter\OE\expandafter}\expandafter{\oe}% \ifin@ \bbl@afterelse\expandafter\MakeUppercase \else \bbl@afterfi\expandafter\MakeLowercase \fi \else \expandafter\@firstofone \fi} % Temporarily repeat here the code for errors. TODO. \def\bbl@error#1#2{% \begingroup \def\\{\MessageBreak}% \PackageError{babel}{#1}{#2}% \endgroup} \def\bbl@warning#1{% \begingroup \def\\{\MessageBreak}% \PackageWarning{babel}{#1}% \endgroup} \def\bbl@infowarn#1{% \begingroup \def\\{\MessageBreak}% \GenericWarning {(babel) \@spaces\@spaces\@spaces}% {Package babel Info: #1}% \endgroup} \def\bbl@info#1{% \begingroup \def\\{\MessageBreak}% \PackageInfo{babel}{#1}% \endgroup} \def\bbl@nocaption{\protect\bbl@nocaption@i} \def\bbl@nocaption@i#1#2{% 1: text to be printed 2: caption macro \langXname \global\@namedef{#2}{\textbf{?#1?}}% \@nameuse{#2}% \edef\bbl@tempa{#1}% \bbl@sreplace\bbl@tempa{name}{}% \bbl@warning{% \@backslashchar#1 not set for '\languagename'. Please,\\% define it after the language has been loaded\\% (typically in the preamble) with\\% \string\setlocalecaption{\languagename}{\bbl@tempa}{..}\\% Reported}} \def\bbl@tentative{\protect\bbl@tentative@i} \def\bbl@tentative@i#1{% \bbl@warning{% Some functions for '#1' are tentative.\\% They might not work as expected and their behavior\\% may change in the future.\\% Reported}} \def\@nolanerr#1{% \bbl@error {You haven't defined the language #1\space yet.\\% Perhaps you misspelled it or your installation\\% is not complete}% {Your command will be ignored, type to proceed}} \def\@nopatterns#1{% \bbl@warning {No hyphenation patterns were preloaded for\\% the language `#1' into the format.\\% Please, configure your TeX system to add them and\\% rebuild the format. Now I will use the patterns\\% preloaded for \bbl@nulllanguage\space instead}} % End of errors \@ifpackagewith{babel}{silent} {\let\bbl@info\@gobble \let\bbl@infowarn\@gobble \let\bbl@warning\@gobble} {} \def\AfterBabelLanguage#1{% \global\expandafter\bbl@add\csname#1.ldf-h@@k\endcsname}% \ifx\bbl@languages\@undefined\else \begingroup \catcode`\^^I=12 \@ifpackagewith{babel}{showlanguages}{% \begingroup \def\bbl@elt#1#2#3#4{\wlog{#2^^I#1^^I#3^^I#4}}% \wlog{<*languages>}% \bbl@languages \wlog{}% \endgroup}{} \endgroup \def\bbl@elt#1#2#3#4{% \ifnum#2=\z@ \gdef\bbl@nulllanguage{#1}% \def\bbl@elt##1##2##3##4{}% \fi}% \bbl@languages \fi% \bbl@trace{Defining option 'base'} \@ifpackagewith{babel}{base}{% \let\bbl@onlyswitch\@empty \let\bbl@provide@locale\relax \input babel.def \let\bbl@onlyswitch\@undefined \ifx\directlua\@undefined \DeclareOption*{\bbl@patterns{\CurrentOption}}% \else \input luababel.def \DeclareOption*{\bbl@patterns@lua{\CurrentOption}}% \fi \DeclareOption{base}{}% \DeclareOption{showlanguages}{}% \ProcessOptions \global\expandafter\let\csname opt@babel.sty\endcsname\relax \global\expandafter\let\csname ver@babel.sty\endcsname\relax \global\let\@ifl@ter@@\@ifl@ter \def\@ifl@ter#1#2#3#4#5{\global\let\@ifl@ter\@ifl@ter@@}% \endinput}{}% \bbl@trace{key=value and another general options} \bbl@csarg\let{tempa\expandafter}\csname opt@babel.sty\endcsname \def\bbl@tempb#1.#2{% Remove trailing dot #1\ifx\@empty#2\else,\bbl@afterfi\bbl@tempb#2\fi}% \def\bbl@tempd#1.#2\@nnil{% TODO. Refactor lists? \ifx\@empty#2% \edef\bbl@tempc{\ifx\bbl@tempc\@empty\else\bbl@tempc,\fi#1}% \else \in@{,provide,}{,#1,}% \ifin@ \edef\bbl@tempc{% \ifx\bbl@tempc\@empty\else\bbl@tempc,\fi#1.\bbl@tempb#2}% \else \in@{=}{#1}% \ifin@ \edef\bbl@tempc{\ifx\bbl@tempc\@empty\else\bbl@tempc,\fi#1.#2}% \else \edef\bbl@tempc{\ifx\bbl@tempc\@empty\else\bbl@tempc,\fi#1}% \bbl@csarg\edef{mod@#1}{\bbl@tempb#2}% \fi \fi \fi} \let\bbl@tempc\@empty \bbl@foreach\bbl@tempa{\bbl@tempd#1.\@empty\@nnil} \expandafter\let\csname opt@babel.sty\endcsname\bbl@tempc \DeclareOption{KeepShorthandsActive}{} \DeclareOption{activeacute}{} \DeclareOption{activegrave}{} \DeclareOption{debug}{} \DeclareOption{noconfigs}{} \DeclareOption{showlanguages}{} \DeclareOption{silent}{} \DeclareOption{mono}{} \DeclareOption{shorthands=off}{\bbl@tempa shorthands=\bbl@tempa} \chardef\bbl@iniflag\z@ \DeclareOption{provide=*}{\chardef\bbl@iniflag\@ne} % main -> +1 \DeclareOption{provide+=*}{\chardef\bbl@iniflag\tw@} % add = 2 \DeclareOption{provide*=*}{\chardef\bbl@iniflag\thr@@} % add + main \let\bbl@autoload@options\@empty \DeclareOption{provide@=*}{\def\bbl@autoload@options{import}} \newif\ifbbl@single \DeclareOption{selectors=off}{\bbl@singletrue} \DeclareOption{safe=none}{\let\bbl@opt@safe\@empty} \DeclareOption{safe=bib}{\def\bbl@opt@safe{B}} \DeclareOption{safe=ref}{\def\bbl@opt@safe{R}} \DeclareOption{math=active}{} \DeclareOption{math=normal}{\def\bbl@mathnormal{\noexpand\textormath}} \DeclareOption{nocase}{} \let\bbl@opt@strings\@nnil % accept strings=value \DeclareOption{strings}{\def\bbl@opt@strings{\BabelStringsDefault}} \DeclareOption{strings=encoded}{\let\bbl@opt@strings\relax} \def\BabelStringsDefault{generic} \DeclareOption{hyphenmap=off}{\chardef\bbl@opt@hyphenmap\z@} \DeclareOption{hyphenmap=first}{\chardef\bbl@opt@hyphenmap\@ne} \DeclareOption{hyphenmap=select}{\chardef\bbl@opt@hyphenmap\tw@} \DeclareOption{hyphenmap=other}{\chardef\bbl@opt@hyphenmap\thr@@} \DeclareOption{hyphenmap=other*}{\chardef\bbl@opt@hyphenmap4\relax} \chardef\bbl@bidimode\z@ \DeclareOption{bidi=default}{\chardef\bbl@bidimode=\@ne} \DeclareOption{bidi=basic}{\chardef\bbl@bidimode=101 } \DeclareOption{bidi=basic-r}{\chardef\bbl@bidimode=102 } \DeclareOption{bidi=bidi}{\chardef\bbl@bidimode=201 } \DeclareOption{bidi=bidi-r}{\chardef\bbl@bidimode=202 } \DeclareOption{bidi=bidi-l}{\chardef\bbl@bidimode=203 } \let\bbl@opt@shorthands\@nnil \let\bbl@opt@config\@nnil \let\bbl@opt@main\@nnil \let\bbl@opt@headfoot\@nnil \let\bbl@opt@layout\@nnil \def\bbl@tempa#1=#2\bbl@tempa{% \bbl@csarg\ifx{opt@#1}\@nnil \bbl@csarg\edef{opt@#1}{#2}% \else \bbl@error {Bad option `#1=#2'. Either you have misspelled the\\% key or there is a previous setting of `#1'. Valid\\% keys are, among others, `shorthands', `main', `bidi',\\% `strings', `config', `headfoot', `safe', `math'.}% {See the manual for further details.} \fi} \let\bbl@language@opts\@empty \DeclareOption*{% \bbl@xin@{\string=}{\CurrentOption}% \ifin@ \expandafter\bbl@tempa\CurrentOption\bbl@tempa \else \bbl@add@list\bbl@language@opts{\CurrentOption}% \fi} \ProcessOptions* \bbl@trace{Conditional loading of shorthands} \def\bbl@sh@string#1{% \ifx#1\@empty\else \ifx#1t\string~% \else\ifx#1c\string,% \else\string#1% \fi\fi \expandafter\bbl@sh@string \fi} \ifx\bbl@opt@shorthands\@nnil \def\bbl@ifshorthand#1#2#3{#2}% \else\ifx\bbl@opt@shorthands\@empty \def\bbl@ifshorthand#1#2#3{#3}% \else \def\bbl@ifshorthand#1{% \bbl@xin@{\string#1}{\bbl@opt@shorthands}% \ifin@ \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi} \edef\bbl@opt@shorthands{% \expandafter\bbl@sh@string\bbl@opt@shorthands\@empty}% \bbl@ifshorthand{'}% {\PassOptionsToPackage{activeacute}{babel}}{} \bbl@ifshorthand{`}% {\PassOptionsToPackage{activegrave}{babel}}{} \fi\fi \ifx\bbl@opt@headfoot\@nnil\else \g@addto@macro\@resetactivechars{% \set@typeset@protect \expandafter\select@language@x\expandafter{\bbl@opt@headfoot}% \let\protect\noexpand} \fi \ifx\bbl@opt@safe\@undefined \def\bbl@opt@safe{BR} \fi \ifx\bbl@opt@main\@nnil\else \edef\bbl@language@opts{% \ifx\bbl@language@opts\@empty\else\bbl@language@opts,\fi \bbl@opt@main} \fi \bbl@trace{Defining IfBabelLayout} \ifx\bbl@opt@layout\@nnil \newcommand\IfBabelLayout[3]{#3}% \else \newcommand\IfBabelLayout[1]{% \@expandtwoargs\in@{.#1.}{.\bbl@opt@layout.}% \ifin@ \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi} \fi \input babel.def \bbl@trace{Cross referencing macros} \ifx\bbl@opt@safe\@empty\else \def\@newl@bel#1#2#3{% {\@safe@activestrue \bbl@ifunset{#1@#2}% \relax {\gdef\@multiplelabels{% \@latex@warning@no@line{There were multiply-defined labels}}% \@latex@warning@no@line{Label `#2' multiply defined}}% \global\@namedef{#1@#2}{#3}}} \CheckCommand*\@testdef[3]{% \def\reserved@a{#3}% \expandafter\ifx\csname#1@#2\endcsname\reserved@a \else \@tempswatrue \fi} \def\@testdef#1#2#3{% TODO. With @samestring? \@safe@activestrue \expandafter\let\expandafter\bbl@tempa\csname #1@#2\endcsname \def\bbl@tempb{#3}% \@safe@activesfalse \ifx\bbl@tempa\relax \else \edef\bbl@tempa{\expandafter\strip@prefix\meaning\bbl@tempa}% \fi \edef\bbl@tempb{\expandafter\strip@prefix\meaning\bbl@tempb}% \ifx\bbl@tempa\bbl@tempb \else \@tempswatrue \fi} \fi \bbl@xin@{R}\bbl@opt@safe \ifin@ \bbl@redefinerobust\ref#1{% \@safe@activestrue\org@ref{#1}\@safe@activesfalse} \bbl@redefinerobust\pageref#1{% \@safe@activestrue\org@pageref{#1}\@safe@activesfalse} \else \let\org@ref\ref \let\org@pageref\pageref \fi \bbl@xin@{B}\bbl@opt@safe \ifin@ \bbl@redefine\@citex[#1]#2{% \@safe@activestrue\edef\@tempa{#2}\@safe@activesfalse \org@@citex[#1]{\@tempa}} \AtBeginDocument{% \@ifpackageloaded{natbib}{% \def\@citex[#1][#2]#3{% \@safe@activestrue\edef\@tempa{#3}\@safe@activesfalse \org@@citex[#1][#2]{\@tempa}}% }{}} \AtBeginDocument{% \@ifpackageloaded{cite}{% \def\@citex[#1]#2{% \@safe@activestrue\org@@citex[#1]{#2}\@safe@activesfalse}% }{}} \bbl@redefine\nocite#1{% \@safe@activestrue\org@nocite{#1}\@safe@activesfalse} \bbl@redefine\bibcite{% \bbl@cite@choice \bibcite} \def\bbl@bibcite#1#2{% \org@bibcite{#1}{\@safe@activesfalse#2}} \def\bbl@cite@choice{% \global\let\bibcite\bbl@bibcite \@ifpackageloaded{natbib}{\global\let\bibcite\org@bibcite}{}% \@ifpackageloaded{cite}{\global\let\bibcite\org@bibcite}{}% \global\let\bbl@cite@choice\relax} \AtBeginDocument{\bbl@cite@choice} \bbl@redefine\@bibitem#1{% \@safe@activestrue\org@@bibitem{#1}\@safe@activesfalse} \else \let\org@nocite\nocite \let\org@@citex\@citex \let\org@bibcite\bibcite \let\org@@bibitem\@bibitem \fi \bbl@trace{Marks} \IfBabelLayout{sectioning} {\ifx\bbl@opt@headfoot\@nnil \g@addto@macro\@resetactivechars{% \set@typeset@protect \expandafter\select@language@x\expandafter{\bbl@main@language}% \let\protect\noexpand \ifcase\bbl@bidimode\else % Only with bidi. See also above \edef\thepage{% \noexpand\babelsublr{\unexpanded\expandafter{\thepage}}}% \fi}% \fi} {\ifbbl@single\else \bbl@ifunset{markright }\bbl@redefine\bbl@redefinerobust \markright#1{% \bbl@ifblank{#1}% {\org@markright{}}% {\toks@{#1}% \bbl@exp{% \\\org@markright{\\\protect\\\foreignlanguage{\languagename}% {\\\protect\\\bbl@restore@actives\the\toks@}}}}}% \ifx\@mkboth\markboth \def\bbl@tempc{\let\@mkboth\markboth} \else \def\bbl@tempc{} \fi \bbl@ifunset{markboth }\bbl@redefine\bbl@redefinerobust \markboth#1#2{% \protected@edef\bbl@tempb##1{% \protect\foreignlanguage {\languagename}{\protect\bbl@restore@actives##1}}% \bbl@ifblank{#1}% {\toks@{}}% {\toks@\expandafter{\bbl@tempb{#1}}}% \bbl@ifblank{#2}% {\@temptokena{}}% {\@temptokena\expandafter{\bbl@tempb{#2}}}% \bbl@exp{\\\org@markboth{\the\toks@}{\the\@temptokena}}} \bbl@tempc \fi} % end ifbbl@single, end \IfBabelLayout \bbl@trace{Preventing clashes with other packages} \bbl@xin@{R}\bbl@opt@safe \ifin@ \AtBeginDocument{% \@ifpackageloaded{ifthen}{% \bbl@redefine@long\ifthenelse#1#2#3{% \let\bbl@temp@pref\pageref \let\pageref\org@pageref \let\bbl@temp@ref\ref \let\ref\org@ref \@safe@activestrue \org@ifthenelse{#1}% {\let\pageref\bbl@temp@pref \let\ref\bbl@temp@ref \@safe@activesfalse #2}% {\let\pageref\bbl@temp@pref \let\ref\bbl@temp@ref \@safe@activesfalse #3}% }% }{}% } \AtBeginDocument{% \@ifpackageloaded{varioref}{% \bbl@redefine\@@vpageref#1[#2]#3{% \@safe@activestrue \org@@@vpageref{#1}[#2]{#3}% \@safe@activesfalse}% \bbl@redefine\vrefpagenum#1#2{% \@safe@activestrue \org@vrefpagenum{#1}{#2}% \@safe@activesfalse}% \expandafter\def\csname Ref \endcsname#1{% \protected@edef\@tempa{\org@ref{#1}}\expandafter\MakeUppercase\@tempa} }{}% } \fi \AtEndOfPackage{% \AtBeginDocument{% \@ifpackageloaded{hhline}% {\expandafter\ifx\csname normal@char\string:\endcsname\relax \else \makeatletter \def\@currname{hhline}\input{hhline.sty}\makeatother \fi}% {}}} \DeclareRobustCommand{\FOREIGNLANGUAGE}[1]{% \lowercase{\foreignlanguage{#1}}} \def\substitutefontfamily#1#2#3{% \lowercase{\immediate\openout15=#1#2.fd\relax}% \immediate\write15{% \string\ProvidesFile{#1#2.fd}% [\the\year/\two@digits{\the\month}/\two@digits{\the\day} \space generated font description file]^^J \string\DeclareFontFamily{#1}{#2}{}^^J \string\DeclareFontShape{#1}{#2}{m}{n}{<->ssub * #3/m/n}{}^^J \string\DeclareFontShape{#1}{#2}{m}{it}{<->ssub * #3/m/it}{}^^J \string\DeclareFontShape{#1}{#2}{m}{sl}{<->ssub * #3/m/sl}{}^^J \string\DeclareFontShape{#1}{#2}{m}{sc}{<->ssub * #3/m/sc}{}^^J \string\DeclareFontShape{#1}{#2}{b}{n}{<->ssub * #3/bx/n}{}^^J \string\DeclareFontShape{#1}{#2}{b}{it}{<->ssub * #3/bx/it}{}^^J \string\DeclareFontShape{#1}{#2}{b}{sl}{<->ssub * #3/bx/sl}{}^^J \string\DeclareFontShape{#1}{#2}{b}{sc}{<->ssub * #3/bx/sc}{}^^J }% \closeout15 } \@onlypreamble\substitutefontfamily \bbl@trace{Encoding and fonts} \newcommand\BabelNonASCII{LGR,X2,OT2,OT3,OT6,LHE,LWN,LMA,LMC,LMS,LMU,PU,PD1} \newcommand\BabelNonText{TS1,T3,TS3} \let\org@TeX\TeX \let\org@LaTeX\LaTeX \let\ensureascii\@firstofone \AtBeginDocument{% \in@false \bbl@foreach\BabelNonASCII{% is there a text non-ascii enc? \ifin@\else \lowercase{\bbl@xin@{,#1enc.def,}{,\@filelist,}}% \fi}% \ifin@ % if a text non-ascii has been loaded \def\ensureascii#1{{\fontencoding{OT1}\selectfont#1}}% \DeclareTextCommandDefault{\TeX}{\org@TeX}% \DeclareTextCommandDefault{\LaTeX}{\org@LaTeX}% \def\bbl@tempb#1\@@{\uppercase{\bbl@tempc#1}ENC.DEF\@empty\@@}% \def\bbl@tempc#1ENC.DEF#2\@@{% \ifx\@empty#2\else \bbl@ifunset{T@#1}% {}% {\bbl@xin@{,#1,}{,\BabelNonASCII,\BabelNonText,}% \ifin@ \DeclareTextCommand{\TeX}{#1}{\ensureascii{\org@TeX}}% \DeclareTextCommand{\LaTeX}{#1}{\ensureascii{\org@LaTeX}}% \else \def\ensureascii##1{{\fontencoding{#1}\selectfont##1}}% \fi}% \fi}% \bbl@foreach\@filelist{\bbl@tempb#1\@@}% TODO - \@@ de mas?? \bbl@xin@{,\cf@encoding,}{,\BabelNonASCII,\BabelNonText,}% \ifin@\else \edef\ensureascii#1{{% \noexpand\fontencoding{\cf@encoding}\noexpand\selectfont#1}}% \fi \fi} \AtEndOfPackage{\edef\latinencoding{\cf@encoding}} \AtBeginDocument{% \@ifpackageloaded{fontspec}% {\xdef\latinencoding{% \ifx\UTFencname\@undefined EU\ifcase\bbl@engine\or2\or1\fi \else \UTFencname \fi}}% {\gdef\latinencoding{OT1}% \ifx\cf@encoding\bbl@t@one \xdef\latinencoding{\bbl@t@one}% \else \ifx\@fontenc@load@list\@undefined \@ifl@aded{def}{t1enc}{\xdef\latinencoding{\bbl@t@one}}{}% \else \def\@elt#1{,#1,}% \edef\bbl@tempa{\expandafter\@gobbletwo\@fontenc@load@list}% \let\@elt\relax \bbl@xin@{,T1,}\bbl@tempa \ifin@ \xdef\latinencoding{\bbl@t@one}% \fi \fi \fi}} \DeclareRobustCommand{\latintext}{% \fontencoding{\latinencoding}\selectfont \def\encodingdefault{\latinencoding}} \ifx\@undefined\DeclareTextFontCommand \DeclareRobustCommand{\textlatin}[1]{\leavevmode{\latintext #1}} \else \DeclareTextFontCommand{\textlatin}{\latintext} \fi \ifodd\bbl@engine \def\bbl@activate@preotf{% \let\bbl@activate@preotf\relax % only once \directlua{ Babel = Babel or {} % function Babel.pre_otfload_v(head) if Babel.numbers and Babel.digits_mapped then head = Babel.numbers(head) end if Babel.bidi_enabled then head = Babel.bidi(head, false, dir) end return head end % function Babel.pre_otfload_h(head, gc, sz, pt, dir) if Babel.numbers and Babel.digits_mapped then head = Babel.numbers(head) end if Babel.bidi_enabled then head = Babel.bidi(head, false, dir) end return head end % luatexbase.add_to_callback('pre_linebreak_filter', Babel.pre_otfload_v, 'Babel.pre_otfload_v', luatexbase.priority_in_callback('pre_linebreak_filter', 'luaotfload.node_processor') or nil) % luatexbase.add_to_callback('hpack_filter', Babel.pre_otfload_h, 'Babel.pre_otfload_h', luatexbase.priority_in_callback('hpack_filter', 'luaotfload.node_processor') or nil) }} \fi \bbl@trace{Loading basic (internal) bidi support} \ifodd\bbl@engine \ifnum\bbl@bidimode>100 \ifnum\bbl@bidimode<200 \let\bbl@beforeforeign\leavevmode \AtEndOfPackage{\EnableBabelHook{babel-bidi}} \RequirePackage{luatexbase} \bbl@activate@preotf \directlua{ require('babel-data-bidi.lua') \ifcase\expandafter\@gobbletwo\the\bbl@bidimode\or require('babel-bidi-basic.lua') \or require('babel-bidi-basic-r.lua') \fi} % TODO - to locale_props, not as separate attribute \newattribute\bbl@attr@dir % TODO. I don't like it, hackish: \bbl@exp{\output{\bodydir\pagedir\the\output}} \AtEndOfPackage{\EnableBabelHook{babel-bidi}} \fi\fi \else \ifnum\bbl@bidimode>100 \ifnum\bbl@bidimode<200 \bbl@error {The bidi method `basic' is available only in\\% luatex. I'll continue with `bidi=default', so\\% expect wrong results}% {See the manual for further details.}% \let\bbl@beforeforeign\leavevmode \AtEndOfPackage{% \EnableBabelHook{babel-bidi}% \bbl@xebidipar} \fi\fi \def\bbl@loadxebidi#1{% \ifx\RTLfootnotetext\@undefined \AtEndOfPackage{% \EnableBabelHook{babel-bidi}% \ifx\fontspec\@undefined \bbl@loadfontspec % bidi needs fontspec \fi \usepackage#1{bidi}}% \fi} \ifnum\bbl@bidimode>200 \ifcase\expandafter\@gobbletwo\the\bbl@bidimode\or \bbl@tentative{bidi=bidi} \bbl@loadxebidi{} \or \bbl@loadxebidi{[rldocument]} \or \bbl@loadxebidi{} \fi \fi \fi \ifnum\bbl@bidimode=\@ne \let\bbl@beforeforeign\leavevmode \ifodd\bbl@engine \newattribute\bbl@attr@dir \bbl@exp{\output{\bodydir\pagedir\the\output}}% \fi \AtEndOfPackage{% \EnableBabelHook{babel-bidi}% \ifodd\bbl@engine\else \bbl@xebidipar \fi} \fi \bbl@trace{Macros to switch the text direction} \def\bbl@alscripts{,Arabic,Syriac,Thaana,} \def\bbl@rscripts{% TODO. Base on codes ?? ,Imperial Aramaic,Avestan,Cypriot,Hatran,Hebrew,% Old Hungarian,Old Hungarian,Lydian,Mandaean,Manichaean,% Manichaean,Meroitic Cursive,Meroitic,Old North Arabian,% Nabataean,N'Ko,Orkhon,Palmyrene,Inscriptional Pahlavi,% Psalter Pahlavi,Phoenician,Inscriptional Parthian,Samaritan,% Old South Arabian,}% \def\bbl@provide@dirs#1{% \bbl@xin@{\csname bbl@sname@#1\endcsname}{\bbl@alscripts\bbl@rscripts}% \ifin@ \global\bbl@csarg\chardef{wdir@#1}\@ne \bbl@xin@{\csname bbl@sname@#1\endcsname}{\bbl@alscripts}% \ifin@ \global\bbl@csarg\chardef{wdir@#1}\tw@ % useless in xetex \fi \else \global\bbl@csarg\chardef{wdir@#1}\z@ \fi \ifodd\bbl@engine \bbl@csarg\ifcase{wdir@#1}% \directlua{ Babel.locale_props[\the\localeid].textdir = 'l' }% \or \directlua{ Babel.locale_props[\the\localeid].textdir = 'r' }% \or \directlua{ Babel.locale_props[\the\localeid].textdir = 'al' }% \fi \fi} \def\bbl@switchdir{% \bbl@ifunset{bbl@lsys@\languagename}{\bbl@provide@lsys{\languagename}}{}% \bbl@ifunset{bbl@wdir@\languagename}{\bbl@provide@dirs{\languagename}}{}% \bbl@exp{\\\bbl@setdirs\bbl@cl{wdir}}} \def\bbl@setdirs#1{% TODO - math \ifcase\bbl@select@type % TODO - strictly, not the right test \bbl@bodydir{#1}% \bbl@pardir{#1}% \fi \bbl@textdir{#1}} \AddBabelHook{babel-bidi}{afterextras}{\bbl@switchdir} \DisableBabelHook{babel-bidi} \ifodd\bbl@engine % luatex=1 \chardef\bbl@thetextdir\z@ \chardef\bbl@thepardir\z@ \def\bbl@getluadir#1{% \directlua{ if tex.#1dir == 'TLT' then tex.sprint('0') elseif tex.#1dir == 'TRT' then tex.sprint('1') end}} \def\bbl@setluadir#1#2#3{% 1=text/par.. 2=\textdir.. 3=0 lr/1 rl \ifcase#3\relax \ifcase\bbl@getluadir{#1}\relax\else #2 TLT\relax \fi \else \ifcase\bbl@getluadir{#1}\relax #2 TRT\relax \fi \fi} \def\bbl@textdir#1{% \bbl@setluadir{text}\textdir{#1}% \chardef\bbl@thetextdir#1\relax \setattribute\bbl@attr@dir{\numexpr\bbl@thepardir*3+#1}} \def\bbl@pardir#1{% \bbl@setluadir{par}\pardir{#1}% \chardef\bbl@thepardir#1\relax} \def\bbl@bodydir{\bbl@setluadir{body}\bodydir} \def\bbl@pagedir{\bbl@setluadir{page}\pagedir} \def\bbl@dirparastext{\pardir\the\textdir\relax}% %%%% % Sadly, we have to deal with boxes in math with basic. % Activated every math with the package option bidi=: \def\bbl@mathboxdir{% \ifcase\bbl@thetextdir\relax \everyhbox{\textdir TLT\relax}% \else \everyhbox{\textdir TRT\relax}% \fi} \frozen@everymath\expandafter{% \expandafter\bbl@mathboxdir\the\frozen@everymath} \frozen@everydisplay\expandafter{% \expandafter\bbl@mathboxdir\the\frozen@everydisplay} \else % pdftex=0, xetex=2 \newcount\bbl@dirlevel \chardef\bbl@thetextdir\z@ \chardef\bbl@thepardir\z@ \def\bbl@textdir#1{% \ifcase#1\relax \chardef\bbl@thetextdir\z@ \bbl@textdir@i\beginL\endL \else \chardef\bbl@thetextdir\@ne \bbl@textdir@i\beginR\endR \fi} \def\bbl@textdir@i#1#2{% \ifhmode \ifnum\currentgrouplevel>\z@ \ifnum\currentgrouplevel=\bbl@dirlevel \bbl@error{Multiple bidi settings inside a group}% {I'll insert a new group, but expect wrong results.}% \bgroup\aftergroup#2\aftergroup\egroup \else \ifcase\currentgrouptype\or % 0 bottom \aftergroup#2% 1 simple {} \or \bgroup\aftergroup#2\aftergroup\egroup % 2 hbox \or \bgroup\aftergroup#2\aftergroup\egroup % 3 adj hbox \or\or\or % vbox vtop align \or \bgroup\aftergroup#2\aftergroup\egroup % 7 noalign \or\or\or\or\or\or % output math disc insert vcent mathchoice \or \aftergroup#2% 14 \begingroup \else \bgroup\aftergroup#2\aftergroup\egroup % 15 adj \fi \fi \bbl@dirlevel\currentgrouplevel \fi #1% \fi} \def\bbl@pardir#1{\chardef\bbl@thepardir#1\relax} \let\bbl@bodydir\@gobble \let\bbl@pagedir\@gobble \def\bbl@dirparastext{\chardef\bbl@thepardir\bbl@thetextdir} \def\bbl@xebidipar{% \let\bbl@xebidipar\relax \TeXXeTstate\@ne \def\bbl@xeeverypar{% \ifcase\bbl@thepardir \ifcase\bbl@thetextdir\else\beginR\fi \else {\setbox\z@\lastbox\beginR\box\z@}% \fi}% \let\bbl@severypar\everypar \newtoks\everypar \everypar=\bbl@severypar \bbl@severypar{\bbl@xeeverypar\the\everypar}} \ifnum\bbl@bidimode>200 \let\bbl@textdir@i\@gobbletwo \let\bbl@xebidipar\@empty \AddBabelHook{bidi}{foreign}{% \def\bbl@tempa{\def\BabelText####1}% \ifcase\bbl@thetextdir \expandafter\bbl@tempa\expandafter{\BabelText{\LR{##1}}}% \else \expandafter\bbl@tempa\expandafter{\BabelText{\RL{##1}}}% \fi} \def\bbl@pardir#1{\ifcase#1\relax\setLR\else\setRL\fi} \fi \fi \DeclareRobustCommand\babelsublr[1]{\leavevmode{\bbl@textdir\z@#1}} \AtBeginDocument{% \ifx\pdfstringdefDisableCommands\@undefined\else \ifx\pdfstringdefDisableCommands\relax\else \pdfstringdefDisableCommands{\let\babelsublr\@firstofone}% \fi \fi} \bbl@trace{Local Language Configuration} \ifx\loadlocalcfg\@undefined \@ifpackagewith{babel}{noconfigs}% {\let\loadlocalcfg\@gobble}% {\def\loadlocalcfg#1{% \InputIfFileExists{#1.cfg}% {\typeout{*************************************^^J% * Local config file #1.cfg used^^J% *}}% \@empty}} \fi \ifx\@unexpandable@protect\@undefined \def\@unexpandable@protect{\noexpand\protect\noexpand} \long\def\protected@write#1#2#3{% \begingroup \let\thepage\relax #2% \let\protect\@unexpandable@protect \edef\reserved@a{\write#1{#3}}% \reserved@a \endgroup \if@nobreak\ifvmode\nobreak\fi\fi} \fi \bbl@trace{Language options} \let\bbl@afterlang\relax \let\BabelModifiers\relax \let\bbl@loaded\@empty \def\bbl@load@language#1{% \InputIfFileExists{#1.ldf}% {\edef\bbl@loaded{\CurrentOption \ifx\bbl@loaded\@empty\else,\bbl@loaded\fi}% \expandafter\let\expandafter\bbl@afterlang \csname\CurrentOption.ldf-h@@k\endcsname \expandafter\let\expandafter\BabelModifiers \csname bbl@mod@\CurrentOption\endcsname}% {\bbl@error{% Unknown option `\CurrentOption'. Either you misspelled it\\% or the language definition file \CurrentOption.ldf was not found}{% Valid options are, among others: shorthands=, KeepShorthandsActive,\\% activeacute, activegrave, noconfigs, safe=, main=, math=\\% headfoot=, strings=, config=, hyphenmap=, or a language name.}}} \def\bbl@try@load@lang#1#2#3{% \IfFileExists{\CurrentOption.ldf}% {\bbl@load@language{\CurrentOption}}% {#1\bbl@load@language{#2}#3}} \DeclareOption{hebrew}{% \input{rlbabel.def}% \bbl@load@language{hebrew}} \DeclareOption{hungarian}{\bbl@try@load@lang{}{magyar}{}} \DeclareOption{lowersorbian}{\bbl@try@load@lang{}{lsorbian}{}} \DeclareOption{nynorsk}{\bbl@try@load@lang{}{norsk}{}} \DeclareOption{polutonikogreek}{% \bbl@try@load@lang{}{greek}{\languageattribute{greek}{polutoniko}}} \DeclareOption{russian}{\bbl@try@load@lang{}{russianb}{}} \DeclareOption{ukrainian}{\bbl@try@load@lang{}{ukraineb}{}} \DeclareOption{uppersorbian}{\bbl@try@load@lang{}{usorbian}{}} \ifx\bbl@opt@config\@nnil \@ifpackagewith{babel}{noconfigs}{}% {\InputIfFileExists{bblopts.cfg}% {\typeout{*************************************^^J% * Local config file bblopts.cfg used^^J% *}}% {}}% \else \InputIfFileExists{\bbl@opt@config.cfg}% {\typeout{*************************************^^J% * Local config file \bbl@opt@config.cfg used^^J% *}}% {\bbl@error{% Local config file `\bbl@opt@config.cfg' not found}{% Perhaps you misspelled it.}}% \fi \let\bbl@tempc\relax \bbl@foreach\bbl@language@opts{% \ifcase\bbl@iniflag % Default \bbl@ifunset{ds@#1}% {\DeclareOption{#1}{\bbl@load@language{#1}}}% {}% \or % provide=* \@gobble % case 2 same as 1 \or % provide+=* \bbl@ifunset{ds@#1}% {\IfFileExists{#1.ldf}{}% {\IfFileExists{babel-#1.tex}{}{\@namedef{ds@#1}{}}}}% {}% \bbl@ifunset{ds@#1}% {\def\bbl@tempc{#1}% \DeclareOption{#1}{% \ifnum\bbl@iniflag>\@ne \bbl@ldfinit \babelprovide[import]{#1}% \bbl@afterldf{}% \else \bbl@load@language{#1}% \fi}}% {}% \or % provide*=* \def\bbl@tempc{#1}% \bbl@ifunset{ds@#1}% {\DeclareOption{#1}{% \bbl@ldfinit \babelprovide[import]{#1}% \bbl@afterldf{}}}% {}% \fi} \let\bbl@tempb\@nnil \bbl@foreach\@classoptionslist{% \bbl@ifunset{ds@#1}% {\IfFileExists{#1.ldf}{}% {\IfFileExists{babel-#1.tex}{}{\@namedef{ds@#1}{}}}}% {}% \bbl@ifunset{ds@#1}% {\def\bbl@tempb{#1}% \DeclareOption{#1}{% \ifnum\bbl@iniflag>\@ne \bbl@ldfinit \babelprovide[import]{#1}% \bbl@afterldf{}% \else \bbl@load@language{#1}% \fi}}% {}} \ifnum\bbl@iniflag=\z@\else \ifx\bbl@opt@main\@nnil \ifx\bbl@tempc\relax \let\bbl@opt@main\bbl@tempb \else \let\bbl@opt@main\bbl@tempc \fi \fi \fi \ifx\bbl@opt@main\@nnil\else \expandafter \let\expandafter\bbl@loadmain\csname ds@\bbl@opt@main\endcsname \expandafter\let\csname ds@\bbl@opt@main\endcsname\@empty \fi \def\AfterBabelLanguage#1{% \bbl@ifsamestring\CurrentOption{#1}{\global\bbl@add\bbl@afterlang}{}} \DeclareOption*{} \ProcessOptions* \bbl@trace{Option 'main'} \ifx\bbl@opt@main\@nnil \edef\bbl@tempa{\@classoptionslist,\bbl@language@opts} \let\bbl@tempc\@empty \bbl@for\bbl@tempb\bbl@tempa{% \bbl@xin@{,\bbl@tempb,}{,\bbl@loaded,}% \ifin@\edef\bbl@tempc{\bbl@tempb}\fi} \def\bbl@tempa#1,#2\@nnil{\def\bbl@tempb{#1}} \expandafter\bbl@tempa\bbl@loaded,\@nnil \ifx\bbl@tempb\bbl@tempc\else \bbl@warning{% Last declared language option is `\bbl@tempc',\\% but the last processed one was `\bbl@tempb'.\\% The main language cannot be set as both a global\\% and a package option. Use `main=\bbl@tempc' as\\% option. Reported}% \fi \else \ifodd\bbl@iniflag % case 1,3 \bbl@ldfinit \let\CurrentOption\bbl@opt@main \bbl@exp{\\\babelprovide[import,main]{\bbl@opt@main}} \bbl@afterldf{}% \else % case 0,2 \chardef\bbl@iniflag\z@ % Force ldf \expandafter\let\csname ds@\bbl@opt@main\endcsname\bbl@loadmain \ExecuteOptions{\bbl@opt@main} \DeclareOption*{}% \ProcessOptions* \fi \fi \def\AfterBabelLanguage{% \bbl@error {Too late for \string\AfterBabelLanguage}% {Languages have been loaded, so I can do nothing}} \ifx\bbl@main@language\@undefined \bbl@info{% You haven't specified a language. I'll use 'nil'\\% as the main language. Reported} \bbl@load@language{nil} \fi \endinput %% %% End of file `babel.sty'.