diff options
Diffstat (limited to 'macros/latex/contrib/projlib/ProjLib.dtx')
-rw-r--r-- | macros/latex/contrib/projlib/ProjLib.dtx | 287 |
1 files changed, 126 insertions, 161 deletions
diff --git a/macros/latex/contrib/projlib/ProjLib.dtx b/macros/latex/contrib/projlib/ProjLib.dtx index ee03498a47..930ff18847 100644 --- a/macros/latex/contrib/projlib/ProjLib.dtx +++ b/macros/latex/contrib/projlib/ProjLib.dtx @@ -18,47 +18,47 @@ % %<*ProjLib> \ProvidesPackage{ProjLib} - [2021/08/07a The collective interface of ProjLib toolkit] + [2021/08/11 The collective interface of ProjLib toolkit] %</ProjLib> % %<*PJLauthor> \ProvidesPackage{PJLauthor} - [2021/08/07a Enhanced author information block] + [2021/08/11 Enhanced author information block] %</PJLauthor> % %<*PJLdate> \ProvidesPackage{PJLdate} - [2021/08/07a Convert yyyy-mm-dd to normal datetime format] + [2021/08/11 Convert yyyy-mm-dd to normal datetime format] %</PJLdate> % %<*PJLdraft> \ProvidesPackage{PJLdraft} - [2021/08/07a Some useful macros for the draft stage] + [2021/08/11 Some useful macros for the draft stage] %</PJLdraft> % %<*PJLlang> \ProvidesPackage{PJLlang} - [2021/08/07a Multi-language configuration] + [2021/08/11 Multi-language configuration] %</PJLlang> % %<*PJLlogo> \ProvidesPackage{PJLlogo} - [2021/08/07a The ProjLib logo] + [2021/08/11 The ProjLib logo] %</PJLlogo> % %<*PJLmath> \ProvidesPackage{PJLmath} - [2021/08/07a Useful math macros and shortcuts] + [2021/08/11 Useful math macros and shortcuts] %</PJLmath> % %<*PJLpaper> \ProvidesPackage{PJLpaper} - [2021/08/07a Paper style configuration] + [2021/08/11 Paper style configuration] %</PJLpaper> % %<*PJLthm> \ProvidesPackage{PJLthm} - [2021/08/07a Theorem setup and configuration] + [2021/08/11 Theorem setup and configuration] %</PJLthm> % %# 下面两行引入宏包的代码是所有文件共用的。 @@ -411,19 +411,19 @@ \gappto{\PJLlang@langconfig@common}{% \let\@DTMdate\@DTMdate@PJLoriginal% } -\gappto{\PJLlang@langconfig@schinese}{% +\gappto{\PJLlang@langconfig@CN}{% \renewcommand*{\@DTMdate}[1]{% \expandafter\@dtm@parsedate#1\@dtm@endparsedate% \zhdate{\@dtm@year/\@dtm@month/\@dtm@day}% }% } -\gappto{\PJLlang@langconfig@tchinese}{% +\gappto{\PJLlang@langconfig@TC}{% \renewcommand*{\@DTMdate}[1]{% \expandafter\@dtm@parsedate#1\@dtm@endparsedate% \zhdate{\@dtm@year/\@dtm@month/\@dtm@day}% }% } -\gappto{\PJLlang@langconfig@japanese}{% +\gappto{\PJLlang@langconfig@JP}{% \renewcommand*{\@DTMdate}[1]{% \expandafter\@dtm@parsedate#1\@dtm@endparsedate% \zhdate{\@dtm@year/\@dtm@month/\@dtm@day}% @@ -664,6 +664,77 @@ \newcommand\japaneseABBR{JP} \newcommand\russianABBR{RU} +%# 将字符串转换为相应的缩写 +%# Convert a string to the corresponding abbreviation +\ExplSyntaxOn +% See https://tex.stackexchange.com/a/610146 +\NewExpandableDocumentCommand{\StrToABBR}{m} + { + \str_case_e:nn { \str_foldcase:n { #1 } } + { + {cn} {CN} + {chinese} {CN} + {schinese} {CN} + {simplifiedchinese} {CN} + {tc} {TC} + {tchinese} {TC} + {traditionalchinese} {TC} + {jp} {JP} + {japanese} {JP} + {en} {EN} + {english} {EN} + {fr} {FR} + {french} {FR} + {de} {DE} + {ngerman} {DE} + {it} {IT} + {italian} {IT} + {pt} {PT} + {portuguese} {PT} + {br} {BR} + {brazilian} {BR} + {es} {ES} + {spanish} {ES} + {german} {DE} + {ru} {RU} + {russian} {RU} + } + } + +\NewExpandableDocumentCommand{\StrToTYPE}{m} + { + \str_case_e:nn { \str_foldcase:n { #1 } } + { + {cn} {CJK} + {chinese} {CJK} + {schinese} {CJK} + {simplifiedchinese} {CJK} + {tc} {CJK} + {tchinese} {CJK} + {traditionalchinese} {CJK} + {jp} {CJK} + {japanese} {CJK} + {en} {Latin} + {english} {Latin} + {fr} {Latin} + {french} {Latin} + {de} {Latin} + {ngerman} {Latin} + {it} {Latin} + {italian} {Latin} + {pt} {Latin} + {portuguese} {Latin} + {br} {Latin} + {brazilian} {Latin} + {es} {Latin} + {spanish} {Latin} + {german} {Latin} + {ru} {Latin} + {russian} {Latin} + } + } +\ExplSyntaxOff + %# 在 pdfLaTeX 编译时载入编码设置 %# Load the encoding settings when pdfLaTeX is used \RequirePackage{iftex} @@ -723,7 +794,7 @@ %# 各个语言的设置 %# The configuration for each language -\newcommand{\PJLlang@langconfig@schinese}{% +\newcommand{\PJLlang@langconfig@CN}{% \def\abstractname{摘要}% \def\proofname{证明}% \def\contentsname{目录}% @@ -738,7 +809,7 @@ \let\today\zhtoday% \renewcommand{\languagename}{schinese}% } -\newcommand{\PJLlang@langconfig@tchinese}{% +\newcommand{\PJLlang@langconfig@TC}{% \def\abstractname{摘要}% \def\proofname{證明}% \def\contentsname{目錄}% @@ -753,72 +824,42 @@ \let\today\zhtoday% \renewcommand{\languagename}{tchinese}% } -\newcommand{\PJLlang@langconfig@japanese}{% +\newcommand{\PJLlang@langconfig@JP}{% \selectlanguage{japanese}% } -\newcommand{\PJLlang@langconfig@english}{% +\newcommand{\PJLlang@langconfig@EN}{% \selectlanguage{english}% } -\newcommand{\PJLlang@langconfig@french}{% +\newcommand{\PJLlang@langconfig@FR}{% \selectlanguage{french}% % The line below is currently only needed for 'babel', but also works with 'polyglossia' \def\frenchpartname{Partie}% } -\newcommand{\PJLlang@langconfig@german}{% +\newcommand{\PJLlang@langconfig@DE}{% \selectlanguage{ngerman}% } -\newcommand{\PJLlang@langconfig@italian}{% +\newcommand{\PJLlang@langconfig@IT}{% \selectlanguage{italian}% } -\newcommand{\PJLlang@langconfig@portuguese}{% +\newcommand{\PJLlang@langconfig@PT}{% \selectlanguage{portuguese}% } -\newcommand{\PJLlang@langconfig@brazilian}{% +\newcommand{\PJLlang@langconfig@BR}{% \selectlanguage{brazilian}% } -\newcommand{\PJLlang@langconfig@spanish}{% +\newcommand{\PJLlang@langconfig@ES}{% \selectlanguage{spanish}% } -\newcommand{\PJLlang@langconfig@russian}{% +\newcommand{\PJLlang@langconfig@RU}{% \selectlanguage{russian}% } %# 用于增加语言设置的用户指令 AddLanguageSetting %# User command for adding language settings -\RequirePackage{xstring} \NewDocumentCommand\AddLanguageSetting{d()m}{% \IfNoValueTF{#1}% {\gappto{\PJLlang@langconfig@common}{#2}}% - {% - \lowercase{\IfStrEqCase{#1}}{% - {cn}{\gappto{\PJLlang@langconfig@schinese}{#2}}% - {chinese}{\gappto{\PJLlang@langconfig@schinese}{#2}}% - {schinese}{\gappto{\PJLlang@langconfig@schinese}{#2}}% - {simplifiedchinese}{\gappto{\PJLlang@langconfig@schinese}{#2}}% - {tc}{\gappto{\PJLlang@langconfig@tchinese}{#2}}% - {tchinese}{\gappto{\PJLlang@langconfig@tchinese}{#2}}% - {traditionalchinese}{\gappto{\PJLlang@langconfig@tchinese}{#2}}% - {jp}{\gappto{\PJLlang@langconfig@japanese}{#2}}% - {japanese}{\gappto{\PJLlang@langconfig@japanese}{#2}}% - {en}{\gappto{\PJLlang@langconfig@english}{#2}}% - {english}{\gappto{\PJLlang@langconfig@english}{#2}}% - {fr}{\gappto{\PJLlang@langconfig@french}{#2}}% - {french}{\gappto{\PJLlang@langconfig@french}{#2}}% - {de}{\gappto{\PJLlang@langconfig@german}{#2}}% - {ngerman}{\gappto{\PJLlang@langconfig@german}{#2}}% - {it}{\gappto{\PJLlang@langconfig@italian}{#2}}% - {italian}{\gappto{\PJLlang@langconfig@italian}{#2}}% - {pt}{\gappto{\PJLlang@langconfig@portuguese}{#2}}% - {portuguese}{\gappto{\PJLlang@langconfig@portuguese}{#2}}% - {br}{\gappto{\PJLlang@langconfig@brazilian}{#2}}% - {brazilian}{\gappto{\PJLlang@langconfig@brazilian}{#2}}% - {es}{\gappto{\PJLlang@langconfig@spanish}{#2}}% - {spanish}{\gappto{\PJLlang@langconfig@spanish}{#2}}% - {german}{\gappto{\PJLlang@langconfig@german}{#2}}% - {ru}{\gappto{\PJLlang@langconfig@russian}{#2}}% - {russian}{\gappto{\PJLlang@langconfig@russian}{#2}}% - }% - }% + {\expandafter\gappto\expandafter{\csname PJLlang@langconfig@\StrToABBR{#1}\endcsname}{#2}}% } \RequirePackage{setspace} @@ -841,40 +882,14 @@ % %# UseLanguage 的核心部分,只能在正文中使用 %# The core part of UseLanguage, can be used only in the main text, not preamble -\newcommand{\UseLanguageCORE}[1]{% +\NewDocumentCommand{\UseLanguageCORE}{m}{% \PJLlang@langconfig@common% - \lowercase{\IfStrEqCase{#1}}{% - {cn}{\PJL@config@CJK\PJLlang@langconfig@schinese}% - {chinese}{\PJL@config@CJK\PJLlang@langconfig@schinese}% - {schinese}{\PJL@config@CJK\PJLlang@langconfig@schinese}% - {simplifiedchinese}{\PJL@config@CJK\PJLlang@langconfig@schinese}% - {tc}{\PJL@config@CJK\PJLlang@langconfig@tchinese}% - {tchinese}{\PJL@config@CJK\PJLlang@langconfig@tchinese}% - {traditionalchinese}{\PJL@config@CJK\PJLlang@langconfig@tchinese}% - {jp}{\PJL@config@CJK\PJLlang@langconfig@japanese}% - {japanese}{\PJL@config@CJK\PJLlang@langconfig@japanese}% - {en}{\PJL@config@Latin\PJLlang@langconfig@english}% - {english}{\PJL@config@Latin\PJLlang@langconfig@english}% - {fr}{\PJL@config@Latin\PJLlang@langconfig@french}% - {french}{\PJL@config@Latin\PJLlang@langconfig@french}% - {de}{\PJL@config@Latin\PJLlang@langconfig@german}% - {ngerman}{\PJL@config@Latin\PJLlang@langconfig@german}% - {german}{\PJL@config@Latin\PJLlang@langconfig@german}% - {it}{\PJL@config@Latin\PJLlang@langconfig@italian}% - {italian}{\PJL@config@Latin\PJLlang@langconfig@italian}% - {pt}{\PJL@config@Latin\PJLlang@langconfig@portuguese}% - {portuguese}{\PJL@config@Latin\PJLlang@langconfig@portuguese}% - {br}{\PJL@config@Latin\PJLlang@langconfig@brazilian}% - {brazilian}{\PJL@config@Latin\PJLlang@langconfig@brazilian}% - {es}{\PJL@config@Latin\PJLlang@langconfig@spanish}% - {spanish}{\PJL@config@Latin\PJLlang@langconfig@spanish}% - {ru}{\PJL@config@Latin\PJLlang@langconfig@russian}% - {russian}{\PJL@config@Latin\PJLlang@langconfig@russian}% - }% + \csname PJL@config@\StrToTYPE{#1}\endcsname% + \csname PJLlang@langconfig@\StrToABBR{#1}\endcsname% } %# 用于选定语言的 UseLanguage %# Macro for selecting language -\newcommand{\UseLanguage}[1]{% +\NewDocumentCommand{\UseLanguage}{m}{% \ifx\@onlypreamble\@notprerr% \UseLanguageCORE{#1}% \else% @@ -883,56 +898,17 @@ } %# 用于局部选定语言的 UseOtherLanguage %# Macro for selecting language locally -\newcommand{\UseOtherLanguage}[2]{% +\NewDocumentCommand{\UseOtherLanguage}{mm}{% \begingroup\begingroup% \PJLlang@langconfig@common% - \lowercase{\IfStrEqCase{#1}}{% - {cn}{\PJLlang@langconfig@schinese}% - {chinese}{\PJLlang@langconfig@schinese}% - {schinese}{\PJLlang@langconfig@schinese}% - {simplifiedchinese}{\PJLlang@langconfig@schinese}% - {tc}{\PJLlang@langconfig@tchinese}% - {tchinese}{\PJLlang@langconfig@tchinese}% - {traditionalchinese}{\PJLlang@langconfig@tchinese}% - {jp}{\PJLlang@langconfig@japanese}% - {japanese}{\PJLlang@langconfig@japanese}% - {en}{\PJLlang@langconfig@english}% - {english}{\PJLlang@langconfig@english}% - {fr}{\PJLlang@langconfig@french}% - {french}{\PJLlang@langconfig@french}% - {de}{\PJLlang@langconfig@german}% - {ngerman}{\PJLlang@langconfig@german}% - {german}{\PJLlang@langconfig@german}% - {it}{\PJLlang@langconfig@italian}% - {italian}{\PJLlang@langconfig@italian}% - {pt}{\PJLlang@langconfig@portuguese}% - {portuguese}{\PJLlang@langconfig@portuguese}% - {br}{\PJLlang@langconfig@brazilian}% - {brazilian}{\PJLlang@langconfig@brazilian}% - {es}{\PJLlang@langconfig@spanish}% - {spanish}{\PJLlang@langconfig@spanish}% - {ru}{\PJLlang@langconfig@russian}% - {russian}{\PJLlang@langconfig@russian}% - }% + \csname PJLlang@langconfig@\StrToABBR{#1}\endcsname% #2% \endgroup\endgroup% } %# 运行默认语言的设置 %# Execute the configuration of the main language -\IfStrEqCase{\PJLlang@mainlang}{% - {EN}{\UseLanguage{EN}}% - {FR}{\UseLanguage{FR}}% - {DE}{\UseLanguage{DE}}% - {IT}{\UseLanguage{IT}}% - {PT}{\UseLanguage{PT}}% - {BR}{\UseLanguage{BR}}% - {ES}{\UseLanguage{ES}}% - {CN}{\UseLanguage{CN}}% - {TC}{\UseLanguage{TC}}% - {JP}{\UseLanguage{JP}}% - {RU}{\UseLanguage{RU}}% -} +\expandafter\UseLanguage\expandafter{\PJLlang@mainlang} %</PJLlang> % %<*PJLlogo> @@ -1393,6 +1369,9 @@ %# 不建立定理类环境 %# Do not setup theorem-like environments \DeclareBoolOption[false]{nothms} +%# 推迟建立定理类环境 +%# Delay the setup of theorem-like environments to the end of the preamble +\DeclareBoolOption[false]{delaythms} %# 不编号定理类环境 %# Do not number theorem-like environments \DeclareBoolOption[false]{nothmnum} @@ -1436,34 +1415,8 @@ \expandafter\StrGobbleRight\expandafter{\PJLthm@temp}{1}[\PJLthm@temp]% }{}% \IfValueTF{#1}{% - \lowercase{\IfStrEqCase{#1}}{% - {cn}{\def\PJL@temp@abbr{CN}}% - {chinese}{\def\PJL@temp@abbr{CN}}% - {schinese}{\def\PJL@temp@abbr{CN}}% - {simplifiedchinese}{\def\PJL@temp@abbr{CN}}% - {tc}{\def\PJL@temp@abbr{TC}}% - {tchinese}{\def\PJL@temp@abbr{TC}}% - {traditionalchinese}{\def\PJL@temp@abbr{TC}}% - {jp}{\def\PJL@temp@abbr{JP}}% - {japanese}{\def\PJL@temp@abbr{JP}}% - {en}{\def\PJL@temp@abbr{EN}}% - {english}{\def\PJL@temp@abbr{EN}}% - {fr}{\def\PJL@temp@abbr{FR}}% - {french}{\def\PJL@temp@abbr{FR}}% - {de}{\def\PJL@temp@abbr{DE}}% - {ngerman}{\def\PJL@temp@abbr{DE}}% - {german}{\def\PJL@temp@abbr{DE}}% - {it}{\def\PJL@temp@abbr{IT}}% - {italian}{\def\PJL@temp@abbr{IT}}% - {pt}{\def\PJL@temp@abbr{PT}}% - {portuguese}{\def\PJL@temp@abbr{PT}}% - {br}{\def\PJL@temp@abbr{BR}}% - {brazilian}{\def\PJL@temp@abbr{BR}}% - {es}{\def\PJL@temp@abbr{ES}}% - {spanish}{\def\PJL@temp@abbr{ES}}% - {ru}{\def\PJL@temp@abbr{RU}}% - {russian}{\def\PJL@temp@abbr{RU}}% - }% + \expandafter\def\expandafter\PJL@temp@abbr\expandafter% + {\expandafter\StrToABBR\expandafter{#1}}% \expandafter\def\csname\PJLthm@temp name\PJL@temp@abbr\endcsname{#3}% }{% \expandafter\def\csname\PJLthm@temp nameEN\endcsname{#3}% @@ -1975,9 +1928,10 @@ } } } + %# 建立定理类环境 %# Setup theorem-like environments -\AtEndPreamble{ +\def\PJLthm@definethms{ \if@PJLthm@nothms\else \if@PJLthm@nothmnum \CreateTheorem*{theorem} @@ -2056,7 +2010,6 @@ \CreateTheorem*{remark*} \CreateTheorem*{observation*} \fi -} %# 按照 thmnum 决定公式如何编号 %# Number the equations with respect to thmnum @@ -2072,9 +2025,17 @@ } } +} % End of \PJLthm@definethms + +\if@PJLthm@delaythms + \AtEndPreamble{\PJLthm@definethms} +\else + \PJLthm@definethms +\fi + %# 一些 cref 的本地化 %# Some localization of cref -\gappto{\PJLlang@langconfig@schinese}{% +\gappto{\PJLlang@langconfig@CN}{% \crefname{equation}{式}{式}% \crefname{figure}{图}{图}% \crefname{table}{表}{表}% @@ -2091,7 +2052,7 @@ \def\creflastgroupconjunction{~和~}% \def\crefrangeconjunction{~}% } -\gappto{\PJLlang@langconfig@tchinese}{% +\gappto{\PJLlang@langconfig@TC}{% \crefname{equation}{式}{式}% \crefname{figure}{圖}{圖}% \crefname{table}{表}{表}% @@ -2108,7 +2069,7 @@ \def\creflastgroupconjunction{~與~}% \def\crefrangeconjunction{~}% } -\gappto{\PJLlang@langconfig@japanese}{% +\gappto{\PJLlang@langconfig@JP}{% \crefname{equation}{式}{式}% \crefname{figure}{図}{図}% \crefname{table}{表}{表}% @@ -2125,7 +2086,7 @@ \def\creflastgroupconjunction{~と~}% \def\crefrangeconjunction{〜}% } -\gappto{\PJLlang@langconfig@russian}{% +\gappto{\PJLlang@langconfig@RU}{% \crefname{equation}{уравнение}{уравнения}% \crefname{figure}{рис.}{рис.}% \crefname{table}{таблица}{таблицы}% @@ -2142,7 +2103,7 @@ \def\creflastgroupconjunction{~и~}% \def\crefrangeconjunction{~\textasciitilde~}% } -\gappto{\PJLlang@langconfig@portuguese}{% +\gappto{\PJLlang@langconfig@PT}{% \crefname{equation}{eq.}{eqs.}% \crefname{figure}{fig.}{figs.}% \crefname{table}{tabela}{tabelas}% @@ -2173,6 +2134,7 @@ \DeclareBoolOption[false]{author} \DeclareBoolOption[false]{amsfashion} \DeclareBoolOption[false]{nothms} +\DeclareBoolOption[false]{delaythms} \DeclareBoolOption[false]{nothmnum} \DeclareStringOption{thmnum}[PJL@thmnum@default] \DeclareBoolOption[true]{regionalref} @@ -2207,6 +2169,9 @@ \if@ProjLib@nothms \PassOptionsToPackage{nothms}{PJLthm} \fi +\if@ProjLib@delaythms + \PassOptionsToPackage{delaythms}{PJLthm} +\fi \if@ProjLib@nothmnum \PassOptionsToPackage{nothmnum}{PJLthm} \fi |