> For the complete documentation index, see [llms.txt](https://ayakaleaf-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://ayakaleaf-pro.ayaka.space/latex/ru/drugie-temy/26-how-to-write-a-latex-class-file-and-design-your-own-cv-part-2.md).

# Как написать файл класса LaTeX и создать собственное CV (часть 2)

[Часть 1](/latex/ru/drugie-temy/25-how-to-write-a-latex-class-file-and-design-your-own-cv-part-1.md) | Часть 2

**Автор: Коди Херринг (июнь 2013)**

Это продолжение [Как написать файл класса LaTeX и оформить собственное резюме (Часть 1)](/latex/ru/drugie-temy/25-how-to-write-a-latex-class-file-and-design-your-own-cv-part-1.md), рассматривая дополнительные варианты создания резюме и используя для этого файлы классов.

В прошлом посте были созданы 2 файла: `cv.tex` и `my_cv.cls`. Файл содержимого, `cv.tex`, содержал следующее:

```latex
\documentclass{my_cv}
\begin{document}
\section{Education}
\datedsubsection{Университет Нигде}{2004-2008}
\section{Work}
\datedsubsection{ABC Limited}{2008-настоящее время}
\end{document}
```

`my_cv.cls` содержал некоторые настройки форматирования, а также некоторые команды для использования:

```latex
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{my_cv}[6/6/2013 пользовательский класс резюме]
\LoadClass{article}
\RequirePackage{titlesec}
\titleformat{\section}       % Настройка команды \section
{\Large\scshape\raggedright} % Сделать заголовки \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}%
}
```

Это создаёт следующий документ:

![Рисунок 1.png](/files/322fb6cf541c315d394f165b64143a159976727f)

Это `#1` и `#2` относятся к первому и второму аргументу или параметру, передаваемому в команду. В первой строке `\newcommand`, раздел в скобках, например `[2]` относится к количеству параметров, передаваемых функции. Затем функция может обращаться к этим параметрам, используя `#1`, `#2`, и так далее, в зависимости от того, сколько параметров требовалось функции. Функции с большим количеством параметров будут показаны позже в статье.

Мы продолжим, добавив раздел с именем и контактами, а также продолжив работу над разделами опыта и другими.

### Имя и контактная информация

В резюме имя обычно находится вверху, а контактная информация — для связи по поводу вакансий. Это будет реализовано путем добавления новых функций в наш файл класса. Имя можно добавить с помощью простой функции:

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

Это выводит имя по центру крупным шрифтом везде, где оно используется. Вызов выглядит так:

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

Теперь о контактной информации. Добавьте следующее в файл класса:

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

Затем вызовите функцию из документа:

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

Всё это отображается красиво, с именем и контактной информацией вот так:

![Рисунок 2.png](/files/12c1be7f8cf5d17127e1465abad57c9d5076fe33)

Это отображает контактную информацию, аккуратно отформатированную с маркером-разделителем между ними. При необходимости это можно адаптировать для более длинных адресов, добавив вторую функцию:

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

![Screenshot3.png](/files/0c06937af8326bbcdc716f2da743a61c85ce2a4d)

Это выглядит немного странно с короткой информацией, но если адрес особенно длинный, использовать это более гибко. Самое лучшее здесь то, что документ TeX требует минимальных изменений:

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

В этом и заключается главная идея использования файлов классов: минимальные изменения в содержимом документа и внешнее управление оформлением (тем, как содержимое отображается).

### Расширение раздела «Опыт»

Резюме должно содержать не только список мест работы. Под каждым пунктом следует добавить описание того, что делалось на работе. По 3 пункта на каждую работу — хороший баланс между деталями и описанием. Это легко настроить, добавляя или удаляя пункты. Добавьте следующее в файл класса:

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

Добавьте следующее в `.tex` файл:

```latex
\workitems
{Разработан новый продукт}
{Повышена производительность на 20\%}
{Снижены затраты на \$10,000}
```

Теперь раздел опыта выглядит немного полнее:

![Рисунок 4.png](/files/3de176d3a72573b3a774f7a88578d88ba637ee36)

Добавление раздела навыков завершает резюме. Это было сделано без функции класса, так как это не слишком сокращало код LaTeX:

```latex
\section{Навыки}

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

В результате получается следующее:

![Рисунок 5.png](/files/3ae6b6f59bb2d13e52aab40430680f741b9ba75a)

### Заключение

Эта статья из двух частей должна была оставить вам очень простой шаблон резюме, готовый к расширению и добавлению новых разделов.

Полный файл класса выглядит следующим образом:

```latex
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{my_cv}[6/6/2013 пользовательский класс резюме]
\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}%
}
```

Это `.tex` файл выглядит следующим образом:

```latex
\documentclass{my_cv}
\begin{document}
\name{John Smith}
\contact{123 Broadway}{London}{UK 12345}{john@smith.com}{(000)-111-1111}
\section{Education}
\datedsubsection{Университет Нигде}{2004-2008}
\section{Work}
\datedsubsection{ABC Limited}{2008-настоящее время}
\workitems
{Разработан новый продукт}
{Повышена производительность на 20\%}
{Снижены затраты на \$10,000}

\section{Навыки}
\begin{tabular}{l l l l}
C\# & T-SQL & Javascript & HTML \\
XML & JSON & SOAP & REST
\end{tabular}

\end{document}
```

В результате получается следующий документ:

![Рисунок 6.png](/files/fe3ac6046b15b27ce11a44d1e7315c764340b59a)

Этот учебник должен дать отличную отправную точку для резюме с возможностью дальнейшего расширения.

[Часть 1](/latex/ru/drugie-temy/25-how-to-write-a-latex-class-file-and-design-your-own-cv-part-1.md) | Часть 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://ayakaleaf-pro.ayaka.space/latex/ru/drugie-temy/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.
