При вёрстке дипломной работы в 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, и то не всегда в них есть необходимость.
В качестве аналога проблемы приходит в голову извечное балансирование между написанием собственных реализаций каких-либо алгоритмов и использованием готовых библиотек. Даже аргумент, что исследователю виднее, какие нюансы могут образоваться в его задаче, и соответственно, его код будет их учитывать — далеко не всегда корректен. Во многих библиотеках практически всё уже учтено. Самые стандартные алгоритмы настолько хорошо испытаны, что ограничения на их применение уходят в математику, а не в ошибки реализации.
Так вот, вопрос. Риторический. Зачем изобретать велосипеды, если есть поистине элементарные в использовании и отлаженные средства? Тратить имеющийся выраженный потенциал на решение обыденных вопросов, упуская возможность оставить его побольше там, где он действительно необходим?
