Усложнение жизни в LaTeX

    При вёрстке дипломной работы в LaTeX настал этап приведения её вида в соответствие хотя бы некоторым принятым стандартам. Соответственно, начались и поиски решения возникавших вопросов, в том числе стандартными средствами, то бишь путём гугления.

    Первая мысль, возникшая после просмотра решений, найденных на разношёрстных форумах — «Я же не усну». Немного размышлений и оперативное пролистывание небезызвестных руководств Балдина, Сюткина и Львовского, подтвердивших результаты размышлений, позволили разобраться с вопросами гораздо более компактными, удобными и воспринимаемыми способами.

    А примеров того, как лучше не делать, приведу два. Честно, они очень порадовали, т.к. свидетельствуют об изобретательности и энергичности их создателей.

    Задача: получить заголовки без переносов слов, полностью выровненные по левому краю.
    Источник: 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, и то не всегда в них есть необходимость.

    В качестве аналога проблемы приходит в голову извечное балансирование между написанием собственных реализаций каких-либо алгоритмов и использованием готовых библиотек. Даже аргумент, что исследователю виднее, какие нюансы могут образоваться в его задаче, и соответственно, его код будет их учитывать — далеко не всегда корректен. Во многих библиотеках практически всё уже учтено. Самые стандартные алгоритмы настолько хорошо испытаны, что ограничения на их применение уходят в математику, а не в ошибки реализации.

    Так вот, вопрос. Риторический. Зачем изобретать велосипеды, если есть поистине элементарные в использовании и отлаженные средства? Тратить имеющийся выраженный потенциал на решение обыденных вопросов, упуская возможность оставить его побольше там, где он действительно необходим?

    Комментарии 31

      +1
      Спасибо за подборку, будет как раз необходим в скором будущем.
      Что касается вопроса — для меня это не меньшая загадка: в LaTeX есть режимы написания книг, статей, писем. Казалось бы, что еще нужно для написания дипломной работы. Но нет, здравствуй ГОСТ!

      Как говорится: «придумано умными людьми для умных людей»; пользуйся и радуйся, можешь попробовать улучшить. Так нет, у нас свой велосипед, и пофиг.
        +4
        Опять же, всем требованиям ГОСТов можно удовлетворить, подключив пару-другую дополнительных пакетов, не городя огороды команд, скопированных из файлов *.sty

        А также не разбираясь с установкой и применением сторонних пакетов. Кто-то может счесть это камушком в огород очень успешного и широко применяемого класса disser, но, честно говоря, два года назад, при написании бакалаврского диплома, было крайне лениво разбираться со всеми его нюансами и установкой, а сейчас и вовсе не наблюдаю в нём необходимости. Хотя в третьем порядке круга общения есть личности, прекрасно его освоившие.

        Проблема, конечно, в том, чтобы распознать, какие именно пакеты для каких элементов оформления следует подключить и как их корректно использовать. Однако, поиск, желательно в англоязычном интернете и беглый просмотр пользовательских руководств, а уж тем более их прочтение, легко снимают большинство вопросов.
          +6
          Нормальный учебное заведение должно либо предоставлять свои готовые стилевые файлы для латеха (как это делают конференции), либо не придираться с оформлением, я считаю.
            +3
            Увы, в большинстве учебных заведений не знаю о существовании LaTeX. У нас на сайте СибГУТИ были только заготовки под титульный и другие необходимые листы для вложения. Всё это было в ворде. Да ещё и под титульным обнаружился второй слой с немного другим титульником :-D
            Методички тоже качеством не отличались. Одну методичку весом аж в 20 с лишним мегабайт удалось сократить до 1,5 мегабайт только путём сохранения в формате odt :-D Правда немного постарадало оформление. Для некоторых методичек приходилось гонять Windows в Virtualbox с установленной читалкой для Word, т.к. съезжали рисунки и некоторые формулы. Догадываюсь, что набирали эти методички студенты.
            Одно жаль — разобрался с LaTeX слишком поздно. Успел сделать на нём только одну контрольную работу и диплом. Ну а сейчас он мне как бы и не нужен.
          +2
          Попробуйте пакет eskd. Я два года назад попилил немного под наши требования, сейчас о оформлении забыл. Вот только разве по шрифтам говорили, кажется у вас не Times New Roman, но курсовые не заворачивали. С дипломом, надеюсь, тоже прокатит.

          \documentclass[a4paper,14pt,russian,pointsection]{eskdtext}
            +1
            У нас особо не придирались к оформлению. Хватило eskdx — blog.tavda.net/2011/03/latex.html
            +1
            В процессе долгого и плотного общения с латексом, я пришел для себя к выводу, что лучше конкретные проблемы решать конкретными лекарствами, не нагромождая код макросами, в которых не понимаю сам, и которые при девиантном поведении у меня не будет ни малейшей возможности исправить :)
            Например, с переносами в заголовках делаю только так, как вы и предложили под названием локальное решения. То же самое с другими проблемами, которых тысячи (правильные подписи к рисунками и таблицам, и много чего еще). Если есть действительно простой renew, который я понимаю, и который работает устойчиво — пожалуйста, если нет — я лучше ручками все отформатирую.
              –1
              Вы наверное и в Word документы пробелами форматируете? ;-)
                +1
                у вас есть возражения, или вы так, попетросянить?)
              +1
              а я пытался, но так и не смог осилить этого мегамонстра…
                0
                Первые шаги, действительно, времени требуют изрядно. Не времени в смысле потраченных дней, а времени, в течение которого можно спокойно, не отвлекаясь, сесть и разобраться. Осваивал его летом между третьим и четвёртым курсами путём переписывания курсовой работы из .doc. Благо работы тогда особой не было.
                  +1
                  пытался во время основной работы, когда надо было писать статьи. сразу брал и делал разбираясь попутно. что-то в голове конеш осталось, но чтобы начать пользоваться полноценно — нужен не один год постоянного опыта. основная причина отказа — так и не смог разобраться с графикой. когда много разных картинок в силу разных причин в разных форматах — как-то оно не переваривает нормально, половину не отображает.
                  в качестве настольной книги была «LaTex 2e по-русски. Настольная издательская система» котельникова. весьма недурственная.
                    0
                    Графика отлично вставляется, если это postscript)
                    Что вы подразумеваете под «пользоваться полноценно»? Если не пытаться изменить стандартное оформление, полноценно пользоваться можно начать очень быстро. Никто почему-то не жалуется на сложность wiki-разметки, а по-сути это тоже самое.
                      0
                      пользоваться полноценно — это значит делать верно средствами системы то, для чего она предназначена. немного поясню: кто-то может делать отступы в тексте пробелами, а кто-то табами. ессесно идеалогически верный вариант будет второй, в то время как человеку начинающему, будет не совсем понятно, почему использование табов идеологически правильное.
                        0
                        > Графика отлично вставляется, если это postscript)

                        Только не в pdf! )) Но в этом случае прекрасно работает вставка рисунков в jpg / png или, как бы рекурсивно ни звучало, pdf.
                          0
                          Что значит только не в pdf? сначала преобразовать картинку в ps, потом скомпилировать в dvi и конвертировать в pdf.
                            0
                            А pdflatex зачем же тогда, пардон?
                            0
                            Я всегда в pdf перегонял из ps. За давностью лет уже не помню, но кажется при такой технологии изготовления все равно получается сделать в pdf оглавление (которое показывается в отдельной панели и позволяет прыгать в нужный раздел док-та), а большего мне никогда не требовалось.
                      0
                      По интернету прокатилось было статья одного разработчика (и на хабре, вроде, тоже была), который думал — почему бы не перенести TeX/LaTeX/TeX Live на iOS, в частности, под айпад. Вывод неутешительный: надо срочно переписывать и вычищать основное, выкидывать ненужное, иначе через лет пять там будет 10-гигабайтный монстр, работающий через оконачтельную пень-колоду со скоростью улитки
                        0
                        я недавно знакомой с журфака помогал сделать диплмо в техе :)
                        правда, она лишь текст форматировала, а компиляцией/сборкой я занимался
                        –11
                        Троллейбус из буханки.jpg
                          +3
                          Делал в LaTeX-е договоры, с pdf forms и преобразованием в pdf, когда весь текст в read-only и защищен цифровой подписью, а люди только заполняют нужные поля типа реквизитов, сроков оплат, адресов для уведомлений и т.п.
                          Ох я и настрадался :-) Элементарные, казалось бы, вещи, через такие мегаизвраты делаются в итоге.
                          IRC канал #latex страдал от моих вопросов. Но ничего, сделал всё. Вторым этапом хотел навороченные PDF forms, когда нужные значения выбираются из списка, валидируется весь ввод, автоматически отправляется по почтё договор и еще миллион плюшек, которые можно сделать с помощью pdf forms, но как-то времени уже нет доделать.
                            0
                            Народ, подскажите, раз пошла такая пьянка.
                            Юзаю класс документа extarticle. Как сделать, чтобы заголовки разделов не были конскими?
                              +3
                              О, вот как раз после написания поста этим занимался. Если правильно понял терминологию, речь о размерах шрифта? :)

                              Пакет titlesec в помощь, оказался крайне удобным.

                              \usepackage{titlesec}
                              
                              % зашитые в нём шаблоны оформления заголовков
                              % скопировано из руководства
                              % что есть что - подробно не вдавался, но всё можно варьировать
                              % команда пишется в преамбуле
                              
                              \titleformat{\chapter}[display]{\normalfont\huge\bfseries}{\chaptertitlename\ \thechapter}{20pt}{\Huge}
                              
                              \titleformat{\section}{\normalfont\Large\bfseries}{\thesection}{1em}{}
                              
                              \titleformat{\subsection}{\normalfont\large\bfseries}{\thesubsection}{1em}{}
                              
                              \titleformat{\subsubsection}{\normalfont\normalsize\bfseries}{\thesubsubsection}{1em}{}
                              
                              \titleformat{\paragraph}[runin]{\normalfont\normalsize\bfseries}{\theparagraph}{1em}{}
                              
                              \titleformat{\subparagraph}[runin]{\normalfont\normalsize\bfseries}{\thesubparagraph}{1em}{}
                              


                              Собственно, синтаксис \titleformat примерно таков (указываю только то, что на данный момент понял, если кто более осведомлён — прошу поправить):
                              \titleformat{\класс раздела}[???]{шрифт, размер, начертание}{текст заголовка, номер раздела}{отступ после заголовка}{???}
                              


                              В частности, для уменьшения заголовков глав до размера \Large строчка была написана такая:
                              \titleformat{\chapter}[display]{\normalfont\Large\bfseries}{\chaptertitlename\ \thechapter}{20pt}{\Large}
                              
                                0
                                Самое то, спасибо огромное!
                                  0
                                  И меня спасли! Нашел этот комент в гугле по запросу «Latex шрифты заголовков глав и разделов» :-))
                                +4
                                Не знаю, уместно здесь это будет или нет, но имеется реализация стандарта ГОСТ 7.32–2001 для LaTeX. В своё время этот шабор стилей разрабатывался ребятами из Бауманки.
                                  +1
                                  Есть еще пакет Disser (http://sourceforge.net/projects/disser/).
                                  Он хоть и в основном для диссертаций, но для дипломной работы пойдет.
                                    0
                                    К тому же в нём есть опции именно для написания дипломов, работ бакалавров и диссертаций магистров, помнится. Да и даже шаблоны курсовых. Разобраться только в определённой мере.
                                    0
                                    Я неделю назад защитил диплом, сделанный в latex. Стоит заметить, что я живу в Харькове (Украина) и у нас тут каша над российскими гостами. Взял за основу Vakthesis, допилил до состояния, когда у меня на кафедре перестали придираться (хотя, в итоге ни на российский гост не похоже, ни на украинский...) и выложил на github отдельно стиль и отдельно свой диплом, как пример использования. :)
                                      0
                                      % Спасибо, luitzen
                                      Пожалуйста :-)

                                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                      Самое читаемое