From ca395cd6c0cfd58dddf8e368e5f0ec78807f5029 Mon Sep 17 00:00:00 2001
From: Patrick Simianer
Date: Tue, 6 Dec 2016 21:08:41 +0100
Subject: tex: tikzpicture
---
tex/.texmf/tex/latex/misc/a0size.sty | 252 ++
tex/.texmf/tex/latex/misc/beton.sty | 73 +
tex/.texmf/tex/latex/misc/etoolbox.sty | 1726 ++++++++++++
tex/.texmf/tex/latex/misc/ulem.sty | 532 ++++
tex/.texmf/tex/latex/misc/xstring/xstring.sty | 3 +
tex/.texmf/tex/latex/misc/xstring/xstring.tex | 1389 ++++++++++
.../tex/latex/tikzposter/tikzposter-template.tex | 100 +
tex/.texmf/tex/latex/tikzposter/tikzposter.cls | 830 ++++++
tex/.texmf/tex/latex/tikzposter/tikzposter.dtx | 2905 ++++++++++++++++++++
tex/.texmf/tex/latex/tikzposter/tikzposter.ins | 68 +
tex/.texmf/tex/latex/tikzposter/tikzposter.pdf | Bin 0 -> 293772 bytes
.../tikzposter/tikzposterBackgroundstyles.tex | 81 +
.../tex/latex/tikzposter/tikzposterBlockstyles.tex | 225 ++
.../latex/tikzposter/tikzposterColorpalettes.tex | 66 +
.../tex/latex/tikzposter/tikzposterColorstyles.tex | 268 ++
.../tikzposter/tikzposterInnerblockstyles.tex | 274 ++
.../latex/tikzposter/tikzposterLayoutthemes.tex | 117 +
.../tex/latex/tikzposter/tikzposterNotestyles.tex | 226 ++
.../tex/latex/tikzposter/tikzposterTitlestyles.tex | 176 ++
19 files changed, 9311 insertions(+)
create mode 100644 tex/.texmf/tex/latex/misc/a0size.sty
create mode 100644 tex/.texmf/tex/latex/misc/beton.sty
create mode 100644 tex/.texmf/tex/latex/misc/etoolbox.sty
create mode 100644 tex/.texmf/tex/latex/misc/ulem.sty
create mode 100644 tex/.texmf/tex/latex/misc/xstring/xstring.sty
create mode 100644 tex/.texmf/tex/latex/misc/xstring/xstring.tex
create mode 100644 tex/.texmf/tex/latex/tikzposter/tikzposter-template.tex
create mode 100644 tex/.texmf/tex/latex/tikzposter/tikzposter.cls
create mode 100644 tex/.texmf/tex/latex/tikzposter/tikzposter.dtx
create mode 100644 tex/.texmf/tex/latex/tikzposter/tikzposter.ins
create mode 100644 tex/.texmf/tex/latex/tikzposter/tikzposter.pdf
create mode 100644 tex/.texmf/tex/latex/tikzposter/tikzposterBackgroundstyles.tex
create mode 100644 tex/.texmf/tex/latex/tikzposter/tikzposterBlockstyles.tex
create mode 100644 tex/.texmf/tex/latex/tikzposter/tikzposterColorpalettes.tex
create mode 100644 tex/.texmf/tex/latex/tikzposter/tikzposterColorstyles.tex
create mode 100644 tex/.texmf/tex/latex/tikzposter/tikzposterInnerblockstyles.tex
create mode 100644 tex/.texmf/tex/latex/tikzposter/tikzposterLayoutthemes.tex
create mode 100644 tex/.texmf/tex/latex/tikzposter/tikzposterNotestyles.tex
create mode 100644 tex/.texmf/tex/latex/tikzposter/tikzposterTitlestyles.tex
(limited to 'tex')
diff --git a/tex/.texmf/tex/latex/misc/a0size.sty b/tex/.texmf/tex/latex/misc/a0size.sty
new file mode 100644
index 0000000..b3788c0
--- /dev/null
+++ b/tex/.texmf/tex/latex/misc/a0size.sty
@@ -0,0 +1,252 @@
+%%
+%% This is file `a0size.sty' (v1.22b) included in the a0poster package
+%%
+%% Copyright (C) 1997-2004 Gerlinde Kettl and Matthias Weiser
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.2
+%% 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.2 or later is part of all distributions of LaTeX
+%% version 1999/12/01 or later.
+%%
+%% Problems, bugs and comments to
+%% tex@kettl.de
+%%
+
+\ProvidesFile{a0size.sty}[2004/01/31 v1.22b a0poster class (GK, MW)]
+
+\DeclareFontShape{OT1}{cmr}{m}{n}
+ { <5> <6> <7> <8> <9> <10> <12> gen * cmr
+ <10.95> cmr10
+ <14.4> cmr12
+ <17.28><20.74><24.88>cmr17
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmr17}{}
+
+\DeclareFontShape{OT1}{cmr}{m}{sl}
+ {
+ <5><6><7>cmsl8%
+ <8> <9> gen * cmsl
+ <10><10.95>cmsl10%
+ <12><14.4><17.28><20.74><24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmsl12}{}
+
+\DeclareFontShape{OT1}{cmr}{m}{it}
+ {
+ <5><6><7>cmti7%
+ <8>cmti8%
+ <9>cmti9%
+ <10><10.95>cmti10%
+ <12><14.4><17.28><20.74><24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmti12}{}
+
+\DeclareFontShape{OT1}{cmr}{m}{sc}
+ {
+ <5><6><7><8><9><10><10.95><12>
+ <14.4><17.28><20.74><24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmcsc10}{}
+
+\DeclareFontShape{OT1}{cmr}{m}{ui}
+ {
+ <5><6><7><8><9><10><10.95><12>
+ <14.4><17.28><20.74><24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmu10}{}
+
+\DeclareFontShape{OT1}{cmr}{b}{n}
+ {
+ <5><6><7><8><9><10><10.95><12>
+ <14.4><17.28><20.74><24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmb10}{}
+
+\DeclareFontShape{OT1}{cmr}{bx}{n}
+ {
+ <5> <6> <7> <8> <9> gen * cmbx
+ <10><10.95> cmbx10
+ <12><14.4><17.28><20.74><24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmbx12}{}
+
+\DeclareFontShape{OT1}{cmr}{bx}{sl}
+ {
+ <5> <6> <7> <8> <9>
+ <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmbxsl10}{}
+
+\DeclareFontShape{OT1}{cmr}{bx}{it}
+ {
+ <5> <6> <7> <8> <9>
+ <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmbxti10}{}
+
+\DeclareFontShape{OT1}{cmss}{m}{n}
+ {
+ <5><6><7><8>cmss8
+ <9>cmss9
+ <10><10.95>cmss10
+ <12><14.4>cmss12
+ <17.28><20.74><24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmss17}{}
+
+\DeclareFontShape{OT1}{cmss}{m}{sl}
+ {
+ <5><6><7><8>cmssi8 <9> cmssi9
+ <10><10.95>cmssi10
+ <12><14.4>cmssi12
+ <17.28><20.74><24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmssi17}{}
+
+\DeclareFontShape{OT1}{cmss}{sbc}{n}
+ {
+ <5> <6> <7> <8> <9> cmssdc10
+ <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmssdc10}{}
+
+\DeclareFontShape{OT1}{cmss}{bx}{n}
+ {
+ <5> <6> <7> <8> <9> cmssbx10
+ <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmssbx10}{}
+
+\DeclareFontShape{OT1}{cmtt}{m}{n}
+ {
+ <5><6><7><8>cmtt8 <9> cmtt9
+ <10><10.95>cmtt10
+ <12><14.4><17.28><20.74><24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmtt12}{}
+
+\DeclareFontShape{OT1}{cmtt}{m}{it}
+ {
+ <5> <6> <7> <8> <9>
+ <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmitt10}{}
+
+\DeclareFontShape{OT1}{cmtt}{m}{sl}
+ {
+ <5> <6> <7> <8> <9>
+ <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmsltt10}{}
+
+\DeclareFontShape{OT1}{cmtt}{m}{sc}
+ {
+ <5> <6> <7> <8> <9>
+ <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmtcsc10}{}
+
+\DeclareFontShape{OML}{cmm}{m}{it}
+ { <5> <6> <7> <8> <9> gen * cmmi
+ <10><10.95>cmmi10
+ <12><14.4><17.28><20.74><24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmmi12}{}
+
+\DeclareFontShape{OML}{cmm}{b}{it}{%
+ <5> <6> <7> <8> <9> gen * cmmib
+ <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmmib10}{}
+
+
+\DeclareFontShape{OMS}{cmsy}{m}{n}{%
+ <5> <6> <7> <8> <9> <10> gen * cmsy
+ <10.95> <12> <14.4> <17.28> <20.74> <24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmsy10}{}
+
+\DeclareFontShape{OMS}{cmsy}{b}{n}{%
+ <5> <6> <7> <8> <9> gen * cmbsy
+ <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmbsy10}{}
+
+\DeclareFontShape{OMX}{cmex}{m}{n}{%
+ <-8>sfixed * cmex7
+ <8> cmex8
+ <9> cmex9
+ <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmex10}{}
+
+\DeclareFontShape{U}{cmr}{m}{n}
+ { <5> <6> <7> <8> <9> <10> <12> gen * cmr
+ <10.95> cmr10
+ <14.4> cmr12
+ <17.28><20.74><24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmr17}{}
+
+\DeclareFontShape{U}{cmr}{m}{sl}
+ {
+ <5><6><7>cmsl8%
+ <8> <9> gen * cmsl
+ <10><10.95>cmsl10%
+ <12><14.4><17.28><20.74><24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmsl12}{}
+
+\DeclareFontShape{U}{cmr}{m}{it}
+ {
+ <5><6><7>cmti7%
+ <8>cmti8%
+ <9>cmti9%
+ <10><10.95>cmti10%
+ <12><14.4><17.28><20.74><24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmti12}{}
+
+\DeclareFontShape{U}{cmr}{m}{sc}
+ {
+ <5><6><7><8><9><10><10.95><12>
+ <14.4><17.28><20.74><24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmcsc10}{}
+
+\DeclareFontShape{U}{cmr}{m}{ui}
+ {
+ <5><6><7><8><9><10><10.95><12>%
+ <14.4><17.28><20.74><24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmu10}{}
+
+\DeclareFontShape{U}{cmr}{b}{n}
+ {
+ <5><6><7><8><9><10><10.95><12>
+ <14.4><17.28><20.74><24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmb10}{}
+
+\DeclareFontShape{U}{cmr}{bx}{n}
+ {
+ <5> <6> <7> <8> <9> gen * cmbx
+ <10><10.95> cmbx10
+ <12><14.4><17.28><20.74><24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmbx12}{}
+
+\DeclareFontShape{U}{cmr}{bx}{sl}
+ {
+ <5> <6> <7> <8> <9>
+ <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmbxsl10}{}
+
+\DeclareFontShape{U}{cmr}{bx}{it}
+ {
+ <5> <6> <7> <8> <9>
+ <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88>
+ <29.86> <35.83> <43.00> <51.6> <61.92> <74.3> <89.16> <107.0> cmbxti10}{}
+
+%% Copied from exscale.sty
+%% Copyright (C) 1992-1995 Frank Mittelbach and Rainer Sch\"opf,
+%% all rights reserved.
+
+\DeclareSymbolFont{largesymbols}{OMX}{cmex}{m}{n}
+\newdimen\big@size
+\addto@hook\every@math@size{\setbox\z@\vbox{\hbox{$($}\kern\z@}%
+ \global\big@size 1.2\ht\z@}
+\def\bBigg@#1#2{%
+ {\hbox{$\left#2\vcenter to#1\big@size{}\right.\n@space$}}}
+\def\big{\bBigg@\@ne}
+\def\Big{\bBigg@{1.5}}
+\def\bigg{\bBigg@\tw@}
+\def\Bigg{\bBigg@{2.5}}
+
+%% End of copy
+
+\DeclareMathSizes{24.88}{24.88}{20.74}{14.4}
+\DeclareMathSizes{29.86}{29.86}{20.74}{14.4}
+\DeclareMathSizes{35.83}{35.83}{24.88}{17.28}
+\DeclareMathSizes{43.00}{43.00}{35.83}{24.88}
+\DeclareMathSizes{51.6}{51.6}{35.83}{24.88}
+\DeclareMathSizes{61.92}{61.92}{43}{29.86}
+\DeclareMathSizes{74.3}{74.3}{51.6}{35.83}
+\DeclareMathSizes{89.16}{89.16}{61.92}{43}
+\DeclareMathSizes{107}{107}{74.3}{51.6}
+
+%% End of a0size.sty
diff --git a/tex/.texmf/tex/latex/misc/beton.sty b/tex/.texmf/tex/latex/misc/beton.sty
new file mode 100644
index 0000000..0007990
--- /dev/null
+++ b/tex/.texmf/tex/latex/misc/beton.sty
@@ -0,0 +1,73 @@
+%%
+%% This is file `beton.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% beton.dtx (with options: `package')
+
+%% File `beton.dtx'.
+%% Copyright (C) 1992--1995 Frank Jensen. All rights reserved.
+
+\def\fileversion{v1.3}
+\def\filedate{1995/03/05}
+
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesPackage{beton}[\filedate\space\fileversion]
+\typeout{Package: `beton' \fileversion\space <\filedate> (FJ)}
+\def\rmdefault{ccr}
+\def\beton@baselineskip@table
+ {<\@viiipt>10<\@ixpt>11.5<\@xpt>13<\@xipt>14.5<\@xiipt>16}
+\def\beton@new@setfontsize#1#2#3%
+ {\edef\@tempa{\def\noexpand\@tempb####1<#2}%
+ \@tempa>##2<##3\@nil{\def\beton@baselineskip@value{##2}}%
+ \edef\@tempa{\noexpand\@tempb\beton@baselineskip@table<#2}%
+ \@tempa><\@nil
+ \ifx\beton@baselineskip@value\@empty
+ \def\beton@baselineskip@value{#3}%
+ \fi
+ \beton@old@setfontsize{#1}{#2}\beton@baselineskip@value}
+\AtBeginDocument
+ {\let\beton@old@setfontsize=\@setfontsize
+ \let\@setfontsize=\beton@new@setfontsize}
+\DeclareOption{standard-baselineskips}
+ {\AtBeginDocument{\let\@setfontsize=\beton@old@setfontsize}}
+\DeclareOption{oldstyle-equation-numbers}
+ {\@ifundefined{chapter}
+ {\def\theequation{{\beton@oldstyle\arabic{equation}}}}
+ {\def\theequation{{\beton@oldstyle\thechapter}.%
+ {\beton@oldstyle\arabic{equation}}}}}
+\DeclareRobustCommand\beton@oldstyle{\usefont{OML}{ccm}\f@series{it}}
+\DeclareRobustCommand\oldstylenums[1]%
+ {\begingroup
+ \spaceskip\fontdimen\tw@\font
+ \TextOldstyle \MathOldstyle #1%
+ \endgroup}
+\let\TextOldstyle=\beton@oldstyle
+\providecommand\MathOldstyle{\mathgroup\symletters}
+\DeclareOption{concrete-math}
+ {\DeclareSymbolFont{operators}{OT1}{ccr}{m}{n}%
+ \DeclareSymbolFont{letters}{OML}{ccm}{m}{it}}
+\def\dash---{\thinspace---\hskip.16667em\relax}
+\def\qback{\kern-.15em} % between , or . and ''
+\def\t#1{{\edef\next{\the\font}\beton@oldstyle\accent"7F\next#1}}
+\ProcessOptions
+\AtBeginDocument{\normalsize}
+\endinput
+%%
+%% End of file `beton.sty'.
diff --git a/tex/.texmf/tex/latex/misc/etoolbox.sty b/tex/.texmf/tex/latex/misc/etoolbox.sty
new file mode 100644
index 0000000..3554942
--- /dev/null
+++ b/tex/.texmf/tex/latex/misc/etoolbox.sty
@@ -0,0 +1,1726 @@
+% Copyright (c) 2007-2011 Philipp Lehman.
+% (c) 2015 Joseph Wright
+%
+% Permission is granted to copy, distribute and/or modify this
+% software under the terms of the LaTeX Project Public License
+% (LPPL), version 1.3c or any later version.
+%
+% This software is provided 'as is', without warranty of any kind,
+% either expressed or implied, including, but not limited to, the
+% implied warranties of merchantability and fitness for a
+% particular purpose.
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{etoolbox}
+ [2015/08/02 v2.2a e-TeX tools for LaTeX (JAW)]
+
+\begingroup
+\@ifundefined{eTeXversion}
+ {\PackageError{etoolbox}
+ {Not running under e-TeX}
+ {This package requires e-TeX. Try compiling the document
+ with\MessageBreak 'elatex' instead of 'latex'. When using
+ pdfTeX, try 'pdfelatex'\MessageBreak instead of 'pdflatex'.
+ This is a fatal error. I'm aborting now.}%
+ \aftergroup\endinput}
+ {}
+\endgroup
+
+\ifdefined\extrafloats
+ \expandafter\@gobble
+\else
+ \expandafter\@firstofone
+\fi
+ {\RequirePackage{etex}}
+
+\def\etb@catcodes{\do\&\do\|\do\:\do\-\do\=\do\<\do\>}
+\def\do#1{\catcode\number`#1=\the\catcode`#1\relax}
+\edef\etb@catcodes{\etb@catcodes}
+\let\do\noexpand
+\AtEndOfPackage{\etb@catcodes\undef\etb@catcodes}
+
+\catcode`\&=3
+\catcode`\|=3
+\@makeother\:
+\@makeother\-
+\@makeother\=
+\@makeother\<
+\@makeother\>
+
+\protected\def\etb@error{\PackageError{etoolbox}}
+\protected\def\etb@warning{\PackageWarning{etoolbox}}
+\protected\def\etb@info{\PackageInfo{etoolbox}}
+\newcount\etb@tempcnta
+
+% {}[][]{}
+
+\newcommand*{\newrobustcmd}{}
+\protected\def\newrobustcmd{\@star@or@long\etb@new@command}
+
+\def\etb@new@command#1{\@testopt{\etb@newcommand#1}0}
+
+\def\etb@newcommand#1[#2]{%
+ \@ifnextchar[%]
+ {\etb@xargdef#1[#2]}
+ {\ifx\l@ngrel@x\relax
+ \let\l@ngrel@x\protected
+ \else
+ \protected\def\l@ngrel@x{\protected\long}%
+ \fi
+ \@argdef#1[#2]}}
+
+\long\def\etb@xargdef#1[#2][#3]#4{%
+ \@ifdefinable#1{%
+ \expandafter\protected
+ \expandafter\def
+ \expandafter#1%
+ \expandafter{%
+ \expandafter\@testopt
+ \csname\string#1\endcsname{#3}}%
+ \expandafter\@yargdef\csname\string#1\endcsname\tw@{#2}{#4}}}
+
+% {}[][]{}
+
+\newrobustcmd*{\renewrobustcmd}{\@star@or@long\etb@renew@command}
+
+\def\etb@renew@command#1{%
+ \ifundef{#1}
+ {\etb@error{\string#1 undefined}\@ehc}
+ {}%
+ \let\@ifdefinable\@rc@ifdefinable
+ \etb@new@command#1}
+
+% {}[][]{}
+
+\newrobustcmd*{\providerobustcmd}{\@star@or@long\etb@provide@command}
+
+\def\etb@provide@command#1{%
+ \ifundef{#1}
+ {\def\reserved@a{\etb@new@command#1}}
+ {\def\reserved@a{\etb@renew@command\reserved@a}}%
+ \reserved@a}
+
+% {}
+
+\newrobustcmd*{\csshow}[1]{%
+ \begingroup\expandafter\endgroup
+ \expandafter\show\csname#1\endcsname}
+
+% {}
+
+\newcommand*{\csmeaning}[1]{%
+ \ifcsname #1\endcsname
+ \expandafter\meaning\csname #1\endcsname
+ \else
+ \detokenize{undefined}%
+ \fi}
+
+% {}{}{}
+
+\newcommand{\ifdef}[1]{%
+ \ifdefined#1%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+% {}{}{}
+
+\newcommand{\ifundef}[1]{%
+ \ifdefined#1%
+ \ifx#1\relax
+ \expandafter\expandafter
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\expandafter
+ \expandafter\@secondoftwo
+ \fi
+ \else
+ \expandafter\@firstoftwo
+ \fi}
+
+% {}{}{}
+
+\newcommand*{\ifcsdef}[1]{%
+ \ifcsname#1\endcsname
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+% {}{}{}
+
+\newcommand*{\ifcsundef}[1]{%
+ \ifcsname#1\endcsname
+ \expandafter\ifx\csname#1\endcsname\relax
+ \expandafter\expandafter
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\expandafter
+ \expandafter\@secondoftwo
+ \fi
+ \else
+ \expandafter\@firstoftwo
+ \fi}
+
+% {}{}
+
+\newcommand{\ifdefmacro}{}
+\long\edef\ifdefmacro#1{%
+ \noexpand\expandafter\noexpand\etb@ifdefmacro
+ \noexpand\meaning#1\detokenize{macro}:&}
+\edef\etb@ifdefmacro{%
+ \def\noexpand\etb@ifdefmacro##1\detokenize{macro}:##2&}
+\etb@ifdefmacro{\notblank{#2}}
+
+% {}{}{}
+
+\newcommand*{\ifcsmacro}[1]{%
+ \ifcsdef{#1}
+ {\expandafter\ifdefmacro\csname#1\endcsname}
+ {\@secondoftwo}}
+
+% {}{}
+
+\newcommand{\ifdefprefix}[1]{%
+ \ifdefmacro{#1}
+ {\etb@ifdefprefix{#1}}
+ {\@secondoftwo}}
+\long\edef\etb@ifdefprefix#1{%
+ \noexpand\expandafter\noexpand\etb@ifdefprefix@i
+ \noexpand\meaning#1\detokenize{macro}:&}
+\edef\etb@ifdefprefix@i{%
+ \def\noexpand\etb@ifdefprefix@i##1\detokenize{macro}:##2&}
+\etb@ifdefprefix@i{\notblank{#1}}
+
+% {}{}{}
+
+\newcommand*{\ifcsprefix}[1]{%
+ \ifcsdef{#1}
+ {\expandafter\ifdefprefix\csname#1\endcsname}
+ {\@secondoftwo}}
+
+% {}{}
+
+\newcommand{\ifdefparam}{}
+\long\edef\ifdefparam#1{%
+ \noexpand\expandafter\noexpand\etb@ifdefparam
+ \noexpand\meaning#1\detokenize{macro}:->&}
+\edef\etb@ifdefparam{%
+ \def\noexpand\etb@ifdefparam##1\detokenize{macro}:##2->##3&}
+\etb@ifdefparam{\notblank{#2}}
+
+% {}{}{}
+
+\newcommand*{\ifcsparam}[1]{%
+ \ifcsdef{#1}
+ {\expandafter\ifdefparam\csname#1\endcsname}
+ {\@secondoftwo}}
+
+% {}{}
+
+\newcommand{\ifdefprotected}{}
+\long\edef\ifdefprotected#1{%
+ \noexpand\expandafter\noexpand\etb@ifdefprotected
+ \noexpand\meaning#1\string\protected&}
+\edef\etb@ifdefprotected{%
+ \def\noexpand\etb@ifdefprotected##1\string\protected##2&}
+\etb@ifdefprotected{\notblank{#2}}
+
+% {}{}{}
+
+\newcommand*{\ifcsprotected}[1]{%
+ \ifcsdef{#1}
+ {\expandafter\ifdefprotected\csname#1\endcsname}
+ {\@secondoftwo}}
+
+% {}{}
+
+\newrobustcmd{\ifdefltxprotect}[1]{%
+ \begingroup
+ \edef\etb@resrvda{%
+ \noexpand\protect\expandafter\noexpand
+ \csname\expandafter\@gobble\string#1 \endcsname}%
+ \expandafter\endgroup\ifx#1\etb@resrvda
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+% {}{}{}
+
+\newrobustcmd*{\ifcsltxprotect}[1]{%
+ \ifcsdef{#1}
+ {\expandafter\ifdefltxprotect\csname#1\endcsname}
+ {\@secondoftwo}}
+
+% {}{}{}
+
+\newcommand{\ifdefempty}[1]{%
+ \ifundef{#1}
+ {\@secondoftwo}
+ {\ifdefmacro{#1}
+ {\ifdefparam{#1}
+ {\@secondoftwo}
+ {\etb@ifdefempty{#1}}}
+ {\@secondoftwo}}}
+
+\def\etb@ifdefempty#1{%
+ \expandafter\expandafter
+ \expandafter\ifblank
+ \expandafter\expandafter
+ \expandafter{%
+ \expandafter\strip@prefix\meaning#1}}
+
+% {}{}{}
+
+\newcommand*{\ifcsempty}[1]{%
+ \ifcsundef{#1}
+ {\@secondoftwo}
+ {\expandafter\ifdefparam\csname#1\endcsname
+ {\@secondoftwo}
+ {\expandafter\etb@ifdefempty\csname#1\endcsname}}}
+
+% {}{}{}
+
+\newcommand{\ifdefvoid}[1]{%
+ \ifundef{#1}
+ {\@firstoftwo}
+ {\ifdefmacro{#1}
+ {\ifdefparam{#1}
+ {\@secondoftwo}
+ {\etb@ifdefempty{#1}}}
+ {\@secondoftwo}}}
+
+% {}{}{}
+
+\newcommand*{\ifcsvoid}[1]{%
+ \ifcsundef{#1}
+ {\@firstoftwo}
+ {\expandafter\ifdefparam\csname#1\endcsname
+ {\@secondoftwo}
+ {\expandafter\etb@ifdefempty\csname#1\endcsname}}}
+
+% {}{}{}{}
+
+\newcommand{\ifdefequal}[2]{%
+ \ifundef{#1}
+ {\@secondoftwo}
+ {\ifundef{#2}
+ {\@secondoftwo}
+ {\ifx#1#2%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}}}
+
+% {}{}{}{}
+
+\newcommand*{\ifcsequal}[2]{%
+ \ifcsundef{#1}
+ {\@secondoftwo}
+ {\ifcsundef{#2}
+ {\@secondoftwo}
+ {\expandafter\ifx
+ \csname#1\expandafter\endcsname
+ \csname#2\endcsname
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}}}
+
+% {}{}{}{}
+
+\newrobustcmd{\ifdefstrequal}[2]{%
+ \ifdefmacro{#1}
+ {\ifdefmacro{#2}
+ {\begingroup
+ \edef\etb@tempa{\expandafter\strip@prefix\meaning#1}%
+ \edef\etb@tempb{\expandafter\strip@prefix\meaning#2}%
+ \ifx\etb@tempa\etb@tempb
+ \aftergroup\@firstoftwo
+ \else
+ \aftergroup\@secondoftwo
+ \fi
+ \endgroup}
+ {\@secondoftwo}}
+ {\@secondoftwo}}
+
+% {}{}{}{}
+
+\newcommand*{\ifcsstrequal}[2]{%
+ \ifcsundef{#1}
+ {\@secondoftwo}
+ {\ifcsundef{#2}
+ {\@secondoftwo}
+ {\expandafter\ifdefstrequal
+ \csname#1\expandafter\endcsname
+ \csname#2\endcsname}}}
+
+% {}{}{}{}
+
+\newrobustcmd{\ifdefstring}[2]{%
+ \ifdefmacro{#1}
+ {\begingroup
+ \edef\etb@tempa{\expandafter\strip@prefix\meaning#1}%
+ \edef\etb@tempb{\detokenize{#2}}%
+ \ifx\etb@tempa\etb@tempb
+ \aftergroup\@firstoftwo
+ \else
+ \aftergroup\@secondoftwo
+ \fi
+ \endgroup}
+ {\@secondoftwo}}
+
+% {}{}{}{}
+
+\newrobustcmd{\ifcsstring}[2]{%
+ \ifcsundef{#1}
+ {\@secondoftwo}
+ {\expandafter\ifdefstring\csname#1\endcsname{#2}}}
+
+% {}{}
+
+\newcommand{\ifdefcounter}[1]{\etb@ifcounter#1&}
+\long\def\etb@ifcounter#1#2&{%
+ \ifx\count#1%
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\etb@ifcounter@i\meaning#1:%
+ \fi}
+\edef\etb@ifcounter@i#1:#2\fi{\noexpand\fi
+ \noexpand\etb@ifcounter@ii#1\string\count&}
+\edef\etb@ifcounter@ii{%
+ \def\noexpand\etb@ifcounter@ii##1\string\count##2&}
+\etb@ifcounter@ii{\ifblank{#1}}
+
+% {}{}{}
+
+\newcommand*{\ifcscounter}[1]{%
+ \ifcsdef{#1}
+ {\expandafter\ifdefcounter\csname#1\endcsname}
+ {\@secondoftwo}}
+
+% {}{}{}
+
+\newcommand*{\ifltxcounter}[1]{%
+ \ifcsdef{c@#1}
+ {\expandafter\ifdefcounter\csname c@#1\endcsname}
+ {\@secondoftwo}}
+
+% {}{}
+
+\newcommand{\ifdeflength}[1]{\etb@iflength#1&}
+\long\def\etb@iflength#1#2&{%
+ \ifx\skip#1%
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\etb@iflength@i\meaning#1:%
+ \fi}
+\edef\etb@iflength@i#1:#2\fi{\noexpand\fi
+ \noexpand\etb@iflength@ii#1\string\skip&}
+\edef\etb@iflength@ii{%
+ \def\noexpand\etb@iflength@ii##1\string\skip##2&}
+\etb@iflength@ii{\ifblank{#1}}
+
+% {}{}{}
+
+\newcommand*{\ifcslength}[1]{%
+ \ifcsdef{#1}
+ {\expandafter\ifdeflength\csname#1\endcsname}
+ {\@secondoftwo}}
+
+% {}{}
+
+\newcommand{\ifdefdimen}[1]{\etb@ifdimen#1&}
+\long\def\etb@ifdimen#1#2&{%
+ \ifx\dimen#1%
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\etb@ifdimen@i\meaning#1:%
+ \fi}
+\edef\etb@ifdimen@i#1:#2\fi{\noexpand\fi
+ \noexpand\etb@ifdimen@ii#1\string\dimen&}
+\edef\etb@ifdimen@ii{%
+ \def\noexpand\etb@ifdimen@ii##1\string\dimen##2&}
+\etb@ifdimen@ii{\ifblank{#1}}
+
+% {}{}{}
+
+\newcommand*{\ifcsdimen}[1]{%
+ \ifcsdef{#1}
+ {\expandafter\ifdefdimen\csname#1\endcsname}
+ {\@secondoftwo}}
+
+% {}{}{}{}
+
+\newrobustcmd{\ifstrequal}[2]{%
+ \begingroup
+ \edef\etb@tempa{\detokenize{#1}}%
+ \edef\etb@tempb{\detokenize{#2}}%
+ \ifx\etb@tempa\etb@tempb
+ \aftergroup\@firstoftwo
+ \else
+ \aftergroup\@secondoftwo
+ \fi
+ \endgroup}
+
+% {}{}{}
+
+\newcommand{\ifstrempty}[1]{%
+ \expandafter\ifx\expandafter&\detokenize{#1}&%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+% {}{}{}
+
+\newcommand{\ifblank}[1]{% from expl3
+ \expandafter\ifx\expandafter\relax\detokenize\expandafter{\@gobble#1?}\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+\newcommand{\notblank}[1]{%
+ \expandafter\ifx\expandafter\relax\detokenize\expandafter{\@gobble#1?}\relax
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi}
+
+% {}{}{}{}{}
+
+\newcommand*{\ifnumcomp}[3]{%
+ \ifnum\numexpr#1\relax#2\numexpr#3\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+% {}{}{}{}
+
+\newcommand*{\ifnumequal}[1]{%
+ \ifnumcomp{#1}=}
+
+\newcommand*{\ifnumgreater}[1]{%
+ \ifnumcomp{#1}>}
+
+\newcommand*{\ifnumless}[1]{%
+ \ifnumcomp{#1}<}
+
+% {}{}{}
+
+\newcommand*{\ifnumodd}[1]{%
+ \ifodd\numexpr#1\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+% {}{}{}{}{}
+
+\newcommand*{\ifdimcomp}[3]{%
+ \ifdim\dimexpr#1\relax#2\dimexpr#3\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+% {}{}{}{}
+
+\newcommand*{\ifdimequal}[1]{%
+ \ifdimcomp{#1}=}
+
+\newcommand*{\ifdimgreater}[1]{%
+ \ifdimcomp{#1}>}
+
+\newcommand*{\ifdimless}[1]{%
+ \ifdimcomp{#1}<}
+
+% {}{}{}
+
+\newcommand{\ifboolexpe}[1]{%
+ \etb@be@beg\etb@be@bgroup#1(&\etb@be@end}
+
+\let\etb@be@true\@empty
+\def\etb@be@false{-\@ne}
+
+\def\etb@be@beg{%
+ \ifnum\numexpr\z@\ifnum\numexpr\z@}
+
+\def\etb@be@end{%
+ <\z@
+ \expandafter\etb@be@false
+ \fi
+ <\z@
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi}
+
+\long\def\etb@be@bgroup#1(#2&{%
+ \etb@be@egroup#1)&%
+ \ifblank{#2}
+ {}
+ {\etb@be@beg
+ \etb@be@bgroup#2&}}
+
+\long\def\etb@be@egroup#1)#2&{%
+ \etb@be@and#1and&%
+ \ifblank{#2}
+ {}
+ {\etb@be@end\etb@be@true\etb@be@false
+ \etb@be@egroup#2&}}
+
+\long\def\etb@be@and#1and#2&{%
+ \etb@be@or#1or&%
+ \ifblank{#2}
+ {}
+ {<\z@
+ \expandafter\@firstofone
+ \else
+ \expandafter\@gobble
+ \fi
+ {=\z@\fi\ifnum\numexpr\m@ne}%
+ \ifnum\numexpr\z@
+ \etb@be@and#2&}}
+
+\long\def\etb@be@or#1or#2&{%
+ \etb@be@not#1not&%
+ \ifblank{#2}
+ {}
+ {<\z@
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+ {=\z@\fi\ifnum\numexpr\z@
+ \ifnum\numexpr\@ne}
+ {=\z@\fi\ifnum\numexpr\z@
+ \ifnum\numexpr\z@}%
+ \etb@be@or#2&}}
+
+\long\def\etb@be@not#1not#2&{%
+ \etb@be@togl#1togl&%
+ \ifblank{#2}
+ {}
+ {>\z@
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\unless\ifnum\numexpr\m@ne}
+ {\unless\ifnum\numexpr\z@}%
+ \etb@be@not#2&}}
+
+\long\def\etb@be@togl#1togl#2&{%
+ \etb@be@bool#1bool&%
+ \ifblank{#2}
+ {}
+ {\etb@be@togl@i#2&}}
+
+\long\def\etb@be@togl@i#1#2&{%
+ \ifcsdef{etb@tgl@#1}
+ {\csname etb@tgl@#1\endcsname\etb@be@true\etb@be@false}
+ {\etb@be@err{Toggle '#1' undefined}{}}%
+ \etb@be@togl#2&}
+
+\long\def\etb@be@bool#1bool#2&{%
+ \etb@be@test#1test&%
+ \ifblank{#2}
+ {}
+ {\etb@be@bool@i#2&}}
+
+\long\def\etb@be@bool@i#1#2&{%
+ \ifcsundef{if#1}
+ {\etb@be@err{Boolean '#1' undefined}{}}
+ {\csname if#1\endcsname
+ \else
+ \etb@be@false
+ \fi}%
+ \etb@be@bool#2&}
+
+\long\def\etb@be@test#1test#2&{%
+ \ifblank{#1}
+ {}
+ {\etb@be@err{The invalid part is: '\detokenize{#1}'}{}}%
+ \ifblank{#2}
+ {}
+ {\etb@be@test@i#2&}}
+
+\long\def\etb@be@test@i#1#2&{%
+ #1\etb@be@true\etb@be@false
+ \etb@be@test#2&}
+
+\long\def\etb@be@err#1#2{%
+ \expandafter\ifnum\the\numexpr
+ \expandafter\ifnum\the\currentiftype=-3
+ \expandafter\thr@@
+ \else
+ \expandafter\currentiftype
+ \fi
+ =\thr@@
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {=\z@\fi
+ \etb@be@err{#1}{#2\ifnum\numexpr\m@ne}}
+ {\etb@err@expr{#1}#2}}
+
+% {}{}{}
+
+\newrobustcmd{\ifboolexpr}[1]{\etb@boolexpr{#1}}
+
+\long\def\etb@boolexpr#1{%
+ \begingroup
+ \let\etb@br@neg\@firstoftwo
+ \etb@tempcnta\z@
+ \etb@br@beg
+ \etb@br@bgroup#1(&%
+ \etb@br@end
+ \etb@br@eval}
+
+\def\etb@br@beg{%
+ \begingroup
+ \let\etb@br@neg\@firstoftwo
+ \etb@tempcnta\z@}
+
+\def\etb@br@end{%
+ \etb@br@eval\etb@br@true\etb@br@false}
+
+\def\etb@br@eval{%
+ \ifnum\etb@tempcnta<\z@
+ \aftergroup\@secondoftwo
+ \else
+ \aftergroup\@firstoftwo
+ \fi
+ \endgroup}
+
+\def\etb@br@true{%
+ \advance\etb@tempcnta\etb@br@neg\z@\m@ne
+ \let\etb@br@neg\@firstoftwo}
+
+\def\etb@br@false{%
+ \advance\etb@tempcnta\etb@br@neg\m@ne\z@
+ \let\etb@br@neg\@firstoftwo}
+
+\long\def\etb@br@bgroup#1(#2&{%
+ \etb@br@egroup#1)&%
+ \ifblank{#2}
+ {}
+ {\etb@br@beg
+ \etb@br@bgroup#2&}}
+
+\long\def\etb@br@egroup#1)#2&{%
+ \etb@br@and#1and&%
+ \ifblank{#2}
+ {}
+ {\etb@br@end
+ \etb@br@egroup#2&}}
+
+\long\def\etb@br@and#1and#2&{%
+ \etb@br@or#1or&%
+ \ifblank{#2}
+ {}
+ {\ifnum\etb@tempcnta<\z@
+ \etb@tempcnta\m@ne
+ \else
+ \etb@tempcnta\z@
+ \fi
+ \etb@br@and#2&}}
+
+\long\def\etb@br@or#1or#2&{%
+ \etb@br@not#1not&%
+ \ifblank{#2}
+ {}
+ {\ifnum\etb@tempcnta<\z@
+ \etb@tempcnta\z@
+ \else
+ \etb@tempcnta\@ne
+ \fi
+ \etb@br@or#2&}}
+
+\long\def\etb@br@not#1not#2&{%
+ \etb@br@togl#1togl&%
+ \ifblank{#2}
+ {}
+ {\let\etb@br@neg\@secondoftwo
+ \etb@br@not#2&}}
+
+\long\def\etb@br@togl#1togl#2&{%
+ \etb@br@bool#1bool&%
+ \ifblank{#2}
+ {}
+ {\etb@br@togl@i#2&}}
+
+\long\def\etb@br@togl@i#1#2&{%
+ \ifcsdef{etb@tgl@#1}
+ {\csname etb@tgl@#1\endcsname\etb@br@true\etb@br@false}
+ {\etb@err@expr{Toggle '#1' undefined}\etb@br@false}%
+ \etb@br@togl#2&}
+
+\long\def\etb@br@bool#1bool#2&{%
+ \etb@br@test#1test&%
+ \ifblank{#2}
+ {}
+ {\etb@br@bool@i#2&}}
+
+\long\def\etb@br@bool@i#1#2&{%
+ \ifcsundef{if#1}
+ {\etb@err@expr{Boolean '#1' undefined}\etb@br@false}
+ {\csname if#1\endcsname
+ \etb@br@true
+ \else
+ \etb@br@false
+ \fi}%
+ \etb@br@bool#2&}
+
+\long\def\etb@br@test#1test#2&{%
+ \ifblank{#1}
+ {}
+ {\etb@err@expr{The invalid part is: '\detokenize{#1}'}}%
+ \ifblank{#2}
+ {}
+ {\etb@br@test@i#2&}}
+
+\long\def\etb@br@test@i#1#2&{%
+ \ignorespaces#1\etb@br@true\etb@br@false
+ \etb@br@test#2&}
+
+\long\def\etb@err@expr#1{%
+ \etb@error
+ {Invalid boolean expression}
+ {#1.}}
+
+% {}{}
+
+\newrobustcmd{\whileboolexpr}[2]{%
+ \etb@boolexpr{#1}{#2\whileboolexpr{#1}{#2}}{}}
+
+% {}{}
+
+\newrobustcmd{\unlessboolexpr}[2]{%
+ \etb@boolexpr{#1}{}{#2\unlessboolexpr{#1}{#2}}}
+
+% {}
+
+\newcommand{\expandonce}[1]{%
+ \unexpanded\expandafter{#1}}
+
+% {}
+
+\newcommand*{\csexpandonce}[1]{%
+ \expandafter\expandonce\csname#1\endcsname}
+
+% {}
+
+\newcommand*{\protecting}{}
+\def\protecting#{%
+ \ifx\protect\@typeset@protect
+ \etb@protecting\@firstofone
+ \fi
+ \ifx\protect\@unexpandable@protect
+ \etb@protecting\etb@unexpandable
+ \fi
+ \ifx\protect\noexpand
+ \etb@protecting\unexpanded
+ \fi
+ \ifx\protect\string
+ \etb@protecting\detokenize
+ \fi
+ \relax\@firstofone}
+
+\def\etb@protecting#1#2\relax\@firstofone{\fi#1}
+\long\def\etb@unexpandable#1{\unexpanded{\protecting{#1}}}
+
+% {}
+
+\newrobustcmd*{\csdef}[1]{\expandafter\def\csname#1\endcsname}
+\newrobustcmd*{\csedef}[1]{\expandafter\edef\csname#1\endcsname}
+\newrobustcmd*{\csgdef}[1]{\expandafter\gdef\csname#1\endcsname}
+\newrobustcmd*{\csxdef}[1]{\expandafter\xdef\csname#1\endcsname}
+\newrobustcmd*{\protected@csedef}{\etb@protected\csedef}
+\newrobustcmd*{\protected@csxdef}{\etb@protected\csxdef}
+
+\def\etb@protected{%
+ \let\@@protect\protect
+ \let\protect\@unexpandable@protect
+ \afterassignment\restore@protect}
+
+% {}{}
+
+\newrobustcmd{\cslet}[2]{%
+ \expandafter\let\csname#1\endcsname#2}
+
+% {}{}
+
+\newrobustcmd{\letcs}[2]{%
+ \ifcsdef{#2}
+ {\expandafter\let\expandafter#1\csname#2\endcsname}
+ {\undef#1}}
+
+% {}{}
+
+\newrobustcmd*{\csletcs}[2]{%
+ \ifcsdef{#2}
+ {\expandafter\let
+ \csname#1\expandafter\endcsname
+ \csname#2\endcsname}
+ {\csundef{#1}}}
+
+% {}
+
+\newcommand*{\csuse}[1]{%
+ \ifcsname#1\endcsname
+ \csname#1\expandafter\endcsname
+ \fi}
+
+% {}
+
+\newrobustcmd{\undef}[1]{\let#1\etb@undefined}
+
+% {}
+
+\newrobustcmd*{\csundef}[1]{\cslet{#1}\etb@undefined}
+
+% {}{}
+
+\newrobustcmd{\appto}[2]{%
+ \ifundef{#1}
+ {\edef#1{\unexpanded{#2}}}
+ {\edef#1{\expandonce#1\unexpanded{#2}}}}
+\newrobustcmd{\eappto}[2]{%
+ \ifundef{#1}
+ {\edef#1{#2}}
+ {\edef#1{\expandonce#1#2}}}
+\newrobustcmd{\gappto}[2]{%
+ \ifundef{#1}
+ {\xdef#1{\unexpanded{#2}}}
+ {\xdef#1{\expandonce#1\unexpanded{#2}}}}
+\newrobustcmd{\xappto}[2]{%
+ \ifundef{#1}
+ {\xdef#1{#2}}
+ {\xdef#1{\expandonce#1#2}}}
+
+\newrobustcmd*{\protected@eappto}{\etb@protected\eappto}
+\newrobustcmd*{\protected@xappto}{\etb@protected\xappto}
+
+% {}{}
+
+\newrobustcmd{\preto}[2]{%
+ \ifundef{#1}
+ {\edef#1{\unexpanded{#2}}}
+ {\edef#1{\unexpanded{#2}\expandonce#1}}}
+\newrobustcmd{\epreto}[2]{%
+ \ifundef{#1}
+ {\edef#1{#2}}
+ {\edef#1{#2\expandonce#1}}}
+\newrobustcmd{\gpreto}[2]{%
+ \ifundef{#1}
+ {\xdef#1{\unexpanded{#2}}}
+ {\xdef#1{\unexpanded{#2}\expandonce#1}}}
+\newrobustcmd{\xpreto}[2]{%
+ \ifundef{#1}
+ {\xdef#1{#2}}
+ {\xdef#1{#2\expandonce#1}}}
+
+\newrobustcmd*{\protected@epreto}{\etb@protected\epreto}
+\newrobustcmd*{\protected@xpreto}{\etb@protected\xpreto}
+
+% {}{}
+
+\newrobustcmd*{\csappto}[1]{\expandafter\appto\csname#1\endcsname}
+\newrobustcmd*{\cseappto}[1]{\expandafter\eappto\csname#1\endcsname}
+\newrobustcmd*{\csgappto}[1]{\expandafter\gappto\csname#1\endcsname}
+\newrobustcmd*{\csxappto}[1]{\expandafter\xappto\csname#1\endcsname}
+\newrobustcmd*{\protected@cseappto}{\etb@protected\cseappto}
+\newrobustcmd*{\protected@csxappto}{\etb@protected\csxappto}
+
+% {}{}
+
+\newrobustcmd*{\cspreto}[1]{\expandafter\preto\csname#1\endcsname}
+\newrobustcmd*{\csepreto}[1]{\expandafter\epreto\csname#1\endcsname}
+\newrobustcmd*{\csgpreto}[1]{\expandafter\gpreto\csname#1\endcsname}
+\newrobustcmd*{\csxpreto}[1]{\expandafter\xpreto\csname#1\endcsname}
+\newrobustcmd*{\protected@csepreto}{\etb@protected\csepreto}
+\newrobustcmd*{\protected@csxpreto}{\etb@protected\csxpreto}
+
+% {}{}
+
+\newrobustcmd*{\numdef}[2]{%
+ \ifundef#1{\let#1\z@}{}%
+ \edef#1{\the\numexpr#2}}
+\newrobustcmd*{\numgdef}[2]{%
+ \ifundef#1{\let#1\z@}{}%
+ \xdef#1{\the\numexpr#2}}
+
+% {}{}
+
+\newrobustcmd*{\csnumdef}[1]{%
+ \expandafter\numdef\csname#1\endcsname}
+\newrobustcmd*{\csnumgdef}[1]{%
+ \expandafter\numgdef\csname#1\endcsname}
+
+% {}{}
+
+\newrobustcmd*{\dimdef}[2]{%
+ \ifundef#1{\let#1\z@}{}%
+ \edef#1{\the\dimexpr#2}}
+\newrobustcmd*{\dimgdef}[2]{%
+ \ifundef#1{\let#1\z@}{}%
+ \xdef#1{\the\dimexpr#2}}
+
+% {}{}
+
+\newrobustcmd*{\csdimdef}[1]{%
+ \expandafter\dimdef\csname#1\endcsname}
+\newrobustcmd*{\csdimgdef}[1]{%
+ \expandafter\dimgdef\csname#1\endcsname}
+
+% {}{}
+
+\newrobustcmd*{\gluedef}[2]{%
+ \ifundef#1{\let#1\z@skip}{}%
+ \edef#1{\the\glueexpr#2}}
+\newrobustcmd*{\gluegdef}[2]{%
+ \ifundef#1{\let#1\z@skip}{}%
+ \xdef#1{\the\glueexpr#2}}
+
+% {}{}
+
+\newrobustcmd*{\csgluedef}[1]{%
+ \expandafter\gluedef\csname#1\endcsname}
+\newrobustcmd*{\csgluegdef}[1]{%
+ \expandafter\gluegdef\csname#1\endcsname}
+
+% {}{}
+
+\newrobustcmd*{\mudef}[2]{%
+ \ifundef#1{\def#1{0mu}}{}%
+ \edef#1{\the\muexpr#2}}
+\newrobustcmd*{\mugdef}[2]{%
+ \ifundef#1{\let#1\z@}{}%
+ \xdef#1{\the\muexpr#2}}
+
+% {}{}
+
+\newrobustcmd*{\csmudef}[1]{%
+ \expandafter\mudef\csname#1\endcsname}
+\newrobustcmd*{\csmugdef}[1]{%
+ \expandafter\mugdef\csname#1\endcsname}
+
+% {}{}
+
+\newrobustcmd*{\defcounter}[2]{%
+ \ifcsundef{c@#1}
+ {\etb@noglobal\@nocounterr{#1}}%
+ {\csname c@#1\endcsname\numexpr#2\relax}}
+
+% {}{}
+
+\newrobustcmd*{\deflength}[2]{%
+ \ifundef{#1}
+ {\etb@noglobal\etb@err@nolen{#1}}%
+ {#1\glueexpr#2\relax}}
+
+\protected\def\etb@err@nolen#1{%
+ \etb@error{Length '\string#1' undefined}\@eha}
+
+% {}
+
+\newrobustcmd*{\newbool}[1]{%
+ \expandafter\@ifdefinable\csname if#1\endcsname{%
+ \expandafter\newif\csname if#1\endcsname}}
+
+% {}
+
+\newrobustcmd*{\providebool}[1]{%
+ \ifcsundef{if#1}
+ {\expandafter\newif\csname if#1\endcsname}
+ {\begingroup
+ \edef\@tempa{\expandafter\meaning\csname if#1\endcsname}%
+ \ifx\@tempa\etb@isfalse
+ \else
+ \ifx\@tempa\etb@istrue
+ \else
+ \etb@error{\@backslashchar if#1 not a boolean}\@eha
+ \fi
+ \fi
+ \endgroup}}
+
+% {}{|}
+
+\newrobustcmd*{\setbool}[2]{%
+ \ifcsundef{if#1}
+ {\etb@noglobal\etb@err@nobool{#1}}
+ {\ifcsundef{#1#2}
+ {\etb@noglobal\etb@err@boolval{#2}}
+ {\csname#1#2\endcsname}}}
+
+% {}
+
+\newrobustcmd*{\booltrue}[1]{%
+ \ifcsundef{if#1}
+ {\etb@noglobal\etb@err@nobool{#1}}
+ {\csname#1true\endcsname}}
+
+% {}
+
+\newrobustcmd*{\boolfalse}[1]{%
+ \ifcsundef{if#1}
+ {\etb@noglobal\etb@err@nobool{#1}}
+ {\csname#1false\endcsname}}
+
+\edef\etb@istrue{\meaning\iftrue}
+\edef\etb@isfalse{\meaning\iffalse}
+\protected\def\etb@noglobal{\let\relax\relax}
+
+% {}{}
+
+\newcommand*{\ifbool}[1]{%
+ \ifcsundef{if#1}
+ {\etb@err@nobool{#1}\@gobbletwo}
+ {\csname if#1\endcsname
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}}
+
+% {}{}
+
+\newcommand*{\notbool}[1]{%
+ \ifcsundef{if#1}
+ {\etb@err@nobool{#1}\@gobbletwo}
+ {\csname if#1\endcsname
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi}}
+
+\protected\def\etb@err@nobool#1{%
+ \etb@error{Boolean '\@backslashchar if#1' undefined}\@eha}
+
+\def\etb@err@boolval#1{%
+ \etb@error
+ {Invalid boolean value '#1'}
+ {Valid boolean values are 'true' and 'false'.}}
+
+% {}
+
+\newrobustcmd*{\newtoggle}[1]{%
+ \ifcsdef{etb@tgl@#1}
+ {\etb@error{Toggle '#1' already defined}\@eha}
+ {\cslet{etb@tgl@#1}\@secondoftwo}}
+
+% {}
+
+\newrobustcmd*{\providetoggle}[1]{%
+ \ifcsdef{etb@tgl@#1}
+ {}
+ {\cslet{etb@tgl@#1}\@secondoftwo}}
+
+% {}{|}
+
+\newrobustcmd*{\settoggle}[2]{%
+ \ifcsdef{etb@tgl@#1}
+ {\ifcsdef{etb@toggle#2}
+ {\csletcs{etb@tgl@#1}{etb@toggle#2}}
+ {\etb@noglobal\etb@err@boolval{#2}}}
+ {\etb@noglobal\etb@err@notoggle{#1}}}
+
+% {}
+
+\newrobustcmd*{\toggletrue}[1]{%
+ \ifcsdef{etb@tgl@#1}
+ {\cslet{etb@tgl@#1}\etb@toggletrue}
+ {\etb@noglobal\etb@err@notoggle{#1}}}
+
+% {}
+
+\newrobustcmd*{\togglefalse}[1]{%
+ \ifcsdef{etb@tgl@#1}
+ {\cslet{etb@tgl@#1}\etb@togglefalse}
+ {\etb@noglobal\etb@err@notoggle{#1}}}
+
+\let\etb@toggletrue\@firstoftwo
+\let\etb@togglefalse\@secondoftwo
+
+% {}{}
+
+\newcommand*{\iftoggle}[1]{%
+ \ifcsdef{etb@tgl@#1}
+ {\csname etb@tgl@#1\endcsname}
+ {\etb@err@notoggle{#1}\@gobbletwo}}
+
+% {}{}
+
+\newcommand*{\nottoggle}[1]{%
+ \ifcsdef{etb@tgl@#1}
+ {\csname etb@tgl@#1\endcsname\@secondoftwo\@firstoftwo}
+ {\etb@err@notoggle{#1}\@gobbletwo}}
+
+\protected\def\etb@err@notoggle#1{%
+ \etb@error{Toggle '#1' undefined}\@eha}
+
+% {}{}
+
+\protected\def\etb@ifscanable#1{%
+ \begingroup
+ \edef\etb@resrvda{%
+ \def\noexpand\etb@resrvda####1\detokenize{macro}:####2->####3&{%
+ ####1\def\string\etb@resrvda####2{####3}}%
+ \edef\noexpand\etb@resrvda{\noexpand\etb@resrvda\meaning#1&}}%
+ \etb@resrvda
+ \makeatletter
+ \endlinechar\m@ne
+ \scantokens\expandafter{\etb@resrvda}%
+ \expandafter\endgroup\ifx#1\etb@resrvda
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+% {}{}{}
+
+\protected\long\def\etb@ifpattern#1#2{%
+ \begingroup
+ \edef\etb@resrvda{%
+ \def\noexpand\etb@resrvda####1\detokenize{#2}####2&{%
+ \endgroup\noexpand\noexpand\noexpand\ifblank{####2}}%
+ \edef\noexpand\etb@resrvda{\noexpand\etb@resrvda
+ \expandafter\strip@prefix\meaning#1\detokenize{#2}&}%
+ \noexpand\etb@resrvda}%
+ \etb@resrvda\@secondoftwo\@firstoftwo}
+
+% {}{}
+
+\protected\long\def\etb@ifhashcheck#1{%
+ \begingroup
+ \edef\etb@resrvda{\detokenize{#1}}%
+ \expandafter\endgroup
+ \expandafter\etb@ifhashcheck@i\meaning\etb@resrvda&}
+
+\edef\etb@ifhashcheck@i#1&{%
+ \noexpand\expandafter
+ \noexpand\etb@ifhashcheck@ii
+ \noexpand\strip@prefix#1\string#\string#&}
+
+\edef\etb@ifhashcheck@ii{%
+ \def\noexpand\etb@ifhashcheck@ii##1\string#\string###2&}
+\etb@ifhashcheck@ii{\ifblank{#2}}
+
+% {}
+
+\newrobustcmd*{\robustify}[1]{%
+ \ifundef{#1}
+ {\etb@error{\string#1 undefined}\@eha}
+ {\ifdefmacro{#1}
+ {\ifdefltxprotect{#1}
+ {\letcs\etb@resrvda{\expandafter\@gobble\string#1 }%
+ \@tempswatrue}
+ {\let\etb@resrvda#1%
+ \@tempswafalse}%
+ \ifdefparam\etb@resrvda
+ {\etb@ifscanable\etb@resrvda
+ {\etb@robustify\etb@resrvda
+ \let#1\etb@resrvda}
+ {\etb@error{Failed to robustify \string#1}
+ {The command is special and cannot be
+ handled by \string\robustify.}%
+ \@tempswafalse}}
+ {\protected\edef#1{\expandonce\etb@resrvda}}%
+ \if@tempswa
+ \ifcsdef{\string#1 }
+ {}
+ {\csundef{\expandafter\@gobble\string#1 }}%
+ \fi
+ \undef\etb@resrvda}
+ {\etb@error{\string#1 not a macro}\@eha}}}
+
+\def\etb@robustify#1{%
+ \begingroup
+ \edef\etb@resrvdb{%
+ \def\noexpand\etb@resrvdb####1\detokenize{macro}:####2->####3&{%
+ \protected####1\def\string#1\space####2{####3}}%
+ \edef\noexpand\etb@resrvdb{%
+ \noexpand\etb@resrvdb\meaning#1&}}%
+ \etb@resrvdb
+ \etb@patchcmd@scantoks\etb@resrvdb}
+
+% {}{}{}
+% *{}{}
+
+\newrobustcmd{\ifpatchable}{%
+ \etb@dbg@trce\ifpatchable
+ \begingroup
+ \@makeother\#%
+ \@ifstar\etb@ifpatchable@i\etb@ifpatchable}
+
+\long\def\etb@ifpatchable#1#2{%
+ \endgroup
+ \etb@dbg@init#1%
+ \ifundef{#1}
+ {\etb@dbg@fail{def}\@secondoftwo}
+ {\etb@dbg@info{def}%
+ \ifdefmacro{#1}
+ {\etb@dbg@info{mac}%
+ \etb@ifscanable{#1}
+ {\etb@ifhashcheck{#2}
+ {\etb@dbg@info{tok}%
+ \etb@ifpattern#1{#2}
+ {\etb@dbg@info{pat}%
+ \etb@dbg@info{pos}\@firstoftwo}
+ {\etb@dbg@fail{pat}\@secondoftwo}}
+ {\etb@dbg@fail{hsh}\@secondoftwo}}
+ {\etb@dbg@fail{tok}\@secondoftwo}}
+ {\etb@dbg@fail{mac}\@secondoftwo}}}
+
+\long\def\etb@ifpatchable@i#1{%
+ \endgroup
+ \etb@dbg@init#1%
+ \ifundef{#1}
+ {\etb@dbg@fail{def}\@secondoftwo}
+ {\etb@dbg@info{def}%
+ \ifdefmacro{#1}
+ {\etb@dbg@info{mac}%
+ \ifdefparam{#1}
+ {\etb@dbg@info{prm}%
+ \etb@ifscanable{#1}
+ {\etb@dbg@info{tok}%
+ \etb@dbg@info{pos}\@firstoftwo}
+ {\etb@dbg@fail{tok}\@secondoftwo}}
+ {\etb@dbg@info{prl}%
+ \ifdefprotected{#1}
+ {\etb@dbg@info{pro}}
+ {}%
+ \etb@dbg@info{pos}\@firstoftwo}}
+ {\etb@dbg@fail{mac}\@secondoftwo}}}
+
+% []{}{}{}{}{}
+
+\newrobustcmd*{\patchcmd}{%
+ \etb@dbg@trce\patchcmd
+ \begingroup
+ \@makeother\#%
+ \etb@patchcmd}
+
+\newcommand{\etb@patchcmd}[4][########1]{%
+ \etb@ifpatchable#2{#3}
+ {\etb@dbg@succ{ret}%
+ \begingroup
+ \edef\etb@resrvda{%
+ \def\noexpand\etb@resrvda####1\detokenize{macro:}####2->####3&{%
+ #1\def\string\etb@resrvda\space####2{\noexpand\etb@resrvdb####3&}}%
+ \def\noexpand\etb@resrvdb####1\detokenize{#3}####2&{%
+ ####1\detokenize{#4}####2}%
+ \edef\noexpand\etb@resrvda{%
+ \noexpand\etb@resrvda\meaning#2&}}%
+ \etb@resrvda
+ \etb@patchcmd@scantoks\etb@resrvda
+ \let#2\etb@resrvda
+ \undef\etb@resrvda
+ \@firstoftwo}%
+ {\@secondoftwo}}
+
+\def\etb@patchcmd@scantoks#1{%
+ \edef\etb@resrvda{\endgroup
+ \endlinechar\m@ne
+ \unexpanded{\makeatletter\scantokens}{#1}%
+ \endlinechar\the\endlinechar\relax
+ \catcode\number`\@=\the\catcode`\@\relax}%
+ \etb@resrvda}
+
+% {}{}{}{}
+
+\newrobustcmd*{\apptocmd}{%
+ \etb@dbg@trce\apptocmd
+ \begingroup
+ \@makeother\#%
+ \etb@hooktocmd\etb@append}
+
+\newrobustcmd*{\pretocmd}{%
+ \etb@dbg@trce\pretocmd
+ \begingroup
+ \@makeother\#%
+ \etb@hooktocmd\etb@prepend}
+
+\long\def\etb@hooktocmd#1#2#3{%
+ \endgroup
+ \etb@dbg@init#2%
+ \ifundef{#2}
+ {\etb@dbg@fail{def}\@secondoftwo}
+ {\etb@dbg@info{def}%
+ \ifdefmacro{#2}
+ {\etb@dbg@info{mac}%
+ \ifdefparam{#2}
+ {\etb@dbg@info{prm}%
+ \etb@ifscanable{#2}
+ {\etb@ifhashcheck{#3}
+ {\etb@dbg@info{tok}%
+ \etb@dbg@succ{ret}%
+ \etb@hooktocmd@i#1#2{#3}%
+ \@firstoftwo}
+ {\etb@dbg@fail{hsh}\@secondoftwo}}
+ {\etb@dbg@fail{tok}\@secondoftwo}}
+ {\etb@dbg@info{prl}%
+ \ifdefprotected{#2}
+ {\etb@dbg@info{pro}%
+ \etb@dbg@succ{red}%
+ \protected}
+ {\etb@dbg@succ{red}}%
+ \edef#2{#1{\expandonce#2}{\unexpanded{#3}}}%
+ \@firstoftwo}}
+ {\etb@dbg@fail{mac}\@secondoftwo}}}
+
+\long\def\etb@hooktocmd@i#1#2#3{%
+ \begingroup
+ \edef\etb@resrvda{%
+ \def\noexpand\etb@resrvda####1\detokenize{macro}:####2->####3&{%
+ ####1\def\string\etb@resrvda\space####2{#1{####3}{\detokenize{#3}}}}%
+ \edef\noexpand\etb@resrvda{%
+ \noexpand\etb@resrvda\meaning#2&}}%
+ \etb@resrvda
+ \etb@patchcmd@scantoks\etb@resrvda
+ \let#2\etb@resrvda
+ \undef\etb@resrvda}
+
+\long\def\etb@append#1#2{#1#2}
+\long\def\etb@prepend#1#2{#2#1}
+
+\newrobustcmd*{\tracingpatches}{%
+ \etb@info{Enabling tracing}%
+ \input{etoolbox.def}%
+ \global\let\tracingpatches\relax}
+\@onlypreamble\tracingpatches
+
+\let\etb@dbg@trce\@gobble
+\let\etb@dbg@init\@gobble
+\let\etb@dbg@info\@gobble
+\let\etb@dbg@succ\@gobble
+\let\etb@dbg@fail\@gobble
+
+% {}
+
+\newcommand{\rmntonum}[1]{%
+ \ifblank{#1}
+ {}
+ {\expandafter\etb@rti@end\number\numexpr
+ \expandafter\etb@rti@prs\detokenize{#1}&\relax}}
+
+\def\etb@rti@prs#1#2{%
+ \ifx%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {#1#2}
+ {\ifx%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\etb@rti@chk#1+\etb@rti@num#1#2}
+ {\etb@rti@chk#1\etb@rti@chk#2%
+ \ifnum\etb@rti@num#1<\etb@rti@num#2 %
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {+\etb@rti@num#2-\etb@rti@num#1\etb@rti@prs}
+ {+\etb@rti@num#1\etb@rti@prs#2}}}}
+
+\def\etb@rti@chk#1{%
+ \ifcsname etb@rmn@#1\endcsname
+ \else
+ \expandafter\etb@rti@brk
+ \fi}
+
+\def\etb@rti@brk#1&{+\z@&-1}
+\def\etb@rti@end#1\relax{\ifblank{#2}{#1}{#2}}
+\def\etb@rti@num#1{\csname etb@rmn@#1\endcsname}
+
+\chardef\etb@rmn@i=1
+\chardef\etb@rmn@I=1
+\chardef\etb@rmn@v=5
+\chardef\etb@rmn@V=5
+\chardef\etb@rmn@x=10
+\chardef\etb@rmn@X=10
+\chardef\etb@rmn@l=50
+\chardef\etb@rmn@L=50
+\chardef\etb@rmn@c=100
+\chardef\etb@rmn@C=100
+\mathchardef\etb@rmn@d=500
+\mathchardef\etb@rmn@D=500
+\mathchardef\etb@rmn@m=1000
+\mathchardef\etb@rmn@M=1000
+
+% {}{}{}
+
+\newcommand{\ifrmnum}[1]{%
+ \ifblank{#1}
+ {\@secondoftwo}
+ {\expandafter\etb@ifr@prs\detokenize{#1}\relax}}
+
+\def\etb@ifr@prs#1{%
+ \ifx\relax#1%
+ \expandafter\@firstoftwo
+ \else
+ \ifcsname etb@rmn@#1\endcsname
+ \expandafter\expandafter
+ \expandafter\etb@ifr@prs
+ \else
+ \expandafter\expandafter
+ \expandafter\etb@ifr@brk
+ \fi
+ \fi}
+
+\def\etb@ifr@brk#1\relax{\@secondoftwo}
+
+% <*>{}{}
+
+\newrobustcmd*{\DeclareListParser}{%
+ \@ifstar
+ {\etb@defparser\etb@defparser@arg}
+ {\etb@defparser\etb@defparser@do}}
+
+\def\etb@defparser#1#2#3{%
+ \@ifdefinable#2{#1{#2}{#3}}}
+
+\def\etb@defparser@do#1#2{%
+ \begingroup
+ \edef\@tempa{\endgroup
+ \long\def\noexpand#1####1{%
+ \expandafter\noexpand
+ \csname etb@lst@\expandafter\@gobble\string#1\endcsname
+ \space####1\noexpand#2&}%
+ \long\csdef{etb@lst@\expandafter\@gobble\string#1}####1\noexpand#2####2&{%
+ \noexpand\etb@listitem\noexpand\do{####1}%
+ \noexpand\ifblank{####2}
+ {\noexpand\listbreak}
+ {\expandafter\noexpand
+ \csname etb@lst@\expandafter\@gobble\string#1\endcsname
+ \space####2}&}}%
+ \@tempa}
+
+\def\etb@defparser@arg#1#2{%
+ \begingroup
+ \edef\@tempa{\endgroup
+ \long\def\noexpand#1####1####2{%
+ \expandafter\noexpand
+ \csname etb@lst@\expandafter\@gobble\string#1\endcsname
+ {####1}\space####2\noexpand#2&}%
+ \long\csdef{etb@lst@\expandafter\@gobble\string#1}####1####2\noexpand#2####3&{%
+ \noexpand\etb@listitem{####1}{####2}%
+ \noexpand\ifblank{####3}
+ {\noexpand\listbreak}
+ {\expandafter\noexpand
+ \csname etb@lst@\expandafter\@gobble\string#1\endcsname
+ {####1}\space####3}&}}%
+ \@tempa}
+
+\long\def\etb@listitem#1#2{%
+ \ifblank{#2}
+ {}
+ {\expandafter\etb@listitem@i
+ \expandafter{\@firstofone#2}{#1}}}
+\long\def\etb@listitem@i#1#2{#2{#1}}
+
+\newcommand*{\listbreak}{}
+\long\def\listbreak#1&{}
+
+% {,,...} => \do{}\do{}...
+
+\DeclareListParser{\docsvlist}{,}
+
+% {}{,,...} => {}{}...
+
+\DeclareListParser*{\forcsvlist}{,}
+
+% {}{}
+
+\newrobustcmd{\listadd}[2]{%
+ \ifblank{#2}{}{\appto#1{#2|}}}
+\newrobustcmd{\listeadd}[2]{%
+ \begingroup
+ \edef\etb@tempa{\endgroup\noexpand\ifblank{#2}}%
+ \etb@tempa{}{\eappto#1{#2|}}}
+\newrobustcmd{\listgadd}[2]{%
+ \ifblank{#2}{}{\gappto#1{#2|}}}
+\newrobustcmd{\listxadd}[2]{%
+ \begingroup
+ \edef\etb@tempa{\endgroup\noexpand\ifblank{#2}}%
+ \etb@tempa{}{\xappto#1{#2|}}}
+
+% {}{