%! TEX program = xelatex \documentclass[puretext]{einfart} \CreateTheorem{definition} \CreateTheorem{theorem} \linenumbers % 开启行号 %%================================ %% 引入工具集 %%================================ \usepackage{PJLtoolkit} \usepackage{longtable} % breakable tables \usepackage{hologo} % more TeX logo \UseLanguage{Chinese} %%================================ %% 排版代码 %%================================ \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,subsection,href, color,NameTheorem,CreateTheorem,proofideanameCN,cref,dnf,needgraph,UseLanguage,UseOtherLanguage,AddLanguageSetting,maketitle,address,curraddr,email,keywords,subjclass,thanks,dedicatory,PJLdate,ProjLib } } \lstnewenvironment{code}% {\LocallyStopLineNumbers% \setkeys{lst}{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={\sffamily #1}]% }{\end{tcolorbox}\ResumeLineNumbers} %%================================ %% 名称 %%================================ \providecommand{\minimalist}{\textsf{minimalist}} \providecommand{\minimart}{\textsf{minimart}} \providecommand{\minimbook}{\textsf{minimbook}} \providecommand{\einfart}{\textsf{einfart}} \providecommand{\simplivre}{\textsf{simplivre}} %%================================ %% 正文 %%================================ \begin{document} \title{\einfart{},以极简主义风格排版你的文章} \author{许锦文} \thanks{对应版本. \texttt{\einfart{} 2021/06/07}} \date{2021年6月,北京} \maketitle \begin{abstract} \einfart{} 是 \minimalist{} 文档类系列的成员之一,其名称取自于德文的 einfach (``简约''),并取了 artikel (``文章'') 的前三个字母组合而成。整个 \minimalist{} 系列包含用于排版文章的 \minimart{}、\einfart{} 以及用于排版书的 \minimbook{}、\simplivre{}。我设计这一系列的初衷是为了撰写草稿与笔记,使之看上去简朴而不简陋。 \einfart{} 支持英语、法语、德语、意大利语、葡萄牙语、巴西葡萄牙语、西班牙语、简体中文、繁体中文、日文、俄文,并且同一篇文档中这些语言可以很好地协调。由于采用了自定义字体,需要用 \hologo{XeLaTeX} 或 \hologo{LuaLaTeX} 引擎进行编译。 这篇说明文档即是用 \einfart{} 排版的,你可以把它看作一份简短的说明与演示。 \end{abstract} \tableofcontents \bigskip \begin{tip} 多语言支持、定理类环境、未完成标记等功能是由 \ProjLib{} 工具箱提供的,这里只给出了将其与本文档类搭配使用的要点。如需获取更详细的信息,可以参阅 \ProjLib{} 的说明文档。 \end{tip} \clearpage \section{初始化} \subsection{如何载入} 只需要在第一行写: \begin{code} \documentclass{einfart} \end{code} 即可使用 \einfart{} 文档类。请注意,要使用 \hologo{XeLaTeX} 或 \hologo{LuaLaTeX} 引擎才能编译。 \subsection{选项} \einfart{} 文档类有下面几个选项: \begin{itemize} \item \texttt{draft} 或 \texttt{fast} \begin{itemize} \item 你可以使用选项 \verb|fast| 来启用快速但略微粗糙的样式,主要区别是: \begin{itemize} \item 使用较为简单的数学字体设置; \item 不启用超链接; \item 启用 \ProjLib{} 工具箱的快速模式。 \end{itemize} \end{itemize} \item \texttt{a4paper} 或 \texttt{b5paper} \begin{itemize} \item 可选的纸张大小。默认的纸张大小为 7in $\times$ 10in。 \end{itemize} \item \texttt{palatino}、\texttt{times}、\texttt{garamond}、\texttt{biolinum} \begin{itemize} \item 字体选项。顾名思义,会加载相应名称的字体。 \end{itemize} \item \texttt{allowbf} \begin{itemize} \item 允许加粗。启用这一选项时,题目、各级标题、定理类环境名称会被加粗。 \end{itemize} \item \texttt{classical} \begin{itemize} \item 经典模式。启用这一选项时,样式会变得更加中规中矩:段落呈首行缩进样式、各类下划线减少、标题样式改变、定理类环境的样式也会更贴近常见的设置。 \end{itemize} \end{itemize} \begin{tip} \begin{itemize} \item 在文章的撰写阶段,建议使用 \verb|fast| 选项以加快编译速度,改善写作时的流畅程度。在最后,可以把 \verb|fast| 标记去除,从而得到正式的版本。使用 \verb|fast| 模式时会有“DRAFT”字样的水印,以提示目前处于草稿阶段。 \item 如果你喜欢更加传统的样式,\texttt{allowbf} + \texttt{classical} 是一个不错的搭配。 \end{itemize} \end{tip} \section{关于文档类中使用的字体} \einfart{} 默认使用 Palatino Linotype 作为英文字体,方正悠宋、悠黑GBK作为中文字体,并部分使用了 Neo Euler 作为数学字体。其中,Neo Euler可以在 \url{https://github.com/khaledhosny/euler-otf} 下载。其他字体不是免费字体,需要自行购买使用。可以在方正字库网站查询详细资料:\url{https://www.foundertype.com}。 % \begin{itemize} % \item English main font. \textsf{English sans serif font}. % \item 中文主要字体,\textsf{中文无衬线字体} % \item 数学示例: \( \alpha, \beta, \gamma, \delta, 1,2,3,4, a,b,c,d \), \[\mathrm{li}(x)\coloneqq \int_2^{\infty} \frac{1}{\log t}\,\mathrm{d}t \] % \end{itemize} 在没有安装相应的字体时,将采用TeX Live中自带的字体来代替,效果可能会有所折扣。 \section{使用说明} 接下来介绍的许多功能是由 \ProjLib{} 工具箱提供的。这里只介绍了基本使用方法,更多细节可以直接参阅其用户文档。 \subsection{语言设置} \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}}| 来修正其他语言的颜色)。 \subsection{定理类环境及其引用} 定义、定理等环境已经被预定义,可以直接使用。 具体来说,预设的定理类环境包括: \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|}|。这样就不必每次都写上相应环境的名称了。 \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}。 使用 \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} \subsection{定义新的定理型环境} 若需要定义新的定理类环境,首先要定义这个环境在所用语言下的名称: % \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} 可参阅关于语言设置的小节。当不指定 \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} % \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} \subsection{未完成标记} 你可以通过 \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} \subsection{关于文章标题、摘要与关键词} % 由于引入了 \ProjLib{} 工具箱的 \textsf{PJLamssim} 组件, \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| 的相互顺序是不重要的。 \subsection{关于行号} 行号可以随时开启和关闭。\lstinline|\linenumbers| 用来开启行号,\lstinline|\nolinenumbers| 用来关闭行号。标题、目录、索引等位置为了美观,不进行编号。 \subsection{关于标题中的脚注} 在 \lstinline|\section| 或 \lstinline|\subsection| 中,如果想使用脚注,只能: \begin{itemize} \item 先写 \lstinline|\mbox{\protect\footnotemark}|, \item 再在后面用 \lstinline|\footnotetext{...}|。 \end{itemize} 这是标题使用下划线装饰之后带来的一个缺点。 \section{目前存在的问题} \begin{itemize}[itemsep=.6em] \item 对于字体的设置仍然不够完善。 \item 由于很多核心功能建立在 \ProjLib{} 工具箱的基础上,因此 \einfart{} 自然继承了其所有问题。详情可以参阅 \ProjLib{} 用户文档的“目前存在的问题”这一小节。 \item 错误处理功能不完善,在出现一些问题时没有相应的错误提示。 \item 代码中仍有许多可优化之处。 \end{itemize} \UseLanguage{English} \clearpage \section{文档示例} \subsection{标准文档类写法} 如果想采用标准文档类中的写法,可以参考下面的例子: \begin{code} \documentclass{einfart} \usepackage{PJLtoolkit} % Load ProjLib toolkit \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} \begin{keyword} AAA, BBB, CCC, DDD, EEE \end{keyword} \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} 如果以后想切换到标准文档类,只需要将前两行换为: \begin{code} \documentclass{article} \usepackage[a4paper,margin=1in]{geometry} \usepackage[hidelinks]{hyperref} \usepackage[palatino]{PJLtoolkit} % Load ProjLib toolkit \end{code} \clearpage \subsection{\texorpdfstring{\AmS{}}{AMS} 文档类写法} 如果日后有意切换到期刊模版,想采用 \AmS{} 文档类中的写法,可以参考下面的例子: \begin{code} \documentclass{einfart} \usepackage{PJLtoolkit} % Load ProjLib toolkit \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} 这样,若想切换到 \AmS{} 文档类,只需要将前两行换为: \begin{code} \documentclass{amsart} \usepackage[a4paper,margin=1in]{geometry} \usepackage[hidelinks]{hyperref} \usepackage[palatino]{PJLtoolkit} % Load ProjLib toolkit \end{code} \end{document}