5/09/2011

Оглавление и нумерация глав в LaTeX

Оглавление и нумерация разделов настраивается довольно просто в LaTeX, однако информация об этом разбросана по сайтам и книгам, которые искать вновь каждый раз лениво. Этот пост есть небольшая коллекция трюков на эту тему.

Подробность оглавления
По умолчанию в оглавлении отображается chapter, section и subsection. Почти всегда этого достаточно, однако время от времени хочется отобразить в оглавлении больше или меньше информации. Это легко настроить с помощью команды в преамбуле (до \begin{document}):
\setcounter{tocdepth}{n} %%where n is the level, starting with 0 (chapters only)
По умолчанию n=2, другие параметры это:
n=4 это chapter, section, subsection, subsubsection и paragraph;
n=3 это chapter, section, subsection и subsubsection;
n=2 это chapter, section, и subsection;
n=1 это chapter и section;
n=0 это chapter.
Однако это распространяется на весь документ сразу, и это может быть неудобно: если в документе есть Appendix, то отображать в оглавлении его subsections совсем не обязательно.

Для этого есть пакет tocvsec2 который позволяет нам менять уровень отображения разделов там, где нам надо. Например, если мы хотим в первой главе поменять подробность оглавления до section, в первой главе (внутри документа) пишем:
\settocdepth{section}
Уровень подробности останется тем же до следующей команды \settocdepth. Например, в Appendix я не хочу отображать подразделы вовсе:
\settocdepth{chapter}
После этого наше оглавление выглядит так, как мы того хотели.


Как переименовать оглавление в LaTeX?
Иногда нужно переименовать "Оглавление" во что-нибдудь другое. Несложное действие само по себе, но дабы не гуглить, есть готовый рецепт:
\renewcommand\contentsname{Projects List} %%% renaming the Table of Contents
вставить это в преамбулу документа, то есть до \begin{document}
Команда переименует Table of Contents в Projects List.

Как сделать главу в тексте без номера, но чтобы она была указана в Оглавлении?
Если нужно сделать так, чтобы заголовок главы состоял исключительно из её названия, но глава присутствовала бы в оглавлении, выкрутиться можно так:
\chapter*{Библиография}
\addcontentsline{toc}{chapter}{Библиография}
Первое вырубает номер главы и слово ГЛАВА. Второе добавляет оное в оглавление, но без номера.


Как начать новую главу без новой страницы?
Обычно если вы начинаете в LaTeX документе новую главу, она начинается с новой страницы. Но если очень нужно, чтобы глава начиналась на той же странице в ЛаТеХ-документе? Это можно сделать с помощью переопределения команды \chapter{} в преамбуле документа так:

\makeatletter %%%%% <---- Starting chapter without a pagebreak
\renewcommand\chapter{\par%
\thispagestyle{plain}% \global\@topnum\z@
\@afterindentfalse \secdef\@chapter\@schapter}
\makeatother
%%%%% <---- Starting chapter without a pagebreak
После этого глава будет начинаться на той же странице. Рецепт взят отсюда, ссылкой поделился Профиль БлоггераMinoru, за что ему огромное спасибо.



Римские цифры в оглавлении
Для любителей старины можно сделать в ЛаТеХ римские цифры в оглавлении. Для этого добавляем в преамбулу следующий код:
\renewcommand{\thesubsection}{(\roman{subsection})}
\renewcommand{\thesubsubsection}{\roman{subsection}.}
и наслаждаемся суровыми римскими цифрами в Subsections.

Обратно переопределить главу или раздел в арабские цифры можно следующим кодом в преамбуле: 
\renewcommand{\thechapter}{\arabic{chapter}}\renewcommand{\thesubsection}{\arabic{section}\arabic{subsection}}
Больше узнать о переопределении можно здесь.


Поставить точку в названии главы или раздела в ЛаТеХ
Команда \renewcommand может переопределять формирование главы, разделов и подразделов - так можно ставить или убирать точки в названиях разделов в LaTeX. Вот код, который нужно вставить в преамбулу документа:
\renewcommand{\thechapter}{\arabic{chapter}.}\renewcommand{\thesubsection}{\arabic{section}.\arabic{subsection}.}
Красным выделены точки - они-то и будут вставлены в название. Другие варианты на примере названий разделов:
  • \arabic{section}  -> арабские цифры (1,2,3....)
  • \roman{section}  -> римские цифры (I, II, III..)
  • \alph{section}     -> буквы (a, b, c...)
 Больше о возможностях переопределения написано тут.


