summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/projlib/ProjLib.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/projlib/ProjLib.dtx')
-rw-r--r--macros/latex/contrib/projlib/ProjLib.dtx287
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