diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/projlib/ProjLib.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/projlib/ProjLib.dtx | 340 |
1 files changed, 277 insertions, 63 deletions
diff --git a/Master/texmf-dist/source/latex/projlib/ProjLib.dtx b/Master/texmf-dist/source/latex/projlib/ProjLib.dtx index 33c97fd57f2..c5f2773071d 100644 --- a/Master/texmf-dist/source/latex/projlib/ProjLib.dtx +++ b/Master/texmf-dist/source/latex/projlib/ProjLib.dtx @@ -18,71 +18,80 @@ % %<*ProjLib> \ProvidesPackage{ProjLib} - [2021/06/28 The collective interface of ProjLib toolkit] + [2021/07/05 The collective interface of ProjLib toolkit] %</ProjLib> % %<*PJLamssim> \ProvidesPackage{PJLamssim} - [2021/06/28 Simulate some features of amsart] + [2021/07/05 Simulate some features of amsart] %</PJLamssim> % %<*PJLauthor> \ProvidesPackage{PJLauthor} - [2021/06/28 Enhanced author information block] + [2021/07/05 Enhanced author information block] %</PJLauthor> % %<*PJLdate> \ProvidesPackage{PJLdate} - [2021/06/28 Convert yyyy-mm-dd to normal datetime format] + [2021/07/05 Convert yyyy-mm-dd to normal datetime format] %</PJLdate> % %<*PJLdraft> \ProvidesPackage{PJLdraft} - [2021/06/28 Some useful macros for the draft stage] + [2021/07/05 Some useful macros for the draft stage] %</PJLdraft> % %<*PJLlang> \ProvidesPackage{PJLlang} - [2021/06/28 Multi-language configuration] + [2021/07/05 Multi-language configuration] %</PJLlang> % %<*PJLlogo> \ProvidesPackage{PJLlogo} - [2021/06/28 The ProjLib logo] + [2021/07/05 The ProjLib logo] %</PJLlogo> % %<*PJLmath> \ProvidesPackage{PJLmath} - [2021/06/28 Useful math macros and shortcuts] + [2021/07/05 Useful math macros and shortcuts] %</PJLmath> % %<*PJLpaper> \ProvidesPackage{PJLpaper} - [2021/06/28 Paper style configuration] + [2021/07/05 Paper style configuration] %</PJLpaper> % %<*PJLthm> \ProvidesPackage{PJLthm} - [2021/06/28 Theorem setup and configuration] + [2021/07/05 Theorem setup and configuration] %</PJLthm> % %<*PJLtoolkit> \ProvidesPackage{PJLtoolkit} - [2021/06/28 Collective interface of ProjLib Toolkit] + [2021/07/05 Collective interface of ProjLib Toolkit] %</PJLtoolkit> % +%# 下面两行引入宏包的代码是所有文件共用的。 +%# The following two lines are common to all files. \RequirePackage{kvoptions} \RequirePackage{etoolbox} % %<*PJLamssim> +%# 在 AMS 文档类中不执行任何操作 +%# Do nothing if AMS class detected \ifdefined\subjclass\endinput\fi +%# 使用 PJLauthor 的作者块功能 +%# Use `PJLauthor`'s author block function \RequirePackage{PJLauthor} \RequirePackage{calc} +%# 设定带条件的加粗 +%# Set the conditional bold face \providecommand{\conditionalbfseries}{\bfseries} -% keywords +%# 关键词的标签 +%# keywords' label \def\keywordsnameEN{\textsc{Key words and phrases}} \def\keywordsnameFR{\textsc{Mots et phrases clés}} \def\keywordsnameDE{\textsc{Schlüsselwörter und Phrasen}} @@ -95,18 +104,18 @@ \def\keywordsnameJP{キーワード} \def\keywordsnameRU{Ключевые слова и фразы} -\ifdefined\keywords\else - \def\PJL@keywords{} - \newcommand*{\keywords}[1]{\def\PJL@keywords{#1}} -\fi +%# 关键词 +%# keywords +\def\PJL@keywords{} +\providecommand*{\keywords}[1]{\def\PJL@keywords{#1}} -% dedicatory -\ifdefined\dedicatory\else - \def\PJL@dedicatory{} - \newcommand*{\dedicatory}[1]{\def\PJL@dedicatory{#1}} -\fi +%# 献给 +%# dedicatory +\def\PJL@dedicatory{} +\providecommand*{\dedicatory}[1]{\def\PJL@dedicatory{#1}} -% \thanks: behave like article-style when in \author, and ams-style (no marker) when outside +%# 致谢,在 \author 中使用时呈现为 article 风格,在外面单独用是则呈现为 AMS 风格 +%# \thanks: behave like article-style when in \author, and ams-style (no marker) when outside \AtEndPreamble{ % In case that \@author changes again \let\footnotemark@PJLoriginal\footnotemark% @@ -138,7 +147,8 @@ % \apptocmd{\@author}{\let\footnotemark\relax}{}{\FAIL} } -%% Modify abstract to allow it before maketitle +%# 重定义 abstract 环境以允许其出现在 maketitle 的前面 +%# Modify abstract to allow it before maketitle \let\abstract@PJLoriginal\abstract% \let\endabstract@PJLoriginal\endabstract% \newif\if@PJLamssim@maketitle\@PJLamssim@maketitlefalse @@ -176,9 +186,11 @@ \fi% } -%% Modify maketitle +%# 修改 maketitle 以包含上面的诸多改动 +%# Modify maketitle to reflect the modifications above \AtEndPreamble{% -% Add dedicatory to @maketitle +%## 将 dedicatory 添加进 \@maketitle +%## Add dedicatory to \@maketitle \patchcmd{\@maketitle}{\@date}{% \ifx\@date\@empty\vspace{-2\baselineskip}% \else\@date\fi% @@ -192,14 +204,16 @@ \fi% \fi% }{}{\FAIL} -% Add keywords to maketitle +%## 将 keywords 添加进 \maketitle +%## Add keywords to \maketitle \pretocmd{\maketitle}{% \ifx\PJL@keywords\@empty\else% \PJL@prethanks{{\protect\conditionalbfseries% \csname keywordsname\csname\languagename ABBR\endcsname\endcsname.}% ~\PJL@keywords}% \fi}{}{\FAIL} -% Add abstract to maketitle +%## 将 abstract 添加进 \maketitle +%## Add abstract to \maketitle \apptocmd{\maketitle}{% \if@PJLamssim@absbefore% \begin{abstract@PJLoriginal}% @@ -216,11 +230,14 @@ \global\let\keywords\relax \global\@PJLamssim@maketitletrue }{}{\FAIL} -% Disbale the \newpage in maketitle +%##- 这段未被采用的代码将使 maketitle 中的 \newpage 失效 +%##- Disbale the \newpage in maketitle % \let\maketitle@PJLoriginal=\maketitle % \renewcommand*{\maketitle}{{\let\newpage\relax\maketitle@PJLoriginal}} } +%# 定义 \subjclass,这段代码改编自 AMS 文档类 +%# Define \subjclass, the code is adopted from AMS classes \newcommand*\subjclass[2][2020]{% \def\@subjclass{#2}% \@ifundefined{subjclassname@#1}{% @@ -243,13 +260,15 @@ %</PJLamssim> % %<*PJLauthor> +%# 在 AMS 文档类中不执行任何操作 +%# Do nothing if AMS class detected \ifdefined\subjclass\endinput\fi -\RequirePackage{PJLlang} - %%================================ %% Font and style %%================================ +%# 各个作者信息元素的字体 +%# Font of the elements in the author block \def\PJLauthor@font@author{\normalsize\normalfont\scshape} \def\PJLauthor@font@address{\small\normalfont\itshape} \def\PJLauthor@font@curraddr{\small\normalfont\itshape} @@ -258,27 +277,34 @@ %%================================ %% Lengths %%================================ -% Space between author and address +%# author 和 address 之间的距离 +%# Space between author and address \newlength{\PJLauthor@length@innersep} \setlength{\PJLauthor@length@innersep}{.3\baselineskip} - -% Space between different author blocks +%# 两个作者块之间的距离 +%# Space between different author blocks \newlength{\PJLauthor@length@sep} \setlength{\PJLauthor@length@sep}{.5\baselineskip} - -% Space between affiliation and date +%# 作者块和日期之间的距离 +%# Space between affiliation and date \newlength{\PJLauthor@length@aftersep} \setlength{\PJLauthor@length@aftersep}{.3\baselineskip} %%================================ %% The macros %%================================ +%# 用来记录当前是否有附加作者信息,以便调整距离 +%# To record whether there's affiliation so as to adjust the vertical space \newif\if@PJLauthor@affilon +%# 作者 +%# author \renewcommand*{\author}[1]{% \gappto\@author{\phantom{A}\\[-\baselineskip]% \vspace{\PJLauthor@length@sep}% \PJLauthor@font@author{#1}\\\phantom{} \@PJLauthor@affilonfalse}} +%# 地址 +%# address \providecommand*{\address}[1]{% \gappto\@author{\phantom{A}\\[-\baselineskip]% \if@PJLauthor@affilon\else% @@ -287,6 +313,8 @@ \@PJLauthor@affilontrue% \PJLauthor@font@address{#1}\\\phantom{}}% } +%# 当前地址 +%# curraddr \providecommand*{\curraddr}[1]{% \gappto\@author{\phantom{A}\\[-\baselineskip]% \if@PJLauthor@affilon\else% @@ -295,6 +323,8 @@ \@PJLauthor@affilontrue% \PJLauthor@font@curraddr{#1}\\\phantom{}}% } +%# 电子邮箱 +%# email \providecommand*{\email}[1]{% \gappto\@author{\phantom{A}\\[-\baselineskip]% \if@PJLauthor@affilon\else% @@ -307,9 +337,15 @@ %%================================ %% Adjustment %%================================ +%# 去除 maketitle 中默认对 author 的处理 +%# Remove the tabular around \@author in maketitle \patchcmd{\@maketitle}{\begin{tabular}[t]{c}}{}{}{} \patchcmd{\@maketitle}{\end{tabular}}{}{}{} -\def\@author{} % Remove "No \author given." +%# 下面这一行是为了避免错误 "No \author given." +%# The follwing line is for avoiding the error "No \author given." +\def\@author{} +%# 修正作者块的前后等距离 +%# Adjust the spacing before and after the author block \pretocmd{\@maketitle}{% \pretocmd{\@author}{\vspace{-\PJLauthor@length@sep}}{}{\FAIL}% \apptocmd{\@author}{% @@ -323,29 +359,51 @@ %</PJLauthor> % %<*PJLdate> +%# 这段代码定义了宏包中的选项。 +%# This code defines the options in the package. \SetupKeyvalOptions{ family = @PJLdate, prefix = @PJLdate@, } +%# 草稿模式或快速模式 +%# Draft mode or fast mode \DeclareBoolOption[false]{draft} \DeclareBoolOption[false]{fast} +%# 处理选项 +%# Process options \ProcessKeyvalOptions*\relax +%# 下面的代码设定了选项之间的关系 +%# The following code sets the relationship between options \if@PJLdate@draft \@PJLdate@fasttrue \fi +%# 将 PJLdate 与 PLdate 等同 +%# To make PLdate and PJLdate equivalent \DeclareDocumentCommand{\PLdate}{}{\PJLdate} +%# 快速模式下直接输出原日期字符串 +%# Directly output the original date string in fast mode \if@PJLdate@fast\let\PJLdate\relax\endinput\fi +%# 载入多语言支持 +%# Load multi-language support \RequirePackage{PJLlang} -% The following line is for "authblk" +%# 下面一行是为了避免使用 authblk 时产生的错误 +%# The following line is for "authblk" \robustify\@latex@warning@no@line + +%# 消除一些警告 +%# Eliminate some warnings \RequirePackage{silence} \WarningFilter*{datetime2}{Date-Time Language Module} +%# 分别引入负责西文日期和 CJK 日期的宏包 +%# Use packages resp. for western date and CJK date \PassOptionsToPackage{fr-FR,en-US}{datetime2} \RequirePackage{datetime2} \RequirePackage{zhnumber} +%# 在 CJK 模式下将 DTMdate 定义为 zhdate +%# Maps DTMdate to zhdate in CJK context \let\@DTMdate@PJLoriginal\@DTMdate \gappto{\PJLlang@langconfig@common}{% \let\@DTMdate\@DTMdate@PJLoriginal% @@ -368,27 +426,46 @@ \zhdate{\@dtm@year/\@dtm@month/\@dtm@day}% }% } + +%# 提供命令 PJLdate +%# Provide the macro PJLdate \providecommand*{\PJLdate}[1]{\DTMdate{#1}} %</PJLdate> % %<*PJLdraft> +%# 这段代码定义了宏包中的选项。 +%# This code defines the options in the package. \SetupKeyvalOptions{ family = @PJLdraft, prefix = @PJLdraft@, } +%# 草稿模式或快速模式 +%# Draft mode or fast mode \DeclareBoolOption[false]{draft} \DeclareBoolOption[false]{fast} +%# 处理选项 +%# Process options \ProcessKeyvalOptions*\relax +%# 下面的代码设定了选项之间的关系 +%# The following code sets the relationship between options \if@PJLdraft@draft \@PJLdraft@fasttrue \fi +%# 载入多语言支持 +%# Load multi-language support \RequirePackage{PJLlang} +%# 载入颜色支持 +%# Load support for colors \RequirePackage{xcolor} +%# 命令中的默认字体 +%# Default font in the macro \def\dnfFont{\ttfamily} \def\needgraphFont{\ttfamily} +%# 命令中的文字 +%# Text in the macro \def\dnfTextEN{To be finished} \def\needgraphTextEN{A graph is needed here} \def\dnfTextFR{Pas encore fini} @@ -412,15 +489,21 @@ \def\dnfTextRU{Не закончен} \def\needgraphTextRU{Еще нужна картинка} +%# 命令中的颜色 +%# Default color in the macro \definecolor{dnfColor}{RGB}{21,122,20} \definecolor{needgraphColor}{RGB}{70,130,180} \if@PJLdraft@fast +%# 快速模式用 fbox 定义 +%# Use fbox in fast mode \newcommand{\plainBox}[2][-paper]{\textcolor{#1}{% \setlength{\fboxsep}{1.5pt}% \setlength{\fboxrule}{1.2pt}% \fbox{#2}}} \else +%# 正常模式用 tcolorbox 定义 +%# Use tcolorbox in normal mode \PassOptionsToPackage{many}{tcolorbox} \RequirePackage{tcolorbox} \newtcbox{\plainBox}[1][-paper]{enhanced jigsaw,% @@ -431,9 +514,13 @@ } \fi +%# 命令中的计数器 +%# Counters for the macro \newcounter{dnfcnt} \newcounter{needgraphcnt} +%# 尚未完成的标记 +%# Mark for ``did not finish'' \NewDocumentCommand{\dnf}{d<>}{% \noindent\plainBox[dnfColor]% {\normalfont\dnfFont\bfseries\small% @@ -441,6 +528,8 @@ \stepcounter{dnfcnt}~\#\thednfcnt% \IfNoValueF{#1}{\,: #1}}% } +%# 需要图片的标记 +%# Mark for ``Graph needed'' \NewDocumentCommand{\needgraph}{d<>}{% \begin{center}% \plainBox[needgraphColor]% @@ -453,12 +542,18 @@ %</PJLdraft> % %<*PJLlang> +%# 这段代码定义了宏包中的选项。 +%# This code defines the options in the package. \SetupKeyvalOptions{% family = @PJLlang, prefix = @PJLlang@ } +%# 使用 polyglossia 而不是 babel 进行设置,目前还不完善 +%# Use polyglossia instead of babel \DeclareBoolOption[false]{polyglossia} +%# 用于记录该语言是否被启用 +%# To record whether the language is enabled in the document \newif\if@PJLlang@enable@all\@PJLlang@enable@alltrue \newif\if@PJLlang@enable@EN\@PJLlang@enable@ENfalse \newif\if@PJLlang@enable@FR\@PJLlang@enable@FRfalse @@ -471,7 +566,11 @@ \newif\if@PJLlang@enable@TC\@PJLlang@enable@TCfalse \newif\if@PJLlang@enable@JP\@PJLlang@enable@JPfalse \newif\if@PJLlang@enable@RU\@PJLlang@enable@RUfalse +%# 用来存储要传递给babel的选项 +%# To store the option list to pass to babel \def\PJLlang@babeloptions{} +%# 语言选项:启用该语言并添加相应的 babel 参数 +%# The language options: enable the corresponding language and add the corresponding options to babel \DeclareVoidOption{EN}{\@PJLlang@enable@allfalse\@PJLlang@enable@ENtrue\providecommand{\PJLlang@mainlang}{EN}\gpreto{\PJLlang@babeloptions}{,english}} \DeclareVoidOption{english}{\@PJLlang@enable@allfalse\@PJLlang@enable@ENtrue\providecommand{\PJLlang@mainlang}{EN}\gpreto{\PJLlang@babeloptions}{,english}} \DeclareVoidOption{English}{\@PJLlang@enable@allfalse\@PJLlang@enable@ENtrue\providecommand{\PJLlang@mainlang}{EN}\gpreto{\PJLlang@babeloptions}{,english}} @@ -512,10 +611,16 @@ \DeclareVoidOption{RU}{\@PJLlang@enable@allfalse\@PJLlang@enable@RUtrue\providecommand{\PJLlang@mainlang}{RU}\gpreto{\PJLlang@babeloptions}{,russian}} \DeclareVoidOption{russian}{\@PJLlang@enable@allfalse\@PJLlang@enable@RUtrue\providecommand{\PJLlang@mainlang}{RU}\gpreto{\PJLlang@babeloptions}{,russian}} \DeclareVoidOption{Russian}{\@PJLlang@enable@allfalse\@PJLlang@enable@RUtrue\providecommand{\PJLlang@mainlang}{RU}\gpreto{\PJLlang@babeloptions}{,russian}} +%# 处理选项 +%# Process options \ProcessKeyvalOptions*\relax +%# 默认语言:英语 +%# Default main language: English \providecommand{\PJLlang@mainlang}{EN} +%# 启用全部支持的语言 +%# Enable all supported language \if@PJLlang@enable@all \@PJLlang@enable@ENtrue \@PJLlang@enable@FRtrue @@ -530,6 +635,8 @@ \@PJLlang@enable@RUtrue \fi +%# 语言名称的缩写 +%# Abbreviation of language name \newcommand\englishABBR{EN} \newcommand\frenchABBR{FR} \newcommand\ngermanABBR{DE} @@ -542,6 +649,8 @@ \newcommand\japaneseABBR{JP} \newcommand\russianABBR{RU} +%# 在 pdfLaTeX 编译时载入编码设置 +%# Load the encoding settings when pdfLaTeX is used \RequirePackage{iftex} \ifPDFTeX \RequirePackage[T1]{fontenc} @@ -549,6 +658,8 @@ \fi \if@PJLlang@polyglossia +%# polyglossia 对应的设置 +%# Configure with `polyglossia` \RequirePackage{polyglossia} \setdefaultlanguage{english} \setotherlanguage[frenchpart=false]{french} @@ -564,6 +675,8 @@ \WarningFilter{polyglossia}{Asking to add empty feature to latin font(Script="CJK" to scripttag "")} \fi \else +%# babel 对应的设置 +%# Configure with `babel` \if@PJLlang@enable@all \ifPDFTeX\else \PassOptionsToPackage{japanese,russian}{babel} @@ -578,7 +691,9 @@ \frenchsetup{PartNameFull=false} \fi \fi -% + +%# 本地化 \today +%# Localize \today \let\today@PJLoriginal\today \newcommand{\PJLlang@langconfig@common}{% \ifdefined\DTMtoday% @@ -587,6 +702,9 @@ \let\today\today@PJLoriginal% \fi% } + +%# 各个语言的设置 +%# The configuration for each language \newcommand{\PJLlang@langconfig@chinese}{% \def\abstractname{摘要}% \def\proofname{证明}% @@ -647,6 +765,8 @@ \selectlanguage{russian}% } +%# 用于增加语言设置的用户指令 AddLanguageSetting +%# User command for adding language settings \RequirePackage{xstring} \NewDocumentCommand\AddLanguageSetting{d()m}{% \IfNoValueTF{#1}% @@ -684,20 +804,25 @@ } \RequirePackage{setspace} -% Line spacing configuration +%# 行距的设置 +%# Line spacing configuration \def\PJL@config@linespacing{\setstretch{1.00}} \def\PJL@config@CJKlinespacing{\onehalfspacing} \newcommand{\PJLsetlinespacing}[1]{\renewcommand{\PJL@config@linespacing}{#1}} \newcommand{\PJLsetCJKlinespacing}[1]{\renewcommand{\PJL@config@CJKlinespacing}{#1}} -% Parindent configuration +%# 缩进的设置 +%# Parindent configuration \def\PJL@config@parindent{\ltx@ifpackageloaded{parskip}{}{\setlength{\parindent}{1.5em}}} \def\PJL@config@CJKparindent{\ltx@ifpackageloaded{parskip}{}{\setlength{\parindent}{2em}}} \newcommand{\PJLsetparindent}[1]{\renewcommand{\PJL@config@parindent}{\ltx@ifpackageloaded{parskip}{}{\setlength{\parindent}{#1}}}} \newcommand{\PJLsetCJKparindent}[1]{\renewcommand{\PJL@config@CJKparindent}{\ltx@ifpackageloaded{parskip}{}{\setlength{\parindent}{#1}}}} -% All-in-all configuration +%# 合并设置 +%# All-in-all configuration \def\PJL@config@CJK{\PJL@config@CJKlinespacing\PJL@config@CJKparindent} \def\PJL@config@Latin{\PJL@config@linespacing\PJL@config@parindent} % +%# UseLanguage 的核心部分,只能在正文中使用 +%# The core part of UseLanguage, can be used only in the main text, not preamble \newcommand{\UseLanguageCORE}[1]{% \PJLlang@langconfig@common% \lowercase{\IfStrEqCase{#1}}{% @@ -729,6 +854,8 @@ {russian}{\PJL@config@Latin\PJLlang@langconfig@russian}% }% } +%# 用于选定语言的 UseLanguage +%# Macro for selecting language \newcommand{\UseLanguage}[1]{% \ifx\@onlypreamble\@notprerr% \UseLanguageCORE{#1}% @@ -736,6 +863,8 @@ \AfterEndPreamble{\UseLanguageCORE{#1}}% \fi% } +%# 用于局部选定语言的 UseOtherLanguage +%# Macro for selecting language locally \newcommand{\UseOtherLanguage}[2]{% \begingroup% \PJLlang@langconfig@common% @@ -771,6 +900,8 @@ \endgroup% } +%# 运行默认语言的设置 +%# Execute the configuration of the main language \IfStrEqCase{\PJLlang@mainlang}{% {EN}{\UseLanguage{EN}}% {FR}{\UseLanguage{FR}}% @@ -787,18 +918,30 @@ %</PJLlang> % %<*PJLlogo> +%# 这段代码定义了宏包中的选项。 +%# This code defines the options in the package. \SetupKeyvalOptions{ family = @PJLlogo, prefix = @PJLlogo@, } +%# 草稿模式或快速模式 +%# Draft mode or fast mode \DeclareBoolOption[false]{draft} \DeclareBoolOption[false]{fast} +%# 处理选项 +%# Process options \ProcessKeyvalOptions*\relax +%# 下面的代码设定了选项之间的关系 +%# The following code sets the relationship between options \if@PJLlogo@draft \@PJLlogo@fasttrue \fi +%# 快速模式下直接输出字符串 ProjLib +%# Directly output the string ``ProjLib'' in fast mode \if@PJLlogo@fast\def\ProjLib{{\normalfont ProjLib}}\endinput\fi +%# 以下选取字体并定义 Logo +%# Below select the font and define the logo \RequirePackage{xcolor} \RequirePackage{graphicx} \ifdefined\fontspec @@ -836,6 +979,8 @@ %</PJLlogo> % %<*PJLmath> +%# 载入常用数学宏包 +%# Load commonly used math packages \RequirePackage{mathtools} \RequirePackage{mathrsfs} \@ifpackageloaded{unicode-math}{}{\RequirePackage{amssymb}} @@ -843,6 +988,8 @@ %%================================ %% Shorthands %%================================ +%# 常见代数结构的捷径 +%# Shortcuts for commonly used algebraic structures \def\N{\ensuremath{\mathbb{N}}} \def\Z{\ensuremath{\mathbb{Z}}} \def\Q{\ensuremath{\mathbb{Q}}} @@ -851,6 +998,8 @@ \def\F{\ensuremath{\mathbb{F}}} \def\A{\ensuremath{\mathbb{A}}} +%# mathbb 的捷径 +%# Shortcuts for blackboard bold face \def\bb#1{\ensuremath{\mathbb{#1}}} \def\bbA{\ensuremath{\mathbb{A}}} \def\bbB{\ensuremath{\mathbb{B}}} @@ -879,6 +1028,8 @@ \def\bbY{\ensuremath{\mathbb{Y}}} \def\bbZ{\ensuremath{\mathbb{Z}}} +%# mathcal 的捷径 +%# Shortcuts for calligraphic shape \def\mc#1{\ensuremath{\mathcal{#1}}} \def\mcA{\ensuremath{\mathcal{A}}} \def\mcB{\ensuremath{\mathcal{B}}} @@ -935,6 +1086,8 @@ \def\calY{\ensuremath{\mathcal{Y}}} \def\calZ{\ensuremath{\mathcal{Z}}} +%# mathfrak 的捷径 +%# Shortcuts for Fraktur shape \def\mf#1{\ensuremath{\mathfrak{#1}}} \def\mfa{\ensuremath{\mathfrak{a}}} \def\mfb{\ensuremath{\mathfrak{b}}} @@ -1043,6 +1196,8 @@ \def\frakY{\ensuremath{\mathfrak{Y}}} \def\frakZ{\ensuremath{\mathfrak{Z}}} +%# mathscr 的捷径 +%# Shortcuts for script shape \def\ms#1{\ensuremath{\mathscr{#1}}} \def\msA{\ensuremath{\mathscr{A}}} \def\msB{\ensuremath{\mathscr{B}}} @@ -1102,6 +1257,9 @@ %%================================ %% General symbols %%================================ +\providecommand{\abs}[1]{\lvert#1\rvert} +\providecommand{\norm}[1]{\lVert#1\rVert} + \providecommand*{\injection}{\ensuremath{\hookrightarrow}} \providecommand*{\surjection}{\ensuremath{\twoheadrightarrow}} \providecommand*{\bijection}{\ensuremath{\xrightarrow{\sim}}} @@ -1127,6 +1285,8 @@ %<*PJLpaper> \RequirePackage{ifthen} +%# 这段代码定义了宏包中的选项。 +%# This code defines the options in the package. \SetupKeyvalOptions{% family = @PJLpaper, prefix = @PJLpaper@, @@ -1134,11 +1294,16 @@ } \DeclareStringOption[normal]{paperstyle} +%# 几种纸张颜色的选项 +%# Several options of different paper color style \DeclareVoidOption{yellowpaper}{\kvsetkeys{@PJLpaper}{paperstyle=yellow}} \DeclareVoidOption{darkpaper}{\kvsetkeys{@PJLpaper}{paperstyle=dark}} \DeclareVoidOption{nordpaper}{\kvsetkeys{@PJLpaper}{paperstyle=nord}} +%# 预览模式:减去边框 +%# Preview mode: crop the edge \DeclareBoolOption[false]{preview} - +%# 处理选项 +%# Process options \ProcessKeyvalOptions*\relax %%================================ @@ -1189,6 +1354,8 @@ \color{#1}\global\let\default@color\current@color } +%# 设置纸张颜色、文字颜色 +%# Set the paper and text color \pagecolor{paper} \PJLglobalcolor{maintext} \AtEndPreamble{ @@ -1199,16 +1366,30 @@ %</PJLpaper> % %<*PJLthm> +%# 这段代码定义了宏包中的选项。 +%# This code defines the options in the package. \SetupKeyvalOptions{% family = @PJLthm, prefix = @PJLthm@ } +%# 不建立定理类环境 +%# Do not setup theorem-like environments \DeclareBoolOption[false]{nothms} +%# 不编号定理类环境 +%# Do not number theorem-like environments \DeclareBoolOption[false]{nothmnum} +%# 草稿模式或快速模式 +%# Draft mode or fast mode \DeclareBoolOption[false]{draft} \DeclareBoolOption[false]{fast} +%# 引用的名称将随当前语言的不同而改变 +%# Reference name will change with the current language \DeclareBoolOption[false]{regionalref} +%# 处理选项 +%# Process options \ProcessKeyvalOptions*\relax +%# 下面的代码设定了选项之间的关系 +%# The following code sets the relationship between options \if@PJLthm@draft \@PJLthm@fasttrue \fi @@ -1222,7 +1403,8 @@ \PassOptionsToPackage{nameinlink}{cleveref} \RequirePackage{cleveref} -% Macro for naming theorems +%# 用于命名定理类环境的用户命令 +%# Macro for naming theorems \NewDocumentCommand{\NameTheorem}{omm}{% \protected@edef\PJLthm@temp{#2}% \expandafter\IfEndWith\expandafter{\PJLthm@temp}{*}{% @@ -1273,7 +1455,8 @@ }% } -% Macro for creating theorems +%# 用于创建定理类环境的用户命令 +%# Macro for creating theorems \RequirePackage{xstring} \newcommand\PassFirstToSecond[2]{#2{#1}}% \NewDocumentCommand{\CreateTheorem}{sm}{% @@ -1483,7 +1666,8 @@ }% \fi -%% English theorems names +%# 英文定理名称 +%# English theorems names \def\theoremnameEN{{Theorem}} \def\lemmanameEN{{Lemma}} \def\propositionnameEN{{Proposition}} @@ -1506,7 +1690,8 @@ \expandafter\def\csname definition-propositionnameEN\endcsname{\definitionnameEN-\propositionnameEN} \expandafter\def\csname definition-theoremnameEN\endcsname{\definitionnameEN-\theoremnameEN} -%% French theorems names +%# 法语定理名称 +%# French theorems names \def\theoremnameFR{{Théorème}} \def\lemmanameFR{{Lemme}} \def\propositionnameFR{{Proposition}} @@ -1529,7 +1714,8 @@ \expandafter\def\csname definition-propositionnameFR\endcsname{\definitionnameFR-\propositionnameFR} \expandafter\def\csname definition-theoremnameFR\endcsname{\definitionnameFR-\theoremnameFR} -%% German theorems names +%# 德语定理名称 +%# German theorems names \def\theoremnameDE{{Satz}} \def\lemmanameDE{{Lemma}} \def\propositionnameDE{{Proposition}} @@ -1552,7 +1738,8 @@ \expandafter\def\csname definition-propositionnameDE\endcsname{\definitionnameDE-\propositionnameDE} \expandafter\def\csname definition-theoremnameDE\endcsname{\definitionnameDE-\theoremnameDE} -%% Italian theorems names +%# 意大利语定理名称 +%# Italian theorems names \def\theoremnameIT{{Teorema}} \def\lemmanameIT{{Lemma}} \def\propositionnameIT{{Proposizione}} @@ -1575,7 +1762,8 @@ \expandafter\def\csname definition-propositionnameIT\endcsname{\definitionnameIT-\propositionnameIT} \expandafter\def\csname definition-theoremnameIT\endcsname{\definitionnameIT-\theoremnameIT} -%% Portuguese theorems names +%# 葡萄牙语定理名称 +%# Portuguese theorems names \def\theoremnamePT{{Teorema}} \def\lemmanamePT{{Lema}} \def\propositionnamePT{{Proposição}} @@ -1598,7 +1786,8 @@ \expandafter\def\csname definition-propositionnamePT\endcsname{\definitionnamePT-\propositionnamePT} \expandafter\def\csname definition-theoremnamePT\endcsname{\definitionnamePT-\theoremnamePT} -%% Brazilian theorems names +%# 巴西葡萄牙语定理名称 +%# Brazilian theorems names \def\theoremnameBR{{Teorema}} \def\lemmanameBR{{Lema}} \def\propositionnameBR{{Proposição}} @@ -1621,7 +1810,8 @@ \expandafter\def\csname definition-propositionnameBR\endcsname{\definitionnameBR-\propositionnameBR} \expandafter\def\csname definition-theoremnameBR\endcsname{\definitionnameBR-\theoremnameBR} -%% Spanish theorems names +%# 西班牙语定理名称 +%# Spanish theorems names \def\theoremnameES{{Teorema}} \def\lemmanameES{{Lema}} \def\propositionnameES{{Proposición}} @@ -1644,7 +1834,8 @@ \expandafter\def\csname definition-propositionnameES\endcsname{\definitionnameES-\propositionnameES} \expandafter\def\csname definition-theoremnameES\endcsname{\definitionnameES-\theoremnameES} -%% Chinese theorems names +%# 中文定理名称 +%# Chinese theorems names \def\theoremnameCN{{定理}} \def\lemmanameCN{{引理}} \def\propositionnameCN{{命题}} @@ -1689,7 +1880,8 @@ \expandafter\def\csname definition-propositionnameTC\endcsname{\definitionnameTC-\propositionnameTC} \expandafter\def\csname definition-theoremnameTC\endcsname{\definitionnameTC-\theoremnameTC} -%% Japanese theorems names +%# 日文定理名称 +%# Japanese theorems names \def\theoremnameJP{{定理}} \def\lemmanameJP{{補題}} \def\propositionnameJP{{命題}} @@ -1712,7 +1904,8 @@ \expandafter\def\csname definition-propositionnameJP\endcsname{\definitionnameJP-\propositionnameJP} \expandafter\def\csname definition-theoremnameJP\endcsname{\definitionnameJP-\theoremnameJP} -%% Russian theorems names +%# 俄文定理名称 +%# Russian theorems names \def\theoremnameRU{{Теорема}} % Теоре́ма \def\lemmanameRU{{Лемма}} % Ле́мма \def\propositionnameRU{{Предложение}} % Предложе́ние @@ -1735,14 +1928,17 @@ \expandafter\def\csname definition-propositionnameRU\endcsname{\definitionnameRU-\propositionnameRU} \expandafter\def\csname definition-theoremnameRU\endcsname{\definitionnameRU-\theoremnameRU} +%# 判断最高级别的标题是 section 还是 chapter +%# Detect the highest level of title: section or chapter? \newif\ifPJLthm@IsBook \ifdefined\c@chapter\PJLthm@IsBooktrue\else\PJLthm@IsBookfalse\fi -%% Theorem environments \ifbool{PJLthm@IsBook}{ \newaliascnt{PJLthm@highest}{chapter} }{ \newaliascnt{PJLthm@highest}{section} } +%# 建立定理类环境 +%# Setup theorem-like environments \if@PJLthm@nothms\else \if@PJLthm@nothmnum \CreateTheorem*{theorem} @@ -1824,7 +2020,8 @@ \numberwithin{equation}{PJLthm@highest} -% Some localization of cref +%# 一些 cref 的本地化 +%# Some localization of cref \gappto{\PJLlang@langconfig@chinese}{% \crefname{equation}{式}{式}% \crefname{figure}{图}{图}% @@ -1913,6 +2110,8 @@ %</PJLthm> % %<*ProjLib,PJLtoolkit> +%# 这段代码定义了宏包中的选项。 +%# This code defines the options in the package. \SetupKeyvalOptions{ family = @PJLtoolkit, prefix = @PJLtoolkit@, @@ -1920,6 +2119,7 @@ \DeclareBoolOption[false]{draft} \DeclareBoolOption[false]{fast} \DeclareBoolOption[false]{author} +\DeclareBoolOption[false]{amsfashion} \DeclareBoolOption[false]{amssim} \DeclareBoolOption[false]{nothms} \DeclareBoolOption[false]{nothmnum} @@ -1929,10 +2129,21 @@ \DeclareBoolOption[false]{times} \DeclareBoolOption[false]{garamond} \DeclareBoolOption[false]{biolinum} +%# 处理选项 +%# Process options \ProcessKeyvalOptions*\relax + +%# 下面的代码设定了选项之间的关系 +%# The following code sets the relationship between options \if@PJLtoolkit@draft \@PJLtoolkit@fasttrue \fi +\if@PJLtoolkit@amsfashion + \@PJLtoolkit@amssimtrue +\fi + +%# 向组件传递一些参数 +%# Pass some options to the components \if@PJLtoolkit@fast \PassOptionsToPackage{fast}{PJLdate} \PassOptionsToPackage{fast}{PJLdraft} @@ -1949,12 +2160,16 @@ \PassOptionsToPackage{regionalref}{PJLthm} \fi +%# 加载不默认载入的组件 +%# Load those components not by default loaded \if@PJLtoolkit@author \RequirePackage{PJLauthor} \fi \if@PJLtoolkit@amssim \RequirePackage{PJLamssim} \fi +%# 加载组件 +%# Load the components \RequirePackage{PJLdate} \RequirePackage{PJLdraft} \RequirePackage{PJLlogo} @@ -1962,14 +2177,9 @@ \RequirePackage{PJLpaper} \RequirePackage{PJLthm} -% \RequirePackage{iftex} -% \ifPDFTeX -% \RequirePackage[T1]{fontenc} -% \RequirePackage{inputenc} -% \fi +%# 配置字体选项 +%# Configure the font options below % -% \RequirePackage{mathtools} - % \PJL@font@alreadyset should contain the current font name % A message can then be shown as: Font "(font name)" has been set \ifdefined\PJL@font@alreadyset\else @@ -2029,8 +2239,12 @@ \RequirePackage[italic,defaultmathsizes]{mathastext} \fi +%# 结束字体选项的配置 +%# End of the configuration of font options \fi +%# 使用 microtype 优化排版细节 +%# Use `microtype` to get details better \RequirePackage{microtype} %</ProjLib,PJLtoolkit> |