Нумерация подразделов: subsection depth
Есть в нашем документе, скажем, \subsubsubsection{Замечание о кроликах} и мы хотим его занумеровать по разным причинам. Запросто! Добавляем в преамбулу параметр:
\setcounter{secnumdepth}{3}
и это позволит занумеровать subsubsections в тексте.


О счётчиках в LaTeX
Вообще, в ЛаТеХе есть множество счётчиков, которые и используются для нумерации глав, рисунков, таблиц и всего остального. Оными счётчиками можно управлять вручную, ежели знать как. Например, следующие команды имеют счётчики (counter):
  • part
  • chapter
  • section
  • subsection
  • subsubsection
  • paragraph
  • subparagraph
  • page
  • equation
  • figure
  • table
  • footnote
  • mpfootnote
  • enumi
  • enumii
  • enumiii
  • enumiv
У нас есть много возможностей для управления этими счётчиками, например:
\addtocounter{counter}{value} увеличивает указанный счётчик counter на значение value.

\newcounter{newcounter}[oldcounter] создаёт новый счётчик newcounter; опция нужна для связывания старого счётчика oldcounter и нового newcounter.

\setcounter{counter}{value} устанавливает счётчик counter в заданное значение value.

\value{counter} выдаёт значение счётчика counter и вообще полезная команда для разного рода арифметических операций со значениями счётчиков.

\renewcommand{cmd}[args][opt]{def} общая команда для создания или переопределения новых команд.
Это позволит вытворять разные полезные фокусы со счётчиками в латехе.

