标签编号变得疯狂

标签编号变得疯狂

我有重新定义枚举计数器以包含节号,一切按预期运行。但是,当我尝试交叉引用文档中的文本时,引用上的数字无法正确显示。

更新:
根据要求,我在这里编辑了完整的 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,但这是一个全新的问题。

相关内容