summaryrefslogtreecommitdiff
path: root/macros/unicodetex/latex/minimalist/minimalist.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/unicodetex/latex/minimalist/minimalist.dtx')
-rw-r--r--macros/unicodetex/latex/minimalist/minimalist.dtx858
1 files changed, 858 insertions, 0 deletions
diff --git a/macros/unicodetex/latex/minimalist/minimalist.dtx b/macros/unicodetex/latex/minimalist/minimalist.dtx
new file mode 100644
index 0000000000..916fdd5aab
--- /dev/null
+++ b/macros/unicodetex/latex/minimalist/minimalist.dtx
@@ -0,0 +1,858 @@
+% \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.3 of this license or (at your option)
+% any later version. The latest version of this license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of LaTeX version
+% 2005/12/01 or later.
+%
+% \fi
+%
+%<*driver>
+\ProvidesFile{minimalist.dtx}
+%</driver>
+\NeedsTeXFormat{LaTeX2e}[2020-10-01]
+%<*einfart>
+\ProvidesClass{einfart}
+ [2021/03/11 A simple and clear article style]
+%</einfart>
+%<*einfartfast>
+\ProvidesClass{einfartfast}
+ [2021/03/11 A faster but rougher version of einfart]
+%</einfartfast>
+%<*simplivre>
+\ProvidesClass{simplivre}
+ [2021/03/11 A simple and clear book style]
+%</simplivre>
+%<*simplivrefast>
+\ProvidesClass{simplivrefast}
+ [2021/03/11 A faster but rougher version of simplivre]
+%</simplivrefast>
+
+%<*einfart|einfartfast>
+\DeclareOption*{%
+ \PassOptionsToClass{\CurrentOption}{article}}
+\ProcessOptions\relax
+\LoadClass{article}
+%</einfart|einfartfast>
+%<*simplivre|simplivrefast>
+\DeclareOption*{%
+ \PassOptionsToClass{\CurrentOption}{book}}
+\ProcessOptions\relax
+\LoadClass{book}
+%</simplivre|simplivrefast>
+
+\RequirePackage{etoolbox}
+
+%%================================
+%% Fonts
+%%================================
+\RequirePackage{anyfontsize}
+
+%% Title fonts
+\newcommand{\partfont}{\sffamily}
+%<simplivre|simplivrefast>\newcommand{\chapfont}{\sffamily}
+\newcommand{\secfont}{}
+\newcommand{\subsecfont}{}
+%<*einfartfast|simplivrefast>
+
+%% Math fonts
+\RequirePackage{mathpazo}
+%</einfartfast|simplivrefast>
+
+%% English fonts
+\PassOptionsToPackage{no-math}{fontspec}
+\RequirePackage{fontspec}
+\IfFontExistsTF{Palatino Linotype}{%
+ \setmainfont{Palatino Linotype}
+}{
+ \setmainfont{texgyrepagella-regular.otf}[
+ BoldFont = texgyrepagella-bold.otf ,
+ ItalicFont = texgyrepagella-italic.otf ,
+ BoldItalicFont = texgyrepagella-bolditalic.otf ]
+}
+ \setsansfont{SourceSansPro-Regular.otf}[
+ Scale = MatchLowercase,
+ BoldFont = SourceSansPro-Bold.otf ,
+ ItalicFont = SourceSansPro-RegularIt.otf ,
+ BoldItalicFont = SourceSansPro-BoldIt.otf ]
+
+%% Chinese fonts
+\PassOptionsToPackage{fontset=none,scheme=plain}{ctex}
+\RequirePackage{ctex}
+\IfFontExistsTF{FZYouSongS 507R}{%
+ \setCJKmainfont{FZYouSongS 507R}[
+ BoldFont = FZYouSongS 509R ,
+ BoldFeatures = {FakeBold=2} ,
+ ItalicFont = * ,
+ BoldItalicFont = FZYouSongS 509R ,
+ BoldItalicFeatures = {FakeBold=2} ,
+ SmallCapsFont = * ]
+}{
+ \setCJKmainfont{FandolSong-Regular.otf}[
+ BoldFont = FandolSong-Bold.otf ,
+ ItalicFont = FandolKai-Regular.otf ,
+ BoldItalicFont = FandolKai-Regular.otf ,
+ BoldItalicFeatures = {FakeBold=4} ,
+ SmallCapsFont = * ]
+}
+\IfFontExistsTF{FZYouSongS 507R}{%
+ \setCJKmonofont{FZYouSongS 507R}[
+ BoldFont = FZYouSongS 509R ,
+ BoldFeatures = {FakeBold=2} ,
+ ItalicFont = * ,
+ BoldItalicFont = FZYouSongS 509R ,
+ BoldItalicFeatures = {FakeBold=2} ,
+ SmallCapsFont = * ]
+}{
+ \setCJKmonofont{FandolFang-Regular.otf}[
+ BoldFont = * ,
+ BoldFeatures = {FakeBold=4} ,
+ ItalicFont = * ,
+ BoldItalicFont = * ,
+ BoldItalicFeatures = {FakeBold=4} ,
+ SmallCapsFont = * ]
+}
+\IfFontExistsTF{FZYouHeiS 506L}{%
+ \setCJKsansfont{FZYouHeiS 506L}[
+ BoldFont = FZYouHeiS 509R,
+ ItalicFont = * ,
+ BoldItalicFont = FZYouHeiS 509R ,
+ SmallCapsFont = * ]
+}{
+ \setCJKsansfont{FandolHei-Regular.otf}[
+ BoldFont = FandolHei-Bold.otf ,
+ ItalicFont = * ,
+ BoldItalicFont = FandolHei-Bold.otf ,
+ SmallCapsFont = * ]
+}
+%<*einfart|simplivre>
+
+%% Math fonts
+\PassOptionsToPackage
+ {warnings-off={mathtools-colon,mathtools-overbracket}}{unicode-math}
+\RequirePackage{unicode-math}
+\unimathsetup{math-style=ISO}
+\setmathfont{Asana-Math.otf}
+\IfFontExistsTF{Neo Euler}{%
+\setmathfont{Neo Euler} % From https://tex.stackexchange.com/a/425887
+ [range={"0000-"0001,"0020-"007E,
+ "00A0,"00A7-"00A8,"00AC,"00AF,"00B1,"00B4-"00B5,"00B7,
+ "00D7,"00F7,
+ "0131,
+ "0237,"02C6-"02C7,"02D8-"02DA,"02DC,
+ "0300-"030C,"030F,"0311,"0323-"0325,"032E-"0332,"0338,
+ "0391-"0393,"0395-"03A1,"03A3-"03A8,"03B1-"03BB,
+ "03BD-"03C1,"03C3-"03C9,"03D1,"03D5-"03D6,"03F5,
+ "2016,"2018-"2019,"2021,"2026-"202C,"2032-"2037,"2044,
+ "2057,"20D6-"20D7,"20DB-"20DD,"20E1,"20EE-"20EF,
+ "210B-"210C,"210E-"2113,"2118,"211B-"211C,"2126-"2128,
+ "212C-"212D,"2130-"2131,"2133,"2135,"2190-"2199,
+ "21A4,"21A6,"21A9-"21AA,"21BC-"21CC,"21D0-"21D5,
+ "2200,"2202-"2209,"220B-"220C,"220F-"2213,"2215-"221E,
+ "2223,"2225,"2227-"222E,"2234-"2235,"2237-"223D,
+ "2240-"224C,"2260-"2269,"226E-"2279,"2282-"228B,"228E,
+ "2291-"2292,"2295-"2299,"22A2-"22A5,"22C0-"22C5,
+ "22DC-"22DD,"22EF,"22F0-"22F1,
+ "2308-"230B,"2320-"2321,"2329-"232A,"239B-"23AE,
+ "23DC-"23DF,
+ "27E8-"27E9,"27F5-"27FE,"2A0C,"2B1A,
+ "1D400-"1D433,"1D49C,"1D49E-"1D49F,"1D4A2,"1D4A5-"1D4A6,
+ "1D4A9-"1D4AC,"1D4AE-"1D4B5,"1D4D0-"1D4E9,"1D504-"1D505,
+ "1D507-"1D50A,"1D50D-"1D514,"1D516-"1D51C,"1D51E-"1D537,
+ "1D56C-"1D59F,"1D6A8-"1D6B8,"1D6BA-"1D6D2,"1D6D4-"1D6DD,
+ "1D6DF,"1D6E1,"1D7CE-"1D7D7 }]
+}{}
+%</einfart|simplivre>
+
+\RequirePackage[verbose=silent]{microtype}
+
+%%================================
+%% Page layout
+%%================================
+\RequirePackage[heightrounded]{geometry}
+\geometry{
+ papersize={7in,10in},
+ total={40em,60em},
+ hmarginratio=1:1,
+ vmarginratio=1:1,
+ footnotesep=2em plus 2pt minus 2pt,
+}
+
+\RequirePackage{xcolor}
+\definecolor{paper}{RGB}{255,255,255}
+%<*simplivre>
+
+\RequirePackage{tikz}
+\usetikzlibrary{calc,shadings}
+\RequirePackage{tikzpagenodes}% For `current page text area`
+\newcommand{\drawHelpLine}{%
+ \begin{tikzpicture}[remember picture,overlay]
+ \foreach\i in {0,1,...,5}{%
+ \fill[opacity=0.12-0.02*\i]
+ ($(current page text area.north east)
+ +(-\i*0.5em-.025em,-10pt+\i*1.1pt)$)
+ rectangle ($(current page text area.south east)
+ +(-\i*0.5em+.025em,10pt-\i*1.1pt)$);
+ \shade[top color=paper,bottom color=black,opacity=0.12-0.02*\i]
+ ($(current page text area.north east)
+ +(-\i*0.5em-.025em,2pt)$)
+ rectangle ($(current page text area.north east)
+ +(-\i*0.5em+.025em,-10pt+\i*1.1pt)$);
+ \shade[top color=black,bottom color=paper,opacity=0.12-0.02*\i]
+ ($(current page text area.south east)
+ +(-\i*0.5em-.025em,-2pt)$)
+ rectangle ($(current page text area.south east)
+ +(-\i*0.5em+.025em,10pt-\i*1.1pt)$);
+ }
+ \end{tikzpicture}%
+}
+%</simplivre>
+%<*simplivrefast>
+
+\newcommand{\drawHelpLine}{}
+%</simplivrefast>
+
+\RequirePackage{fancyhdr}
+\RequirePackage{extramarks}
+\fancypagestyle{fancy}{
+ \fancyhf{}
+ \if@twoside
+ \fancyfoot[RO]{\small\textcolor{black!30!paper}{\lastrightmark}%
+ ~~\rlap{\textcolor{gray!55!paper}{$|$}~~\thepage}}
+ \fancyfoot[LE]{\small\leavevmode\llap{\thepage%
+ ~~\textcolor{gray!55!paper}{$|$}}%
+ ~~\textcolor{black!30!paper}{\lastleftmark}}
+ \else
+ \fancyfoot[R]{\small\textcolor{black!30!paper}{\lastrightmark}%
+ ~~\rlap{\textcolor{gray!55!paper}{$|$}~~\thepage}}
+ \fi
+ \renewcommand{\headrulewidth}{0pt}
+}
+\pagestyle{fancy}
+
+\fancypagestyle{plain}{
+ \fancyhf{}
+ \if@twoside
+ \fancyfoot[RO]{\small%
+ ~\rlap{\textcolor{gray!55!paper}{$|$}~~\thepage}}
+ \fancyfoot[LE]{\small\leavevmode\llap{\thepage%
+ ~~\textcolor{gray!55!paper}{$|$}}}
+ \else
+ \fancyfoot[R]{\small%
+ ~\rlap{\textcolor{gray!55!paper}{$|$}~~\thepage}}
+ \fi
+ \renewcommand{\headrulewidth}{0pt}
+}
+
+%<*einfart|einfartfast>
+\if@twoside
+ \renewcommand*{\sectionmark}[1]{\markboth{\uppercase{#1}}{}}
+\else
+ \renewcommand*{\sectionmark}[1]{\markboth{\uppercase{#1}}{\uppercase{#1}}}
+\fi
+%</einfart|einfartfast>
+%<*simplivre|simplivrefast>
+\if@twoside
+ \renewcommand{\chaptermark}[1]{\markboth{\uppercase{#1}}{}}
+\else
+ \renewcommand{\chaptermark}[1]{\markboth{\uppercase{#1}}{\uppercase{#1}}}
+\fi
+\renewcommand*{\sectionmark}[1]{%
+ \markright{\raisebox{.03em}{\footnotesize/}%
+ ~\thesection~\raisebox{.03em}{\footnotesize/}~~~#1}}
+
+\fancypagestyle{part}{
+ \fancyhf{}
+ \renewcommand{\headrulewidth}{0pt}
+ \fancyhead[C]{\drawHelpLine}
+}
+
+\addtolength{\headheight}{20pt}
+\addtolength{\topmargin}{-20pt}
+%</simplivre|simplivrefast>
+
+%%================================
+%% Line spacing
+%%================================
+\RequirePackage{setspace}
+\onehalfspacing
+% To avoid `Underfull \vbox (badness 10000)`
+\raggedbottom
+
+\AtEndPreamble{\RequirePackage{parskip}}
+
+%%================================
+%% Line numbers
+%%================================
+\PassOptionsToPackage{pagewise,mathlines}{lineno}
+\RequirePackage{lineno}
+\renewcommand\linenumberfont{\ttfamily\color{gray!15!paper}\footnotesize}
+\setlength\linenumbersep{1em}
+
+\RequirePackage{mathtools}
+
+%% From https://tex.stackexchange.com/a/461192
+% Patch 'normal' math environments:
+\newcommand*\linenomathpatch[1]{%
+ \cspreto{#1}{\linenomath}%
+ \cspreto{#1*}{\linenomath}%
+ \cspreto{end#1}{\endlinenomath}%
+ \cspreto{end#1*}{\endlinenomath}%
+}
+% Patch AMS math environments:
+\newcommand*\linenomathpatchAMS[1]{%
+ \cspreto{#1}{\linenomathAMS}%
+ \cspreto{#1*}{\linenomathAMS}%
+ \csappto{end#1}{\endlinenomath}%
+ \csappto{end#1*}{\endlinenomath}%
+}
+% Define \linenomathAMS depending on whether 'mathlines' option is provided
+\expandafter\ifx\linenomath\linenomathWithnumbers
+ \let\linenomathAMS\linenomathWithnumbers
+% The following line gets rid of an extra line numbers at the bottom:
+ \patchcmd\linenomathAMS{\advance\postdisplaypenalty\linenopenalty}{}{}{}
+\else
+ \let\linenomathAMS\linenomathNonumbers
+\fi
+
+\linenomathpatch{equation}
+\linenomathpatchAMS{gather}
+\linenomathpatchAMS{multline}
+\linenomathpatchAMS{align}
+\linenomathpatchAMS{alignat}
+\linenomathpatchAMS{flalign}
+
+% record whether linenumber has turned on
+\newif\ifLNturnsON
+\def\LocallyStopLineNumbers{\LNturnsONfalse%
+ \ifLineNumbers\LNturnsONtrue\fi\nolinenumbers}
+\def\ResumeLineNumbers{\ifLNturnsON\linenumbers\fi}
+% switch off the line numbers of TOC
+\pretocmd{\tableofcontents}{\LocallyStopLineNumbers}{}{\FAIL}
+\apptocmd{\tableofcontents}{\ResumeLineNumbers}{}{\FAIL}
+% switch off the line numbers of bibliography
+\pretocmd{\thebibliography}{\LocallyStopLineNumbers}{}{\FAIL}
+\apptocmd{\endthebibliography}{\ResumeLineNumbers}{}{\FAIL}
+
+
+%%================================
+%% Title format
+%%================================
+\RequirePackage[explicit,newparttoc]{titlesec}
+\PassOptionsToPackage{normalem}{ulem}
+\RequirePackage{ulem}
+
+%<*einfart|einfartfast>
+%% Part
+\titleformat{\part}[display]
+ {\LocallyStopLineNumbers%
+ \partfont\filleft}
+ {\MakeUppercase{\partname~\protect\thepart}}
+ {.3em}
+ {\fontsize{16}{0}\selectfont\MakeUppercase{#1}}
+ [\ResumeLineNumbers]
+\titleformat{name=\part,numberless}[display]
+ {\LocallyStopLineNumbers%
+ % \phantomsection\addcontentsline{toc}{part}{#1}%
+ \partfont\filleft}
+ {\phantom{\MakeUppercase{\partname}}}
+ {.3em}
+ {\fontsize{16}{0}\selectfont\MakeUppercase{#1}}
+ [\ResumeLineNumbers]
+%% Text after part
+\newcommand{\parttext}[1]{%
+ \LocallyStopLineNumbers%
+ \begin{flushright}%
+ \begin{minipage}{0.833\textwidth}%
+ \color{black!80!paper}\raggedleft#1%
+ \end{minipage}%
+ \end{flushright}%
+ \ResumeLineNumbers%
+}
+%</einfart|einfartfast>
+%<*simplivre|simplivrefast>
+%% Part
+\titleclass{\part}{top} % make part like a chapter
+\titleformat{\part}[display]
+ {\thispagestyle{part}%
+ \LocallyStopLineNumbers%
+ \partfont\filleft}
+ {\MakeUppercase{\partname~\protect\thepart}}
+ {1em}
+ {\fontsize{20}{0}\selectfont\MakeUppercase{#1}}
+ [\ResumeLineNumbers]
+\titleformat{name=\part,numberless}[display]
+ {\thispagestyle{part}%
+ \LocallyStopLineNumbers%
+ % \phantomsection\addcontentsline{toc}{part}{#1}%
+ \partfont\filleft}
+ {\phantom{\MakeUppercase{\partname}}}
+ {1em}
+ {\fontsize{20}{0}\selectfont\MakeUppercase{#1}}
+ [\ResumeLineNumbers]
+\titlespacing*{\part}{0pt}{5em}{6em}
+%% Text after part
+\newcommand{\parttext}[1]{%
+\vfill%
+\LocallyStopLineNumbers%
+\begin{flushright}%
+ \begin{minipage}{0.833\textwidth}%
+ \color{black!80!paper}\raggedleft#1%
+ \end{minipage}%
+\end{flushright}%
+\ResumeLineNumbers%
+\vfill\vfill%
+\cleardoublepage%
+}
+
+%% Chapter
+\titleformat{\chapter}
+ {\thispagestyle{fancy}%
+ \LocallyStopLineNumbers%
+ \color{black!80!paper}\chapfont\fontsize{16}{0}\selectfont}{}{0em}
+ {\rlap{\hspace*{-.5em}{\color{gray!25!paper}%
+ \fontsize{80}{0}\selectfont\raisebox{-7pt}{\thechapter}}}#1}
+ [\ResumeLineNumbers]
+\titleformat{name=\chapter,numberless}
+ {\thispagestyle{fancy}%
+ \LocallyStopLineNumbers%
+ % \phantomsection\addcontentsline{toc}{chapter}{#1}%
+ \color{black!80!paper}\chapfont\fontsize{16}{0}\selectfont}{}{0em}
+ {\rlap{\hspace*{-.5em}{\color{gray!25!paper}%
+ \fontsize{80}{0}\selectfont\normalfont\raisebox{-7pt}{*}}}#1}
+ [\ResumeLineNumbers]
+%</simplivre|simplivrefast>
+
+%% Section
+\newcommand\seculine{\bgroup\markoverwith{\color{gray!55!paper}%
+ \rule[-0.9ex]{2pt}{.6pt}\hspace{-2pt}\rule[-1.2ex]{2pt}{.6pt}}\ULon}
+\renewcommand\thesection{\arabic{section}}
+\titleformat{\section}
+ {\LocallyStopLineNumbers%
+ \secfont\centering}{}{0em}
+ {{\small\textcolor{gray!55!paper}{\raisebox{.03em}{\footnotesize/}}%
+ \,\,\textcolor{black!80!paper}{\arabic{section}}%
+ \,\,\textcolor{gray!55!paper}{\raisebox{.03em}{\footnotesize/}}}\\
+ \seculine{#1}}
+ [\ResumeLineNumbers]
+\titleformat{name=\section,numberless}
+ {\LocallyStopLineNumbers%
+ % \phantomsection\addcontentsline{toc}{section}{#1}%
+ \secfont\centering}{}{0em}
+ {\seculine{#1}}
+ [\ResumeLineNumbers]
+
+%% Subsection
+\newcommand\subseculine{\bgroup\markoverwith{\color{gray!55!paper}%
+ \rule[-1ex]{2pt}{.75pt}}\ULon}
+\renewcommand\thesubsection{%
+ \ifnum\c@section=0\else\arabic{section}.\fi\arabic{subsection}}
+\titleformat{\subsection}
+ {\LocallyStopLineNumbers%
+ \subsecfont}{}{0em}
+ {\subseculine{\thesubsection~\textcolor{gray!55!paper}{$|$}~#1}}
+ [\ResumeLineNumbers]
+\titleformat{name=\subsection,numberless}
+ {\LocallyStopLineNumbers%
+ \subsecfont}{}{0em}
+ {\subseculine{#1}}
+ [\ResumeLineNumbers]
+
+%%================================
+%% TOC format
+%%================================
+\RequirePackage{titletoc}
+\titlecontents{part}
+ [0em]
+ {\addvspace{1.5pc}\filcenter\partfont}
+ {\thecontentslabel\\\uppercase}
+ {}
+ {} % without page number
+ [\addvspace{.5pc}]
+%<*einfart|einfartfast>
+\titlecontents{section}
+ [2em] % i.e., 0em (part) + 2em
+ {\secfont}
+ {\contentslabel{1.75em}}
+ {\hspace*{-1.75em}}
+ {\titlerule*[1em]{\textcolor{gray!30!paper}{.}}\contentspage}
+\titlecontents{subsection}
+ [5em] % i.e., 2em (section) + 3em
+ {\subsecfont}
+ {\contentslabel{2.75em}}
+ {\hspace*{-2.75em}}
+ {\titlerule*[1em]{\textcolor{gray!30!paper}{.}}\contentspage}
+%</einfart|einfartfast>
+%<*simplivre|simplivrefast>
+\titlecontents{chapter}
+ [2em] % i.e., 0em (part) + 2em
+ {\addvspace{.5pc}\chapfont}
+ {\contentslabel{2em}}
+ {\hspace*{-2em}}
+ {\normalfont\titlerule*[1em]{\textcolor{gray!30!paper}{.}}\contentspage}
+\titlecontents{section}
+ [4em] % i.e., 2em (chapter) + 2em
+ {\secfont}
+ {\contentslabel{1.75em}}
+ {\hspace*{-1.75em}}
+ {\titlerule*[1em]{\textcolor{gray!30!paper}{.}}\contentspage}
+\titlecontents{subsection}
+ [7em] % i.e., 4em (section) + 3em
+ {\subsecfont}
+ {\contentslabel{2.75em}}
+ {\hspace*{-2.75em}}
+ {\titlerule*[1em]{\textcolor{gray!30!paper}{.}}\contentspage}
+%</simplivre|simplivrefast>
+
+%%================================
+%% Graphics
+%%================================
+\RequirePackage{graphicx}
+\graphicspath{{images/}}
+\RequirePackage{wrapfig}
+\RequirePackage{caption}
+
+%%================================
+%% Lists
+%%================================
+\RequirePackage{enumitem}
+\setlist{noitemsep,leftmargin=2em}
+\renewcommand\labelitemi{\color{gray!50}$\bullet$}
+
+%%================================
+%% Blank page
+%%================================
+\newcommand{\blinkpagetext}{This page is intentionally left blank}
+\renewcommand{\cleardoublepage}{\relax
+ \clearpage
+ \if@twoside\ifodd\c@page\relax\else
+ \thispagestyle{empty}
+ \newgeometry{centering}
+ \null\vfill
+ \centerline{\large\color{gray!20!paper}\blinkpagetext}
+ \vfill\restoregeometry\newpage\fi\fi}
+
+%%================================
+%% Index
+%%================================
+\RequirePackage{imakeidx}
+% switch off the line numbers of index
+\pretocmd{\printindex}{\LocallyStopLineNumbers}{}{\FAIL}
+\apptocmd{\printindex}{\ResumeLineNumbers}{}{\FAIL}
+
+%%================================
+%% Theorems
+%%================================
+\RequirePackage{amsthm}
+\newtheoremstyle{simple}%
+ {}{}%
+ {\normalfont}{}%
+ {\normalfont}{}%
+ {0pt}%
+ {\thmname{\textsc{#1}}\thmnumber{ #2}\hspace{.4em}%
+ \textcolor{gray!55!paper}{$|$}\hspace{.4em}%
+ \color{gray}\thmnote{\ensuremath{(\text{#3})}~~}\pushQED{\qed}}
+\def\@endtheorem{\popQED\endtrivlist\@endpefalse }
+
+\renewcommand{\qedsymbol}{%
+ \makebox[1em]{\color{gray!55!paper}\rule[-0.1em]{.95em}{.95em}}}
+
+%<einfart|simplivre>\PassOptionsToPackage{hidelinks,linktoc=all}{hyperref}
+\RequirePackage{aliascnt}
+% To solve `Difference between bookmark levels is greater than one`
+%<einfart|simplivre>\RequirePackage{bookmark}
+%<einfart|simplivre>\RequirePackage{hyperref}
+\PassOptionsToPackage{nameinlink}{cleveref}
+\RequirePackage{cleveref}
+\crefdefaultlabelformat{#2#1#3~\aftergroup\ignorespaces}
+
+\newcommand\englishABBR{EN}
+\newcommand\frenchABBR{FR}
+\newcommand\chineseABBR{CN}
+
+%% 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<>}{%
+ % #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
+ \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.}%
+ {}%
+ }{%
+ \IfBooleanTF{#1}{%
+ \newtheorem*{#2EN#3}{\csname#2nameEN\endcsname}
+ \newtheorem*{#2FR#3}{\csname#2nameFR\endcsname}
+ \newtheorem*{#2CN#3}{\csname#2nameCN\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}{CN}{#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}%
+}%
+
+%% English theorems names
+\def\theoremnameEN{\unskip~\textsc{Theorem}}
+\def\lemmanameEN{\unskip~\textsc{Lemma}}
+\def\propositionnameEN{\unskip~\textsc{Proposition}}
+\def\corollarynameEN{\unskip~\textsc{Corollary}}
+\def\factnameEN{\unskip~\textsc{Fact}}
+\def\conjecturenameEN{\unskip~\textsc{Conjecture}}
+\def\definitionnameEN{\unskip~\textsc{Definition}}
+\def\examplenameEN{\unskip~\textsc{Example}}
+\def\problemnameEN{\unskip~\textsc{Problem}}
+\def\remarknameEN{\unskip~\textsc{Remark}}
+
+%% French theorems names
+\def\theoremnameFR{\unskip~\textsc{Théorème}}
+\def\lemmanameFR{\unskip~\textsc{Lemme}}
+\def\propositionnameFR{\unskip~\textsc{Proposition}}
+\def\corollarynameFR{\unskip~\textsc{Corollaire}}
+\def\factnameFR{\unskip~\textsc{Fait}}
+\def\conjecturenameFR{\unskip~\textsc{Conjecture}}
+\def\definitionnameFR{\unskip~\textsc{Définition}}
+\def\examplenameFR{\unskip~\textsc{Exemple}}
+\def\problemnameFR{\unskip~\textsc{Problème}}
+\def\remarknameFR{\unskip~\textsc{Remarque}}
+
+%% Chinese theorems names
+\def\theoremnameCN{定理}
+\def\lemmanameCN{引理}
+\def\propositionnameCN{命题}
+\def\corollarynameCN{推论}
+\def\factnameCN{事实}
+\def\conjecturenameCN{猜想}
+\def\definitionnameCN{定义}
+\def\examplenameCN{例}
+\def\problemnameCN{问题}
+\def\remarknameCN{备注}
+
+%% Theorem environments
+\theoremstyle{simple}
+%<einfart|einfartfast>\CreateTheorem{theorem}<section>
+%<simplivre|simplivrefast>\CreateTheorem{theorem}<chapter>
+\CreateTheorem{lemma}[theorem]
+\CreateTheorem{proposition}[theorem]
+\CreateTheorem{corollary}[theorem]
+\CreateTheorem{fact}[theorem]
+%<einfart|einfartfast>\CreateTheorem{conjecture}<section>
+%<simplivre|simplivrefast>\CreateTheorem{conjecture}<chapter>
+\CreateTheorem*{theorem*}
+\CreateTheorem*{lemma*}
+\CreateTheorem*{proposition*}
+\CreateTheorem*{corollary*}
+\CreateTheorem*{fact*}
+\CreateTheorem*{conjecture*}
+\CreateTheorem{definition}[theorem]
+%<einfart|einfartfast>\CreateTheorem{example}<section>
+%<simplivre|simplivrefast>\CreateTheorem{example}<chapter>
+%<einfart|einfartfast>\CreateTheorem{problem}<section>
+%<simplivre|simplivrefast>\CreateTheorem{problem}<chapter>
+\CreateTheorem*{definition*}
+\CreateTheorem*{example*}
+\CreateTheorem*{problem*}
+%<einfart|einfartfast>\CreateTheorem{remark}<section>
+%<simplivre|simplivrefast>\CreateTheorem{remark}<chapter>
+\CreateTheorem*{remark*}
+
+%%================================
+%% Language configuration
+%%================================
+%<*einfart|simplivre>
+\PassOptionsToPackage{french,english}{babel}
+\RequirePackage{babel}
+\frenchsetup{PartNameFull=false}
+%</einfart|simplivre>
+%<*einfartfast|simplivrefast>
+\RequirePackage{polyglossia}
+\setdefaultlanguage{english}
+\setotherlanguage[frenchpart=false]{french}
+%</einfartfast|simplivrefast>
+
+\newcommand{\minimalist@langconfig@chinese}{%
+ \def\abstractname{摘要}%
+ \def\proofname{证明}%
+ \def\contentsname{目录}%
+ \def\listfigurename{插图}%
+ \def\listtablename{表格}%
+ \def\figurename{图}%
+ \def\tablename{表}%
+ \def\indexname{索引}%
+ \def\appendixname{附录}%
+ \def\bibname{参考文献}%
+ \renewcommand{\languagename}{chinese}%
+}
+\newcommand{\minimalist@langconfig@english}{%
+ \selectlanguage{english}%
+}
+\newcommand{\minimalist@langconfig@french}{%
+ \selectlanguage{french}%
+% The line below is only needed for 'babel'
+%<einfart|simplivre> \def\frenchpartname{Partie}%
+}
+
+\newcommand{\UseLanguageCORE}[1]{%
+ \ifstrequal{#1}{chinese}{\minimalist@langconfig@chinese}{}%
+ \ifstrequal{#1}{Chinese}{\minimalist@langconfig@chinese}{}%
+ \ifstrequal{#1}{english}{\minimalist@langconfig@english}{}%
+ \ifstrequal{#1}{English}{\minimalist@langconfig@english}{}%
+ \ifstrequal{#1}{french}{\minimalist@langconfig@french}{}
+ \ifstrequal{#1}{French}{\minimalist@langconfig@french}{}
+}
+\newcommand{\UseLanguage}[1]{%
+ \ifx\@onlypreamble\@notprerr%
+ \UseLanguageCORE{#1}%
+ \else%
+ \AfterEndPreamble{\UseLanguageCORE{#1}}%
+ \fi%
+}
+
+%%================================
+%% Draft mark
+%%================================
+\def\dnfFont{\ttfamily}
+\def\needgraphFont{\ttfamily}
+
+\def\dnfTextEN{To be finished here}
+\def\needgraphTextEN{A graph is needed here}
+\def\dnfTextFR{À terminer ici}
+\def\needgraphTextFR{Il manque encore un graphique ici}
+\def\dnfTextCN{这里的内容尚未完成}
+\def\needgraphTextCN{这里需要一张图片}
+
+\definecolor{dnfColor}{RGB}{21,122,20}
+\definecolor{needgraphColor}{RGB}{70,130,180}
+
+%<*einfart|simplivre>
+\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,%
+}
+%</einfart|simplivre>
+%<*einfartfast|simplivrefast>
+\newcommand{\plainBox}[2][-paper]{\textcolor{#1}{%
+ \setlength{\fboxsep}{1.5pt}%
+ \setlength{\fboxrule}{1.2pt}%
+ \fbox{#2}}}
+%</einfartfast|simplivrefast>
+
+\NewDocumentCommand{\dnf}{d<>}{%
+ \noindent\plainBox[dnfColor]%
+ {\normalfont\dnfFont\bfseries\small%
+ \csname dnfText\csname\languagename ABBR\endcsname\endcsname%
+ \IfNoValueF{#1}{ : #1}}%
+}
+\NewDocumentCommand{\needgraph}{d<>}{%
+ \par%
+ \centerline{\plainBox[needgraphColor]%
+ {\normalfont\needgraphFont\bfseries\small%
+ \csname needgraphText\csname\languagename ABBR\endcsname\endcsname%
+ \IfNoValueF{#1}{ : #1}}}%
+ \par%
+}
+%<*einfart|einfartfast>
+
+%%================================
+%% Title block style
+%%================================
+\renewcommand{\@maketitle}{%
+ \LocallyStopLineNumbers%
+ \noindent%
+ {\textcolor{gray!55!paper}{\rule{\textwidth}{0.75pt}}}%
+ \vspace{-\parskip}%
+ \begin{flushright}%
+ {\@title}\\\medskip%
+ \color{black!80!paper}%
+ {\small\scshape\@author}\\%
+ {\small\@date}%
+ \end{flushright}%
+ \vspace{-\parskip}%
+ \vspace{-.5\baselineskip}%
+ {\textcolor{gray!55!paper}{\rule{\textwidth}{0.75pt}}\par}%
+ \ResumeLineNumbers%
+}
+\apptocmd{\maketitle}{\thispagestyle{fancy}}{}{\FAIL}
+
+%%================================
+%% Abstract style
+%%================================
+\renewenvironment{abstract}{%
+ \LocallyStopLineNumbers%
+ \begin{flushright}%
+ \textsc{\small\abstractname}\par%
+ \vspace{-.75\baselineskip}%
+ \begin{minipage}[t]{.833\textwidth}%
+ \vspace{0pt}%
+ \color{black!80!paper}%
+ \footnotesize%
+ \parindent=2em
+}{%
+ \end{minipage}%
+ \end{flushright}%
+ \ResumeLineNumbers%
+}
+%</einfart|einfartfast>
+
+\endinput \ No newline at end of file