При вёрстке дипломной работы в LaTeX настал этап приведения её вида в соответствие хотя бы некоторым принятым стандартам. Соответственно, начались и поиски решения возникавших вопросов, в том числе стандартными средствами, то бишь путём гугления.
Первая мысль, возникшая после просмотра решений, найденных на разношёрстных форумах — «Я же не усну». Немного размышлений и оперативное пролистывание небезызвестных руководств Балдина, Сюткина и Львовского, подтвердивших результаты размышлений, позволили разобраться с вопросами гораздо более компактными, удобными и воспринимаемыми способами.
А примеров того, как лучше не делать, приведу два. Честно, они очень порадовали, т.к. свидетельствуют об изобретательности и энергичности их создателей.
Задача: получить заголовки без переносов слов, полностью выровненные по левому краю.
Источник: mix_mix с dxdy.ru
Решение локальное:
Задача: получить заголовки без переносов слов, с верхним регистром в тексте и без оного — в содержании.
Источник: alex__, с gentoo.ru
Решение локальное:
Оба решения, конечно, при желании можно преобразовать и в глобальные макросы, которые достаточно будет однократно включить в преамбулу документа, но это тоже будет лишняя возня и затраты времени. К тому же не факт, что ваш макрос не сможет корректно обработать именно ваши заголовки благодаря наличию в них каких-либо хитрых моментов в виде, скажем, греческих букв или, не к ночи будь помянуты, математических выражений.
До сих пор практически не разбираюсь в макросах TeX (а приведённые выше нагромождения кода — и вовсе тёмный лес), и всегда успешно обхожусь более чем стандартными командами и классами. Единственное стороннее в моих конфигурациях miktex и texlive — те самые шрифты PsCyr, и то не всегда в них есть необходимость.
В качестве аналога проблемы приходит в голову извечное балансирование между написанием собственных реализаций каких-либо алгоритмов и использованием готовых библиотек. Даже аргумент, что исследователю виднее, какие нюансы могут образоваться в его задаче, и соответственно, его код будет их учитывать — далеко не всегда корректен. Во многих библиотеках практически всё уже учтено. Самые стандартные алгоритмы настолько хорошо испытаны, что ограничения на их применение уходят в математику, а не в ошибки реализации.
Так вот, вопрос. Риторический. Зачем изобретать велосипеды, если есть поистине элементарные в использовании и отлаженные средства? Тратить имеющийся выраженный потенциал на решение обыденных вопросов, упуская возможность оставить его побольше там, где он действительно необходим?
Первая мысль, возникшая после просмотра решений, найденных на разношёрстных форумах — «Я же не усну». Немного размышлений и оперативное пролистывание небезызвестных руководств Балдина, Сюткина и Львовского, подтвердивших результаты размышлений, позволили разобраться с вопросами гораздо более компактными, удобными и воспринимаемыми способами.
А примеров того, как лучше не делать, приведу два. Честно, они очень порадовали, т.к. свидетельствуют об изобретательности и энергичности их создателей.
Задача: получить заголовки без переносов слов, полностью выровненные по левому краю.
Источник: mix_mix с dxdy.ru
% Выравнивание по левому краю без переносов.
\newcommand{\MTKPsectAlignLeft}{%
\let\\\@centercr\@rightskip\@flushglue \rightskip\@rightskip%
\leftskip\z@skip}
% Выравнивание по центру
\newcommand{\MTKPsectAlignCenter}{%
\let\\\@centercr
\rightskip\@flushglue\leftskip\@flushglue
\parindent\z@\parfillskip\z@skip}
% Плюшки для удобства
\newcommand{\MTKPsectionAlign}{\MTKPsectAlignLeft}
\newcommand{\MTKPsubsectionAlign}{\MTKPsectAlignLeft}
\newcommand{\MTKPsubsubsectionAlign}{\MTKPsectAlignLeft}
% Для установки выравнивания секций в момент сборки
\newcommand{\MTKPsectAlign}[2]{%
\expandafter\renewcommand\csname\string MTKP#1Align\endcsname{%
\@nameuse{MTKPsectAlign#2}}}
% Стиль заголовка
\newcommand{\MTKPsectionStyle}{\normalfont\MTKPfontXXVIsize\it\MakeUppercase}
% Спасибо, luitzen
\renewcommand\section{\clearpage\@startsection {section}{1}{.em}%
{-15mm \@plus -3mm \@minus -2mm}%
{15mm \@plus 1mm \@minus 2mm}%
{\let\@hangfrom\@empty
\MTKPsectionAlign\MTKPsectionStyle}}
% Остальные заголовки так же.
% Теперь \chapter{Тра-ля-ля} будет без номера по центру
\newcommand\chapter{
\begingroup\clearpage\MTKPsectAlign{subsection}{Center}%
\subsection*{#1}%
\addcontentsline{toc}{section}{#1}\endgroup}
Решение локальное:
\section[Текст для содержания]{\raggedright Текст для\\ основного документа}
Задача: получить заголовки без переносов слов, с верхним регистром в тексте и без оного — в содержании.
Источник: alex__, с gentoo.ru
\makeatletter
\renewcommand{\l@section}{\@dottedtocline{1}{0.4cm}{0.4cm}}
\renewcommand{\thesection}{\arabic{section}}
\renewcommand{\section}{\@startsection{section}{1}{1.25cm}{-3.5ex plus -1ex minus -.2ex}{2.3ex plus.2ex}{\raggedright\normalfont\bfseries}}
\makeatother
%Оформление подразделов
\makeatletter
\renewcommand{\l@subsection}{\@dottedtocline{2}{0.8cm}{0.8cm}}
\renewcommand{\thesubsection}{\arabic{section}.\arabic{subsection}}
\renewcommand{\subsection}{\@startsection{subsection}{2}{1.25cm}{-3.5ex plus -1ex minus -.2ex}{2.3ex plus.2ex}{\raggedright\normalfont\bfseries}}
\makeatother
%Оформление под-подразделов
\makeatletter
\renewcommand{\thesubsubsection}{\arabic{section}.\arabic{subsection}.\arabic{subsubsection}}
\renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{1.25cm}{-3.5ex plus -1ex minus -.2ex}{2.3ex plus.2ex}{\raggedright\normalfont}}
\makeatother
\makeatletter
\newcommand{\Section}[1]{
\refstepcounter{section}
\section*{\MakeTextUppercase{\arabic{section} #1}}
\addcontentsline{toc}{section}{\arabic{section} #1}
}
\makeatother
Решение локальное:
\section[Текст для содержания]{ТЕКСТ ДЛЯ \\ ОСНОВНОГО ДОКУМЕНТА}
Оба решения, конечно, при желании можно преобразовать и в глобальные макросы, которые достаточно будет однократно включить в преамбулу документа, но это тоже будет лишняя возня и затраты времени. К тому же не факт, что ваш макрос не сможет корректно обработать именно ваши заголовки благодаря наличию в них каких-либо хитрых моментов в виде, скажем, греческих букв или, не к ночи будь помянуты, математических выражений.
До сих пор практически не разбираюсь в макросах TeX (а приведённые выше нагромождения кода — и вовсе тёмный лес), и всегда успешно обхожусь более чем стандартными командами и классами. Единственное стороннее в моих конфигурациях miktex и texlive — те самые шрифты PsCyr, и то не всегда в них есть необходимость.
В качестве аналога проблемы приходит в голову извечное балансирование между написанием собственных реализаций каких-либо алгоритмов и использованием готовых библиотек. Даже аргумент, что исследователю виднее, какие нюансы могут образоваться в его задаче, и соответственно, его код будет их учитывать — далеко не всегда корректен. Во многих библиотеках практически всё уже учтено. Самые стандартные алгоритмы настолько хорошо испытаны, что ограничения на их применение уходят в математику, а не в ошибки реализации.
Так вот, вопрос. Риторический. Зачем изобретать велосипеды, если есть поистине элементарные в использовании и отлаженные средства? Тратить имеющийся выраженный потенциал на решение обыденных вопросов, упуская возможность оставить его побольше там, где он действительно необходим?