% \iffalse meta-comment
%
% Copyright (C) 2021 by Jinwen XU 
% -------------------------------
% 
% This file may be distributed and/or modified under the conditions of the LaTeX
% Project Public License, either version 1.3c 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
%
% \fi
%
%<*driver>
\ProvidesFile{ProjLib.dtx}
%</driver>
\NeedsTeXFormat{LaTeX2e}[2020-10-01]
%
%<*PLamssim>
\ProvidesPackage{PLamssim}
    [2021/05/12 Simulate some features of amsart]
%</PLamssim>
%
%<*PLauthor>
\ProvidesPackage{PLauthor}
    [2021/05/12 Enhanced author information block]
%</PLauthor>
%
%<*PLdate>
\ProvidesPackage{PLdate}
    [2021/05/12 Convert yyyy-mm-dd to normal datetime format]
%</PLdate>
%
%<*PLdraft>
\ProvidesPackage{PLdraft}
    [2021/05/12 Some useful macros for the draft stage]
%</PLdraft>
%
%<*PLlang>
\ProvidesPackage{PLlang}
    [2021/05/12 Multi-language configuration]
%</PLlang>
%
%<*PLlogo>
\ProvidesPackage{PLlogo}
    [2021/05/12 The ProjLib logo]
%</PLlogo>
%
%<*PLpaper>
\ProvidesPackage{PLpaper}
    [2021/05/12 Paper style configuration]
%</PLpaper>
%
%<*PLthm>
\ProvidesPackage{PLthm}
    [2021/05/12 Theorem setup and configuration]
%</PLthm>
%
%<*PLtoolkit>
\ProvidesPackage{PLtoolkit}
    [2021/05/12 Collective interface of ProjLib Toolkit]
%</PLtoolkit>
%
\RequirePackage{kvoptions}
\RequirePackage{etoolbox}
%
%<*PLamssim>
\ifdefined\subjclass\endinput\fi

\RequirePackage{PLauthor}
\RequirePackage{calc}

\providecommand{\conditionalbfseries}{\bfseries}

% keywords
\def\keywordsnameEN{\textsc{Key words and phrases}}
\def\keywordsnameFR{\textsc{Mots et phrases clés}}
\def\keywordsnameDE{\textsc{Schlüsselwörter und Phrasen}}
\def\keywordsnameCN{关键词}
\def\keywordsnameTC{關鍵詞}
\def\keywordsnameJP{キーワード}
\def\keywordsnameRU{Ключевые слова и фразы}

