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

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

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

**Автор: Джеймс Аллен (март 2011)**

Каждый хочет CV, выглядящее профессионально, и нехватки шаблонов LaTeX, которые помогут вам его получить, нет. Но если вы похожи на меня, вам захочется иметь свой CV и сделать его по-своему. Это значит, что вы должны сами уметь настраивать его внешний вид и оформление, а в LaTeX это может быть notoriously difficult. В этой серии записей в блоге я надеюсь провести вас через создание собственного файла класса и показать, что форматировать CV именно так, как вы хотите, может быть легко. Мы сосредоточимся на стиле CV, но методы будут идентичны для любого типа документа.

### Что такое файл класса?

Когда вы пишете `\documentclass{article}` в вашем файле LaTeX вы подключаете файл класса `article.cls`. Это определяет все команды, такие как `\section` и `\title` которые используются для структурирования документа. Это также настраивает, как эти команды влияют на формат и расположение страницы.

### Настройка собственного файла класса

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

```latex
\documentclass{my_cv}
\begin{document}
\section{Education}
\subsection{University of Nowhere}
\section{Work}
\subsection{ABC Limited.}
\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 My custom CV class]
```

Это `\NeedsTeXFormat` команды сообщают компилятору, для какой версии LaTeX предназначен пакет. Текущая версия LaTeX — LaTeX2e, и почти все дистрибутивы используют ее.

Это `\ProvidesClass` команда дает компилятору некоторую информацию о вашем пакете. Первый аргумент должен совпадать с именем файла вашего файла класса и сообщает LaTeX, как называется ваш пакет. Второй аргумент необязателен и задает описание вашего класса, которое появится в журнале и в других местах. Описание должно начинаться с даты точно в указанном выше формате, и это должна быть дата последнего изменения пакета. Это можно использовать при подключении класса, чтобы проверить, что у вас достаточно свежая его версия. Например, если вы подключаете его через `\documentclass{my_cv}[2012/01/01]` с датой, более поздней, чем дата в описании класса, будет показано предупреждение о том, что класс устарел.

### Изменение заголовков разделов

Стандартные заголовки разделов в article не очень подходят для CV, поэтому мы хотели бы заменить их на что-то более аккуратное. Для этого мы можем переопределить `\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}                      % Можно использовать, чтобы задать префикс для всех разделов, например «Раздел ...»
  {}                           % Можно использовать для вставки кода перед заголовком
  [\titlerule]                 % Вставляет горизонтальную линию после заголовка
```

Если мы скомпилируем `cv.tex` сейчас, мы увидим, что у нас появились основные заголовки, более подходящие для CV:

![Screenshot1.png](/files/4c7d2f55bace5bae6d6c5738a6af3bcb07cd505a)

Мы можем настроить и заголовки \subsection:

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

Теперь подразделы оформлены в том же стиле:

![Screenshot2.png](/files/23b81cae02aae9597e80da60fa89143bf989074a)

Вам стоит попробовать некоторые доступные параметры форматирования, чтобы понять, что вам нравится:

* `\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{Education}
\datedsubsection{University of Nowhere}{2004--2008}
Я учился в Университете Нигде с 2004 по 2008 год.

\section{Work}
\datedsubsection{ABC Limited.}{2008--Now}
Я работаю в ABC Limited с 2008 года по настоящее время.

\end{document} ​
```

Теперь наш CV содержит даты:

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

### Выводы

На этом заканчивается первая часть этого руководства, но, надеюсь, я уже охватил достаточно, чтобы вы могли продолжить и начать создавать полезные файлы класса. Потребовалось не так много команд, чтобы создать то, что уже выглядит как неплохой шаблон CV, и мы лишь слегка затронули то, что еще можно настроить. В следующих частях этого руководства я расскажу о передаче параметров вашему классу для его настройки, о создании красивого заголовка и о том, как задавать некоторые общие параметры макета.

Спасибо за чтение!

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

Часть 1 | [Часть 2](/latex/ru/drugie-temy/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://ayakaleaf-pro.ayaka.space/latex/ru/drugie-temy/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.
