如何重新定义一个部分来获得这个结果?

如何重新定义一个部分来获得这个结果?

我正在为已出版书籍中各章末尾的问题编写解决方案手册。为此,我需要在目录中列出未编号的章节,此外,我需要每个未编号章节的标题准确Problem xx.yy位于和的xx位置。\thechapteryy\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} 

在此处输入图片描述

相关内容