> 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/vi/chu-de-khac/25-how-to-write-a-latex-class-file-and-design-your-own-cv-part-1.md).

# Cách viết tệp lớp LaTeX và thiết kế CV của riêng bạn (Phần 1)

Phần 1 | [Phần 2](/latex/vi/chu-de-khac/26-how-to-write-a-latex-class-file-and-design-your-own-cv-part-2.md)

**Tác giả: James Allen (tháng 3 năm 2011)**

Ai cũng muốn một bản CV trông chuyên nghiệp và có rất nhiều mẫu LaTeX có thể giúp bạn có một bản như vậy. Tuy nhiên, nếu bạn giống tôi, bạn sẽ muốn tự làm chủ CV của mình và biến nó thành của riêng mình. Điều đó có nghĩa là bạn cần có thể tự tùy chỉnh giao diện và cảm nhận, điều này trong LaTeX có thể nổi tiếng là khó khăn. Trong loạt bài viết này, tôi hy vọng sẽ hướng dẫn bạn tạo tệp lớp tùy chỉnh của riêng mình và cho bạn thấy rằng việc định dạng CV đúng như ý muốn có thể rất dễ dàng. Chúng ta sẽ tập trung vào kiểu CV nhưng các phương pháp sẽ giống hệt cho bất kỳ loại tài liệu nào.

### Tệp lớp là gì?

Khi bạn viết `\documentclass{article}` trong tệp LaTeX của bạn, bạn đang đưa vào tệp lớp `article.cls`. Điều này định nghĩa tất cả các lệnh như `\section` và `\title` dùng để cấu trúc tài liệu của bạn. Nó cũng cấu hình cách những lệnh này ảnh hưởng đến định dạng và bố cục của trang.

### Thiết lập tệp lớp của riêng bạn

Cách gọn nhất để tùy chỉnh định dạng của một tài liệu là giữ tất cả thông tin đó trong một tệp lớp cá nhân. Điều này giúp cấu trúc tài liệu của bạn tách biệt rõ ràng với phần định dạng và cho phép tái sử dụng dễ dàng. Rất dễ thiết lập việc này, vì vậy hãy tạo một tài liệu có tên cv.tex với nội dung sau:

```latex
\documentclass{my_cv}
\begin{document}
\section{Học vấn}
\subsection{Đại học Không Nơi Nào}
\section{Công việc}
\subsection{ABC Limited.}
\end{document}
```

Đây là đang cố tải tệp lớp tùy chỉnh của bạn `my_cv.cls`, mà עדיין chưa tồn tại. Hãy tạo `my_cv.cls` trong cùng thư mục với `cv.tex` và viết dòng sau vào đó:

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

Nếu bây giờ bạn biên dịch tài liệu, bạn sẽ thấy các tiêu đề theo kiểu article mặc định.

Vậy điều gì đã xảy ra ở đây? Các tệp lớp cần chứa rất nhiều thông tin định dạng và thiết lập nội bộ để LaTeX hoạt động đúng, nhưng chúng ta không muốn phải nhập tất cả thủ công. Thay vào đó, ta có thể dựa tệp lớp mới của mình trên `article.cls`. Chúng ta dùng `\LoadClass` phải bao gồm `article.cls` và tải tất cả các lệnh cùng kiểu dáng được định nghĩa trong đó. Lưu ý rằng chúng ta không dùng `\documentclass` thông thường để bao gồm `article.cls` vì `\documentclass` chỉ nên được gọi một lần duy nhất ở rất đầu tài liệu LaTeX của bạn.

### Báo cho LaTeX biết về lớp của bạn

Tất cả các tệp lớp nên bắt đầu bằng hai dòng tương tự như sau, bạn nên thêm chúng vào đầu của `my_cv.cls` ngay bây giờ:

```latex
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{my_cv}[2011/03/26 Lớp CV tùy chỉnh của tôi]
```

Tính năng `\NeedsTeXFormat` các lệnh cho trình biên dịch biết gói này dành cho phiên bản LaTeX nào. Phiên bản LaTeX hiện tại là LaTeX2e và hầu hết mọi bản phân phối đều dùng phiên bản này.

Tính năng `\ProvidesClass` lệnh này cho trình biên dịch biết một số thông tin về gói của bạn. Đối số đầu tiên nên khớp với tên tệp của tệp lớp và cho LaTeX biết gói của bạn được gọi là gì. Đối số thứ hai là tùy chọn và cung cấp mô tả về lớp của bạn, mô tả này sẽ xuất hiện trong nhật ký và những nơi khác. Mô tả phải bắt đầu bằng một ngày theo đúng định dạng như trên và đó պետք là ngày gói được sửa đổi lần cuối. Điều này có thể được dùng khi bao gồm lớp để kiểm tra rằng bạn có phiên bản đủ mới của nó. Ví dụ, nếu bạn bao gồm nó thông qua `\documentclass{my_cv}[2012/01/01]` với một ngày mới hơn ngày trong mô tả lớp thì sẽ hiện cảnh báo cho biết lớp đã lỗi thời.

### Sửa đổi các tiêu đề phần

