Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
170 changes: 169 additions & 1 deletion docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,31 @@
\KOMAoptions{fontsize=14pt}
```

В процессе прохождения проверки оформления ВКР с огромной вероятностью
потребуется дополнения из ГОСТ 2.105-95 или ...-2019, а именно отступы
между заголовками и текстом.

Для этого в преамбуде нужно вызвать команду `\useGOSTstyleOTKTD[ревизия]`.
Ревизия может быть равна 95 или 2019. Иные значения выдадут ошибку. Примеры использования ниже:
```latex
% Вызов % Результат
\useGOSTstyleOTKTD % По умолч., 3 интервала
\useGOSTstyleOTKTD[95] % Отступ по 95, т.е. 3 интервала
\useGOSTstyleOTKTD[2019] % Отступ по 2019, т.е. 2 интервала
\useGOSTstyleOTKTD[9000] % Сообщение об ошибке
```

Опционально (по ГОСТ 2.105-95) убираем 1em заголовками следующией командой
```latex
\titleToTitleSpacing
```

В гостах не обнаружено, но ещё у нас требуют увеличить расстояние между формулой
и текстом (до и после формулы). Это можно сделать командой:
```latex
\enlargeFormulaeSpacing
```

## Документация к полям на титульных листах

В пакете существует 3 класса документов: `diploma` (ВКР), `research` (НИРС) и `ordinary` (простой отчёт a la ГОСТ). Каждый из них помимо общих имеет специфичные поля титульного листа.
Expand Down Expand Up @@ -90,6 +115,24 @@

`\abstract` -- вставляет заголовок элемента "РЕФЕРАТ" и абзац содержащий количество рисунков, таблиц, источников и приложений.

#### Реферат

Реферат по умолчанию начинается со слов: "Отчёт содержит XX стр, ...",
при этом ничего считать вручную не надо, латех сам выставит нужные числа.

В случае, если используется опция `diploma`, вместо слова отчёт будет
вставлена аббревиатура "РПЗ", так как у нас уже не просто отчёт,
а расчётно-пояснительная записка.

Если нам нужно что-то своё (или, скажем, не нравится сокращение "РПЗ"), то
обращаемся к команде:
```latex
\overrideAbstractDocType{Тип документа}
```
Она принудительно вставит аргумент в начало предложения вместо значения
по умолчанию. Например, если сделать вызов макроса как в коде выше,
то получится "Тип документа содержит ХХ стр., ...".

#### Перечни сокращений и терминов

`\listofabbreviations` -- вставляет перечень сокращений и обозначений (структурный элемент целиком).
Expand Down Expand Up @@ -178,6 +221,10 @@
* braille --- шрифт Брайля,
* eresource --- электронный ресурс.

При ссылке на электронный ресурс указание `media = {eresource}` обязательно,
иначе плашки [Электронный ресурс] не будет (хотя у некоторых виндоводов она почему-то не появляется в принципе).
И если указали `url`, то надо прописывать `urldate`.

#### Книги

`book`/`mvbook` --- книги однотомные/многотомные. Обязательными полями с точки зрения пакета являются `author`, `title` и `year/date`.
Expand Down Expand Up @@ -207,6 +254,28 @@
}
```

## Ссылки

ГОСТ требует ссылок на объекты: рисунки, таблицы, формулы, приложения и т.д.
Чтобы сослаться из текста на объект, нужно сначала создать в нём метку
через макрос `\label{имя ссылки на объект}` сразу после его названия.
Затем по тексту можно ссылаться с помощью команды:
```latex
\ref{имя ссылки на объект}
% Пример: ... буква Х изображена на рисунке \ref{fig:picture-of-x} ...
```

Ссылки на источники оформляются через команду:
```latex
\cite{идентификатор цитируемой записи}
```
Где `идентификатор цитируемой записи` --- это уникальная строка, которая
идёт первый в записи. Например, ссылка на стандарт из предыдущего примера
будет выглядеть как:
```latex
Технические условия описаны в стандарте \cite{standard3}, который был введен взамен ...
```

## Математика

