\documentclass[English,Chinese,French,puretext]{einfart} \CreateTheorem{definition} \CreateTheorem{theorem}[definition] \linenumbers % Enable line numbers %%================================ %% 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=% {linenumbers,nolinenumbers,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}\LocallyStopLineNumbers% \setkeys{lst}{columns=fullflexible,keepspaces=true}% } {\ResumeLineNumbers} \lstnewenvironment{code*}% {\setstretch{1.07}\LocallyStopLineNumbers% \setkeys{lst}{numbers=left,columns=fullflexible,keepspaces=true}% } {\ResumeLineNumbers} %%================================ %% tip %%================================ \usepackage[many]{tcolorbox} \newenvironment{tip}[1][提示]{% \LocallyStopLineNumbers% \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}\ResumeLineNumbers} %%================================ %% Names %%================================ \providecommand{\minimalist}{\textsf{minimalist}} \providecommand{\minimart}{\textsf{minimart}} \providecommand{\minimbook}{\textsf{minimbook}} \providecommand{\einfart}{\textsf{einfart}} \providecommand{\simplivre}{\textsf{simplivre}} %%================================ %% Titles %%================================ \let\LevelOneTitle\section \let\LevelTwoTitle\subsection \let\LevelThreeTitle\subsubsection %%================================ %% Main text %%================================ \begin{document} \title{\einfart{},以极简主义风格排版你的文章} \author{许锦文} \thanks{对应版本. \texttt{\einfart{} 2021/07/27}} \email{\href{mailto:ProjLib@outlook.com}{ProjLib@outlook.com}} \date{2021年7月,北京} \maketitle \begin{abstract} \einfart{} 是 \minimalist{} 文档类系列的成员之一,其名称取自于德文的 einfach (``简约''),并取了 artikel (``文章'') 的前三个字母组合而成。整个 \minimalist{} 系列包含用于排版文章的 \minimart{}、\einfart{} 以及用于排版书的 \minimbook{}、\simplivre{}。我设计这一系列的初衷是为了撰写草稿与笔记,使之看上去简朴而不简陋。 \einfart{} 支持英语、法语、德语、意大利语、葡萄牙语、巴西葡萄牙语、西班牙语、简体中文、繁体中文、日文、俄文,并且同一篇文档中这些语言可以很好地协调。由于采用了自定义字体,需要用 \hologo{XeLaTeX} 或 \hologo{LuaLaTeX} 引擎进行编译。 这篇说明文档即是用 \einfart{} 排版的,你可以把它看作一份简短的说明与演示。 \end{abstract} \setcounter{tocdepth}{2} {\setstretch{1.07}\tableofcontents} \medskip \LevelOneTitle*{开始之前} 为了使用这篇文档中提到的文档类,你需要: \begin{itemize} \item 安装一个尽可能新版本的 TeX Live 或 MikTeX 套装,并确保 \texttt{minimalist} 和 \texttt{projlib} 被正确安装在你的 \TeX 封装中。 \item 熟悉 \LaTeX{} 的基本使用方式,并且知道如何用 \hologo{pdfLaTeX}、\hologo{XeLaTeX} 或 \hologo{LuaLaTeX} 编译你的文档。 \end{itemize} \LevelOneTitle{使用示例} \LevelTwoTitle{如何加载} 只需要在第一行写: \begin{code} \documentclass{einfart} \end{code} 即可使用 \einfart{} 文档类。请注意,要使用 \hologo{XeLaTeX} 或 \hologo{LuaLaTeX} 引擎才能编译。 \LevelTwoTitle{一篇完整的文档示例} 首先来看一段完整的示例。 \begin{code*} \documentclass{einfart} \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*} 如果你觉得这个例子有些复杂,不要担心。现在我们来一点点地观察这个例子。 \clearpage \LevelThreeTitle{初始化部分} \medskip \begin{code} \documentclass{einfart} \usepackage{ProjLib} \end{code} 初始化部分很简单:第一行加载文档类 \einfart{},第二行加载 \ProjLib{} 工具箱,以便使用一些附加功能。 \LevelThreeTitle{设定语言} \medskip \begin{code} \UseLanguage{French} \end{code} 这一行表明文档中将使用法语(如果你的文章中只出现英语,那么可以不需要设定语言)。你也可以在文章中间用同样的方式再次切换语言。支持的语言包括简体中文、繁体中文、日文、英语、法语、德语、西班牙语、葡萄牙语、巴西葡萄牙语、俄语。 对于这一命令的详细说明以及更多相关命令,可以参考后面关于多语言支持的小节。 \LevelThreeTitle{标题,作者信息,摘要与关键词} \medskip \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{未完成标记} \medskip \begin{code} \dnf<(*\meta{some hint}*)> \end{code} 当你有一些地方尚未完成的时候,可以用这条指令标记出来,它在草稿阶段格外有用。 \LevelThreeTitle{定理类环境} \medskip \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]{einfart} \end{code} \end{tip} \LevelOneTitle{关于默认字体} \einfart{} 默认使用 Palatino Linotype 作为英文字体,方正悠宋、悠黑GBK作为中文字体,并部分使用了 Neo Euler 作为数学字体。其中,Neo Euler可以在 \url{https://github.com/khaledhosny/euler-otf} 下载。其他字体不是免费字体,需要自行购买使用。可以在方正字库网站查询详细资料:\url{https://www.foundertype.com}。 在没有安装相应的字体时,将采用TeX Live中自带的字体来代替,效果可能会有所折扣。 \LevelOneTitle{选项} \einfart{} 文档类有下面几个选项: \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 可选的纸张大小。默认的纸张大小为 7in $\times$ 10in。 \end{itemize} \item \texttt{palatino}、\texttt{times}、\texttt{garamond}、\texttt{biolinum} ~$|$~ \texttt{useosf} \begin{itemize} \item 字体选项。顾名思义,会加载相应名称的字体。 \item \texttt{useosf} 选项用来启用“旧式”数字。 \end{itemize} \clearpage \item \texttt{allowbf} \begin{itemize} \item 允许加粗。启用这一选项时,题目、各级标题、定理类环境名称会被加粗。 \end{itemize} \item \texttt{classical} \begin{itemize} \item 经典模式。启用这一选项时,样式会变得更加中规中矩:段落呈首行缩进样式、各类下划线减少、标题样式改变、定理类环境的样式也会更贴近常见的设置。 \end{itemize} \begin{tip} 如果你喜欢更加传统的样式,\texttt{allowbf} + \texttt{classical} 是一个不错的搭配。 \end{tip} \item \texttt{useindent} \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} \item \texttt{nothmnum} \begin{itemize} \item 定理类环境不编号。 \end{itemize} \end{itemize} \LevelOneTitle{具体说明} \LevelTwoTitle{语言设置} \einfart{} 提供了多语言支持,包括英语、法语、德语、意大利语、葡萄牙语、巴西葡萄牙语、西班牙语、简体中文、繁体中文、日文、俄文。可以通过下列命令来选定语言: \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} 和 \cref{thm}。如果在引用时想让定理的名称与当前语境相匹配,可以在全局选项中加入 \texttt{regionalref}。 \end{tip} \UseLanguage{Chinese} \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} \clearpage \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{文章标题、摘要与关键词} \einfart{} 同时具有标准文档类与\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| 的相互顺序是不重要的。 \LevelTwoTitle{其他} \LevelThreeTitle{关于行号} 行号可以随时开启和关闭。\lstinline|\linenumbers| 用来开启行号,\lstinline|\nolinenumbers| 用来关闭行号。标题、目录、索引等位置为了美观,不进行编号。 \LevelThreeTitle{关于标题中的脚注} 在 \lstinline|\section| 或 \lstinline|\subsection| 中,如果想使用脚注,只能: \begin{itemize} \item 先写 \lstinline|\mbox{\protect\footnotemark}|, \item 再在后面用 \lstinline|\footnotetext{...}|。 \end{itemize} 这是标题使用下划线装饰之后带来的一个缺点。 \LevelThreeTitle{关于QED符号} 由于定理类环境中的字体和正文字体是一样的,为了方便看出定理类环境在哪里结束,在其结尾处放置了一个空心的QED符号。然而,如果你的定理是由公式或者列表结尾的,这个符号就无法自动地放在正确的位置。这时,你需要手动在公式或列表最后一个条目的后面加上 \lstinline|\qedhere|,以让QED符号显示到这一行的最后。 \LevelOneTitle{目前存在的问题} \begin{itemize}[itemsep=.6em] \item 对于字体的设置仍然不够完善。 \item 由于很多核心功能建立在 \ProjLib{} 工具箱的基础上,因此 \einfart{} 自然继承了其所有问题。详情可以参阅 \ProjLib{} 用户文档的“目前存在的问题”这一小节。 \item 错误处理功能不完善,在出现一些问题时没有相应的错误提示。 \item 代码中仍有许多可优化之处。 \end{itemize} \end{document} \endinput %% %% End of file `einfart/einfart-doc-cn.tex'.