我正在为已出版书籍中各章末尾的问题编写解决方案手册。为此,我需要在目录中列出未编号的章节,此外,我需要每个未编号章节的标题准确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}
但也许有一种方法可以抑制目录中章节编号的打印,这样我就可以使用\section{}
而不是\section*{}
,这样就不需要 等了\addtocounter
。这将是一个更干净的解决方案。但我不知道如何抑制目录中章节编号的打印???
答案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}