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
11577
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
11577
Hogtown
Anton Dmitrievich в сообщении #1603198 писал(а):
В качестве класса документа был выбран book.
Вероятно, неудачный выбор. Документкласс древний (а значит не поддерживается активно). memoir сравнительно новый, активно поддерживается и включил в себя много пакетов

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

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



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

Сейчас этот форум просматривают: Taus


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

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