我正在写一本书,在每一章的末尾我都有一个带有标签的问题部分,如下所示:
\chapter{Chapter 1}
Bla bla bla...
\section*{Problems:}
\begin{enumerate}
\item \label{ch1_pr1} Prove...
\item \label{ch1_pr2} Calculate...
\item \label{ch1_pr3} Fill the details in...
\end{enumerate}
这种方法的问题在于,每个问题的部分在每一章中的编号方式完全相同(1、2、3、4 等...),所以,如果说,在第四章中我想引用第一章中的第一个问题,我会在我的书中只得到“1”(数字一),这会让人感到困惑,因为它没有提及我所引用的问题所属的章节。
我的问题是:我该如何列举我的问题以便让它们考虑到它们所属的章节?
我在想用 1.1、1.2、1.3…… 来表示第一章的问题,用 2.1、2.2、2.3…… 来表示第二章的问题,等等。但我不知道该怎么做。
由于我对 Latex 不是很熟练,所以我要求解决问题的方法尽可能简单。
更新:这里有一些示例代码,以便您可以编译它并更好地理解我的需求:
\documentclass[12pt,letterpaper]{book}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
\begin{document}
\chapter{First}
Bla bla bla...
\section*{Problems:}
\begin{enumerate}
\item \label{ch1_pr1} Prove...
\item \label{ch1_pr2} Calculate...
\item \label{ch1_pr3} Fill the details in...
\end{enumerate}
\chapter{Second}
Bla bla bla....
\section*{Problems:}
\begin{enumerate}
\item \label{ch2_pr1} Prove...
\item \label{ch2_pr2} Calculate...
\item \label{ch2_pr3} Fill the details in...
\end{enumerate}
\chapter{Third}
First problem in Chapter 1:~\ref{ch1_pr1}
First problem in Chapter 2:~\ref{ch2_pr1} \\
The issue: Different problems appear to be the same when cited!
\end{document}
答案1
这是一个使用包的类似解决方案enumitem
,它使定义新的和自定义的列表变得更加容易。我还将其用作problems
环境名称。在这里,原始问题集中的标签只是1
或任何其他内容,但引用显示为1.1
等。
最好不要在\label{}
s 中使用显式数字,以防以后插入或删除项目。虽然 LaTeX 不会在意,但如果chap3_prf5
提到第 2 章中编号为 9 的问题,它往往会让人感到非常困惑。
\documentclass{book}
\usepackage{enumitem}
\newlist{problems}{enumerate}{1}
\setlist[problems]{label={\arabic*.}, ref={\thechapter.\arabic*}}
\begin{document}
\chapter{Chapter 1}
Bla bla bla \dots
\section*{Problems:}
\begin{problems}
\item \label{pr:intro_prove} Prove \dots
\item \label{pr:intro_calc} Calculate \dots
\item \label{pr:intro_details} Fill the details in \dots
\end{problems}
\chapter{Pethau Pellach}
Fel dywedwyd ym mhroblem \ref{pr:intro_calc} \dots
\end{document}
如果您希望章节编号也出现在原始标签中,请更改
\setlist[problems]{label={\arabic*.}, ref={\thechapter.\arabic*}}
到
\setlist[problems]{label={\thechapter.\arabic*}}
答案2
这里有一种方法可以做到这一点,根据定义一个新列表,enumerate
并附带一些规范,我将其命名problems
为两个级别:
\documentclass{report}
\usepackage{geometry}
\usepackage{enumitem}
\usepackage{etoolbox}
\AtBeginEnvironment{enumerate}{\everymath{\displaystyle}}
\newlist{problems}{enumerate}{2}
\setlist[problems]{wide=0pt}
\setlist[problems, 1]{label =\thechapter.\arabic*, font=\bfseries, wide=0pt}
\setlist[problems,2]{label =(\alph*), wide =0.5em, topsep=2pt, itemsep =2pt}
\begin{document}
\chapter{Chapter 1}
Bla bla bla...
\section*{Problems:}
\begin{problems}
\item \label{ch1_pr1} Prove...
\begin{problems}
\item A first question
\item Another silly question. A silly question. A silly question. A silly question. A silly question. A silly question. A silly question. A silly question. A silly question.
\end{problems}
\item \label{ch1_pr2} Calculate...
\item \label{ch1_pr3} Fill the details in...Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah
\end{problems}
\chapter{Chapter 2}
Bla bla bla...
\section*{Problems:}
\begin{problems}
\item \label{ch1_pr1} Prove...
\begin{problems}
\item A first question
\item Another silly question. A silly question. A silly question. A silly question. A silly question. A silly question. A silly question. A silly question. A silly question.
\end{problems}
\item \label{ch1_pr2} Calculate...
\item \label{ch1_pr3} Fill the details in...Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah
\end{problems}
\end{document}