From 7eb61682f29c5fee45736e84e88decb09337e5be Mon Sep 17 00:00:00 2001 From: Fe-Ti Date: Mon, 1 Jun 2026 00:31:47 +0300 Subject: [PATCH 1/5] Spacing fix. Initial solution by @morsiiik --- tex/latex/bmstu-iu8/styles/IU8-18-extra.sty | 65 +++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/tex/latex/bmstu-iu8/styles/IU8-18-extra.sty b/tex/latex/bmstu-iu8/styles/IU8-18-extra.sty index 3e5297c..69cd3e2 100644 --- a/tex/latex/bmstu-iu8/styles/IU8-18-extra.sty +++ b/tex/latex/bmstu-iu8/styles/IU8-18-extra.sty @@ -38,3 +38,68 @@ align=left, nosep, } + + + +%% Дополнения из ГОСТ 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}% + } +} + From df5b7777b266e3bc2c252eb140061cfd58b97479 Mon Sep 17 00:00:00 2001 From: Fe-Ti Date: Mon, 1 Jun 2026 14:29:19 +0300 Subject: [PATCH 2/5] =?UTF-8?q?Use=20=D0=A0=D0=9F=D0=97=20instead=20of=20?= =?UTF-8?q?=D0=9E=D1=82=D1=87=D1=91=D1=82=20in=20abstract=20when=20using?= =?UTF-8?q?=20diploma=20option.=20Add=20ability=20to=20make=20it=20arbitra?= =?UTF-8?q?ry=20string.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tex/latex/bmstu-iu8/BMSTU-IU8.cls | 1 + tex/latex/bmstu-iu8/styles/IU8-12-abstract.sty | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/tex/latex/bmstu-iu8/BMSTU-IU8.cls b/tex/latex/bmstu-iu8/BMSTU-IU8.cls index 01df85e..ee6b970 100644 --- a/tex/latex/bmstu-iu8/BMSTU-IU8.cls +++ b/tex/latex/bmstu-iu8/BMSTU-IU8.cls @@ -8,6 +8,7 @@ \def\termsAndDefinitionsLine{В настоящей ВКР применяют следующие термины с соответствующими определениями:} \def\abbreviationsLine{В настоящей ВКР применяют следующие сокращения и обозначения:} \def\fillTitle{\fillDiplomaTitle} + \def\@reportDocType{РПЗ} } \DeclareOption{research}{ \def\termsAndDefinitionsLine{В настоящем отчете о НИР diff --git a/tex/latex/bmstu-iu8/styles/IU8-12-abstract.sty b/tex/latex/bmstu-iu8/styles/IU8-12-abstract.sty index 4c230f0..eff5a39 100644 --- a/tex/latex/bmstu-iu8/styles/IU8-12-abstract.sty +++ b/tex/latex/bmstu-iu8/styles/IU8-12-abstract.sty @@ -16,10 +16,15 @@ \RequirePackage{lastpage} +\providecommand{\@reportDocType}{Отчёт} % По умолчанию "Отчёт", но может + % быть переопределено через опции пакета + % Например, для РПЗ ВКР будет "РПЗ" +\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 From 54531e37ffe69c3ec883d30a90a422101126c9af Mon Sep 17 00:00:00 2001 From: Fe-Ti Date: Mon, 1 Jun 2026 15:06:41 +0300 Subject: [PATCH 3/5] Added command for making GOST-like heading for longtable --- tex/latex/bmstu-iu8/styles/IU8-06-tables.sty | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tex/latex/bmstu-iu8/styles/IU8-06-tables.sty b/tex/latex/bmstu-iu8/styles/IU8-06-tables.sty index fefe901..ceed677 100644 --- a/tex/latex/bmstu-iu8/styles/IU8-06-tables.sty +++ b/tex/latex/bmstu-iu8/styles/IU8-06-tables.sty @@ -44,6 +44,17 @@ font={stretch=\setspace@singlespace}, } +% Команда для создания корректной шапки в longtable +\newcommand{\gostTableHead}[3]{ + \caption{#1} + \label{#2}\\ \hline + #3 \\ + \endfirsthead + \caption*{Продолжение таблицы \thetable}\\ \hline + #3 \\ + \endhead +} + % 6.6.4 Таблицы, за исключением таблиц приложений, следует нумеровать % арабскими цифрами сквозной нумерацией. % Таблицы каждого приложения обозначаются отдельной нумерацией арабскими цифрами @@ -75,4 +86,4 @@ % знаков и символов не допускается. % Если текст повторяется, то при первом повторении его заменяют словами % "то же", а далее кавычками. -% В таблице допускается применять размер шрифта меньше, чем в тексте отчета. \ No newline at end of file +% В таблице допускается применять размер шрифта меньше, чем в тексте отчета. From 0ed715b24389900d771ecf541de0cc044a37b904 Mon Sep 17 00:00:00 2001 From: Fe-Ti Date: Mon, 1 Jun 2026 22:55:13 +0300 Subject: [PATCH 4/5] Avoid merge conflict with list indentation fix --- tex/latex/bmstu-iu8/styles/IU8-18-extra.sty | 34 ++++++++++----------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/tex/latex/bmstu-iu8/styles/IU8-18-extra.sty b/tex/latex/bmstu-iu8/styles/IU8-18-extra.sty index 69cd3e2..a2d3b90 100644 --- a/tex/latex/bmstu-iu8/styles/IU8-18-extra.sty +++ b/tex/latex/bmstu-iu8/styles/IU8-18-extra.sty @@ -22,24 +22,6 @@ filecolor=black, } % Кликабельные ссылки в pdf -\hbadness=10000 - -\setlist[enumerate]{ - leftmargin=\parindent, - labelindent=\parindent, - align=left, - nosep, -} - -\setlist[itemize]{ - label=\textendash, - leftmargin=\parindent, - labelindent=\parindent, - align=left, - nosep, -} - - %% Дополнения из ГОСТ 2.105-2019, которые могут потребоваться при НК ВКР % Решение сделано на основе изысканий @morsiiik @@ -103,3 +85,19 @@ } } +\hbadness=10000 + +\setlist[enumerate]{ + leftmargin=\parindent, + labelindent=\parindent, + align=left, + nosep, +} + +\setlist[itemize]{ + label=\textendash, + leftmargin=\parindent, + labelindent=\parindent, + align=left, + nosep, +} From 6e77743bf563a8b72c801d991ff9e53383a70e78 Mon Sep 17 00:00:00 2001 From: Fe-Ti Date: Tue, 2 Jun 2026 15:12:41 +0300 Subject: [PATCH 5/5] Updated docs --- docs/README.md | 170 +++++++++++++++++- tex/latex/bmstu-iu8/styles/IU8-06-tables.sty | 2 +- .../bmstu-iu8/styles/IU8-12-abstract.sty | 3 + 3 files changed, 173 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index a11f7d4..aa601f5 100644 --- a/docs/README.md +++ b/docs/README.md @@ -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 ГОСТ). Каждый из них помимо общих имеет специфичные поля титульного листа. @@ -90,6 +115,24 @@ `\abstract` -- вставляет заголовок элемента "РЕФЕРАТ" и абзац содержащий количество рисунков, таблиц, источников и приложений. +#### Реферат + +Реферат по умолчанию начинается со слов: "Отчёт содержит XX стр, ...", +при этом ничего считать вручную не надо, латех сам выставит нужные числа. + +В случае, если используется опция `diploma`, вместо слова отчёт будет +вставлена аббревиатура "РПЗ", так как у нас уже не просто отчёт, +а расчётно-пояснительная записка. + +Если нам нужно что-то своё (или, скажем, не нравится сокращение "РПЗ"), то +обращаемся к команде: +```latex +\overrideAbstractDocType{Тип документа} +``` +Она принудительно вставит аргумент в начало предложения вместо значения +по умолчанию. Например, если сделать вызов макроса как в коде выше, +то получится "Тип документа содержит ХХ стр., ...". + #### Перечни сокращений и терминов `\listofabbreviations` -- вставляет перечень сокращений и обозначений (структурный элемент целиком). @@ -178,6 +221,10 @@ * braille --- шрифт Брайля, * eresource --- электронный ресурс. +При ссылке на электронный ресурс указание `media = {eresource}` обязательно, +иначе плашки [Электронный ресурс] не будет (хотя у некоторых виндоводов она почему-то не появляется в принципе). +И если указали `url`, то надо прописывать `urldate`. + #### Книги `book`/`mvbook` --- книги однотомные/многотомные. Обязательными полями с точки зрения пакета являются `author`, `title` и `year/date`. @@ -207,6 +254,28 @@ } ``` +## Ссылки + +ГОСТ требует ссылок на объекты: рисунки, таблицы, формулы, приложения и т.д. +Чтобы сослаться из текста на объект, нужно сначала создать в нём метку +через макрос `\label{имя ссылки на объект}` сразу после его названия. +Затем по тексту можно ссылаться с помощью команды: +```latex +\ref{имя ссылки на объект} +% Пример: ... буква Х изображена на рисунке \ref{fig:picture-of-x} ... +``` + +Ссылки на источники оформляются через команду: +```latex +\cite{идентификатор цитируемой записи} +``` +Где `идентификатор цитируемой записи` --- это уникальная строка, которая +идёт первый в записи. Например, ссылка на стандарт из предыдущего примера +будет выглядеть как: +```latex +Технические условия описаны в стандарте \cite{standard3}, который был введен взамен ... +``` + ## Математика В пакете определены следующие окружения: @@ -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 году. По всем вопросам обращаться в исходный код. -``` \ No newline at end of file +``` diff --git a/tex/latex/bmstu-iu8/styles/IU8-06-tables.sty b/tex/latex/bmstu-iu8/styles/IU8-06-tables.sty index ceed677..0e5033b 100644 --- a/tex/latex/bmstu-iu8/styles/IU8-06-tables.sty +++ b/tex/latex/bmstu-iu8/styles/IU8-06-tables.sty @@ -44,7 +44,7 @@ font={stretch=\setspace@singlespace}, } -% Команда для создания корректной шапки в longtable +% Команда для создания корректной шапки в longtable/xltabular \newcommand{\gostTableHead}[3]{ \caption{#1} \label{#2}\\ \hline diff --git a/tex/latex/bmstu-iu8/styles/IU8-12-abstract.sty b/tex/latex/bmstu-iu8/styles/IU8-12-abstract.sty index eff5a39..60e2687 100644 --- a/tex/latex/bmstu-iu8/styles/IU8-12-abstract.sty +++ b/tex/latex/bmstu-iu8/styles/IU8-12-abstract.sty @@ -19,6 +19,9 @@ \providecommand{\@reportDocType}{Отчёт} % По умолчанию "Отчёт", но может % быть переопределено через опции пакета % Например, для РПЗ ВКР будет "РПЗ" + +% Команда для задания своего типа документа (XXX) в предложении в начале +% реферата: "XXX содержит ?? стр., ?? рис., ..." \newcommand{\overrideAbstractDocType}[1]{\gdef\@reportDocType{#1}} \renewcommand{\abstract}{