43 комментария:

  1. Ещё полезно было бы написать как сделать нумерацию глав, секций и прочего не с 0, а с 1.

    ОтветитьУдалить
  2. @librarian комментирует...
    Ещё полезно было бы написать как сделать нумерацию глав, секций и прочего не с 0, а с 1.
    Если честно, не понял вопроса. Если не хочется вставлять chapter перед одинокой section, тогда может помочь это. Оно?

    Добавил в пост ещё римские цифры. Мало ли, пригодится. Просто у скубентов сейчас пора дипломов, что отражается на стремительно возросшем числе заходов на мой пост Как сделать диплом в ЛаТеХе?

    ОтветитьУдалить
  3. Привет!

    n=4 это chapter, section, subsection, subsubsection and paragraph
    n=3 это chapter, section, subsection, subsubsection
    n=2 это chapter, section, subsection,
    n=1 это chapter, section,
    n=0 это chapter,


    «And» заменить на «и», в конце каждого пункта поставить точку с запятой (или оставить запятые, но тогда нужно поправить первые два пункта — там в конце ничего нет).

    Команда переименует Table of Contents в Project List.

    В Projects List. В коде так, по крайней мере.

    Кстати, я бы ещё добавил трюк с удалением перевода страницы перед каждой главой вот отсюда. Я вот как раз недавно с такой потребностью столкнулся, думаю, и другим было бы полезно.

    ОтветитьУдалить
  4. @Minoru комментирует...
    «And» заменить на «и», в конце каждого пункта поставить точку с запятой
    Ну ни фига ж себе ты суров, тааиищщ Редактор :-) Ну просто быка за рога! Сейчас я вот к тебе в комменты прийду отрываться :-)

    Но по делу. Исправлено.

    В Projects List. В коде так, по крайней мере.
    Пофиксено.

    Кстати, я бы ещё добавил трюк с удалением перевода страницы перед каждой главой вот отсюда.
    Минору, а я вот сам навскидку не помню такой приём. Может добавишь в комментах? Я всегда думал, что это встроенная фича.

    ОтветитьУдалить
  5. @virenc Оно?
    Ага, вроде оно самое.

    ОтветитьУдалить
  6. @librarian комментирует...
    Ага, вроде оно самое.
    Как-то криво там написано. Очень уж красноглазо. Порывшись в своих заметках, нашёл про счётчики и запостил в пост. Спасибо, librarian, за наводку.

    ОтветитьУдалить
  7. Михаил, во-первых хочу сказать, что мне Ваш блог всё больше нравится :)
    А во-вторых, нет ли у Вас случайно распиленной функции \chapter? :)
    А то я хочу, чтобы заголовок главы состоял исключительно из её названия (например, "Краткий обзор важнейших работ по выбросам", как у меня), вместо конкатенации его с "Глава n.", но ручками переписывать в \renewcommand не хочется, так как предчувствую, что сразу начнутся конфликты с \tableofcontents, а дедлайн с дипломом не оставляет времени играться, хоть в мирное время я и был самый большой любитель :)

    PS. \chapter[optional]{title} пробовал, optional не работает

    ОтветитьУдалить
  8. @Лев комментирует...

    Михаил, во-первых хочу сказать, что мне Ваш блог всё больше нравится :)
    Ну, я очень рад, и всё такое. Тут вообще нахаляву много чего выкладывают, чего в других местах нету :-)

    А во-вторых, нет ли у Вас случайно распиленной функции \chapter?
    В моих загашниках постов блога aka drafts чего только нет: начиная от настройки Самбы и заканчивая рабочей теорией холодного термоядерного синтеза :-) Так что оставайтесь на нашей волне, да :-)

    А то я хочу, чтобы заголовок главы состоял исключительно из её названия
    Ммм... ну я всегда выкручивался так:

    \chapter*{Краткий обзор важнейших работ по выбросам}
    тут по выбросам.
    \addcontentsline{toc}{chapter}{Краткий обзор важнейших работ по выбросам}

    Первое вырубает номер главы и слово ГЛАВА. Второе добавляет оное в оглавление, но без номера. Это оно? Если да - добавлю в пост. Я от такого маразма уже отвык в загнивающем Западе :-)

    а дедлайн с дипломом не оставляет времени играться
    Да я уж понял.
    Отпишитесь в комментах, Лев, если оно работает и это то, что вы искали.

    ОтветитьУдалить
  9. Ну..это почти то, что я хотел..спасибо. В крайнем случае при окончательной сшивке диплома так и сделаю.

    А вообще вот какую функцию хотел:
    - так же изменяет счётчик chapter (или аналогичный)
    - имеет то же оформление в оглавлении, что и \chapter
    + при этом в начале главы отображается не "Chapter $Chapternumber. $Chaptername", а "$Chaptername"
    - и это делается автоматически, без дописывания руками каждый раз строчки наподобе \addcontentsline{toc}{chapter}{2 \indent Краткий обзор важнейших работ по выбросам} в оглавление (к тому же, такого же отступа я пока не добился, \indent мне не помог.)

    Что пока сделал с Вашей подсказкой:
    - вместо \chapter{} написал \chapter*{} в инициализации главы (убил упоминание этой главы в оглавлении, как в Библии написано; теперь название, написанное в {}, отображается в начале главы непосредственно (без конкатенации с "Глава 2. "))
    - добавил в хидер (index.tex) перед инклюдом файла с главой строчку: \addcontentsline{toc}{chapter}{2 \indent Краткий обзор важнейших работ по выбросам}

    Что пока получил с Вашей подсказкой:
    - возможность вручную указать, что написано в начале главы (тот самый пресловутый "$Chaptername")
    - возможность вручную указать, как называется строчка в оглавлении

    Если бы был распиленный код функции \chapter и можно было бы в нём поменять буквально одно место: что выводится в документ при вызове этой функции... ;)

    ОтветитьУдалить
  10. Ура! Почитал Львовского, нашёл, заработало!

    \makeatletter % эта строка НЕОБХОДИМА!
    \renewcommand{\@chapapp}{Glava} % необязательная строчка.
    % определяет значение \@chapapp (используется ниже)
    \renewcommand{\@makechapterhead}[1]{% Начало макроопределения
    \vspace*{50 pt}% Пустое место вверху страницы
    {\parindent=0pt
    \raggedright \normalfont\huge\bfseries
    \@chapapp{} % \@chapapp печатает слово "Glava" (см. выше)
    % вот эту строку
    \thechapter \par % номер главы - в отдельной строке
    % и ещё вот эту я убрал, и у меня наступило ШЧАСТЬЕ
    % \thechapter -- печать счётчика глав; \par -- насильственно
    % закончить абзац
    \vspace{20 pt} % между словом "Glava" и ее заголовком
    % и ещё эту строчку я грохнул, ибо нефиг
    \normalfont\Huge\bfseries #1\par % заголовок главы
    \nopagebreak % чтоб не оторвать заголовок от текста
    \vspace{40 pt} % между заголовком и текстом
    }% конец группы.
    }% конец макроопределения
    \makeatother % эта строка НЕОБХОДИМА!

    ОтветитьУдалить
  11. >> Кстати, я бы ещё добавил трюк с удалением перевода страницы перед каждой главой вот отсюда.
    > Минору, а я вот сам навскидку не помню такой приём. Может добавишь в комментах? Я всегда думал, что это встроенная фича.


    Дык это, «вот отсюда» — это ссылка на приём (второй листинг). Я его как раз недавно юзал, работает.

    И это ни разу не встроенная фича — я обгуглился уже рецепт искать. Впрочем, насколько я понял, есть стили, которые сразу это делают, но report, увы, не таков.

    ОтветитьУдалить
  12. Пожалуйста , просветите, как сделать двух уровневую нумерацию рисунков. Т.е. тех выдает автоматом Рис.1 , Рис.2 и т.д., а мне надо Рис.8.1, Рис.8.2 и т.д. Заранее спасибо!

    ОтветитьУдалить
  13. Рекомендую рассмотреть использование пакетов "titlesec" и "titletoc".

    ОтветитьУдалить
  14. @Лев комментирует...
    Ну..это почти то, что я хотел..спасибо.
    Пожалуйста.

    Если бы был распиленный код функции \chapter и можно было бы в нём поменять буквально одно место
    Переписывать стиль ради одной функции это значит потратить минимум полдня. Лев, оно того не стоит :-)


    Ура! Почитал Львовского, нашёл, заработало!
    Вот что сила документации делает! :-)


    @Minoru комментирует...
    Дык это, «вот отсюда» — это ссылка на приём (второй листинг). Я его как раз недавно юзал, работает.
    О, круто! Только что проверил - полезная штука, работает. Добавил в пост.


    @Starodubss комментирует...
    Пожалуйста , просветите, как сделать двух уровневую нумерацию рисунков.
    Starodubss, у меня подписка энтерпрайзная в гугле кончилась :-)
    Кстати, в disser оно вроде так по дефолту и делает. Там ниже Анонимус предлагает решение.

    @Анонимный комментирует...
    Рекомендую рассмотреть использование пакетов "titlesec" и "titletoc".
    Спасибо, Анонимус, за интересные ссылки на пакеты.

    ОтветитьУдалить
  15. Не знаю почему, но переименовать оглавление я смог только такой командой:
    \AtBeginDocument{\renewcommand\contentsname{Another title for the Table of Contents}}
    Просто \renewcommand\contentsname{Another title for the Table of Contents} не срабатывало.

    ОтветитьУдалить
  16. а какой командой можно нумеровать формулы ?

    ОтветитьУдалить
  17. привет всем)) пишу диплом в техе и пытаюсь самостоятельно разобраться в командах. С трудом, но получается)) (просто это не моя стихия). Проблема в том, что не получается создать верно оглавление и список литературы(( Просьба-если можно выложите примеры.. буду признательна Вам))

    ОтветитьУдалить
  18. Привет. Формулы нумеровала так:
    \begin{equation}
    \text{НДФЛмес} ={\text{Зповр мес}}*{\text{13\%}}
    \end{equation}

    ОтветитьУдалить
  19. Есть такая проблема: Надо выровнить нумерацию в содержании и поменять шрифт section на прописные буквы (прописные буквы должны быть и в содержании и в самом тексте). Пожалуйста помогите =) Заранее спасибо!

    ОтветитьУдалить
  20. Приветствую всех!
    Скажите пожалуйста, как сделать так чтобы раздел в тексте отображался без точки между номером и заголовком, т.е.
    Не так:
    1. Теория
    А вот так:
    1 Теория

    ОтветитьУдалить
  21. Подскажите, как изменить стиль и сделать так, чтобы в Оглавлении отображалось:
    - Глава 1. Название главы
    - $(Параграф это) 1.
    - 1.1 название пункта...

    ОтветитьУдалить
  22. Нашел некоторые полезные штучки по теме. Вот может кому пригодятся!

    \makeatletter % Эти две строки переопределяют нумерацию
    \def\@biblabel#1{#1. } % литературы, типа она будет [1],
    % а 1. с пробелом после точки.

    А вот эти штуки переименовывают, если их добавить
    после \begin{document}:

    \renewcommand{\chaptername}{Раздел}
    \renewcommand{\tablename}{Таблица}
    \renewcommand{\bibname}{Список использованных источников}
    \renewcommand{\contentsname}{Содержание}
    \renewcommand{\appendixname}{Приложение}

    Люди выручайте. Бился бился не могу найти инфу как уменьшить шрифт Содержания и не затронут шрифты других разделов?

    Извините что аноним, просто стиль жизни такой. Подскажите плиз ответ на мой вопрос.

    ОтветитьУдалить
  23. Проблему со шрифтом содержания решил. Оказалось все банально. Вот может кому надо будет:
    {\footnotesize\tableofcontents} % Мелкое содержание

    можно и другие шрифты использовать.
    {\small\tableofcontents} % и т.д.

    А вот так можно добавить что нибудь к содержанию
    \addcontentsline{toc}{chapter}{Литература}\include{bib}% Подключение например литературы

    Если страницы отображает не те что надо используй способ описанный выше - это верняк.

    ОтветитьУдалить
  24. Очень хотелось бы знать ответы на вопросы Андрея Гавришина и Елены Шатровой. Каким кодом все таки можно убрать или поставить точку после номера главы или раздела (что бы было так 1. или так 1 без точки) тоже самое касается отображения слова Глава или Раздел перед 1. или 1 без точки. Интересно очень если кто знает подскажите.

    Р.S. Аноним - это просто стиль жизни такой.

    ОтветитьУдалить
  25. @Анонимный комментирует...

    Очень хотелось бы знать ответы на вопросы Андрея Гавришина и Елены Шатровой. Каким кодом все таки можно убрать или поставить точку после номера главы или раздела

    Переопределением в преамбуле:


    \renewcommand{\thechapter}{\arabic{chapter}....}

    \renewcommand{\thesubsection}{\arabic{section}.\arabic{subsection}.}


    Первая команда поставит аж целых четыре точки в названии главы. Команда \arabic будет ставить цифры.

    Интересно очень если кто знает подскажите.
    Всё для тебя, Анонимус! Много информации по ссылке. Вот даже рабочий пример:


    \documentclass[a4paper,10pt]{report}

    \title{Earth-shuttering thesis}
    \author{Anonumous}

    \renewcommand{\thechapter}{\arabic{chapter}....}
    \renewcommand{\thesubsection}{\arabic{section}.\arabic{subsection}.}

    \begin{document}
    \maketitle


    \chapter{I'm the first chapter }

    \section{First section}

    \subsection{First subsection}

    \chapter{I'm the very second chapter }


    \end{document}


    Р.S. Аноним - это просто стиль жизни такой.
    Здесь на блоге демократия, гласность и плюрализм мнений (и самодурство ведущего :-)). Анонимус из вэлком!

    ОтветитьУдалить
  26. Так, пост обновлён - я добавил немного про римские цифры и переопределение названий заголовков по многочисленным просьбам трудящихся:-)


    Я напоминаю участникам дискуссии в комментариях, что:
    1. Комментарии - часть поста, и они должны быть информативными, относиться (хотя бы отчасти) к теме поста и содержать полезную информацию
    1.1. Если вы задаёте вопрос, то автор может ответить на него не сразу - постов уже под четыре сотни, и отвечать на все вопросы автор просто не в силах.
    2. Издёвки, спам, жирный троллинг, оффтопик и переход на личности будет безжалостно удалён ведущим блога.
    2.1 призывы типа RTF n00b расцениваются как оффтопик и будут удалены - если нечего сказать по теме, не надо засорять эфир.
    3. Подразумевается, что участники относятся друг к другу уважительно, вне зависимости от чинов, учёных степеней и наличия аккаунтов. Анонимусы, регистранты и члены экипажа блога в равных условиях.

    ОтветитьУдалить
  27. @virens комментирует…

    \renewcommand{\thechapter}{\arabic{chapter}....}
    \renewcommand{\thesubsection}{\arabic{section}.\arabic{subsection}.}

    Открываем Львовского на стр.297, и вуаля — видим те же самые строки, что и приведённые здесь без ссылки на первоисточник. virens, ты таки не поверить, но люди вроде меня учили LaTeX, штудируя Львовского. На мой взгляд, это лучшая книга по LaTeX, когда-либо изданная в России. А уж азы нужно учить исключительно по ней. Кстати, приложение Е. «LaTeX в России».
    P.S. Можешь удалить и этот комментарий, но, по крайней мере, его ты прочтёшь.

    ОтветитьУдалить
  28. @iv_vl комментирует...
    Открываем Львовского на стр.297, и вуаля

    В комментах задали конкретный вопрос: как сделать точку после главы. Там не спрашивали, на какой странице Львовского это написано. Ты ответил в стиле RTFM n00b, что мной считается хамством - именно поэтому твой комент был снесён, а в пост добавлен этот трюк.

    ты таки не поверить, но люди вроде меня учили LaTeX, штудируя Львовского.

    Я тоже его читал, что не отменяет необходимости написания постов типа некого минимума для написания диплома в латехе.

    Смысл этого блога в том, чтобы содержать конкретные рецепты, а не перечитывать Львовского снова если тебе что-то нужно быстро найти.

    это лучшая книга по LaTeX

    Не знаю, как насчёт "лучшая", но во всяком случае исключительно хорошая и годная.

    азы нужно учить исключительно по ней.

    \renewcommand это нифига не азы. И этот блог - не научная статья, а походный справочник с рецептами.

    Можешь удалить и этот комментарий
    Нет, я не буду его удалять. Я объяснил, почему твой предыдущий коммент был снесён: если нечего добавить по существу беседы - не надо посылать в маны. По крайней мере нужно привести цитату и источник.

    ОтветитьУдалить
  29. @virens комментирует…
    …не отменяет необходимости написания постов типа некого минимума для написания диплома в латехе.
    Если цель книги — объяснить, как всё работает, то сборника рецептов — представить рабочий вариант. Может сделать стилевой пакет? Так хоть сразу поставил и проверил, насколько эти рецепты подходят для диплома. А то в гугле отбоя нет от «просто рецептов», и у каждого автора они свои. А ответа на вопрос, почему нужно доверять конкретному рецепту, как с комсомольца на допросе, с автора не вытянуть. В конце-концов, в отличие от гуманитария, человек технический не должен просто заучивать рецепты.

    Не знаю, как насчёт "лучшая", но во всяком случае исключительно хорошая и годная.
    Сейчас азы уже не учат, а учат подключать тот или иной стилевой пакет, пример тому — «LaTeX в России» Балдина. Кому-то такой подход ближе, но это опять же на тему оформления рецептов в стилевой пакет. Кстати, ты принципиально не ставишь ссылки на первоисточники? (например, ту ссылку на Львовского, что я давал раньше.) С трудом верится, что никого книга не заинтересует, а нужны только рабочие рецепты. Видимо, от жизни я поотстал.

    ОтветитьУдалить
  30. К готовым рецептам:
    \makeatletter
    \def\@seccntformat#1{\csname the#1\endcsname.\ } % точка после номера раздела
    \def\@biblabel#1{#1.} % формат номеров в списке литературы
    \makeatother

    При этом меняется только отображение заголовка. В случае же переопределения \thesection и тп точка появится также при ссылках (В разделе \ref{s:proof} мы доказываем...), а это не совсем то что нам нужно

    ОтветитьУдалить
  31. Добрый день, Михаил. Подскажите пожалуйста, как убрать точки между главой и номером страницы.

    Глава. . . . . . . . . . . . . . . . . . . . . . . . . 4

    Я недавно занимаюсь латехом, и даже не представляю в какую сторону капать. Спасибо)

    ОтветитьУдалить
  32. @Юрий Шукуров комментирует...
    Подскажите пожалуйста, как убрать точки между главой и номером страницы.

    Ответил постом на Лунодроме по этой ссылке. Вообще настоятельно рекомендую внести в закладки http://tex.stackexchange.com <-- там много чего можно найти.

    даже не представляю в какую сторону капать.
    Капать не надо, а копать стоит в сторону tex.stackexchange.com - без шуток, он меня выручает постоянно.

    ОтветитьУдалить
  33. А как изменить выравнивание из такого
    https://dl.dropboxusercontent.com/u/59069601/1.png
    в такое
    https://dl.dropboxusercontent.com/u/59069601/2.png

    второй день ломаю голову.
    пример кода
    https://dl.dropboxusercontent.com/u/59069601/diplom.tex

    Заранее очень благодарен.

    ОтветитьУдалить
  34. Здравствуйте, вот у меня проблема возникла. Хочу нумеровать разделы, добавив слово "Семинар".
    Делаю это так:
    \renewcommand{\thesection}{\arabic{section}.}
    \renewcommand{\section}{\@startsection{section}{1}{0pt}{3.5ex plus -1ex minus -.2ex}{2.3ex plus.2ex}{\textsc\Large\bfseries{Семинар }}}%насколько я из Львовского понял

    В итоге все нормально нумеруется, но слово Семинар появляется и при слове Содержание, что как-то бредово. Как бы это можно грамотно исправить?

    ОтветитьУдалить
  35. Здравствуйте.
    Кто-нить сталкивался с проблемой, когда оглавление занимает больше одной страницы, а нумерация страниц не учитывает этого при генерации номеров страниц в оглавлении? Например, при генерации оглавления "Введение" помещается на 3 страницу, а введение в тексте находится на 4, т.к. само оглавление занимает 2 страницы. В случае, если оглавление умещается на 1 страницу, проблем не возникает.
    Заранее спасибо.

    ОтветитьУдалить
  36. Простите. Вопрос снимается. На 4-й раз генерации все исправилось.

    ОтветитьУдалить
  37. Скажите, пожалуйста, как сделать в одном файле два оглавления: одно на русском, другое на английском?

    ОтветитьУдалить
  38. нужно расположить книгу а5 на а4, слева четные стр, справа нечетные, получается только наоборот, нужно в издательство отдать, не знаю что делать (

    ОтветитьУдалить
  39. Решил добавить свой комментарий, так как нигде не нашел описание titlesec на русском. Вдруг кому понадобится)). Просьба автору блока добавить этот комментарий в свою статью, если конечно это возможно и он еще читает комментарии)).
    Краткий обзор пакета titlesec
    Основная команда по переопределению формата рубрик:
    \titleformat{«command»}[«shape»]{«format»}{«label»}{«sep»}{«before-code»}[«after-code»]
    Здесь

    «command» --- принимает значения \part, \chapter, \section и т.д., то есть рубрику которую мы хотим изменить;

    «shape» --- несколько значений:
    1) hang – значение по умолчанию. Номер или ярлык рубрики будет на одном уровне с текстом рубрики (как в стандартном \section).
    Пример:
    \titleformat{\chapter }[ hang]{…
    получим:
    Глава 1 «Текст названия»

    2) block – печатает всю главу в блоке (абзац) без дополнительного форматирования. Полезно в центрированном названии и специальном форматировании (включая графические инструменты, такие как picture, pspicture и т.д.)
    Пример:
    не знаю, не пользовался.

    3) display – номер рубрики над тестом рубрики (как в стандартном \chapter).
    Пример:
    \titleformat{\section}[ display]{…
    получим:
    1.1
    «Текст названия»

    4) runin – оформление как в стандартном \paragraph.

    5) leftmargin – ставит заголовок на левое поле страницы. Заголовки в самом конце страницы будут перемещены на следующую, а не будут торчать на нижнем поле, т.е. длинные заголовки могут привести к незаполненной странице. Далее см. док.

    6) rightmargin – то же самое, но справа.

    6) drop – текст документа (т.е. абзац следующий за заголовком) обтекает заголовок при условии, что данный абзац длиннее чем заголовок. Если нет, они перекрываются. Комментарии в leftmargin, применимы и здесь.

    7) wrap – похож на drop. Разница лишь в том, что пространство, отведенное в drop на заголовок является фиксированным, а в wrap автоматически доводят до самой длинной строки. Есть ограничения (см. док.)

    8) frame – вроде display, но заголовок окружен рамкой.

    Внимание, если не задавать [«shape»], тогда он примет значение по умолчанию (hang). Например если написать
    \titleformat{\chapter}{\normalfont…
    то номер главы будет на одном уровне с текстом названия главы.

    ОтветитьУдалить
  40. Продолжение, ибо в один коммент не помещается)).

    {«format»} --- форматирование применяемое на весь заголовок (номер и текст). Или код, применяемый до заголовка, например рисование линии над заголовком (см. пример ниже) и т.д. Здесь можно применить команды: \filcenter – выравнивает заголовок по центру, \filright – выравнивает слева, \filleft – выравнивает справа (почему так х.з.)).

    {«label»} --- код до номера заголовка (на одном уровне с ним), форматирование номера заголовка.

    {«sep»} --- расстояние между номером и текстом заголовка (вертикальное в display, в frame – это расстояние от рамки до текста заголовка. Не должно быть равным нулю.

    {«before-code»} --- код до текста заголовка (на одном уровне с ним), форматирование текста заголовка. Если охота засунуть что то после текста заголовка, то нужно явно обраться к названию (опция explicit, к тексту обращаться как #1).
    Например:
    \usepackage[explicit]{titlesec}
    \titleformat{\section}{\normalfont\Large\bfseries}{\thesection}{0.5em}
    {\normalfont\Large\bfseries#1%
    \hspace{0.5em}\titlerule[2pt]}
    Нарисует линию толщиной 2pt до конца страницы, после заголовка (на одном с ним базовой линии) на расстоянии 0.5em.

    [«after-code»] --- код выполняемый после заголовка. Возможны ошибки или игнорирования. Доп. см. док.

    Пример. Нарисовать две линии над заголовком и одну под ним произвольной толщины.

    \titleformat{\section}
    {\titlerule[2pt]% первая линия толщиной 2pt
    \vspace{2pt}% расстояние между двумя линиями
    \titlerule[1pt]% вторая линия толщиной 1pt
    \smallskip% расстояние до заголовка
    \normalfont\Large\bfseries\filcenter }% выравниваем заголовок по центру
    {\thechapter.}% нумерация с точкой
    {1em}% расстояние между номером и текстом заголовка
    {}% не изменяем формат текста заголовка
    [{\smallskip% растояние между линией и концом заголовка
    \titlerule[1pt]}]% собственно сама линия

    Внимание на конструкцию [{\smallskip\titlerule[1pt]}]. Просто [\smallskip\titlerule[1pt]] – выдаст ошибку. Вообще говоря, так можно нарисовать произвольное количество линий.

    ОтветитьУдалить
  41. Теперь о команде по переопределению расстояния над/под/и т.д. рубриками:

    \titlespacing*{«command»}{«left»}{«before-sep»}{«after-sep»}[«right-sep»]
    \titlespacing{«command»}{«left»}{«before-sep»}{«after-sep»}[«right-sep»]

    Я так понял, основное отличие \titlespacing* от \titlespacing, то, что при \titlespacing* следующий после заголовка абзац текста не начинается с красной строки. Так что можно смело использовать \titlespacing и забыть про \indent.

    Соответственно
    «command» --- \part, \chapter, \section и т.д.;

    «left» --- расстояние от левого поля документа. Если заголовок имеет форму leftmargin, rightmargin, или drop – этот параметр устанавливает ширину заголовка. В форме wrap – максимальную ширину заголовка, в runin – абзацный отступ заголовка (к примеру можно использовать \parindent и тогда название параграфа будет начинаться с красной строки)

    «before-sep» --- вертикальное расстояние над заголовком.

    «after-sep» --- расстояние от заголовка до текста документа. Вертикальное в hang, block, и display. Горизонтальное в runin, drop, wrap и ...margin.

    [«right-sep»] --- расстояние от правого поля страницы до заголовка. Применимо только в hang, block и display.

    Полная форма задания расстояний что то вроде {2ex plus 0.1ex minus 0.2ex}. Например:
    \titlespacing{\section}{0pt}{2.5ex plus 0.1ex minus 0.2ex}{2ex plus%
    0.1ex minus 0.2ex}%
    Можно использовать конструкцию {*N} эквивалентную Nex с некоторым растяжением и сужением (х.з. каким).
    Например:
    \titlespacing{\section}{0pt}{*4}{*1.5}


    Пример. Под подраздел должен обтекаться текстом.

    \usepackage{titlesec}
    \setcounter{tocdepth}{3} %для добавления подподраздела в оглавление
    \setcounter{secnumdepth}{3} %для нумерации подподраздела

    \titleformat{\subsubsection}[wrap]% выбираем нужную форму
    {\normalfont\normalsize\bfseries\filright}% выравниваем слева
    {\thesubsubsection.}%нумерация с точкой
    {0.5em}% расстояние между номером и текстом заголовка
    {}% не изменяем формат текста заголовка

    \titlespacing{\subsubsection}{15pc}% максимальная ширина заголовка
    {2ex plus 0.1ex minus 0.2ex}% отступ сверху и снизу заголовка
    {1pc}% расстояние до текста документа

    ОтветитьУдалить
  42. Здравствуйте! Подскажите, пожалуйста, как переопределить заголовки в Содержании (и м.б. тексте) так, чтобы не выделялись жирным (это по ГОСТу)? Я использую пакет pscyr, поэтому стандартное \textbf уже не прокатит

    ОтветитьУдалить
  43. Привет! помогите,пожалуйста :)
    нужно сделать в содержании заполнитель ....... во всех строках,а то автоматически делает только для section. хотелось бы добавить и для subsection.
    спасибо!

    ОтветитьУдалить