Các tiêu đề phần chuẩn của article không thực sự phù hợp với CV nên chúng ta muốn thay chúng bằng thứ gì đó gọn hơn. Để làm điều này, ta có thể định nghĩa lại `\section` lệnh để xuất ra một tiêu đề tùy chỉnh.

May mắn là đã có một gói tuyệt vời tên là `titlesec` cung cấp một cách dễ dàng để tùy chỉnh kiểu tiêu đề của chúng ta. Hãy thêm nó vào tệp lớp của bạn với:

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

Lưu ý rằng chúng ta nên dùng `\RequirePackage` thay vì `\usepackage` thông thường vì chúng ta đang ở trong một tệp lớp.  `\RequirePackage` lệnh này đảm bảo rằng mỗi gói chỉ được tải một lần, ngay cả khi được gọi nhiều lần từ các tệp kiểu và tệp lớp khác nhau.

Tính năng `titlesec` gói cung cấp lệnh `\titleformat` cho phép chúng ta tùy chỉnh các tiêu đề phần. Hãy thêm đoạn sau vào cuối `my_cv.cls` để tùy chỉnh định dạng của tiêu đề:

```latex
\titleformat{\section}         % Tùy chỉnh lệnh \section
  {\Large\scshape\raggedright} % Làm cho các tiêu đề \section lớn (\Large),
                               % chữ hoa nhỏ (\scshape) và canh trái (\raggedright)
  {}{0em}                      % Có thể dùng để thêm tiền tố cho tất cả các phần, như 'Phần ...'
  {}                           % Có thể dùng để chèn mã trước tiêu đề
  [\titlerule]                 % Chèn một đường ngang sau tiêu đề
```

Nếu chúng ta biên dịch `cv.tex` bây giờ, chúng ta sẽ thấy các tiêu đề chính phù hợp hơn với CV:

![Screenshot1.png](/files/2c97f3840ae39191e6221c290849a3ef44457837)

Ta cũng có thể tùy chỉnh các tiêu đề \subsection:

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

Các mục con giờ đây cũng theo cùng một kiểu:

![Screenshot2.png](/files/37db8d429c7dbc913cfbac2a75e2ab9f03dce4e5)

Bạn nên thử một số tùy chọn định dạng có sẵn để xem mình thích gì:

* `\bfseries`, `\itshape`: làm tiêu đề đậm hoặc nghiêng;
* `\scshape`: chữ hoa nhỏ;
* `\small`, `\normalsize`, `\large`, `\Large`, `\LARGE`, `\huge`, `\Huge`: đặt cỡ chữ;
* `\rmfamily`, `\sffamily`, `\ttfamily`: đặt kiểu chữ lần lượt là có chân, không chân hoặc kiểu máy chữ.

### Thêm ngày tháng vào tiêu đề phần

Ta có thể định nghĩa một số lệnh mới cho phép đưa ngày tháng vào các tiêu đề phần của mình. Hãy thêm đoạn sau vào tệp lớp của bạn:

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

Điều này định nghĩa hai lệnh mới `\datedsection` và `\datedsubsection` nhận hai đối số: tên phần như trước, và một ngày tháng sẽ được hiển thị ở phía bên phải của trang. The `\hfill` lệnh này yêu cầu LaTeX lấp đầy càng nhiều khoảng trống càng tốt và do đó đẩy đối số thứ hai (`#2`) sang bên phải của trang. Hãy sửa đổi `cv.tex` để dùng các lệnh này:

```latex
\documentclass{my_cv}

\begin{document}

\section{Học vấn}
\datedsubsection{Đại học Không Nơi Nào}{2004--2008}
Tôi học tại Đại học Không Nơi Nào từ năm 2004 đến 2008.

\section{Công việc}
\datedsubsection{ABC Limited.}{2008--Hiện tại}
Tôi đã làm việc tại ABC Limited từ năm 2008 đến nay.

\end{document} ​
```

CV của chúng ta giờ đã có ngày tháng:

![Screenshot3.png](/files/14b28addb7ee7223d9eb67786fe856179aa4db83)

### Kết luận

Đó là tất cả cho phần một của hướng dẫn này, nhưng hy vọng tôi đã cung cấp đủ để bạn có thể tự bắt tay vào làm các tệp lớp hữu ích. Chỉ với không nhiều lệnh mà chúng ta đã tạo ra thứ trông đã khá giống một mẫu CV, và chúng ta mới chỉ chạm đến bề mặt của những gì khác có thể tùy chỉnh. Ở các phần tiếp theo của hướng dẫn này, tôi sẽ nói về việc truyền tùy chọn cho lớp của bạn để cấu hình nó, tạo một tiêu đề đẹp và cách thiết lập một số tùy chọn bố cục chung.

Cảm ơn đã đọc!

Lưu ý rằng bản thân tôi cũng còn khá mới trong việc tạo các tệp lớp, nên nếu ai có thể chỉ ra những cách tốt hơn để làm những điều tôi đã đề cập ở đây, xin hãy cho tôi biết.

Phần 1 | [Phần 2](/latex/vi/chu-de-khac/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/vi/chu-de-khac/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.
