From a892f739b50b6ddc5321c834017cdcbc42a3f056 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Fri, 18 Mar 2022 03:01:39 +0000 Subject: CTAN sync 202203180301 --- macros/unicodetex/latex/einfart/README.md | 2 + macros/unicodetex/latex/einfart/einfart.cls | 1221 +++++++++++++---------- macros/unicodetex/latex/simplivre/README.md | 2 + macros/unicodetex/latex/simplivre/simplivre.cls | 1221 +++++++++++++---------- 4 files changed, 1346 insertions(+), 1100 deletions(-) (limited to 'macros/unicodetex') diff --git a/macros/unicodetex/latex/einfart/README.md b/macros/unicodetex/latex/einfart/README.md index 18ef21279f..591c2285c8 100644 --- a/macros/unicodetex/latex/einfart/README.md +++ b/macros/unicodetex/latex/einfart/README.md @@ -2,6 +2,8 @@ # `einfart` : write you articles in a simple and clear way +**The current document class have been rewritten with `expl3`. Please note that the documentations are not yet up-to-date. The syntax of some commands have been changed since the last version, especially the declaration of theorem-like environments by `\CreateTheorem`. For the moment, you can refer to the documentation of the package `create-theorem`.** + `einfart` is a LaTeX class for typesetting articles, which has a simple and clear design. diff --git a/macros/unicodetex/latex/einfart/einfart.cls b/macros/unicodetex/latex/einfart/einfart.cls index 1be1a1d20e..38fe5550d1 100644 --- a/macros/unicodetex/latex/einfart/einfart.cls +++ b/macros/unicodetex/latex/einfart/einfart.cls @@ -2,7 +2,7 @@ %% This is file `einfart/einfart.cls', %% generated with the docstrip utility. -%% Copyright (C) 2021 by Jinwen XU +%% Copyright (C) 2021-2022 by Jinwen XU %% %% This is part of the minimalist class series. %% @@ -16,564 +16,685 @@ %% 2005/12/01 or later. %% \NeedsTeXFormat{LaTeX2e}[2020-10-01] -\ProvidesClass{einfart} - [2021/12/16 A simple and clear article style] -\def\minimclass@baseclass{article} -\RequirePackage{kvoptions} -\RequirePackage{etoolbox} -\SetupKeyvalOptions{ - family = @minimclass, - prefix = @minimclass@, -} -\DeclareBoolOption[false]{draft} -\DeclareBoolOption[false]{fast} -\DeclareBoolOption[false]{classical} -\DeclareBoolOption[false]{useindent} -\DeclareBoolOption[false]{useosf} -\DeclareBoolOption[false]{lmodern} -\DeclareBoolOption[false]{palatino} -\DeclareBoolOption[false]{times} -\DeclareBoolOption[false]{garamond} -\DeclareBoolOption[false]{noto} -\DeclareBoolOption[false]{biolinum} -\DeclareBoolOption[false]{customfont} -\DeclareStringOption{thmnum}[PJL@thmnum@default] - -\newif\if@minimclass@bfivepaper\@minimclass@bfivepaperfalse -\DeclareVoidOption{b5paper}{\@minimclass@bfivepapertrue} -\newif\if@minimclass@afourpaper\@minimclass@afourpaperfalse -\DeclareVoidOption{a4paper}{\@minimclass@afourpapertrue} - -\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{\minimclass@baseclass}} -\ProcessKeyvalOptions*\relax -\LoadClass{\minimclass@baseclass} - -\if@minimclass@draft - \@minimclass@fasttrue -\fi -\if@minimclass@classical\else - \@minimclass@useindenttrue -\fi -\if@minimclass@lmodern - \@minimclass@customfonttrue -\fi -\if@minimclass@palatino - \@minimclass@customfonttrue -\fi -\if@minimclass@times - \@minimclass@customfonttrue -\fi -\if@minimclass@garamond - \@minimclass@customfonttrue -\fi -\if@minimclass@noto - \@minimclass@customfonttrue -\fi -\if@minimclass@biolinum - \@minimclass@customfonttrue -\fi +\RequirePackage{l3keys2e} +\ProvidesExplClass + {einfart} + {2022/03/17} {} + {A simple and clear article style} + +\tl_const:Nn \l__minimclass_base_class_tl { article } + + +\bool_new:N \l__minimclass_load_custom_font_file_bool +\bool_set_false:N \l__minimclass_load_custom_font_file_bool + +\bool_new:N \l__minimclass_load_custom_font_file_latin_bool +\bool_set_false:N \l__minimclass_load_custom_font_file_latin_bool + +\bool_new:N \l__minimclass_load_custom_font_file_cjk_bool +\bool_set_false:N \l__minimclass_load_custom_font_file_cjk_bool + +\bool_new:N \l__minimclass_load_custom_font_file_math_bool +\bool_set_false:N \l__minimclass_load_custom_font_file_math_bool + +\keys_define:nn { minimclass } + { + , draft .bool_set:N = \l__minimclass_fast_bool + , draft .initial:n = { false } + , fast .bool_set:N = \l__minimclass_fast_bool + + , classical .bool_set:N = \l__minimclass_classical_bool + , classical .initial:n = { false } + + , use indent .bool_set:N = \l__minimclass_useindent_bool + , use indent .initial:n = { true } + , use~indent .bool_set:N = \l__minimclass_useindent_bool + , use-indent .bool_set:N = \l__minimclass_useindent_bool + + , load custom font file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_bool + \str_set:Nn \l__minimclass_custom_font_file_str { #1 } + \bool_set_true:N \l__minimclass_load_custom_font_file_latin_bool + \str_set:Nn \l__minimclass_custom_font_file_latin_str { minimalist.font.latin } + \bool_set_true:N \l__minimclass_load_custom_font_file_cjk_bool + \str_set:Nn \l__minimclass_custom_font_file_cjk_str { minimalist.font.cjk } + \bool_set_true:N \l__minimclass_load_custom_font_file_math_bool + \str_set:Nn \l__minimclass_custom_font_file_math_str { minimalist.font.math } + } + , load custom font file .default:n = { minimalist.font } + , load~custom~font~file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_bool + \str_set:Nn \l__minimclass_custom_font_file_str { #1 } + } + , load~custom~font~file .default:n = { minimalist.font } + , load-custom-font-file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_bool + \str_set:Nn \l__minimclass_custom_font_file_str { #1 } + } + , load-custom-font-file .default:n = { minimalist.font } + + , load custom latin font file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_latin_bool + \str_set:Nn \l__minimclass_custom_font_file_latin_str { #1 } + } + , load custom latin font file .default:n = { minimalist.font.latin } + , load~custom~latin~font~file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_latin_bool + \str_set:Nn \l__minimclass_custom_font_file_latin_str { #1 } + } + , load~custom~latin~font~file .default:n = { minimalist.font.latin } + , load-custom-latin-font-file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_latin_bool + \str_set:Nn \l__minimclass_custom_font_file_latin_str { #1 } + } + , load-custom-latin-font-file .default:n = { minimalist.font.latin } + + , load custom cjk font file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_cjk_bool + \str_set:Nn \l__minimclass_custom_font_file_cjk_str { #1 } + } + , load custom cjk font file .default:n = { minimalist.font.cjk } + , load~custom~cjk~font~file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_cjk_bool + \str_set:Nn \l__minimclass_custom_font_file_cjk_str { #1 } + } + , load~custom~cjk~font~file .default:n = { minimalist.font.cjk } + , load-custom-cjk-font-file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_cjk_bool + \str_set:Nn \l__minimclass_custom_font_file_cjk_str { #1 } + } + , load-custom-cjk-font-file .default:n = { minimalist.font.cjk } + + , load custom math font file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_math_bool + \str_set:Nn \l__minimclass_custom_font_file_math_str { #1 } + } + , load custom math font file .default:n = { minimalist.font.math } + , load~custom~math~font~file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_math_bool + \str_set:Nn \l__minimclass_custom_font_file_math_str { #1 } + } + , load~custom~math~font~file .default:n = { minimalist.font.math } + , load-custom-math-font-file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_math_bool + \str_set:Nn \l__minimclass_custom_font_file_math_str { #1 } + } + , load-custom-math-font-file .default:n = { minimalist.font.math } + + , a4paper .bool_set:N = \l__minimclass_a_four_paper_bool + , a4paper .initial:n = { false } + , b5paper .bool_set:N = \l__minimclass_b_five_paper_bool + , b5paper .initial:n = { false } + + , 11pt .code:n = { \PassOptionsToClass { \CurrentOption } { \l__minimclass_base_class_tl } } + , 12pt .code:n = { \PassOptionsToClass { \CurrentOption } { \l__minimclass_base_class_tl } } + + , unknown .code:n = { + \PassOptionsToPackage { \CurrentOption } { minimalist } + } + } +\ProcessKeysOptions { minimclass } + +\LoadClass{\l__minimclass_base_class_tl} + +\bool_if:NT \l__minimclass_classical_bool + { + \bool_set_false:N \l__minimclass_useindent_bool + } %%================================ -%% Page layout +%% Page layout %%================================ -\RequirePackage{silence} -\WarningFilter{geometry}{Over-specification in} -\RequirePackage[heightrounded]{geometry} -\geometry{ - papersize={7in,10in}, - % total={40em,60em}, - total={5.535in,8.300in}, - hmarginratio=1:1, - vmarginratio=1:1, - footnotesep=2em plus 2pt minus 2pt, -} -\if@minimclass@bfivepaper -\geometry{ - b5paper, - % total={40em,59em}, - total={5.535in,8.160in}, - hmarginratio=1:1, - vmarginratio=1:1, - footnotesep=2em plus 2pt minus 2pt, -} -\fi -\if@minimclass@afourpaper -\geometry{ - a4paper, - % total={47em,70em}, - total={6.500in,9.685in}, - hmarginratio=1:1, - vmarginratio=1:1, - footnotesep=2em plus 2pt minus 2pt, -} -\fi - -\if@minimclass@fast - \PassOptionsToPackage{fast}{minimalist} - \RequirePackage{draftwatermark} - \DraftwatermarkOptions{text={\normalfont DRAFT},color=paper!95!-paper} -\fi -\if@minimclass@useindent - \RequirePackage{indentfirst} -\else - \AtEndPreamble{\RequirePackage{parskip}} -\fi -\RequirePackage{minimalist} +\RequirePackage { silence } +\WarningFilter { geometry } { Over-specification } + +\PassOptionsToPackage { heightrounded } { geometry } +\RequirePackage { geometry } + +\geometry + { + papersize = { 7in, 10in }, + total = { 5.535in, 8.300in }, + centering, + footnotesep = 2em plus 2pt minus 2pt, + } + +\bool_if:NT \l__minimclass_b_five_paper_bool + { + \geometry + { + b5paper, + total = { 5.535in, 8.160in }, + centering, + footnotesep = 2em plus 2pt minus 2pt, + } + } + +\bool_if:NT \l__minimclass_a_four_paper_bool + { + \geometry + { + a4paper, + total = { 6.500in, 9.685in }, + centering, + footnotesep = 2em plus 2pt minus 2pt, + } + } + +\bool_if:NT \l__minimclass_fast_bool + { + \PassOptionsToPackage { fast } { minimalist } + \RequirePackage { draftwatermark } + \DraftwatermarkOptions { text = { \normalfont DRAFT }, color = paper!97!-paper } + } + +\bool_if:NTF \l__minimclass_useindent_bool + { + \RequirePackage { indentfirst } + } + { + \hook_gput_code:nnn { begindocument/before } { minimclass } + { + \RequirePackage { parskip } + } + } + +\RequirePackage { minimalist } %%================================ -%% Fonts +%% Fonts %%================================ -\if@minimclass@customfont\else - \if@minimclass@fast - \RequirePackage{mathpazo} - \fi -\fi - -\PassOptionsToPackage{no-math,quiet}{fontspec} -\RequirePackage{fontspec} - -\IfFileExists{minimalist-font.tex}{ - \input{minimalist-font.tex} -}{ -\IfFontExistsTF{Palatino Linotype}{% - \setmainfont{Palatino Linotype} - [\if@minimclass@useosf Numbers = OldStyle\fi] -}{ - \setmainfont{TeXGyrePagellaX-Regular.otf}[ - BoldFont = TeXGyrePagellaX-Bold.otf , - ItalicFont = TeXGyrePagellaX-Italic.otf , - BoldItalicFont = TeXGyrePagellaX-BoldItalic.otf, - \if@minimclass@useosf Numbers = OldStyle\fi ] -} - \setsansfont{SourceSansPro-Regular.otf}[ - Scale = MatchLowercase , - BoldFont = SourceSansPro-Bold.otf , - ItalicFont = SourceSansPro-RegularIt.otf , - BoldItalicFont = SourceSansPro-BoldIt.otf ] - \setmonofont{NewCMMono10-Regular.otf}[ - Scale = 1.05 , - BoldFont = NewCMMono10-Bold.otf , - ItalicFont = NewCMMono10-Italic.otf , - BoldItalicFont = NewCMMono10-BoldOblique.otf ] -} - -\PassOptionsToPackage{fontset=none,scheme=plain}{ctex} -\RequirePackage{ctex} - -\IfFileExists{minimalist-font.cjk.tex}{ - \input{minimalist-font.cjk.tex} -}{ -\IfFontExistsTF{SourceHanSerifSC-Regular}{% - \setCJKmainfont{SourceHanSerifSC-Regular}[ - BoldFont = SourceHanSerifSC-Bold , - ItalicFont = * , - BoldItalicFont = SourceHanSerifSC-Bold ] -}{ - \setCJKmainfont{FandolSong-Regular.otf}[ - BoldFont = FandolSong-Bold.otf , - ItalicFont = FandolKai-Regular.otf , - BoldItalicFont = FandolKai-Regular.otf , - BoldItalicFeatures = {FakeBold=4} ] -} - -\IfFontExistsTF{SourceHanSansSC-Regular}{% - \setCJKsansfont{SourceHanSansSC-Regular}[ - BoldFont = SourceHanSansSC-Bold , - ItalicFont = * , - BoldItalicFont = SourceHanSansSC-Bold ] -}{ - \setCJKsansfont{FandolHei-Regular.otf}[ - BoldFont = FandolHei-Bold.otf , - ItalicFont = * , - BoldItalicFont = FandolHei-Bold.otf ] -} - -\IfFontExistsTF{SourceHanMonoSC-Regular}{% - \setCJKmonofont{SourceHanMonoSC-Regular}[ - BoldFont = SourceHanMonoSC-Medium , - ItalicFont = * , - BoldItalicFont = SourceHanMonoSC-Medium ] -}{ - \setCJKmonofont{FandolFang-Regular.otf}[ - BoldFont = * , - BoldFeatures = {FakeBold=4} , - ItalicFont = * , - BoldItalicFont = * , - BoldItalicFeatures = {FakeBold=4} ] -} - -\if@PJLlang@enable@CN -\IfFontExistsTF{SourceHanSerifSC-Regular}{% - \setCJKfamilyfont{SCmain}{SourceHanSerifSC-Regular}[ - BoldFont = SourceHanSerifSC-Bold , - ItalicFont = * , - BoldItalicFont = SourceHanSerifSC-Bold ] -}{ - \setCJKfamilyfont{SCmain}{FandolSong-Regular.otf}[ - BoldFont = FandolSong-Bold.otf , - ItalicFont = FandolKai-Regular.otf , - BoldItalicFont = FandolKai-Regular.otf , - BoldItalicFeatures = {FakeBold=4} ] -} -\IfFontExistsTF{SourceHanSansSC-Regular}{% - \setCJKfamilyfont{SCsans}{SourceHanSansSC-Regular}[ - BoldFont = SourceHanSansSC-Bold , - ItalicFont = * , - BoldItalicFont = SourceHanSansSC-Bold ] -}{ - \setCJKfamilyfont{SCsans}{FandolHei-Regular.otf}[ - BoldFont = FandolHei-Bold.otf , - ItalicFont = * , - BoldItalicFont = FandolHei-Bold.otf ] -} -\IfFontExistsTF{SourceHanMonoSC-Regular}{% - \setCJKfamilyfont{SCmono}{SourceHanMonoSC-Regular}[ - BoldFont = SourceHanMonoSC-Medium , - ItalicFont = * , - BoldItalicFont = SourceHanMonoSC-Medium ] -}{ - \setCJKfamilyfont{SCmono}{FandolFang-Regular.otf}[ - BoldFont = * , - BoldFeatures = {FakeBold=4} , - ItalicFont = * , - BoldItalicFont = * , - BoldItalicFeatures = {FakeBold=4} ] -} -\fi - -\if@PJLlang@enable@TC -\IfFontExistsTF{SourceHanSerifTC-Regular}{% - \setCJKfamilyfont{TCmain}{SourceHanSerifTC-Regular}[ - BoldFont = SourceHanSerifTC-Bold , - ItalicFont = * , - BoldItalicFont = SourceHanSerifTC-Bold ] -}{ - \setCJKfamilyfont{TCmain}{FandolSong-Regular.otf}[ - BoldFont = FandolSong-Bold.otf , - ItalicFont = FandolKai-Regular.otf , - BoldItalicFont = FandolKai-Regular.otf , - BoldItalicFeatures = {FakeBold=4} ] -} -\IfFontExistsTF{SourceHanSansTC-Regular}{% - \setCJKfamilyfont{TCsans}{SourceHanSansTC-Regular}[ - BoldFont = SourceHanSansTC-Bold , - ItalicFont = * , - BoldItalicFont = SourceHanSansTC-Bold ] -}{ - \setCJKfamilyfont{TCsans}{FandolHei-Regular.otf}[ - BoldFont = FandolHei-Bold.otf , - ItalicFont = * , - BoldItalicFont = FandolHei-Bold.otf ] -} -\IfFontExistsTF{SourceHanMonoTC-Regular}{% - \setCJKfamilyfont{TCmono}{SourceHanMonoTC-Regular}[ - BoldFont = SourceHanMonoTC-Medium , - ItalicFont = * , - BoldItalicFont = SourceHanMonoTC-Medium ] -}{ - \setCJKfamilyfont{TCmono}{FandolFang-Regular.otf}[ - BoldFont = * , - BoldFeatures = {FakeBold=4} , - ItalicFont = * , - BoldItalicFont = * , - BoldItalicFeatures = {FakeBold=4} ] -} -\fi - -\if@PJLlang@enable@JP -\IfFontExistsTF{SourceHanSerif-Regular}{% - \setCJKfamilyfont{JPmain}{SourceHanSerif-Regular}[ - BoldFont = SourceHanSerif-Bold , - ItalicFont = * , - BoldItalicFont = SourceHanSerif-Bold ] -}{ - \setCJKfamilyfont{JPmain}{FandolSong-Regular.otf}[ - BoldFont = FandolSong-Bold.otf , - ItalicFont = FandolKai-Regular.otf , - BoldItalicFont = FandolKai-Regular.otf , - BoldItalicFeatures = {FakeBold=4} ] -} -\IfFontExistsTF{SourceHanSans-Regular}{% - \setCJKfamilyfont{JPsans}{SourceHanSans-Regular}[ - BoldFont = SourceHanSans-Bold , - ItalicFont = * , - BoldItalicFont = SourceHanSans-Bold ] -}{ - \setCJKfamilyfont{JPsans}{FandolHei-Regular.otf}[ - BoldFont = FandolHei-Bold.otf , - ItalicFont = * , - BoldItalicFont = FandolHei-Bold.otf ] -} -\IfFontExistsTF{SourceHanMono-Regular}{% - \setCJKfamilyfont{JPmono}{SourceHanMono-Regular}[ - BoldFont = SourceHanMono-Medium , - ItalicFont = * , - BoldItalicFont = SourceHanMono-Medium ] -}{ - \setCJKfamilyfont{JPmono}{FandolFang-Regular.otf}[ - BoldFont = * , - BoldFeatures = {FakeBold=4} , - ItalicFont = * , - BoldItalicFont = * , - BoldItalicFeatures = {FakeBold=4} ] -} -\fi - -\WarningFilter{latexfont}{Font shape} -\WarningFilter{latexfont}{Some font} - -\def\CJKsffamily{} -\def\CJKttfamily{} - -\apptocmd{\sffamily}{\CJKsffamily}{}{\FAIL} -\apptocmd{\ttfamily}{\CJKttfamily}{}{\FAIL} - -\if@PJLlang@enable@CN -\gappto{\PJLlang@langconfig@CN}{% - \def\CJKsffamily{\CJKfamily{SCsans}}% - \def\CJKttfamily{\CJKfamily{SCmono}}% - \CJKfamily{SCmain}% -} -\fi - -\if@PJLlang@enable@TC -\gappto{\PJLlang@langconfig@TC}{% - \def\CJKsffamily{\CJKfamily{TCsans}}% - \def\CJKttfamily{\CJKfamily{TCmono}}% - \CJKfamily{TCmain}% -} -\fi - -\if@PJLlang@enable@JP -\gappto{\PJLlang@langconfig@JP}{% - \def\CJKsffamily{\CJKfamily{JPsans}}% - \def\CJKttfamily{\CJKfamily{JPmono}}% - \CJKfamily{JPmain}% -} -\fi - -\def\minimalist@titlefontshape{\CJKsffamily} -} - -\if@minimclass@customfont\else -\if@minimclass@fast -\RequirePackage{amssymb} -\else -\PassOptionsToPackage - {warnings-off={mathtools-colon,mathtools-overbracket}}{unicode-math} -\RequirePackage{unicode-math} -\unimathsetup{math-style=ISO, partial=upright, nabla=upright} -\setmathfont{Asana-Math.otf} -\IfFontExistsTF{Neo Euler}{% -\setmathfont[range={up/{Latin,latin,Greek,greek}, - bfup/{Latin,latin,Greek,greek}, - cal, bfcal, frak, bffrak, - `(,`),`[,`],`\{,`\},`:,`=,\ne,\equiv,`/,\backslash, - \in,\notin,\ni,\subset,\supset,\subseteq,\supseteq, - \rightarrow,\leftarrow,\mapsto,\hookrightarrow,\hookleftarrow, - \sum,\prod,\coprod, - \sqrt,\int,\iint,\iiint,\oint}, - script-features={}, - sscript-features={}, - Scale = 1.05, - ]{Neo Euler} -}{} -\setmathfont[range={\leq,\geq,\ll,\gg,\lll,\ggg,\leqslant,\geqslant}, - Scale = 0.95, - ]{latinmodern-math.otf} -\setmathfont[range={up/num, bfup/num} - ]{texgyrepagella-math.otf} - -\AtBeginDocument{ -\let\mid@original\mid -\renewcommand{\mid}{\hspace{-.2em}\mid@original\hspace{-.2em}} -\let\nmid@original\nmid -\renewcommand{\nmid}{\hspace{-.2em}\nmid@original\hspace{-.2em}} -\renewcommand{\frac}[2]{\genfrac{}{}{}{}{ - \mathchoice - {\raisebox{-.15em}{$\displaystyle #1$}} - {\raisebox{-.15em}{$\textstyle #1$}} - {\raisebox{-.08em}{$\scriptstyle #1$}} - {\scriptscriptstyle #1} -}{ - \mathchoice - {\raisebox{.08em}{$\displaystyle #2$}} - {\raisebox{.08em}{$\textstyle #2$}} - {\raisebox{.05em}{$\scriptstyle #2$}} - {\scriptscriptstyle #2} -}} -} - -\RequirePackage{tikz-cd} -\newbox\xratbelow -\newbox\xratabove -\renewcommand{\xrightarrow}[2][]{% - \setbox\xratbelow=\hbox{\ensuremath{\scriptstyle #1}}% - \setbox\xratabove=\hbox{\ensuremath{\scriptstyle #2}}% - \pgfmathsetlengthmacro{\xratlen}{max(\wd\xratbelow, \wd\xratabove) + .8em}% - \mathrel{\tikz [->, baseline=-.55ex, every node/.style={inner sep=0pt}] - \draw (0,0) -- node[below=3pt] {\box\xratbelow} - node[above=2pt] {\box\xratabove} - (\xratlen,0) ;}} -\renewcommand{\xleftarrow}[2][]{% - \setbox\xratbelow=\hbox{\ensuremath{\scriptstyle #1}}% - \setbox\xratabove=\hbox{\ensuremath{\scriptstyle #2}}% - \pgfmathsetlengthmacro{\xratlen}{max(\wd\xratbelow, \wd\xratabove) + .8em}% - \mathrel{\tikz [<-, baseline=-.55ex, every node/.style={inner sep=0pt}] - \draw (0,0) -- node[below=3pt] {\box\xratbelow} - node[above=2pt] {\box\xratabove} - (\xratlen,0) ;}} -\renewcommand{\xleftrightarrow}[2][]{% - \setbox\xratbelow=\hbox{\ensuremath{\scriptstyle #1}}% - \setbox\xratabove=\hbox{\ensuremath{\scriptstyle #2}}% - \pgfmathsetlengthmacro{\xratlen}{max(\wd\xratbelow, \wd\xratabove) + .8em}% - \mathrel{\tikz [<->, baseline=-.55ex, every node/.style={inner sep=0pt}] - \draw (0,0) -- node[below=3pt] {\box\xratbelow} - node[above=2pt] {\box\xratabove} - (\xratlen,0) ;}} -\renewcommand{\xhookrightarrow}[2][]{% - \setbox\xratbelow=\hbox{\ensuremath{\scriptstyle #1}}% - \setbox\xratabove=\hbox{\ensuremath{\scriptstyle #2}}% - \pgfmathsetlengthmacro{\xratlen}{max(\wd\xratbelow, \wd\xratabove) + .8em}% - \mathrel{\tikz [baseline=-.55ex, every node/.style={inner sep=0pt}] - \draw (0,0) edge[commutative diagrams/hookrightarrow] node[below=3pt] {\box\xratbelow} - node[above=2pt] {\box\xratabove} - (\xratlen,0) ;}} -\renewcommand{\xhookleftarrow}[2][]{% - \setbox\xratbelow=\hbox{\ensuremath{\scriptstyle #1}}% - \setbox\xratabove=\hbox{\ensuremath{\scriptstyle #2}}% - \pgfmathsetlengthmacro{\xratlen}{max(\wd\xratbelow, \wd\xratabove) + .8em}% - \mathrel{\tikz [baseline=-.55ex, every node/.style={inner sep=0pt}] - \draw (0,0) edge[commutative diagrams/hookleftarrow] node[below=3pt] {\box\xratbelow} - node[above=2pt] {\box\xratabove} - (\xratlen,0) ;}} -\renewcommand{\xmapsto}[2][]{% - \setbox\xratbelow=\hbox{\ensuremath{\scriptstyle #1}}% - \setbox\xratabove=\hbox{\ensuremath{\scriptstyle #2}}% - \pgfmathsetlengthmacro{\xratlen}{max(\wd\xratbelow, \wd\xratabove) + .8em}% - \mathrel{\tikz [baseline=-.55ex, every node/.style={inner sep=0pt}] - \draw (0,0) edge[commutative diagrams/mapsto] node[below=3pt] {\box\xratbelow} - node[above=2pt] {\box\xratabove} - (\xratlen,0) ;}} -\newcommand{\xlongequal}[2][]{% - \setbox\xratbelow=\hbox{\ensuremath{\scriptstyle #1}}% - \setbox\xratabove=\hbox{\ensuremath{\scriptstyle #2}}% - \pgfmathsetlengthmacro{\xratlen}{max(\wd\xratbelow, \wd\xratabove) + .8em}% - \mathrel{\tikz [baseline=-.55ex, every node/.style={inner sep=0pt}] - \draw (0,0) edge[commutative diagrams/equal] node[below=3pt] {\box\xratbelow} - node[above=2pt] {\box\xratabove} - (\xratlen,0) ;}} -\AtBeginDocument{ -\renewcommand{\twoheadrightarrow}{% - \mathrel{\tikz [baseline=-.55ex, every node/.style={inner sep=0pt}] - \draw (0,0) edge[commutative diagrams/twoheadrightarrow] (.8em,0) ;}} -\renewcommand{\twoheadleftarrow}{% - \mathrel{\tikz [baseline=-.55ex, every node/.style={inner sep=0pt}] - \draw (0,0) edge[commutative diagrams/twoheadleftarrow] (.8em,0) ;}} -} -\fi -\fi - -\if@minimclass@lmodern - \RequirePackage{amssymb} - \if@minimclass@useosf - \RequirePackage{cfr-lm} - \else - \RequirePackage{lmodern} - \fi - \PJLsetlinespacing{\setstretch{1.00}} -\fi - -\if@minimclass@palatino - \RequirePackage{amssymb} - \RequirePackage{mathpazo} - \PassOptionsToPackage{defaultsups}{newpxtext} - \RequirePackage{newpxtext} - % \RequirePackage{newpxmath} - \let\openbox\relax - \PJLsetlinespacing{\setstretch{1.07}} - \if@minimclass@useosf\useosf\fi -\fi - -\if@minimclass@times - \RequirePackage{amssymb} - \PassOptionsToPackage{defaultsups}{newtxtext} - \RequirePackage{newtxtext} - \RequirePackage{newtxmath} - \let\openbox\relax - \PJLsetlinespacing{\setstretch{1.00}} - \if@minimclass@useosf\useosf\fi -\fi - -\if@minimclass@garamond - \RequirePackage{amssymb} - \if@minimclass@useosf\else - \PassOptionsToPackage{lining}{ebgaramond} - \fi - \RequirePackage{ebgaramond-maths} - \RequirePackage{ebgaramond} - % \RequirePackage{garamondlibre} - \PJLsetlinespacing{\setstretch{1.00}} -\fi - -\if@minimclass@noto - \RequirePackage{amssymb} - \if@minimclass@useosf - \PassOptionsToPackage{oldstyle}{notomath} - \fi - \RequirePackage{anyfontsize} - \RequirePackage{notomath} - \PJLsetlinespacing{\setstretch{1.00}} -\fi - -\if@minimclass@biolinum - \RequirePackage{amssymb} - % \RequirePackage{mathpazo} - % \RequirePackage[sansmath]{libertinust1math} - \ifPDFTeX - \if@minimclass@useosf - \PassOptionsToPackage{osf}{biolinum} - \fi - \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, - \if@minimclass@useosf Numbers = OldStyle\fi ] - \fi - \PJLsetlinespacing{\setstretch{1.05}} - \RequirePackage[italic,defaultmathsizes]{mathastext} -\fi - -\def\PJL@font@alreadyset{} - -\PassOptionsToPackage{verbose=silent}{microtype} -\RequirePackage{microtype} -\PassOptionsToPackage{all}{nowidow} -\RequirePackage{nowidow} -\RequirePackage{embrac} +\WarningFilter { latexfont } { Font~shape } +\WarningFilter { latexfont } { Some~font } + +\cs_new_protected:Nn \__minimclass_load_file_or_config:Nnn + { + \bool_if:NT #1 + { + \exp_args:Nx \file_if_exist:nT { #2 } + { + \exp_args:Nx \file_input:n { #2 } + \use_none:nn + } + } + \use:n { #3 } + } + +\cs_new_protected:Nn \__minimclass_if_font_exist:nnn + { + \bool_if:NTF \l__minimclass_fast_bool + { #3 } + { \fontspec_font_if_exist:nTF { #1 } { #2 } { #3 } } + } + +\__minimclass_load_file_or_config:Nnn \l__minimclass_load_custom_font_file_bool { \l__minimclass_custom_font_file_str } + { + \RequirePackage { projlib-font } + + \bool_if:NF \g_projlib_font_already_set_bool + { + \bool_if:NT \l__minimclass_fast_bool + { + \RequirePackage { mathpazo } + } + + \PassOptionsToPackage { no-math,quiet } { fontspec } + \RequirePackage { fontspec } + + \__minimclass_load_file_or_config:Nnn \l__minimclass_load_custom_font_file_latin_bool { \l__minimclass_custom_font_file_latin_str } + { + \__minimclass_if_font_exist:nnn { Palatino~Linotype } + { + \bool_if:NTF \l__projlib_font_useosf_bool + { + \setmainfont { Palatino~Linotype } [ Numbers = OldStyle ] + } + { + \setmainfont { Palatino~Linotype } + } + } + { + \bool_if:NTF \l__projlib_font_useosf_bool + { + \setmainfont { TeXGyrePagellaX-Regular.otf } + [ + BoldFont = TeXGyrePagellaX-Bold.otf , + ItalicFont = TeXGyrePagellaX-Italic.otf , + BoldItalicFont = TeXGyrePagellaX-BoldItalic.otf , + Numbers = OldStyle , + ] + } + { + \setmainfont { TeXGyrePagellaX-Regular.otf } + [ + BoldFont = TeXGyrePagellaX-Bold.otf , + ItalicFont = TeXGyrePagellaX-Italic.otf , + BoldItalicFont = TeXGyrePagellaX-BoldItalic.otf , + ] + } + } + \setsansfont { SourceSansPro-Regular.otf } + [ + Scale = MatchLowercase , + BoldFont = SourceSansPro-Bold.otf , + ItalicFont = SourceSansPro-RegularIt.otf , + BoldItalicFont = SourceSansPro-BoldIt.otf , + ] + \setmonofont { NewCMMono10-Regular.otf } + [ + Scale = 1.05 , + BoldFont = NewCMMono10-Bold.otf , + ItalicFont = NewCMMono10-Italic.otf , + BoldItalicFont = NewCMMono10-BoldOblique.otf , + ] + + \projlib_language_set_linespacing_latin:n { \setstretch { 1.07 } } + } + } + + \PassOptionsToPackage { fontset = none, scheme = plain } { ctex } + \RequirePackage { ctex } + + \__minimclass_load_file_or_config:Nnn \l__minimclass_load_custom_font_file_cjk_bool { \l__minimclass_custom_font_file_cjk_str } + { + \__minimclass_if_font_exist:nnn { SourceHanSerifSC-Regular } + { + \setCJKmainfont { SourceHanSerifSC-Regular } + [ + BoldFont = SourceHanSerifSC-Bold , + ItalicFont = * , + BoldItalicFont = SourceHanSerifSC-Bold , + ] + } + { + \setCJKmainfont { FandolSong-Regular.otf } + [ + BoldFont = FandolSong-Bold.otf , + ItalicFont = FandolKai-Regular.otf , + BoldItalicFont = FandolKai-Regular.otf , + BoldItalicFeatures = { FakeBold = 4 } , + ] + } + + \__minimclass_if_font_exist:nnn { SourceHanSansSC-Regular } + { + \setCJKsansfont{SourceHanSansSC-Regular} + [ + BoldFont = SourceHanSansSC-Bold , + ItalicFont = * , + BoldItalicFont = SourceHanSansSC-Bold , + ] + } + { + \setCJKsansfont { FandolHei-Regular.otf } + [ + BoldFont = FandolHei-Bold.otf , + ItalicFont = * , + BoldItalicFont = FandolHei-Bold.otf , + ] + } + + \__minimclass_if_font_exist:nnn { SourceHanMonoSC-Regular } + { + \setCJKmonofont { SourceHanMonoSC-Regular } + [ + BoldFont = SourceHanMonoSC-Medium , + ItalicFont = * , + BoldItalicFont = SourceHanMonoSC-Medium , + ] + } + { + \setCJKmonofont { FandolFang-Regular.otf } + [ + BoldFont = * , + BoldFeatures = { FakeBold = 4 } , + ItalicFont = * , + BoldItalicFont = * , + BoldItalicFeatures = { FakeBold = 4 } , + ] + } + + \bool_if:NT \g__projlib_language_enabled_schinese_bool + { + \__minimclass_if_font_exist:nnn { SourceHanSerifSC-Regular } + { + \setCJKfamilyfont { SCmain } { SourceHanSerifSC-Regular } + [ + BoldFont = SourceHanSerifSC-Bold , + ItalicFont = * , + BoldItalicFont = SourceHanSerifSC-Bold , + ] + } + { + \setCJKfamilyfont { SCmain } { FandolSong-Regular.otf } + [ + BoldFont = FandolSong-Bold.otf , + ItalicFont = FandolKai-Regular.otf , + BoldItalicFont = FandolKai-Regular.otf , + BoldItalicFeatures = { FakeBold = 4 } , + ] + } + \__minimclass_if_font_exist:nnn { SourceHanSansSC-Regular } + { + \setCJKfamilyfont { SCsans } { SourceHanSansSC-Regular } + [ + BoldFont = SourceHanSansSC-Bold , + ItalicFont = * , + BoldItalicFont = SourceHanSansSC-Bold , + ] + } + { + \setCJKfamilyfont { SCsans } { FandolHei-Regular.otf } + [ + BoldFont = FandolHei-Bold.otf , + ItalicFont = * , + BoldItalicFont = FandolHei-Bold.otf , + ] + } + \__minimclass_if_font_exist:nnn { SourceHanMonoSC-Regular } + { + \setCJKfamilyfont { SCmono } { SourceHanMonoSC-Regular } + [ + BoldFont = SourceHanMonoSC-Medium , + ItalicFont = * , + BoldItalicFont = SourceHanMonoSC-Medium , + ] + } + { + \setCJKfamilyfont { SCmono } { FandolFang-Regular.otf } + [ + BoldFont = * , + BoldFeatures = { FakeBold = 4 } , + ItalicFont = * , + BoldItalicFont = * , + BoldItalicFeatures = { FakeBold = 4 } , + ] + } + } + + \bool_if:NT \g__projlib_language_enabled_tchinese_bool + { + \__minimclass_if_font_exist:nnn { SourceHanSerifTC-Regular } + { + \setCJKfamilyfont { TCmain } { SourceHanSerifTC-Regular } + [ + BoldFont = SourceHanSerifTC-Bold , + ItalicFont = * , + BoldItalicFont = SourceHanSerifTC-Bold , + ] + } + { + \setCJKfamilyfont { TCmain } { FandolSong-Regular.otf } + [ + BoldFont = FandolSong-Bold.otf , + ItalicFont = FandolKai-Regular.otf , + BoldItalicFont = FandolKai-Regular.otf , + BoldItalicFeatures = { FakeBold = 4 } , + ] + } + \__minimclass_if_font_exist:nnn { SourceHanSansTC-Regular } + { + \setCJKfamilyfont { TCsans } { SourceHanSansTC-Regular } + [ + BoldFont = SourceHanSansTC-Bold , + ItalicFont = * , + BoldItalicFont = SourceHanSansTC-Bold , + ] + } + { + \setCJKfamilyfont { TCsans } { FandolHei-Regular.otf } + [ + BoldFont = FandolHei-Bold.otf , + ItalicFont = * , + BoldItalicFont = FandolHei-Bold.otf , + ] + } + \__minimclass_if_font_exist:nnn { SourceHanMonoTC-Regular } + { + \setCJKfamilyfont { TCmono } { SourceHanMonoTC-Regular } + [ + BoldFont = SourceHanMonoTC-Medium , + ItalicFont = * , + BoldItalicFont = SourceHanMonoTC-Medium , + ] + } + { + \setCJKfamilyfont { TCmono } { FandolFang-Regular.otf } + [ + BoldFont = * , + BoldFeatures = { FakeBold = 4 } , + ItalicFont = * , + BoldItalicFont = * , + BoldItalicFeatures = { FakeBold = 4 } , + ] + } + } + + \bool_if:NT \g__projlib_language_enabled_japanese_bool + { + \__minimclass_if_font_exist:nnn { SourceHanSerif-Regular } + { + \setCJKfamilyfont { JPmain } { SourceHanSerif-Regular } + [ + BoldFont = SourceHanSerif-Bold , + ItalicFont = * , + BoldItalicFont = SourceHanSerif-Bold , + ] + } + { + \setCJKfamilyfont { JPmain } { FandolSong-Regular.otf } + [ + BoldFont = FandolSong-Bold.otf , + ItalicFont = FandolKai-Regular.otf , + BoldItalicFont = FandolKai-Regular.otf , + BoldItalicFeatures = { FakeBold = 4 } , + ] + } + \__minimclass_if_font_exist:nnn { SourceHanSans-Regular } + { + \setCJKfamilyfont { JPsans } { SourceHanSans-Regular } + [ + BoldFont = SourceHanSans-Bold , + ItalicFont = * , + BoldItalicFont = SourceHanSans-Bold , + ] + } + { + \setCJKfamilyfont { JPsans } { FandolHei-Regular.otf } + [ + BoldFont = FandolHei-Bold.otf , + ItalicFont = * , + BoldItalicFont = FandolHei-Bold.otf , + ] + } + \__minimclass_if_font_exist:nnn { SourceHanMono-Regular } + { + \setCJKfamilyfont { JPmono } { SourceHanMono-Regular } + [ + BoldFont = SourceHanMono-Medium , + ItalicFont = * , + BoldItalicFont = SourceHanMono-Medium , + ] + } + { + \setCJKfamilyfont { JPmono } { FandolFang-Regular.otf } + [ + BoldFont = * , + BoldFeatures = { FakeBold = 4 } , + ItalicFont = * , + BoldItalicFont = * , + BoldItalicFeatures = { FakeBold = 4 } , + ] + } + } + + \cs_new:Nn \minimclass_cjk_sffamily: {} + \cs_new:Nn \minimclass_cjk_ttfamily: {} + + \hook_gput_code:nnn { cmd/sffamily/after } { minimclass } { \minimclass_cjk_sffamily: } + \hook_gput_code:nnn { cmd/ttfamily/after } { minimclass } { \minimclass_cjk_ttfamily: } + + \AddLanguageSetting [schinese] + { + \cs_set:Nn \minimclass_cjk_sffamily: { \CJKfamily { SCsans } } + \cs_set:Nn \minimclass_cjk_ttfamily: { \CJKfamily { SCmono } } + \CJKfamily { SCmain } + } + \AddLanguageSetting [tchinese] + { + \cs_set:Nn \minimclass_cjk_sffamily: { \CJKfamily { TCsans } } + \cs_set:Nn \minimclass_cjk_ttfamily: { \CJKfamily { TCmono } } + \CJKfamily { TCmain } + } + \AddLanguageSetting [japanese] + { + \cs_set:Nn \minimclass_cjk_sffamily: { \CJKfamily { JPsans } } + \cs_set:Nn \minimclass_cjk_ttfamily: { \CJKfamily { JPmono } } + \CJKfamily { JPmain } + } + + \tl_gset:Nn \g_minimalist_title_font_common_tl { \minimclass_cjk_sffamily: } + } + + \__minimclass_load_file_or_config:Nnn \l__minimclass_load_custom_font_file_math_bool { \l__minimclass_custom_font_file_math_str } + { + \bool_if:NF \g_projlib_font_already_set_bool + { + \bool_if:NTF \l__minimclass_fast_bool + { + \RequirePackage { amssymb } + } + { + \PassOptionsToPackage { warnings-off = { mathtools-colon, mathtools-overbracket } } { unicode-math } + \RequirePackage { unicode-math } + \unimathsetup { math-style = ISO, partial = upright, nabla = upright } + \setmathfont { Asana-Math.otf } + \__minimclass_if_font_exist:nnn { Neo~Euler } + { + \setmathfont { Neo~Euler } + [ + range = { up / { Latin, latin, Greek, greek }, + bfup / { Latin, latin, Greek, greek }, + cal, bfcal, frak, bffrak, + `(, `), `[, `], `\{, `\}, `:, `=, \ne, \equiv, `/, \backslash, + \in, \notin, \ni, \subset, \supset, \subseteq, \supseteq, + \rightarrow, \leftarrow, \leftrightarrow, + \longleftarrow, \longrightarrow, \longleftrightarrow, + \Leftarrow, \Rightarrow, \Leftrightarrow, + \Longleftarrow, \Longrightarrow, \Longleftrightarrow, + \nrightarrow, \nleftarrow, \nleftrightarrow, + \nLeftarrow, \nRightarrow, \nLeftrightarrow, + \mapsto, \hookrightarrow, \hookleftarrow, + \leftharpoonup, \rightharpoonup, \leftharpoondown, \rightharpoondown, + \rightleftharpoons, \leftrightharpoons, + \sum, \prod, \coprod, + \sqrt, \int, \iint, \iiint, \oint + }, + script-features = {}, + sscript-features = {}, + Scale = 1.05, + ] + }{} + \setmathfont { latinmodern-math.otf } + [ + range = { \leq, \geq, \ll, \gg, \lll, \ggg, \leqslant, \geqslant }, + Scale = 0.95, + ] + \setmathfont { texgyrepagella-math.otf } + [ + range = { up / num, bfup / num } + ] + + \hook_gput_code:nnn { begindocument } { minimclass } + { + \NewCommandCopy \minimclass_backup_mid: \mid + \RenewDocumentCommand \mid {} + { \skip_horizontal:n {-.15em} \minimclass_backup_mid: \skip_horizontal:n {-.15em} } + \NewCommandCopy \minimclass_backup_nmid: \nmid + \RenewDocumentCommand \nmid {} + { \skip_horizontal:n {-.15em} \minimclass_backup_nmid: \skip_horizontal:n {-.15em} } + } + + \RequirePackage { tikz-cd } + + \box_new:N \l__minimclass_xarrows_above_box + \box_new:N \l__minimclass_xarrows_below_box + \dim_new:N \l__minimclass_xarrows_length_dim + \cs_new_protected:Nn \minimclass_xarrows_generic:nnnn + % #3 = option of \tikz + % #4 = edge of \draw + { + \hbox_set:Nn \l__minimclass_xarrows_below_box { \ensuremath { \scriptstyle #1 } } + \hbox_set:Nn \l__minimclass_xarrows_above_box { \ensuremath { \scriptstyle #2 } } + \dim_set:Nn \l__minimclass_xarrows_length_dim + { \dim_eval:n { \dim_max:nn { \box_wd:N \l__minimclass_xarrows_below_box } { \box_wd:N \l__minimclass_xarrows_above_box } + .8em } } + \mathrel + { + \tikz [ #3, baseline = -.55ex, every~node/.style = { inner~sep = 0pt } ] + \draw (0,0) #4 + node [ below = 3pt ] { \box_use:N \l__minimclass_xarrows_below_box } + node [ above = 2pt ] { \box_use:N \l__minimclass_xarrows_above_box } + ( \l__minimclass_xarrows_length_dim ,0) ; + } + } + + \RenewDocumentCommand \xrightarrow { O{} m } + { + \minimclass_xarrows_generic:nnnn { #1 } { #2 } { -> } { -- } + } + \RenewDocumentCommand \xleftarrow { O{} m } + { + \minimclass_xarrows_generic:nnnn { #1 } { #2 } { <- } { -- } + } + \RenewDocumentCommand \xleftrightarrow { O{} m } + { + \minimclass_xarrows_generic:nnnn { #1 } { #2 } { <-> } { -- } + } + \RenewDocumentCommand \xhookrightarrow { O{} m } + { + \minimclass_xarrows_generic:nnnn { #1 } { #2 } {} { edge [ commutative~diagrams/hookrightarrow ] } + } + \RenewDocumentCommand \xhookleftarrow { O{} m } + { + \minimclass_xarrows_generic:nnnn { #1 } { #2 } {} { edge [ commutative~diagrams/hookleftarrow ] } + } + \RenewDocumentCommand \xmapsto { O{} m } + { + \minimclass_xarrows_generic:nnnn { #1 } { #2 } {} { edge [ commutative~diagrams/mapsto ] } + } + \NewDocumentCommand \xlongequal { O{} m } + { + \minimclass_xarrows_generic:nnnn { #1 } { #2 } {} { edge [ commutative~diagrams/equal ] } + } + \hook_gput_code:nnn { begindocument/end } { minimclass } + { + \RenewDocumentCommand \twoheadrightarrow {} + { + \minimclass_xarrows_generic:nnnn { \,\, } {} {} { edge [ commutative~diagrams/twoheadrightarrow ] } + } + \RenewDocumentCommand \twoheadleftarrow {} + { + \minimclass_xarrows_generic:nnnn { \,\, } {} {} { edge [ commutative~diagrams/twoheadleftarrow ] } + } + } + } + } + } + } + +\PassOptionsToPackage { all } { nowidow } +\RequirePackage { nowidow } +\RequirePackage { embrac } %%================================ -%% Graphics +%% Graphics %%================================ -\RequirePackage{graphicx} -\graphicspath{{images/}} -\RequirePackage{wrapfig} -\RequirePackage{float} -\RequirePackage{caption} -\captionsetup{font=small} - -%%================================ -%% Index -%%================================ -\AtEndPreamble{ -\pretocmd{\printindex}{\LocallyStopLineNumbers}{}{} -\apptocmd{\printindex}{\ResumeLineNumbers}{}{} -} +\RequirePackage { graphicx } +\graphicspath { { images/ } } +\RequirePackage { wrapfig } +\RequirePackage { float } +\RequirePackage { caption } +\captionsetup { font = small } \endinput %% diff --git a/macros/unicodetex/latex/simplivre/README.md b/macros/unicodetex/latex/simplivre/README.md index 6ec7912598..0bb1398797 100644 --- a/macros/unicodetex/latex/simplivre/README.md +++ b/macros/unicodetex/latex/simplivre/README.md @@ -2,6 +2,8 @@ # `simplivre` : write you books in a simple and clear way +**The current document class have been rewritten with `expl3`. Please note that the documentations are not yet up-to-date. The syntax of some commands have been changed since the last version, especially the declaration of theorem-like environments by `\CreateTheorem`. For the moment, you can refer to the documentation of the package `create-theorem`.** + `simplivre` is a LaTeX class for typesetting books, which has a simple and clear design. diff --git a/macros/unicodetex/latex/simplivre/simplivre.cls b/macros/unicodetex/latex/simplivre/simplivre.cls index 0dfcb4a135..7cac20b9ae 100644 --- a/macros/unicodetex/latex/simplivre/simplivre.cls +++ b/macros/unicodetex/latex/simplivre/simplivre.cls @@ -2,7 +2,7 @@ %% This is file `simplivre/simplivre.cls', %% generated with the docstrip utility. -%% Copyright (C) 2021 by Jinwen XU +%% Copyright (C) 2021-2022 by Jinwen XU %% %% This is part of the minimalist class series. %% @@ -16,564 +16,685 @@ %% 2005/12/01 or later. %% \NeedsTeXFormat{LaTeX2e}[2020-10-01] -\ProvidesClass{simplivre} - [2021/12/16 A simple and clear book style] -\def\minimclass@baseclass{book} -\RequirePackage{kvoptions} -\RequirePackage{etoolbox} -\SetupKeyvalOptions{ - family = @minimclass, - prefix = @minimclass@, -} -\DeclareBoolOption[false]{draft} -\DeclareBoolOption[false]{fast} -\DeclareBoolOption[false]{classical} -\DeclareBoolOption[false]{useindent} -\DeclareBoolOption[false]{useosf} -\DeclareBoolOption[false]{lmodern} -\DeclareBoolOption[false]{palatino} -\DeclareBoolOption[false]{times} -\DeclareBoolOption[false]{garamond} -\DeclareBoolOption[false]{noto} -\DeclareBoolOption[false]{biolinum} -\DeclareBoolOption[false]{customfont} -\DeclareStringOption{thmnum}[PJL@thmnum@default] - -\newif\if@minimclass@bfivepaper\@minimclass@bfivepaperfalse -\DeclareVoidOption{b5paper}{\@minimclass@bfivepapertrue} -\newif\if@minimclass@afourpaper\@minimclass@afourpaperfalse -\DeclareVoidOption{a4paper}{\@minimclass@afourpapertrue} - -\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{\minimclass@baseclass}} -\ProcessKeyvalOptions*\relax -\LoadClass{\minimclass@baseclass} - -\if@minimclass@draft - \@minimclass@fasttrue -\fi -\if@minimclass@classical\else - \@minimclass@useindenttrue -\fi -\if@minimclass@lmodern - \@minimclass@customfonttrue -\fi -\if@minimclass@palatino - \@minimclass@customfonttrue -\fi -\if@minimclass@times - \@minimclass@customfonttrue -\fi -\if@minimclass@garamond - \@minimclass@customfonttrue -\fi -\if@minimclass@noto - \@minimclass@customfonttrue -\fi -\if@minimclass@biolinum - \@minimclass@customfonttrue -\fi +\RequirePackage{l3keys2e} +\ProvidesExplClass + {simplivre} + {2022/03/17} {} + {A simple and clear book style} + +\tl_const:Nn \l__minimclass_base_class_tl { book } + + +\bool_new:N \l__minimclass_load_custom_font_file_bool +\bool_set_false:N \l__minimclass_load_custom_font_file_bool + +\bool_new:N \l__minimclass_load_custom_font_file_latin_bool +\bool_set_false:N \l__minimclass_load_custom_font_file_latin_bool + +\bool_new:N \l__minimclass_load_custom_font_file_cjk_bool +\bool_set_false:N \l__minimclass_load_custom_font_file_cjk_bool + +\bool_new:N \l__minimclass_load_custom_font_file_math_bool +\bool_set_false:N \l__minimclass_load_custom_font_file_math_bool + +\keys_define:nn { minimclass } + { + , draft .bool_set:N = \l__minimclass_fast_bool + , draft .initial:n = { false } + , fast .bool_set:N = \l__minimclass_fast_bool + + , classical .bool_set:N = \l__minimclass_classical_bool + , classical .initial:n = { false } + + , use indent .bool_set:N = \l__minimclass_useindent_bool + , use indent .initial:n = { true } + , use~indent .bool_set:N = \l__minimclass_useindent_bool + , use-indent .bool_set:N = \l__minimclass_useindent_bool + + , load custom font file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_bool + \str_set:Nn \l__minimclass_custom_font_file_str { #1 } + \bool_set_true:N \l__minimclass_load_custom_font_file_latin_bool + \str_set:Nn \l__minimclass_custom_font_file_latin_str { minimalist.font.latin } + \bool_set_true:N \l__minimclass_load_custom_font_file_cjk_bool + \str_set:Nn \l__minimclass_custom_font_file_cjk_str { minimalist.font.cjk } + \bool_set_true:N \l__minimclass_load_custom_font_file_math_bool + \str_set:Nn \l__minimclass_custom_font_file_math_str { minimalist.font.math } + } + , load custom font file .default:n = { minimalist.font } + , load~custom~font~file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_bool + \str_set:Nn \l__minimclass_custom_font_file_str { #1 } + } + , load~custom~font~file .default:n = { minimalist.font } + , load-custom-font-file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_bool + \str_set:Nn \l__minimclass_custom_font_file_str { #1 } + } + , load-custom-font-file .default:n = { minimalist.font } + + , load custom latin font file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_latin_bool + \str_set:Nn \l__minimclass_custom_font_file_latin_str { #1 } + } + , load custom latin font file .default:n = { minimalist.font.latin } + , load~custom~latin~font~file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_latin_bool + \str_set:Nn \l__minimclass_custom_font_file_latin_str { #1 } + } + , load~custom~latin~font~file .default:n = { minimalist.font.latin } + , load-custom-latin-font-file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_latin_bool + \str_set:Nn \l__minimclass_custom_font_file_latin_str { #1 } + } + , load-custom-latin-font-file .default:n = { minimalist.font.latin } + + , load custom cjk font file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_cjk_bool + \str_set:Nn \l__minimclass_custom_font_file_cjk_str { #1 } + } + , load custom cjk font file .default:n = { minimalist.font.cjk } + , load~custom~cjk~font~file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_cjk_bool + \str_set:Nn \l__minimclass_custom_font_file_cjk_str { #1 } + } + , load~custom~cjk~font~file .default:n = { minimalist.font.cjk } + , load-custom-cjk-font-file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_cjk_bool + \str_set:Nn \l__minimclass_custom_font_file_cjk_str { #1 } + } + , load-custom-cjk-font-file .default:n = { minimalist.font.cjk } + + , load custom math font file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_math_bool + \str_set:Nn \l__minimclass_custom_font_file_math_str { #1 } + } + , load custom math font file .default:n = { minimalist.font.math } + , load~custom~math~font~file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_math_bool + \str_set:Nn \l__minimclass_custom_font_file_math_str { #1 } + } + , load~custom~math~font~file .default:n = { minimalist.font.math } + , load-custom-math-font-file .code:n = { + \bool_set_true:N \l__minimclass_load_custom_font_file_math_bool + \str_set:Nn \l__minimclass_custom_font_file_math_str { #1 } + } + , load-custom-math-font-file .default:n = { minimalist.font.math } + + , a4paper .bool_set:N = \l__minimclass_a_four_paper_bool + , a4paper .initial:n = { false } + , b5paper .bool_set:N = \l__minimclass_b_five_paper_bool + , b5paper .initial:n = { false } + + , 11pt .code:n = { \PassOptionsToClass { \CurrentOption } { \l__minimclass_base_class_tl } } + , 12pt .code:n = { \PassOptionsToClass { \CurrentOption } { \l__minimclass_base_class_tl } } + + , unknown .code:n = { + \PassOptionsToPackage { \CurrentOption } { minimalist } + } + } +\ProcessKeysOptions { minimclass } + +\LoadClass{\l__minimclass_base_class_tl} + +\bool_if:NT \l__minimclass_classical_bool + { + \bool_set_false:N \l__minimclass_useindent_bool + } %%================================ -%% Page layout +%% Page layout %%================================ -\RequirePackage{silence} -\WarningFilter{geometry}{Over-specification in} -\RequirePackage[heightrounded]{geometry} -\geometry{ - papersize={7in,10in}, - % total={40em,60em}, - total={5.535in,8.300in}, - hmarginratio=1:1, - vmarginratio=1:1, - footnotesep=2em plus 2pt minus 2pt, -} -\if@minimclass@bfivepaper -\geometry{ - b5paper, - % total={40em,59em}, - total={5.535in,8.160in}, - hmarginratio=1:1, - vmarginratio=1:1, - footnotesep=2em plus 2pt minus 2pt, -} -\fi -\if@minimclass@afourpaper -\geometry{ - a4paper, - % total={47em,70em}, - total={6.500in,9.685in}, - hmarginratio=1:1, - vmarginratio=1:1, - footnotesep=2em plus 2pt minus 2pt, -} -\fi - -\if@minimclass@fast - \PassOptionsToPackage{fast}{minimalist} - \RequirePackage{draftwatermark} - \DraftwatermarkOptions{text={\normalfont DRAFT},color=paper!95!-paper} -\fi -\if@minimclass@useindent - \RequirePackage{indentfirst} -\else - \AtEndPreamble{\RequirePackage{parskip}} -\fi -\RequirePackage{minimalist} +\RequirePackage { silence } +\WarningFilter { geometry } { Over-specification } + +\PassOptionsToPackage { heightrounded } { geometry } +\RequirePackage { geometry } + +\geometry + { + papersize = { 7in, 10in }, + total = { 5.535in, 8.300in }, + centering, + footnotesep = 2em plus 2pt minus 2pt, + } + +\bool_if:NT \l__minimclass_b_five_paper_bool + { + \geometry + { + b5paper, + total = { 5.535in, 8.160in }, + centering, + footnotesep = 2em plus 2pt minus 2pt, + } + } + +\bool_if:NT \l__minimclass_a_four_paper_bool + { + \geometry + { + a4paper, + total = { 6.500in, 9.685in }, + centering, + footnotesep = 2em plus 2pt minus 2pt, + } + } + +\bool_if:NT \l__minimclass_fast_bool + { + \PassOptionsToPackage { fast } { minimalist } + \RequirePackage { draftwatermark } + \DraftwatermarkOptions { text = { \normalfont DRAFT }, color = paper!97!-paper } + } + +\bool_if:NTF \l__minimclass_useindent_bool + { + \RequirePackage { indentfirst } + } + { + \hook_gput_code:nnn { begindocument/before } { minimclass } + { + \RequirePackage { parskip } + } + } + +\RequirePackage { minimalist } %%================================ -%% Fonts +%% Fonts %%================================ -\if@minimclass@customfont\else - \if@minimclass@fast - \RequirePackage{mathpazo} - \fi -\fi - -\PassOptionsToPackage{no-math,quiet}{fontspec} -\RequirePackage{fontspec} - -\IfFileExists{minimalist-font.tex}{ - \input{minimalist-font.tex} -}{ -\IfFontExistsTF{Palatino Linotype}{% - \setmainfont{Palatino Linotype} - [\if@minimclass@useosf Numbers = OldStyle\fi] -}{ - \setmainfont{TeXGyrePagellaX-Regular.otf}[ - BoldFont = TeXGyrePagellaX-Bold.otf , - ItalicFont = TeXGyrePagellaX-Italic.otf , - BoldItalicFont = TeXGyrePagellaX-BoldItalic.otf, - \if@minimclass@useosf Numbers = OldStyle\fi ] -} - \setsansfont{SourceSansPro-Regular.otf}[ - Scale = MatchLowercase , - BoldFont = SourceSansPro-Bold.otf , - ItalicFont = SourceSansPro-RegularIt.otf , - BoldItalicFont = SourceSansPro-BoldIt.otf ] - \setmonofont{NewCMMono10-Regular.otf}[ - Scale = 1.05 , - BoldFont = NewCMMono10-Bold.otf , - ItalicFont = NewCMMono10-Italic.otf , - BoldItalicFont = NewCMMono10-BoldOblique.otf ] -} - -\PassOptionsToPackage{fontset=none,scheme=plain}{ctex} -\RequirePackage{ctex} - -\IfFileExists{minimalist-font.cjk.tex}{ - \input{minimalist-font.cjk.tex} -}{ -\IfFontExistsTF{SourceHanSerifSC-Regular}{% - \setCJKmainfont{SourceHanSerifSC-Regular}[ - BoldFont = SourceHanSerifSC-Bold , - ItalicFont = * , - BoldItalicFont = SourceHanSerifSC-Bold ] -}{ - \setCJKmainfont{FandolSong-Regular.otf}[ - BoldFont = FandolSong-Bold.otf , - ItalicFont = FandolKai-Regular.otf , - BoldItalicFont = FandolKai-Regular.otf , - BoldItalicFeatures = {FakeBold=4} ] -} - -\IfFontExistsTF{SourceHanSansSC-Regular}{% - \setCJKsansfont{SourceHanSansSC-Regular}[ - BoldFont = SourceHanSansSC-Bold , - ItalicFont = * , - BoldItalicFont = SourceHanSansSC-Bold ] -}{ - \setCJKsansfont{FandolHei-Regular.otf}[ - BoldFont = FandolHei-Bold.otf , - ItalicFont = * , - BoldItalicFont = FandolHei-Bold.otf ] -} - -\IfFontExistsTF{SourceHanMonoSC-Regular}{% - \setCJKmonofont{SourceHanMonoSC-Regular}[ - BoldFont = SourceHanMonoSC-Medium , - ItalicFont = * , - BoldItalicFont = SourceHanMonoSC-Medium ] -}{ - \setCJKmonofont{FandolFang-Regular.otf}[ - BoldFont = * , - BoldFeatures = {FakeBold=4} , - ItalicFont = * , - BoldItalicFont = * , - BoldItalicFeatures = {FakeBold=4} ] -} - -\if@PJLlang@enable@CN -\IfFontExistsTF{SourceHanSerifSC-Regular}{% - \setCJKfamilyfont{SCmain}{SourceHanSerifSC-Regular}[ - BoldFont = SourceHanSerifSC-Bold , - ItalicFont = * , - BoldItalicFont = SourceHanSerifSC-Bold ] -}{ - \setCJKfamilyfont{SCmain}{FandolSong-Regular.otf}[ - BoldFont = FandolSong-Bold.otf , - ItalicFont = FandolKai-Regular.otf , - BoldItalicFont = FandolKai-Regular.otf , - BoldItalicFeatures = {FakeBold=4} ] -} -\IfFontExistsTF{SourceHanSansSC-Regular}{% - \setCJKfamilyfont{SCsans}{SourceHanSansSC-Regular}[ - BoldFont = SourceHanSansSC-Bold , - ItalicFont = * , - BoldItalicFont = SourceHanSansSC-Bold ] -}{ - \setCJKfamilyfont{SCsans}{FandolHei-Regular.otf}[ - BoldFont = FandolHei-Bold.otf , - ItalicFont = * , - BoldItalicFont = FandolHei-Bold.otf ] -} -\IfFontExistsTF{SourceHanMonoSC-Regular}{% - \setCJKfamilyfont{SCmono}{SourceHanMonoSC-Regular}[ - BoldFont = SourceHanMonoSC-Medium , - ItalicFont = * , - BoldItalicFont = SourceHanMonoSC-Medium ] -}{ - \setCJKfamilyfont{SCmono}{FandolFang-Regular.otf}[ - BoldFont = * , - BoldFeatures = {FakeBold=4} , - ItalicFont = * , - BoldItalicFont = * , - BoldItalicFeatures = {FakeBold=4} ] -} -\fi - -\if@PJLlang@enable@TC -\IfFontExistsTF{SourceHanSerifTC-Regular}{% - \setCJKfamilyfont{TCmain}{SourceHanSerifTC-Regular}[ - BoldFont = SourceHanSerifTC-Bold , - ItalicFont = * , - BoldItalicFont = SourceHanSerifTC-Bold ] -}{ - \setCJKfamilyfont{TCmain}{FandolSong-Regular.otf}[ - BoldFont = FandolSong-Bold.otf , - ItalicFont = FandolKai-Regular.otf , - BoldItalicFont = FandolKai-Regular.otf , - BoldItalicFeatures = {FakeBold=4} ] -} -\IfFontExistsTF{SourceHanSansTC-Regular}{% - \setCJKfamilyfont{TCsans}{SourceHanSansTC-Regular}[ - BoldFont = SourceHanSansTC-Bold , - ItalicFont = * , - BoldItalicFont = SourceHanSansTC-Bold ] -}{ - \setCJKfamilyfont{TCsans}{FandolHei-Regular.otf}[ - BoldFont = FandolHei-Bold.otf , - ItalicFont = * , - BoldItalicFont = FandolHei-Bold.otf ] -} -\IfFontExistsTF{SourceHanMonoTC-Regular}{% - \setCJKfamilyfont{TCmono}{SourceHanMonoTC-Regular}[ - BoldFont = SourceHanMonoTC-Medium , - ItalicFont = * , - BoldItalicFont = SourceHanMonoTC-Medium ] -}{ - \setCJKfamilyfont{TCmono}{FandolFang-Regular.otf}[ - BoldFont = * , - BoldFeatures = {FakeBold=4} , - ItalicFont = * , - BoldItalicFont = * , - BoldItalicFeatures = {FakeBold=4} ] -} -\fi - -\if@PJLlang@enable@JP -\IfFontExistsTF{SourceHanSerif-Regular}{% - \setCJKfamilyfont{JPmain}{SourceHanSerif-Regular}[ - BoldFont = SourceHanSerif-Bold , - ItalicFont = * , - BoldItalicFont = SourceHanSerif-Bold ] -}{ - \setCJKfamilyfont{JPmain}{FandolSong-Regular.otf}[ - BoldFont = FandolSong-Bold.otf , - ItalicFont = FandolKai-Regular.otf , - BoldItalicFont = FandolKai-Regular.otf , - BoldItalicFeatures = {FakeBold=4} ] -} -\IfFontExistsTF{SourceHanSans-Regular}{% - \setCJKfamilyfont{JPsans}{SourceHanSans-Regular}[ - BoldFont = SourceHanSans-Bold , - ItalicFont = * , - BoldItalicFont = SourceHanSans-Bold ] -}{ - \setCJKfamilyfont{JPsans}{FandolHei-Regular.otf}[ - BoldFont = FandolHei-Bold.otf , - ItalicFont = * , - BoldItalicFont = FandolHei-Bold.otf ] -} -\IfFontExistsTF{SourceHanMono-Regular}{% - \setCJKfamilyfont{JPmono}{SourceHanMono-Regular}[ - BoldFont = SourceHanMono-Medium , - ItalicFont = * , - BoldItalicFont = SourceHanMono-Medium ] -}{ - \setCJKfamilyfont{JPmono}{FandolFang-Regular.otf}[ - BoldFont = * , - BoldFeatures = {FakeBold=4} , - ItalicFont = * , - BoldItalicFont = * , - BoldItalicFeatures = {FakeBold=4} ] -} -\fi - -\WarningFilter{latexfont}{Font shape} -\WarningFilter{latexfont}{Some font} - -\def\CJKsffamily{} -\def\CJKttfamily{} - -\apptocmd{\sffamily}{\CJKsffamily}{}{\FAIL} -\apptocmd{\ttfamily}{\CJKttfamily}{}{\FAIL} - -\if@PJLlang@enable@CN -\gappto{\PJLlang@langconfig@CN}{% - \def\CJKsffamily{\CJKfamily{SCsans}}% - \def\CJKttfamily{\CJKfamily{SCmono}}% - \CJKfamily{SCmain}% -} -\fi - -\if@PJLlang@enable@TC -\gappto{\PJLlang@langconfig@TC}{% - \def\CJKsffamily{\CJKfamily{TCsans}}% - \def\CJKttfamily{\CJKfamily{TCmono}}% - \CJKfamily{TCmain}% -} -\fi - -\if@PJLlang@enable@JP -\gappto{\PJLlang@langconfig@JP}{% - \def\CJKsffamily{\CJKfamily{JPsans}}% - \def\CJKttfamily{\CJKfamily{JPmono}}% - \CJKfamily{JPmain}% -} -\fi - -\def\minimalist@titlefontshape{\CJKsffamily} -} - -\if@minimclass@customfont\else -\if@minimclass@fast -\RequirePackage{amssymb} -\else -\PassOptionsToPackage - {warnings-off={mathtools-colon,mathtools-overbracket}}{unicode-math} -\RequirePackage{unicode-math} -\unimathsetup{math-style=ISO, partial=upright, nabla=upright} -\setmathfont{Asana-Math.otf} -\IfFontExistsTF{Neo Euler}{% -\setmathfont[range={up/{Latin,latin,Greek,greek}, - bfup/{Latin,latin,Greek,greek}, - cal, bfcal, frak, bffrak, - `(,`),`[,`],`\{,`\},`:,`=,\ne,\equiv,`/,\backslash, - \in,\notin,\ni,\subset,\supset,\subseteq,\supseteq, - \rightarrow,\leftarrow,\mapsto,\hookrightarrow,\hookleftarrow, - \sum,\prod,\coprod, - \sqrt,\int,\iint,\iiint,\oint}, - script-features={}, - sscript-features={}, - Scale = 1.05, - ]{Neo Euler} -}{} -\setmathfont[range={\leq,\geq,\ll,\gg,\lll,\ggg,\leqslant,\geqslant}, - Scale = 0.95, - ]{latinmodern-math.otf} -\setmathfont[range={up/num, bfup/num} - ]{texgyrepagella-math.otf} - -\AtBeginDocument{ -\let\mid@original\mid -\renewcommand{\mid}{\hspace{-.2em}\mid@original\hspace{-.2em}} -\let\nmid@original\nmid -\renewcommand{\nmid}{\hspace{-.2em}\nmid@original\hspace{-.2em}} -\renewcommand{\frac}[2]{\genfrac{}{}{}{}{ - \mathchoice - {\raisebox{-.15em}{$\displaystyle #1$}} - {\raisebox{-.15em}{$\textstyle #1$}} - {\raisebox{-.08em}{$\scriptstyle #1$}} - {\scriptscriptstyle #1} -}{ - \mathchoice - {\raisebox{.08em}{$\displaystyle #2$}} - {\raisebox{.08em}{$\textstyle #2$}} - {\raisebox{.05em}{$\scriptstyle #2$}} - {\scriptscriptstyle #2} -}} -} - -\RequirePackage{tikz-cd} -\newbox\xratbelow -\newbox\xratabove -\renewcommand{\xrightarrow}[2][]{% - \setbox\xratbelow=\hbox{\ensuremath{\scriptstyle #1}}% - \setbox\xratabove=\hbox{\ensuremath{\scriptstyle #2}}% - \pgfmathsetlengthmacro{\xratlen}{max(\wd\xratbelow, \wd\xratabove) + .8em}% - \mathrel{\tikz [->, baseline=-.55ex, every node/.style={inner sep=0pt}] - \draw (0,0) -- node[below=3pt] {\box\xratbelow} - node[above=2pt] {\box\xratabove} - (\xratlen,0) ;}} -\renewcommand{\xleftarrow}[2][]{% - \setbox\xratbelow=\hbox{\ensuremath{\scriptstyle #1}}% - \setbox\xratabove=\hbox{\ensuremath{\scriptstyle #2}}% - \pgfmathsetlengthmacro{\xratlen}{max(\wd\xratbelow, \wd\xratabove) + .8em}% - \mathrel{\tikz [<-, baseline=-.55ex, every node/.style={inner sep=0pt}] - \draw (0,0) -- node[below=3pt] {\box\xratbelow} - node[above=2pt] {\box\xratabove} - (\xratlen,0) ;}} -\renewcommand{\xleftrightarrow}[2][]{% - \setbox\xratbelow=\hbox{\ensuremath{\scriptstyle #1}}% - \setbox\xratabove=\hbox{\ensuremath{\scriptstyle #2}}% - \pgfmathsetlengthmacro{\xratlen}{max(\wd\xratbelow, \wd\xratabove) + .8em}% - \mathrel{\tikz [<->, baseline=-.55ex, every node/.style={inner sep=0pt}] - \draw (0,0) -- node[below=3pt] {\box\xratbelow} - node[above=2pt] {\box\xratabove} - (\xratlen,0) ;}} -\renewcommand{\xhookrightarrow}[2][]{% - \setbox\xratbelow=\hbox{\ensuremath{\scriptstyle #1}}% - \setbox\xratabove=\hbox{\ensuremath{\scriptstyle #2}}% - \pgfmathsetlengthmacro{\xratlen}{max(\wd\xratbelow, \wd\xratabove) + .8em}% - \mathrel{\tikz [baseline=-.55ex, every node/.style={inner sep=0pt}] - \draw (0,0) edge[commutative diagrams/hookrightarrow] node[below=3pt] {\box\xratbelow} - node[above=2pt] {\box\xratabove} - (\xratlen,0) ;}} -\renewcommand{\xhookleftarrow}[2][]{% - \setbox\xratbelow=\hbox{\ensuremath{\scriptstyle #1}}% - \setbox\xratabove=\hbox{\ensuremath{\scriptstyle #2}}% - \pgfmathsetlengthmacro{\xratlen}{max(\wd\xratbelow, \wd\xratabove) + .8em}% - \mathrel{\tikz [baseline=-.55ex, every node/.style={inner sep=0pt}] - \draw (0,0) edge[commutative diagrams/hookleftarrow] node[below=3pt] {\box\xratbelow} - node[above=2pt] {\box\xratabove} - (\xratlen,0) ;}} -\renewcommand{\xmapsto}[2][]{% - \setbox\xratbelow=\hbox{\ensuremath{\scriptstyle #1}}% - \setbox\xratabove=\hbox{\ensuremath{\scriptstyle #2}}% - \pgfmathsetlengthmacro{\xratlen}{max(\wd\xratbelow, \wd\xratabove) + .8em}% - \mathrel{\tikz [baseline=-.55ex, every node/.style={inner sep=0pt}] - \draw (0,0) edge[commutative diagrams/mapsto] node[below=3pt] {\box\xratbelow} - node[above=2pt] {\box\xratabove} - (\xratlen,0) ;}} -\newcommand{\xlongequal}[2][]{% - \setbox\xratbelow=\hbox{\ensuremath{\scriptstyle #1}}% - \setbox\xratabove=\hbox{\ensuremath{\scriptstyle #2}}% - \pgfmathsetlengthmacro{\xratlen}{max(\wd\xratbelow, \wd\xratabove) + .8em}% - \mathrel{\tikz [baseline=-.55ex, every node/.style={inner sep=0pt}] - \draw (0,0) edge[commutative diagrams/equal] node[below=3pt] {\box\xratbelow} - node[above=2pt] {\box\xratabove} - (\xratlen,0) ;}} -\AtBeginDocument{ -\renewcommand{\twoheadrightarrow}{% - \mathrel{\tikz [baseline=-.55ex, every node/.style={inner sep=0pt}] - \draw (0,0) edge[commutative diagrams/twoheadrightarrow] (.8em,0) ;}} -\renewcommand{\twoheadleftarrow}{% - \mathrel{\tikz [baseline=-.55ex, every node/.style={inner sep=0pt}] - \draw (0,0) edge[commutative diagrams/twoheadleftarrow] (.8em,0) ;}} -} -\fi -\fi - -\if@minimclass@lmodern - \RequirePackage{amssymb} - \if@minimclass@useosf - \RequirePackage{cfr-lm} - \else - \RequirePackage{lmodern} - \fi - \PJLsetlinespacing{\setstretch{1.00}} -\fi - -\if@minimclass@palatino - \RequirePackage{amssymb} - \RequirePackage{mathpazo} - \PassOptionsToPackage{defaultsups}{newpxtext} - \RequirePackage{newpxtext} - % \RequirePackage{newpxmath} - \let\openbox\relax - \PJLsetlinespacing{\setstretch{1.07}} - \if@minimclass@useosf\useosf\fi -\fi - -\if@minimclass@times - \RequirePackage{amssymb} - \PassOptionsToPackage{defaultsups}{newtxtext} - \RequirePackage{newtxtext} - \RequirePackage{newtxmath} - \let\openbox\relax - \PJLsetlinespacing{\setstretch{1.00}} - \if@minimclass@useosf\useosf\fi -\fi - -\if@minimclass@garamond - \RequirePackage{amssymb} - \if@minimclass@useosf\else - \PassOptionsToPackage{lining}{ebgaramond} - \fi - \RequirePackage{ebgaramond-maths} - \RequirePackage{ebgaramond} - % \RequirePackage{garamondlibre} - \PJLsetlinespacing{\setstretch{1.00}} -\fi - -\if@minimclass@noto - \RequirePackage{amssymb} - \if@minimclass@useosf - \PassOptionsToPackage{oldstyle}{notomath} - \fi - \RequirePackage{anyfontsize} - \RequirePackage{notomath} - \PJLsetlinespacing{\setstretch{1.00}} -\fi - -\if@minimclass@biolinum - \RequirePackage{amssymb} - % \RequirePackage{mathpazo} - % \RequirePackage[sansmath]{libertinust1math} - \ifPDFTeX - \if@minimclass@useosf - \PassOptionsToPackage{osf}{biolinum} - \fi - \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, - \if@minimclass@useosf Numbers = OldStyle\fi ] - \fi - \PJLsetlinespacing{\setstretch{1.05}} - \RequirePackage[italic,defaultmathsizes]{mathastext} -\fi - -\def\PJL@font@alreadyset{} - -\PassOptionsToPackage{verbose=silent}{microtype} -\RequirePackage{microtype} -\PassOptionsToPackage{all}{nowidow} -\RequirePackage{nowidow} -\RequirePackage{embrac} +\WarningFilter { latexfont } { Font~shape } +\WarningFilter { latexfont } { Some~font } + +\cs_new_protected:Nn \__minimclass_load_file_or_config:Nnn + { + \bool_if:NT #1 + { + \exp_args:Nx \file_if_exist:nT { #2 } + { + \exp_args:Nx \file_input:n { #2 } + \use_none:nn + } + } + \use:n { #3 } + } + +\cs_new_protected:Nn \__minimclass_if_font_exist:nnn + { + \bool_if:NTF \l__minimclass_fast_bool + { #3 } + { \fontspec_font_if_exist:nTF { #1 } { #2 } { #3 } } + } + +\__minimclass_load_file_or_config:Nnn \l__minimclass_load_custom_font_file_bool { \l__minimclass_custom_font_file_str } + { + \RequirePackage { projlib-font } + + \bool_if:NF \g_projlib_font_already_set_bool + { + \bool_if:NT \l__minimclass_fast_bool + { + \RequirePackage { mathpazo } + } + + \PassOptionsToPackage { no-math,quiet } { fontspec } + \RequirePackage { fontspec } + + \__minimclass_load_file_or_config:Nnn \l__minimclass_load_custom_font_file_latin_bool { \l__minimclass_custom_font_file_latin_str } + { + \__minimclass_if_font_exist:nnn { Palatino~Linotype } + { + \bool_if:NTF \l__projlib_font_useosf_bool + { + \setmainfont { Palatino~Linotype } [ Numbers = OldStyle ] + } + { + \setmainfont { Palatino~Linotype } + } + } + { + \bool_if:NTF \l__projlib_font_useosf_bool + { + \setmainfont { TeXGyrePagellaX-Regular.otf } + [ + BoldFont = TeXGyrePagellaX-Bold.otf , + ItalicFont = TeXGyrePagellaX-Italic.otf , + BoldItalicFont = TeXGyrePagellaX-BoldItalic.otf , + Numbers = OldStyle , + ] + } + { + \setmainfont { TeXGyrePagellaX-Regular.otf } + [ + BoldFont = TeXGyrePagellaX-Bold.otf , + ItalicFont = TeXGyrePagellaX-Italic.otf , + BoldItalicFont = TeXGyrePagellaX-BoldItalic.otf , + ] + } + } + \setsansfont { SourceSansPro-Regular.otf } + [ + Scale = MatchLowercase , + BoldFont = SourceSansPro-Bold.otf , + ItalicFont = SourceSansPro-RegularIt.otf , + BoldItalicFont = SourceSansPro-BoldIt.otf , + ] + \setmonofont { NewCMMono10-Regular.otf } + [ + Scale = 1.05 , + BoldFont = NewCMMono10-Bold.otf , + ItalicFont = NewCMMono10-Italic.otf , + BoldItalicFont = NewCMMono10-BoldOblique.otf , + ] + + \projlib_language_set_linespacing_latin:n { \setstretch { 1.07 } } + } + } + + \PassOptionsToPackage { fontset = none, scheme = plain } { ctex } + \RequirePackage { ctex } + + \__minimclass_load_file_or_config:Nnn \l__minimclass_load_custom_font_file_cjk_bool { \l__minimclass_custom_font_file_cjk_str } + { + \__minimclass_if_font_exist:nnn { SourceHanSerifSC-Regular } + { + \setCJKmainfont { SourceHanSerifSC-Regular } + [ + BoldFont = SourceHanSerifSC-Bold , + ItalicFont = * , + BoldItalicFont = SourceHanSerifSC-Bold , + ] + } + { + \setCJKmainfont { FandolSong-Regular.otf } + [ + BoldFont = FandolSong-Bold.otf , + ItalicFont = FandolKai-Regular.otf , + BoldItalicFont = FandolKai-Regular.otf , + BoldItalicFeatures = { FakeBold = 4 } , + ] + } + + \__minimclass_if_font_exist:nnn { SourceHanSansSC-Regular } + { + \setCJKsansfont{SourceHanSansSC-Regular} + [ + BoldFont = SourceHanSansSC-Bold , + ItalicFont = * , + BoldItalicFont = SourceHanSansSC-Bold , + ] + } + { + \setCJKsansfont { FandolHei-Regular.otf } + [ + BoldFont = FandolHei-Bold.otf , + ItalicFont = * , + BoldItalicFont = FandolHei-Bold.otf , + ] + } + + \__minimclass_if_font_exist:nnn { SourceHanMonoSC-Regular } + { + \setCJKmonofont { SourceHanMonoSC-Regular } + [ + BoldFont = SourceHanMonoSC-Medium , + ItalicFont = * , + BoldItalicFont = SourceHanMonoSC-Medium , + ] + } + { + \setCJKmonofont { FandolFang-Regular.otf } + [ + BoldFont = * , + BoldFeatures = { FakeBold = 4 } , + ItalicFont = * , + BoldItalicFont = * , + BoldItalicFeatures = { FakeBold = 4 } , + ] + } + + \bool_if:NT \g__projlib_language_enabled_schinese_bool + { + \__minimclass_if_font_exist:nnn { SourceHanSerifSC-Regular } + { + \setCJKfamilyfont { SCmain } { SourceHanSerifSC-Regular } + [ + BoldFont = SourceHanSerifSC-Bold , + ItalicFont = * , + BoldItalicFont = SourceHanSerifSC-Bold , + ] + } + { + \setCJKfamilyfont { SCmain } { FandolSong-Regular.otf } + [ + BoldFont = FandolSong-Bold.otf , + ItalicFont = FandolKai-Regular.otf , + BoldItalicFont = FandolKai-Regular.otf , + BoldItalicFeatures = { FakeBold = 4 } , + ] + } + \__minimclass_if_font_exist:nnn { SourceHanSansSC-Regular } + { + \setCJKfamilyfont { SCsans } { SourceHanSansSC-Regular } + [ + BoldFont = SourceHanSansSC-Bold , + ItalicFont = * , + BoldItalicFont = SourceHanSansSC-Bold , + ] + } + { + \setCJKfamilyfont { SCsans } { FandolHei-Regular.otf } + [ + BoldFont = FandolHei-Bold.otf , + ItalicFont = * , + BoldItalicFont = FandolHei-Bold.otf , + ] + } + \__minimclass_if_font_exist:nnn { SourceHanMonoSC-Regular } + { + \setCJKfamilyfont { SCmono } { SourceHanMonoSC-Regular } + [ + BoldFont = SourceHanMonoSC-Medium , + ItalicFont = * , + BoldItalicFont = SourceHanMonoSC-Medium , + ] + } + { + \setCJKfamilyfont { SCmono } { FandolFang-Regular.otf } + [ + BoldFont = * , + BoldFeatures = { FakeBold = 4 } , + ItalicFont = * , + BoldItalicFont = * , + BoldItalicFeatures = { FakeBold = 4 } , + ] + } + } + + \bool_if:NT \g__projlib_language_enabled_tchinese_bool + { + \__minimclass_if_font_exist:nnn { SourceHanSerifTC-Regular } + { + \setCJKfamilyfont { TCmain } { SourceHanSerifTC-Regular } + [ + BoldFont = SourceHanSerifTC-Bold , + ItalicFont = * , + BoldItalicFont = SourceHanSerifTC-Bold , + ] + } + { + \setCJKfamilyfont { TCmain } { FandolSong-Regular.otf } + [ + BoldFont = FandolSong-Bold.otf , + ItalicFont = FandolKai-Regular.otf , + BoldItalicFont = FandolKai-Regular.otf , + BoldItalicFeatures = { FakeBold = 4 } , + ] + } + \__minimclass_if_font_exist:nnn { SourceHanSansTC-Regular } + { + \setCJKfamilyfont { TCsans } { SourceHanSansTC-Regular } + [ + BoldFont = SourceHanSansTC-Bold , + ItalicFont = * , + BoldItalicFont = SourceHanSansTC-Bold , + ] + } + { + \setCJKfamilyfont { TCsans } { FandolHei-Regular.otf } + [ + BoldFont = FandolHei-Bold.otf , + ItalicFont = * , + BoldItalicFont = FandolHei-Bold.otf , + ] + } + \__minimclass_if_font_exist:nnn { SourceHanMonoTC-Regular } + { + \setCJKfamilyfont { TCmono } { SourceHanMonoTC-Regular } + [ + BoldFont = SourceHanMonoTC-Medium , + ItalicFont = * , + BoldItalicFont = SourceHanMonoTC-Medium , + ] + } + { + \setCJKfamilyfont { TCmono } { FandolFang-Regular.otf } + [ + BoldFont = * , + BoldFeatures = { FakeBold = 4 } , + ItalicFont = * , + BoldItalicFont = * , + BoldItalicFeatures = { FakeBold = 4 } , + ] + } + } + + \bool_if:NT \g__projlib_language_enabled_japanese_bool + { + \__minimclass_if_font_exist:nnn { SourceHanSerif-Regular } + { + \setCJKfamilyfont { JPmain } { SourceHanSerif-Regular } + [ + BoldFont = SourceHanSerif-Bold , + ItalicFont = * , + BoldItalicFont = SourceHanSerif-Bold , + ] + } + { + \setCJKfamilyfont { JPmain } { FandolSong-Regular.otf } + [ + BoldFont = FandolSong-Bold.otf , + ItalicFont = FandolKai-Regular.otf , + BoldItalicFont = FandolKai-Regular.otf , + BoldItalicFeatures = { FakeBold = 4 } , + ] + } + \__minimclass_if_font_exist:nnn { SourceHanSans-Regular } + { + \setCJKfamilyfont { JPsans } { SourceHanSans-Regular } + [ + BoldFont = SourceHanSans-Bold , + ItalicFont = * , + BoldItalicFont = SourceHanSans-Bold , + ] + } + { + \setCJKfamilyfont { JPsans } { FandolHei-Regular.otf } + [ + BoldFont = FandolHei-Bold.otf , + ItalicFont = * , + BoldItalicFont = FandolHei-Bold.otf , + ] + } + \__minimclass_if_font_exist:nnn { SourceHanMono-Regular } + { + \setCJKfamilyfont { JPmono } { SourceHanMono-Regular } + [ + BoldFont = SourceHanMono-Medium , + ItalicFont = * , + BoldItalicFont = SourceHanMono-Medium , + ] + } + { + \setCJKfamilyfont { JPmono } { FandolFang-Regular.otf } + [ + BoldFont = * , + BoldFeatures = { FakeBold = 4 } , + ItalicFont = * , + BoldItalicFont = * , + BoldItalicFeatures = { FakeBold = 4 } , + ] + } + } + + \cs_new:Nn \minimclass_cjk_sffamily: {} + \cs_new:Nn \minimclass_cjk_ttfamily: {} + + \hook_gput_code:nnn { cmd/sffamily/after } { minimclass } { \minimclass_cjk_sffamily: } + \hook_gput_code:nnn { cmd/ttfamily/after } { minimclass } { \minimclass_cjk_ttfamily: } + + \AddLanguageSetting [schinese] + { + \cs_set:Nn \minimclass_cjk_sffamily: { \CJKfamily { SCsans } } + \cs_set:Nn \minimclass_cjk_ttfamily: { \CJKfamily { SCmono } } + \CJKfamily { SCmain } + } + \AddLanguageSetting [tchinese] + { + \cs_set:Nn \minimclass_cjk_sffamily: { \CJKfamily { TCsans } } + \cs_set:Nn \minimclass_cjk_ttfamily: { \CJKfamily { TCmono } } + \CJKfamily { TCmain } + } + \AddLanguageSetting [japanese] + { + \cs_set:Nn \minimclass_cjk_sffamily: { \CJKfamily { JPsans } } + \cs_set:Nn \minimclass_cjk_ttfamily: { \CJKfamily { JPmono } } + \CJKfamily { JPmain } + } + + \tl_gset:Nn \g_minimalist_title_font_common_tl { \minimclass_cjk_sffamily: } + } + + \__minimclass_load_file_or_config:Nnn \l__minimclass_load_custom_font_file_math_bool { \l__minimclass_custom_font_file_math_str } + { + \bool_if:NF \g_projlib_font_already_set_bool + { + \bool_if:NTF \l__minimclass_fast_bool + { + \RequirePackage { amssymb } + } + { + \PassOptionsToPackage { warnings-off = { mathtools-colon, mathtools-overbracket } } { unicode-math } + \RequirePackage { unicode-math } + \unimathsetup { math-style = ISO, partial = upright, nabla = upright } + \setmathfont { Asana-Math.otf } + \__minimclass_if_font_exist:nnn { Neo~Euler } + { + \setmathfont { Neo~Euler } + [ + range = { up / { Latin, latin, Greek, greek }, + bfup / { Latin, latin, Greek, greek }, + cal, bfcal, frak, bffrak, + `(, `), `[, `], `\{, `\}, `:, `=, \ne, \equiv, `/, \backslash, + \in, \notin, \ni, \subset, \supset, \subseteq, \supseteq, + \rightarrow, \leftarrow, \leftrightarrow, + \longleftarrow, \longrightarrow, \longleftrightarrow, + \Leftarrow, \Rightarrow, \Leftrightarrow, + \Longleftarrow, \Longrightarrow, \Longleftrightarrow, + \nrightarrow, \nleftarrow, \nleftrightarrow, + \nLeftarrow, \nRightarrow, \nLeftrightarrow, + \mapsto, \hookrightarrow, \hookleftarrow, + \leftharpoonup, \rightharpoonup, \leftharpoondown, \rightharpoondown, + \rightleftharpoons, \leftrightharpoons, + \sum, \prod, \coprod, + \sqrt, \int, \iint, \iiint, \oint + }, + script-features = {}, + sscript-features = {}, + Scale = 1.05, + ] + }{} + \setmathfont { latinmodern-math.otf } + [ + range = { \leq, \geq, \ll, \gg, \lll, \ggg, \leqslant, \geqslant }, + Scale = 0.95, + ] + \setmathfont { texgyrepagella-math.otf } + [ + range = { up / num, bfup / num } + ] + + \hook_gput_code:nnn { begindocument } { minimclass } + { + \NewCommandCopy \minimclass_backup_mid: \mid + \RenewDocumentCommand \mid {} + { \skip_horizontal:n {-.15em} \minimclass_backup_mid: \skip_horizontal:n {-.15em} } + \NewCommandCopy \minimclass_backup_nmid: \nmid + \RenewDocumentCommand \nmid {} + { \skip_horizontal:n {-.15em} \minimclass_backup_nmid: \skip_horizontal:n {-.15em} } + } + + \RequirePackage { tikz-cd } + + \box_new:N \l__minimclass_xarrows_above_box + \box_new:N \l__minimclass_xarrows_below_box + \dim_new:N \l__minimclass_xarrows_length_dim + \cs_new_protected:Nn \minimclass_xarrows_generic:nnnn + % #3 = option of \tikz + % #4 = edge of \draw + { + \hbox_set:Nn \l__minimclass_xarrows_below_box { \ensuremath { \scriptstyle #1 } } + \hbox_set:Nn \l__minimclass_xarrows_above_box { \ensuremath { \scriptstyle #2 } } + \dim_set:Nn \l__minimclass_xarrows_length_dim + { \dim_eval:n { \dim_max:nn { \box_wd:N \l__minimclass_xarrows_below_box } { \box_wd:N \l__minimclass_xarrows_above_box } + .8em } } + \mathrel + { + \tikz [ #3, baseline = -.55ex, every~node/.style = { inner~sep = 0pt } ] + \draw (0,0) #4 + node [ below = 3pt ] { \box_use:N \l__minimclass_xarrows_below_box } + node [ above = 2pt ] { \box_use:N \l__minimclass_xarrows_above_box } + ( \l__minimclass_xarrows_length_dim ,0) ; + } + } + + \RenewDocumentCommand \xrightarrow { O{} m } + { + \minimclass_xarrows_generic:nnnn { #1 } { #2 } { -> } { -- } + } + \RenewDocumentCommand \xleftarrow { O{} m } + { + \minimclass_xarrows_generic:nnnn { #1 } { #2 } { <- } { -- } + } + \RenewDocumentCommand \xleftrightarrow { O{} m } + { + \minimclass_xarrows_generic:nnnn { #1 } { #2 } { <-> } { -- } + } + \RenewDocumentCommand \xhookrightarrow { O{} m } + { + \minimclass_xarrows_generic:nnnn { #1 } { #2 } {} { edge [ commutative~diagrams/hookrightarrow ] } + } + \RenewDocumentCommand \xhookleftarrow { O{} m } + { + \minimclass_xarrows_generic:nnnn { #1 } { #2 } {} { edge [ commutative~diagrams/hookleftarrow ] } + } + \RenewDocumentCommand \xmapsto { O{} m } + { + \minimclass_xarrows_generic:nnnn { #1 } { #2 } {} { edge [ commutative~diagrams/mapsto ] } + } + \NewDocumentCommand \xlongequal { O{} m } + { + \minimclass_xarrows_generic:nnnn { #1 } { #2 } {} { edge [ commutative~diagrams/equal ] } + } + \hook_gput_code:nnn { begindocument/end } { minimclass } + { + \RenewDocumentCommand \twoheadrightarrow {} + { + \minimclass_xarrows_generic:nnnn { \,\, } {} {} { edge [ commutative~diagrams/twoheadrightarrow ] } + } + \RenewDocumentCommand \twoheadleftarrow {} + { + \minimclass_xarrows_generic:nnnn { \,\, } {} {} { edge [ commutative~diagrams/twoheadleftarrow ] } + } + } + } + } + } + } + +\PassOptionsToPackage { all } { nowidow } +\RequirePackage { nowidow } +\RequirePackage { embrac } %%================================ -%% Graphics +%% Graphics %%================================ -\RequirePackage{graphicx} -\graphicspath{{images/}} -\RequirePackage{wrapfig} -\RequirePackage{float} -\RequirePackage{caption} -\captionsetup{font=small} - -%%================================ -%% Index -%%================================ -\AtEndPreamble{ -\pretocmd{\printindex}{\LocallyStopLineNumbers}{}{} -\apptocmd{\printindex}{\ResumeLineNumbers}{}{} -} +\RequirePackage { graphicx } +\graphicspath { { images/ } } +\RequirePackage { wrapfig } +\RequirePackage { float } +\RequirePackage { caption } +\captionsetup { font = small } \endinput %% -- cgit v1.2.3