\ifdefined\keywords\else
    \def\PL@keywords{}
    \newcommand*{\keywords}[1]{\def\PL@keywords{#1}}
\fi

% dedicatory
\ifdefined\dedicatory\else
    \def\PL@dedicatory{}
    \newcommand*{\dedicatory}[1]{\def\PL@dedicatory{#1}}
\fi

% \thanks: behave like article-style when in \author, and ams-style (no marker) when outside
\AtEndPreamble{
% In case that \@author changes again
\let\footnotemark@PLoriginal\footnotemark%
\let\footnotemark\relax%
\let\thanks@PLoriginal\thanks%
\newlength\PL@starlength
\setlength{\PL@starlength}{\widthof{*}}
\newcommand*{\PL@prethanks}[1]{\thanks@PLoriginal{\hspace*{-\PL@starlength}#1}}
% \renewcommand*{\thanks}[1]{%
%     \ifx#1\@empty\else%
%         \thanks@PLoriginal{\hspace*{-\PL@starlength}#1}%
%     \fi}
\renewcommand*{\thanks}[1]{%
    \ifx#1\@empty\else%
        \apptocmd{\@title}{%
            \thanks@PLoriginal{\hspace*{-\PL@starlength}#1}%
        }{}{\FAIL}%
    \fi}
\let\author@PLoriginal\author
\renewcommand{\author}[1]{%
    \author@PLoriginal{%
        \let\footnotemark\footnotemark@PLoriginal%
        \let\thanks\thanks@PLoriginal%
        #1%
        \let\footnotemark\relax%
    }%
}
% \pretocmd{\@author}{\let\footnotemark\footnotemark@PLoriginal\let\thanks\thanks@PLoriginal}{}{\FAIL}
% \apptocmd{\@author}{\let\footnotemark\relax}{}{\FAIL}
}

%% Modify abstract to allow it before maketitle
\let\abstract@PLoriginal\abstract%
\let\endabstract@PLoriginal\endabstract%
\newif\if@PLamssim@maketitle\@PLamssim@maketitlefalse
\newif\if@PLamssim@absbefore\@PLamssim@absbeforefalse
\RequirePackage{fancyvrb}
% Taken from https://tex.stackexchange.com/a/596328
% define the same as \protected@write, but with \immediate
\providecommand*\protected@iwrite[3]{%
  \begingroup
  \let\thepage\relax
  #2%
  \let\protect\@unexpandable@protect
  \edef\reserved@a{\immediate\write#1{#3}}\reserved@a
  \endgroup
  \if@nobreak\ifvmode\nobreak\fi\fi
}
\patchcmd{\FVB@VerbatimOut}
  {\immediate\write\FV@OutFile}
  {\protected@iwrite\FV@OutFile{}}
  {}{}
%
\renewenvironment{abstract}{%
    \VerbatimOut{\jobname.plabs}%
}{
    \endVerbatimOut%
    \if@PLamssim@maketitle%
        \begin{abstract@PLoriginal}%
            \input{\jobname.plabs}%
        \end{abstract@PLoriginal}%
        % \ifx\PL@keywords\@empty\else%
        %     \par\smallskip\noindent{\conditionalbfseries\csname keywordsname\csname\languagename ABBR\endcsname\endcsname.}~\PL@keywords%
        % \fi%
    \else%
        \global\@PLamssim@absbeforetrue%
    \fi%
}

%% Modify maketitle
\AtEndPreamble{%
% Add dedicatory to @maketitle
\patchcmd{\@maketitle}{\@date}{%
    \ifx\@date\@empty\vspace{-2\baselineskip}%
    \else\@date\fi%
    \ifx\PL@dedicatory\@empty\else%
    \par\vspace{-\parskip}\bigskip%
    {\itshape\PL@dedicatory}\fi}
    {}{\FAIL}
% Add keywords to maketitle
\pretocmd{\maketitle}{%
    \ifx\PL@keywords\@empty\else%
    \PL@prethanks{{\conditionalbfseries%
    \csname keywordsname\csname\languagename ABBR\endcsname\endcsname.}%
    ~\PL@keywords}%
    \fi}{}{\FAIL}
% Add abstract to maketitle
\apptocmd{\maketitle}{%
    \if@PLamssim@absbefore%
        \begin{abstract@PLoriginal}%
            \input{\jobname.plabs}%
            % \ifx\PL@keywords\@empty\else%
            %     \par\smallskip\noindent{\conditionalbfseries\csname keywordsname\csname\languagename ABBR\endcsname\endcsname.}~\PL@keywords%
            % \fi%
        \end{abstract@PLoriginal}%
    \fi%
    \global\let\address\relax
    \global\let\curraddr\relax
    \global\let\email\relax
    \global\let\dedicatory\relax
    \global\let\keywords\relax
    \global\@PLamssim@maketitletrue
}{}{\FAIL}
% Disbale the \newpage in maketitle
% \let\maketitle@PLoriginal=\maketitle
% \renewcommand*{\maketitle}{{\let\newpage\relax\maketitle@PLoriginal}}
}

\newcommand*\subjclass[2][2020]{%
    \def\@subjclass{#2}%
    \@ifundefined{subjclassname@#1}{%
        \ClassWarning{\@currname}{Unknown edition (#1) of Mathematics
        Subject Classification; using '2020'}%
        \expandafter\let\expandafter\subjclassname\csname subjclassname@2020\endcsname
    }{%
        \expandafter\let\expandafter\subjclassname\csname subjclassname@#1\endcsname
    }%
    \PL@prethanks{{\itshape\subjclassname.}\enspace\@subjclass{}.}
}
\@namedef{subjclassname@1991}{%
  \textup{1991} Mathematics Subject Classification}
\@namedef{subjclassname@2000}{%
  \textup{2000} Mathematics Subject Classification}
\@namedef{subjclassname@2010}{%
  \textup{2010} Mathematics Subject Classification}
\@namedef{subjclassname@2020}{%
  \textup{2020} Mathematics Subject Classification}
%</PLamssim>
%
%<*PLauthor>
\ifdefined\subjclass\endinput\fi

\RequirePackage{PLlang}

%%================================
%% Font and style
%%================================
\def\PLauthor@font@author{\normalsize\normalfont\scshape}
\def\PLauthor@font@address{\small\normalfont\itshape}
\def\PLauthor@font@curraddr{\small\normalfont\itshape}
\def\PLauthor@font@email{\small\normalfont\ttfamily}

%%================================
%% Lengths
%%================================
% Space between author and address
\newlength{\PLauthor@length@innersep}
\setlength{\PLauthor@length@innersep}{.3\baselineskip}

% Space between different author blocks
\newlength{\PLauthor@length@sep}
\setlength{\PLauthor@length@sep}{.5\baselineskip}

% Space between affiliation and date
\newlength{\PLauthor@length@aftersep}
\setlength{\PLauthor@length@aftersep}{.3\baselineskip}

%%================================
%% The macros
%%================================
\newif\if@PLauthor@affilon
\renewcommand*{\author}[1]{%
    \gappto\@author{\phantom{A}\\[-\baselineskip]%
    \vspace{\PLauthor@length@sep}%
    \PLauthor@font@author{#1}\\\phantom{}
    \@PLauthor@affilonfalse}}
\providecommand*{\address}[1]{%
    \gappto\@author{\phantom{A}\\[-\baselineskip]%
        \if@PLauthor@affilon\else%
            \vspace{\PLauthor@length@innersep}%
        \fi%
        \@PLauthor@affilontrue%
        \PLauthor@font@address{#1}\\\phantom{}}%
}
\providecommand*{\curraddr}[1]{%
    \gappto\@author{\phantom{A}\\[-\baselineskip]%
        \if@PLauthor@affilon\else%
            \vspace{\PLauthor@length@innersep}%
        \fi%
        \@PLauthor@affilontrue%
        \PLauthor@font@curraddr{#1}\\\phantom{}}%
}
\providecommand*{\email}[1]{%
    \gappto\@author{\phantom{A}\\[-\baselineskip]%
        \if@PLauthor@affilon\else%
            \vspace{\PLauthor@length@innersep}%
        \fi%
        \@PLauthor@affilontrue%
        \PLauthor@font@email{#1}\\\phantom{}}%
}

%%================================
%% Adjustment
%%================================
\patchcmd{\@maketitle}{\begin{tabular}[t]{c}}{}{}{}
\patchcmd{\@maketitle}{\end{tabular}}{}{}{}
\def\@author{} % Remove "No \author given."
\pretocmd{\@maketitle}{%
    \pretocmd{\@author}{\vspace{-\PLauthor@length@sep}}{}{\FAIL}%
    \apptocmd{\@author}{%
% Fix the space caused by `\\\phantom{}`
        \vspace{-\baselineskip}%
        \if@PLauthor@affilon%
            \vspace{\PLauthor@length@aftersep}%
        \fi%
    }{}{\FAIL}%
}{}{\FAIL}
%</PLauthor>
%
%<*PLdate>
\SetupKeyvalOptions{
    family = @PLdate,
    prefix = @PLdate@,
}
\DeclareBoolOption[false]{draft}
\DeclareBoolOption[false]{fast}
\ProcessKeyvalOptions*\relax
\if@PLdate@draft
    \@PLdate@fasttrue
\fi
\if@PLdate@fast\let\PLdate\relax\endinput\fi

\RequirePackage{PLlang}

% The following line is for "authblk"
\robustify\@latex@warning@no@line
\RequirePackage{silence}
\WarningFilter*{datetime2}{Date-Time Language Module}
\PassOptionsToPackage{fr-FR,en-US}{datetime2}
\RequirePackage{datetime2}
\RequirePackage{zhnumber}

\let\@DTMdate@PLoriginal\@DTMdate
\gappto{\PLlang@langconfig@common}{%
    \let\@DTMdate\@DTMdate@PLoriginal%
}
\gappto{\PLlang@langconfig@chinese}{%
    \renewcommand*{\@DTMdate}[1]{%
    \expandafter\@dtm@parsedate#1\@dtm@endparsedate%
    \zhdate{\@dtm@year/\@dtm@month/\@dtm@day}%
    }%
}
\gappto{\PLlang@langconfig@tchinese}{%
    \renewcommand*{\@DTMdate}[1]{%
    \expandafter\@dtm@parsedate#1\@dtm@endparsedate%
    \zhdate{\@dtm@year/\@dtm@month/\@dtm@day}%
    }%
}
\gappto{\PLlang@langconfig@japanese}{%
    \renewcommand*{\@DTMdate}[1]{%
    \expandafter\@dtm@parsedate#1\@dtm@endparsedate%
    \zhdate{\@dtm@year/\@dtm@month/\@dtm@day}%
    }%
}
\providecommand*{\PLdate}[1]{\DTMdate{#1}}
%</PLdate>
%
%<*PLdraft>
\SetupKeyvalOptions{
    family = @PLdraft,
    prefix = @PLdraft@,
}
\DeclareBoolOption[false]{draft}
\DeclareBoolOption[false]{fast}
\ProcessKeyvalOptions*\relax
\if@PLdraft@draft
    \@PLdraft@fasttrue
\fi

\RequirePackage{PLlang}
\RequirePackage{xcolor}

\def\dnfFont{\ttfamily}
\def\needgraphFont{\ttfamily}

\def\dnfTextEN{To be finished}
\def\needgraphTextEN{A graph is needed here}
\def\dnfTextFR{Pas encore fini}
\def\needgraphTextFR{Il manque une image ici}
\def\dnfTextDE{Nicht beendet}
\def\needgraphTextDE{Benötigen Sie ein Bild}
\def\dnfTextCN{这里尚未完成}
\def\needgraphTextCN{这里需要一张图片}
\def\dnfTextTC{這裡尚未完成}
\def\needgraphTextTC{這裡需要一張圖片}
\def\dnfTextJP{終わってない}
\def\needgraphTextJP{まだ画像が必要です}
\def\dnfTextRU{Не закончен}
\def\needgraphTextRU{Еще нужна картинка}

\definecolor{dnfColor}{RGB}{21,122,20}
\definecolor{needgraphColor}{RGB}{70,130,180}

\if@PLdraft@fast
    \newcommand{\plainBox}[2][-paper]{\textcolor{#1}{%
    \setlength{\fboxsep}{1.5pt}%
    \setlength{\fboxrule}{1.2pt}%
    \fbox{#2}}}
\else
    \PassOptionsToPackage{many}{tcolorbox}
    \RequirePackage{tcolorbox}
    \newtcbox{\plainBox}[1][-paper]{enhanced jigsaw,%
        on line, arc = 1.2pt, outer arc = 1pt,breakable,%
        colframe = #1,colupper=#1,opacityback=0,%
        boxsep = 1pt,boxrule = 1.2pt,%
        left = 1pt, right = 1pt, top = 0pt, bottom = 0pt,%
    }
\fi

\newcounter{dnfcnt}
\newcounter{needgraphcnt}

\NewDocumentCommand{\dnf}{d<>}{%
    \noindent\plainBox[dnfColor]%
    {\normalfont\dnfFont\bfseries\small%
    \csname dnfText\csname\languagename ABBR\endcsname\endcsname%
    \stepcounter{dnfcnt}~\#\thednfcnt%
    \IfNoValueF{#1}{\,: #1}}%
}
\NewDocumentCommand{\needgraph}{d<>}{%
    \begin{center}%
        \plainBox[needgraphColor]%
        {\normalfont\needgraphFont\bfseries\small%
        \csname needgraphText\csname\languagename ABBR\endcsname\endcsname%
        \stepcounter{needgraphcnt}~\#\theneedgraphcnt%
        \IfNoValueF{#1}{\,: #1}}%
    \end{center}%
}
%</PLdraft>
%
%<*PLlang>
\SetupKeyvalOptions{%
    family = @PLlang,
    prefix = @PLlang@
}
\DeclareBoolOption[false]{polyglossia}
\ProcessKeyvalOptions*\relax

\newcommand\englishABBR{EN}
\newcommand\frenchABBR{FR}
\newcommand\ngermanABBR{DE}
\newcommand\chineseABBR{CN}
\newcommand\tchineseABBR{TC}
\newcommand\japaneseABBR{JP}
\newcommand\russianABBR{RU}

\RequirePackage{iftex}
\ifPDFTeX
\RequirePackage[T1]{fontenc}
\RequirePackage{inputenc}
\fi

\if@PLlang@polyglossia
    \RequirePackage{polyglossia}
    \setdefaultlanguage{english}
    \setotherlanguage[frenchpart=false]{french}
    \setotherlanguage{ngerman}
    \setotherlanguage{spanish}
    \setotherlanguage{portuguese}
    \setotherlanguage{italian}
    \ifPDFTeX\else
        \setotherlanguage{russian}
        \setotherlanguage{japanese}
        \RequirePackage{silence}
        \WarningFilter{polyglossia}{Asking to add empty feature to latin font(Script="CJK" to scripttag "")}
    \fi
\else
    \ifPDFTeX\else
        \PassOptionsToPackage{japanese,russian}{babel}
    \fi
    \PassOptionsToPackage{italian,portuguese,brazilian,spanish.noquoting,ngerman,french,english,shorthands=off}{babel}
    \PassOptionsToPackage{italian,brazilian,spanish,ngerman,french,english}{cleveref}
    \RequirePackage{babel}
    \frenchsetup{PartNameFull=false}
\fi
%
\let\today@PLoriginal\today
\newcommand{\PLlang@langconfig@common}{%
    \ifdefined\DTMtoday%
        \let\today\DTMtoday%
    \else%
        \let\today\today@PLoriginal%
    \fi%
}
\newcommand{\PLlang@langconfig@chinese}{%
    \def\abstractname{摘要}%
    \def\proofname{证明}%
    \def\contentsname{目录}%
    \def\listfigurename{插图}%
    \def\listtablename{表格}%
    \def\figurename{图}%
    \def\tablename{表}%
    \def\indexname{索引}%
    \def\appendixname{附录}%
    \def\refname{参考文献}%
    \def\bibname{参考文献}%
    \let\today\zhtoday%
    \renewcommand{\languagename}{chinese}%
}
\newcommand{\PLlang@langconfig@tchinese}{%
    \def\abstractname{摘要}%
    \def\proofname{證明}%
    \def\contentsname{目錄}%
    \def\listfigurename{插圖}%
    \def\listtablename{表格}%
    \def\figurename{圖}%
    \def\tablename{表}%
    \def\indexname{索引}%
    \def\appendixname{附錄}%
    \def\refname{參考文獻}%
    \def\bibname{參考文獻}%
    \let\today\zhtoday%
    \renewcommand{\languagename}{tchinese}%
}
\newcommand{\PLlang@langconfig@japanese}{%
    \selectlanguage{japanese}%
}
\newcommand{\PLlang@langconfig@english}{%
    \selectlanguage{english}%
}
\newcommand{\PLlang@langconfig@french}{%
    \selectlanguage{french}%
% The line below is currently only needed for 'babel', but also works with 'polyglossia'
    \def\frenchpartname{Partie}%
}
\newcommand{\PLlang@langconfig@german}{%
    \selectlanguage{ngerman}%
}
\newcommand{\PLlang@langconfig@russian}{%
    \selectlanguage{russian}%
}
\NewDocumentCommand\AddLanguageSetting{d()m}{%
\IfNoValueTF{#1}%
    {\gappto{\PLlang@langconfig@common}{#2}}%
    {%
        \ifstrequal{#1}{chinese}{\gappto{\PLlang@langconfig@chinese}{#2}}{}%
        \ifstrequal{#1}{Chinese}{\gappto{\PLlang@langconfig@chinese}{#2}}{}%
        \ifstrequal{#1}{schinese}{\gappto{\PLlang@langconfig@chinese}{#2}}{}%
        \ifstrequal{#1}{SChinese}{\gappto{\PLlang@langconfig@chinese}{#2}}{}%
        \ifstrequal{#1}{simplifiedchinese}{\gappto{\PLlang@langconfig@chinese}{#2}}{}%
        \ifstrequal{#1}{SimplifiedChinese}{\gappto{\PLlang@langconfig@chinese}{#2}}{}%
        \ifstrequal{#1}{tchinese}{\gappto{\PLlang@langconfig@tchinese}{#2}}{}%
        \ifstrequal{#1}{TChinese}{\gappto{\PLlang@langconfig@tchinese}{#2}}{}%
        \ifstrequal{#1}{traditionalchinese}{\gappto{\PLlang@langconfig@tchinese}{#2}}{}%
        \ifstrequal{#1}{TraditionalChinese}{\gappto{\PLlang@langconfig@tchinese}{#2}}{}%
        \ifstrequal{#1}{japanese}{\gappto{\PLlang@langconfig@japanese}{#2}}{}%
        \ifstrequal{#1}{Japanese}{\gappto{\PLlang@langconfig@japanese}{#2}}{}%
        \ifstrequal{#1}{english}{\gappto{\PLlang@langconfig@english}{#2}}{}%
        \ifstrequal{#1}{English}{\gappto{\PLlang@langconfig@english}{#2}}{}%
        \ifstrequal{#1}{french}{\gappto{\PLlang@langconfig@french}{#2}}{}%
        \ifstrequal{#1}{French}{\gappto{\PLlang@langconfig@french}{#2}}{}%
        \ifstrequal{#1}{ngerman}{\gappto{\PLlang@langconfig@german}{#2}}{}%
        \ifstrequal{#1}{german}{\gappto{\PLlang@langconfig@german}{#2}}{}%
        \ifstrequal{#1}{German}{\gappto{\PLlang@langconfig@german}{#2}}{}%
        \ifstrequal{#1}{russian}{\gappto{\PLlang@langconfig@russian}{#2}}{}%
        \ifstrequal{#1}{Russian}{\gappto{\PLlang@langconfig@russian}{#2}}{}%
    }%
}

\RequirePackage{setspace}
%
\def\PL@config@linespacing{\setstretch{1.00}}
\def\PL@config@CJKlinespacing{\onehalfspacing}
\newcommand{\PLsetlinespacing}[1]{\renewcommand{\PL@config@linespacing}{#1}}
\newcommand{\PLsetCJKlinespacing}[1]{\renewcommand{\PL@config@CJKlinespacing}{#1}}
%
\newcommand{\UseLanguageCORE}[1]{%
    \PLlang@langconfig@common%
    \ifstrequal{#1}{chinese}{\PL@config@CJKlinespacing\PLlang@langconfig@chinese}{}%
    \ifstrequal{#1}{Chinese}{\PL@config@CJKlinespacing\PLlang@langconfig@chinese}{}%
    \ifstrequal{#1}{schinese}{\PL@config@CJKlinespacing\PLlang@langconfig@chinese}{}%
    \ifstrequal{#1}{SChinese}{\PL@config@CJKlinespacing\PLlang@langconfig@chinese}{}%
    \ifstrequal{#1}{simplifiedchinese}{\PL@config@CJKlinespacing\PLlang@langconfig@chinese}{}%
    \ifstrequal{#1}{SimplifiedChinese}{\PL@config@CJKlinespacing\PLlang@langconfig@chinese}{}%
    \ifstrequal{#1}{tchinese}{\PL@config@CJKlinespacing\PLlang@langconfig@tchinese}{}%
    \ifstrequal{#1}{TChinese}{\PL@config@CJKlinespacing\PLlang@langconfig@tchinese}{}%
    \ifstrequal{#1}{traditionalchinese}{\PL@config@CJKlinespacing\PLlang@langconfig@tchinese}{}%
    \ifstrequal{#1}{TraditionalChinese}{\PL@config@CJKlinespacing\PLlang@langconfig@tchinese}{}%
    \ifstrequal{#1}{japanese}{\PL@config@CJKlinespacing\PLlang@langconfig@japanese}{}%
    \ifstrequal{#1}{Japanese}{\PL@config@CJKlinespacing\PLlang@langconfig@japanese}{}%
    \ifstrequal{#1}{english}{\PL@config@linespacing\PLlang@langconfig@english}{}%
    \ifstrequal{#1}{English}{\PL@config@linespacing\PLlang@langconfig@english}{}%
    \ifstrequal{#1}{french}{\PL@config@linespacing\PLlang@langconfig@french}{}%
    \ifstrequal{#1}{French}{\PL@config@linespacing\PLlang@langconfig@french}{}%
    \ifstrequal{#1}{ngerman}{\PL@config@linespacing\PLlang@langconfig@german}{}%
    \ifstrequal{#1}{german}{\PL@config@linespacing\PLlang@langconfig@german}{}%
    \ifstrequal{#1}{German}{\PL@config@linespacing\PLlang@langconfig@german}{}%
    \ifstrequal{#1}{russian}{\PL@config@linespacing\PLlang@langconfig@russian}{}%
    \ifstrequal{#1}{Russian}{\PL@config@linespacing\PLlang@langconfig@russian}{}%
}
\newcommand{\UseLanguage}[1]{%
    \ifx\@onlypreamble\@notprerr%
        \UseLanguageCORE{#1}%
    \else%
        \AfterEndPreamble{\UseLanguageCORE{#1}}%
    \fi%
}
\newcommand{\UseOtherLanguage}[2]{%
\begingroup%
    \PLlang@langconfig@common%
    \ifstrequal{#1}{chinese}{\PLlang@langconfig@chinese}{}%
    \ifstrequal{#1}{Chinese}{\PLlang@langconfig@chinese}{}%
    \ifstrequal{#1}{schinese}{\PLlang@langconfig@chinese}{}%
    \ifstrequal{#1}{SChinese}{\PLlang@langconfig@chinese}{}%
    \ifstrequal{#1}{simplifiedchinese}{\PLlang@langconfig@chinese}{}%
    \ifstrequal{#1}{SimplifiedChinese}{\PLlang@langconfig@chinese}{}%
    \ifstrequal{#1}{tchinese}{\PLlang@langconfig@tchinese}{}%
    \ifstrequal{#1}{TChinese}{\PLlang@langconfig@tchinese}{}%
    \ifstrequal{#1}{traditionalchinese}{\PLlang@langconfig@tchinese}{}%
    \ifstrequal{#1}{TraditionalChinese}{\PLlang@langconfig@tchinese}{}%
    \ifstrequal{#1}{japanese}{\PLlang@langconfig@japanese}{}%
    \ifstrequal{#1}{Japanese}{\PLlang@langconfig@japanese}{}%
    \ifstrequal{#1}{english}{\PLlang@langconfig@english}{}%
    \ifstrequal{#1}{English}{\PLlang@langconfig@english}{}%
    \ifstrequal{#1}{french}{\PLlang@langconfig@french}{}%
    \ifstrequal{#1}{French}{\PLlang@langconfig@french}{}%
    \ifstrequal{#1}{ngerman}{\PLlang@langconfig@german}{}%
    \ifstrequal{#1}{german}{\PLlang@langconfig@german}{}%
    \ifstrequal{#1}{German}{\PLlang@langconfig@german}{}%
    \ifstrequal{#1}{russian}{\PLlang@langconfig@russian}{}%
    \ifstrequal{#1}{Russian}{\PLlang@langconfig@russian}{}%
    #2%
\endgroup%
}

\UseLanguage{English}
%</PLlang>
%
%<*PLlogo>
\SetupKeyvalOptions{
    family = @PLlogo,
    prefix = @PLlogo@,
}
\DeclareBoolOption[false]{draft}
\DeclareBoolOption[false]{fast}
\ProcessKeyvalOptions*\relax
\if@PLlogo@draft
    \@PLlogo@fasttrue
\fi
\if@PLlogo@fast\def\ProjLib{{\normalfont ProjLib}}\endinput\fi

\RequirePackage{xcolor}
\RequirePackage{graphicx}
\RequirePackage{iftex}
% \ifPDFTeX
% \RequirePackage{fontenc}
% \newcommand{\PLlogo@font}{\fontfamily{LinuxBiolinumT-TLF}\selectfont}
% \else
% \RequirePackage{fontspec}
% \newcommand{\PLlogo@font}{\fontspec{LinBiolinum_R.otf}\selectfont}
% \fi
\ifdefined\fontspec
    \newcommand{\PLlogo@font}{\normalfont\fontspec{LinBiolinum_R.otf}\selectfont}
\else
    \PassOptionsToPackage{T1}{fontenc}
    \RequirePackage{fontenc}
    \newcommand{\PLlogo@font}{\normalfont\fontfamily{LinuxBiolinumT-TLF}\selectfont}
\fi
% \DeclareSymbolFont{PLupright}{OT1}{zplm}{b}{n}
\DeclareSymbolFont{PLupright}{U}{zeur}{b}{n}
\DeclareMathSymbol{\PLSigma}{\mathalpha}{PLupright}{"06}

\providecommand*{\ProjLib}{%
\begingroup%
\PLlogo@font%
\color{blue!60!cyan}P%
\color{blue!45!cyan}r%
\color{blue!30!cyan}o%
\color{green!70!black}\j%
% \kern-0.235em\raisebox{0.57em}{\scalebox{0.3}{\rotatebox{-10}{$\PLSigma$}}}%
% \kern-0.01em%
\kern-0.266em\raisebox{0.56em}{\scalebox{0.4}{\rotatebox{-10}{$\PLSigma$}}}%
\kern-0.065em%
\color{red!20!yellow}L%
\color{red!40!yellow}i%
\color{red!60!yellow}b%
\endgroup%
}

\providecommand*{\ProjLibText}{%
\begingroup%
\PLlogo@font%
\color{blue!60!cyan}P%
\color{blue!45!cyan}r%
\color{blue!30!cyan}o%
\color{green!70!black}j%
\color{red!20!yellow}L%
\color{red!40!yellow}i%
\color{red!60!yellow}b%
\endgroup%
}
%</PLlogo>
%
%<*PLpaper>
\RequirePackage{ifthen}

\SetupKeyvalOptions{%
    family = @PLpaper,
    prefix = @PLpaper@,
    setkeys=\kvsetkeys
}

\DeclareStringOption[normal]{paperstyle}
\DeclareVoidOption{yellowpaper}{\kvsetkeys{@PLpaper}{paperstyle=yellow}}
\DeclareVoidOption{darkpaper}{\kvsetkeys{@PLpaper}{paperstyle=dark}}
\DeclareVoidOption{nordpaper}{\kvsetkeys{@PLpaper}{paperstyle=nord}}
\DeclareBoolOption[false]{preview}

\ProcessKeyvalOptions*\relax

%%================================
%% Preview mode
%%================================
\ifdefined\PLnoPreview\else%
    \if@PLpaper@preview%
        \RequirePackage{calc}
        \AtEndPreamble{%
        \setlength{\paperwidth}{\textwidth*\real{1.05}}%
        \setlength{\paperheight}{%
        (\textheight+\headheight+\headsep+\footskip)*\real{1.05}}%
        \setlength{\oddsidemargin}{(\paperwidth-\textwidth)/2-1in}%
        \setlength{\evensidemargin}{(\paperwidth-\textwidth)/2-1in}%
        \setlength{\topmargin}{(\paperheight-\textheight-\headheight-\headsep-\footskip)/2- 1in}%
        }
    \fi
\fi

%%================================
%% Paper color
%%================================
\RequirePackage{xcolor}
\definecolor{paper}{RGB}{255,255,255}
\definecolor{maintext}{RGB}{0,0,0}

\ifthenelse{\equal{\@PLpaper@paperstyle}{yellow}}
{
    \definecolor{paper}{RGB}{247,246,233}
}
{\relax}

\ifthenelse{\equal{\@PLpaper@paperstyle}{dark}}
{
    \definecolor{paper}{RGB}{30,30,30}
    \definecolor{maintext}{RGB}{207,207,207}
}
{\relax}

\ifthenelse{\equal{\@PLpaper@paperstyle}{nord}}
{
    \definecolor{paper}{RGB}{46,52,64}
    \definecolor{maintext}{RGB}{214,220,230}
}
{\relax}

\newcommand{\PLglobalcolor}[1]{%
    \color{#1}\global\let\default@color\current@color
}

\pagecolor{paper}
\PLglobalcolor{maintext}
\ifdefined\tcbset%
    \tcbset{colupper=maintext,collower=maintext}
\fi
%</PLpaper>
%
%<*PLthm>
\SetupKeyvalOptions{%
    family = @PLthm,
    prefix = @PLthm@
}
\DeclareBoolOption[false]{nothms}
\ProcessKeyvalOptions*\relax

\RequirePackage{PLlang}
\RequirePackage{amsmath,amsthm}
\RequirePackage{aliascnt}
\PassOptionsToPackage{nameinlink}{cleveref}
\RequirePackage{cleveref}

% Macro for creating theorems
\RequirePackage{xstring}
\newcommand\PassFirstToSecond[2]{#2{#1}}%
\NewDocumentCommand{\CreateTheorem}{sm}{%
    \begingroup
    \protected@edef\temp{#2}%
    \expandafter\IfEndWith\expandafter{\temp}{*}{%
        \expandafter\StrGobbleRight\expandafter{\temp}{1}[\temp]%
        \PassFirstToSecond{*}%
    }{%
        \PassFirstToSecond{}%
    }%
    {\expandafter\PassFirstToSecond%
        \expandafter{\temp}{\endgroup\InnerCreateTheorem{#1}}}%
}%
\NewDocumentCommand{\InnerCreateTheorem}{mmmod<>d()}{%
% #1 = star or no star
% #2 = name of environment
% #3 = emptiness or star to append to name of environment
% #4 = numbered like
% #5 = numbered within
% #6 = existed environment
    \IfBooleanTF{#1}{%
        \IfValueTF{#4}
            {\@firstoftwo}
            {\IfValueTF{#5}{\@firstoftwo}{\@secondoftwo}}%
    }{%
        \IfValueTF{#4}
            {\IfValueTF{#5}{\@firstoftwo}{\@secondoftwo}}{
            \@secondoftwo}
    }%
    {%
        \GenericError{}%
        {\string\CreateTheorem\space syntax error\on@line}{%
        You cannot call the starred variant with optional argument,\MessageBreak
        nor call the unstarred variant with several optional arguments.}%
        {}%
    }{%
        \IfValueTF{#6}{%
            \IfBooleanTF{#1}{%
                \ifcsmacro{#2#3}%
                {\renewenvironment{#2#3}{\begin{#6*}}{\end{#6*}}}%
                {\newenvironment{#2#3}{\begin{#6*}}{\end{#6*}}}%
            }{%
                \ifcsmacro{#2#3}%
                {\renewenvironment{#2#3}{\begin{#6}}{\end{#6}}}%
                {\newenvironment{#2#3}{\begin{#6}}{\end{#6}}}%
            }
        }{%
            \IfBooleanTF{#1}{%
                \newtheorem*{#2EN#3}{\csname#2nameEN\endcsname}
                \newtheorem*{#2FR#3}{\csname#2nameFR\endcsname}
                \newtheorem*{#2DE#3}{\csname#2nameDE\endcsname}
                \newtheorem*{#2CN#3}{\csname#2nameCN\endcsname}
                \newtheorem*{#2TC#3}{\csname#2nameTC\endcsname}
                \newtheorem*{#2JP#3}{\csname#2nameJP\endcsname}
                \newtheorem*{#2RU#3}{\csname#2nameRU\endcsname}
            }{%
                \IfValueTF{#5}{%
                    \newcounter{#2#3}[{#5}]%
                    \expandafter\renewcommand\expandafter*%
                        \csname the#2#3\expandafter\endcsname%
                        \expandafter{\csname the#5\endcsname.\arabic{#2#3}}%
                }{%
                    \IfValueTF{#4}
                        {\newaliascnt{#2#3}{#4}}
                        {\newcounter{#2#3}}%
                }%
                %---------------------------------------------------------------
                \CreateTheoremNumberedLikeAliasCounter{#2}{EN}{#3}%
                \CreateTheoremNumberedLikeAliasCounter{#2}{FR}{#3}%
                \CreateTheoremNumberedLikeAliasCounter{#2}{DE}{#3}%
                \CreateTheoremNumberedLikeAliasCounter{#2}{CN}{#3}%
                \CreateTheoremNumberedLikeAliasCounter{#2}{TC}{#3}%
                \CreateTheoremNumberedLikeAliasCounter{#2}{JP}{#3}%
                \CreateTheoremNumberedLikeAliasCounter{#2}{RU}{#3}%
                %---------------------------------------------------------------
            }%
            \NewDocumentEnvironment{#2#3}{}
                {\csname#2\csname\languagename ABBR\endcsname#3\endcsname}%
                {\csname end#2\csname\languagename ABBR\endcsname#3\endcsname}%
        }
    }%
}%
\NewDocumentCommand{\CreateTheoremNumberedLikeAliasCounter}{mmm}{%
    \newaliascnt{#1#2#3}{#1#3}%
    \newtheorem{#1#2#3}[{#1#2#3}]{\csname#1name#2\endcsname}%
    \aliascntresetthe{#1#2#3}%
    \crefname{#1#2#3}%
        {\csname#1name#2\endcsname}%
        {\csname#1name#2\endcsname}%
    \Crefname{#1#2#3}%
        {\csname#1name#2\endcsname}%
        {\csname#1name#2\endcsname}%
}%

%% English theorems names
\def\theoremnameEN{Theorem}
\def\lemmanameEN{Lemma}
\def\propositionnameEN{Proposition}
\def\corollarynameEN{Corollary}
\def\propertynameEN{Property}
\def\factnameEN{Fact}
\def\conjecturenameEN{Conjecture}
\def\definitionnameEN{Definition}
\def\axiomnameEN{Axiom}
\def\assumptionnameEN{Assumption}
\def\conventionnameEN{Convention}
\def\hypothesisnameEN{Hypothesis}
\def\notationnameEN{Notation}
\def\examplenameEN{Example}
\def\problemnameEN{Problem}
\def\questionnameEN{Question}
\def\exercisenameEN{Exercise}
\def\remarknameEN{Remark}
\expandafter\def\csname definition-propositionnameEN\endcsname{\definitionnameEN-\propositionnameEN}
\expandafter\def\csname definition-theoremnameEN\endcsname{\definitionnameEN-\theoremnameEN}

%% French theorems names
\def\theoremnameFR{Théorème}
\def\lemmanameFR{Lemme}
\def\propositionnameFR{Proposition}
\def\corollarynameFR{Corollaire}
\def\propertynameFR{Propriété}
\def\factnameFR{Fait}
\def\conjecturenameFR{Conjecture}
\def\definitionnameFR{Définition}
\def\axiomnameFR{Axiome}
\def\assumptionnameFR{Supposition}
\def\conventionnameFR{Convention}
\def\hypothesisnameFR{Hypothèse}
\def\notationnameFR{Notation}
\def\examplenameFR{Exemple}
\def\problemnameFR{Problème}
\def\questionnameFR{Question}
\def\exercisenameFR{Exercice}
\def\remarknameFR{Remarque}
\expandafter\def\csname definition-propositionnameFR\endcsname{\definitionnameFR-\propositionnameFR}
\expandafter\def\csname definition-theoremnameFR\endcsname{\definitionnameFR-\theoremnameFR}

%% German theorems names
\def\theoremnameDE{Satz}
\def\lemmanameDE{Lemma}
\def\propositionnameDE{Proposition}
\def\corollarynameDE{Korollar}
\def\propertynameDE{Eigenschaft}
\def\factnameDE{Fakt}
\def\conjecturenameDE{Vermutung}
\def\definitionnameDE{Definition}
\def\axiomnameDE{Axiom}
\def\assumptionnameDE{Annahme}
\def\conventionnameDE{Konvention}
\def\hypothesisnameDE{Hypothese}
\def\notationnameDE{Notation}
\def\examplenameDE{Beispiel}
\def\problemnameDE{Problem}
\def\questionnameDE{Frage}
\def\exercisenameDE{Übung}
\def\remarknameDE{Bemerkung}
\expandafter\def\csname definition-propositionnameDE\endcsname{\definitionnameDE-\propositionnameDE}
\expandafter\def\csname definition-theoremnameDE\endcsname{\definitionnameDE-\theoremnameDE}

%% Chinese theorems names
\def\theoremnameCN{定理}
\def\lemmanameCN{引理}
\def\propositionnameCN{命题}
\def\corollarynameCN{推论}
\def\propertynameCN{性质}
\def\factnameCN{事实}
\def\conjecturenameCN{猜想}
\def\definitionnameCN{定义}
\def\axiomnameCN{公理}
\def\assumptionnameCN{假设}
\def\conventionnameCN{约定}
\def\hypothesisnameCN{假设}
\def\notationnameCN{记号}
\def\examplenameCN{例}
\def\problemnameCN{问题}
\def\questionnameCN{问题}
\def\exercisenameCN{练习}
\def\remarknameCN{备注}
\expandafter\def\csname definition-propositionnameCN\endcsname{\definitionnameCN-\propositionnameCN}
\expandafter\def\csname definition-theoremnameCN\endcsname{\definitionnameCN-\theoremnameCN}

\def\theoremnameTC{定理}
\def\lemmanameTC{引理}
\def\propositionnameTC{命題}
\def\corollarynameTC{推論}
\def\propertynameTC{性質}
\def\factnameTC{事實}
\def\conjecturenameTC{猜想}
\def\definitionnameTC{定義}
\def\axiomnameTC{公理}
\def\assumptionnameTC{假設}
\def\conventionnameTC{約定}
\def\hypothesisnameTC{假設}
\def\notationnameTC{記號}
\def\examplenameTC{例}
\def\problemnameTC{問題}
\def\questionnameTC{問題}
\def\exercisenameTC{練習}
\def\remarknameTC{備註}
\expandafter\def\csname definition-propositionnameTC\endcsname{\definitionnameTC-\propositionnameTC}
\expandafter\def\csname definition-theoremnameTC\endcsname{\definitionnameTC-\theoremnameTC}

%% Japanese theorems names
\def\theoremnameJP{定理}
\def\lemmanameJP{補題}
\def\propositionnameJP{命題}
\def\corollarynameJP{系}
\def\propertynameJP{性質}
\def\factnameJP{事実}
\def\conjecturenameJP{予想}
\def\definitionnameJP{定義}
\def\axiomnameJP{公理}
\def\assumptionnameJP{仮定}
\def\conventionnameJP{慣例}
\def\hypothesisnameJP{仮設}
\def\notationnameJP{記法}
\def\examplenameJP{例}
\def\problemnameJP{問題}
\def\questionnameJP{問題}
\def\exercisenameJP{練習}
\def\remarknameJP{注釈}
\expandafter\def\csname definition-propositionnameJP\endcsname{\definitionnameJP-\propositionnameJP}
\expandafter\def\csname definition-theoremnameJP\endcsname{\definitionnameJP-\theoremnameJP}

%% Russian theorems names
\def\theoremnameRU{Теорема} % Теоре́ма
\def\lemmanameRU{Лемма} % Ле́мма
\def\propositionnameRU{Предложение} % Предложе́ние
\def\corollarynameRU{Следствие} % Сле́дствие
\def\propertynameRU{Имущество} % Иму́щество
\def\factnameRU{Факт}
\def\conjecturenameRU{Гипотеза} % Гипо́теза
\def\definitionnameRU{Определение} % Определе́ние
\def\axiomnameRU{Аксиома} % Аксио́ма
\def\assumptionnameRU{Предположение} % Предположе́ние
\def\conventionnameRU{Конвенция} % Конве́нция
\def\hypothesisnameRU{Гипотеза} % Гипо́теза
\def\notationnameRU{Нотация} % Нота́ция
\def\examplenameRU{Пример} % Приме́р
\def\problemnameRU{Проблема} % Пробле́ма
\def\questionnameRU{Вопрос} % Вопро́с
\def\exercisenameRU{Упражнение} % Упражне́ние
\def\remarknameRU{Замечание} % Замеча́ние
\expandafter\def\csname definition-propositionnameRU\endcsname{\definitionnameRU-\propositionnameRU}
\expandafter\def\csname definition-theoremnameRU\endcsname{\definitionnameRU-\theoremnameRU}

\newif\ifPLthm@IsBook
\ifdefined\chapter\PLthm@IsBooktrue\else\PLthm@IsBookfalse\fi
\if@PLthm@nothms\else
%% Theorem environments
\ifbool{PLthm@IsBook}{
    \newaliascnt{highest}{chapter}
}{
    \newaliascnt{highest}{section}
}
\CreateTheorem{theorem}<highest>
\CreateTheorem{lemma}[theorem]
\CreateTheorem{proposition}[theorem]
\CreateTheorem{corollary}[theorem]
\CreateTheorem{definition-proposition}[theorem]
\CreateTheorem{definition-theorem}[theorem]
\CreateTheorem{property}[theorem]
\CreateTheorem{fact}[theorem]
\CreateTheorem{conjecture}[theorem]
\CreateTheorem*{theorem*}
\CreateTheorem*{lemma*}
\CreateTheorem*{proposition*}
\CreateTheorem*{corollary*}
\CreateTheorem*{definition-proposition*}
\CreateTheorem*{definition-theorem*}
\CreateTheorem*{property*}
\CreateTheorem*{fact*}
\CreateTheorem*{conjecture*}

\theoremstyle{definition}
\CreateTheorem{definition}[theorem]
\CreateTheorem{axiom}[theorem]
\CreateTheorem{assumption}[theorem]
\CreateTheorem{convention}[theorem]
\CreateTheorem{hypothesis}[theorem]
\CreateTheorem{notation}[theorem]
\CreateTheorem{example}[theorem]
\CreateTheorem{problem}[theorem]
\CreateTheorem{question}[theorem]
\CreateTheorem{exercise}[theorem]
\CreateTheorem*{definition*}
\CreateTheorem*{axiom*}
\CreateTheorem*{assumption*}
\CreateTheorem*{convention*}
\CreateTheorem*{hypothesis*}
\CreateTheorem*{notation*}
\CreateTheorem*{example*}
\CreateTheorem*{problem*}
\CreateTheorem*{question*}
\CreateTheorem*{exercise*}

\theoremstyle{remark}
\CreateTheorem{remark}<highest>
\CreateTheorem*{remark*}
\numberwithin{equation}{highest}
\fi

% Some localization of cref
\gappto{\PLlang@langconfig@chinese}{%
    \crefname{equation}{式}{式}%
    \crefname{figure}{图}{图}%
    \crefname{table}{表}{表}%
    \crefname{appendix}{附录}{附录}%
    \Crefname{equation}{式}{式}%
    \Crefname{figure}{图}{图}%
    \Crefname{table}{表}{表}%
    \Crefname{appendix}{附录}{附录}%
    \def\crefpairconjunction{~和~}%
    \def\crefmiddleconjunction{、}%
    \def\creflastconjunction{~和~}%
    \def\crefpairgroupconjunction{~和~}%
    \def\crefmiddlegroupconjunction{、}%
    \def\creflastgroupconjunction{~和~}%
    \def\crefrangeconjunction{～}%
}
\gappto{\PLlang@langconfig@tchinese}{%
    \crefname{equation}{式}{式}%
    \crefname{figure}{圖}{圖}%
    \crefname{table}{表}{表}%
    \crefname{appendix}{附錄}{附錄}%
    \Crefname{equation}{式}{式}%
    \Crefname{figure}{圖}{圖}%
    \Crefname{table}{表}{表}%
    \Crefname{appendix}{附錄}{附錄}%
    \def\crefpairconjunction{~與~}%
    \def\crefmiddleconjunction{、}%
    \def\creflastconjunction{~與~}%
    \def\crefpairgroupconjunction{~與~}%
    \def\crefmiddlegroupconjunction{、}%
    \def\creflastgroupconjunction{~與~}%
    \def\crefrangeconjunction{～}%
}
\gappto{\PLlang@langconfig@japanese}{%
    \crefname{equation}{式}{式}%
    \crefname{figure}{図}{図}%
    \crefname{table}{表}{表}%
    \Crefname{appendix}{付録}{付録}%
    \Crefname{equation}{式}{式}%
    \Crefname{figure}{図}{図}%
    \Crefname{table}{表}{表}%
    \Crefname{appendix}{付録}{付録}%
    \def\crefpairconjunction{~と~}%
    \def\crefmiddleconjunction{~と~}%
    \def\creflastconjunction{~と~}%
    \def\crefpairgroupconjunction{~と~}%
    \def\crefmiddlegroupconjunction{~と~}%
    \def\creflastgroupconjunction{~と~}%
    \def\crefrangeconjunction{〜}%
}
\gappto{\PLlang@langconfig@russian}{%
    \crefname{equation}{уравнение}{уравнения}%
    \crefname{figure}{рис.}{рис.}%
    \crefname{table}{таблица}{таблицы}%
    \crefname{appendix}{приложение}{приложения}%
    \Crefname{equation}{Уравнение}{Уравнения}%
    \Crefname{figure}{Рис.}{Рис.}%
    \Crefname{table}{Таблица}{Таблицы}%
    \Crefname{appendix}{Приложение}{Приложения}%
    \def\crefpairconjunction{~и~}%
    \def\crefmiddleconjunction{,~}%
    \def\creflastconjunction{~и~}%
    \def\crefpairgroupconjunction{~и~}%
    \def\crefmiddlegroupconjunction{,~}%
    \def\creflastgroupconjunction{~и~}%
    \def\crefrangeconjunction{~\textasciitilde~}%
}
%</PLthm>
%
%<*PLtoolkit>
\SetupKeyvalOptions{
    family = @PLtoolkit,
    prefix = @PLtoolkit@,
}
\DeclareBoolOption[false]{draft}
\DeclareBoolOption[false]{fast}
\DeclareBoolOption[false]{author}
\DeclareBoolOption[false]{amssim}
\DeclareBoolOption[false]{nothms}
\DeclareBoolOption[false]{palatino}
\DeclareBoolOption[false]{times}
\DeclareBoolOption[false]{garamond}
\DeclareBoolOption[false]{biolinum}
\ProcessKeyvalOptions*\relax
\if@PLtoolkit@draft
    \@PLtoolkit@fasttrue
\fi
\if@PLtoolkit@fast
    \PassOptionsToPackage{fast}{PLdate}
    \PassOptionsToPackage{fast}{PLdraft}
    \PassOptionsToPackage{fast}{PLlogo}
\fi
\if@PLtoolkit@nothms
    \PassOptionsToPackage{nothms}{PLthm}
\fi

\if@PLtoolkit@author
    \RequirePackage{PLauthor}
\fi
\if@PLtoolkit@amssim
    \RequirePackage{PLamssim}
\fi
\RequirePackage{PLdate}
\RequirePackage{PLdraft}
\RequirePackage{PLlogo}
\RequirePackage{PLpaper}
\RequirePackage{PLthm}

% \RequirePackage{iftex}
% \ifPDFTeX
% \RequirePackage[T1]{fontenc}
% \RequirePackage{inputenc}
% \fi
%
\RequirePackage{mathtools}

% \PL@font@alreadyset should contain the current font name
% A message can then be shown as: Font "(font name)" has been set
\ifdefined\PL@font@alreadyset\else

\if@PLtoolkit@palatino
    \RequirePackage{amssymb}
    \RequirePackage{mathpazo}
    \PassOptionsToPackage{defaultsups}{newpxtext}
    \RequirePackage{newpxtext}
    \RequirePackage{newpxmath}
    \let\openbox\relax
    \PLsetlinespacing{\setstretch{1.07}}
\fi

\if@PLtoolkit@times
    \RequirePackage{amssymb}
    \PassOptionsToPackage{defaultsups}{newtxtext}
    \RequirePackage{newtxtext}
    \RequirePackage{newtxmath}
    \let\openbox\relax
    \PLsetlinespacing{\setstretch{1.00}}
\fi

\if@PLtoolkit@garamond
    \RequirePackage{amssymb}
    \RequirePackage{ebgaramond-maths}
    \RequirePackage{ebgaramond}
    % \RequirePackage{garamondlibre}
    \PLsetlinespacing{\setstretch{1.00}}
\fi

\if@PLtoolkit@biolinum
    \RequirePackage{amssymb}
    \RequirePackage{mathpazo}
    % \RequirePackage[sansmath]{libertinust1math}
    \ifPDFTeX
        \RequirePackage{biolinum}
        \renewcommand*\familydefault{\biolinum@family}
    \else
        \PassOptionsToPackage{no-math}{fontspec}
        \RequirePackage{fontspec}
        \setmainfont{LinBiolinum_R.otf}[
            BoldFont       = LinBiolinum_RB.otf ,
            ItalicFont     = LinBiolinum_RI.otf ,
            BoldItalicFont = LinBiolinum_RBO.otf ]
    \fi
    \PLsetlinespacing{\setstretch{1.05}}
\fi

\fi

\RequirePackage{microtype}
%</PLtoolkit>

\endinput