В пакете определены следующие окружения:
Expand Down Expand Up @@ -246,8 +315,107 @@ $$
\end{codelisting}
```

## Таблицы

Что же касается таблиц, то "из-коробки" доступны четрые варианта таблиц:

* **tabular** --- самые простые таблицы в латехе;
* **longtable** --- таблицы с возможностью переноса на последующие страницы;
* **tabularx** --- tabular, которому можно задать ширину;
* **xltabular** --- longtable, которому можно задать ширину.

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

Шапка таблицы --- первая строка с названиями колонок.

#### tabular(x)
Окружения `tabular/x` желательно использовать для коротких таблиц, так как
оно при недостатке места переносится целиком на следующую страницу.
Параметры для окружений такие:
```latex
\begin{tabular}{формат столбцов}
\begin{tabularx}{ширина таблицы}{формат столбцов}
```

Чтобы прописать название таблицы, заворачиваем её в окружение `table`
и указываем `\caption{название таблицы}`. После этого можно (и нужно) создать ссылку на неё.

Пример:
```latex
\begin{table}
\centering % выравниваение по центру
\caption{Инструкции для умножения <<без переноса>>} % название
\label{tab:zbkc-clmul} % ссылка
% Далее создаём таблицу на всё ширину строки с 4 столбцами
\begin{tabularx}{\linewidth}{|l|p{0.58\linewidth}|C|C|}
\hline % горизонтальная линия рамки таблицы
Мнемоника & \centering Команда & {\small RV32} & {\small RV64} \\ \hline
{clmul} & Умножение многочленов (младшие биты) & + & + \\ \hline
{clmulh} & Умножение многочленов (старшие биты) & + & + \\ \hline
\end{tabularx}
\end{table}
```

#### longtable|xltabular
Если у нас таблица длинная (условно длиннее трети или четверти страницы),
то следует использовать `longtable` или `xltabular`, т.к. они способны
разделяться по нескольким страницам.

Однако синтаксис их инициализации сложнее. После открытия окружения указывается
первая головка --- название+ссылка и шапка таблицы, `\endfirsthead` закрывает этот фрагмент.
Далее описывается головка, которая идёт на последующих страницах. Её описание завершается `\endhead`.
Потом уже идут строки таблицы, как в обыкновенном `tabular`.

По ГОСТу головки оформляются следующим набором макросов:
```latex
\caption{Название_таблицы}
\label{имя:ссылки}\\ \hline
Шапка_таблицы \\
\endfirsthead % конец описания первой головки
\caption*{Продолжение таблицы \thetable}\\ \hline
Шапка_таблицы \\
\endhead % конец описания остальных головок
```

Чтобы минимизировать ошибки оформления в нашем пакете предлагается
макрос
```latex
\gostTableHead{название}{ссылка}{шапка таблицы}
```

Вместе с ним `xltabular` будет выглядеть аналогично примеру:
```latex
\begin{xltabular}{\linewidth}{|l|p{0.58\linewidth}|C|C|}

\gostTableHead{\noindent Побитовые операции}{tab:zbkb}{Мнемоника & \centering Команда & {\small RV32} & {\small RV64}}

