%%
%% This is file `svg-extract.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% svg.dtx  (with options: `package,option,extract')
%% svg.dtx  (with options: `package,body,extract')
%% 
%% svg-extract -- Extract independent graphic files from SVG pictures
%% 
%% Copyright (C) Philip Ilten <philten@cern.ch>, 2012-2016
%% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2017-
%% 
%% This file was generated from file svg.dtx.
%% ----------------------------------------------------------------------------
%% 
%% This work may be distributed and/or modified under the conditions
%% of the LaTeX Project Public License, version 1.3c of the license.
%% The latest version of this license is in
%%     http://www.latex-project.org/lppl.txt
%% and version 1.3c or later is part of all distributions of
%% LaTeX 2005/12/01 or later and of this work.
%% 
%% This work has the LPPL maintenance status "author-maintained".
%% 
%% The current maintainer and author of this work is Falk Hanisch.
%% 
%% This work consists of the main source file README.md, LICENSE.md, svg.dtx and
%% the derived documentation svg.pdf as well as the example files svg-example.svg,
%% svg-preamble.tex and root.C (with derived file root.svg).
%% 
%% 
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{svg-extract}[%
  2017/03/27 v2.00\space%
  (extract independent graphics from SVG pictures)%
]
\RequirePackage{svg}[2017/03/27]
\DefineFamily{SVG}
\DefineFamilyMember{SVG}
\newif\if@svgx@run
\DefineFamilyKey{SVG}{extract}[true]{%
  \lowercase{\def\svg@tempa{#1}}%
  \FamilySetNumerical{SVG}{extract}{svg@tempa}{%
    {false}{0},{off}{0},{no}{0},%
    {true}{1},{on}{1},{yes}{1},{onlynewer}{1},{newer}{1},%
    {overwrite}{1},{force}{1},{forced}{1},%
    {pdf}{2},{eps}{3},{ps}{4}%
  }{\svg@tempa}%
  \ifx\FamilyKeyState\FamilyKeyStateProcessed%
    \ifcase\svg@tempa\relax% false
      \@svgx@runfalse%
    \or% true
      \@svgx@runtrue%
    \or% pdf
      \FamilyOptions{SVG}{extractformat=pdf}%
    \or% eps
      \FamilyOptions{SVG}{extractformat=eps}%
    \or% ps
      \FamilyOptions{SVG}{extractformat=ps}%
    \fi%
  \fi%
}
\DeclareOption{on}{\FamilyOptions{SVG}{extract=true}}
\DeclareOption{off}{\FamilyOptions{SVG}{extract=false}}
\newcommand*\svgx@format{pdf}
\ifxetex\else\ifpdf\else
  \renewcommand*\svgx@format{eps}
\fi\fi
\DefineFamilyKey{SVG}{extractformat}{%
  \lowercase{\edef\svgx@format{#1}}%
  \FamilyKeyStateProcessed%
}
\DefineFamilyKey{SVG}{pdf}[true]{%
  \FamilySetBool{SVG}{pdf}{@svg@tempswa}{#1}%
  \ifx\FamilyKeyState\FamilyKeyStateProcessed%
    \if@svg@tempswa%
      \svgx@ifinlist{pdf}{\svgx@format}{}{%
        \edef\svgx@format{\svgx@format,pdf}%
      }%
      \svg@deprecated@key{pdf}{extractformat={\svgx@format}}%
    \else%
      \FamilyKeyStateUnknownValue
    \fi%
  \fi%
}
\DefineFamilyKey{SVG}{eps}[true]{%
  \FamilySetBool{SVG}{eps}{@svg@tempswa}{#1}%
  \ifx\FamilyKeyState\FamilyKeyStateProcessed%
    \if@svg@tempswa%
      \svgx@ifinlist{eps}{\svgx@format}{}{%
        \edef\svgx@format{\svgx@format,eps}%
      }%
      \svg@deprecated@key{eps}{extractformat={\svgx@format}}%
    \else%
      \FamilyKeyStateUnknownValue
    \fi%
  \fi%
}
\newcommand*\svgx@preamble{\jobname.\svgx@latex@ext}%
\DefineFamilyKey{SVG}{extractpreamble}{%
  \renewcommand*\svgx@preamble{#1}%
  \FamilyKeyStateProcessed%
}
\DefineFamilyKey{SVG}{preamble}{%
  \svg@deprecated@key[svg-extract]{preamble=#1}{extractpreamble=#1}%
}
\newcommand*\svgx@endpreamble{}
\expandafter\def\expandafter\svgx@endpreamble\expandafter{%
  \csname begin\endcsname{document}%
}
\DefineFamilyKey{SVG}{extractpreambleend}{%
  \renewcommand*\svgx@endpreamble{#1}%
  \FamilyKeyStateProcessed%
}
\DefineFamilyKey{SVG}{end}{%
  \svg@deprecated@key[svg-extract]{end=#1}{extractpreambleend=#1}%
}
\newcounter{svgx@runs}
\DefineFamilyKey{SVG}{extractruns}{%
  \FamilySetCounter{SVG}{extractruns}{svgx@runs}{#1}%
  \ifx\FamilyKeyState\FamilyKeyStateProcessed%
    \ifnum\value{svgx@runs}<\@ne\relax%
      \PackageWarning{svg-extract}{%
        The count for runs has to be at least one%
      }%
      \FamilySetCounter{SVG}{extractruns}{svgx@runs}{\@ne}%
    \fi%
  \fi%
}
\ifxetex
  \newcommand*\svgx@latex@exe{xelatex}
\else\ifluatex
  \ifpdf
    \newcommand*\svgx@latex@exe{lualatex}
  \else
    \newcommand*\svgx@latex@exe{lualatex --output-format=dvi}
  \fi
\else\ifpdf
  \newcommand*\svgx@latex@exe{pdflatex}
\else
  \newcommand*\svgx@latex@exe{latex}
\fi\fi\fi
\DefineFamilyKey{SVG}{latexexe}{%
  \renewcommand*\svgx@latex@exe{#1}%
  \FamilyKeyStateProcessed%
}
\DefineFamilyKey{SVG}{pdflatex}{%
  \svg@deprecated@key[svg-extract]{pdflatex=#1}{latexexe=#1}%
}
\newcommand*\svgx@latex@ext{tex}
\DefineFamilyKey{SVG}{latexext}{%
  \renewcommand*\svgx@latex@ext{#1}%
  \FamilyKeyStateProcessed%
}
\newcommand*\svgx@latex@opt{}
\DefineFamilyKey{SVG}{latexopt}{%
  \renewcommand*\svgx@latex@opt{#1}%
  \FamilyKeyStateProcessed%
}
\newcommand*\svgx@dvips@exe{dvips}
\newcommand*\svgx@dvips@opt{}
\DefineFamilyKey{SVG}{dvipsopt}{%
  \renewcommand*\svgx@dvips@opt{#1}%
  \FamilyKeyStateProcessed%
}
\newcommand*\svgx@pstoeps@exe{ps2eps}
\newcommand*\svgx@pstoeps@opt{-B -C}
\DefineFamilyKey{SVG}{pstoepsopt}{%
  \renewcommand*\svgx@pstoeps@opt{#1}%
  \FamilyKeyStateProcessed%
}
\newcommand*\svgx@pstopdf@exe{ps2pdf}
\newcommand*\svgx@pstopdf@opt{}
\DefineFamilyKey{SVG}{pstopdfopt}{%
  \renewcommand*\svgx@pstopdf@opt{#1}%
  \FamilyKeyStateProcessed%
}
\newcommand*\svgx@pdftoeps@exe{pdftops -eps}
\newcommand*\svgx@pdftoeps@opt{}
\DefineFamilyKey{SVG}{pdftoepsopt}{%
  \renewcommand*\svgx@pdftoeps@opt{#1}%
  \FamilyKeyStateProcessed%
}
\newcommand*\svgx@pdftops@exe{pdftops}
\newcommand*\svgx@pdftops@opt{}
\DefineFamilyKey{SVG}{pdftopsopt}{%
  \renewcommand*\svgx@pdftops@opt{#1}%
  \FamilyKeyStateProcessed%
}
\DefineFamilyKey{SVG}{pdftops}{%
  \PackageWarning{#1}{%
    The option key `pdftops' is deprecated.\MessageBreak%
    You should use either `pdftoepsopt' or\MessageBreak%
    `pdftopsopt' instead. See the manual for\MessageBreak%
    more. Nothing was done%
  }%
  \FamilyKeyStateProcessed
}
\newif\if@svgx@cnv@run
\newcommand*\svgx@cnv@cmd{}
\DefineFamilyKey{SVG}{convert}[true]{%
  \FamilySetNumerical{SVG}{convert}{svg@tempa}{%
    {false}{0},{off}{0},{no}{0},%
    {true}{1},{on}{1},{yes}{1},{onlynewer}{1},{newer}{1},%
    {overwrite}{1},{force}{1},{forced}{1},%
    {magick}{2},{imagemagick}{2},{convert}{2},%
    {gs}{3},{ghostscript}{3},%
    {gs64}{4},{ghostscript64}{4},%
    {gs32}{5},{ghostscript32}{5}%
  }{#1}%
  \ifx\FamilyKeyState\FamilyKeyStateProcessed%
    \ifcase\svg@tempa\relax% false
      \@svgx@cnv@runfalse%
    \or% true
      \@svgx@cnv@runtrue%
    \or% magick
      \@svgx@cnv@runtrue%
      \renewcommand*\svgx@cnv@cmd{\svgx@magick@cmd}%
    \or% gs
      \@svgx@cnv@runtrue%
      \renewcommand*\svgx@cnv@cmd{\svgx@gs@cmd}%
    \or% gs64
      \@svgx@cnv@runtrue%
      \renewcommand*\svgx@cnv@cmd{\svgx@gs@cmd}%
      \svgx@onlywindows{%
        \renewcommand*\svgx@gs@exe{gswin64c}%
      }%
    \or% gs32
      \@svgx@cnv@runtrue%
      \renewcommand*\svgx@cnv@cmd{\svgx@gs@cmd}%
      \svgx@onlywindows{%
        \renewcommand*\svgx@gs@exe{gswin32c}%
      }%
    \fi%
  \else%
    \def\svg@tempa##1-##2\@nil{%
      \IfArgIsEmpty{##2}{\def\svg@tempb{}}{%
        \def\svg@tempa##1####1\@nil{\def\svg@tempb{####1}}%
        \svg@tempa#1\@nil%
      }%
      \def\svg@tempa{##1}%
    }%
    \svg@tempa#1-\@nil%
    \PackageWarning{svg-extract}{%
      Setting the executable%
      \ifx\svg@tempb\@empty\else%
        \space and associated options%
      \fi%
      \MessageBreak%
      for ImageMagick should be done with options\MessageBreak%
      `magickexe=\svg@tempa'%
      \ifx\svg@tempb\@empty\else%
        \MessageBreak and `magicksetting' and/or `magickoperator'%
      \fi.\MessageBreak%
      Nevertheless, this was done by now%
      \ifx\svg@tempb\@empty\else%
        , whereby \MessageBreak `magicksetting=\svg@tempb' was used%
      \fi%
    }%
    \FamilyOptions{SVG}{convert=magick}%
    \edef\svg@tempa{%
      \noexpand\FamilyOptions{SVG}{magickexe=\svg@tempa}%
      \ifx\svg@tempb\@empty\else%
        \noexpand\FamilyOptions{SVG}{magicksetting=\svg@tempb}%
      \fi%
    }%
    \svg@tempa%
  \fi%
}
\newcommand*\svgx@cnv@format{png}
\DefineFamilyKey{SVG}{convertformat}{%
  \lowercase{\edef\svgx@cnv@format{#1}}%
  \ifx\svgx@cnv@format\@empty\else%
    \@svgx@cnv@runtrue%
  \fi%
  \FamilyKeyStateProcessed%
}
\DefineFamilyKey{SVG}{png}[true]{%
  \FamilySetBool{SVG}{png}{@svg@tempswa}{#1}%
  \ifx\FamilyKeyState\FamilyKeyStateProcessed%
    \if@svg@tempswa%
      \svgx@ifinlist{png}{\svgx@cnv@format}{}{%
        \edef\svgx@cnv@format{\svgx@cnv@format,png}%
      }%
      \svg@deprecated@key{png}{convertformat={\svgx@cnv@format}}%
    \else%
      \FamilyKeyStateUnknownValue
    \fi%
  \fi%
}
\newcommand*\svgx@cnv@dpi{}
\let\svgx@cnv@dpi\relax
\DefineFamilyKey{SVG}{convertdpi}{%
  \FamilyKeyStateUnknownValue%
  \svgx@ifkeyandval{#1}{%
    \svgx@cnv@get@dpi{##2}%
    \ifx\svg@tempa\relax\else%
      \expandafter\edef\csname svgx@cnv@dpi@##1\endcsname{\svg@tempa}%
      \FamilyKeyStateProcessed%
    \fi%
  }{%
    \svgx@cnv@get@dpi{##1}%
    \ifx\svg@tempa\relax\else%
      \edef\svgx@cnv@dpi{\svg@tempa}%
      \FamilyKeyStateProcessed%
    \fi%
  }%
}
\DefineFamilyKey{SVG}{convertdensity}{\FamilyOptions{SVG}{convertdpi=#1}}
\newcommand*\svgx@magick@exe{}
\DefineFamilyKey{SVG}{magickexe}{%
  \renewcommand*\svgx@magick@exe{#1}%
  \FamilyKeyStateProcessed%
}
\newcommand*\svgx@magick@set{}
\DefineFamilyKey{SVG}{magicksetting}{%
  \svgx@setformatkey{#1}{svgx@magick@set}%
  \FamilyKeyStateProcessed%
}
\newcommand*\svgx@magick@opr{}
\DefineFamilyKey{SVG}{magickoperator}{%
  \svgx@setformatkey{#1}{svgx@magick@opr}%
  \FamilyKeyStateProcessed%
}
\newcommand*\svgx@gs@exe{}
\DefineFamilyKey{SVG}{gsexe}{%
  \renewcommand*\svgx@gs@exe{#1}%
  \FamilyKeyStateProcessed%
}
\newcommand*\svgx@gs@opt{}
\DefineFamilyKey{SVG}{gsopt}{%
  \svgx@setformatkey{#1}{svgx@gs@opt}%
  \FamilyKeyStateProcessed%
}
\newcommand*\svgx@gs@device{}
\DefineFamilyKey{SVG}{gsdevice}{%
  \svgx@setformatkey{#1}{svgx@gs@device}%
  \FamilyKeyStateProcessed%
}
\newcommand*\svgx@out@path{}
\DefineFamilyKey{SVG}{extractpath}{%
  \FamilySetNumerical{SVG}{extractpath}{svg@tempa}{%
    {svgpath}{0},{svgdir}{0},%
    {svgsubpath}{1},{svgsubdir}{1},%
    {basepath}{2},{basedir}{2},{jobpath}{2},{jobdir}{2},%
    {basesubpath}{3},{basesubdir}{3},{jobsubpath}{3},{jobsubdir}{3}%
  }{#1}%
  \ifx\FamilyKeyState\FamilyKeyStateProcessed%
    \ifcase\svg@tempa\relax% svgpath
      \renewcommand*\svgx@out@path{\svg@file@path}%
    \or% svgsubpath
      \renewcommand*\svgx@out@path{\svg@file@path svg-extract/}%
    \or% basepath
      \renewcommand*\svgx@out@path{./}%
    \or% basesubpath
      \renewcommand*\svgx@out@path{./svg-extract/}%
    \fi%
  \else%
    \renewcommand*\svgx@out@path{#1}%
    \svg@normalize@path{\svgx@out@path}%
    \FamilyKeyStateProcessed%
  \fi%
}
\DefineFamilyKey{SVG}{path}{%
  \svg@deprecated@key[svg-extract]{path=#1}{extractpath=#1}%
}
\newcounter{svgx@out@count}
\newcommand*\svgx@out@name{}
\newif\if@svgx@out@sec
\DefineFamilyKey{SVG}{extractname}{%
  \FamilySetNumerical{SVG}{extractname}{svg@tempa}{%
    {filename}{0},{name}{0},%
    {filenamenumbered}{1},{namenumbered}{1},%
    {numberedfilename}{1},{numberedname}{1},%
    {numbered}{2},{section}{2},{numberedsection}{2},{sectionnumbered}{2}%
  }{#1}%
  \@svgx@out@secfalse%
  \ifx\FamilyKeyState\FamilyKeyStateProcessed%
    \ifcase\svg@tempa\relax% filename
      \renewcommand*\svgx@out@name{\svg@out@name-extract}%
    \or% filenamenumbered
      \renewcommand*\svgx@out@name{\the\value{svgx@out@count}-\svg@out@name}%
    \or% numbered
      \renewcommand*\svgx@out@name{\the\value{svgx@out@count}-\svgx@out@sec}%
      \@svgx@out@sectrue%
    \fi%
  \else%
    \def\svg@tempa##1.##2\@nil{%
      \IfArgIsEmpty{##1}{}{\renewcommand*\svgx@out@name{##1}}%
    }%
    \svg@tempa#1.\@nil%
    \FamilyKeyStateProcessed%
  \fi%
}
\DefineFamilyKey{SVG}{name}{%
  \svg@deprecated@key[svg-extract]{name=#1}{extractname=#1}%
}
\newcommand*\svgx@param@width{\svg@param@width}
\DefineFamilyKey{SVG}{extractwidth}{%
  \FamilyKeyStateUnknownValue%
  \svg@ifvalueisrelax{#1}{%
    \renewcommand*\svgx@param@width{\z@}%
    \FamilyKeyStateProcessed%
  }{%
    \ifstr{#1}{inherit}{%
      \renewcommand*\svgx@param@width{\svg@param@width}%
      \FamilyKeyStateProcessed%
    }{%
      \FamilySetLengthMacro{SVG}{extractwidth}{\svgx@param@width}{#1}%
      \ifdim\svgx@param@width<\z@\relax%
        \FamilyKeyStateUnknownValue%
      \fi%
    }%
  }%
}
\newcommand*\svgx@param@height{\svg@param@height}
\DefineFamilyKey{SVG}{extractheight}{%
  \FamilyKeyStateUnknownValue%
  \svg@ifvalueisrelax{#1}{%
    \renewcommand*\svgx@param@height{\z@}%
    \FamilyKeyStateProcessed%
  }{%
    \ifstr{#1}{inherit}{%
      \renewcommand*\svgx@param@height{\svg@param@height}%
      \FamilyKeyStateProcessed%
    }{%
      \FamilySetLengthMacro{SVG}{extractheight}{\svgx@param@height}{#1}%
      \ifdim\svgx@param@height<\z@\relax%
        \FamilyKeyStateUnknownValue%
      \fi%
    }%
  }%
}
\newcommand*\svgx@param@scale{\svg@param@scale}
\DefineFamilyKey{SVG}{extractscale}{%
  \FamilyKeyStateUnknownValue%
  \svg@ifvalueisrelax{#1}{%
    \renewcommand*\svgx@param@scale{1}%
    \FamilyKeyStateProcessed%
  }{%
    \ifstr{#1}{inherit}{%
      \renewcommand*\svgx@param@scale{\svg@param@scale}%
      \FamilyKeyStateProcessed%
    }{%
      \ifisdimension{#1\p@}{%
        \ifdim\dimexpr#1\p@\relax>\z@\relax%
          \renewcommand*\svgx@param@scale{#1}%
          \FamilyKeyStateProcessed%
        \fi%
      }{}%
    }%
  }%
}
\newcommand*\svgx@param@pretex{\svg@param@pretex}
\DefineFamilyKey{SVG}{extractpretex}{%
  \svg@ifvalueisrelax{#1}{%
    \let\svgx@param@pretex\relax%
  }{%
    \ifstr{#1}{inherit}{%
      \def\svgx@param@pretex{\svg@param@pretex}%
    }{%
      \def\svgx@param@pretex{#1}%
    }%
  }%
  \FamilyKeyStateProcessed%
}
\newcommand*\svgx@param@apptex{\svg@param@apptex}
\DefineFamilyKey{SVG}{extractapptex}{%
  \svg@ifvalueisrelax{#1}{%
    \let\svgx@param@apptex\relax%
  }{%
    \ifstr{#1}{inherit}{%
      \def\svgx@param@apptex{\svg@param@apptex}%
    }{%
      \def\svgx@param@apptex{#1}%
    }%
  }%
  \FamilyKeyStateProcessed%
}
\DefineFamilyKey{SVG}{extractpostex}{%
  \svg@deprecated@key[svg-extract]{extractpostex=#1}{extractapptex=#1}%
}
\newcommand*\svgx@clean{}
\DefineFamilyKey{SVG}{clean}[true]{%
  \FamilySetBool{SVG}{clean}{@svg@tempswa}{#1}%
  \ifx\FamilyKeyState\FamilyKeyStateProcessed%
    \if@svg@tempswa%
      \renewcommand*\svgx@clean{log,aux,dvi,out,ps,eps,pdf,\svgx@latex@ext}%
    \else%
      \renewcommand*\svgx@clean{}%
    \fi%
  \else%
    \renewcommand*\svgx@clean{#1}%
    \FamilyKeyStateProcessed%
  \fi%
}
\DefineFamilyKey{SVG}{clear}{\FamilyOptions{SVG}{clean=#1}}
\DefineFamilyKey{SVG}{exclude}[true]{%
  \FamilySetBool{SVG}{exclude}{@svg@tempswa}{#1}%
  \ifx\FamilyKeyState\FamilyKeyStateProcessed%
    \if@svg@tempswa%
      \renewcommand*\svg@input[2][]{%
        \if@svgx@run\else%
          \PackageWarning{svg-extract}{%
            The image `##2' was\MessageBreak%
            neither extracted nor included%
          }%
        \fi%
      }%
    \else%
      \renewcommand*\svg@input{\svg@@input}%
    \fi%
  \fi%
}
\newcommand*\svgx@ifinlist[2]{%
  \begingroup%
    \def\svg@tempa##1,#1,##2\@nil{%
      \IfArgIsEmpty{##2}{%
        \aftergroup\@secondoftwo%
      }{%
        \aftergroup\@firstoftwo%
      }%
    }%
    \expandafter\svg@tempa\expandafter,#2,#1,\@nil%
  \endgroup%
}
\newcommand*\svgx@onlywindows[1]{}
\AfterPackage*{ifplatform}{\renewcommand*\svgx@onlywindows[1]{\ifwindows#1\fi}}
\newcommand*\svgx@ifkeyandval[3]{%
  \def\svg@tempa##1=##2=##3\@nil{\ifstr{##3}{=}{#2}{#3}}%
  \svg@tempa#1==\@nil%
}
\newcommand*\svgx@cnv@get@dpi[1]{%
  \begingroup%
    \def\svg@tempa##1dpi##2x##3dpi##4\@nil{%
      \edef\svg@tempa{##1}%
      \@svg@tempswafalse%
      \ifnumber{##1}{%
        \IfArgIsEmpty{##3}{\@svg@tempswatrue}{%
          \ifnumber{##3}{\edef\svg@tempa{##1x##3}}{}%
        }%
      }{}%
      \if@svg@tempswa\else%
        \expandafter\svg@tempb\svg@tempa xx\@nil%
      \fi%
    }%
    \def\svg@tempb##1x##2x##3\@nil{%
      \ifstr{##3}{x}{%
        \@svg@tempswatrue%
        \IfArgIsEmpty{##1}{\@svg@tempswafalse}{%
          \ifnumber{##1}{}{\@svg@tempswafalse}%
        }%
        \IfArgIsEmpty{##2}{\@svg@tempswafalse}{%
          \ifnumber{##2}{}{\@svg@tempswafalse}%
        }%
        \if@svg@tempswa%
          \edef\svg@tempa{##1x##2}%
        \fi%
      }{}%
    }%
    \IfArgIsEmpty{#1}{%
      \let\svg@tempa\@empty%
    }{%
      \lowercase{\svg@tempa#1dpi#1xdpi\@nil}%
      \if@svg@tempswa\else%
        \let\svg@tempa\relax%
      \fi%
    }%
    \edef\svg@tempb{%
      \noexpand\endgroup%
      \ifx\svg@tempa\relax%
        \noexpand\let\noexpand\svg@tempa\noexpand\relax%
      \else%
        \noexpand\def\noexpand\svg@tempa{\svg@tempa}%
      \fi%
    }%
  \svg@tempb%
}
\newcommand*\svgx@setformatkey[2]{%
  \svgx@ifkeyandval{#1}{%
    \svg@ifvalueisrelax{##2}{%
      \expandafter\let\csname #2@##1\endcsname\relax%
    }{%
      \@namedef{#2@##1}{##2}%
    }%
  }{%
    \svg@ifvalueisrelax{##1}{%
      \expandafter\let\csname #2\endcsname\relax%
    }{%
      \@namedef{#2}{##1}%
    }%
  }%
}
\newcommand*\svgx@useformatkey[3]{%
  \scr@ifundefinedorrelax{#1@#2}{%
    \scr@ifundefinedorrelax{#1}{}{%
      \expandafter\ifx\csname #1\endcsname\@empty\else%
        #3\@nameuse{#1}\space%
      \fi%
    }%
    \scr@ifundefinedorrelax{#1@#2+}{}{%
      \expandafter\ifx\csname #1@#2+\endcsname\@empty\else%
        #3\@nameuse{#1@#2+}\space%
      \fi%
    }%
  }{%
    \expandafter\ifx\csname #1@#2\endcsname\@empty\else%
      #3\@nameuse{#1@#2}\space%
    \fi%
  }%
}
\newbox\svgx@box
\newcommand*\svgxsetbox[2][]{%
  \sbox\svgx@box{\svg@@input[{#1},draft=false]{#2}}%
  \csname @tud@x@standalone@croptrue\endcsname%
  \svgxsetpapersize%
}
\newcommand*\svgxsetpapersize{%
  \setlength\paperwidth{\the\wd\svgx@box}%
  \ifx\stockwidth\@undefined\else%
    \setlength\stockwidth{\paperwidth}%
  \fi%
  \ifx\mediawidth\@undefined\else%
    \setlength\mediawidth{\paperwidth}%
  \fi%
  \setlength\textwidth{\paperwidth}%
  \setlength\paperheight{\the\dimexpr\ht\svgx@box+\dp\svgx@box\relax}%
  \ifx\stockheight\@undefined\else%
    \setlength\stockheight{\paperheight}%
  \fi%
  \ifx\mediaheight\@undefined\else%
    \setlength\mediaheight{\paperheight}%
  \fi%
  \setlength\textheight{\paperheight}%
  \hoffset=-1in%
  \oddsidemargin=\z@%
  \evensidemargin=\z@%
  \voffset=-1in%
  \topmargin=\z@%
  \headheight=\z@%
  \headsep=\z@%
  \topskip=\z@%
  \footskip=\z@%
  \marginparsep=\z@%
  \marginparwidth=\z@%
  \marginparpush=\z@%
}
\@onlypreamble\svgxsetpapersize
\newif\if@svgx@beamer
\@ifclassloaded{beamer}{\@svgx@beamertrue}{}%
\newcommand*\svgxoutputbox{%
  \begingroup%
    \setlength\parindent{\z@}%
    \setlength\parskip{\z@}%
    \setlength\parfillskip{\z@}%
    \if@svgx@beamer%
      \setbeamertemplate{navigation symbols}{}%
      \begin{frame}[plain]%
      \usebox\svgx@box%
      \end{frame}%
    \else%
      \usebox\svgx@box%
    \fi%
    \endgraf%
  \endgroup%
}
\FamilyExecuteOptions{SVG}{%
  extract=true,extractpath=basesubdir,extractruns=2,extractname=namenumbered,%
  convert=magick,convert=false,%
  gsdevice={png=png16m},gsdevice={jpeg=jpeg},gsdevice={jpg=jpeg},%
  gsdevice={tif=tiff48nc},gsdevice={tiff=tiff48nc},%
  gsdevice={eps=eps2write},gsdevice={ps=ps2write}%
}
\FamilyProcessOptions{SVG}
\let\svghidepreamblestart\relax
\let\svghidepreambleend\relax
\ifnum\pdf@shellescape=\@ne\relax\else%
  \renewcommand*\svg@extract[1]{%
    \if@svgx@run%
      \begingroup%
        \edef\svg@tempa{#1}%
        \svg@quotes@remove{\svg@tempa}%
        \PackageWarning{svg-extract}{%
          You didn't enable `shell escape' (or `write18')\MessageBreak%
          so it wasn't possible to run the extraction for\MessageBreak%
          file `\svg@tempa'%
        }%
      \endgroup%
    \fi%
  }%
  \expandafter\endinput%
\fi
\newread\svgx@stream@in
\newcommand*\svgx@read@line{}
\newwrite\svgx@stream@out
\newif\if@svgx@preamble@write
\renewcommand*\svg@extract[1]{%
  \if@svgx@run%
    \if@svgx@out@sec%
      \svgx@get@out@sec%
    \fi%
    \stepcounter{svgx@out@count}%
    \begingroup%
      \def\svg@tempa##1.##2\@nil{%
        \IfArgIsEmpty{##2}{\edef\svgx@preamble{##1.\svgx@latex@ext}}{}%
      }%
      \expandafter\svg@tempa\svgx@preamble.\@nil%
      \IfFileExists{\svg@file@path\svgx@preamble}{%
        \@svg@file@foundtrue%
      }{%
        \svg@get@path[]{\svgx@preamble}{\svg@out@path}%
        \def\svg@tempa####1.####2\@nil{%
          \edef\svgx@preamble{\svg@file@name.####2}%
        }%
        \expandafter\svg@tempa\svgx@preamble\@nil%
      }%
      \edef\svg@tempa{%
        \endgroup%
        \if@svg@file@found%
          \ifx\svg@file@path\@empty%
            \def\noexpand\svgx@preamble{./\svgx@preamble}%
          \else%
            \def\noexpand\svgx@preamble{\svg@file@path\svgx@preamble}%
          \fi%
        \fi%
      }%
    \svg@tempa%
    \begingroup%
      \endlinechar=\m@ne%
      \IfFileExists{\svgx@preamble}{%
        \PackageInfo{svg-extract}{%
          The preamble file `\svgx@preamble'\MessageBreak%
          is used for the generation of the auxiliary file\MessageBreak%
          `\svgx@out@name.\svgx@latex@ext'%
        }%
        \catcode`\#=12\relax%
        \immediate\openout\svgx@stream@out=\svgx@out@name.\svgx@latex@ext%
        \immediate\openin\svgx@stream@in=\svgx@preamble%
        \@svg@tempswatrue%
        \@svgx@preamble@writetrue%
        \def\svgx@read@line{}%
        \@whilesw\if@svg@tempswa\fi{%
          \immediate\read\svgx@stream@in to\svgx@read@line%
          \ifx\svgx@read@line\@empty%
            \ifeof\svgx@stream@in\@svg@tempswafalse\fi%
          \else%
            \svgx@read@preamble@till{\svghidepreamblestart}{}%
            \svgx@read@preamble@from{\svghidepreambleend}{}%
            \svgx@read@preamble@till{\svgx@endpreamble}{\@svg@tempswafalse}%
            \if@svgx@preamble@write%
              \if@svgx@classfound\else%
                \expandafter\svgx@documentclass%
                  \svgx@read@line\documentclass\documentclass\@nil%
              \fi%
              \ifx\svgx@read@line\@empty\else%
                \immediate\write\svgx@stream@out{%
                  \unexpanded\expandafter{\svgx@read@line}%
                }%
              \fi%
            \fi%
          \fi%
        }%
        \immediate\closein\svgx@stream@in%
        \immediate\closeout\svgx@stream@out%
        \catcode`\#=6\relax%
        \immediate\openin\svgx@stream@in=\svgx@out@name.\svgx@latex@ext%
        \def\svg@tempa{}%
        \loop\unless\ifeof\svgx@stream@in%
          \readline\svgx@stream@in to\svgx@read@line%
          \ifx\svgx@read@line\@empty\else%
            \edef\svg@tempa{%
              \unexpanded\expandafter{\svg@tempa}%
              \unexpanded\expandafter{\svgx@read@line}^^J%
            }%
          \fi%
        \repeat%
        \immediate\closein\svgx@stream@in%
      }{%
        \svg@quotes@remove{\svgx@preamble}%
        \ifx\svgx@preamble\@empty\else%
          \PackageWarning{svg-extract}{%
            The preamble file `\svgx@preamble'\MessageBreak%
            does not exist%
          }%
        \fi%
        \def\svg@tempa{}%
      }%
      \immediate\openout\svgx@stream@out=\svgx@out@name.\svgx@latex@ext%
      \immediate\write\svgx@stream@out{%
        \@percentchar\@percentchar\space This file was generated by package
        `svg-extract'^^J%
        \@percentchar\@percentchar\space from source `\jobname'^^J%
        \@percentchar\@percentchar\space It's intended to be compiled with
        `\svgx@latex@exe\ifx\svgx@latex@opt\@empty\else\space\svgx@latex@opt\fi'
      }%
      \immediate\write\svgx@stream@out{%
        \string\AtBeginDocument{\@percentchar^^J%
          \space\space\string\svgxsetpapersize\@percentchar^^J%
          \ifxetex\else\ifpdf\else%
            \space\space\string\AtBeginDvi{\string\special{%
                papersize=\string\the\string\paperwidth,%
                  \string\the\string\paperheight%
            }}\@percentchar^^J%
          \fi\fi%
        }^^J%
        \string\PassOptionsToPackage{hidelinks}{hyperref}%
      }%
      \if@svgx@classfound\else%
        \immediate\write\svgx@stream@out{\string\documentclass{article}}%
      \fi%
      \ifx\svg@tempa\@empty\else%
        \immediate\write\svgx@stream@out{\unexpanded\expandafter{\svg@tempa}}%
      \fi%
      \immediate\write\svgx@stream@out{\string\usepackage{svg-extract}}%
      \def\svg@tempa##1{%
        \immediate\write\svgx@stream@out{\string\svgsetup{##1}}%
      }%
      \if@svg@ink@latex\else%
        \svg@tempa{inkscapelatex=false}%
      \fi%
      \ifdim\svgx@param@width>\z@\relax%
        \svg@tempa{width=\svgx@param@width}%
      \fi%
      \ifdim\svgx@param@height>\z@\relax%
        \svg@tempa{height=\svgx@param@height}%
      \fi%
      \ifdim\dimexpr\svgx@param@scale\p@\relax=\p@\relax\else%
        \svg@tempa{scale=\svgx@param@scale}%
      \fi%
      \def\svg@tempb{\svg@param@pretex}%
      \ifx\svgx@param@pretex\svg@tempb\relax%
        \let\svgx@param@pretex\svg@param@pretex%
      \fi%
      \ifx\svgx@param@pretex\relax\else%
        \svg@tempa{pretex=\unexpanded\expandafter{\svgx@param@pretex}}%
      \fi%
      \def\svg@tempb{\svg@param@apptex}%
      \ifx\svgx@param@apptex\svg@tempb\relax%
        \let\svgx@param@apptex\svg@param@apptex%
      \fi%
      \ifx\svgx@param@apptex\relax\else%
        \svg@tempa{apptex=\unexpanded\expandafter{\svgx@param@apptex}}%
      \fi%
      \let\svg@tempa\@empty%
      \if@svg@ink@latex%
        \ifstr{\svg@ink@format}{pdf}{%
          \ifnum\value{svg@param@lastpage}>\z@\relax%
            \edef\svg@tempa{lastpage=\the\value{svg@param@lastpage}}%
          \else%
            \ifnum\value{svg@param@lastpage}=\z@\relax%
              \def\svg@tempa{lastpage=true}%
            \else%
              \def\svg@tempa{lastpage=false}%
            \fi%
          \fi%
        }{}%
      \fi%
      \ifx\svg@tempa\@empty%
        \def\svg@tempa{\string\svgxsetbox{#1}}%
      \else%
        \edef\svg@tempa{\noexpand\string\noexpand\svgxsetbox[\svg@tempa]{#1}}%
      \fi%
      \immediate\write\svgx@stream@out{\svg@tempa}%
      \if@svg@ink@latex%
        \IfFileExists{xr.sty}{%
          \immediate\write\svgx@stream@out{%
            \string\usepackage{xr}^^J%
            \string\externaldocument{\jobname}^^J%
          }%
        }{}%
      \fi%
      \immediate\write\svgx@stream@out{%
        \string\AtBeginDocument{\@percentchar^^J%
          \space\space\svg@tempa\@percentchar^^J%
        }^^J^^J%
        \string\begin{document}^^J%
        \string\pagestyle{empty}^^J%
        \string\svgxoutputbox\@percentchar^^J%
        \string\end{document}%
      }%
      \immediate\closeout\svgx@stream@out%
    \endgroup%
    \ifstr{\svgx@format\svgx@cnv@format}{}{%
      \PackageWarning{svg-extract}{%
        Both keys `extractformat' and `convertformat' are\MessageBreak%
        empty, so nothing to do so far%
      }%
    }{%
      \svg@quotes@remove{\svgx@out@path}%
      \svg@quotes@remove{\svgx@out@name}%
      \edef\svg@tempb{%
        \noexpand\svg@shell@mkdir{\svgx@out@path}%
      }%
      \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}%
      \edef\svg@tempb{%
        \noexpand\PackageInfo{svg-extract}{%
          Running LaTeX (\svgx@latex@exe) for graphic extraction%
          \ifx\svgx@latex@opt\@empty\else%
            \MessageBreak with added options `\svgx@latex@opt'%
          \fi%
        }%
      }%
      \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}%
      \edef\svg@tempb{%
        \noexpand\ShellEscape{%
          \svgx@latex@exe\space\svgx@latex@opt\space%
          "\svgx@out@name.\svgx@latex@ext"%
        }%
      }%
      \loop\ifnum\value{svgx@runs}>\z@\relax%
        \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}%
        \advance\c@svgx@runs\m@ne%
      \repeat%
      \def\svg@tempa##1##2##3{%
        \edef\svg@tempb{%
          \noexpand\ShellEscape{%
            \@nameuse{svgx@##1@exe}\space\@nameuse{svgx@##1@opt}\space%
            "\svgx@out@name.##2"%
          }%
        }%
        \AfterReadingMainAux{\PackageInfo{svg-extract}{Running ##1}}%
        \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}%
      }%
      \@svg@tempswafalse%
      \ifxetex\else\ifpdf\else%
        \@svg@tempswatrue%
      \fi\fi%
      \if@svg@tempswa%
        \svg@tempa{dvips}{dvi}{ps}%
        \svgx@ifinlist{eps}{\svgx@format}{\svg@tempa{pstoeps}{ps}{eps}}{}%
        \svgx@ifinlist{pdf}{\svgx@format}{\svg@tempa{pstopdf}{ps}{pdf}}{}%
      \else%
        \svgx@ifinlist{eps}{\svgx@format}{\svg@tempa{pdftoeps}{pdf}{eps}}{}%
        \svgx@ifinlist{ps}{\svgx@format}{\svg@tempa{pdftops}{pdf}{ps}}{}%
      \fi%
      \if@svgx@cnv@run%
        \ifx\svgx@cnv@dpi\relax%
          \ifx\svgx@cnv@dpi@png\@undefined%
            \def\svgx@cnv@dpi@png{300}%
          \fi%
        \fi%
        \expandafter\svgx@cnv@get@informat\expandafter{\svgx@format}%
        \@for\svg@tempa:=\svgx@cnv@format\do{%
          \ifx\svg@tempa\@empty\else%
            \expandafter\svgx@ifinlist\expandafter{\svg@tempa}{\svgx@format}{%
              \PackageWarning{svg-extract}{%
                File type `\svg@tempa' was specified for option\MessageBreak%
                `extractformat' (\svgx@format) as well as for \MessageBreak
                option `convertformat' (\svgx@cnv@format) so the\MessageBreak%
                conversion won't be done%
              }%
            }{%
              \edef\svg@tempb{%
                \noexpand\PackageInfo{svg-extract}{%
                  Converting `\svgx@out@name.\svgx@cnv@informat'\MessageBreak%
                  to `\svgx@out@name.\svg@tempa'%
                }%
              }%
              \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}%
              \edef\svg@tempb{%
                \noexpand\ShellEscape{%
                  \svgx@cnv@cmd{\svgx@out@name}{\svgx@cnv@informat}{\svg@tempa}%
                }%
              }%
              \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}%
            }%
          \fi%
        }%
      \fi%
      \edef\svg@tempa{\svgx@format\if@svgx@cnv@run,\svgx@cnv@format\fi}%
      \@for\svg@tempb:=\svg@tempa\do{%
        \ifx\svg@tempb\@empty\else%
          \edef\svg@tempb{%
            \noexpand\svgx@move{\svgx@out@name}{\svg@tempb}{\svgx@out@path}%
          }%
          \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}%
        \fi%
      }%
      \@for\svg@tempa:=\svgx@clean\do{%
        \expandafter\svgx@ifinlist\expandafter{\svg@tempa}{\svg@tempb}{}{%
          \edef\svg@tempb{%
            \noexpand\IfFileExists{"\svgx@out@name".\svg@tempa}{%
              \noexpand\svg@shell@rm{\svgx@out@name.\svg@tempa}%
            }{}%
          }%
          \expandafter\AtEndDocument\expandafter{%
            \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}%
          }%
        }%
      }%
    }%
  \fi%
}
\newcommand*\svgx@out@sec{unknown}
\newcommand*\svgx@get@out@sec{%
  \begingroup%
    \def\svg@tempa{}%
    \@for\svg@tempb:={%
      part,chapter,section,subsection,subsubsection,paragraph,subparagraph%
    }\do{%
      \ifx\svg@tempb\@empty\else%
        \scr@ifundefinedorrelax{the\svg@tempb}{}{%
          \ifnum\value{\svg@tempb}>\z@\relax%
            \edef\svg@tempa{\svg@tempb}%
          \fi%
        }%
      \fi%
    }%
    \edef\svg@tempb{%
      \endgroup%
      \ifx\svg@tempa\@empty\else%
        \def\noexpand\svgx@out@sec{\csname the\svg@tempa\endcsname}%
      \fi%
    }%
  \svg@tempb%
}
\newif\if@svgx@classfound
\newcommand*\svgx@documentclass{}
\def\svgx@documentclass#1\documentclass#2\documentclass#3\@nil{%
  \IfArgIsEmpty{#2}{}{\@svgx@classfoundtrue}%
}
\newcommand*\svgx@read@preamble@till[2]{%
  \svgx@read@preamble@skip#1\@nil{till}{#2}%
}
\newcommand*\svgx@read@preamble@from[2]{%
  \svgx@read@preamble@skip#1\@nil{from}{#2}%
}
\newcommand*\svgx@read@preamble@skip{}
\def\svgx@read@preamble@skip#1\@nil#2#3{%
  \def\svg@tempa##1{%
    \def\svg@tempa####1##1####2##1####3\@nil{%
      \IfArgIsEmpty{####3}{}{%
        \ifstr{#2}{till}{%
          \IfArgIsEmpty{####1}{}{%
            \immediate\write\svgx@stream@out{####1}%
          }%
          \@svgx@preamble@writefalse%
        }{%
          \ifstr{#2}{from}{%
            \IfArgIsEmpty{####2}{%
              \def\svgx@read@line{}%
            }{%
              \def\svgx@read@line{####2}%
            }%
            \@svgx@preamble@writetrue%
          }{}%
        }%
        #3%
      }%
    }%
  }%
  \edef\svg@tempb{\expandafter\detokenize\expandafter{#1}}%
  \expandafter\svg@tempa\expandafter{\svg@tempb}%
  \edef\svg@tempb{%
    \expandafter\detokenize\expandafter{\svgx@read@line}\svg@tempb\svg@tempb%
  }%
  \expandafter\svg@tempa\svg@tempb\@nil%
}
\newcommand*\svgx@cnv@informat{}
\newcommand*\svgx@cnv@get@informat[1]{%
  \begingroup%
    \def\svg@tempa##1,##2\@nil{%
      \def\svg@tempa{##1}%
    }%
    \svg@tempa#1,\@nil%
    \edef\svg@tempa{%
      \noexpand\endgroup%
      \noexpand\def\noexpand\svgx@cnv@informat{\svg@tempa}%
    }%
  \svg@tempa%
  \ifx\svgx@cnv@informat\@empty%
    \renewcommand*\svgx@cnv@informat{pdf}%
    \ifxetex\else\ifpdf\else%
      \renewcommand*\svgx@cnv@informat{ps}%
    \fi\fi%
  \fi%
}
\ifx\svgx@magick@exe\@empty
  \ifwindows
    \renewcommand*\svgx@magick@exe{magick}
  \else
    \renewcommand*\svgx@magick@exe{convert}
  \fi
\fi
\newcommand*\svgx@magick@cmd[3]{%
  \svgx@magick@exe\space%
  \svgx@useformatkey{svgx@cnv@dpi}{#3}{-density }%
  \svgx@useformatkey{svgx@magick@set}{#3}{}%
  "#1.#2"\space%
  \svgx@useformatkey{svgx@magick@opr}{#3}{}%
  "#1.#3"%
}
\ifx\svgx@gs@exe\@empty
  \ifwindows
    \renewcommand*\svgx@gs@exe{gswin64c}
  \else
    \renewcommand*\svgx@gs@exe{gs}
  \fi
\fi
\newcommand*\svgx@gs@cmd[3]{%
  \svgx@gs@exe\space-dSAFER -dBATCH -dNOPAUSE\space%
  \svgx@useformatkey{svgx@gs@device}{#3}{-sDEVICE=}%
  \svgx@useformatkey{svgx@cnv@dpi}{#3}{-r}%
  \svgx@useformatkey{svgx@gs@opt}{#3}{}%
  -sOutputFile="#1.#3"\space"#1.#2"%
}
\newcommand*\svgx@move[3]{%
  \begingroup%
    \IfFileExists{"#1".#2}{%
      \svg@shell@move{#1.#2}{#3#1.#2}%
    }{%
      \edef\svg@tempa{#2}%
      \@svg@tempswafalse%
      \expandafter\svgx@ifinlist\expandafter{\svg@tempa}{\svgx@cnv@format}{%
        \@svg@tempswatrue%
        \def\svg@tempb{conversion}%
      }{%
        \expandafter\svgx@ifinlist\expandafter{\svg@tempa}{pdf,ps,eps}{%
          \@svg@tempswatrue%
          \def\svg@tempb{extraction}%
        }{}%
      }%
      \if@svg@tempswa%
        \edef\svg@tempb{%
          The graphic file \svg@tempb\space failed\MessageBreak%
          for `#1.#2'\MessageBreak%
          Troubleshooting: Please check the log file how the\MessageBreak%
          invocation of the extraction took place and try\MessageBreak%
          to execute it yourself in the terminal%
        }%
      \else%
        \def\svg@tempb{%
          The extraction to format `#2' failed\MessageBreak%
          for `#1.#2'\MessageBreak%
          Only file types `pdf,ps,eps' are supported for\MessageBreak%
          key `exportformat'%
        }%
      \fi%
      \PackageWarning{svg-extract}{\svg@tempb}%
    }%
  \endgroup%
}
\endinput
%%
%% End of file `svg-extract.sty'.
