Created
March 1, 2018 19:37
-
-
Save dginev/e87b32ccdfa2e5e6cceeda38ec480e0f to your computer and use it in GitHub Desktop.
babel.def 2017.20180110-1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
%% | |
%% This is file `babel.def', | |
%% generated with the docstrip utility. | |
%% | |
%% The original source files were: | |
%% | |
%% babel.dtx (with options: `core') | |
%% | |
%% | |
%% Copyright (C) 2012-2017 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. | |
%% | |
\ifx\ldf@quit\@undefined | |
\else | |
\expandafter\endinput | |
\fi | |
\ifx\ProvidesFile\@undefined | |
\def\ProvidesFile#1[#2 #3 #4]{% | |
\wlog{File: #1 #4 #3 <#2>}% | |
\let\ProvidesFile\@undefined} | |
\fi | |
\ProvidesFile{babel.def}[2018/01/04 3.16 Babel common definitions] | |
\ifx\AtBeginDocument\@undefined | |
\input plain.def\relax | |
\fi | |
\ifx\bbl@ifshorthand\@undefined | |
\def\bbl@ifshorthand#1#2#3{#2}% | |
\def\bbl@opt@safe{BR} | |
\def\AfterBabelLanguage#1#2{} | |
\let\bbl@afterlang\relax | |
\let\bbl@language@opts\@empty | |
\fi | |
\input switch.def\relax | |
\ifx\bbl@languages\@undefined | |
\ifx\directlua\@undefined | |
\openin1 = language.def | |
\ifeof1 | |
\closein1 | |
\message{I couldn't find the file language.def} | |
\else | |
\closein1 | |
\begingroup | |
\def\addlanguage#1#2#3#4#5{% | |
\expandafter\ifx\csname lang@#1\endcsname\relax\else | |
\global\expandafter\let\csname l@#1\expandafter\endcsname | |
\csname lang@#1\endcsname | |
\fi}% | |
\def\uselanguage#1{}% | |
\input language.def | |
\endgroup | |
\fi | |
\fi | |
\chardef\l@english\z@ | |
\fi | |
\ifx\directlua\@undefined\else | |
\ifx\bbl@luapatterns\@undefined | |
\input luababel.def | |
\fi | |
\fi | |
\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@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@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}} | |
\def\bbl@ifunset#1{% | |
\expandafter\ifx\csname#1\endcsname\relax | |
\expandafter\@firstoftwo | |
\else | |
\expandafter\@secondoftwo | |
\fi} | |
\bbl@ifunset{ifcsname}% | |
{}% | |
{\def\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}} | |
\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@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@}} | |
\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@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\addto#1#2{% | |
\ifx#1\@undefined | |
\def#1{#2}% | |
\else | |
\ifx#1\relax | |
\def#1{#2}% | |
\else | |
{\toks@\expandafter{#1#2}% | |
\xdef#1{\the\toks@}}% | |
\fi | |
\fi} | |
\def\bbl@withactive#1#2{% | |
\begingroup | |
\lccode`~=`#2\relax | |
\lowercase{\endgroup#1~}} | |
\def\bbl@redefine#1{% | |
\edef\bbl@tempa{\bbl@stripslash#1}% | |
\expandafter\let\csname org@\bbl@tempa\endcsname#1% | |
\expandafter\def\csname\bbl@tempa\endcsname} | |
\@onlypreamble\bbl@redefine | |
\def\bbl@redefine@long#1{% | |
\edef\bbl@tempa{\bbl@stripslash#1}% | |
\expandafter\let\csname org@\bbl@tempa\endcsname#1% | |
\expandafter\long\expandafter\def\csname\bbl@tempa\endcsname} | |
\@onlypreamble\bbl@redefine@long | |
\def\bbl@redefinerobust#1{% | |
\edef\bbl@tempa{\bbl@stripslash#1}% | |
\bbl@ifunset{\bbl@tempa\space}% | |
{\expandafter\let\csname org@\bbl@tempa\endcsname#1% | |
\bbl@exp{\def\\#1{\\\protect\<\bbl@tempa\space>}}}% | |
{\bbl@exp{\let\<org@\bbl@tempa>\<\bbl@tempa\space>}}% | |
\@namedef{\bbl@tempa\space}} | |
\@onlypreamble\bbl@redefinerobust | |
\def\AddBabelHook#1#2{% | |
\bbl@ifunset{bbl@hk@#1}{\EnableBabelHook{#1}}{}% | |
\def\bbl@tempa##1,#2=##2,##3\@empty{\def\bbl@tempb{##2}}% | |
\expandafter\bbl@tempa\bbl@evargs,#2=,\@empty | |
\bbl@ifunset{bbl@ev@#1@#2}% | |
{\bbl@csarg\bbl@add{ev@#2}{\bbl@elt{#1}}% | |
\bbl@csarg\newcommand}% | |
{\bbl@csarg\let{ev@#1@#2}\relax | |
\bbl@csarg\newcommand}% | |
{ev@#1@#2}[\bbl@tempb]} | |
\def\EnableBabelHook#1{\bbl@csarg\let{hk@#1}\@firstofone} | |
\def\DisableBabelHook#1{\bbl@csarg\let{hk@#1}\@gobble} | |
\def\bbl@usehooks#1#2{% | |
\def\bbl@elt##1{% | |
\@nameuse{bbl@hk@##1}{\@nameuse{bbl@ev@##1@#1}#2}}% | |
\@nameuse{bbl@ev@#1}} | |
\def\bbl@evargs{,% don't delete the comma | |
everylanguage=1,loadkernel=1,loadpatterns=1,loadexceptions=1,% | |
adddialect=2,patterns=2,defaultcommands=0,encodedcommands=2,write=0,% | |
beforeextras=0,afterextras=0,stopcommands=0,stringprocess=0,% | |
hyphenation=2,initiateactive=3,afterreset=0,foreign=0,foreign*=0} | |
\newcommand\babelensure[2][]{% TODO - revise test files | |
\AddBabelHook{babel-ensure}{afterextras}{% | |
\ifcase\bbl@select@type | |
\@nameuse{bbl@e@\languagename}% | |
\fi}% | |
\begingroup | |
\let\bbl@ens@include\@empty | |
\let\bbl@ens@exclude\@empty | |
\def\bbl@ens@fontenc{\relax}% | |
\def\bbl@tempb##1{% | |
\ifx\@empty##1\else\noexpand##1\expandafter\bbl@tempb\fi}% | |
\edef\bbl@tempa{\bbl@tempb#1\@empty}% | |
\def\bbl@tempb##1=##2\@@{\@namedef{bbl@ens@##1}{##2}}% | |
\bbl@foreach\bbl@tempa{\bbl@tempb##1\@@}% | |
\def\bbl@tempc{\bbl@ensure}% | |
\expandafter\bbl@add\expandafter\bbl@tempc\expandafter{% | |
\expandafter{\bbl@ens@include}}% | |
\expandafter\bbl@add\expandafter\bbl@tempc\expandafter{% | |
\expandafter{\bbl@ens@exclude}}% | |
\toks@\expandafter{\bbl@tempc}% | |
\bbl@exp{% | |
\endgroup | |
\def\<bbl@e@#2>{\the\toks@{\bbl@ens@fontenc}}}} | |
\def\bbl@ensure#1#2#3{% 1: include 2: exclude 3: fontenc | |
\def\bbl@tempb##1{% elt for (excluding) \bbl@captionslist list | |
\ifx##1\@empty\else | |
\in@{##1}{#2}% | |
\ifin@\else | |
\bbl@ifunset{bbl@ensure@\languagename}% | |
{\bbl@exp{% | |
\\\DeclareRobustCommand\<bbl@ensure@\languagename>[1]{% | |
\\\foreignlanguage{\languagename}% | |
{\ifx\relax#3\else | |
\\\fontencoding{#3}\\\selectfont | |
\fi | |
########1}}}}% | |
{}% | |
\toks@\expandafter{##1}% | |
\edef##1{% | |
\bbl@csarg\noexpand{ensure@\languagename}% | |
{\the\toks@}}% | |
\fi | |
\expandafter\bbl@tempb | |
\fi}% | |
\expandafter\bbl@tempb\bbl@captionslist\today\@empty | |
\def\bbl@tempa##1{% elt for include list | |
\ifx##1\@empty\else | |
\bbl@csarg\in@{ensure@\languagename\expandafter}\expandafter{##1}% | |
\ifin@\else | |
\bbl@tempb##1\@empty | |
\fi | |
\expandafter\bbl@tempa | |
\fi}% | |
\bbl@tempa#1\@empty} | |
\def\bbl@captionslist{% | |
\prefacename\refname\abstractname\bibname\chaptername\appendixname | |
\contentsname\listfigurename\listtablename\indexname\figurename | |
\tablename\partname\enclname\ccname\headtoname\pagename\seename | |
\alsoname\proofname\glossaryname} | |
\def\bbl@ldfinit{% | |
\let\bbl@screset\@empty | |
\let\BabelStrings\bbl@opt@string | |
\let\BabelOptions\@empty | |
\let\BabelLanguages\relax | |
\ifx\originalTeX\@undefined | |
\let\originalTeX\@empty | |
\else | |
\originalTeX | |
\fi} | |
\def\LdfInit#1#2{% | |
\chardef\atcatcode=\catcode`\@ | |
\catcode`\@=11\relax | |
\chardef\eqcatcode=\catcode`\= | |
\catcode`\==12\relax | |
\expandafter\if\expandafter\@backslashchar | |
\expandafter\@car\string#2\@nil | |
\ifx#2\@undefined\else | |
\ldf@quit{#1}% | |
\fi | |
\else | |
\expandafter\ifx\csname#2\endcsname\relax\else | |
\ldf@quit{#1}% | |
\fi | |
\fi | |
\bbl@ldfinit} | |
\def\ldf@quit#1{% | |
\expandafter\main@language\expandafter{#1}% | |
\catcode`\@=\atcatcode \let\atcatcode\relax | |
\catcode`\==\eqcatcode \let\eqcatcode\relax | |
\endinput} | |
\def\bbl@afterldf#1{% | |
\bbl@afterlang | |
\let\bbl@afterlang\relax | |
\let\BabelModifiers\relax | |
\let\bbl@screset\relax}% | |
\def\ldf@finish#1{% | |
\loadlocalcfg{#1}% | |
\bbl@afterldf{#1}% | |
\expandafter\main@language\expandafter{#1}% | |
\catcode`\@=\atcatcode \let\atcatcode\relax | |
\catcode`\==\eqcatcode \let\eqcatcode\relax} | |
\@onlypreamble\LdfInit | |
\@onlypreamble\ldf@quit | |
\@onlypreamble\ldf@finish | |
\def\main@language#1{% | |
\def\bbl@main@language{#1}% | |
\let\languagename\bbl@main@language | |
\bbl@patterns{\languagename}} | |
\AtBeginDocument{% | |
\expandafter\selectlanguage\expandafter{\bbl@main@language}% | |
\ifcase\bbl@engine\or\pagedir\bodydir\fi} % TODO - a better place | |
\def\select@language@x#1{% | |
\ifcase\bbl@select@type | |
\bbl@ifsamestring\languagename{#1}{}{\select@language{#1}}% | |
\else | |
\select@language{#1}% | |
\fi} | |
\def\bbl@add@special#1{% 1:a macro like \", \?, etc. | |
\bbl@add\dospecials{\do#1}% test @sanitize = \relax, for back. compat. | |
\bbl@ifunset{@sanitize}{}{\bbl@add\@sanitize{\@makeother#1}}% | |
\ifx\nfss@catcodes\@undefined\else % TODO - same for above | |
\begingroup | |
\catcode`#1\active | |
\nfss@catcodes | |
\ifnum\catcode`#1=\active | |
\endgroup | |
\bbl@add\nfss@catcodes{\@makeother#1}% | |
\else | |
\endgroup | |
\fi | |
\fi} | |
\def\bbl@remove@special#1{% | |
\begingroup | |
\def\x##1##2{\ifnum`#1=`##2\noexpand\@empty | |
\else\noexpand##1\noexpand##2\fi}% | |
\def\do{\x\do}% | |
\def\@makeother{\x\@makeother}% | |
\edef\x{\endgroup | |
\def\noexpand\dospecials{\dospecials}% | |
\expandafter\ifx\csname @sanitize\endcsname\relax\else | |
\def\noexpand\@sanitize{\@sanitize}% | |
\fi}% | |
\x} | |
\def\bbl@active@def#1#2#3#4{% | |
\@namedef{#3#1}{% | |
\expandafter\ifx\csname#2@sh@#1@\endcsname\relax | |
\bbl@afterelse\bbl@sh@select#2#1{#3@arg#1}{#4#1}% | |
\else | |
\bbl@afterfi\csname#2@sh@#1@\endcsname | |
\fi}% | |
\long\@namedef{#3@arg#1}##1{% | |
\expandafter\ifx\csname#2@sh@#1@\string##1@\endcsname\relax | |
\bbl@afterelse\csname#4#1\endcsname##1% | |
\else | |
\bbl@afterfi\csname#2@sh@#1@\string##1@\endcsname | |
\fi}}% | |
\def\initiate@active@char#1{% | |
\bbl@ifunset{active@char\string#1}% | |
{\bbl@withactive | |
{\expandafter\@initiate@active@char\expandafter}#1\string#1#1}% | |
{}} | |
\def\@initiate@active@char#1#2#3{% | |
\bbl@csarg\edef{oricat@#2}{\catcode`#2=\the\catcode`#2\relax}% | |
\ifx#1\@undefined | |
\bbl@csarg\edef{oridef@#2}{\let\noexpand#1\noexpand\@undefined}% | |
\else | |
\bbl@csarg\let{oridef@@#2}#1% | |
\bbl@csarg\edef{oridef@#2}{% | |
\let\noexpand#1% | |
\expandafter\noexpand\csname bbl@oridef@@#2\endcsname}% | |
\fi | |
\ifx#1#3\relax | |
\expandafter\let\csname normal@char#2\endcsname#3% | |
\else | |
\bbl@info{Making #2 an active character}% | |
\ifnum\mathcode`#2="8000 | |
\@namedef{normal@char#2}{% | |
\textormath{#3}{\csname bbl@oridef@@#2\endcsname}}% | |
\else | |
\@namedef{normal@char#2}{#3}% | |
\fi | |
\bbl@restoreactive{#2}% | |
\AtBeginDocument{% | |
\catcode`#2\active | |
\if@filesw | |
\immediate\write\@mainaux{\catcode`\string#2\active}% | |
\fi}% | |
\expandafter\bbl@add@special\csname#2\endcsname | |
\catcode`#2\active | |
\fi | |
\let\bbl@tempa\@firstoftwo | |
\if\string^#2% | |
\def\bbl@tempa{\noexpand\textormath}% | |
\else | |
\ifx\bbl@mathnormal\@undefined\else | |
\let\bbl@tempa\bbl@mathnormal | |
\fi | |
\fi | |
\expandafter\edef\csname active@char#2\endcsname{% | |
\bbl@tempa | |
{\noexpand\if@safe@actives | |
\noexpand\expandafter | |
\expandafter\noexpand\csname normal@char#2\endcsname | |
\noexpand\else | |
\noexpand\expandafter | |
\expandafter\noexpand\csname bbl@doactive#2\endcsname | |
\noexpand\fi}% | |
{\expandafter\noexpand\csname normal@char#2\endcsname}}% | |
\bbl@csarg\edef{doactive#2}{% | |
\expandafter\noexpand\csname user@active#2\endcsname}% | |
\bbl@csarg\edef{active@#2}{% | |
\noexpand\active@prefix\noexpand#1% | |
\expandafter\noexpand\csname active@char#2\endcsname}% | |
\bbl@csarg\edef{normal@#2}{% | |
\noexpand\active@prefix\noexpand#1% | |
\expandafter\noexpand\csname normal@char#2\endcsname}% | |
\expandafter\let\expandafter#1\csname bbl@normal@#2\endcsname | |
\bbl@active@def#2\user@group{user@active}{language@active}% | |
\bbl@active@def#2\language@group{language@active}{system@active}% | |
\bbl@active@def#2\system@group{system@active}{normal@char}% | |
\expandafter\edef\csname\user@group @sh@#2@@\endcsname | |
{\expandafter\noexpand\csname normal@char#2\endcsname}% | |
\expandafter\edef\csname\user@group @sh@#2@\string\protect@\endcsname | |
{\expandafter\noexpand\csname user@active#2\endcsname}% | |
\if\string'#2% | |
\let\prim@s\bbl@prim@s | |
\let\active@math@prime#1% | |
\fi | |
\bbl@usehooks{initiateactive}{{#1}{#2}{#3}}} | |
\@ifpackagewith{babel}{KeepShorthandsActive}% | |
{\let\bbl@restoreactive\@gobble}% | |
{\def\bbl@restoreactive#1{% | |
\bbl@exp{% | |
\\\AfterBabelLanguage\\\CurrentOption | |
{\catcode`#1=\the\catcode`#1\relax}% | |
\\\AtEndOfPackage | |
{\catcode`#1=\the\catcode`#1\relax}}}% | |
\AtEndOfPackage{\let\bbl@restoreactive\@gobble}} | |
\def\bbl@sh@select#1#2{% | |
\expandafter\ifx\csname#1@sh@#2@sel\endcsname\relax | |
\bbl@afterelse\bbl@scndcs | |
\else | |
\bbl@afterfi\csname#1@sh@#2@sel\endcsname | |
\fi} | |
\def\active@prefix#1{% | |
\ifx\protect\@typeset@protect | |
\else | |
\ifx\protect\@unexpandable@protect | |
\noexpand#1% | |
\else | |
\protect#1% | |
\fi | |
\expandafter\@gobble | |
\fi} | |
\newif\if@safe@actives | |
\@safe@activesfalse | |
\def\bbl@restore@actives{\if@safe@actives\@safe@activesfalse\fi} | |
\def\bbl@activate#1{% | |
\bbl@withactive{\expandafter\let\expandafter}#1% | |
\csname bbl@active@\string#1\endcsname} | |
\def\bbl@deactivate#1{% | |
\bbl@withactive{\expandafter\let\expandafter}#1% | |
\csname bbl@normal@\string#1\endcsname} | |
\def\bbl@firstcs#1#2{\csname#1\endcsname} | |
\def\bbl@scndcs#1#2{\csname#2\endcsname} | |
\def\declare@shorthand#1#2{\@decl@short{#1}#2\@nil} | |
\def\@decl@short#1#2#3\@nil#4{% | |
\def\bbl@tempa{#3}% | |
\ifx\bbl@tempa\@empty | |
\expandafter\let\csname #1@sh@\string#2@sel\endcsname\bbl@scndcs | |
\bbl@ifunset{#1@sh@\string#2@}{}% | |
{\def\bbl@tempa{#4}% | |
\expandafter\ifx\csname#1@sh@\string#2@\endcsname\bbl@tempa | |
\else | |
\bbl@info | |
{Redefining #1 shorthand \string#2\\% | |
in language \CurrentOption}% | |
\fi}% | |
\@namedef{#1@sh@\string#2@}{#4}% | |
\else | |
\expandafter\let\csname #1@sh@\string#2@sel\endcsname\bbl@firstcs | |
\bbl@ifunset{#1@sh@\string#2@\string#3@}{}% | |
{\def\bbl@tempa{#4}% | |
\expandafter\ifx\csname#1@sh@\string#2@\string#3@\endcsname\bbl@tempa | |
\else | |
\bbl@info | |
{Redefining #1 shorthand \string#2\string#3\\% | |
in language \CurrentOption}% | |
\fi}% | |
\@namedef{#1@sh@\string#2@\string#3@}{#4}% | |
\fi} | |
\def\textormath{% | |
\ifmmode | |
\expandafter\@secondoftwo | |
\else | |
\expandafter\@firstoftwo | |
\fi} | |
\def\user@group{user} | |
\def\language@group{english} | |
\def\system@group{system} | |
\def\useshorthands{% | |
\@ifstar\bbl@usesh@s{\bbl@usesh@x{}}} | |
\def\bbl@usesh@s#1{% | |
\bbl@usesh@x | |
{\AddBabelHook{babel-sh-\string#1}{afterextras}{\bbl@activate{#1}}}% | |
{#1}} | |
\def\bbl@usesh@x#1#2{% | |
\bbl@ifshorthand{#2}% | |
{\def\user@group{user}% | |
\initiate@active@char{#2}% | |
#1% | |
\bbl@activate{#2}}% | |
{\bbl@error | |
{Cannot declare a shorthand turned off (\string#2)} | |
{Sorry, but you cannot use shorthands which have been\\% | |
turned off in the package options}}} | |
\def\user@language@group{user@\language@group} | |
\def\bbl@set@user@generic#1#2{% | |
\bbl@ifunset{user@generic@active#1}% | |
{\bbl@active@def#1\user@language@group{user@active}{user@generic@active}% | |
\bbl@active@def#1\user@group{user@generic@active}{language@active}% | |
\expandafter\edef\csname#2@sh@#1@@\endcsname{% | |
\expandafter\noexpand\csname normal@char#1\endcsname}% | |
\expandafter\edef\csname#2@sh@#1@\string\protect@\endcsname{% | |
\expandafter\noexpand\csname user@active#1\endcsname}}% | |
\@empty} | |
\newcommand\defineshorthand[3][user]{% | |
\edef\bbl@tempa{\zap@space#1 \@empty}% | |
\bbl@for\bbl@tempb\bbl@tempa{% | |
\if*\expandafter\@car\bbl@tempb\@nil | |
\edef\bbl@tempb{user@\expandafter\@gobble\bbl@tempb}% | |
\@expandtwoargs | |
\bbl@set@user@generic{\expandafter\string\@car#2\@nil}\bbl@tempb | |
\fi | |
\declare@shorthand{\bbl@tempb}{#2}{#3}}} | |
\def\languageshorthands#1{\def\language@group{#1}} | |
\def\aliasshorthand#1#2{% | |
\bbl@ifshorthand{#2}% | |
{\expandafter\ifx\csname active@char\string#2\endcsname\relax | |
\ifx\document\@notprerr | |
\@notshorthand{#2}% | |
\else | |
\initiate@active@char{#2}% | |
\expandafter\let\csname active@char\string#2\expandafter\endcsname | |
\csname active@char\string#1\endcsname | |
\expandafter\let\csname normal@char\string#2\expandafter\endcsname | |
\csname normal@char\string#1\endcsname | |
\bbl@activate{#2}% | |
\fi | |
\fi}% | |
{\bbl@error | |
{Cannot declare a shorthand turned off (\string#2)} | |
{Sorry, but you cannot use shorthands which have been\\% | |
turned off in the package options}}} | |
\def\@notshorthand#1{% | |
\bbl@error{% | |
The character `\string #1' should be made a shorthand character;\\% | |
add the command \string\useshorthands\string{#1\string} to | |
the preamble.\\% | |
I will ignore your instruction}% | |
{You may proceed, but expect unexpected results}} | |
\newcommand*\shorthandon[1]{\bbl@switch@sh\@ne#1\@nnil} | |
\DeclareRobustCommand*\shorthandoff{% | |
\@ifstar{\bbl@shorthandoff\tw@}{\bbl@shorthandoff\z@}} | |
\def\bbl@shorthandoff#1#2{\bbl@switch@sh#1#2\@nnil} | |
\def\bbl@switch@sh#1#2{% | |
\ifx#2\@nnil\else | |
\bbl@ifunset{bbl@active@\string#2}% | |
{\bbl@error | |
{I cannot switch `\string#2' on or off--not a shorthand}% | |
{This character is not a shorthand. Maybe you made\\% | |
a typing mistake? I will ignore your instruction}}% | |
{\ifcase#1% | |
\catcode`#212\relax | |
\or | |
\catcode`#2\active | |
\or | |
\csname bbl@oricat@\string#2\endcsname | |
\csname bbl@oridef@\string#2\endcsname | |
\fi}% | |
\bbl@afterfi\bbl@switch@sh#1% | |
\fi} | |
\def\babelshorthand{\active@prefix\babelshorthand\bbl@putsh} | |
\def\bbl@putsh#1{% | |
\bbl@ifunset{bbl@active@\string#1}% | |
{\bbl@putsh@i#1\@empty\@nnil}% | |
{\csname bbl@active@\string#1\endcsname}} | |
\def\bbl@putsh@i#1#2\@nnil{% | |
\csname\languagename @sh@\string#1@% | |
\ifx\@empty#2\else\string#2@\fi\endcsname} | |
\ifx\bbl@opt@shorthands\@nnil\else | |
\let\bbl@s@initiate@active@char\initiate@active@char | |
\def\initiate@active@char#1{% | |
\bbl@ifshorthand{#1}{\bbl@s@initiate@active@char{#1}}{}} | |
\let\bbl@s@switch@sh\bbl@switch@sh | |
\def\bbl@switch@sh#1#2{% | |
\ifx#2\@nnil\else | |
\bbl@afterfi | |
\bbl@ifshorthand{#2}{\bbl@s@switch@sh#1{#2}}{\bbl@switch@sh#1}% | |
\fi} | |
\let\bbl@s@activate\bbl@activate | |
\def\bbl@activate#1{% | |
\bbl@ifshorthand{#1}{\bbl@s@activate{#1}}{}} | |
\let\bbl@s@deactivate\bbl@deactivate | |
\def\bbl@deactivate#1{% | |
\bbl@ifshorthand{#1}{\bbl@s@deactivate{#1}}{}} | |
\fi | |
\def\bbl@prim@s{% | |
\prime\futurelet\@let@token\bbl@pr@m@s} | |
\def\bbl@if@primes#1#2{% | |
\ifx#1\@let@token | |
\expandafter\@firstoftwo | |
\else\ifx#2\@let@token | |
\bbl@afterelse\expandafter\@firstoftwo | |
\else | |
\bbl@afterfi\expandafter\@secondoftwo | |
\fi\fi} | |
\begingroup | |
\catcode`\^=7 \catcode`\*=\active \lccode`\*=`\^ | |
\catcode`\'=12 \catcode`\"=\active \lccode`\"=`\' | |
\lowercase{% | |
\gdef\bbl@pr@m@s{% | |
\bbl@if@primes"'% | |
\pr@@@s | |
{\bbl@if@primes*^\pr@@@t\egroup}}} | |
\endgroup | |
\initiate@active@char{~} | |
\declare@shorthand{system}{~}{\leavevmode\nobreak\ } | |
\bbl@activate{~} | |
\expandafter\def\csname OT1dqpos\endcsname{127} | |
\expandafter\def\csname T1dqpos\endcsname{4} | |
\ifx\f@encoding\@undefined | |
\def\f@encoding{OT1} | |
\fi | |
\newcommand\languageattribute[2]{% | |
\def\bbl@tempc{#1}% | |
\bbl@fixname\bbl@tempc | |
\bbl@iflanguage\bbl@tempc{% | |
\bbl@vforeach{#2}{% | |
\ifx\bbl@known@attribs\@undefined | |
\in@false | |
\else | |
\bbl@xin@{,\bbl@tempc-##1,}{,\bbl@known@attribs,}% | |
\fi | |
\ifin@ | |
\bbl@warning{% | |
You have more than once selected the attribute '##1'\\% | |
for language #1}% | |
\else | |
\bbl@exp{% | |
\\\bbl@add@list\\\bbl@known@attribs{\bbl@tempc-##1}}% | |
\edef\bbl@tempa{\bbl@tempc-##1}% | |
\expandafter\bbl@ifknown@ttrib\expandafter{\bbl@tempa}\bbl@attributes% | |
{\csname\bbl@tempc @attr@##1\endcsname}% | |
{\@attrerr{\bbl@tempc}{##1}}% | |
\fi}}} | |
\@onlypreamble\languageattribute | |
\newcommand*{\@attrerr}[2]{% | |
\bbl@error | |
{The attribute #2 is unknown for language #1.}% | |
{Your command will be ignored, type <return> to proceed}} | |
\def\bbl@declare@ttribute#1#2#3{% | |
\bbl@xin@{,#2,}{,\BabelModifiers,}% | |
\ifin@ | |
\AfterBabelLanguage{#1}{\languageattribute{#1}{#2}}% | |
\fi | |
\bbl@add@list\bbl@attributes{#1-#2}% | |
\expandafter\def\csname#1@attr@#2\endcsname{#3}} | |
\def\bbl@ifattributeset#1#2#3#4{% | |
\ifx\bbl@known@attribs\@undefined | |
\in@false | |
\else | |
\bbl@xin@{,#1-#2,}{,\bbl@known@attribs,}% | |
\fi | |
\ifin@ | |
\bbl@afterelse#3% | |
\else | |
\bbl@afterfi#4% | |
\fi | |
} | |
\def\bbl@ifknown@ttrib#1#2{% | |
\let\bbl@tempa\@secondoftwo | |
\bbl@loopx\bbl@tempb{#2}{% | |
\expandafter\in@\expandafter{\expandafter,\bbl@tempb,}{,#1,}% | |
\ifin@ | |
\let\bbl@tempa\@firstoftwo | |
\else | |
\fi}% | |
\bbl@tempa | |
} | |
\def\bbl@clear@ttribs{% | |
\ifx\bbl@attributes\@undefined\else | |
\bbl@loopx\bbl@tempa{\bbl@attributes}{% | |
\expandafter\bbl@clear@ttrib\bbl@tempa. | |
}% | |
\let\bbl@attributes\@undefined | |
\fi} | |
\def\bbl@clear@ttrib#1-#2.{% | |
\expandafter\let\csname#1@attr@#2\endcsname\@undefined} | |
\AtBeginDocument{\bbl@clear@ttribs} | |
\def\babel@beginsave{\babel@savecnt\z@} | |
\newcount\babel@savecnt | |
\babel@beginsave | |
\def\babel@save#1{% | |
\expandafter\let\csname babel@\number\babel@savecnt\endcsname#1\relax | |
\toks@\expandafter{\originalTeX\let#1=}% | |
\bbl@exp{% | |
\def\\\originalTeX{\the\toks@\<babel@\number\babel@savecnt>\relax}}% | |
\advance\babel@savecnt\@ne} | |
\def\babel@savevariable#1{% | |
\toks@\expandafter{\originalTeX #1=}% | |
\bbl@exp{\def\\\originalTeX{\the\toks@\the#1\relax}}} | |
\def\bbl@frenchspacing{% | |
\ifnum\the\sfcode`\.=\@m | |
\let\bbl@nonfrenchspacing\relax | |
\else | |
\frenchspacing | |
\let\bbl@nonfrenchspacing\nonfrenchspacing | |
\fi} | |
\let\bbl@nonfrenchspacing\nonfrenchspacing | |
\def\babeltags#1{% | |
\edef\bbl@tempa{\zap@space#1 \@empty}% | |
\def\bbl@tempb##1=##2\@@{% | |
\edef\bbl@tempc{% | |
\noexpand\newcommand | |
\expandafter\noexpand\csname ##1\endcsname{% | |
\noexpand\protect | |
\expandafter\noexpand\csname otherlanguage*\endcsname{##2}} | |
\noexpand\newcommand | |
\expandafter\noexpand\csname text##1\endcsname{% | |
\noexpand\foreignlanguage{##2}}} | |
\bbl@tempc}% | |
\bbl@for\bbl@tempa\bbl@tempa{% | |
\expandafter\bbl@tempb\bbl@tempa\@@}} | |
\@onlypreamble\babelhyphenation | |
\AtEndOfPackage{% | |
\newcommand\babelhyphenation[2][\@empty]{% | |
\ifx\bbl@hyphenation@\relax | |
\let\bbl@hyphenation@\@empty | |
\fi | |
\ifx\bbl@hyphlist\@empty\else | |
\bbl@warning{% | |
You must not intermingle \string\selectlanguage\space and\\% | |
\string\babelhyphenation\space or some exceptions will not\\% | |
be taken into account. Reported}% | |
\fi | |
\ifx\@empty#1% | |
\protected@edef\bbl@hyphenation@{\bbl@hyphenation@\space#2}% | |
\else | |
\bbl@vforeach{#1}{% | |
\def\bbl@tempa{##1}% | |
\bbl@fixname\bbl@tempa | |
\bbl@iflanguage\bbl@tempa{% | |
\bbl@csarg\protected@edef{hyphenation@\bbl@tempa}{% | |
\bbl@ifunset{bbl@hyphenation@\bbl@tempa}% | |
\@empty | |
{\csname bbl@hyphenation@\bbl@tempa\endcsname\space}% | |
#2}}}% | |
\fi}} | |
\def\bbl@allowhyphens{\ifvmode\else\nobreak\hskip\z@skip\fi} | |
\def\bbl@t@one{T1} | |
\def\allowhyphens{\ifx\cf@encoding\bbl@t@one\else\bbl@allowhyphens\fi} | |
\newcommand\babelnullhyphen{\char\hyphenchar\font} | |
\def\babelhyphen{\active@prefix\babelhyphen\bbl@hyphen} | |
\def\bbl@hyphen{% | |
\@ifstar{\bbl@hyphen@i @}{\bbl@hyphen@i\@empty}} | |
\def\bbl@hyphen@i#1#2{% | |
\bbl@ifunset{bbl@hy@#1#2\@empty}% | |
{\csname bbl@#1usehyphen\endcsname{\discretionary{#2}{}{#2}}}% | |
{\csname bbl@hy@#1#2\@empty\endcsname}} | |
\def\bbl@usehyphen#1{% | |
\leavevmode | |
\ifdim\lastskip>\z@\mbox{#1}\else\nobreak#1\fi | |
\nobreak\hskip\z@skip} | |
\def\bbl@@usehyphen#1{% | |
\leavevmode\ifdim\lastskip>\z@\mbox{#1}\else#1\fi} | |
\def\bbl@hyphenchar{% | |
\ifnum\hyphenchar\font=\m@ne | |
\babelnullhyphen | |
\else | |
\char\hyphenchar\font | |
\fi} | |
\def\bbl@hy@soft{\bbl@usehyphen{\discretionary{\bbl@hyphenchar}{}{}}} | |
\def\bbl@hy@@soft{\bbl@@usehyphen{\discretionary{\bbl@hyphenchar}{}{}}} | |
\def\bbl@hy@hard{\bbl@usehyphen\bbl@hyphenchar} | |
\def\bbl@hy@@hard{\bbl@@usehyphen\bbl@hyphenchar} | |
\def\bbl@hy@nobreak{\bbl@usehyphen{\mbox{\bbl@hyphenchar}}} | |
\def\bbl@hy@@nobreak{\mbox{\bbl@hyphenchar}} | |
\def\bbl@hy@repeat{% | |
\bbl@usehyphen{% | |
\discretionary{\bbl@hyphenchar}{\bbl@hyphenchar}{\bbl@hyphenchar}}} | |
\def\bbl@hy@@repeat{% | |
\bbl@@usehyphen{% | |
\discretionary{\bbl@hyphenchar}{\bbl@hyphenchar}{\bbl@hyphenchar}}} | |
\def\bbl@hy@empty{\hskip\z@skip} | |
\def\bbl@hy@@empty{\discretionary{}{}{}} | |
\def\bbl@disc#1#2{\nobreak\discretionary{#2-}{}{#1}\bbl@allowhyphens} | |
\def\bbl@toglobal#1{\global\let#1#1} | |
\def\bbl@recatcode#1{% | |
\@tempcnta="7F | |
\def\bbl@tempa{% | |
\ifnum\@tempcnta>"FF\else | |
\catcode\@tempcnta=#1\relax | |
\advance\@tempcnta\@ne | |
\expandafter\bbl@tempa | |
\fi}% | |
\bbl@tempa} | |
\@ifpackagewith{babel}{nocase}% | |
{\let\bbl@patchuclc\relax}% | |
{\def\bbl@patchuclc{% | |
\global\let\bbl@patchuclc\relax | |
\g@addto@macro\@uclclist{\reserved@b{\reserved@b\bbl@uclc}}% | |
\gdef\bbl@uclc##1{% | |
\let\bbl@encoded\bbl@encoded@uclc | |
\bbl@ifunset{\languagename @bbl@uclc}% and resumes it | |
{##1}% | |
{\let\bbl@tempa##1\relax % Used by LANG@bbl@uclc | |
\csname\languagename @bbl@uclc\endcsname}% | |
{\bbl@tolower\@empty}{\bbl@toupper\@empty}}% | |
\gdef\bbl@tolower{\csname\languagename @bbl@lc\endcsname}% | |
\gdef\bbl@toupper{\csname\languagename @bbl@uc\endcsname}}} | |
\@onlypreamble\StartBabelCommands | |
\def\StartBabelCommands{% | |
\begingroup | |
\bbl@recatcode{11}% | |
\def\SetStringLoop##1##2{% | |
\def\bbl@templ####1{\expandafter\noexpand\csname##1\endcsname}% | |
\count@\z@ | |
\bbl@loop\bbl@tempa{##2}{% empty items and spaces are ok | |
\advance\count@\@ne | |
\toks@\expandafter{\bbl@tempa}% | |
\bbl@exp{% | |
\\\SetString\bbl@templ{\romannumeral\count@}{\the\toks@}% | |
\count@=\the\count@\relax}}}% | |
\newcommand\SetCase[3][]{% | |
\bbl@patchuclc | |
\bbl@forlang\bbl@tempa{% | |
\expandafter\bbl@encstring | |
\csname\bbl@tempa @bbl@uclc\endcsname{\bbl@tempa##1}% | |
\expandafter\bbl@encstring | |
\csname\bbl@tempa @bbl@uc\endcsname{##2}% | |
\expandafter\bbl@encstring | |
\csname\bbl@tempa @bbl@lc\endcsname{##3}}}% | |
\newcommand\SetHyphenMap[1]{% | |
\bbl@forlang\bbl@tempa{% | |
\expandafter\bbl@stringdef | |
\csname\bbl@tempa @bbl@hyphenmap\endcsname{##1}}} | |
\def\bbl@provstring##1##2{% | |
\providecommand##1{##2}% | |
\bbl@toglobal##1}% | |
\global\let\bbl@scafter\@empty | |
\let\StartBabelCommands\bbl@startcmds | |
\ifx\BabelLanguages\relax | |
\let\BabelLanguages\CurrentOption | |
\fi | |
\begingroup | |
\let\bbl@screset\@nnil % local flag - disable 1st stopcommands | |
\StartBabelCommands} | |
\def\bbl@startcmds{% | |
\ifx\bbl@screset\@nnil\else | |
\bbl@usehooks{stopcommands}{}% | |
\fi | |
\endgroup | |
\begingroup | |
\@ifstar | |
{\ifx\bbl@opt@strings\@nnil | |
\let\bbl@opt@strings\BabelStringsDefault | |
\fi | |
\bbl@startcmds@i}% | |
\bbl@startcmds@i} | |
\def\bbl@startcmds@i#1#2{% | |
\edef\bbl@L{\zap@space#1 \@empty}% | |
\edef\bbl@G{\zap@space#2 \@empty}% | |
\bbl@startcmds@ii} | |
\newcommand\bbl@startcmds@ii[1][\@empty]{% | |
\let\SetString\@gobbletwo | |
\let\bbl@stringdef\@gobbletwo | |
\let\AfterBabelCommands\@gobble | |
\ifx\@empty#1% | |
\def\bbl@sc@label{generic}% | |
\def\bbl@encstring##1##2{% | |
\ProvideTextCommandDefault##1{##2}% | |
\bbl@toglobal##1% | |
\expandafter\bbl@toglobal\csname\string?\string##1\endcsname}% | |
\let\bbl@sctest\in@true | |
\else | |
\let\bbl@sc@charset\space % <- zapped below | |
\let\bbl@sc@fontenc\space % <- " " | |
\def\bbl@tempa##1=##2\@nil{% | |
\bbl@csarg\edef{sc@\zap@space##1 \@empty}{##2 }}% | |
\bbl@vforeach{label=#1}{\bbl@tempa##1\@nil}% | |
\def\bbl@tempa##1 ##2{% space -> comma | |
##1% | |
\ifx\@empty##2\else\ifx,##1,\else,\fi\bbl@afterfi\bbl@tempa##2\fi}% | |
\edef\bbl@sc@fontenc{\expandafter\bbl@tempa\bbl@sc@fontenc\@empty}% | |
\edef\bbl@sc@label{\expandafter\zap@space\bbl@sc@label\@empty}% | |
\edef\bbl@sc@charset{\expandafter\zap@space\bbl@sc@charset\@empty}% | |
\def\bbl@encstring##1##2{% | |
\bbl@foreach\bbl@sc@fontenc{% | |
\bbl@ifunset{T@####1}% | |
{}% | |
{\ProvideTextCommand##1{####1}{##2}% | |
\bbl@toglobal##1% | |
\expandafter | |
\bbl@toglobal\csname####1\string##1\endcsname}}}% | |
\def\bbl@sctest{% | |
\bbl@xin@{,\bbl@opt@strings,}{,\bbl@sc@label,\bbl@sc@fontenc,}}% | |
\fi | |
\ifx\bbl@opt@strings\@nnil % ie, no strings key -> defaults | |
\else\ifx\bbl@opt@strings\relax % ie, strings=encoded | |
\let\AfterBabelCommands\bbl@aftercmds | |
\let\SetString\bbl@setstring | |
\let\bbl@stringdef\bbl@encstring | |
\else % ie, strings=value | |
\bbl@sctest | |
\ifin@ | |
\let\AfterBabelCommands\bbl@aftercmds | |
\let\SetString\bbl@setstring | |
\let\bbl@stringdef\bbl@provstring | |
\fi\fi\fi | |
\bbl@scswitch | |
\ifx\bbl@G\@empty | |
\def\SetString##1##2{% | |
\bbl@error{Missing group for string \string##1}% | |
{You must assign strings to some category, typically\\% | |
captions or extras, but you set none}}% | |
\fi | |
\ifx\@empty#1% | |
\bbl@usehooks{defaultcommands}{}% | |
\else | |
\@expandtwoargs | |
\bbl@usehooks{encodedcommands}{{\bbl@sc@charset}{\bbl@sc@fontenc}}% | |
\fi} | |
\def\bbl@forlang#1#2{% | |
\bbl@for#1\bbl@L{% | |
\bbl@xin@{,#1,}{,\BabelLanguages,}% | |
\ifin@#2\relax\fi}} | |
\def\bbl@scswitch{% | |
\bbl@forlang\bbl@tempa{% | |
\ifx\bbl@G\@empty\else | |
\ifx\SetString\@gobbletwo\else | |
\edef\bbl@GL{\bbl@G\bbl@tempa}% | |
\bbl@xin@{,\bbl@GL,}{,\bbl@screset,}% | |
\ifin@\else | |
\global\expandafter\let\csname\bbl@GL\endcsname\@undefined | |
\xdef\bbl@screset{\bbl@screset,\bbl@GL}% | |
\fi | |
\fi | |
\fi}} | |
\AtEndOfPackage{% | |
\def\bbl@forlang#1#2{\bbl@for#1\bbl@L{\bbl@ifunset{date#1}{}{#2}}}% | |
\let\bbl@scswitch\relax} | |
\@onlypreamble\EndBabelCommands | |
\def\EndBabelCommands{% | |
\bbl@usehooks{stopcommands}{}% | |
\endgroup | |
\endgroup | |
\bbl@scafter} | |
\def\bbl@setstring#1#2{% | |
\bbl@forlang\bbl@tempa{% | |
\edef\bbl@LC{\bbl@tempa\bbl@stripslash#1}% | |
\bbl@ifunset{\bbl@LC}% eg, \germanchaptername | |
{\global\expandafter % TODO - con \bbl@exp ? | |
\bbl@add\csname\bbl@G\bbl@tempa\expandafter\endcsname\expandafter | |
{\expandafter\bbl@scset\expandafter#1\csname\bbl@LC\endcsname}}% | |
{}% | |
\def\BabelString{#2}% | |
\bbl@usehooks{stringprocess}{}% | |
\expandafter\bbl@stringdef | |
\csname\bbl@LC\expandafter\endcsname\expandafter{\BabelString}}} | |
\ifx\bbl@opt@strings\relax | |
\def\bbl@scset#1#2{\def#1{\bbl@encoded#2}} | |
\bbl@patchuclc | |
\let\bbl@encoded\relax | |
\def\bbl@encoded@uclc#1{% | |
\@inmathwarn#1% | |
\expandafter\ifx\csname\cf@encoding\string#1\endcsname\relax | |
\expandafter\ifx\csname ?\string#1\endcsname\relax | |
\TextSymbolUnavailable#1% | |
\else | |
\csname ?\string#1\endcsname | |
\fi | |
\else | |
\csname\cf@encoding\string#1\endcsname | |
\fi} | |
\else | |
\def\bbl@scset#1#2{\def#1{#2}} | |
\fi | |
\def\bbl@aftercmds#1{% | |
\toks@\expandafter{\bbl@scafter#1}% | |
\xdef\bbl@scafter{\the\toks@}} | |
\newcommand\BabelLower[2]{% one to one. | |
\ifnum\lccode#1=#2\else | |
\babel@savevariable{\lccode#1}% | |
\lccode#1=#2\relax | |
\fi} | |
\newcommand\BabelLowerMM[4]{% many-to-many | |
\@tempcnta=#1\relax | |
\@tempcntb=#4\relax | |
\def\bbl@tempa{% | |
\ifnum\@tempcnta>#2\else | |
\@expandtwoargs\BabelLower{\the\@tempcnta}{\the\@tempcntb}% | |
\advance\@tempcnta#3\relax | |
\advance\@tempcntb#3\relax | |
\expandafter\bbl@tempa | |
\fi}% | |
\bbl@tempa} | |
\newcommand\BabelLowerMO[4]{% many-to-one | |
\@tempcnta=#1\relax | |
\def\bbl@tempa{% | |
\ifnum\@tempcnta>#2\else | |
\@expandtwoargs\BabelLower{\the\@tempcnta}{#4}% | |
\advance\@tempcnta#3 | |
\expandafter\bbl@tempa | |
\fi}% | |
\bbl@tempa} | |
\AtEndOfPackage{% | |
\ifx\bbl@opt@hyphenmap\@undefined | |
\bbl@xin@{,}{\bbl@language@opts}% | |
\chardef\bbl@opt@hyphenmap\ifin@4\else\@ne\fi | |
\fi} | |
\def\set@low@box#1{\setbox\tw@\hbox{,}\setbox\z@\hbox{#1}% | |
\dimen\z@\ht\z@ \advance\dimen\z@ -\ht\tw@% | |
\setbox\z@\hbox{\lower\dimen\z@ \box\z@}\ht\z@\ht\tw@ \dp\z@\dp\tw@} | |
\def\save@sf@q#1{\leavevmode | |
\begingroup | |
\edef\@SF{\spacefactor\the\spacefactor}#1\@SF | |
\endgroup} | |
\ProvideTextCommand{\quotedblbase}{OT1}{% | |
\save@sf@q{\set@low@box{\textquotedblright\/}% | |
\box\z@\kern-.04em\bbl@allowhyphens}} | |
\ProvideTextCommandDefault{\quotedblbase}{% | |
\UseTextSymbol{OT1}{\quotedblbase}} | |
\ProvideTextCommand{\quotesinglbase}{OT1}{% | |
\save@sf@q{\set@low@box{\textquoteright\/}% | |
\box\z@\kern-.04em\bbl@allowhyphens}} | |
\ProvideTextCommandDefault{\quotesinglbase}{% | |
\UseTextSymbol{OT1}{\quotesinglbase}} | |
\ProvideTextCommand{\guillemotleft}{OT1}{% | |
\ifmmode | |
\ll | |
\else | |
\save@sf@q{\nobreak | |
\raise.2ex\hbox{$\scriptscriptstyle\ll$}\bbl@allowhyphens}% | |
\fi} | |
\ProvideTextCommand{\guillemotright}{OT1}{% | |
\ifmmode | |
\gg | |
\else | |
\save@sf@q{\nobreak | |
\raise.2ex\hbox{$\scriptscriptstyle\gg$}\bbl@allowhyphens}% | |
\fi} | |
\ProvideTextCommandDefault{\guillemotleft}{% | |
\UseTextSymbol{OT1}{\guillemotleft}} | |
\ProvideTextCommandDefault{\guillemotright}{% | |
\UseTextSymbol{OT1}{\guillemotright}} | |
\ProvideTextCommand{\guilsinglleft}{OT1}{% | |
\ifmmode | |
<% | |
\else | |
\save@sf@q{\nobreak | |
\raise.2ex\hbox{$\scriptscriptstyle<$}\bbl@allowhyphens}% | |
\fi} | |
\ProvideTextCommand{\guilsinglright}{OT1}{% | |
\ifmmode | |
>% | |
\else | |
\save@sf@q{\nobreak | |
\raise.2ex\hbox{$\scriptscriptstyle>$}\bbl@allowhyphens}% | |
\fi} | |
\ProvideTextCommandDefault{\guilsinglleft}{% | |
\UseTextSymbol{OT1}{\guilsinglleft}} | |
\ProvideTextCommandDefault{\guilsinglright}{% | |
\UseTextSymbol{OT1}{\guilsinglright}} | |
\DeclareTextCommand{\ij}{OT1}{% | |
i\kern-0.02em\bbl@allowhyphens j} | |
\DeclareTextCommand{\IJ}{OT1}{% | |
I\kern-0.02em\bbl@allowhyphens J} | |
\DeclareTextCommand{\ij}{T1}{\char188} | |
\DeclareTextCommand{\IJ}{T1}{\char156} | |
\ProvideTextCommandDefault{\ij}{% | |
\UseTextSymbol{OT1}{\ij}} | |
\ProvideTextCommandDefault{\IJ}{% | |
\UseTextSymbol{OT1}{\IJ}} | |
\def\crrtic@{\hrule height0.1ex width0.3em} | |
\def\crttic@{\hrule height0.1ex width0.33em} | |
\def\ddj@{% | |
\setbox0\hbox{d}\dimen@=\ht0 | |
\advance\dimen@1ex | |
\[email protected]\dimen@ | |
\dimen@ii\expandafter\rem@pt\the\fontdimen\@ne\font\dimen@ | |
\advance\[email protected] | |
\leavevmode\rlap{\raise\dimen@\hbox{\kern\dimen@ii\vbox{\crrtic@}}}} | |
\def\DDJ@{% | |
\setbox0\hbox{D}\dimen@=.55\ht0 | |
\dimen@ii\expandafter\rem@pt\the\fontdimen\@ne\font\dimen@ | |
\advance\[email protected] % correction for the dash position | |
\advance\[email protected]\fontdimen7\font % correction for cmtt font | |
\dimen\thr@@\expandafter\rem@pt\the\fontdimen7\font\dimen@ | |
\leavevmode\rlap{\raise\dimen@\hbox{\kern\dimen@ii\vbox{\crttic@}}}} | |
\DeclareTextCommand{\dj}{OT1}{\ddj@ d} | |
\DeclareTextCommand{\DJ}{OT1}{\DDJ@ D} | |
\ProvideTextCommandDefault{\dj}{% | |
\UseTextSymbol{OT1}{\dj}} | |
\ProvideTextCommandDefault{\DJ}{% | |
\UseTextSymbol{OT1}{\DJ}} | |
\DeclareTextCommand{\SS}{OT1}{SS} | |
\ProvideTextCommandDefault{\SS}{\UseTextSymbol{OT1}{\SS}} | |
\ProvideTextCommandDefault{\glq}{% | |
\textormath{\quotesinglbase}{\mbox{\quotesinglbase}}} | |
\ProvideTextCommand{\grq}{T1}{% | |
\textormath{\textquoteleft}{\mbox{\textquoteleft}}} | |
\ProvideTextCommand{\grq}{TU}{% | |
\textormath{\textquoteleft}{\mbox{\textquoteleft}}} | |
\ProvideTextCommand{\grq}{OT1}{% | |
\save@sf@q{\kern-.0125em | |
\textormath{\textquoteleft}{\mbox{\textquoteleft}}% | |
\kern.07em\relax}} | |
\ProvideTextCommandDefault{\grq}{\UseTextSymbol{OT1}\grq} | |
\ProvideTextCommandDefault{\glqq}{% | |
\textormath{\quotedblbase}{\mbox{\quotedblbase}}} | |
\ProvideTextCommand{\grqq}{T1}{% | |
\textormath{\textquotedblleft}{\mbox{\textquotedblleft}}} | |
\ProvideTextCommand{\grqq}{TU}{% | |
\textormath{\textquotedblleft}{\mbox{\textquotedblleft}}} | |
\ProvideTextCommand{\grqq}{OT1}{% | |
\save@sf@q{\kern-.07em | |
\textormath{\textquotedblleft}{\mbox{\textquotedblleft}}% | |
\kern.07em\relax}} | |
\ProvideTextCommandDefault{\grqq}{\UseTextSymbol{OT1}\grqq} | |
\ProvideTextCommandDefault{\flq}{% | |
\textormath{\guilsinglleft}{\mbox{\guilsinglleft}}} | |
\ProvideTextCommandDefault{\frq}{% | |
\textormath{\guilsinglright}{\mbox{\guilsinglright}}} | |
\ProvideTextCommandDefault{\flqq}{% | |
\textormath{\guillemotleft}{\mbox{\guillemotleft}}} | |
\ProvideTextCommandDefault{\frqq}{% | |
\textormath{\guillemotright}{\mbox{\guillemotright}}} | |
\def\umlauthigh{% | |
\def\bbl@umlauta##1{\leavevmode\bgroup% | |
\expandafter\accent\csname\f@encoding dqpos\endcsname | |
##1\bbl@allowhyphens\egroup}% | |
\let\bbl@umlaute\bbl@umlauta} | |
\def\umlautlow{% | |
\def\bbl@umlauta{\protect\lower@umlaut}} | |
\def\umlautelow{% | |
\def\bbl@umlaute{\protect\lower@umlaut}} | |
\umlauthigh | |
\expandafter\ifx\csname U@D\endcsname\relax | |
\csname newdimen\endcsname\U@D | |
\fi | |
\def\lower@umlaut#1{% | |
\leavevmode\bgroup | |
\U@D 1ex% | |
{\setbox\z@\hbox{% | |
\expandafter\char\csname\f@encoding dqpos\endcsname}% | |
\dimen@ -.45ex\advance\dimen@\ht\z@ | |
\ifdim 1ex<\dimen@ \fontdimen5\font\dimen@ \fi}% | |
\expandafter\accent\csname\f@encoding dqpos\endcsname | |
\fontdimen5\font\U@D #1% | |
\egroup} | |
\AtBeginDocument{% | |
\DeclareTextCompositeCommand{\"}{OT1}{a}{\bbl@umlauta{a}}% | |
\DeclareTextCompositeCommand{\"}{OT1}{e}{\bbl@umlaute{e}}% | |
\DeclareTextCompositeCommand{\"}{OT1}{i}{\bbl@umlaute{\i}}% | |
\DeclareTextCompositeCommand{\"}{OT1}{\i}{\bbl@umlaute{\i}}% | |
\DeclareTextCompositeCommand{\"}{OT1}{o}{\bbl@umlauta{o}}% | |
\DeclareTextCompositeCommand{\"}{OT1}{u}{\bbl@umlauta{u}}% | |
\DeclareTextCompositeCommand{\"}{OT1}{A}{\bbl@umlauta{A}}% | |
\DeclareTextCompositeCommand{\"}{OT1}{E}{\bbl@umlaute{E}}% | |
\DeclareTextCompositeCommand{\"}{OT1}{I}{\bbl@umlaute{I}}% | |
\DeclareTextCompositeCommand{\"}{OT1}{O}{\bbl@umlauta{O}}% | |
\DeclareTextCompositeCommand{\"}{OT1}{U}{\bbl@umlauta{U}}% | |
} | |
\ifx\l@english\@undefined | |
\chardef\l@english\z@ | |
\fi | |
\main@language{english} | |
\providecommand\IfBabelLayout[3]{#3}% | |
\newcommand\BabelPatchSection[1]{% | |
\@ifundefined{#1}{}{% | |
\bbl@exp{\let\<bbl@ss@#1>\<#1>}% | |
\@namedef{#1}{% | |
\@ifstar{\bbl@presec@s{#1}}% | |
{\@dblarg{\bbl@presec@x{#1}}}}}} | |
\def\bbl@presec@x#1[#2]#3{% | |
\bbl@exp{% | |
\\\select@language@x{\bbl@main@language}% | |
\\\@nameuse{bbl@ss@#1}% | |
[\\\foreignlanguage{\languagename}{\unexpanded{#2}}]% | |
{\\\foreignlanguage{\languagename}{\unexpanded{#3}}}% | |
\\\select@language@x{\languagename}}} | |
\def\bbl@presec@s#1#2{% | |
\bbl@exp{% | |
\\\select@language@x{\bbl@main@language}% | |
\\\@nameuse{bbl@ss@#1}*% | |
{\\\foreignlanguage{\languagename}{\unexpanded{#2}}}% | |
\\\select@language@x{\languagename}}} | |
\IfBabelLayout{sectioning}% at begin document ??? | |
{\BabelPatchSection{part}% | |
\BabelPatchSection{chapter}% | |
\BabelPatchSection{section}% | |
\BabelPatchSection{subsection}% | |
\BabelPatchSection{subsubsection}% | |
\BabelPatchSection{paragraph}% | |
\BabelPatchSection{subparagraph}% | |
\def\babel@toc#1{% | |
\select@language@x{\bbl@main@language}}}{} | |
\ifcase\bbl@engine | |
\input txtbabel.def | |
\or | |
\input luababel.def | |
\or | |
\input xebabel.def | |
\fi | |
{\def\format{lplain} | |
\ifx\fmtname\format | |
\else | |
\def\format{LaTeX2e} | |
\ifx\fmtname\format | |
\else | |
\aftergroup\endinput | |
\fi | |
\fi} | |
\newcommand\babelprovide[2][]{% | |
\let\bbl@savelangname\languagename | |
\def\languagename{#2}% | |
\let\bbl@KVP@captions\@nil | |
\let\bbl@KVP@import\@nil | |
\let\bbl@KVP@main\@nil | |
\let\bbl@KVP@script\@nil | |
\let\bbl@KVP@language\@nil | |
\let\bbl@KVP@dir\@nil | |
\let\bbl@KVP@hyphenrules\@nil | |
\bbl@forkv{#1}{\bbl@csarg\def{KVP@##1}{##2}}% TODO - error handling | |
\ifx\bbl@KVP@captions\@nil | |
\let\bbl@KVP@captions\bbl@KVP@import | |
\fi | |
\bbl@ifunset{date#2}% | |
{\bbl@provide@new{#2}}% | |
{\bbl@ifblank{#1}% | |
{\bbl@error | |
{If you want to modify `#2' you must tell how in\\% | |
the optional argument. Currently there are three\\% | |
options: captions=lang-tag, hyphenrules=lang-list\\% | |
import=lang-tag}% | |
{Use this macro as documented}}% | |
{\bbl@provide@renew{#2}}}% | |
\bbl@exp{\\\babelensure[exclude=\\\today]{#2}}% | |
\bbl@ifunset{bbl@ensure@\languagename}% | |
{\bbl@exp{% | |
\\\DeclareRobustCommand\<bbl@ensure@\languagename>[1]{% | |
\\\foreignlanguage{\languagename}% | |
{####1}}}}% | |
{}% | |
\ifx\bbl@KVP@script\@nil\else | |
\bbl@csarg\edef{sname@#2}{\bbl@KVP@script}% | |
\fi | |
\ifx\bbl@KVP@language\@nil\else | |
\bbl@csarg\edef{lname@#2}{\bbl@KVP@language}% | |
\fi | |
\let\languagename\bbl@savelangname} | |
\def\bbl@provide@new#1{% | |
\@namedef{date#1}{}% marks lang exists - required by \StartBabelCommands | |
\@namedef{extras#1}{}% | |
\@namedef{noextras#1}{}% | |
\StartBabelCommands*{#1}{captions}% | |
\ifx\bbl@KVP@captions\@nil % and also if import, implicit | |
\def\bbl@tempb##1{% elt for \bbl@captionslist | |
\ifx##1\@empty\else | |
\bbl@exp{% | |
\\\SetString\\##1{% | |
\\\bbl@nocaption{\bbl@stripslash##1}{\<#1\bbl@stripslash##1>}}}% | |
\expandafter\bbl@tempb | |
\fi}% | |
\expandafter\bbl@tempb\bbl@captionslist\@empty | |
\else | |
\bbl@read@ini{\bbl@KVP@captions}% Here all letters cat = 11 | |
\bbl@after@ini | |
\bbl@savestrings | |
\fi | |
\StartBabelCommands*{#1}{date}% | |
\ifx\bbl@KVP@import\@nil | |
\bbl@exp{% | |
\\\SetString\\\today{\\\bbl@nocaption{today}{\<#1today>}}}% | |
\else | |
\bbl@savetoday | |
\bbl@savedate | |
\fi | |
\EndBabelCommands | |
\bbl@exp{% | |
\def\<#1hyphenmins>{% | |
{\bbl@ifunset{bbl@lfthm@#1}{2}{\@nameuse{bbl@lfthm@#1}}}% | |
{\bbl@ifunset{bbl@rgthm@#1}{3}{\@nameuse{bbl@rgthm@#1}}}}}% | |
\bbl@provide@hyphens{#1}% | |
\ifx\bbl@KVP@main\@nil\else | |
\expandafter\main@language\expandafter{#1}% | |
\fi} | |
\def\bbl@provide@renew#1{% | |
\ifx\bbl@KVP@captions\@nil\else | |
\StartBabelCommands*{#1}{captions}% | |
\bbl@read@ini{\bbl@KVP@captions}% Here all letters cat = 11 | |
\bbl@after@ini | |
\bbl@savestrings | |
\EndBabelCommands | |
\fi | |
\ifx\bbl@KVP@import\@nil\else | |
\StartBabelCommands*{#1}{date}% | |
\bbl@savetoday | |
\bbl@savedate | |
\EndBabelCommands | |
\fi | |
\bbl@provide@hyphens{#1}} | |
\def\bbl@provide@hyphens#1{% | |
\let\bbl@tempa\relax | |
\ifx\bbl@KVP@hyphenrules\@nil\else | |
\bbl@replace\bbl@KVP@hyphenrules{ }{,}% | |
\bbl@foreach\bbl@KVP@hyphenrules{% | |
\ifx\bbl@tempa\relax % if not yet found | |
\bbl@ifsamestring{##1}{+}% | |
{{\bbl@exp{\\\addlanguage\<l@##1>}}}% | |
{}% | |
\bbl@ifunset{l@##1}% | |
{}% | |
{\bbl@exp{\let\bbl@tempa\<l@##1>}}% | |
\fi}% | |
\fi | |
\ifx\bbl@tempa\relax % if no opt or no language in opt found | |
\ifx\bbl@KVP@import\@nil\else % if importing | |
\bbl@exp{% and hyphenrules is not empty | |
\\\bbl@ifblank{\@nameuse{bbl@hyphr@#1}}% | |
{}% | |
{\let\\\bbl@tempa\<l@\@nameuse{bbl@hyphr@\languagename}>}}% | |
\fi | |
\fi | |
\bbl@ifunset{bbl@tempa}% ie, relax or undefined | |
{\bbl@ifunset{l@#1}% no hyphenrules found - fallback | |
{\bbl@exp{\\\adddialect\<l@#1>\language}}% | |
{}}% so, l@<lang> is ok - nothing to do | |
{\bbl@exp{\\\adddialect\<l@#1>\bbl@tempa}}}% found in opt list or ini | |
\def\bbl@read@ini#1{% | |
\openin1=babel-#1.ini | |
\ifeof1 | |
\bbl@error | |
{There is no ini file for the requested language\\% | |
(#1). Perhaps you misspelled it or your installation\\% | |
is not complete.}% | |
{Fix the name or reinstall babel.}% | |
\else | |
\let\bbl@section\@empty | |
\let\bbl@savestrings\@empty | |
\let\bbl@savetoday\@empty | |
\let\bbl@savedate\@empty | |
\let\bbl@inireader\bbl@iniskip | |
\bbl@info{Importing data from babel-#1.ini for \languagename}% | |
\loop | |
\if T\ifeof1F\fi T\relax % Trick, because inside \loop | |
\endlinechar\m@ne | |
\read1 to \bbl@line | |
\endlinechar`\^^M | |
\ifx\bbl@line\@empty\else | |
\expandafter\bbl@iniline\bbl@line\bbl@iniline | |
\fi | |
\repeat | |
\fi} | |
\def\bbl@iniline#1\bbl@iniline{% | |
\@ifnextchar[\bbl@inisec{\@ifnextchar;\bbl@iniskip\bbl@inireader}#1\@@}% ] | |
\def\bbl@iniskip#1\@@{}% if starts with ; | |
\def\bbl@inisec[#1]#2\@@{% if starts with opening bracket | |
\@nameuse{bbl@secpost@\bbl@section}% ends previous section | |
\def\bbl@section{#1}% | |
\@nameuse{bbl@secpre@\bbl@section}% starts current section | |
\bbl@ifunset{bbl@secline@#1}% | |
{\let\bbl@inireader\bbl@iniskip}% | |
{\bbl@exp{\let\\\bbl@inireader\<bbl@secline@#1>}}} | |
\def\bbl@inikv#1=#2\@@{% key=value | |
\bbl@trim@def\bbl@tempa{#1}% | |
\bbl@trim\toks@{#2}% | |
\bbl@csarg\edef{@kv@\bbl@section.\bbl@tempa}{\the\toks@}} | |
\def\bbl@exportkey#1#2#3{% | |
\bbl@ifunset{bbl@@kv@#2}% | |
{\bbl@csarg\gdef{#1@\languagename}{#3}}% | |
{\expandafter\ifx\csname bbl@@kv@#2\endcsname\@empty | |
\bbl@csarg\gdef{#1@\languagename}{#3}% | |
\else | |
\bbl@exp{\global\let\<bbl@#1@\languagename>\<bbl@@kv@#2>}% | |
\fi}} | |
\let\bbl@secline@identification\bbl@inikv | |
\def\bbl@secpost@identification{% | |
\bbl@exportkey{lname}{identification.name.english}{}% | |
\bbl@exportkey{lbcp}{identification.tag.bcp47}{}% | |
\bbl@exportkey{lotf}{identification.tag.opentype}{dflt}% | |
\bbl@exportkey{sname}{identification.script.name}{}% | |
\bbl@exportkey{sbcp}{identification.script.tag.bcp47}{}% | |
\bbl@exportkey{sotf}{identification.script.tag.opentype}{DFLT}} | |
\let\bbl@secline@typography\bbl@inikv | |
\def\bbl@after@ini{% | |
\bbl@exportkey{lfthm}{typography.lefthyphenmin}{2}% | |
\bbl@exportkey{rgthm}{typography.righthyphenmin}{3}% | |
\bbl@exportkey{hyphr}{typography.hyphenrules}{}% | |
\def\bbl@tempa{0.9}% | |
\bbl@csarg\ifx{@[email protected]}\bbl@tempa | |
\bbl@warning{% | |
The `\languagename' date format may not be suitable\\% | |
for proper typesetting, and therefore it very likely will\\% | |
change in a future release. Reported}% | |
\fi | |
\bbl@toglobal\bbl@savetoday | |
\bbl@toglobal\bbl@savedate} | |
\ifcase\bbl@engine | |
\bbl@csarg\def{[email protected]}#1=#2\@@{% | |
\bbl@ini@captions@aux{#1}{#2}} | |
\bbl@csarg\def{[email protected]}#1=#2\@@{% for defaults | |
\bbl@ini@dategreg#1...\relax{#2}} | |
\bbl@csarg\def{[email protected]}#1=#2\@@{% override | |
\bbl@ini@dategreg#1...\relax{#2}} | |
\else | |
\def\bbl@secline@captions#1=#2\@@{% | |
\bbl@ini@captions@aux{#1}{#2}} | |
\bbl@csarg\def{[email protected]}#1=#2\@@{% | |
\bbl@ini@dategreg#1...\relax{#2}} | |
\fi | |
\def\bbl@ini@captions@aux#1#2{% | |
\bbl@trim@def\bbl@tempa{#1}% | |
\bbl@ifblank{#2}% | |
{\bbl@exp{% | |
\toks@{\\\bbl@nocaption{\bbl@tempa}\<\languagename\bbl@tempa name>}}}% | |
{\bbl@trim\toks@{#2}}% | |
\bbl@exp{% | |
\\\bbl@add\\\bbl@savestrings{% | |
\\\SetString\<\bbl@tempa name>{\the\toks@}}}} | |
\bbl@csarg\def{[email protected]}{% | |
\ifcase\bbl@engine\let\bbl@savedate\@empty\fi} | |
\def\bbl@ini@dategreg#1.#2.#3.#4\relax#5{% TODO - ignore with 'captions' | |
\bbl@trim@def\bbl@tempa{#1.#2}% | |
\bbl@ifsamestring{\bbl@tempa}{months.wide}% | |
{\bbl@trim@def\bbl@tempa{#3}% | |
\bbl@trim\toks@{#5}% | |
\bbl@exp{% | |
\\\bbl@add\\\bbl@savedate{% | |
\\\SetString\<month\romannumeral\bbl@tempa name>{\the\toks@}}}}% | |
{\bbl@ifsamestring{\bbl@tempa}{date.long}% | |
{\bbl@trim@def\bbl@toreplace{#5}% | |
\bbl@TG@@date | |
\global\bbl@csarg\let{date@\languagename}\bbl@toreplace | |
\bbl@exp{% | |
\gdef\<\languagename date>{\\\protect\<\languagename date >}% | |
\gdef\<\languagename date >####1####2####3{% | |
\\\bbl@usedategrouptrue | |
\<bbl@ensure@\languagename>{% | |
\<bbl@date@\languagename>{####1}{####2}{####3}}}% | |
\\\bbl@add\\\bbl@savetoday{% | |
\\\SetString\\\today{% | |
\<\languagename date>{\\\the\year}{\\\the\month}{\\\the\day}}}}}}% | |
{}} | |
\newcommand\BabelDateSpace{\nobreakspace} | |
\newcommand\BabelDateDot{.\@} | |
\newcommand\BabelDated[1]{{\number#1}} | |
\newcommand\BabelDatedd[1]{{\ifnum#1<10 0\fi\number#1}} | |
\newcommand\BabelDateM[1]{{\number#1}} | |
\newcommand\BabelDateMM[1]{{\ifnum#1<10 0\fi\number#1}} | |
\newcommand\BabelDateMMMM[1]{{% | |
\csname month\romannumeral#1name\endcsname}}% | |
\newcommand\BabelDatey[1]{{\number#1}}% | |
\newcommand\BabelDateyy[1]{{% | |
\ifnum#1<10 0\number#1 % | |
\else\ifnum#1<100 \number#1 % | |
\else\ifnum#1<1000 \expandafter\@gobble\number#1 % | |
\else\ifnum#1<10000 \expandafter\@gobbletwo\number#1 % | |
\else | |
\bbl@error | |
{Currently two-digit years are restricted to the\\ | |
range 0-9999.}% | |
{There is little you can do. Sorry.}% | |
\fi\fi\fi\fi}} | |
\newcommand\BabelDateyyyy[1]{{\number#1}} | |
\def\bbl@replace@finish@iii#1{% | |
\bbl@exp{\def\\#1####1####2####3{\the\toks@}}} | |
\def\bbl@TG@@date{% | |
\bbl@replace\bbl@toreplace{[ ]}{\BabelDateSpace{}}% | |
\bbl@replace\bbl@toreplace{[.]}{\BabelDateDot{}}% | |
\bbl@replace\bbl@toreplace{[d]}{\BabelDated{####3}}% | |
\bbl@replace\bbl@toreplace{[dd]}{\BabelDatedd{####3}}% | |
\bbl@replace\bbl@toreplace{[M]}{\BabelDateM{####2}}% | |
\bbl@replace\bbl@toreplace{[MM]}{\BabelDateMM{####2}}% | |
\bbl@replace\bbl@toreplace{[MMMM]}{\BabelDateMMMM{####2}}% | |
\bbl@replace\bbl@toreplace{[y]}{\BabelDatey{####1}}% | |
\bbl@replace\bbl@toreplace{[yy]}{\BabelDateyy{####1}}% | |
\bbl@replace\bbl@toreplace{[yyyy]}{\BabelDateyyyy{####1}}% | |
\bbl@replace@finish@iii\bbl@toreplace} | |
\def\bbl@provide@lsys#1{% | |
\bbl@ifunset{bbl@lname@#1}% | |
{\bbl@ini@ids{#1}}% | |
{}% | |
\bbl@csarg\let{lsys@#1}\@empty | |
\bbl@ifunset{bbl@sname@#1}{\bbl@csarg\gdef{sname@#1}{Default}}{}% | |
\bbl@ifunset{bbl@sotf#1}{\bbl@csarg\gdef{sotf@#1}{DFLT}}{}% | |
\bbl@csarg\bbl@add@list{lsys@#1}{Script=\bbl@cs{sname@#1}}% | |
\bbl@ifunset{bbl@lname@#1}{}% | |
{\bbl@csarg\bbl@add@list{lsys@#1}{Language=\bbl@cs{lname@#1}}}% | |
\bbl@csarg\bbl@toglobal{lsys@#1}}% | |
% \bbl@exp{% TODO - should be global | |
% \<keys_if_exist:nnF>{fontspec-opentype/Script}{\bbl@cs{sname@#1}}% | |
% {\\\newfontscript{\bbl@cs{sname@#1}}{\bbl@cs{sotf@#1}}}% | |
% \<keys_if_exist:nnF>{fontspec-opentype/Language}{\bbl@cs{lname@#1}}% | |
% {\\\newfontlanguage{\bbl@cs{lname@#1}}{\bbl@cs{lotf@#1}}}}} | |
\def\bbl@ini@ids#1{% | |
\def\BabelBeforeIni##1##2{% | |
\begingroup | |
\bbl@add\bbl@secpost@identification{\closein1 }% | |
\catcode`\[=12 \catcode`\]=12 \catcode`\==12 | |
\bbl@read@ini{##1}% | |
\endgroup}% boxed, to avoid extra spaces: | |
{\setbox\z@\hbox{\InputIfFileExists{babel-#1.tex}{}{}}}} | |
\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{% | |
\@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 | |
\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}% | |
\fi} | |
{\bbl@redefine\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@redefine\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} % end \IfBabelLayout | |
\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}% | |
{}}} | |
\AtBeginDocument{% | |
\ifx\pdfstringdefDisableCommands\@undefined\else | |
\pdfstringdefDisableCommands{\languageshorthands{system}}% | |
\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 | |
\newcommand\BabelNonASCII{LGR,X2,OT2,OT3,OT6,LHE,LWN,LMA,LMC,LMS,LMU,} | |
\let\org@TeX\TeX | |
\let\org@LaTeX\LaTeX | |
\let\ensureascii\@firstofone | |
\AtBeginDocument{% | |
\in@false | |
\bbl@foreach\BabelNonASCII{% is there a non-ascii enc? | |
\ifin@\else | |
\lowercase{\bbl@xin@{,#1enc.def,}{,\@filelist,}}% | |
\fi}% | |
\ifin@ % if a 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,}% | |
\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,}% | |
\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 | |
\@ifl@aded{def}{t1enc}{\xdef\latinencoding{\bbl@t@one}}{}% | |
\fi}} | |
\DeclareRobustCommand{\latintext}{% | |
\fontencoding{\latinencoding}\selectfont | |
\def\encodingdefault{\latinencoding}} | |
\ifx\@undefined\DeclareTextFontCommand | |
\DeclareRobustCommand{\textlatin}[1]{\leavevmode{\latintext #1}} | |
\else | |
\DeclareTextFontCommand{\textlatin}{\latintext} | |
\fi | |
\def\bbl@alscripts{,Arabic,Syriac,Thaana,} | |
\def\bbl@rscripts{% | |
,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} | |
\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@cs{wdir@\languagename}}} | |
\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}} | |
\ifodd\bbl@engine % luatex=1 | |
\AddBabelHook{babel-bidi}{afterextras}{\bbl@switchdir} | |
\DisableBabelHook{babel-bidi} | |
\def\bbl@getluadir#1{% | |
\directlua{ | |
if tex.#1dir == 'TLT' then | |
tex.sprint('0') | |
elseif tex.#1dir == 'TRT' then | |
tex.sprint('1') | |
end}} | |
\def\bbl@setdir#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@setdir{text}\textdir{#1}% TODO - ?\linedir | |
\setattribute\bbl@attr@dir{#1}} | |
\def\bbl@pardir{\bbl@setdir{par}\pardir} | |
\def\bbl@bodydir{\bbl@setdir{body}\bodydir} | |
\def\bbl@pagedir{\bbl@setdir{page}\pagedir} | |
\def\bbl@dirparastext{\pardir\the\textdir\relax}% %%%% | |
\else % pdftex=0, xetex=2 | |
\AddBabelHook{babel-bidi}{afterextras}{\bbl@switchdir} | |
\DisableBabelHook{babel-bidi} | |
\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}} | |
\fi | |
\DeclareRobustCommand\babelsublr[1]{\leavevmode{\bbl@textdir\z@#1}} | |
\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 | |
\endinput | |
%% | |
%% End of file `babel.def'. | |
``` | |
The ```\ifcase``` calls up ```txtbabel.def```, which may well be the source of the problem, so here it is: | |
``` | |
%% | |
%% This is file `txtbabel.def', | |
%% generated with the docstrip utility. | |
%% | |
%% The original source files were: | |
%% | |
%% babel.dtx (with options: `texxet') | |
%% | |
%% | |
%% Copyright (C) 2012-2017 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. | |
%% | |
\ifx\bbl@opt@layout\@nnil\endinput\fi % No layout | |
\def\bbl@startskip{\ifcase\bbl@thepardir\leftskip\else\rightskip\fi} | |
\def\bbl@endskip{\ifcase\bbl@thepardir\rightskip\else\leftskip\fi} | |
\ifx\bbl@beforeforeign\leavevmode % A poor test for bidi= | |
\def\@hangfrom#1{% | |
\setbox\@tempboxa\hbox{{#1}}% | |
\hangindent\ifcase\bbl@thepardir\wd\@tempboxa\else-\wd\@tempboxa\fi | |
\noindent\box\@tempboxa} | |
\def\raggedright{% | |
\let\\\@centercr | |
\bbl@startskip\z@skip | |
\@rightskip\@flushglue | |
\bbl@endskip\@rightskip | |
\parindent\z@ | |
\parfillskip\bbl@startskip} | |
\def\raggedleft{% | |
\let\\\@centercr | |
\bbl@startskip\@flushglue | |
\bbl@endskip\z@skip | |
\parindent\z@ | |
\parfillskip\bbl@endskip} | |
\fi | |
\IfBabelLayout{lists} | |
{\def\list#1#2{% | |
\ifnum \@listdepth >5\relax | |
\@toodeep | |
\else | |
\global\advance\@listdepth\@ne | |
\fi | |
\rightmargin\z@ | |
\listparindent\z@ | |
\itemindent\z@ | |
\csname @list\romannumeral\the\@listdepth\endcsname | |
\def\@itemlabel{#1}% | |
\let\makelabel\@mklab | |
\@nmbrlistfalse | |
#2\relax | |
\@trivlist | |
\parskip\parsep | |
\parindent\listparindent | |
\advance\linewidth-\rightmargin | |
\advance\linewidth-\leftmargin | |
\advance\@totalleftmargin | |
\ifcase\bbl@thepardir\leftmargin\else\rightmargin\fi | |
\parshape\@ne\@totalleftmargin\linewidth | |
\ignorespaces}% | |
\def\labelenumii{)\theenumii(}% | |
\def\p@enumiii{\p@enumii)\theenumii(}} | |
{} | |
\IfBabelLayout{contents} | |
{\def\@dottedtocline#1#2#3#4#5{% | |
\ifnum#1>\c@tocdepth\else | |
\vskip \z@ \@plus.2\p@ | |
{\bbl@startskip#2\relax | |
\bbl@endskip\@tocrmarg | |
\parfillskip-\bbl@endskip | |
\parindent#2\relax | |
\@afterindenttrue | |
\interlinepenalty\@M | |
\leavevmode | |
\@tempdima#3\relax | |
\advance\bbl@startskip\@tempdima | |
\null\nobreak\hskip-\bbl@startskip | |
{#4}\nobreak | |
\leaders\hbox{% | |
$\m@th\mkern\@dotsep mu\hbox{.}\mkern\@dotsep mu$}% | |
\hfill\nobreak | |
\hb@xt@\@pnumwidth{\hfil\normalfont\normalcolor#5}% | |
\par}% | |
\fi}} | |
{} | |
\IfBabelLayout{columns} | |
{\def\@outputdblcol{% | |
\if@firstcolumn | |
\global\@firstcolumnfalse | |
\global\setbox\@leftcolumn\copy\@outputbox | |
\splitmaxdepth\maxdimen | |
\vbadness\maxdimen | |
\setbox\@outputbox\vbox{\unvbox\@outputbox\unskip}% | |
\setbox\@outputbox\vsplit\@outputbox to\maxdimen | |
\toks@\expandafter{\topmark}% | |
\xdef\@firstcoltopmark{\the\toks@}% | |
\toks@\expandafter{\splitfirstmark}% | |
\xdef\@firstcolfirstmark{\the\toks@}% | |
\ifx\@firstcolfirstmark\@empty | |
\global\let\@setmarks\relax | |
\else | |
\gdef\@setmarks{% | |
\let\firstmark\@firstcolfirstmark | |
\let\topmark\@firstcoltopmark}% | |
\fi | |
\else | |
\global\@firstcolumntrue | |
\setbox\@outputbox\vbox{% | |
\hb@xt@\textwidth{% | |
\hskip\columnwidth | |
\hfil | |
{\normalcolor\vrule \@width\columnseprule}% | |
\hfil | |
\hb@xt@\columnwidth{\box\@leftcolumn \hss}% | |
\hskip-\textwidth | |
\hb@xt@\columnwidth{\box\@outputbox \hss}% | |
\hskip\columnsep | |
\hskip\columnwidth}}% | |
\@combinedblfloats | |
\@setmarks | |
\@outputpage | |
\begingroup | |
\@dblfloatplacement | |
\@startdblcolumn | |
\@whilesw\if@fcolmade \fi{\@outputpage | |
\@startdblcolumn}% | |
\endgroup | |
\fi}}% | |
{} | |
\IfBabelLayout{counters}% Global or language dependent? At begin doc? | |
{\let\bbl@latinarabic=\@arabic | |
\def\@arabic#1{\babelsublr{\bbl@latinarabic#1}}% | |
\let\bbl@asciiroman=\@roman | |
\def\@roman#1{\babelsublr{\ensureascii{\bbl@asciiroman#1}}}% | |
\let\bbl@asciiRoman=\@Roman | |
\def\@Roman#1{\babelsublr{\ensureascii{\bbl@asciiRoman#1}}}}{} | |
\endinput | |
%% | |
%% End of file `txtbabel.def'. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment