> 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/26-how-to-write-a-latex-class-file-and-design-your-own-cv-part-2.md).

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

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

**Tác giả: Cody Herring (tháng 6 năm 2013)**

Đây là phần tiếp theo của [Cách viết tệp lớp LaTeX và thiết kế CV của riêng bạn (Phần 1)](/latex/vi/chu-de-khac/25-how-to-write-a-latex-class-file-and-design-your-own-cv-part-1.md), xem xét thêm nhiều tùy chọn để tạo CV, và sử dụng các tệp lớp để làm điều đó.

Trong bài trước, chúng ta đã tạo 2 tệp: `cv.tex` và `my_cv.cls`. Tệp nội dung, `cv.tex`, chứa nội dung sau:

```latex
\documentclass{my_cv}
\begin{document}
\section{Học vấn}
\datedsubsection{University of Nowhere}{2004-2008}
\section{Công việc}
\datedsubsection{ABC Limited}{2008-Now}
\end{document}
```

`my_cv.cls` chứa một số mặc định định dạng, cũng như một số lệnh để sử dụng:

```latex
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{my_cv}[6/6/2013 custom CV class]
\LoadClass{article}
\RequirePackage{titlesec}
\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ư 'Section ...'
  {}                 % Có thể dùng để chèn mã trước tiêu đề
  [\titlerule]       % Chèn một đường ngang sau tiêu đề
  \titleformat{\subsection}
  {\large\scshape\raggedright}
  {}{0em}
  {}
\newcommand{\datedsection}[2]{%
  \section[#1]{#1 \hfill #2}%
}
\newcommand{\datedsubsection}[2]{%
  \subsection[#1]{#1 \hfill #2}%
}
```

Điều này tạo ra tài liệu sau:

![Hình 1.png](/files/ca781bd13b31bc600b7aa759a54656178f05e71a)

Tính năng `#1` và `#2` tham chiếu đến đối số hoặc tham số thứ nhất và thứ hai đang được truyền vào lệnh. Ở dòng đầu tiên của một `\newcommand`, phần trong ngoặc, ví dụ như `[2]` cho biết số lượng tham số đang được truyền vào hàm. Sau đó, hàm có thể gọi các tham số này bằng cách sử dụng `#1`, `#2`, và cứ thế tiếp tục, tùy thuộc vào số lượng tham số mà hàm yêu cầu. Các hàm có nhiều tham số hơn sẽ được trình bày sau trong bài viết.

Chúng ta sẽ tiếp tục bằng cách thêm phần tên và liên hệ, cũng như tiếp tục với phần kinh nghiệm và các phần khác.

### Tên và thông tin liên hệ

Trong một CV, tên thường ở trên cùng, kèm theo thông tin liên hệ để liên lạc cho công việc. Điều này sẽ được thực hiện bằng cách thêm các hàm mới vào tệp lớp của chúng ta. Tên có thể được thêm bằng một hàm đơn giản:

```latex
\newcommand{\name}[1]{%
  \centerline{\Huge{#1}}
}
```

Điều này tạo ra một tên cỡ chữ lớn, căn giữa ở bất kỳ nơi nào nó được dùng. Có thể gọi như sau:

```latex
\name{John Smith}
```

Bây giờ đến thông tin liên hệ. Thêm phần sau vào tệp lớp:

```latex
\newcommand\contact[5]{%
    \centerline{%
        \makebox[0pt][c]{%
            #1 {\large\textperiodcentered} #2 {\large\textperiodcentered} #3
            \ #4 \ \ #5%
        }%
    }%
}
```

Sau đó gọi hàm từ tài liệu:

```latex
\contact{123 Broadway}{London}{UK 12345}{john@smith.com}{(000)-111-1111}
```

Tất cả hiển thị rất đẹp, với tên và thông tin liên hệ như sau:

![Hình 2.png](/files/60a4474855c4c51f9491922a7be736ebe581f545)

Điều này hiển thị thông tin liên hệ được định dạng đẹp, với một dấu chấm giữa ở giữa. Có thể điều chỉnh cho các địa chỉ dài hơn nếu cần bằng cách thêm một hàm thứ hai:

```latex
\newcommand{\longcontact}[5]{%
    \noindent
    #1\hfill {\large\textperiodcentered}\hfill #2\hfill
    {\large\textperiodcentered}\hfill #3\\
    #4\hfill #5%
}
```

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

