summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/beaulivre/beaulivre.cls
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/beaulivre/beaulivre.cls')
-rw-r--r--Master/texmf-dist/tex/latex/beaulivre/beaulivre.cls1188
1 files changed, 651 insertions, 537 deletions
diff --git a/Master/texmf-dist/tex/latex/beaulivre/beaulivre.cls b/Master/texmf-dist/tex/latex/beaulivre/beaulivre.cls
index bc373dd57ea..d90f081dca3 100644
--- a/Master/texmf-dist/tex/latex/beaulivre/beaulivre.cls
+++ b/Master/texmf-dist/tex/latex/beaulivre/beaulivre.cls
@@ -2,7 +2,7 @@
%% This is file `beaulivre/beaulivre.cls',
%% generated with the docstrip utility.
-%% Copyright (C) 2021 by Jinwen XU
+%% Copyright (C) 2021-2022 by Jinwen XU
%%
%% This is part of the colorist class series.
%%
@@ -16,551 +16,665 @@
%% 2005/12/01 or later.
%%
\NeedsTeXFormat{LaTeX2e}[2020-10-01]
-\ProvidesClass{beaulivre}
- [2021/12/16 A colorful book style]
-\def\colorclass@baseclass{book}
-\RequirePackage{kvoptions}
-\RequirePackage{etoolbox}
-\SetupKeyvalOptions{
- family = @colorclass,
- prefix = @colorclass@,
-}
-\DeclareBoolOption[false]{draft}
-\DeclareBoolOption[false]{fast}
-\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@colorclass@bfivepaper\@colorclass@bfivepaperfalse
-\DeclareVoidOption{b5paper}{\@colorclass@bfivepapertrue}
-\newif\if@colorclass@afourpaper\@colorclass@afourpaperfalse
-\DeclareVoidOption{a4paper}{\@colorclass@afourpapertrue}
-
-\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{\colorclass@baseclass}}
-\ProcessKeyvalOptions*\relax
-\LoadClass{\colorclass@baseclass}
-
-\if@colorclass@draft
- \@colorclass@fasttrue
-\fi
-\if@colorclass@lmodern
- \@colorclass@customfonttrue
-\fi
-\if@colorclass@palatino
- \@colorclass@customfonttrue
-\fi
-\if@colorclass@times
- \@colorclass@customfonttrue
-\fi
-\if@colorclass@garamond
- \@colorclass@customfonttrue
-\fi
-\if@colorclass@noto
- \@colorclass@customfonttrue
-\fi
-\if@colorclass@biolinum
- \@colorclass@customfonttrue
-\fi
+\RequirePackage{l3keys2e}
+\ProvidesExplClass
+ {beaulivre}
+ {2022/03/19} {}
+ {A colorful book style}
+
+\tl_const:Nn \l__colorclass_base_class_tl { book }
+
+
+\bool_new:N \l__colorclass_load_custom_font_file_bool
+\bool_set_false:N \l__colorclass_load_custom_font_file_bool
+
+\bool_new:N \l__colorclass_load_custom_font_file_latin_bool
+\bool_set_false:N \l__colorclass_load_custom_font_file_latin_bool
+
+\bool_new:N \l__colorclass_load_custom_font_file_cjk_bool
+\bool_set_false:N \l__colorclass_load_custom_font_file_cjk_bool
+
+\bool_new:N \l__colorclass_load_custom_font_file_math_bool
+\bool_set_false:N \l__colorclass_load_custom_font_file_math_bool
+
+\keys_define:nn { colorclass }
+ {
+ , draft .bool_set:N = \l__colorclass_fast_bool
+ , draft .initial:n = { false }
+ , fast .bool_set:N = \l__colorclass_fast_bool
+
+
+ , load custom font file .code:n = {
+ \bool_set_true:N \l__colorclass_load_custom_font_file_bool
+ \str_set:Nn \l__colorclass_custom_font_file_str { #1 }
+ \bool_set_true:N \l__colorclass_load_custom_font_file_latin_bool
+ \str_set:Nn \l__colorclass_custom_font_file_latin_str { colorist.font.latin }
+ \bool_set_true:N \l__colorclass_load_custom_font_file_cjk_bool
+ \str_set:Nn \l__colorclass_custom_font_file_cjk_str { colorist.font.cjk }
+ \bool_set_true:N \l__colorclass_load_custom_font_file_math_bool
+ \str_set:Nn \l__colorclass_custom_font_file_math_str { colorist.font.math }
+ }
+ , load custom font file .default:n = { colorist.font }
+ , load~custom~font~file .code:n = {
+ \bool_set_true:N \l__colorclass_load_custom_font_file_bool
+ \str_set:Nn \l__colorclass_custom_font_file_str { #1 }
+ }
+ , load~custom~font~file .default:n = { colorist.font }
+ , load-custom-font-file .code:n = {
+ \bool_set_true:N \l__colorclass_load_custom_font_file_bool
+ \str_set:Nn \l__colorclass_custom_font_file_str { #1 }
+ }
+ , load-custom-font-file .default:n = { colorist.font }
+
+ , load custom latin font file .code:n = {
+ \bool_set_true:N \l__colorclass_load_custom_font_file_latin_bool
+ \str_set:Nn \l__colorclass_custom_font_file_latin_str { #1 }
+ }
+ , load custom latin font file .default:n = { colorist.font.latin }
+ , load~custom~latin~font~file .code:n = {
+ \bool_set_true:N \l__colorclass_load_custom_font_file_latin_bool
+ \str_set:Nn \l__colorclass_custom_font_file_latin_str { #1 }
+ }
+ , load~custom~latin~font~file .default:n = { colorist.font.latin }
+ , load-custom-latin-font-file .code:n = {
+ \bool_set_true:N \l__colorclass_load_custom_font_file_latin_bool
+ \str_set:Nn \l__colorclass_custom_font_file_latin_str { #1 }
+ }
+ , load-custom-latin-font-file .default:n = { colorist.font.latin }
+
+ , load custom cjk font file .code:n = {
+ \bool_set_true:N \l__colorclass_load_custom_font_file_cjk_bool
+ \str_set:Nn \l__colorclass_custom_font_file_cjk_str { #1 }
+ }
+ , load custom cjk font file .default:n = { colorist.font.cjk }
+ , load~custom~cjk~font~file .code:n = {
+ \bool_set_true:N \l__colorclass_load_custom_font_file_cjk_bool
+ \str_set:Nn \l__colorclass_custom_font_file_cjk_str { #1 }
+ }
+ , load~custom~cjk~font~file .default:n = { colorist.font.cjk }
+ , load-custom-cjk-font-file .code:n = {
+ \bool_set_true:N \l__colorclass_load_custom_font_file_cjk_bool
+ \str_set:Nn \l__colorclass_custom_font_file_cjk_str { #1 }
+ }
+ , load-custom-cjk-font-file .default:n = { colorist.font.cjk }
+
+ , load custom math font file .code:n = {
+ \bool_set_true:N \l__colorclass_load_custom_font_file_math_bool
+ \str_set:Nn \l__colorclass_custom_font_file_math_str { #1 }
+ }
+ , load custom math font file .default:n = { colorist.font.math }
+ , load~custom~math~font~file .code:n = {
+ \bool_set_true:N \l__colorclass_load_custom_font_file_math_bool
+ \str_set:Nn \l__colorclass_custom_font_file_math_str { #1 }
+ }
+ , load~custom~math~font~file .default:n = { colorist.font.math }
+ , load-custom-math-font-file .code:n = {
+ \bool_set_true:N \l__colorclass_load_custom_font_file_math_bool
+ \str_set:Nn \l__colorclass_custom_font_file_math_str { #1 }
+ }
+ , load-custom-math-font-file .default:n = { colorist.font.math }
+
+ , a4paper .bool_set:N = \l__colorclass_a_four_paper_bool
+ , a4paper .initial:n = { false }
+ , b5paper .bool_set:N = \l__colorclass_b_five_paper_bool
+ , b5paper .initial:n = { false }
+
+ , 11pt .code:n = { \PassOptionsToClass { \CurrentOption } { \l__colorclass_base_class_tl } }
+ , 12pt .code:n = { \PassOptionsToClass { \CurrentOption } { \l__colorclass_base_class_tl } }
+
+ , unknown .code:n = {
+ \PassOptionsToPackage { \CurrentOption } { colorist }
+ }
+ }
+\ProcessKeysOptions { colorclass }
+
+\LoadClass{\l__colorclass_base_class_tl}
%%================================
-%% Page layout
+%% Page layout
%%================================
-\RequirePackage{silence}
-\WarningFilter{geometry}{Over-specification in}
-\RequirePackage[heightrounded]{geometry}
-\geometry{
- papersize={8.5in,11in},
- % total={47em,66em},
- total={6.500in,9.130in},
- hmarginratio=1:1,
- vmarginratio=1:1,
- footnotesep=2em plus 2pt minus 2pt,
-}
-\if@colorclass@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@colorclass@afourpaper
-\geometry{
- a4paper,
- % total={47em,70em},
- total={6.500in,9.685in},
- hmarginratio=1:1,
- vmarginratio=1:1,
- footnotesep=2em plus 2pt minus 2pt,
-}
-\fi
-
-\RequirePackage{indentfirst}
-
-\if@colorclass@fast
- \PassOptionsToPackage{fast}{colorist}
- \RequirePackage{draftwatermark}
- \DraftwatermarkOptions{text={\normalfont DRAFT},color=paper!95!-paper}
-\fi
-
-\RequirePackage{colorist}
+\RequirePackage { silence }
+\WarningFilter { geometry } { Over-specification }
+
+\PassOptionsToPackage { heightrounded } { geometry }
+\RequirePackage { geometry }
+
+\geometry
+ {
+ papersize = { 8.5in, 11in },
+ total = { 6.500in, 9.130in },
+ centering,
+ footnotesep = 2em plus 2pt minus 2pt,
+ }
+
+\bool_if:NT \l__colorclass_b_five_paper_bool
+ {
+ \geometry
+ {
+ b5paper,
+ total = { 5.535in, 8.160in },
+ centering,
+ footnotesep = 2em plus 2pt minus 2pt,
+ }
+ }
+
+\bool_if:NT \l__colorclass_a_four_paper_bool
+ {
+ \geometry
+ {
+ a4paper,
+ total = { 6.500in, 9.685in },
+ centering,
+ footnotesep = 2em plus 2pt minus 2pt,
+ }
+ }
+
+\bool_if:NT \l__colorclass_fast_bool
+ {
+ \PassOptionsToPackage { fast } { colorist }
+ \RequirePackage { draftwatermark }
+ \DraftwatermarkOptions { text = { \normalfont DRAFT }, color = paper!97!-paper }
+ }
+
+\RequirePackage { indentfirst }
+
+\RequirePackage { colorist }
+
+\hfuzz=2pt
+\vfuzz=2pt
%%================================
-%% Fonts
+%% Fonts
%%================================
-\if@colorclass@customfont\else
- \if@colorclass@fast
- \RequirePackage{mathpazo}
- \fi
-\fi
-
-\PassOptionsToPackage{no-math,quiet}{fontspec}
-\RequirePackage{fontspec}
-
-\IfFileExists{colorist-font.tex}{
- \input{colorist-font.tex}
-}{
-\IfFontExistsTF{Palatino Linotype}{%
- \setmainfont{Palatino Linotype}
- [\if@colorclass@useosf Numbers = OldStyle\fi]
-}{
- \setmainfont{TeXGyrePagellaX-Regular.otf}[
- BoldFont = TeXGyrePagellaX-Bold.otf ,
- ItalicFont = TeXGyrePagellaX-Italic.otf ,
- BoldItalicFont = TeXGyrePagellaX-BoldItalic.otf,
- \if@colorclass@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{colorist-font.cjk.tex}{
- \input{colorist-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
-}
-
-\if@colorclass@customfont\else
-\if@colorclass@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@colorclass@lmodern
- \RequirePackage{amssymb}
- \if@colorclass@useosf
- \RequirePackage{cfr-lm}
- \else
- \RequirePackage{lmodern}
- \fi
- \PJLsetlinespacing{\setstretch{1.00}}
-\fi
-
-\if@colorclass@palatino
- \RequirePackage{amssymb}
- \RequirePackage{mathpazo}
- \PassOptionsToPackage{defaultsups}{newpxtext}
- \RequirePackage{newpxtext}
- % \RequirePackage{newpxmath}
- \let\openbox\relax
- \PJLsetlinespacing{\setstretch{1.07}}
- \if@colorclass@useosf\useosf\fi
-\fi
-
-\if@colorclass@times
- \RequirePackage{amssymb}
- \PassOptionsToPackage{defaultsups}{newtxtext}
- \RequirePackage{newtxtext}
- \RequirePackage{newtxmath}
- \let\openbox\relax
- \PJLsetlinespacing{\setstretch{1.00}}
- \if@colorclass@useosf\useosf\fi
- \let\colorist@sffamily\relax
-\fi
-
-\if@colorclass@garamond
- \RequirePackage{amssymb}
- \if@colorclass@useosf\else
- \PassOptionsToPackage{lining}{ebgaramond}
- \fi
- \RequirePackage{ebgaramond-maths}
- \RequirePackage{ebgaramond}
- % \RequirePackage{garamondlibre}
- \PJLsetlinespacing{\setstretch{1.00}}
- \let\colorist@sffamily\relax
-\fi
-
-\if@colorclass@noto
- \RequirePackage{amssymb}
- \if@colorclass@useosf
- \PassOptionsToPackage{oldstyle}{notomath}
- \fi
- \RequirePackage{anyfontsize}
- \RequirePackage{notomath}
- \PJLsetlinespacing{\setstretch{1.00}}
-\fi
-
-\if@colorclass@biolinum
- \RequirePackage{amssymb}
- % \RequirePackage{mathpazo}
- % \RequirePackage[sansmath]{libertinust1math}
- \ifPDFTeX
- \if@colorclass@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@colorclass@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 \__colorclass_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 \__colorclass_if_font_exist:nnn
+ {
+ \bool_if:NTF \l__colorclass_fast_bool
+ { #3 }
+ { \fontspec_font_if_exist:nTF { #1 } { #2 } { #3 } }
+ }
+
+\__colorclass_load_file_or_config:Nnn \l__colorclass_load_custom_font_file_bool { \l__colorclass_custom_font_file_str }
+ {
+ \RequirePackage { projlib-font }
+
+ \bool_if:NF \g_projlib_font_already_set_bool
+ {
+ \bool_if:NT \l__colorclass_fast_bool
+ {
+ \RequirePackage { mathpazo }
+ }
+
+ \PassOptionsToPackage { no-math,quiet } { fontspec }
+ \RequirePackage { fontspec }
+
+ \__colorclass_load_file_or_config:Nnn \l__colorclass_load_custom_font_file_latin_bool { \l__colorclass_custom_font_file_latin_str }
+ {
+ \__colorclass_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 }
+
+ \__colorclass_load_file_or_config:Nnn \l__colorclass_load_custom_font_file_cjk_bool { \l__colorclass_custom_font_file_cjk_str }
+ {
+ \__colorclass_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 } ,
+ ]
+ }
+
+ \__colorclass_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 ,
+ ]
+ }
+
+ \__colorclass_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
+ {
+ \__colorclass_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 } ,
+ ]
+ }
+ \__colorclass_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 ,
+ ]
+ }
+ \__colorclass_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
+ {
+ \__colorclass_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 } ,
+ ]
+ }
+ \__colorclass_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 ,
+ ]
+ }
+ \__colorclass_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
+ {
+ \__colorclass_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 } ,
+ ]
+ }
+ \__colorclass_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 ,
+ ]
+ }
+ \__colorclass_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 \colorclass_cjk_sffamily: {}
+ \cs_new:Nn \colorclass_cjk_ttfamily: {}
+
+ \hook_gput_code:nnn { cmd/sffamily/after } { colorclass } { \colorclass_cjk_sffamily: }
+ \hook_gput_code:nnn { cmd/ttfamily/after } { colorclass } { \colorclass_cjk_ttfamily: }
+
+ \AddLanguageSetting [schinese]
+ {
+ \cs_set:Nn \colorclass_cjk_sffamily: { \CJKfamily { SCsans } }
+ \cs_set:Nn \colorclass_cjk_ttfamily: { \CJKfamily { SCmono } }
+ \CJKfamily { SCmain }
+ }
+ \AddLanguageSetting [tchinese]
+ {
+ \cs_set:Nn \colorclass_cjk_sffamily: { \CJKfamily { TCsans } }
+ \cs_set:Nn \colorclass_cjk_ttfamily: { \CJKfamily { TCmono } }
+ \CJKfamily { TCmain }
+ }
+ \AddLanguageSetting [japanese]
+ {
+ \cs_set:Nn \colorclass_cjk_sffamily: { \CJKfamily { JPsans } }
+ \cs_set:Nn \colorclass_cjk_ttfamily: { \CJKfamily { JPmono } }
+ \CJKfamily { JPmain }
+ }
+ }
+
+ \__colorclass_load_file_or_config:Nnn \l__colorclass_load_custom_font_file_math_bool { \l__colorclass_custom_font_file_math_str }
+ {
+ \bool_if:NF \g_projlib_font_already_set_bool
+ {
+ \bool_if:NTF \l__colorclass_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 }
+ \__colorclass_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 } { colorclass }
+ {
+ \NewCommandCopy \colorclass_backup_mid: \mid
+ \RenewDocumentCommand \mid {}
+ { \skip_horizontal:n {-.15em} \colorclass_backup_mid: \skip_horizontal:n {-.15em} }
+ \NewCommandCopy \colorclass_backup_nmid: \nmid
+ \RenewDocumentCommand \nmid {}
+ { \skip_horizontal:n {-.15em} \colorclass_backup_nmid: \skip_horizontal:n {-.15em} }
+ }
+
+ \RequirePackage { tikz-cd }
+
+ \box_new:N \l__colorclass_xarrows_above_box
+ \box_new:N \l__colorclass_xarrows_below_box
+ \dim_new:N \l__colorclass_xarrows_length_dim
+ \cs_new_protected:Nn \colorclass_xarrows_generic:nnnn
+ % #3 = option of \tikz
+ % #4 = edge of \draw
+ {
+ \hbox_set:Nn \l__colorclass_xarrows_below_box { \ensuremath { \scriptstyle #1 } }
+ \hbox_set:Nn \l__colorclass_xarrows_above_box { \ensuremath { \scriptstyle #2 } }
+ \dim_set:Nn \l__colorclass_xarrows_length_dim
+ { \dim_eval:n { \dim_max:nn { \box_wd:N \l__colorclass_xarrows_below_box } { \box_wd:N \l__colorclass_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__colorclass_xarrows_below_box }
+ node [ above = 2pt ] { \box_use:N \l__colorclass_xarrows_above_box }
+ ( \l__colorclass_xarrows_length_dim ,0) ;
+ }
+ }
+
+ \RenewDocumentCommand \xrightarrow { O{} m }
+ {
+ \colorclass_xarrows_generic:nnnn { #1 } { #2 } { -> } { -- }
+ }
+ \RenewDocumentCommand \xleftarrow { O{} m }
+ {
+ \colorclass_xarrows_generic:nnnn { #1 } { #2 } { <- } { -- }
+ }
+ \RenewDocumentCommand \xleftrightarrow { O{} m }
+ {
+ \colorclass_xarrows_generic:nnnn { #1 } { #2 } { <-> } { -- }
+ }
+ \RenewDocumentCommand \xhookrightarrow { O{} m }
+ {
+ \colorclass_xarrows_generic:nnnn { #1 } { #2 } {} { edge [ commutative~diagrams/hookrightarrow ] }
+ }
+ \RenewDocumentCommand \xhookleftarrow { O{} m }
+ {
+ \colorclass_xarrows_generic:nnnn { #1 } { #2 } {} { edge [ commutative~diagrams/hookleftarrow ] }
+ }
+ \RenewDocumentCommand \xmapsto { O{} m }
+ {
+ \colorclass_xarrows_generic:nnnn { #1 } { #2 } {} { edge [ commutative~diagrams/mapsto ] }
+ }
+ \NewDocumentCommand \xlongequal { O{} m }
+ {
+ \colorclass_xarrows_generic:nnnn { #1 } { #2 } {} { edge [ commutative~diagrams/equal ] }
+ }
+ \hook_gput_code:nnn { begindocument/end } { colorclass }
+ {
+ \RenewDocumentCommand \twoheadrightarrow {}
+ {
+ \colorclass_xarrows_generic:nnnn { \,\, } {} {} { edge [ commutative~diagrams/twoheadrightarrow ] }
+ }
+ \RenewDocumentCommand \twoheadleftarrow {}
+ {
+ \colorclass_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}
+\RequirePackage { graphicx }
+\graphicspath { { images/ } }
+\RequirePackage { wrapfig }
+\RequirePackage { float }
+\RequirePackage { caption }
+\captionsetup { font = small }
\endinput
%%