Я пишу руководство по решениям для задач в конце глав в опубликованной книге. Для этого мне нужны ненумерованные разделы, перечисленные в оглавлении, плюс мне нужно, чтобы название каждого ненумерованного раздела было точно Problem xx.yy
там, где xx
есть \thechapter
и yy
есть \thesection
.
Используя book
класс документа, мне удалось сделать это следующим образом:
\section*{Problem~\thesection}\addcontentsline{toc}{section}{Problem~\thesection}\addtocounter{section}{1}
Мой вопрос в том, как мне определить новую команду секционирования или переопределить ее \section
, \section*
чтобы мне не пришлось переписывать все это для каждой проблемы. У меня более 100 проблем!
Вот MWE
\documentclass[11pt,letterpaper]{book}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\begin{document}
\tableofcontents
\chapter{Introductory Problems}\addtocounter{section}{1}
\section*{Problem~\thesection}\addcontentsline{toc}{section} {Problem~\thesection}\addtocounter{section}{1}
Here is bla bla bla the solution to bla bla bla.
\end{document}
Но, может быть, есть способ запретить печать номеров разделов в TOC, чтобы я мог использовать \section{}
вместо \section*{}
, так что не будет необходимости в \addtocounter
, и т. д. Это было бы более чистым решением. Но я понятия не имею, как запретить печать номеров разделов в TOC ???
решение1
Просто выделите собственный счетчик для проблем и спрячьте повторяющиеся задачи в макросе.
\documentclass[11pt,letterpaper]{book}
\newcommand\problem{%
\refstepcounter{problem}%
\section*{Problem \theproblem}%
\addcontentsline{toc}{section}{Problem \theproblem}%
}
\newcounter{problem}[chapter]
\renewcommand{\theproblem}{\thechapter.\arabic{problem}}
\begin{document}
\tableofcontents
\chapter{Introductory Problems}
\problem
Here is bla bla bla the solution to bla bla bla.
\problem
Here is bla bla bla the solution to bla bla bla.
\chapter{Harder Problems}
\problem
Here is bla bla bla the solution to bla bla bla.
\problem
Here is bla bla bla the solution to bla bla bla.
\end{document}
решение2
Вам просто нужно переопределить способ \thecounter
печати счетчика разделов:
\renewcommand\thesection{Problem \arabic{chapter}.\arabic{section}}
Однако если вы сделаете только это, то метки "Проблема 1.1" будут конфликтовать с названиями разделов в оглавлении. Если вы не хотите, чтобы разделы отображались в оглавлении, используйте
\setcounter{tocdepth}{0}
Если они вам нужны, то один из способов решения проблемы столкновения — это использоватьтоклофтупаковка:
\documentclass{book}
\usepackage{tocloft}
\setcounter{tocdepth}{2}
\renewcommand\thesection{Problem \arabic{chapter}.\arabic{section}}
\settowidth\cftsecnumwidth{Problem 8.88}
\begin{document}
\tableofcontents
\chapter{First chapter}
\section{First problem, chapter one}
\section{Second problem, chapter one}
\chapter{Second chapter}
\section{First problem, chapter two}
\section{Second problem, chapter two}
\end{document}
С использованиемтоклофтпеременная \cftsecnumwidth
управляет количеством места, оставшегося для набора раздела «числа».
Вот что получилось:
решение3
Это можно сделать с помощью titlesec/titletoc
. Вот код; я определяю problem
команду с необязательным аргументом (название проблемы, если оно есть. Вы также можете иметь ненумерованные разделы:
\documentclass[11pt,letterpaper]{book}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage[explicit]{titlesec}
\usepackage{titletoc}
\usepackage{lipsum}
\titleformat{name=\section,numberless}[hang]{\large\bfseries}{}{0pt}{\addcontentsline{toc}{section}{#1}}
\titleformat{\section}[hang]{\large\bfseries}{Problem~\thesection}{1em}{}
\newcommand\problem[1][]{\section{#1}}
\titlecontents{section}[1.5em]{\smallskip}%
{Problem~\thecontentslabel~}%numbered
{}%numberless\
{\hfill\quad\contentspage}[\smallskip]%
\begin{document}
\tableofcontents
\chapter{Introductory Problems}%
\problem
\lipsum[1-3]
\problem
\lipsum[4-6]
Here is bla bla bla the solution to bla bla bla.
\problem[(the marriage lemma)]
Here is bla bla bla the solution to bla bla bla.
\section*{A numberless section}%
\lipsum[7-9]
\end{document}