我一直梦想着用这个expl3
语法重写我现有的类,因为(我相信)到那时代码会更清晰,也更容易维护。一年前,我在本网站搜索时,看到了这个问题,在花了一个小时阅读文档后,我放弃了。看着文档expl3
,然后看着用经典 LaTeX2e 语法编写的课程,我感到完全迷失了方向,不知道从哪里开始。之后,我搁置了我的计划。
就在几个小时前,我很高兴发现了一门新课程,叫做easybook
在 ctan 上,它几乎完全用语法编写expl3
。我忍不住查看它的代码,看看我是否可以从中学到一些东西,帮助我过渡。然而,代码对我来说看起来很陌生。我仍然不知道从哪里开始写我自己的课程。
由于业余时间有限,我无法花费数天和数小时浏览数百页的技术文档来了解每个命令的用途,而是寻找一种以最小的努力和较少的痛苦完成这一转变的方法,并且只有在对语法有所了解后才进行详细研究。
以下是我班级的当前代码。你能帮我开始这项工作吗?欢迎任何帮助或建议。
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{simplivre}
[2021/03/09 A simple and clear book style]
\DeclareOption*{%
\PassOptionsToClass{\CurrentOption}{book}}
\ProcessOptions\relax
\LoadClass{book}
\RequirePackage{etoolbox}
%%================================
%% Fonts
%%================================
\RequirePackage{anyfontsize}
%% Title fonts
\newcommand{\partfont}{\sffamily}
\newcommand{\chapfont}{\sffamily}
\newcommand{\secfont}{}
\newcommand{\subsecfont}{}
%% 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 = * ]
}
%% 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}
[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 }]
}{}
\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}
\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}%
}
\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}
}
\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}
%%================================
%% Line spacing
%%================================
\RequirePackage{setspace}
\onehalfspacing
\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}
\newcommand*\linenomathpatch[1]{%
\cspreto{#1}{\linenomath}%
\cspreto{#1*}{\linenomath}%
\cspreto{end#1}{\endlinenomath}%
\cspreto{end#1*}{\endlinenomath}%
}
\newcommand*\linenomathpatchAMS[1]{%
\cspreto{#1}{\linenomathAMS}%
\cspreto{#1*}{\linenomathAMS}%
\csappto{end#1}{\endlinenomath}%
\csappto{end#1*}{\endlinenomath}%
}
\expandafter\ifx\linenomath\linenomathWithnumbers
\let\linenomathAMS\linenomathWithnumbers
\patchcmd\linenomathAMS{\advance\postdisplaypenalty\linenopenalty}{}{}{}
\else
\let\linenomathAMS\linenomathNonumbers
\fi
\linenomathpatch{equation}
\linenomathpatchAMS{gather}
\linenomathpatchAMS{multline}
\linenomathpatchAMS{align}
\linenomathpatchAMS{alignat}
\linenomathpatchAMS{flalign}
\newif\ifLNturnsON
\def\LocallyStopLineNumbers{\LNturnsONfalse%
\ifLineNumbers\LNturnsONtrue\fi\nolinenumbers}
\def\ResumeLineNumbers{\ifLNturnsON\linenumbers\fi}
\pretocmd{\tableofcontents}{\LocallyStopLineNumbers}{}{\FAIL}
\apptocmd{\tableofcontents}{\ResumeLineNumbers}{}{\FAIL}
\pretocmd{\thebibliography}{\LocallyStopLineNumbers}{}{\FAIL}
\apptocmd{\endthebibliography}{\ResumeLineNumbers}{}{\FAIL}
%%================================
%% Title format
%%================================
\RequirePackage[explicit,newparttoc]{titlesec}
\PassOptionsToPackage{normalem}{ulem}
\RequirePackage{ulem}
%% 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]
%% 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}]
\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}
%%================================
%% 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}
\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}}}
\PassOptionsToPackage{hidelinks,linktoc=all}{hyperref}
\RequirePackage{aliascnt}
\RequirePackage{bookmark}
\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{\textsc{Theorem}}
\def\lemmanameEN{\textsc{Lemma}}
\def\propositionnameEN{\textsc{Proposition}}
\def\corollarynameEN{\textsc{Corollary}}
\def\factnameEN{\textsc{Fact}}
\def\conjecturenameEN{\textsc{Conjecture}}
\def\definitionnameEN{\textsc{Definition}}
\def\examplenameEN{\textsc{Example}}
\def\problemnameEN{\textsc{Problem}}
\def\remarknameEN{\textsc{Remark}}
%% French theorems names
\def\theoremnameFR{\textsc{Théorème}}
\def\lemmanameFR{\textsc{Lemme}}
\def\propositionnameFR{\textsc{Proposition}}
\def\corollarynameFR{\textsc{Corollaire}}
\def\factnameFR{\textsc{Fait}}
\def\conjecturenameFR{\textsc{Conjecture}}
\def\definitionnameFR{\textsc{Définition}}
\def\examplenameFR{\textsc{Exemple}}
\def\problemnameFR{\textsc{Problème}}
\def\remarknameFR{\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}
\CreateTheorem{theorem}<chapter>
\CreateTheorem{lemma}[theorem]
\CreateTheorem{proposition}[theorem]
\CreateTheorem{corollary}[theorem]
\CreateTheorem{fact}[theorem]
\CreateTheorem{conjecture}<chapter>
\CreateTheorem*{theorem*}
\CreateTheorem*{lemma*}
\CreateTheorem*{proposition*}
\CreateTheorem*{corollary*}
\CreateTheorem*{fact*}
\CreateTheorem*{conjecture*}
\CreateTheorem{definition}[theorem]
\CreateTheorem{example}<chapter>
\CreateTheorem{problem}<chapter>
\CreateTheorem*{definition*}
\CreateTheorem*{example*}
\CreateTheorem*{problem*}
\CreateTheorem{remark}<chapter>
\CreateTheorem*{remark*}
%%================================
%% Language configuration
%%================================
\PassOptionsToPackage{french,english}{babel}
\RequirePackage{babel}
\frenchsetup{PartNameFull=false}
\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}%
\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}
\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,%
}
\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%
}
\endinput