\documentclass[allowbf,puretext]{lebhart}

%%================================
%% Import toolkit
%%================================
\usepackage{ProjLib}
\usepackage{longtable}  % breakable tables
\usepackage{hologo}     % more TeX logo
\usepackage{multicol}
\setlength{\columnsep}{2em}
\setlength{\columnseprule}{.75pt}
\def\columnseprulecolor{\color{gray!55}}

\UseLanguage{Chinese}

%%================================
%% For typesetting code
%%================================
\usepackage{listings}
\definecolor{lightergray}{gray}{0.99}
\lstset{language=[LaTeX]TeX,
    keywordstyle=\color{maintheme},
    basicstyle=\ttfamily,
    commentstyle=\color{forestgreen}\ttfamily,
    stringstyle=\rmfamily,
    showstringspaces=false,
    breaklines=true,
    frame=lines,
    backgroundcolor=\color{lightergray},
    flexiblecolumns=true,
    escapeinside={(*}{*)},
    % numbers=left,
    numberstyle=\scriptsize, stepnumber=1, numbersep=5pt,
    % firstnumber=last,
}
\providecommand{\meta}[1]{$\langle${\normalfont\itshape#1}$\rangle$}
\lstset{moretexcs=%
    {color,NameTheorem,CreateTheorem,proofideanameCN,proofideanameEN,proofideanameFR,cref,dnf,needgraph,UseLanguage,UseOtherLanguage,AddLanguageSetting,maketitle,address,curraddr,email,keywords,subjclass,thanks,dedicatory,TheDate,PLdate,PJLdate,ProjLib,
    mathfrak,mf,frak,mfA,mathbb,bb,N,Z,Q,R,C,F,A,mathcal,mc,cal,mathscr,ms,scr,
    abs,norm,injection,surjection,bijection,legendre,tlegendre,dlegendre,pmod
    }
}
\lstnewenvironment{code}%
{\setkeys{lst}{columns=fullflexible,keepspaces=true}}{}
\lstnewenvironment{code*}%
{\setkeys{lst}{numbers=left,columns=fullflexible,keepspaces=true}}{}

%%================================
%% tip
%%================================
\newenvironment{tip}[1][提示]{%
    \begin{tcolorbox}[breakable,
        enhanced,
        width = \textwidth,
        colback = paper, colbacktitle = paper,
        colframe = gray!50, boxrule=0.2mm,
        coltitle = black,
        fonttitle = \sffamily,
        attach boxed title to top left = {yshift=-\tcboxedtitleheight/2, xshift=.5cm},
        boxed title style = {boxrule=0pt, colframe=paper},
        before skip = 0.3cm,
        after skip = 0.3cm,
        top = 3mm,
        bottom = 3mm,
        title={\scshape\sffamily #1}]%
}{\end{tcolorbox}}

%%================================
%% Names
%%================================
\providecommand{\ProjLibPackage}{\mbox{\textsf{ProjLib}}}
\providecommand{\PJLauthor}{\mbox{\textsf{PJLauthor}}}
\providecommand{\PJLdatePackage}{\mbox{\textsf{PJLdate}}}
\providecommand{\PJLdraft}{\mbox{\textsf{PJLdraft}}}
\providecommand{\PJLlang}{\mbox{\textsf{PJLlang}}}
\providecommand{\PJLlogo}{\mbox{\textsf{PJLlogo}}}
\providecommand{\PJLmath}{\mbox{\textsf{PJLmath}}}
\providecommand{\PJLpaper}{\mbox{\textsf{PJLpaper}}}
\providecommand{\PJLthm}{\mbox{\textsf{PJLthm}}}

%%================================
%% Main text
%%================================
\begin{document}

\title{\ProjLib{} 工具集\\[.3\baselineskip]\normalsize 使用指南}
\author{许锦文}
\thanks{对应版本.~~\texttt{\ProjLib{}~2021/12/16}}
\email{\href{mailto:ProjLib@outlook.com}{ProjLib@outlook.com}}
\date{2021年12月，巴黎}

\maketitle

\begin{abstract}
    \ProjLib{} 工具集之设计目的为简化 \LaTeX{} 文档撰写前的准备工作。只需要加载 \ProjLibPackage{}，多语言设置就已准备就绪，定理类环境已被设置好可供直接使用，并且引入了一系列辅助功能。
\end{abstract}

\begin{multicols}{2}
    \small
    \tableofcontents
\end{multicols}

\medskip

\section*{开始之前}
\addcontentsline{toc}{section}{开始之前}

为了使用这套工具集，你需要：
\begin{itemize}
    \item 安装一个尽可能新版本的 TeX Live 或 MikTeX 套装，并确保 \texttt{projlib} 被正确安装在你的 \TeX 封装中。
    \item 熟悉 \LaTeX{} 的基本使用方式，并且知道如何用 \hologo{pdfLaTeX}、\hologo{XeLaTeX} 或 \hologo{LuaLaTeX} 编译你的文档。
\end{itemize}

\section{简介}

\ProjLib{} 这一名称可以看成是英文 Project Library (项目库) 或法文 Projet Libre (自由项目) 的缩写 (作者更喜欢法文的全称)。其主要目的是提供多语言支持和带有智能引用的定理类环境。除此之外，还附加了一些额外功能，如支持作者附加信息、未完成标记、数学符号与捷径等。

\ProjLib{} 工具箱由主宏包 \ProjLibPackage{} 以及一系列由“PJL”缩写开头的内部组件构成。你可以通过下一节的使用实例来了解它的使用方式。

\section{使用示例}

\subsection{如何加载}

加载 \ProjLib{} 工具箱十分容易，只需要在导言部分加入这一行即可：

\begin{code}
\usepackage{ProjLib}
\end{code}

\begin{tip}[注意事项]
    由于其内部使用了 \textsf{cleveref}，\ProjLibPackage{} 需要放在 \textsf{varioref}、\textsf{hyperref} 的后面。
\end{tip}

\subsection{一篇完整的文档示例}

首先来看一段完整的示例。

\begin{code*}
\documentclass{article}
\usepackage[a4paper,margin=.75in]{geometry}
\usepackage[hidelinks]{hyperref}
\usepackage[palatino]{ProjLib} % Load the toolkit and use font Palatino

\UseLanguage{French} % Use French from here

\begin{document}

\title{(*\meta{title}*)}
\author{(*\meta{author}*)}
\date{\PLdate{2022-04-01}}

\maketitle

\begin{abstract}
    (*\meta{abstract text}*) \dnf<(*\meta{some hint}*)>
\end{abstract}

\section{Un théorème}

\begin{theorem}\label{thm:abc}
    Ceci est un théorème.
\end{theorem}

Référence du théorème: \cref{thm:abc} % It is recommended to use clever reference

\end{document}
\end{code*}

\bigskip

如果你觉得这个例子有些复杂，不要担心。现在我们来一点点地观察这个例子。

\clearpage
\subsubsection{初始化部分}

\begin{code}
\documentclass{article}
\usepackage[a4paper,margin=.75in]{geometry}
\usepackage[hidelinks]{hyperref}
\usepackage[palatino]{ProjLib}
\end{code}

在标准文档类中，通常只需简要设置页面尺寸、超链接，再载入 \ProjLibPackage{}，即可直接开始写作。这里使用了 \ProjLibPackage{} 的 \texttt{palatino} 字体选项。关于 \ProjLibPackage{} 的所有可用选项，可以参阅下一节。

当然，你也可以使用 \textsf{amsart} 文档类，设置是相同的。

\subsubsection{设定语言}

\begin{code}
\UseLanguage{French}
\end{code}

这一行表明文档中将使用法语（如果你的文章中只出现英语，那么可以不需要设定语言）。你也可以在文章中间用同样的方式再次切换语言。支持的语言包括简体中文、繁体中文、日文、英语、法语、德语、西班牙语、葡萄牙语、巴西葡萄牙语、俄语\footnote{不过，你需要自行引入相应语言的支持与字体。例如，对于中文，你可能需要载入 \textsf{ctex} 宏包并设置字体。作为补充，你可以尝试作者的 \textsf{einfart} 或 \textsf{lebhart} 文档类，其中相应的设置都已经完成了，详细资料可以通过 \lstinline|texdoc minimalist| 或 \lstinline|texdoc colorist| 获知。}。

对于这一命令的详细说明以及更多相关命令，可以参考后面关于多语言支持的小节。

\subsubsection{标题与作者信息}

\begin{code}
\title{(*\meta{title}*)}
\author{(*\meta{author}*)}
\date{\PLdate{2022-04-01}}
\end{code}

这一部分是标题和作者信息块。这个例子中给出的是最基本的形式，事实上你还可以这样写：
\begin{code}
\author{(*\meta{author 1}*)}
\address{(*\meta{address 1}*)}
\email{(*\meta{email 1}*)}
\author{(*\meta{author 2}*)}
\address{(*\meta{address 2}*)}
\email{(*\meta{email 2}*)}
...
\end{code}

另外，如果开启 \AmS{} 风格，那么文章中还可以采用 \AmS{} 文档类的写法 (此时原始的写法也是成立的)。为此，引入 \ProjLibPackage{} 时应该加入 \texttt{amsfashion} 选项\footnote{由于这一选项会修改\LaTeX{} 的一些内部指令，有可能与一些宏包或文档类发生冲突，因此没有默认启用。}：
\begin{code}
\usepackage[amsfashion,palatino]{ProjLib}
\end{code}
而相应地，你也就可以使用这些命令：
\begin{code}
\dedicatory{(*\meta{dedicatory}*)}
\subjclass{*****}
\keywords{(*\meta{keywords}*)}
\end{code}
另外，这种情况下，也可以允许摘要出现在 \lstinline|\maketitle| 的前面，如同在 \AmS{} 文档类中所要求的那样：
\begin{code}
\begin{abstract}
    (*\meta{abstract text}*)
\end{abstract}
\maketitle
\end{code}

\subsubsection{未完成标记}
\begin{code}
\dnf<(*\meta{some hint}*)>
\end{code}
当你有一些地方尚未完成的时候，可以用这条指令标记出来，它在草稿阶段格外有用。

\subsubsection{定理类环境}
\begin{code}
\begin{theorem}\label{thm:abc}
    Ceci est un théorème.
\end{theorem}
Référence du théorème: \cref{thm:abc}
\end{code}

常见的定理类环境可以直接使用。在引用的时候，建议采用智能引用 \lstinline|\cref{|\meta{label}\lstinline|}|——这样就不必每次都写上相应环境的名称了。

\clearpage
\section{主宏包的选项}

\ProjLibPackage{} 提供下列选项以供选择：
\begin{itemize}
    \item \texttt{draft} 或 \texttt{fast}
        \begin{itemize}
            \item 快速模式。功能会适当缩减，但能够提高编译速度，建议在撰写阶段使用。
        \end{itemize}
    \item \texttt{palatino}、\texttt{times}、\texttt{garamond}、\texttt{noto}、\texttt{biolinum} ~$|$~ \texttt{useosf}
        \begin{itemize}
            \item 字体选项。顾名思义，会加载相应名称的字体。
            \item \texttt{useosf} 选项用来启用“旧式”数字。
        \end{itemize}
    \item \texttt{nothms}、\texttt{delaythms}、\texttt{nothmnum}、\texttt{thmnum} 或 \texttt{thmnum=}\meta{counter}、\texttt{complexname}、\texttt{simplename}、\texttt{regionalref}、\texttt{originalref}
        \begin{itemize}
            \item 来自用于设置定理类环境的组件 \PJLthm{} 的选项，详细信息请参阅有关这一宏包的小节。
        \end{itemize}
    \item \texttt{author}
        \begin{itemize}
            \item 加载用于增强作者信息块的组件 \PJLauthor{}。关于其详细功能，请参阅有关该宏包的小节。
        \end{itemize}
    \item \texttt{amsfashion}
        \begin{itemize}
            \item 允许 \AmS{} 文档类的写法。此时 \texttt{author} 选项会被自动开启。
        \end{itemize}
\end{itemize}
另外，还有一些组件的参数可以作为文档类的全局参数传递，例如 \texttt{EN} / \texttt{english} / \texttt{English}、\texttt{CN} / \texttt{chinese} / \texttt{Chinese} 等语言选项 (来自 \PJLlang{})，\texttt{paperstyle} 和 \texttt{preview} 等纸张选项 (来自 \PJLpaper{})。详细信息可以参阅对应的小节。

\clearpage

\section{具体组件}

\subsection{主要功能}

\subsubsection{PJLlang：多语言支持}

\PJLlang{} 提供了多语言支持，包括简体中文、繁体中文、英文、法文、德文、日文、俄文 (其中中文、日文、俄文需要相应的 \TeX{} 引擎与字体支持)。

\medskip
\PJLlang{} 提供语言选项，这些选项的名称有三种，分别是缩写（如 \texttt{EN}）、小写（如 \texttt{english}）、首字母大写（如 \texttt{English}）。具体的选项名称可以参见下文的 \meta{language name}。其中，第一个指定的语言 \meta{first language} 会被作为默认语言，相当于在文档开头指定 \lstinline|\UseLanguage{|\meta{first language}\lstinline|}|。

\begin{tip}
    为了提高编译速度，建议使用语言选项，并将其作为全局参数传递。这样，只会对指定语言进行设置，节省了 \TeX{} 内存，从而能显著提高编译速度。
\end{tip}

\medskip
在文档中，可以通过下列命令来选定语言：
\begin{itemize}
    \item \lstinline|\UseLanguage{|\meta{language name}\lstinline|}|，用于指定语言，在其后将使用对应的语言设定。
    \begin{itemize}
        \item 既可以用于导言部分，也可以用于正文部分。在不指定语言时，默认选定 “English”。
    \end{itemize}
    \item \lstinline|\UseOtherLanguage{|\meta{language name}\lstinline|}{|\meta{content}\lstinline|}|，用指定的语言的设定排版 \meta{content}。
    \begin{itemize}
        \item 相比较 \lstinline|\UseLanguage|，它不会对行距进行修改，因此中西文字混排时能够保持行距稳定。
    \end{itemize}
\end{itemize}

\medskip
\meta{language name} 有下列选择 (不区分大小写，如 \texttt{French} 或 \texttt{french} 均可)：
\begin{itemize}\setstretch{1.15}
    \item 简体中文：\texttt{CN}、\texttt{Chinese}、\texttt{SChinese} 或 \texttt{SimplifiedChinese}
    \item 繁体中文：\texttt{TC}、\texttt{TChinese} 或 \texttt{TraditionalChinese}
    \item 英语：\texttt{EN} 或 \texttt{English}
    \item 法语：\texttt{FR} 或 \texttt{French}
    \item 德语：\texttt{DE}、\texttt{German} 或 \texttt{ngerman}
    \item 意大利语：\texttt{IT} 或 \texttt{Italian}
    \item 葡萄牙语：\texttt{PT} 或 \texttt{Portuguese}
    \item 巴西葡萄牙语：\texttt{BR} 或 \texttt{Brazilian}
    \item 西班牙语：\texttt{ES} 或 \texttt{Spanish}
    \item 日语：\texttt{JP} 或 \texttt{Japanese}
    \item 俄语：\texttt{RU} 或 \texttt{Russian}
\end{itemize}

\medskip
另外，还可以通过下面的方式来填加相应语言的设置：
\begin{itemize}
    \item \lstinline|\AddLanguageSetting{|\meta{settings}\lstinline|}|
    \begin{itemize}
        \item 向所有支持的语言增加设置 \meta{settings}。
    \end{itemize}
    \item \lstinline|\AddLanguageSetting(|\meta{language name}\lstinline|){|\meta{settings}\lstinline|}|
    \begin{itemize}
        \item 向指定的语言 \meta{language name} 增加设置 \meta{settings}。
    \end{itemize}
\end{itemize}
例如，\lstinline|\AddLanguageSetting(German){\color{orange}}| 可以让所有德语以橙色显示（当然，还需要再加上 \lstinline|\AddLanguageSetting{\color{black}}| 来修正其他语言的颜色）。

\subsubsection{PJLthm：带有智能引用与多语言支持的定理类环境}

\PJLthm{} 提供定理类环境的设置。它支持下列选项：
\begin{itemize}
    \item \texttt{nothms}
    \begin{itemize}
        \item 不设定定理类环境。如果你希望使用自己的定理样式，可以使用这一选项。
    \end{itemize}
    \item \texttt{delaythms}
    \begin{itemize}
        \item 将定理类环境设定推迟到导言结尾。如果你希望定理类环境跟随自定义计数器编号，则应考虑这一选项。
    \end{itemize}
    \item \texttt{nothmnum}、\texttt{thmnum} 或 \texttt{thmnum=}\meta{counter}
    \begin{itemize}
        \item 使定理类环境均不编号 / 按照 1、2、3 顺序编号 / 在 \meta{counter} 内编号。其中 \meta{counter} 应该是自带的计数器 (如 \texttt{subsection}) 或在导言部分自定义的计数器 (在启用 \texttt{delaythms} 选项的情况下)。在没有使用任何选项的情况下将按照 \texttt{chapter} (书) 或 \texttt{section} (文章) 编号。
    \end{itemize}
    \item \texttt{complexname}、\texttt{simplename}
    \begin{itemize}
        \item 对于预设的定理名称，使用详细版本（默认）或简易版本。详细版本包含单复数的差别，并且在可能的情况下加入了定冠词；简易版本则统一采用单个单词的名称，不区分单复数。
    \end{itemize}
    \item \texttt{regionalref}、\texttt{originalref}
    \begin{itemize}
        \item 在智能引用时，定理类环境的名称是否随当前语言而变化。默认为 \texttt{regionalref}，即引用时采用当前语言对应的名称；例如，在中文语境中引用定理类环境时，无论原环境处在什么语境中，都将使用名称“定理、定义……”。若启用 \texttt{originalref}，则引用时会始终采用定理类环境所处语境下的名称；例如，在英文语境中书写的定理，即使稍后在中文语境下引用时，仍将显示为 Theorem。
        \item 在 \texttt{fast} 模式下，\texttt{originalref} 将不起作用。
    \end{itemize}
\end{itemize}

预设的定理类环境包括：\texttt{assumption}、\texttt{axiom}、\texttt{conjecture}、\texttt{convention}、\texttt{corollary}、\texttt{definition}、\texttt{definition-proposition}、\texttt{definition-theorem}、\texttt{example}、\texttt{exercise}、\texttt{fact}、\texttt{hypothesis}、\texttt{lemma}、\texttt{notation}、\texttt{observation}、\texttt{problem}、\texttt{property}、\texttt{proposition}、\texttt{question}、\texttt{remark}、\texttt{theorem}，以及相应带有星号 \lstinline|*| 的无编号版本。它们在显示时会依据当前语言而变化，例如在中文语境下 \texttt{theorem} 会显示为“定理”，而在英文语境下则会显示为“Theorem”。关于如何选定语言，请参阅关于 \PJLlang{} 的小节。

\begin{tip}
    在引用定理类环境时，建议使用智能引用 \lstinline|\cref{|\meta{label}\lstinline|}|。这样就不必每次都写上相应环境的名称了。
\end{tip}

\medskip
若需要定义新的定理类环境，首先要定义这个环境在所用语言下的名称。有两种方式：
\begin{itemize}
    \item 简易设置：\lstinline|\NameTheorem[|\meta{language name}\lstinline|]{|\meta{name of environment}\lstinline|}{|\meta{name string}\lstinline|}|
        \begin{itemize}
            \item 这种方式只设置单独的显示名称，智能引用等名称与之取为相同（特别地，以这种方式设置时智能引用名称将不区分单复数）。当不指定 \meta{language name}时，会将该名称设置为所有支持语言下的名称。另外，带星号与不带星号的同名环境共用一个名称，因此 \lstinline|\NameTheorem{envname*}| 与 \lstinline|\NameTheorem{envname}| 效果相同。
        \end{itemize}
    \item 详细设置（推荐）：
\begin{code}
\NameTheorem{(*\meta{name of environment}*)}{
    (*\meta{language name 1}*)={
        name=(*\meta{Name}*),
        crefname={(*\meta{name}*)}{(*\meta{names}*)},
        Crefname={(*\meta{Name}*)}{(*\meta{Names}*)},
        autorefname=(*\meta{name}*),
        theoremheading=(*\meta{Name}*),
    },
    (*\meta{language name 2}*)={...},
}
\end{code}
或
\begin{code}
\NameTheorem[(*\meta{language name}*)]{(*\meta{name of environment}*)}{
    name=(*\meta{Name}*),
    crefname={(*\meta{name}*)}{(*\meta{names}*)},
    Crefname={(*\meta{Name}*)}{(*\meta{Names}*)},
    autorefname=(*\meta{name}*),
    theoremheading=(*\meta{Name}*),
}
\end{code}
        \begin{itemize}
            \item 这种方式可以具体设置各个名称。当不指定 \meta{language name}时，将允许使用完整界面；在指定语言时则只设定相应语言。同样，带星号与不带星号的同名环境共用一个名称，因此 \lstinline|\NameTheorem{envname*}| 与 \lstinline|\NameTheorem{envname}| 效果相同。
        \end{itemize}
\end{itemize}

\begin{tip}
    除此以外，你也可以在定义相应的定理类环境时为之命名，可以参见后文对 \lstinline|\CreateTheorem| 的说明。
\end{tip}

\bigskip
然后，用下面五种方式之一定义这一环境：
\begin{itemize}
    \item \lstinline|\CreateTheorem*{|\meta{name of environment}\lstinline|}|
        \begin{itemize}
            \item 定义不编号的环境 \meta{name of environment}
        \end{itemize}
    \item \lstinline|\CreateTheorem{|\meta{name of environment}\lstinline|}|
        \begin{itemize}
            \item 定义编号环境 \meta{name of environment}，按顺序编号
        \end{itemize}
    \item \lstinline|\CreateTheorem{|\meta{name of environment}\lstinline|}[|\meta{numbered like}\lstinline|]|
        \begin{itemize}
            \item 定义编号环境 \meta{name of environment}，与 \meta{numbered like} 计数器共用编号
        \end{itemize}
    \item \lstinline|\CreateTheorem{|\meta{name of environment}\lstinline|}<|\meta{numbered within}\lstinline|>|
        \begin{itemize}
            \item 定义编号环境 \meta{name of environment}，在 \meta{numbered within} 计数器内编号
        \end{itemize}
    \item \lstinline|\CreateTheorem{|\meta{name of environment}\lstinline|}(|\meta{existed environment}\lstinline|)|\\
    \lstinline|\CreateTheorem*{|\meta{name of environment}\lstinline|}(|\meta{existed environment}\lstinline|)|
        \begin{itemize}
            \item 将 \meta{name of environment} 与 \meta{existed environment} 或 \meta{existed environment}\lstinline|*| 等同。
            \item 这种方式通常在两种情况下比较有用：
                \begin{enumerate}
                    \item 希望定义更简洁的名称。例如，使用 \lstinline|\CreateTheorem{thm}(theorem)|，便可以直接用名称 \texttt{thm} 来撰写定理。
                    \item 希望去除某些环境的编号。例如，使用 \lstinline|\CreateTheorem{remark}(remark*)|，便可以去除 \texttt{remark} 环境的编号。
                \end{enumerate}
        \end{itemize}
\end{itemize}

\begin{tip}
    其内部使用了 \textsf{amsthm}，因此传统的 \texttt{theoremstyle} 对其也是适用的，只需在相关定义前标明即可。
\end{tip}

\bigskip
你也可以在定义定理类环境的同时为之命名，只需要在之后再加入一组括号进行设置：
\begin{code}
\CreateTheorem{(*\meta{name of environment}*)}{
    (*\meta{language name 1}*)={
        name=(*\meta{Name}*),
        crefname={(*\meta{name}*)}{(*\meta{names}*)},
        Crefname={(*\meta{Name}*)}{(*\meta{Names}*)},
        autorefname=(*\meta{name}*),
        theoremheading=(*\meta{Name}*),
    },
    (*\meta{language name 2}*)={...},
}
\end{code}

\NameTheorem[CN]{proofidea}{思路}
\CreateTheorem*{proofidea*}
\CreateTheorem{proofidea}<subsection>

\bigskip
下面提供一个例子。这三行代码：
\begin{code}
\NameTheorem[CN]{proofidea}{思路}
\CreateTheorem*{proofidea*}
\CreateTheorem{proofidea}<subsection>
\end{code}
可以分别定义不编号的环境 \lstinline|proofidea*| 和编号的环境 \lstinline|proofidea| (在 subsection 内编号)，它们支持在简体中文语境中使用，效果如下所示 (具体样式与所在的文档类有关) :

\begin{proofidea*}
    \lstinline|proofidea*| 环境。
\end{proofidea*}

\begin{proofidea}
    \lstinline|proofidea| 环境。
\end{proofidea}

\medskip
当然，你也可以使用更加精细的名称：
\begin{code}
\NameTheorem{proofidea}{
    CN = {
        name = 思路,
        crefname = {思路}{思路},
        Crefname = {思路}{思路},
    }
}
\CreateTheorem*{proofidea*}
\CreateTheorem{proofidea}<subsection>
\end{code}
或者在定义时设置名称（对于 \lstinline|proofidea*| 与 \lstinline|proofidea| 只需要设置一次即可）：
\begin{code}
\CreateTheorem*{proofidea*}
\CreateTheorem{proofidea}<subsection>{
    CN = {
        name = 思路,
        crefname = {思路}{思路},
        Crefname = {思路}{思路},
    }
}
\end{code}


\subsection{次要功能}

\subsubsection{PJLauthor：增强的作者信息块}

\PJLauthor{} 提供了 \lstinline|\address|、\lstinline|\curraddr|、\lstinline|\email| 命令，并且允许输入多组用户信息。标准的输入方式是这样的：
\begin{code}
\author{(*\meta{author 1}*)}
\address{(*\meta{address 1}*)}
\email{(*\meta{email 1}*)}
\author{(*\meta{author 2}*)}
\address{(*\meta{address 2}*)}
\email{(*\meta{email 2}*)}
...
\end{code}
其中 \lstinline|\address|、\lstinline|\curraddr|、\lstinline|\email| 的相互顺序是不重要的。

\medskip
另外，你可以通过选项 \texttt{amsfashion} 以使用 \AmS{} 方式写作。具体来说，效果为：
\begin{itemize}
    \item 提供 \lstinline|\dedicatory|、\lstinline|\keywords| 及 \lstinline|\subjclass| 命令
    \item \lstinline|\thanks| 可以写在 \lstinline|\author| 之外
    \item \lstinline|abstract| 环境可以放在 \lstinline|\maketitle| 的前面
\end{itemize}

\begin{tip}[注意]
    这些功能只在标准文档类中启用。在 \AmS{} 文档类中，\PJLauthor{} 不会起到任何效果。
\end{tip}

\subsubsection{PJLdate：智能日期处理}

\PJLdatePackage{} 提供了 \lstinline|\TheDate|\meta{yyyy-mm-dd} 命令，以将 \meta{yyyy-mm-dd} 转换为当前语言的日期格式显示。例如，在当前的中文语境下，\lstinline|\TheDate{2022-04-01}| 会被显示为“\TheDate{2022-04-01}”，而在英文语境下则会被显示为“\UseOtherLanguage{English}{\TheDate{2022-04-01}}”。

关于如何选定语言，请参阅关于 \PJLlang{} 的小节。

\subsubsection{PJLdraft：未完成标记}

\PJLdraft{} 提供了下列命令：
\begin{itemize}\setstretch{1.15}
    \item \lstinline|\dnf| 或 \lstinline|\dnf<...>|。效果为：\dnf~或 \dnf<...>。\\其提示文字与当前语言相对应，例如，在法语模式下将会显示为 \UseOtherLanguage{French}{\dnf}。
    \item \lstinline|\needgraph| 或 \lstinline|\needgraph<...>|。效果为：\needgraph~或 \needgraph<...>其提示文字与当前语言相对应，例如，在法语模式下将会显示为 \UseOtherLanguage{French}{\needgraph}
\end{itemize}

关于如何选定语言，请参阅关于 \PJLlang{} 的小节。

\subsubsection{PJLlogo：\texorpdfstring{\ProjLib{} 图标}{ProjLib 图标}}

\PJLlogo{} 提供了 \lstinline|\ProjLib| 命令用于绘制 Logo，效果为：\ProjLib{}。它与普通的文字指令效果类似，可以用于不同的字号：

\vspace{-0.5\baselineskip}
\begin{center}
    \begin{tabular}{ll}
        \lstinline|\tiny|:& {\tiny\ProjLib}\\
        \lstinline|\scriptsize|:& {\scriptsize\ProjLib}\\
        \lstinline|\footnotesize|:& {\footnotesize\ProjLib}\\
        \lstinline|\normalsize|:& {\normalsize\ProjLib}\\
        \lstinline|\large|:& {\large\ProjLib}\\
        \lstinline|\Large|:& {\Large\ProjLib}\\
        \lstinline|\LARGE|:& {\LARGE\ProjLib}\\
        \lstinline|\huge|:& {\huge\ProjLib}\\
        \lstinline|\Huge|:& {\Huge\ProjLib}
    \end{tabular}
\end{center}

\subsubsection{PJLmath：数学符号与捷径}

\PJLmath{} 提供下列捷径：
\begin{enumerate}[label=\roman*)]
    \item \lstinline|\mathfrak{|$\cdot$\lstinline|}| $\longrightarrow$ \lstinline|\mf|$\cdot$ 或 \lstinline|\frak|$\cdot$。例如，\lstinline|\mfA| (或 \lstinline|\mf{A}|) 与 \lstinline|\mathfrak{A}| 效果相同. 这对大写、小写字母都有效：\vspace{-\baselineskip}
    \begin{align*}
        \mfa\mfb\mfc\mfd\mfe\mff\mfg\mfh\mfi\mfj\mfk\mfl\mfm\mfn&\mfo\mfp\mfq\mfr\mfs\mft\mfu\mfv\mfw\mfx\mfy\mfz\\
        \mfA\mfB\mfC\mfD\mfE\mfF\mfG\mfH\mfI\mfJ\mfK\mfL\mfM\mfN&\mfO\mfP\mfQ\mfR\mfS\mfT\mfU\mfV\mfW\mfX\mfY\mfZ
    \end{align*}
    \item \lstinline|\mathbb{|$\cdot$\lstinline|}| \( \longrightarrow \) \lstinline|\bb|$\cdot$。这只针对大写字母或数字 \( 1 \).
    \begin{equation*}
        \bbA\bbB\bbC\bbD\bbE\bbF\bbG\bbH\bbI\bbJ\bbK\bbL\bbM\bbN\bbO\bbP\bbQ\bbR\bbS\bbT\bbU\bbV\bbW\bbX\bbY\bbZ\bb1
    \end{equation*}
    对于常见的代数结构有这些特殊命令：\lstinline|\N|, \lstinline|\Z|, \lstinline|\Q|, \lstinline|\R|, \lstinline|\C|, \lstinline|\F|, \lstinline|\A|.
    \[
        \N\Z\Q\R\C\F\A
    \]
    \item \lstinline|\mathcal{|$\cdot$\lstinline|}| \( \longrightarrow \) \lstinline|\mc|$\cdot$ 或 \lstinline|\cal|$\cdot$。这只针对大写字母。
    \begin{equation*}
        \mcA\mcB\mcC\mcD\mcE\mcF\mcG\mcH\mcI\mcJ\mcK\mcL\mcM\mcN\mcO\mcP\mcQ\mcR\mcS\mcT\mcU\mcV\mcW\mcX\mcY\mcZ
    \end{equation*}
    \item \lstinline|\mathscr{|$\cdot$\lstinline|}| \( \longrightarrow \) \lstinline|\ms|$\cdot$ 或 \lstinline|\scr|$\cdot$。这只针对大写字母。
    \begin{equation*}
        \msA\msB\msC\msD\msE\msF\msG\msH\msI\msJ\msK\msL\msM\msN\msO\msP\msQ\msR\msS\msT\msU\msV\msW\msX\msY\msZ
    \end{equation*}
\end{enumerate}

另外，\PJLmath{} 还提供了一些 \LaTeX{} 中未自带的符号。

\begin{longtable}[l]{ p{4cm} p{6cm} p{6cm} }
\lstinline|\abs| & \lstinline|\abs{a}| $\rightarrow \abs{a}$ & 绝对值符号 \\
\lstinline|\norm| & \lstinline|\norm{a}| $\rightarrow \norm{a}$ & 范数符号 \\
\lstinline|\injection| & \lstinline|\injection| $\rightarrow ~\injection$ & 表示单射的箭头符号 \\
\lstinline|\surjection| & \lstinline|\surjection| $\rightarrow ~\surjection$ & 表示满射的箭头符号 \\
\lstinline|\bijection| & \lstinline|\bijection| $\rightarrow ~\bijection$ & 表示双射的箭头符号 \\
\end{longtable}

这些捷径和符号是以一种安全的方式定义的，它们不会与已有的命令或你自己定义的命令相冲突。因此即使你用不到这些捷径或符号，也不用担心它们的存在会带来错误。

\subsubsection{PJLpaper：纸张设置}

\PJLpaper{} 主要用于调节纸张颜色。它支持下列选项：

\begin{itemize}
    \item \texttt{paperstyle = \meta{paper style name}}
        \begin{itemize}
            \item 设定纸张色彩样式。\meta{paper style name} 可供选择的选项有：\texttt{yellow}、\texttt{dark} 与 \texttt{nord}。
        \end{itemize}
    \item \texttt{yellowpaper}、\texttt{darkpaper}、\texttt{nordpaper}
        \begin{itemize}
            \item 设定纸张色彩样式。效果与相应名称的 \texttt{paperstyle} 相同。
        \end{itemize}
    \item \texttt{preview}
        \begin{itemize}
            \item 预览模式，将会把 pdf 文件的白边去掉以方便阅读。
        \end{itemize}
\end{itemize}

为了使用的方便，建议把这些选项作为文档类的全局参数，这样对于文档的纸张设定一目了然。

\clearpage

\section{目前存在的问题}

\begin{itemize}[itemsep=.6em]
    \item \PJLauthor{} 仍然处于初步阶段，在很多方面还远远比不上相对成熟的 \textsf{authblk}。
    \item \PJLlang{}：针对 \textsf{polyglossia} 的设置仍然存在许多问题，因此现在主要功能都是通过 \textsf{babel} 实现的。
    \item \PJLpaper{} 的 \texttt{preview} 功能主要是通过 \textsf{geometry} 宏包实现的，因此在 \textsc{\textsf{Koma}} 文档类中效果不好。
    \item \PJLthm{} 对于定理类环境的编号与样式设定目前还无法由用户更改。
    \item \PJLthm{}：智能引用针对所有 \PJLlang{} 已支持语言的本地化尚不完整，主要是中文、日文与俄文。
    \item 错误处理功能不完善，在出现一些问题时没有相应的错误提示。
    \item 代码中仍有许多可优化之处，有些部分耗时过长，特别是 \PJLthm{} 对定理类环境的定义。
\end{itemize}

\end{document}
\endinput
%%
%% End of file `ProjLib-doc-cn.tex'.
