Записки дебианщика
В этом блоге публикуются заметки и решения, найденные в процессе работы, освоения и жизни в дистрибутиве Debian GNU/Linux.
Оглавление и нумерация глав в LaTeX
Оглавление и нумерация разделов настраивается довольно просто в LaTeX, однако информация об этом разбросана по сайтам и книгам, которые искать вновь каждый раз лениво. Этот пост есть небольшая коллекция трюков на эту тему.
\setcounter < tocdepth > < n >%%where n is the level, starting with 0 (chapters only)
Однако это распространяется на весь документ сразу, и это может быть неудобно: если в документе есть Appendix, то отображать в оглавлении его subsections совсем не обязательно.
Для этого есть пакет tocvsec2 который позволяет нам менять уровень отображения разделов там, где нам надо. Например, если мы хотим в первой главе поменять подробность оглавления до section, в первой главе (внутри документа) пишем:
После этого наше оглавление выглядит так, как мы того хотели.
Как переименовать оглавление в LaTeX?
Иногда нужно переименовать «Оглавление» во что-нибдудь другое. Несложное действие само по себе, но дабы не гуглить, есть готовый рецепт:
\renewcommand\contentsname
%%% renaming the Table of Contents
вставить это в преамбулу документа, то есть до \begin < document >
Команда переименует Table of Contents в Projects List.
Как сделать главу в тексте без номера, но чтобы она была указана в Оглавлении?
Если нужно сделать так, чтобы заголовок главы состоял исключительно из её названия, но глава присутствовала бы в оглавлении, выкрутиться можно так:
Первое вырубает номер главы и слово ГЛАВА. Второе добавляет оное в оглавление, но без номера.
Как начать новую главу без новой страницы?
Обычно если вы начинаете в LaTeX документе новую главу, она начинается с новой страницы. Но если очень нужно, чтобы глава начиналась на той же странице в ЛаТеХ-документе? Это можно сделать с помощью переопределения команды \chapter <> в преамбуле документа так:
\makeatletter %%%%%
\renewcommand \chapter < \par %
\thispagestyle% \global\@ topnum \z @
\@ afterindentfalse \secdef\@ chapter \@ schapter>
\makeatother %%%%%
Римские цифры в оглавлении
Для любителей старины можно сделать в ЛаТеХ римские цифры в оглавлении. Для этого добавляем в преамбулу следующий код:
и наслаждаемся суровыми римскими цифрами в Subsections.
Обратно переопределить главу или раздел в арабские цифры можно следующим кодом в преамбуле:
Больше узнать о переопределении можно здесь.
Нумерация подразделов : subsection depth
Есть в нашем документе, скажем, \subsubsubsection <Замечание о кроликах>и мы хотим его занумеровать по разным причинам. Запросто! Добавляем в преамбулу параметр:
и это позволит занумеровать subsubsections в тексте.
\renewcommand
43 комментариев: |высказаться!| RSS-лента дискуссии.|
Ещё полезно было бы написать как сделать нумерацию глав, секций и прочего не с 0, а с 1.
@librarian комментирует.
Ещё полезно было бы написать как сделать нумерацию глав, секций и прочего не с 0, а с 1.
Если честно, не понял вопроса. Если не хочется вставлять chapter перед одинокой section, тогда может помочь это. Оно?
Добавил в пост ещё римские цифры. Мало ли, пригодится. Просто у скубентов сейчас пора дипломов, что отражается на стремительно возросшем числе заходов на мой пост Как сделать диплом в ЛаТеХе?
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. В коде так, по крайней мере.
Кстати, я бы ещё добавил трюк с удалением перевода страницы перед каждой главой вот отсюда. Я вот как раз недавно с такой потребностью столкнулся, думаю, и другим было бы полезно.
@Minoru комментирует.
«And» заменить на «и», в конце каждого пункта поставить точку с запятой
Ну ни фига ж себе ты суров, тааиищщ Редактор 🙂 Ну просто быка за рога! Сейчас я вот к тебе в комменты прийду отрываться 🙂
Но по делу. Исправлено.
В Projects List. В коде так, по крайней мере.
Пофиксено.
Кстати, я бы ещё добавил трюк с удалением перевода страницы перед каждой главой вот отсюда.
Минору, а я вот сам навскидку не помню такой приём. Может добавишь в комментах? Я всегда думал, что это встроенная фича.
@virenc Оно?
Ага, вроде оно самое.
@librarian комментирует.
Ага, вроде оно самое.
Как-то криво там написано. Очень уж красноглазо. Порывшись в своих заметках, нашёл про счётчики и запостил в пост. Спасибо, librarian, за наводку.
Михаил, во-первых хочу сказать, что мне Ваш блог всё больше нравится 🙂
А во-вторых, нет ли у Вас случайно распиленной функции \chapter? 🙂
А то я хочу, чтобы заголовок главы состоял исключительно из её названия (например, «Краткий обзор важнейших работ по выбросам», как у меня), вместо конкатенации его с «Глава n.», но ручками переписывать в \renewcommand не хочется, так как предчувствую, что сразу начнутся конфликты с \tableofcontents, а дедлайн с дипломом не оставляет времени играться, хоть в мирное время я и был самый большой любитель 🙂
PS. \chapter[optional]
Михаил, во-первых хочу сказать, что мне Ваш блог всё больше нравится 🙂
Ну, я очень рад, и всё такое. Тут вообще нахаляву много чего выкладывают, чего в других местах нету 🙂
А во-вторых, нет ли у Вас случайно распиленной функции \chapter?
В моих загашниках постов блога aka drafts чего только нет: начиная от настройки Самбы и заканчивая рабочей теорией холодного термоядерного синтеза 🙂 Так что оставайтесь на нашей волне, да 🙂
А то я хочу, чтобы заголовок главы состоял исключительно из её названия
Ммм. ну я всегда выкручивался так:
а дедлайн с дипломом не оставляет времени играться
Да я уж понял.
Отпишитесь в комментах, Лев, если оно работает и это то, что вы искали.
Ну..это почти то, что я хотел..спасибо. В крайнем случае при окончательной сшивке диплома так и сделаю.
Что пока сделал с Вашей подсказкой:
— вместо \chapter<> написал \chapter*<> в инициализации главы (убил упоминание этой главы в оглавлении, как в Библии написано; теперь название, написанное в <>, отображается в начале главы непосредственно (без конкатенации с «Глава 2. «))
— добавил в хидер (index.tex) перед инклюдом файла с главой строчку: \addcontentsline
Что пока получил с Вашей подсказкой:
— возможность вручную указать, что написано в начале главы (тот самый пресловутый «$Chaptername»)
— возможность вручную указать, как называется строчка в оглавлении
Если бы был распиленный код функции \chapter и можно было бы в нём поменять буквально одно место: что выводится в документ при вызове этой функции. 😉
Ура! Почитал Львовского, нашёл, заработало!
>> Кстати, я бы ещё добавил трюк с удалением перевода страницы перед каждой главой вот отсюда.
> Минору, а я вот сам навскидку не помню такой приём. Может добавишь в комментах? Я всегда думал, что это встроенная фича.
Дык это, «вот отсюда» — это ссылка на приём (второй листинг). Я его как раз недавно юзал, работает.
И это ни разу не встроенная фича — я обгуглился уже рецепт искать. Впрочем, насколько я понял, есть стили, которые сразу это делают, но report, увы, не таков.
Рекомендую рассмотреть использование пакетов «titlesec» и «titletoc».
@Лев комментирует.
Ну..это почти то, что я хотел..спасибо.
Пожалуйста.
Если бы был распиленный код функции \chapter и можно было бы в нём поменять буквально одно место
Переписывать стиль ради одной функции это значит потратить минимум полдня. Лев, оно того не стоит 🙂
Ура! Почитал Львовского, нашёл, заработало!
Вот что сила документации делает! 🙂
@Анонимный комментирует.
Рекомендую рассмотреть использование пакетов «titlesec» и «titletoc».
Спасибо, Анонимус, за интересные ссылки на пакеты.
Не знаю почему, но переименовать оглавление я смог только такой командой:
\AtBeginDocument<\renewcommand\contentsname
Просто \renewcommand\contentsname
привет всем)) пишу диплом в техе и пытаюсь самостоятельно разобраться в командах. С трудом, но получается)) (просто это не моя стихия). Проблема в том, что не получается создать верно оглавление и список литературы(( Просьба-если можно выложите примеры.. буду признательна Вам))
Есть такая проблема: Надо выровнить нумерацию в содержании и поменять шрифт section на прописные буквы (прописные буквы должны быть и в содержании и в самом тексте). Пожалуйста помогите =) Заранее спасибо!
Приветствую всех!
Скажите пожалуйста, как сделать так чтобы раздел в тексте отображался без точки между номером и заголовком, т.е.
Не так:
1. Теория
А вот так:
1 Теория
Нашел некоторые полезные штучки по теме. Вот может кому пригодятся!
\makeatletter % Эти две строки переопределяют нумерацию
\def\@biblabel#1 <#1. >% литературы, типа она будет [1],
% а 1. с пробелом после точки.
А вот эти штуки переименовывают, если их добавить
после \begin
Люди выручайте. Бился бился не могу найти инфу как уменьшить шрифт Содержания и не затронут шрифты других разделов?
Извините что аноним, просто стиль жизни такой. Подскажите плиз ответ на мой вопрос.
Проблему со шрифтом содержания решил. Оказалось все банально. Вот может кому надо будет:
<\footnotesize\tableofcontents>% Мелкое содержание
можно и другие шрифты использовать.
<\small\tableofcontents>% и т.д.
А вот так можно добавить что нибудь к содержанию
\addcontentsline
Очень хотелось бы знать ответы на вопросы Андрея Гавришина и Елены Шатровой. Каким кодом все таки можно убрать или поставить точку после номера главы или раздела (что бы было так 1. или так 1 без точки) тоже самое касается отображения слова Глава или Раздел перед 1. или 1 без точки. Интересно очень если кто знает подскажите.
Очень хотелось бы знать ответы на вопросы Андрея Гавришина и Елены Шатровой. Каким кодом все таки можно убрать или поставить точку после номера главы или раздела
Переопределением в преамбуле:
Первая команда поставит аж целых четыре точки в названии главы. Команда \arabic будет ставить цифры.
Интересно очень если кто знает подскажите.
Всё для тебя, Анонимус! Много информации по ссылке. Вот даже рабочий пример:
\renewcommand<\thechapter><\arabic
\renewcommand<\thesubsection><\arabic
Открываем Львовского на стр.297, и вуаля — видим те же самые строки, что и приведённые здесь без ссылки на первоисточник. virens, ты таки не поверить, но люди вроде меня учили LaTeX, штудируя Львовского. На мой взгляд, это лучшая книга по LaTeX, когда-либо изданная в России. А уж азы нужно учить исключительно по ней. Кстати, приложение Е. «LaTeX в России».
P.S. Можешь удалить и этот комментарий, но, по крайней мере, его ты прочтёшь.
@iv_vl комментирует.
Открываем Львовского на стр.297, и вуаля
ты таки не поверить, но люди вроде меня учили LaTeX, штудируя Львовского.
Я тоже его читал, что не отменяет необходимости написания постов типа некого минимума для написания диплома в латехе.
Смысл этого блога в том, чтобы содержать конкретные рецепты, а не перечитывать Львовского снова если тебе что-то нужно быстро найти.
это лучшая книга по LaTeX
Не знаю, как насчёт «лучшая», но во всяком случае исключительно хорошая и годная.
азы нужно учить исключительно по ней.
@virens комментирует…
…не отменяет необходимости написания постов типа некого минимума для написания диплома в латехе.
Если цель книги — объяснить, как всё работает, то сборника рецептов — представить рабочий вариант. Может сделать стилевой пакет? Так хоть сразу поставил и проверил, насколько эти рецепты подходят для диплома. А то в гугле отбоя нет от «просто рецептов», и у каждого автора они свои. А ответа на вопрос, почему нужно доверять конкретному рецепту, как с комсомольца на допросе, с автора не вытянуть. В конце-концов, в отличие от гуманитария, человек технический не должен просто заучивать рецепты.
Не знаю, как насчёт «лучшая», но во всяком случае исключительно хорошая и годная.
Сейчас азы уже не учат, а учат подключать тот или иной стилевой пакет, пример тому — «LaTeX в России» Балдина. Кому-то такой подход ближе, но это опять же на тему оформления рецептов в стилевой пакет. Кстати, ты принципиально не ставишь ссылки на первоисточники? (например, ту ссылку на Львовского, что я давал раньше.) С трудом верится, что никого книга не заинтересует, а нужны только рабочие рецепты. Видимо, от жизни я поотстал.
К готовым рецептам:
\makeatletter
\def\@seccntformat#1 <\csname the#1\endcsname.\ >% точка после номера раздела
\def\@biblabel#1 <#1.>% формат номеров в списке литературы
\makeatother
При этом меняется только отображение заголовка. В случае же переопределения \thesection и тп точка появится также при ссылках (В разделе \ref
Добрый день, Михаил. Подскажите пожалуйста, как убрать точки между главой и номером страницы.
Я недавно занимаюсь латехом, и даже не представляю в какую сторону капать. Спасибо)
@Юрий Шукуров комментирует.
Подскажите пожалуйста, как убрать точки между главой и номером страницы.
А как изменить выравнивание из такого
https://dl.dropboxusercontent.com/u/59069601/1.png
в такое
https://dl.dropboxusercontent.com/u/59069601/2.png
второй день ломаю голову.
пример кода
https://dl.dropboxusercontent.com/u/59069601/diplom.tex
Заранее очень благодарен.
В итоге все нормально нумеруется, но слово Семинар появляется и при слове Содержание, что как-то бредово. Как бы это можно грамотно исправить?
Здравствуйте.
Кто-нить сталкивался с проблемой, когда оглавление занимает больше одной страницы, а нумерация страниц не учитывает этого при генерации номеров страниц в оглавлении? Например, при генерации оглавления «Введение» помещается на 3 страницу, а введение в тексте находится на 4, т.к. само оглавление занимает 2 страницы. В случае, если оглавление умещается на 1 страницу, проблем не возникает.
Заранее спасибо.
Простите. Вопрос снимается. На 4-й раз генерации все исправилось.
Скажите, пожалуйста, как сделать в одном файле два оглавления: одно на русском, другое на английском?
нужно расположить книгу а5 на а4, слева четные стр, справа нечетные, получается только наоборот, нужно в издательство отдать, не знаю что делать (
Решил добавить свой комментарий, так как нигде не нашел описание titlesec на русском. Вдруг кому понадобится)). Просьба автору блока добавить этот комментарий в свою статью, если конечно это возможно и он еще читает комментарии)).
Краткий обзор пакета titlesec
Основная команда по переопределению формата рубрик:
\titleformat<«command»>[«shape»]<«format»><«label»><«sep»><«before-code»>[«after-code»]
Здесь
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…
то номер главы будет на одном уровне с текстом названия главы.
Продолжение, ибо в один коммент не помещается)).
<«format»>— форматирование применяемое на весь заголовок (номер и текст). Или код, применяемый до заголовка, например рисование линии над заголовком (см. пример ниже) и т.д. Здесь можно применить команды: \filcenter – выравнивает заголовок по центру, \filright – выравнивает слева, \filleft – выравнивает справа (почему так х.з.)).
<«label»>— код до номера заголовка (на одном уровне с ним), форматирование номера заголовка.
<«sep»>— расстояние между номером и текстом заголовка (вертикальное в display, в frame – это расстояние от рамки до текста заголовка. Не должно быть равным нулю.
<«before-code»>— код до текста заголовка (на одном уровне с ним), форматирование текста заголовка. Если охота засунуть что то после текста заголовка, то нужно явно обраться к названию (опция explicit, к тексту обращаться как #1).
Например:
\usepackage[explicit]
\titleformat<\section><\normalfont\Large\bfseries><\thesection><0.5em>
<\normalfont\Large\bfseries#1%
\hspace<0.5em>\titlerule[2pt]>
Нарисует линию толщиной 2pt до конца страницы, после заголовка (на одном с ним базовой линии) на расстоянии 0.5em.
Пример. Нарисовать две линии над заголовком и одну под ним произвольной толщины.
\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]] – выдаст ошибку. Вообще говоря, так можно нарисовать произвольное количество линий.
Теперь о команде по переопределению расстояния над/под/и т.д. рубриками:
Я так понял, основное отличие \titlespacing* от \titlespacing, то, что при \titlespacing* следующий после заголовка абзац текста не начинается с красной строки. Так что можно смело использовать \titlespacing и забыть про \indent.
Полная форма задания расстояний что то вроде <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>
Пример. Под подраздел должен обтекаться текстом.
\usepackage
\setcounter
\setcounter
\titleformat<\subsubsection>[wrap]% выбираем нужную форму
<\normalfont\normalsize\bfseries\filright>% выравниваем слева
<\thesubsubsection.>%нумерация с точкой
<0.5em>% расстояние между номером и текстом заголовка
<>% не изменяем формат текста заголовка
\titlespacing<\subsubsection><15pc>% максимальная ширина заголовка
<2ex plus 0.1ex minus 0.2ex>% отступ сверху и снизу заголовка
<1pc>% расстояние до текста документа
Здравствуйте! Подскажите, пожалуйста, как переопределить заголовки в Содержании (и м.б. тексте) так, чтобы не выделялись жирным (это по ГОСТу)? Я использую пакет pscyr, поэтому стандартное \textbf уже не прокатит