2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Настраиваемое интерактивное оглавление в LaTeX
Сообщение19.07.2023, 21:25 


19/07/23
2
Мне нужно сделать оглавление как в этой книге: https://math.ru/lib/files/pdf/kurant.pdf.
То есть мне надо добавить слово «Глава» к каждой пронумерованной главе. Причём некоторые главы могут идти без номера, тогда к их названию в содержании ничего добавлять не надо (как в предисловии к изданию в примере). Также я хочу добавить значок параграфа к каждому параграфу в содержании.

Ответы здесь и здесь мне не помогли. Скорее всего, это из-за того, что я неправильно переопределяю формат заголовков командой defaulttitleformat и использую titlesec, titletoc, tocloft одновременно.

Минимальный работаюющий пример:
код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX
\documentclass[twoside, a4paper, 11pt]{article}
%\usepackage{showframe}
\usepackage{microtype}
\usepackage{fullpage}
\usepackage{anyfontsize}
\usepackage[X2,T1,T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english, russian]{babel}
\usepackage{parskip}
\linespread{0.8}
\usepackage{indentfirst}
\setlength{\parindent}{12pt}
\usepackage{setspace}
\usepackage{marginnote}
\usepackage[top = 0.77 cm, outer = 2.5 cm, bottom = 2.27 cm, inner = 1.27 cm, heightrounded, marginparwidth = 2 cm, marginparsep = 0.25 cm]{geometry}
\renewcommand*{\marginfont}{\slshape\tiny}

\usepackage{xcolor}
\usepackage{etoolbox}

\usepackage{enumerate}
\usepackage[shortlabels]{enumitem}

\usepackage[newparttoc]{titlesec}
\usepackage[titles]{tocloft}
%\usepackage{etoc}
\usepackage{titletoc}
\usepackage{caption}

\makeatletter
\@addtoreset{section}{part}
\@addtoreset{subsection}{section}
\@addtoreset{subsubsection}{subsection}
\makeatother

\renewcommand{\numberline}[1]{#1~}
\newcommand{\defaulttitleformat}{
    \renewcommand*\thepart{\Roman{part}}
    \renewcommand*\thesection{\arabic{section}}
    \renewcommand*\thesubsection{\Roman{subsection}}
    \renewcommand*\thesubsubsection{\arabic{subsubsection}}
   
   
    \titleformat{\part}[display]{\Huge\scshape\centering}{Глава~\thepart}{0ex}{}[]
    \titleformat{\section}[hang]{\vspace{8pt}\Large\scshape\bfseries}{\S\thesection.}{0ex}{\ }[]
    \titleformat{\subsection}[hang]{\vspace{4pt}\scshape\bfseries}{\thesubsection.}{0ex}{\ }[]
    \titleformat{\subsubsection}[hang]{\bfseries}{\thesubsubsection.}{0ex}{\ }[]
}

\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
%\renewcommand{\sectionmark}[3]{ \markboth{#1} }
\fancyhead{}
\headheight = 1 cm
\newcommand{\defaultfancy}{
    \fancyhf{}
    \fancyhead{}
    \fancyhead[RO]{\small\textbf{\thepage}}  %% odd-right
    \fancyhead[LE]{\small\textbf{\thepage}}    %%% even-left
    \fancyhead[CE]{\small\scshape\bfseries Глава~\thepart.}
    \fancyhead[CO]{\small\scshape\bfseries \S\thesection.\ \leftmark.}
    \fancyfoot[L,R,C]{}
}

\usepackage{pdfrender}
\usepackage{hyperref}
\definecolor{linkcolor}{HTML}{FF0000}
\definecolor{urlcolor}{HTML}{0000FF}
\hypersetup{pdfstartview=FitH, linkcolor=linkcolor, urlcolor=urlcolor, colorlinks=true}
\usepackage{cleveref}
\usepackage{hypcap}
\usepackage{lipsum}

\begin{document}
    %\pagenumbering{gobble}
    \pdfrender{StrokeColor=black,TextRenderingMode=2,LineWidth=0.05pt}
    \pagenumbering{arabic}
    \fancyhf{}
    \fancyhead{}
    \pagestyle{fancy}
    \defaultfancy
    \defaulttitleformat
   
   
\part*{Введение}

    \section{Первый параграф}
    \lipsum[1]
    \section{Второй}

    \subsection{Подпункт 1}

    \subsubsection{Подподпункт}

    \subsection{Подпункт 2}

   
\part{Общая часть}
    \section{Второй}
    \subsection{Подпункт 1}

    \subsubsection{Подподпункт}
    \lipsum[3-4]
    \subsection{Подпункт 2}
    \lipsum[5-6]

    \definecolor{linkcolor}{HTML}{0000FF}
    \normalsize
    \newpage
    \makeatletter
    \renewcommand{\contentsname}{\hfill\huge Оглавление\hfill}
   
    \hypertarget{TOC}{}
    \let\latexl@part\l@part
    \let\latexl@section\l@section
    \let\latexl@subsection\l@subsection
   
    %\def\l@part#1#2{\begingroup\latexl@part{\huge{#1}}{#2}\endgroup}
    %\def\l@section#1#2{\begingroup\let\numberline\@gobble\latexl@section{#1}{#2}\endgroup}
    %\def\l@subsection#1#2{\begingroup\let\numberline\@gobble\latexl@subsection{#1}{#2}\endgroup}
   
    \makeatother
    \renewcommand{\cftpartfont}{\bfseries\scshape\huge}
    \tableofcontents{}
\end{document}
 


Ещё я заметил, что пакет fancyheader конфликтует с каким-то из пакетов titlesec, titletoc, tocloft. Это можно видеть по двойной нумерации в верхнем колонтитуле на первой странице, и по огромному заголовку в верхнем колонтитуле на странице с содержанием --- всё из-за строки
Используется синтаксис LaTeX
%\renewcommand{\sectionmark}[3]{ \markboth{#1} }


Подскажите, как исправить эти ошибки.

 Профиль  
                  
 
 Re: Настраиваемое интерактивное оглавление в LaTeX
Сообщение19.07.2023, 21:59 
Заслуженный участник
Аватара пользователя


31/01/14
11064
Hogtown
Если вы имеете дело с книгой, то зачем используете
Используется синтаксис LaTeX
\documentclass[twoside, a4paper, 11pt]{article}

Я бы предложил
Используется синтаксис LaTeX
\documentclass[twoside, a4paper, 11pt]{memoir}

Он очень гибкий

 Профиль  
                  
 
 Re: Настраиваемое интерактивное оглавление в LaTeX
Сообщение29.07.2023, 22:54 


19/07/23
2
Спасибо большое за ответ. В конечном итоге я смог сделать оглавление в нужном мне стиле. Для этого пришлось переопределять стандартные макросы, отвечающие за заголовки: \part, \chapter и некоторые другие, прописанные в файле latex.ltx. В качестве класса документа был выбран book. Мне также помогли ответы здесь, здесь и здесь.

Тема закрыта.

 Профиль  
                  
 
 Re: Настраиваемое интерактивное оглавление в LaTeX
Сообщение30.07.2023, 00:19 
Заслуженный участник
Аватара пользователя


31/01/14
11064
Hogtown
Anton Dmitrievich в сообщении #1603198 писал(а):
В качестве класса документа был выбран book.
Вероятно, неудачный выбор. Документкласс древний (а значит не поддерживается активно). memoir сравнительно новый, активно поддерживается и включил в себя много пакетов

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group