%! TEX program = xelatex \documentclass[allowbf]{lebhart} %%================================ %% 引入工具集 %%================================ \usepackage{PJLtoolkit} \usepackage{longtable} % breakable tables \usepackage{hologo} % more TeX logo \UseLanguage{Chinese} %%================================ %% 排版代码 %%================================ \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,cref,dnf,needgraph,UseLanguage,UseOtherLanguage,AddLanguageSetting,maketitle,address,curraddr,email,keywords,subjclass,thanks,dedicatory,PJLdate,ProjLib } } \lstnewenvironment{code}% {\setkeys{lst}{columns=fullflexible,keepspaces=true}}{} %%================================ %% remind %%================================ \newenvironment{remind}[1][提示]{% \begin{tcolorbox}[breakable, enhanced, width = \textwidth, colback = white, colbacktitle = paper, colframe = gray!50, boxrule=0.2mm, coltitle = black, fonttitle = \sffamily, attach boxed title to top left = {yshift=-\tcboxedtitleheight/2, xshift=\tcboxedtitlewidth/4}, boxed title style = {boxrule=0pt, colframe=paper}, before skip = 0.3cm, after skip = 0.3cm, top = 3mm, bottom = 3mm, title={\sffamily #1}]% }{\end{tcolorbox}} %%================================ %% 名称 %%================================ \providecommand{\PJLtoolkit}{\textsf{PJLtoolkit}} \providecommand{\PJLamssim}{\textsf{PJLamssim}} \providecommand{\PJLauthor}{\textsf{PJLauthor}} \providecommand{\PJLdatestr}{\textsf{PJLdate}} \providecommand{\PJLdraft}{\textsf{PJLdraft}} \providecommand{\PJLlang}{\textsf{PJLlang}} \providecommand{\PJLlogo}{\textsf{PJLlogo}} \providecommand{\PJLpaper}{\textsf{PJLpaper}} \providecommand{\PJLthm}{\textsf{PJLthm}} %%================================ %% 正文 %%================================ \begin{document} \title{\ProjLib{} 工具集\\[.3\baselineskip]\normalsize 使用指南} \author{许锦文} \thanks{对应版本.~~\texttt{\ProjLib{}~2021/05/25}} \date{2021年5月,北京} \maketitle \begin{abstract} \ProjLib{} 工具集之设计目的为简化 \LaTeX{} 文档撰写前的准备工作。只需要加载 \PJLtoolkit{},多语言设置就已准备就绪,定理类环境已被设置好可供直接使用,并且引入了一系列辅助功能。 \end{abstract} % \tableofcontents \section{PJLtoolkit} \subsection{如何加载} 只需要在导言部分加入这一行即可: \begin{code} \usepackage{PJLtoolkit} \end{code} \begin{remind}[注意事项] 由于其内部使用了 \textsf{cleveref},\PJLtoolkit{} 需要放在 \textsf{varioref}、\textsf{hyperref} 的后面。 \end{remind} \medskip \subsection{选项} \PJLtoolkit{} 提供下列选项以供选择: \begin{itemize} \item \texttt{draft} 或 \texttt{fast} \begin{itemize} \item 快速模式。功能会适当缩减,但能够提高编译速度,建议在撰写阶段使用。 \end{itemize} \item \texttt{palatino}、\texttt{times}、\texttt{garamond}、\texttt{biolinum} \begin{itemize} \item 字体选项。顾名思义,会加载相应名称的字体。 \end{itemize} \item \texttt{author} \begin{itemize} \item 加载 \PJLauthor{}。关于其详细功能,请参阅有关这一宏包的小节。 \end{itemize} \item \texttt{amssim} \begin{itemize} \item 加载 \PJLamssim{}。关于其详细功能,请参阅有关这一宏包的小节。 \end{itemize} \item \texttt{nothms}、\texttt{regionalref} \begin{itemize} \item 来自 \PJLthm{} 的选项,详细信息请参阅有关这一宏包的小节。 \end{itemize} \end{itemize} 另外,还有一些组件的参数可以作为文档类的全局参数传递,例如 \PJLpaper{} 的 \texttt{paperstyle} 和 \texttt{preview} 等。详细信息可以参阅对应的小节。 \section{具体组件} \subsection{PJLamssim} \PJLamssim{} 用于模拟 \textsf{amsart} 文档类的部分功能,包括: \begin{itemize} \item \lstinline|\address|、\lstinline|\curraddr|、\lstinline|\email|、\lstinline|\dedicatory| 命令 (前三者由 \PJLauthor{} 提供) \item \lstinline|\keywords| 命令 \item \lstinline|\subjclass| 命令 \item \lstinline|\thanks| 可以写在 \lstinline|\author| 之外 \item \lstinline|abstract| 环境可以放在 \lstinline|\maketitle| 的前面 \end{itemize} 这些功能只在标准文档类中启用。在 \AmS{} 文档类中,\PJLamssim{} 不会起到任何效果。 \subsection{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| 的相互顺序是不重要的。 \subsection{PJLdate} \PJLdatestr{} 提供了 \lstinline|\PJLdate|\meta{yyyy-mm-dd} 命令,以将 \meta{yyyy-mm-dd} 转换为对应语言的日期格式显示。例如,在当前的中文语境下,\lstinline|\PJLdate{2022-04-01}| 会被显示为:\PJLdate{2022-04-01}。 关于如何选定语言,请参阅关于 \PJLlang{} 的小节。 \subsection{PJLdraft} \PJLdraft{} 提供了下列命令: \begin{itemize} \item \lstinline|\dnf| 或 \lstinline|\dnf<...>|。效果为:\dnf~或 \dnf<...>。\\其提示文字与当前语言相对应,例如,在法语模式下将会显示为 \UseOtherLanguage{French}{\dnf}。 \item \lstinline|\needgraph| 或 \lstinline|\needgraph<...>|。效果为:\needgraph~或 \needgraph<...>其提示文字与当前语言相对应,例如,在法语模式下将会显示为 \UseOtherLanguage{French}{\needgraph} \end{itemize} 关于如何选定语言,请参阅关于 \PJLlang{} 的小节。 \subsection{PJLlang} \PJLlang{} 提供了多语言支持,包括简体中文、繁体中文、英文、法文、德文、日文、俄文 (其中中文、日文、俄文需要相应的 \TeX{} 引擎与字体支持)。可以通过下列命令来选定语言: \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} \meta{language name} 有下列选择 (不区分大小写,如 \texttt{French} 或 \texttt{french} 均可): \begin{itemize} \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{JP} 或 \texttt{Japanese} \item 俄文:\texttt{RU} 或 \texttt{Russian} \end{itemize} 另外,还可以通过下面的方式来填加相应语言的设置: \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}}| 来修正其他语言的颜色)。 \subsection{PJLlogo} \PJLlogo{} 提供了 \lstinline|\ProjLib| 命令用于绘制 Logo,效果为:\ProjLib{}。它与普通的文字指令效果类似,可以用于不同的字号: % \begin{itemize} % \item \lstinline|\tiny|:\quad {\tiny\ProjLib} % \item \lstinline|\scriptsize|:\quad {\scriptsize\ProjLib} % \item \lstinline|\footnotesize|:\quad {\footnotesize\ProjLib} % \item \lstinline|\normalsize|:\quad {\normalsize\ProjLib} % \item \lstinline|\large|:\quad {\large\ProjLib} % \item \lstinline|\Large|:\quad {\Large\ProjLib} % \item \lstinline|\LARGE|:\quad {\LARGE\ProjLib} % \item \lstinline|\huge|:\quad {\huge\ProjLib} % \item \lstinline|\Huge|:\quad {\Huge\ProjLib} % \end{itemize} % \vspace{-0.5\baselineskip} \begin{longtable}{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{longtable} \subsection{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} 为了使用的方便,建议把这些选项作为文档类的全局参数,这样对于文档的纸张设定一目了然。 \subsection{PJLthm} \PJLthm{} 提供定理类环境的设置。它支持下列选项: \begin{itemize} \item \texttt{nothms} \begin{itemize} \item 不设定定理类环境。如果你希望使用自己的定理样式,可以使用这一选项。 \end{itemize} \item \texttt{regionalref} \begin{itemize} \item 在智能引用时,定理类环境的名称随当前语言而变化(默认情况下,引用时会始终采用定理类环境所处语境下的名称;例如,在英文语境中书写的定理,即使稍后在中文语境下引用时,仍将显示为 Theorem)。在 \texttt{fast} 模式下,这一选项默认启用。 \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{problem}、\texttt{property}、\texttt{proposition}、\texttt{question}、\texttt{remark}、\texttt{theorem},以及相应的带有星号 \lstinline|*| 的无编号版本。这些定理类环境在显示时会依据当前语言而相应变化,例如在中文模式下 \texttt{theorem} 会显示为“定理”,而在英文模式下则会显示为“Theorem”。关于如何选定语言,请参阅关于 \PJLlang{} 的小节。 \begin{remind} 在引用定理类环境时,建议使用智能引用 \lstinline|\cref{|\meta{label}\lstinline|}|。这样就不必每次都写上相应环境的名称了。 \end{remind} \medskip % 若需要定义新的定理类环境,首先要定义这个环境在所用语言下的名称 \lstinline|\|\meta{name of environment}\meta{language abbr},其中 \meta{language abbr} 是语言的简写,分别为: % \begin{longtable}{ll|ll} % \texttt{CN} & 简体中文 & \texttt{DE} & 德文\\ % \texttt{TC} & 繁体中文 & \texttt{JP} & 日文\\ % \texttt{EN} & 英文 & \texttt{RU} & 俄文\\ % \texttt{FR} & 法文 & &\\ % \end{longtable} % \begin{remind} % 如果要定义名称后带有星号 \lstinline|*| 的环境,那么在上面的 \meta{name of environment} 中不用写星号。 % \end{remind} 若需要定义新的定理类环境,首先要定义这个环境在所用语言下的名称: \vspace{-.15\baselineskip}% \begin{itemize} \item \lstinline|\NameTheorem[|\meta{language name}\lstinline|]{|\meta{name of environment}\lstinline|}{|\meta{name string}\lstinline|}| \end{itemize} \vspace{-.15\baselineskip}% 其中,\meta{language name} 可参阅关于 \PJLlang{} 的小节。当不指定 \meta{language name}时,则会将该名称设置为所有支持语言下的名称。另外,带星号与不带星号的同名环境共用一个名称,因此 \lstinline|\NameTheorem{envname*}{...}| 与 \lstinline|\NameTheorem{envname}{...}| 效果相同。 \medskip 然后用下面五种方式之一定义这一环境: \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{remind} 其内部使用了 \textsf{amsthm},因此传统的 \texttt{theoremstyle} 对其也是适用的,只需在相关定义前标明即可。 \end{remind} % \def\proofideanameCN{思路} \NameTheorem[CN]{proofidea}{思路} \CreateTheorem*{proofidea*} \CreateTheorem{proofidea} \bigskip 下面提供一个例子。这三行代码: \begin{code} \NameTheorem[CN]{proofidea}{思路} \CreateTheorem*{proofidea*} \CreateTheorem{proofidea} \end{code} 可以分别定义不编号的环境 \lstinline|proofidea*| 和编号的环境 \lstinline|proofidea| (在 subsection 内编号),它们支持在简体中文语境中使用,效果如下所示 (具体样式与所在的文档类有关) : \begin{proofidea*} \lstinline|proofidea*| 环境。 \end{proofidea*} \begin{proofidea} \lstinline|proofidea| 环境。 \end{proofidea} \medskip \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} \clearpage \section{使用示例} \subsection{标准文档类} 在标准文档类中,通常只需简要设置页面尺寸、超链接,再载入 \PJLtoolkit{},即可直接开始写作。下面是一段完整的示例。 \begin{code} \documentclass{article} \usepackage[a4paper,margin=.75in]{geometry} \usepackage[hidelinks]{hyperref} \usepackage[palatino]{PJLtoolkit} % Load the toolkit and use font Palatino \UseLanguage{French} % Use French from here \begin{document} \title{Le Titre} \author{Auteur} \date{\PJLdate{2022-04-01}} \maketitle \begin{abstract} Ceci est un résumé. \dnf \end{abstract} \section{Un théorème} %% Theorem-like environments can be used directly \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 如果使用了 \PJLamssim{},那么文章中就可以采用 \AmS{} 文档类的写法 (当然,此时原始的写法也是成立的,因此始终添加 \texttt{amssim} 这一参数通常是没有问题的)。此时上文引入 \PJLtoolkit{} 的那一行应该写为: \begin{code} \usepackage[amssim,palatino]{PJLtoolkit} \end{code} \clearpage \subsection{\texorpdfstring{\AmS{}}{AMS} 文档类} 在 \AmS{} 文档类中,通常只需简要设置页面尺寸、超链接,再载入 \PJLtoolkit{},即可直接开始写作。下面是一段完整的示例。 \begin{code} \documentclass{amsart} \usepackage[a4paper,margin=.75in]{geometry} \usepackage[hidelinks]{hyperref} \usepackage[palatino]{PJLtoolkit} % Load the toolkit and use font Palatino \UseLanguage{French} % Use French from here \begin{document} \title{Le Titre} \author{Auteur 1} \address{Adresse 1} \email{\href{Courriel 1}{Courriel 1}} \author{Auteur 1} \address{Adresse 1} \email{\href{Courriel 2}{Courriel 2}} \date{\PJLdate{2022-04-01}} \subjclass{*****} \keywords{...} \begin{abstract} Ceci est un résumé. \dnf \end{abstract} \maketitle \section{Première section} %% Theorem-like environments can be used directly \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} \end{document}