\hline
{rol} & Циклический сдвиг влево & \gotcha & \gotcha \\\hline
{rolw} & Циклический сдвиг слова влево & & \gotcha \\\hline
{ror} & Циклический сдвиг вправо & \gotcha & \gotcha \\\hline
{rori} & Циклический сдвиг вправо на константу & \gotcha & \gotcha \\\hline
{roriw} & Циклический сдвиг слова на константу вправо & & \gotcha \\\hline
{row} & Циклический сдвиг слова вправо & & \gotcha \\\hline
{andn} & И с инвертированными операндами & \gotcha & \gotcha \\\hline
{orn} & ИЛИ с инвертированными операндами & \gotcha & \gotcha \\\hline
{xnor} & Исключающее ИЛИ-НЕ & \gotcha & \gotcha \\\hline
{pack} & Упаковка младших половин регистров & \gotcha & \gotcha \\\hline
{packh} & Упаковка младших байт регистров в 16 бит & \gotcha & \gotcha \\\hline
{packw} & Упаковка младших 16 разрядов в слово & & \gotcha \\\hline
{brev8} & Обращение порядка бит в байтах & \gotcha & \gotcha \\\hline
{rev8} & Обращение порядка байт в регистре & \gotcha & \gotcha \\\hline
{zip} & Поразрядное перемежение & \gotcha & \\\hline
{unzip} & Обратная операция к zip &\gotcha & \\\hline
\end{xltabular}
```


****
```
Файлик написал Fe-Ti (aka Tim Kravchenko) в 2024 году.
Дополнено в 2026 году.
По всем вопросам обращаться в исходный код.
```
```
1 change: 1 addition & 0 deletions tex/latex/bmstu-iu8/BMSTU-IU8.cls
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
\def\termsAndDefinitionsLine{В настоящей ВКР применяют следующие термины с соответствующими определениями:}
\def\abbreviationsLine{В настоящей ВКР применяют следующие сокращения и обозначения:}
\def\fillTitle{\fillDiplomaTitle}
\def\@reportDocType{РПЗ}
}
\DeclareOption{research}{
\def\termsAndDefinitionsLine{В настоящем отчете о НИР
Expand Down
13 changes: 12 additions & 1 deletion tex/latex/bmstu-iu8/styles/IU8-06-tables.sty
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,17 @@
font={stretch=\setspace@singlespace},
}

% Команда для создания корректной шапки в longtable/xltabular
\newcommand{\gostTableHead}[3]{
\caption{#1}
\label{#2}\\ \hline
#3 \\
\endfirsthead
\caption*{Продолжение таблицы \thetable}\\ \hline
#3 \\
\endhead
}

% 6.6.4 Таблицы, за исключением таблиц приложений, следует нумеровать
% арабскими цифрами сквозной нумерацией.
% Таблицы каждого приложения обозначаются отдельной нумерацией арабскими цифрами
Expand Down Expand Up @@ -75,4 +86,4 @@
% знаков и символов не допускается.
% Если текст повторяется, то при первом повторении его заменяют словами
% "то же", а далее кавычками.
% В таблице допускается применять размер шрифта меньше, чем в тексте отчета.
% В таблице допускается применять размер шрифта меньше, чем в тексте отчета.
10 changes: 9 additions & 1 deletion tex/latex/bmstu-iu8/styles/IU8-12-abstract.sty
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,18 @@

\RequirePackage{lastpage}

\providecommand{\@reportDocType}{Отчёт} % По умолчанию "Отчёт", но может
% быть переопределено через опции пакета
% Например, для РПЗ ВКР будет "РПЗ"

% Команда для задания своего типа документа (XXX) в предложении в начале
% реферата: "XXX содержит ?? стр., ?? рис., ..."
\newcommand{\overrideAbstractDocType}[1]{\gdef\@reportDocType{#1}}

\renewcommand{\abstract}{
\structure{РЕФЕРАТ}

Отчёт содержит \pageref{LastPage} стр.\ifnum
\@reportDocType~содержит \pageref{LastPage} стр.\ifnum
\TotalValue{totalfigures}>0, \TotalValue{totalfigures} рис.\fi\ifnum
\TotalValue{totaltables}>0, \TotalValue{totaltables} табл.\fi\ifnum
\TotalValue{totalcites}>0, \TotalValue{totalcites} источн.\fi\ifnum
Expand Down
63 changes: 63 additions & 0 deletions tex/latex/bmstu-iu8/styles/IU8-18-extra.sty
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,69 @@
filecolor=black,
} % Кликабельные ссылки в pdf


%% Дополнения из ГОСТ 2.105-2019, которые могут потребоваться при НК ВКР
% Решение сделано на основе изысканий @morsiiik
%
% Ниже описанное исходит из равенства
% 1em == кегль шрифта == 1 интервал
%
% 6.6.3 Расстояние между заголовком раздела (подраздела) и предыдущим или
% последующим текстом, а также между заголовками раздела и подраздела
% должно быть равно не менее чем двум высотам шрифта, которым набран
% основной текст документа.
%
%Примечание - При выполнении машинописным способом интервал
% рекомендуется использовать равный 2 или 3 интервалам, при выполнении
% рукописным способом - не менее 15 мм.
%%% прим: А в старой версии госта ...-95 было 3 или 4 интервала,
%%% т.е. стоит остановиться на 3 интервалах

% 6.6.4 Расстояние между строками заголовков подразделов и пунктов
% принимают таким же, как в тексте.

\newlength{\eskdgostlength}
\setlength{\eskdgostlength}{3em}
\newcommand{\useGOSTstyleOTKTD}[1][95]{
\ifthenelse{\equal{#1}{95}}{ % then
\setlength{\eskdgostlength}{3em}
}{ % else
\ifthenelse{\equal{#1}{2019}}{ % then
\setlength{\eskdgostlength}{2em}
}{ % else
\PackageError{IU8-18-extra}{Unknown GOST 2.105 revision #1 in macro \noexpand\useGOSTstyleOTKTD.}{Use 95 or 2019 revisisons.}
}}
\titlespacing*{\structure}{0pt}{0pt}{\eskdgostlength}
\titlespacing*{\section}{0pt}{0pt}{\eskdgostlength}
\titlespacing*{\subsection}{0pt}{\eskdgostlength}{\eskdgostlength}
\titlespacing*{\subsubsection}{0pt}{\eskdgostlength}{\eskdgostlength}
\titlespacing*{\paragraph}{0pt}{\eskdgostlength}{\eskdgostlength}
\titlespacing*{\subparagraph}{0pt}{\eskdgostlength}{\eskdgostlength}
}
% Примеры использования Результат
% \useGOSTstyleOTKTD По умолч., 3 интервала
% \useGOSTstyleOTKTD[95] Отступ по 95, т.е. 3 интервала
% \useGOSTstyleOTKTD[2019] Отступ по 2019, т.е. 2 интервала
% \useGOSTstyleOTKTD[9000] Сообщение об ошибке

% Опционально убираем 1em следующией командой
\newcommand{\titleToTitleSpacing}{\vspace{-1em}}

% В гостах не обнаружено, но требуют увеличить расстояние между формулой
% и текстом (до и после формулы)
\newcommand{\enlargeFormulaeSpacing}{
% Формулы: пустая строка до и после.
% \AtBeginDocument нужен, потому что setspace (через \onehalfspacing)
% переопределяет displayskip при выборе шрифта, перезаписывая значения,
% поставленные в преамбуле.
\AtBeginDocument{%
\setlength{\abovedisplayskip}{1.5em}%
\setlength{\belowdisplayskip}{1.5em}%
\setlength{\abovedisplayshortskip}{1.5em}%
\setlength{\belowdisplayshortskip}{1.5em}%
}
}

\hbadness=10000

\setlist[enumerate]{
Expand Down
Loading