Điều này trông hơi lạ với thông tin ngắn, nhưng nếu một địa chỉ đặc biệt dài thì cách này linh hoạt hơn để dùng. Điểm hay nhất là tài liệu TeX chỉ cần thay đổi rất ít:

```latex
\longcontact{123 Broadway}{London}{UK 12345}{john@smith.com}{(000)-111-1111}
```

Đây là điểm chính của việc sử dụng các tệp lớp. Cho phép thay đổi tối thiểu trong nội dung tài liệu, và kiểm soát cách trình bày (nội dung được hiển thị như thế nào) từ bên ngoài.

### Mở rộng phần Kinh nghiệm

Một CV không nên chỉ là danh sách công việc. Nên thêm một số mô tả về những gì đã làm trong từng công việc bên dưới mỗi mục. Ba gạch đầu dòng cho mỗi công việc là sự cân bằng tốt giữa chi tiết và mô tả. Có thể dễ dàng điều chỉnh bằng cách thêm hoặc bớt các nút. Thêm phần sau vào tệp lớp:

```latex
\newcommand{\workitems}[3]{%
    \begin{itemize}
    \item #1
    \item #2
    \item #3
    \end{itemize}%
}
```

Thêm phần sau vào `.tex` tệp:

```latex
\workitems
{Phát triển sản phẩm mới}
{Tăng năng suất lên 20\%}
{Giảm chi phí \$10,000}
```

Bây giờ phần kinh nghiệm trông đầy đặn hơn một chút:

![Hình 4.png](/files/ac30680f9e880e70978ab1d12e026d34cf80e015)

Thêm một phần kỹ năng sẽ hoàn thiện bản lý lịch. Phần này được làm mà không cần hàm của lớp, vì nó không rút ngắn mã LaTeX được bao nhiêu:

```latex
\section{Kỹ năng}

\begin{tabular}{l l l l}
C\# & T-SQL & Javascript & HTML \\
XML & JSON & SOAP & REST
\end{tabular}
```

Điều này dẫn đến kết quả sau:

![Hình 5.png](/files/23a63cb088095c23bb8c4b2aaa388a3f6f3b2d95)

### Kết luận

Bài viết hai phần này hẳn đã để lại cho bạn một mẫu CV rất cơ bản, sẵn sàng để mở rộng và thêm các phần mới.

Toàn bộ tệp lớp như sau:

```latex
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{my_cv}[6/6/2013 custom CV class]
\LoadClass{article}
\RequirePackage{titlesec}

\titleformat{\section}
  {\Large\scshape\raggedright}
  {}{0em}
  {}
  [\titlerule]

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

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

\newcommand{\name}[1]{%
  \centerline{\Huge{#1}}%
}

\newcommand\contact[5]{%
    \centerline{%
        \makebox[0pt][c]{%
            #1 {\large\textperiodcentered} #2 {\large\textperiodcentered} #3
            \ #4 \ \ #5%
        }%
    }%
}

\newcommand{\longcontact}[5]{%
    \noindent
    #1\hfill {\large\textperiodcentered}\hfill #2\hfill
    {\large\textperiodcentered}\hfill #3\\
    #4\hfill #5%
}

\newcommand{\workitems}[3]{%
    \begin{itemize}
    \item #1
    \item #2
    \item #3
    \end{itemize}%
}
```

Tính năng `.tex` tệp như sau:

```latex
\documentclass{my_cv}
\begin{document}
\name{John Smith}
\contact{123 Broadway}{London}{UK 12345}{john@smith.com}{(000)-111-1111}
\section{Học vấn}
\datedsubsection{University of Nowhere}{2004-2008}
\section{Công việc}
\datedsubsection{ABC Limited}{2008-Now}
\workitems
{Phát triển sản phẩm mới}
{Tăng năng suất lên 20\%}
{Giảm chi phí \$10,000}

\section{Kỹ năng}
\begin{tabular}{l l l l}
C\# & T-SQL & Javascript & HTML \\
XML & JSON & SOAP & REST
\end{tabular}

\end{document}
```

Điều này dẫn đến tài liệu sau:

![Hình 6.png](/files/546f140bb596bbb75f3bfbf7871909c01474a409)

Bài hướng dẫn này nên mang đến cho bạn một điểm khởi đầu tuyệt vời cho CV, với không gian để mở rộng.

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


---

# 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/26-how-to-write-a-latex-class-file-and-design-your-own-cv-part-2.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.
