在LaTeX中,documentclass
是指定文档类别的命令,常用的文档类别有article
、report
、book
等。如果这些标准文档类别不能满足你的特定需求,你可以通过创建一个自定义文档类来解决这个问题。以下是创建自定义类的基本步骤:
1. 创建.cls文件
- 创建一个以
.cls
为扩展名的文件,例如myclass.cls
。 - 在文件的开始,通常需要指定这个类是基于哪个现有的类。例如,如果你想基于
article
类创建自定义类,文件的开始可以是这样的:\ProvidesClass{myclass}[2024/01/04 My Custom Class v1.0] \LoadClass{article}
2. 创建文档类别
在此文件中,你可以定义新命令、重定义现有命令、更改排版设置等。
一个功能比较完整的myclass.cls文件示例:https://github.com/PolarisRisingWar/learn-latex/blob/main/my_cls/myclass.cls
指定LaTeX版本\NeedsTeXFormat
\NeedsTeXFormat{LaTeX2e}
是 LaTeX 类文件(.cls
文件)中的一个命令,用于指定所需的 LaTeX 格式版本。在这个例子中,它表示该类文件需要 LaTeX2e 格式。
详细解释:
LaTeX2e
:LaTeX2e
是 LaTeX 的一个主要版本,于 1994 年发布,是 LaTeX 的标准版本。大多数现代 LaTeX 文档和包都基于 LaTeX2e。- 指定
LaTeX2e
确保使用这个类文件的用户具有兼容的 LaTeX 格式版本。它还允许类文件使用LaTeX2e
特有的功能和命令。
- 使用
\NeedsTeXFormat
的原因:- 通过在类文件开头使用
\NeedsTeXFormat{LaTeX2e}
,类文件的作者可以确保该类文件不会在较旧或不兼容的 LaTeX 版本上使用。 - 如果用户的 LaTeX 版本不符合要求,会产生错误信息,提示用户更新 LaTeX 系统。
- 通过在类文件开头使用
通过这种方式,LaTeX 类文件可以确保在兼容的环境中运行,并且利用最新的 LaTeX2e 功能和改进。
提供类信息\ProvidesClass
\ProvidesClass{myclass}[2024/05/17 v1.0 My Custom LaTeX Class]
\ProvidesClass
命令定义了类的名称(myclass
)、发布日期(2024/05/17)和版本信息(v1.0),并添加了一段描述(My Custom LaTeX Class)。
加载基础类\LoadClass
\LoadClass{article}
\LoadClass
命令用于加载一个现有的标准文档类,这里是 article
类。自定义类将基于这个基础类进行扩展。
定义类选项和变量
\newif\if@showdate
\@showdatetrue
\DeclareOption{nodate}{\@showdatefalse}
% Redefine \maketitle to conditionally show date
\renewcommand{\maketitle}{
\begin{center}
\LARGE \@title \\
\large \@author \\
\if@showdate
\@date
\fi
\end{center}
}
\newif\if@showdate
:定义一个新的条件命令\if@showdate
。\@showdatetrue
:设置默认情况下\if@showdate
为真。\DeclareOption{nodate}{\@showdatefalse}
:声明一个选项nodate
,如果使用这个选项,则将\if@showdate
设置为假。
\renewcommand{\maketitle}
:重新定义了 \maketitle 命令。\if@showdate
:条件判断是否显示日期。如果 \if@showdate 为真,则显示 @date;否则不显示。
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{ctexbook}}
将未在文档类中显式声明的选项传递给指定的基础类或包。在这个例子中,未声明的选项将被传递给 ctexbook
类。使用ctexbook类的openany选项(可以让章首在任意一页开始,而不是只能在奇数页开始)的MRE:https://github.com/PolarisRisingWar/learn-latex/blob/main/my_cls/conveyoptions.cls
处理选项
\ProcessOptions\relax
\ProcessOptions\relax
命令用于处理用户在 \documentclass
命令中指定的选项。确保所有选项都被正确解析和应用。
加载必要的宏包
\RequirePackage{ctex}
\RequirePackage
命令用于加载指定的宏包,这里是 ctex
包,用于支持中文字符的处理。
(需要注意的是有些宏包和类会冲突。这个我就不在这里详写了,总之比如如果用了ctexbook类就不能用ctex宏包了)
3. 使用自定义文档类
- 将
.cls
文件放在LaTeX可以找到的地方。对于个别文档,最简单的方式是将它放在与你的.tex
文件相同的目录下。 - 在你的
.tex
文件中,使用\documentclass{myclass}
来代替标准文档类。
4. 编译和测试
- 编译你的
.tex
文件,检查是否所有自定义的命令和格式都按预期工作。
注意事项
- 创建自定义类是一个高级任务,需要对LaTeX有较深的了解。
- 在创建自定义类时,确保不要与现有的包和类命名冲突。
- 调试自定义类可能比较困难,因此务必细心检查代码。
- 在网络上有许多关于如何创建自定义LaTeX类的教程和例子,它们可以作为很好的学习资源。