我正在用 LaTeX 写一本书,其中我将问题 mn 标记为第 m 章,问题 n(例如,问题 6.10 是第 6 章中的第 10 个问题)。我使用声明
\renewcommand{\theenumi}{\arabic{enumi}}
\renewcommand{\labelenumi}{\thechapter.\theenumi}
并且这可以在列出问题的枚举环境中正确打印问题标签。但是,当我在其他地方引用问题时,它只会打印问题编号(例如,“参见问题 6.10”写为“参见问题 10”)。有没有针对此问题的全局修复?
答案1
正如 Christian 所建议的,使用枚举项包可能是最好的方法。我会比他提到的答案更进一步,problems
为你的问题定义一个新的环境。使用以下命令执行你想要的操作enumitem
非常简单:
\newlist{problems}{enumerate}{1}% or 2 or 3 if you want to nest
\setlist[problems]{label=\thechapter.\arabic*,
ref=Problem \thechapter.\arabic*
}
这里我假设您想要\ref{...}
打印类似 的内容Problem 1.2
。如果您只想打印,1.2
则省略ref=...
。有关更多详细信息,请参阅非常易读的enumitem
手册。
事实上,如下所示,我还会让problems
环境自动为问题添加标题,您可以使用选项before=
来执行此操作。。enumitem
下面我已经使用了,\section{...}
但也许\section*{...}
或\subsection{...}
等会更适合您。
这里有一个完整的最小工作示例:
\documentclass{book}
\usepackage{enumitem}
\newlist{problems}{enumerate}{1}% or 2 or 3 if you want to nest
\setlist[problems]{label=\thechapter.\arabic*,
ref=Problem \thechapter.\arabic*,
before={\section{Problems for Chapter \thechapter}}
}
\begin{document}
\chapter{First chapter}
\begin{problems}
\item Is the Riemann hypothesis true? \label{Riemann}
\item Find the first counter-example to the twin primes conjecture
\label{twins}
\end{problems}
Actually, \ref{Riemann} and \ref{twins} are quite hard, so allow at
least an extra week.
\end{document}
为了完整性,这将产生:
答案2
引用计数器使用\the<cntr>
其引用内容。因此,您应该重新定义\theenumi
以完全包含您的表示(因为它将被设置并因此被引用):
\documentclass{book}
\newenvironment{questions}
{\renewcommand{\theenumi}{\thechapter.\arabic{enumi}}%
\begin{enumerate}}
{\end{enumerate}}
\begin{document}
\setcounter{chapter}{9}% Just for this example
\chapter{Questions}
See questions \ref{q:first}--\ref{q:last}.
\begin{questions}
\item \label{q:first}
First question
\item
Second question
\item
Third question
\item \label{q:last}
Last question
\end{questions}
\end{document}
上述示例重新定义\theenumi
为新环境的一部分questions
。这允许您本地化定义的更改,而不会影响其他enumerate
环境(如果使用它们)。