我有重新定义枚举计数器以包含节号,一切按预期运行。但是,当我尝试交叉引用文档中的文本时,引用上的数字无法正确显示。
更新:
根据要求,我在这里编辑了完整的 MWE,而不是原始示例代码。
\documentclass{article}
\renewcommand*{\theenumi}{\thesection.\arabic{enumi}}
\renewcommand*{\theenumii}{\theenumi.\arabic{enumii}}
\renewcommand*{\theenumiii}{\theenumii.\arabic{enumiii}}
\begin{document}
\section{The main stuff}
\begin{enumerate}
\item Some text
\item \textbf{A header}
\begin{enumerate}
\item The first item in a sublist
\item \label{important} This stuff is really cool
\begin{enumerate}
\item Some text here...
\item ...and here
\end{enumerate}
\end{enumerate}
\item The outer list continues
\end{enumerate}
When I reference \lq\lq{}important\rq\rq{}, I get \ref{important}
\end{document}
最后一行输出
当我引用“重要”时,我得到 1.21.2.2
我原本期望数字只是这么简单1.2.2
。
解决方案:
这个问题的解决方案由 Geoffrey Jones 提出 - 只需从一种建议的编号方式切换到另一种方式即可。与上述方法不同\newcommands
,下面的方法有效:
\usepackage{enumitem}
\setenumerate[1]{label=\thesection.\arabic*.}
\setenumerate[2]{label*=\arabic*.}
\setenumerate[3]{label*=\arabic*.}
答案1
Tomas,我尽力复制你的问题,但无论我做什么,都无法出错。由于你没有提供 MWE(坦率地说,我希望你能提供),我猜你的代码基本上是这样的:
\documentclass{article}
\usepackage{verbatim} % this is just for the print-out below
\usepackage{enumitem} % for lack of a MWE, I'm just guessing here
\setenumerate[1]{label=\thesection.\arabic*.}
\setenumerate[2]{label*=\arabic*.}
\setenumerate[3]{label*=\arabic*.}
\begin{document}
\setcounter{section}{3} % to remain in sync with your numbering
\section{The main stuff}
\begin{enumerate}
\item Some text
\item \textbf{A header}
\begin{enumerate} % NB, your code had \begin{item} here which, judging by
% your printout, I assume to be another typo (correct me
% if I'm wrong
\item The first item in a sublist
\item \label{important} This stuff is really cool
\begin{enumerate} % NB, ditto
\item Some text here...
\item ...and here
\end{enumerate}
\end{enumerate}
\end{enumerate}
``When I reference this label (\verb|\ref{important}|),
the number that shows up is \ref{important}''
\end{document}
除了我的打印输出的列表部分与您问题中的列表相吻合之外,我的代码还包括以下行:
“当我引用此标签(\ref{important})时,显示的数字是 4.2.2。”
所以显然我们的代码不一致。你能帮我提供一个 MWE 吗?这样人们就不会猜测是什么导致了你看到的问题?
答案2
托马斯,更新得非常好。现在我们可以知道发生了什么。
尽管您看到的结果乍一看很奇怪,但实际上您奇怪的输出正是 LaTeX 无需您进一步修改即可生成的结果。以下是您的(新)代码的修改版本,可帮助您了解发生了什么(抱歉代码很长):
\documentclass{article}
\usepackage{verbatim}
\usepackage[margin=1in]{geometry}
%\renewcommand*{\theenumi}{\thesection.\arabic{enumi}} % run once without uncommenting, review output, then uncomment and run again
%\renewcommand*{\theenumii}{\theenumi.\arabic{enumii}} % uncomment after running and reviewing ouput from uncommented line above
\begin{document}
\section{Stuff}
\begin{enumerate}
\item This line contains \verb|\label{a}|. \label{a} \verb|\labelenumi|: \labelenumi;\ \verb|\theenumi|: \theenumi
\item This line contains \verb|\label{b}|. \label{b} \verb|\labelenumi|: \labelenumi;\ \verb|\theenumi|: \theenumi
\begin{enumerate}
\item This line contains \verb|\label{c}|. \label{c} \verb|\labelenumii|: \labelenumii;\ \verb|\theenumii|: \theenumii
\item This line contains \verb|\label{d}|. \label{d} \verb|\labelenumii|: \labelenumii;\ \verb|\theenumii|: \theenumii
\begin{enumerate}
\item This line contains \verb|\label{e}|. \label{e} \verb|\labelenumiii|: \labelenumiii;\ \verb|\theenumiii|: \theenumiii
\item This line contains \verb|\label{f}|. \label{f} \verb|\labelenumiii|: \labelenumiii;\ \verb|\theenumiii|: \theenumiii
\end{enumerate}
\end{enumerate}
\end{enumerate}
\verb|\ref|'s to \verb|\label|'s\{a, b, c, d, e, f\}: \ref{a}, \ref{b}, \ref{c}, \ref{d}, \ref{e}, \ref{f}.
\end{document}
您可以看到,如果按原样运行此代码,LaTeX 产生的输出是:
\ref 到 \label{a, b, c, d, e, f}: 1, 2, 2a, 2b, 2(b)i, 2(b)ii。
我希望您会同意,这是每个人通常期望 LaTeX 产生的结果。
现在,如果你取消注释第一个\renewcommand
,你的输出将包括:
\ref 至 \label{a, b, c, d, e, f}:1.1、1.2、1.2a、1.2b、1.2(b)i、1.2(b)ii。
好吧,现在看起来有点奇怪了。但这符合我们之前看到的情况(对吧?)。
最后,如果你取消注释第二个\renewcommand
,你会看到:
\ref 到 \label{a, b, c, d, e, f}:1.1、1.2、1.21.2.1、1.21.2.2、1.2(1.2.2)i、1.2(1.2.2)ii。
尽管这正如您在问题陈述中所描述的那样,但它与我们在上面的先前测试中看到的结果一致。
所以现在您可以看到发生了什么(并且您对所看到的输出的期望并没有考虑到 LaTeX 在enumerate
环境中打印标签的方式)。
为了解决这个问题(考虑到我上面提供的工作解决方案,我不会为此烦恼),您将需要深入重新定义 LaTeX 的\p@enumii
和\p@enumiii
,但这是一个全新的问题。