%%%%%%%%%%%%%%%%%%%%%%
%% start of file `elegantbook.cls'.
%% Copyright 2013-2019 ElegantLaTeX (ddswhu@126.com)
%%
%% This work may be distributed and/or modified freely
%% available at https://ddswhu.me/resource/
% %
%% Last Modification 2018-12-02
%%%%%%%%%%%%%%%%%%%%%
% % !Mode:: "TeX:UTF-8"
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{elegantbook}[2014/01/20 v2.30 ElegantBook document class]

\RequirePackage{kvoptions}
\RequirePackage{etoolbox}
\SetupKeyvalOptions{family=ELEGANT, prefix=ELEGANT@, setkeys=\kvsetkeys}
\newcommand{\ekv}[1]{\kvsetkeys{ELEGANT}{#1}}

% ----- Colors -----
\DeclareStringOption[green]{color}[green]
% ----- backward compatibility
\DeclareVoidOption{green}{\ekv{color = green}}
\DeclareVoidOption{cyan}{\ekv{color = cyan}}
\DeclareVoidOption{blue}{\ekv{color = blue}}
\DeclareVoidOption{nocolor}{\ekv{color = none}}
% ----- Math option -----
\DeclareBoolOption[true]{mathpazo}
\DeclareComplementaryOption{mtpro}{mathpazo}
% ----- Title Style -----
\DeclareStringOption[hang]{titlestyle}[hang]
% ----- backward compatibility
\DeclareVoidOption{hang}{\ekv{titlestyle = hang}}
\DeclareVoidOption{display}{\ekv{titlestyle = display}}
% ----- Default Options -----
\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{book}}

\ProcessKeyvalOptions*\relax
% \ProcessOptions*\relax
\LoadClass[12pt,a4paper,openany]{book}

% ----- Handle Colors -----
%% 章节以及页脚图形

\RequirePackage{xcolor}
\ifdefstring{\ELEGANT@color}{green}{
  \definecolor{main}{RGB}{0,120,2}%
  \definecolor{second}{RGB}{230,90,7}%
  \definecolor{third}{RGB}{0,160,152}%
%  \base{greenbase.pdf}%
}{\relax}

\ifdefstring{\ELEGANT@color}{cyan}{
  \definecolor{main}{RGB}{0,175,152}%
  \definecolor{second}{RGB}{239,126,30}%
  \definecolor{third}{RGB}{120,8,13}%
 % \base{cyanbase.pdf}%
}{\relax}

\ifdefstring{\ELEGANT@color}{blue}{
  \definecolor{main}{RGB}{20,50,104}%
  \definecolor{second}{RGB}{180,50,131}%
  \definecolor{third}{RGB}{7,127,128}%
 % \base{bluebase.pdf}%
}{\relax}

\AtBeginDocument{
\input{base.tex}
}

\providecommand{\base}{
\begin{tikzpicture}[scale=0.3]
\triz{0}{0}
\ellz{128}
\intz{149}
\ellz{170}
\intz{191}
\ellz{212}
\triz{341}{180}
\end{tikzpicture}}
%\newcommand*{\base}{
%}

% ----- Handle Math option -----
\ifELEGANT@mathpazo
  \RequirePackage{mathpazo}
  \newcommand{\mbf}{\mathbf}
\else
  \AtBeginDocument{\usepackage{mtpro2}}
\fi
% ----- Title Style -----
\ifdefstring{\ELEGANT@titlestyle}{hang}{\def\style{hang}}{\relax}
\ifdefstring{\ELEGANT@titlestyle}{display}{\def\style{display}}{\relax}

\newtoks\zhtitle
\newtoks\entitle
\newtoks\email
\newtoks\version
\newtoks\enend
\newtoks\zhend

%%数学字体宏包

%% 常用宏包
\RequirePackage{graphicx}
\RequirePackage{enumerate}
\RequirePackage{amsmath,mathrsfs,amsfonts}
\RequirePackage{booktabs}
\linespread{1.3}

\graphicspath{{./figure/}{./figures/}{./image/}{./images/}{./graphics/}{./graphic/}{./pictures/}{./picture/}}

\newcommand*{\myquote}[1]{\def\@myquote{#1}}

\newcommand*{\logo}[1]{
 \def\@logo{\includegraphics[width=0.5\textwidth]{#1}
 }
}

%% 水印壁纸
\RequirePackage{wallpaper}
\newcommand*{\cover}[1]{\def\@cover{
  \ThisTileWallPaper{\paperwidth}{\paperheight}{#1}
 }
}



%% 页面设置

\RequirePackage{hyperref}

\AtBeginDocument{
  \hypersetup{
    pdftitle = {\the\zhtitle\the\zhend},
    pdfauthor = {\@author}
  }
}

\hypersetup{
			breaklinks,
                   unicode,
			bookmarksnumbered=true,
			bookmarksopen=true,
			pdfsubject=\@author \@title Book,
			pdfkeywords={ElegantBook},
			pdfcreator={XeLaTeX with ElegantBook class},
			colorlinks,
			linkcolor=main,
			plainpages=false,
			pdfstartview=FitH,
			pdfborder={0 0 0},
			linktocpage
}

\RequirePackage{geometry}
\geometry{
			a4paper,
			left=27mm,  %% or inner=23mm
			right=27mm, %% or outer=18mm
			top=25.4mm, bottom=25.4mm,
			headheight=2.17cm,
			headsep=4mm,
			footskip=12mm
}

%%   章节设置
\RequirePackage[center,pagestyles]{titlesec}

\renewcommand{\chaptername}{第 \thechapter 章}

\titleformat{\chapter}[\style]{\bfseries}
{\filcenter\LARGE\enspace\bfseries{\color{main}\chaptername}\enspace}{1pt}{\bfseries\color{main}\LARGE\filcenter}[\filcenter\base]


\titleformat{\section}[hang]{\sffamily}
{\hspace{-2.45em}\Large\bfseries{\color{main}\thesection}\enspace}{1pt}{\color{main}\Large\bfseries\filright}

\titleformat{\subsection}[hang]{\sffamily}
{\large\bfseries\color{main}\thesubsection\enspace}{1pt}{\color{main}\large\bfseries\filright}

\titlespacing{\chapter}{0pt}{0pt}{1.5\baselineskip}
%\titlespacing{\subsection}{0pt}{0.5\baselineskip}{-\baselineskip}


%%中文结构名字
\renewcommand{\contentsname}{目\hspace{2em}录}
\renewcommand{\figurename}{图}
\renewcommand{\tablename}{表}
\renewcommand{\partname}{部分}
\renewcommand{\listfigurename}{\bfseries 插图目录}
\renewcommand{\listtablename}{\bfseries 表格目录}
\renewcommand{\bibname}{\bfseries 参考文献}
\renewcommand{\appendixname}{\bfseries 附\hspace{2em}录}
\renewcommand{\indexname}{\bfseries 索\hspace{2em}引}

\RequirePackage{caption}
\captionsetup{labelfont = bf}

%%字体设置
\RequirePackage{fontenc}
\RequirePackage[no-math,cm-default]{fontspec}
\defaultfontfeatures{Mapping=tex-text}
\RequirePackage{xunicode}
\RequirePackage{xltxtra}
\setmainfont[Ligatures=TeX]{Times New Roman} %  (\textrm)
\setsansfont{Arial} %  (\textsf)
\setmonofont{Courier New}%Palatino Linotype
%-中文字体设置-%
\RequirePackage{xeCJK}
\setCJKmainfont[BoldFont={黑体},ItalicFont={楷体}]{宋体}%方正书宋_GBK Adobe Song Std L华文中宋
\setCJKsansfont[BoldFont={黑体},ItalicFont={楷体}]{楷体}
\setCJKmonofont{楷体}
\XeTeXlinebreaklocale "zh"
\XeTeXlinebreakskip = 0pt plus 1pt



%% 定理\引理\定义样式设置
\RequirePackage{environ}
\RequirePackage{tikz}
\usetikzlibrary{shapes,decorations}

\definecolor{bule}{RGB}{18,29,57}
\definecolor{bablue}{RGB}{248,248,248}

%define the style of tikz etheoremsty
\tikzstyle{etheoremsty}
          =[draw=main, fill=blue!10,very thick,rectangle,
           rounded corners, inner sep=10pt, inner ysep=20pt]
\tikzstyle{etheoremstytitle}
          =[fill=main, text=blue!10]

\tikzstyle{edefinitionsty}
          =[draw=second, fill=yellow!20,very thick,rectangle,
           rounded corners, inner sep=10pt, inner ysep=20pt,
           text=black,fill opacity=0.9]
\tikzstyle{edefinitionstytitle}
         =[fill=second, text=white]

\tikzstyle{epropositionositionsty}
          =[draw=third, fill=bablue,very thick,rectangle,
           rounded corners, inner sep=10pt, inner ysep=20pt,
           text=black,fill opacity=0.9]
\tikzstyle{epropositionositionstytitle}
         =[fill=third, text=white]

%%define the "etheorem" environment
\newcounter{etheorem}[chapter]
\renewcommand{\theetheorem}{\thechapter.\arabic{etheorem}}
\NewEnviron{etheorem}[1][{}]{%
\begin{figure}[!htb]
\noindent\centering
\begin{tikzpicture}
\node[etheoremsty] (box){
     \begin{minipage}{0.93\columnwidth}
        \sffamily\refstepcounter{etheorem}\BODY
     \end{minipage}};
\node[etheoremstytitle,right=10pt] at (box.north west){
     \bf\textsf{Theorem \theetheorem\; #1}};
\node[etheoremstytitle, rounded corners] at (box.east) {$\clubsuit$};
\end{tikzpicture}
\end{figure}}

%%define the "elemma" environment
\newcounter{elemma}[chapter]
\renewcommand{\theelemma}{\thechapter.\arabic{elemma}}
\NewEnviron{elemma}[1][{}]{%
\begin{figure}[!htb]
\noindent\centering
\begin{tikzpicture}
\node[etheoremsty] (box){
     \begin{minipage}{0.93\columnwidth}
        \sffamily\refstepcounter{elemma}\BODY
     \end{minipage}};
\node[etheoremstytitle,right=10pt] at (box.north west){
     \bf\textsf{Lemma \theelemma\; #1}};
\node[etheoremstytitle, rounded corners] at (box.east) {$\clubsuit$};
\end{tikzpicture}
\end{figure}}

%%define the "ecorollary" environment
\newcounter{ecorollary}[chapter]
\renewcommand{\theecorollary}{\thechapter.\arabic{ecorollary}}
\NewEnviron{ecorollary}[1][{}]{%
\begin{figure}[!htb]
\noindent\centering
\begin{tikzpicture}
\node[etheoremsty] (box){
     \begin{minipage}{0.93\columnwidth}
        \sffamily\refstepcounter{ecorollary}\BODY
     \end{minipage}};
\node[etheoremstytitle,right=10pt] at (box.north west){
     \bf\textsf{Corollary \theecorollary\; #1}};
\node[etheoremstytitle, rounded corners] at (box.east) {$\clubsuit$};
\end{tikzpicture}
\end{figure}}

%% define the "proposition" environment
\newcounter{eproposition}[chapter]
\renewcommand{\theeproposition}{\thechapter.\arabic{eproposition}}
\NewEnviron{eproposition}[1][{}]{%
\begin{figure}[!htb]\noindent\centering
\begin{tikzpicture}
\node[epropositionositionsty] (box){
     \begin{minipage}{0.93\columnwidth}
        \sffamily\refstepcounter{eproposition}\BODY
     \end{minipage}};
\node[epropositionositionstytitle,right=10pt] at (box.north west){
     \bf\textsf{Proposition \theeproposition\; #1}};
\node[epropositionositionstytitle, rounded corners] at (box.east) {$\spadesuit$};
\end{tikzpicture}
\end{figure}}


%%define the "edefinition" environment
\newcounter{edefinition}[chapter]
\renewcommand{\theedefinition}{\thechapter.\arabic{edefinition}}
\NewEnviron{edefinition}[1][{}]{%
\begin{figure}[!htb]\noindent\centering
\begin{tikzpicture}
\node [edefinitionsty] (dbox){\begin{minipage}{0.93\textwidth}\itshape\refstepcounter{edefinition}\BODY\end{minipage}};
\node[edefinitionstytitle, right=10pt] at (dbox.north west) {\bf\textsf{Definition \theedefinition\; #1}};
\node[edefinitionstytitle, rounded corners] at (dbox.east) {$\heartsuit$};
\end{tikzpicture}
\end{figure}}


%% Example with counter
\newcounter{example}[chapter]
\renewcommand{\theexample}{\thechapter.\arabic{example}}
\newenvironment{example}{\par\noindent\textbf{Example\,\stepcounter{example}\theexample: }\color{black!90}}{\par}

%% Exercise with counter
\newcounter{exercise}[chapter]
\renewcommand{\theexercise}{\thechapter.\arabic{exercise}}
\newenvironment{exercise}{\par\noindent{\makebox[0pt][r]{\color{main}\ding{50}\;\;}}\textbf{Exercise\,\stepcounter{exercise}\theexercise: }}{\par}

%%define the note and eproof environment
\RequirePackage{pifont,manfnt}
\newenvironment{note}{\par\itshape\noindent{\makebox[0pt][r]{\scriptsize\color{red!90}\textdbend\quad}\textbf{Note:}}}{\par}

\newenvironment{remark}{\par\itshape\noindent{\makebox[0pt][r]{\color{red!90}\ding{96}\quad}\textbf{Remarks:}}}{\par}


\newenvironment{assumption}{\par\noindent\textbf{Assumptions: }\color{black!90}}{\par}

\newenvironment{conclusion}{\par\noindent\textbf{Conclusions: }}{\par}

\newenvironment{property}{\par\noindent\textbf{Properties: }}{\par}

\newenvironment{eproof}{\par\noindent{\makebox[0pt][r]{\color{main}\ding{43}\;\;}\textbf{Proof:}}\color{black!90}\small}{\hfill$\Box$\quad\par}

\newenvironment{solution}{\par\noindent{\makebox[0pt][r]{\color{main}\ding{46}\;\;}\textbf{Solution:}}\small}{\hfill$\Box$\quad\par}

\newenvironment{custom}[1]{\par\noindent{\makebox[0pt][r]{\color{main}\ding{34}\;\;}\textbf{#1:}}\small}{\par}
%页眉页脚

\RequirePackage{fancyhdr}
\RequirePackage{lastpage}
\fancyhf{}
\fancyhead[EL,OR]{\color{main}--\thepage/\pageref{LastPage}--}
\fancyhead[ER]{\color{main}\em\nouppercase\leftmark{}}
\fancyhead[OL]{\color{main}\em\nouppercase\rightmark}
\fancyfoot[c]{\base}
\renewcommand{\headrule}{\color{main}\hrule width\textwidth}
\pagestyle{fancy}

\fancypagestyle{plain}{\renewcommand{\headrulewidth}{0pt}\fancyhf{}\renewcommand{\headrule}{}}
\renewcommand{\sectionmark}[1]{\markright{\thesection\; #1}{} }
\renewcommand{\chaptermark}[1]{\markboth{\chaptername \; #1\;}{}}



%\let\origdoublepage\cleardoublepage
%\newcommand{\clearemptydoublepage}{%
%  \clearpage
%  {\pagestyle{empty}\origdoublepage}%
%}
%\let\cleardoublepage\clearemptydoublepage

%\RequirePackage{nextpage}
%\cleartooddpage[\thispagestyle{empty}]
%\cleartoevenpage[\thispagestyle{empty}]
%%封面

\def\maketitle{%
\thispagestyle{empty}
% \@cover
\vfill
\vspace*{2cm}
\begin{center}
\color{second}
\rule{0.8\textwidth}{2pt}\\
\Huge {\color{main} \bfseries \the\entitle } {\color{second} \bfseries \the\enend}\\
{\Huge \bfseries{\color{main} \the\zhtitle } \the\zhend}\\
\rule{0.8\textwidth}{2pt}
\end{center}
\vskip3ex
\begin{figure}[htp]
\centering
\@logo
\end{figure}
\begin{center}
\begin{minipage}{0.65\textwidth}
\Eindent\color{bule}\@myquote
\end{minipage}
\end{center}
\vfill
\vspace{2cm}
\begin{flushright}
\color{second}
\rule{0.45\textwidth}{1pt}\\
作者：{\color{main}\@author}\\
时间：{\color{main}\today}\\
邮箱: \hyperlink{\the\email}{\the\email}\\
\rule{0.45\textwidth}{1pt}
\end{flushright}
\vfill
\begin{center}
\color{second} Version: \the\version
\end{center}
\vfil\eject
}


%%中文两个字符缩进
%----字宽/缩进-----
%----CJK字符宽度
%\f@size = 当前字符大小数值（pt/pt）
%\p@ = 1pt
\def\elegant@CJKChar@size{\hskip \f@size \p@}
%----定义字宽
%字宽 = 字符宽度 + 字符间距 = 相邻字符中心的间距
\newdimen\elegant@CJKChar@size@dimen
\settowidth\elegant@CJKChar@size@dimen{\elegant@CJKChar@size\CJKglue}
%----用户接口
%负责刷新字宽和段落缩进
\newcommand{\CJKsetfontspace}{%
%刷新字宽
\settowidth\elegant@CJKChar@size@dimen{\elegant@CJKChar@size\CJKglue}%
%刷新段落缩进
%判断段落缩进是否被设置为0（如果是表示要求不缩进）
\ifdim\parindent=0pt%
\relax%
\else%
\parindent2\elegant@CJKChar@size@dimen%
\fi%
}
\newcommand{\Eindent}{\CJKsetfontspace\parindent2\elegant@CJKChar@size@dimen}
\newcommand{\Enoindent}{\parident\z@}
%----自动执行
\AtBeginDocument{\Eindent}



