> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/zh-cn/geng-duo-zhu-ti/25-how-to-write-a-latex-class-file-and-design-your-own-cv-part-1.md).

# 如何编写 LaTeX 类文件并设计你自己的简历（第1部分）

第 1 部分 | [第2部分](/latex/zh-cn/geng-duo-zhu-ti/26-how-to-write-a-latex-class-file-and-design-your-own-cv-part-2.md)

**作者：James Allen（2011年3月）**

每个人都想要一份看起来专业的简历，而能帮你做到这一点的 LaTeX 模板并不缺乏。不过，如果你像我一样，你会想拥有自己的简历，并把它真正做成你自己的。这意味着你需要能够自己定制外观和感觉，而这在 LaTeX 中往往非常困难。在这一系列博客文章中，我希望带你创建自己的自定义类文件，并向你展示，如何轻松地把简历排版成你想要的样子。我们将重点讨论简历样式，但这些方法对任何类型的文档都是完全相同的。

### 什么是类文件？

当你在 `\documentclass{article}` 写入 LaTeX 文件时，你就是在包含类文件 `article.cls`。它定义了诸如 `\section` 和 `\title` 之类的所有命令，这些命令用于组织你的文档。它还会配置这些命令如何影响页面的格式和布局。

### 设置你自己的类文件

自定义文档格式最好的方法是把所有这些信息保存在一个个人类文件中。这样可以让文档结构与格式清晰分离，并便于重复使用。设置起来很简单，因此创建一个名为 cv.tex 的文档，并写入以下内容：

```latex
\documentclass{my_cv}
\begin{document}
\section{教育}
\subsection{虚空大学}
\section{工作}
\subsection{ABC 有限公司}
\end{document}
```

这正在尝试加载你的自定义类文件 `my_cv.cls`，但它还不存在。创建 `my_cv.cls` ，并将其放在与 `cv.tex` 相同的目录中，然后在其中写入以下一行：

```latex
\LoadClass{article}
```

如果现在编译文档，你应该会看到标题采用默认的 article 风格。

那么这里发生了什么？类文件需要包含大量格式信息和内部设置，才能让 LaTeX 正常工作，但我们不想手动输入所有这些内容。相反，我们可以把新的类文件建立在 `article.cls`之上。我们使用 `\LoadClass` 包含 `article.cls` 并加载其中定义的所有命令和样式。注意我们没有使用常见的 `\documentclass` 命令来包含 `article.cls` 因为 `\documentclass` 它应当只在你的 LaTeX 文档最开始时调用一次。

### 向 LaTeX 说明你的类

所有类文件都应以类似下面的两行开头，你应将它们添加到 `my_cv.cls` 的顶部：

```latex
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{my_cv}[2011/03/26 我的自定义简历类]
```

该 `\NeedsTeXFormat` 命令告诉编译器该宏包适用于哪个版本的 LaTeX。当前版本的 LaTeX 是 LaTeX2e，几乎所有发行版都使用它。

该 `\ProvidesClass` 命令会向编译器提供一些关于你的宏包的信息。第一个参数应与类文件的文件名一致，并告诉 LaTeX 你的宏包叫什么。第二个参数是可选的，它提供类的描述信息，会显示在日志和其他地方。这个描述必须以与上面完全相同格式的日期开头，并且应是该宏包最后修改的日期。在包含该类时，这可用于检查你是否拥有足够新的版本。例如，如果你通过 `\documentclass{my_cv}[2012/01/01]` 来包含它，而且该日期比类描述中的日期更新，那么就会显示警告，提示该类已过时。

### 修改章节标题

标准的 article 章节标题并不太适合简历，所以我们希望用更简洁的样式替换它们。为此，我们可以重新定义 `\section` 命令以输出自定义标题。

幸运的是，已经有一个很棒的宏包叫做 `titlesec` ，它提供了一种轻松自定义标题样式的方法。在你的类文件中这样加入：

