\documentclass[English,Chinese,French,allowbf]{lebhart} %%================================ %% Import toolkit %%================================ \usepackage{ProjLib} \usepackage{longtable} % breakable tables \usepackage{hologo} % more TeX logo \usetikzlibrary{calc} \usepackage{blindtext} \UseLanguage{Chinese} %%================================ %% For typesetting code %%================================ \usepackage{listings} \definecolor{maintheme}{RGB}{70,130,180} \definecolor{forestgreen}{RGB}{21,122,81} \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=% {part,parttext,chapter,section,subsection,subsubsection,frontmatter,mainmatter,backmatter,tableofcontents,href, color,NameTheorem,CreateTheorem,proofideanameEN,cref,dnf,needgraph,UseLanguage,UseOtherLanguage,AddLanguageSetting,maketitle,address,curraddr,email,keywords,subjclass,thanks,dedicatory,PLdate,ProjLib,qedhere } } \lstnewenvironment{code}% {\setstretch{1.07}% \setkeys{lst}{columns=fullflexible,keepspaces=true}% }{} \lstnewenvironment{code*}% {\setstretch{1.07}% \setkeys{lst}{numbers=left,columns=fullflexible,keepspaces=true}% }{} %%================================ %% tip %%================================ \usepackage[many]{tcolorbox} \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{\colorist}{\textsf{colorist}} \providecommand{\colorart}{\textsf{colorart}} \providecommand{\colorbook}{\textsf{colorbook}} \providecommand{\lebhart}{\textsf{lebhart}} \providecommand{\beaulivre}{\textsf{beaulivre}} %%================================ %% Titles %%================================ \let\LevelOneTitle\section \let\LevelTwoTitle\subsection \let\LevelThreeTitle\subsubsection %%================================ %% Main text %%================================ \begin{document} \title{\lebhart{},以多彩的方式排版你的文章} \author{许锦文} \thanks{对应版本. \texttt{\lebhart{} 2021/08/08}} \email{\href{mailto:ProjLib@outlook.com}{ProjLib@outlook.com}} \date{2021年8月,北京} \maketitle \begin{abstract} \lebhart{} 是 \colorist{} 文档类系列的成员之一,其名称取自于德文的lebhaft (活泼),并取了artikel (文章)的前三个字母组合而成。整个 \colorist{} 系列包含用于排版文章的 \colorart{}、\lebhart{} 以及用于排版书的 \colorbook{}、\beaulivre{}。我设计这一系列的初衷是为了撰写草稿与笔记,使之多彩而不缭乱。 \lebhart{} 支持英语、法语、德语、意大利语、葡萄牙语、巴西葡萄牙语、西班牙语、简体中文、繁体中文、日文、俄文,并且同一篇文档中这些语言可以很好地协调。由于采用了自定义字体,需要用 \hologo{XeLaTeX} 或 \hologo{LuaLaTeX} 引擎进行编译。 这篇说明文档即是用 \lebhart{} 排版的 (使用了参数 \texttt{allowbf}),你可以把它看作一份简短的说明与演示。 \end{abstract} \setcounter{tocdepth}{2} \tableofcontents \medskip \LevelOneTitle*{开始之前} 为了使用这篇文档中提到的文档类,你需要: \begin{itemize} \item 安装一个尽可能新版本的 TeX Live 或 MikTeX 套装,并确保 \texttt{colorist} 和 \texttt{projlib} 被正确安装在你的 \TeX 封装中。 \item 下载并安装所需的字体,参考“关于默认字体”这一节。 \item 熟悉 \LaTeX{} 的基本使用方式,并且知道如何用 \hologo{pdfLaTeX}、\hologo{XeLaTeX} 或 \hologo{LuaLaTeX} 编译你的文档。 \end{itemize} \LevelOneTitle{使用示例} \LevelTwoTitle{如何加载} 只需要在第一行写: \begin{code} \documentclass{lebhart} \end{code} 即可使用 \lebhart{} 文档类。请注意,要使用 \hologo{XeLaTeX} 或 \hologo{LuaLaTeX} 引擎才能编译。 \LevelTwoTitle{一篇完整的文档示例} 首先来看一段完整的示例。 \begin{code*} \documentclass{lebhart} \usepackage{ProjLib} \UseLanguage{French} \begin{document} \title{(*\meta{title}*)} \author{(*\meta{author}*)} \date{\PLdate{2022-04-01}} \maketitle \begin{abstract} Ceci est un résumé. \dnf \end{abstract} \begin{keyword} AAA, BBB, CCC, DDD, EEE \end{keyword} \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} \end{document} \end{code*} 如果你觉得这个例子有些复杂,不要担心。现在我们来一点点地观察这个例子。 \bigskip \LevelThreeTitle{初始化部分} \begin{code} \documentclass{lebhart} \usepackage{ProjLib} \end{code} 初始化部分很简单:第一行加载文档类 \lebhart{},第二行加载 \ProjLib{} 工具箱,以便使用一些附加功能。 \LevelThreeTitle{设定语言} \begin{code} \UseLanguage{French} \end{code} 这一行表明文档中将使用法语(如果你的文章中只出现英语,那么可以不需要设定语言)。你也可以在文章中间用同样的方式再次切换语言。支持的语言包括简体中文、繁体中文、日文、英语、法语、德语、西班牙语、葡萄牙语、巴西葡萄牙语、俄语。 对于这一命令的详细说明以及更多相关命令,可以参考后面关于多语言支持的小节。 \LevelThreeTitle{标题,作者信息,摘要与关键词} \begin{code} \title{(*\meta{title}*)} \author{(*\meta{author}*)} \date{\PLdate{2022-04-01}} \maketitle \begin{abstract} (*\meta{abstract}*) \end{abstract} \begin{keyword} (*\meta{keywords}*) \end{keyword} \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{} 文档类的写法: \begin{code} \title{(*\meta{title}*)} \author{(*\meta{author 1}*)} \address{(*\meta{address 1}*)} \email{(*\meta{email 1}*)} \author{(*\meta{author 2}*)} \address{(*\meta{address 2}*)} \email{(*\meta{email 2}*)} \date{\PLdate{2022-04-01}} \subjclass{*****} \keywords{(*\meta{keywords}*)} \begin{abstract} (*\meta{abstract}*) \end{abstract} \maketitle \end{code} \LevelThreeTitle{未完成标记} \begin{code} \dnf<(*\meta{some hint}*)> \end{code} 当你有一些地方尚未完成的时候,可以用这条指令标记出来,它在草稿阶段格外有用。 \LevelThreeTitle{定理类环境} \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|}|——这样就不必每次都写上相应环境的名称了。 \begin{tip} 如果你之后想要切换到标准文档类,只需要把前两行换为: \begin{code} \documentclass{article} \usepackage[a4paper,margin=1in]{geometry} \usepackage[hidelinks]{hyperref} \usepackage[palatino,amsfashion]{ProjLib} \end{code} 或者使用 \AmS{} 文档类: \begin{code} \documentclass{amsart} \usepackage[a4paper,margin=1in]{geometry} \usepackage[hidelinks]{hyperref} \usepackage[palatino]{ProjLib} \end{code} \end{tip} \begin{tip} 如果你喜欢这个文档类,但又希望使用一种更加中规中矩的样式,那么不妨使用 \texttt{classical} 选项,就像这样: \begin{code} \documentclass[classical]{lebhart} \end{code} \end{tip} \bigskip \LevelOneTitle{关于默认字体} 本文档类中默认使用 Palatino Linotype 作为英文主字体,思源宋体、思源黑体、思源等宽作为中文主字体、无衬线字体以及等宽字体,并部分使用了 Neo Euler 作为数学字体。这些字体需要用户自行下载安装。其中,思源字体系列可在 \url{https://github.com/adobe-fonts} 下载 (推荐下载 Super-OTC 版本,这样下载的体积较小)。Neo Euler可以在 \url{https://github.com/khaledhosny/euler-otf} 下载。在没有安装相应的字体时,将采用TeX Live中自带的字体来代替,效果可能会有所折扣。 另外,还使用了 Source Code Pro 作为英文无衬线字体、New Computer Modern Mono 作为英文等宽字体,以及 Asana Math、Tex Gyre Pagella Math、Latin Modern Math 数学字体中的部分符号。这些字体在 TeX Live 或 MikTeX 中已经提供,无需自行下载安装。 \clearpage \LevelOneTitle{选项} \lebhart{} 文档类有下面几个选项: \begin{itemize} \item 语言选项 \texttt{EN} / \texttt{english} / \texttt{English}、\texttt{FR} / \texttt{french} / \texttt{French},等等 \begin{itemize} \item 具体选项名称可参见下一节的 \meta{language name}。第一个指定的语言将作为默认语言。 \item 语言选项不是必需的,其主要用途是提高编译速度。不添加语言选项时效果是一样的,只是会更慢一些。 \end{itemize} \item \texttt{draft} 或 \texttt{fast} \begin{itemize} \item 你可以使用选项 \verb|fast| 来启用快速但略微粗糙的样式,主要区别是: \begin{itemize} \item 使用较为简单的数学字体设置; \item 不启用超链接; \item 启用 \ProjLib{} 工具箱的快速模式。 \end{itemize} \end{itemize} \begin{tip} 在文章的撰写阶段,建议使用 \verb|fast| 选项以加快编译速度,改善写作时的流畅度。使用 \verb|fast| 模式时会有“DRAFT”字样的水印,以提示目前处于草稿阶段。 \end{tip} \item \texttt{a4paper} 或 \texttt{b5paper} \begin{itemize} \item 可选的纸张大小。默认的纸张大小为 8.5in $\times$ 11in。 \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{allowbf} \begin{itemize} \item 允许加粗。启用这一选项时,题目、各级标题、定理类环境名称会被加粗。 \end{itemize} \item \texttt{runin} \begin{itemize} \item \lstinline|\subsubsection| 采用 ``runin'' 风格。 \end{itemize} \item \texttt{puretext} 或 \texttt{nothms} \begin{itemize} \item 纯文本模式,不加载定理类环境。 \end{itemize} \clearpage \item \texttt{nothmnum}、\texttt{thmnum} 或 \texttt{thmnum=}\meta{counter} \begin{itemize} \item 定理类环境均不编号 / 按照 1、2、3 顺序编号 / 在 \meta{counter} 内编号。其中 \meta{counter} 应该是自带的计数器 (如 \texttt{subsection}) 或在导言部分自定义的计数器。在没有使用任何选项的情况下将按照 \texttt{chapter} (书) 或 \texttt{section} (文章) 编号。 \end{itemize} \item \texttt{regionalref}、\texttt{originalref} \begin{itemize} \item 在智能引用时,定理类环境的名称是否随当前语言而变化。默认为 \texttt{regionalref},即引用时采用当前语言对应的名称;例如,在中文语境中引用定理类环境时,无论原环境处在什么语境中,都将使用名称“定理、定义……”。若启用 \texttt{originalref},则引用时会始终采用定理类环境所处语境下的名称;例如,在英文语境中书写的定理,即使稍后在中文语境下引用时,仍将显示为 Theorem。 \item 在 \texttt{fast} 模式下,\texttt{originalref} 将不起作用。 \end{itemize} \end{itemize} \clearpage \LevelOneTitle{具体说明} \LevelTwoTitle{语言设置} \lebhart{} 提供了多语言支持,包括英语、法语、德语、意大利语、葡萄牙语、巴西葡萄牙语、西班牙语、简体中文、繁体中文、日文、俄文。可以通过下列命令来选定语言: \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{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} 另外,还可以通过下面的方式来填加相应语言的设置: \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}}| 来修正其他语言的颜色)。 \LevelTwoTitle{定理类环境及其引用} 定义、定理等环境已经被预定义,可以直接使用。 具体来说,预设的定理类环境包括: \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|*| 的无编号版本。 在引用定理类环境时,建议使用智能引用 \lstinline|\cref{|\meta{label}\lstinline|}|。这样就不必每次都写上相应环境的名称了。 \medskip \begin{tip}[例子] \begin{code} \begin{definition}[奇异物品] \label{def: strange} ... \end{code} 将会生成 \begin{definition}[奇异物品]\label{def: strange} 这是奇异物品的定义。定理类环境的前后有一行左右的间距。在定义结束的时候会有一个符号来标记。 \end{definition} \lstinline|\cref{def: strange}| 会显示为:\cref{def: strange}。 \medskip 使用 \lstinline|\UseLanguage{English}| 后,定理会显示为: \UseLanguage{English} \begin{theorem}[Useless]\label{thm} A theorem in English. \end{theorem} 默认情况下,引用时,定理类环境的名称总是与当前语言相匹配,例如,上面的定义在现在的英文模式下将显示为英文:\cref{def: strange,thm}。如果在引用时想让定理的名称总是与原定理所在区域的语言匹配,即总是显示原始名称,可以在全局选项中加入 \texttt{originalref}。 \end{tip} \UseLanguage{Chinese} \bigskip 下面是定理类环境的几种主要样式: \begin{theorem} Theorem style: theorem, proposition, lemma, corollary, ... \end{theorem} \begin{proof} Proof style \end{proof} \begin{remark} Remark style \end{remark} \begin{conjecture} Conjecture style \end{conjecture} \begin{example*} Example style: example, fact, ... \end{example*} \begin{problem} Problem style: problem, question, ... \end{problem} \medskip 为了美观,相邻的定义环境会自动连在一起: \begin{definition} First definition. \end{definition} \begin{definition} Second definition. \end{definition} \LevelTwoTitle{定义新的定理型环境} 若需要定义新的定理类环境,首先要定义这个环境在所用语言下的名称: \begin{itemize} \item \lstinline|\NameTheorem[|\meta{language name}\lstinline|]{|\meta{name of environment}\lstinline|}{|\meta{name string}\lstinline|}| \end{itemize} 其中,\meta{language name} 可参阅关于语言设置的小节。当不指定 \meta{language name}时,则会将该名称设置为所有支持语言下的名称。另外,带星号与不带星号的同名环境共用一个名称,因此 \lstinline|\NameTheorem{envname*}{...}| 与 \lstinline|\NameTheorem{envname}{...}| 效果相同。 然后用下面五种方式之一定义这一环境: \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} \NameTheorem[CN]{proofidea}{思路} \CreateTheorem*{proofidea*} \CreateTheorem{proofidea} \bigskip 下面提供一个例子。这三行代码: \begin{code} \NameTheorem[CN]{proofidea}{思路} \CreateTheorem*{proofidea*} \CreateTheorem{proofidea} \end{code} 可以分别定义不编号的环境 \lstinline|proofidea*| 和编号的环境 \lstinline|proofidea| (在 subsection 内编号),它们支持在简体中文语境中使用,效果如下所示: \vspace{-.3\baselineskip} \begin{proofidea*} \lstinline|proofidea*| 环境。 \end{proofidea*} \vspace{-.5\baselineskip} \begin{proofidea} \lstinline|proofidea| 环境。 \end{proofidea} \LevelTwoTitle{未完成标记} 你可以通过 \lstinline|\dnf| 来标记尚未完成的部分。例如: \begin{itemize} \item \lstinline|\dnf| 或 \lstinline|\dnf<...>|。效果为:\dnf~或 \dnf<...>。\\其提示文字与当前语言相对应,例如,在法语模式下将会显示为 \UseOtherLanguage{French}{\dnf}。 \end{itemize} 类似的,还有 \lstinline|\needgraph| : \begin{itemize} \item \lstinline|\needgraph| 或 \lstinline|\needgraph<...>|。效果为:\needgraph~或 \needgraph<...>其提示文字与当前语言相对应,例如,在法语模式下将会显示为 \UseOtherLanguage{French}{\needgraph} \end{itemize} \LevelTwoTitle{文章标题、摘要与关键词} \lebhart{} 同时具有标准文档类与\AmS{} 文档类的一些特性。 因此,文章的标题部分既可以按照标准文档类 \textsf{article} 的写法来写: \begin{code} \title{(*\meta{title}*)} \author{(*\meta{author}*)\thanks{(*\meta{text}*)}} \date{(*\meta{date}*)} \maketitle \begin{abstract} (*\meta{abstract}*) \end{abstract} \begin{keyword} (*\meta{keywords}*) \end{keyword} \end{code} 也可以按照 \AmS{} 文档类的方式来写: \begin{code} \title{(*\meta{title}*)} \author{(*\meta{author}*)} \thanks{(*\meta{text}*)} \address{(*\meta{address}*)} \email{(*\meta{email}*)} \date{(*\meta{date}*)} \keywords{(*\meta{keywords}*)} \subjclass{(*\meta{subjclass}*)} \begin{abstract} (*\meta{abstract}*) \end{abstract} \maketitle \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} 其中 \lstinline|\address|、\lstinline|\curraddr|、\lstinline|\email| 的相互顺序是不重要的。 \clearpage \LevelOneTitle{目前存在的问题} \begin{itemize}[itemsep=.6em] \item 对于字体的设置仍然不够完善。 \item 目录的设计还不够美观。 \item 由于很多核心功能建立在 \ProjLib{} 工具箱的基础上,因此 \colorist{} (进而 \colorart{}、\lebhart{} 与 \colorbook{}、\beaulivre{}) 自然继承了其所有问题。详情可以参阅 \ProjLib{} 用户文档的“目前存在的问题”这一小节。 \item 错误处理功能不完善,在出现一些问题时没有相应的错误提示。 \item 代码中仍有许多可优化之处。 \end{itemize} \end{document} \endinput %% %% End of file `lebhart/lebhart-doc-cn.tex'.