```latex
\RequirePackage{titlesec}
```

注意我们应当使用 `\RequirePackage` 而不是常见的 `\usepackage` 命令，因为我们现在处于类文件中。 `\RequirePackage` 该命令确保每个宏包只会被加载一次，即使在不同的样式文件和类文件中多次调用也是如此。

该 `titlesec` 宏包提供了命令 `\titleformat` ，它让我们可以自定义章节标题。在 `my_cv.cls` 的末尾添加以下内容，以自定义标题的格式：

```latex
\titleformat{\section}         % 自定义 \section 命令
  {\Large\scshape\raggedright} % 使 \section 标题更大（\Large）、
                               % 使用小型大写字母（\scshape）并左对齐（\raggedright）
  {}{0em}                      % 可用于给所有章节添加前缀，如“Section ...”
  {}                           % 可用于在标题前插入代码
  [\titlerule]                 % 在标题后插入一条横线
```

如果现在编译 `cv.tex` ，我们会看到一些更适合简历的主标题：

![Screenshot1.png](/files/a39af4b051cad2a070204d4ee6d970f1a79df710)

我们也可以自定义 \subsection 标题：

```latex
\titleformat{\subsection}
  {\large\scshape\raggedright}
  {}{0em}
  {}
```

现在子章节也采用相同的样式：

![Screenshot2.png](/files/d82023f5735704c551cf1c6c12fa8e757332f730)

你应该试试一些可用的格式选项，看看自己喜欢哪种：

* `\bfseries`, `\itshape`：将标题设为粗体或斜体；
* `\scshape`：小型大写字母；
* `\small`, `\normalsize`, `\large`, `\Large`, `\LARGE`, `\huge`, `\Huge`：设置字号；
* `\rmfamily`, `\sffamily`, `\ttfamily`：分别将字体类型设置为衬线体、无衬线体或打字机体。

### 为章节标题添加日期

我们可以定义一些新命令，让章节标题中包含日期。在你的类文件中加入以下内容：

```latex
\newcommand{\datedsection}[2]{%
  \section[#1]{#1 \hfill #2}%
}
\newcommand{\datedsubsection}[2]{%
  \subsection[#1]{#1 \hfill #2}%
}
```

这定义了两个新命令 `\datedsection` 和 `\datedsubsection` ，它们接受两个参数：与之前相同的章节名称，以及一个将在页面右侧排版的日期。 `\hfill` 命令告诉 LaTeX 尽可能填满空间，因此会把第二个参数（`#2`）推到页面右侧。修改 `cv.tex` 以使用这些命令：

```latex
\documentclass{my_cv}

\begin{document}

\section{教育}
\datedsubsection{虚空大学}{2004--2008}
我于 2004 年至 2008 年就读于虚空大学。

\section{工作}
\datedsubsection{ABC 有限公司}{2008--至今}
我自 2008 年起一直在 ABC 有限公司工作。

\end{document} ​
```

我们的简历现在包含日期了：

![Screenshot3.png](/files/bd14abb7d5d1fa79332638f3d779f148077fa924)

### 结论

这就是本指南第一部分的全部内容了，不过我希望我已经介绍得足够多，能让你自己开始制作有用的类文件。只用不多的几个命令，我们就已经做出了一个看起来相当不错的简历模板，而我们还只是触及了还能自定义内容的表面。在本指南接下来的几部分中，我会讲解如何向类传递选项以进行配置、如何创建一个漂亮的标题，以及如何设置一些通用的布局选项。

感谢阅读！

请注意，我自己在创建类文件方面还相对新手，所以如果有人能指出我这里提到内容的更好做法，请告诉我。

第 1 部分 | [第2部分](/latex/zh-cn/geng-duo-zhu-ti/26-how-to-write-a-latex-class-file-and-design-your-own-cv-part-2.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/zh-cn/geng-duo-zhu-ti/25-how-to-write-a-latex-class-file-and-design-your-own-cv-part-1.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
