引用和重新定義的枚舉列表

引用和重新定義的枚舉列表

我重新定義了\theenumii,這相當簡單,但是當我在文本中引用它時,\ref{enumi21}下面的結果是 22.1,而不是 2.1。

如果我重新定義\renewcommand{\theenumii}{\theenumi.\arabic{enumii}}\renewcommand{\theenumii}{.\arabic{enumii}}\ref{enumi21}則正確輸出為 2.1,但標籤當然會很混亂。

另一方面,如果這解決了問題:

\renewcommand{\labelenumii}{\arabic{enumi}.\arabic{enumii}}
\renewcommand{\theenumii}{.\arabic{enumii}}

文字還行, \theenumii返回.1到文字中。當然,我永遠不需要使用\theenumii,但我只是想了解背後的邏輯。

\documentclass{article}


\renewcommand{\labelenumii}{\theenumi.\arabic{enumii}}
\renewcommand{\theenumii}{\theenumi.\arabic{enumii}}

\begin{document}
\begin{enumerate}
\item \label{enumi1}
\item Number 2
\begin{enumerate}
    \item Number 2.1 \label{enumi21}
\end{enumerate}
\end{enumerate}

\ref{enumi1}, \ref{enumi21}.

\theenumii \verb|\theenumii|

\theenumi \verb|\theenumi|
\end{document}

答案1

這似乎有效:

\documentclass{article}

\usepackage{enumitem}
\setlist[enumerate,2]{label=\theenumi.\arabic*}
\usepackage{chngcntr}
\counterwithin{enumii}{enumi}

\begin{document}

\begin{enumerate}
\item \label{enumi1}
\item Number 2
\begin{enumerate}
    \item Number 2.1 \label{enumi21}
\end{enumerate}
\end{enumerate}
See \ref{enumi1}, \ref{enumi21}.

\theenumii \verb|\theenumii|

\theenumi \verb|\theenumi|

\end{document} 

在此輸入影像描述

或者,如果您不想加載chngcntr,請替換\counterwithin{…}為以下行:

\renewcommand{\theenumii}{\theenumi.\arabic{enumii}}

答案2

\labelenumii如果你詢問和的含義\theenumii,你會得到

\labelenumii:
\long macro:->(\theenumii )

\theenumii:
\long macro:->\@alph \c@enumii 

(我用了texdef)。如果你要求\p@enumii,你會得到

\p@enumii:
\long macro:->\theenumi 

這是你問題的關鍵。此巨集被加到處理標籤時\p@enumii給出的值之前。\theenumii

\documentclass{article}

\renewcommand{\labelenumii}{\theenumi.\arabic{enumii}}
\renewcommand{\theenumii}{\arabic{enumii}}
\makeatletter
\renewcommand{\p@enumii}{\theenumi.}
\makeatother

\begin{document}

\begin{enumerate}
\item \label{enumi1}
\item Number 2
\begin{enumerate}
    \item Number 2.1 \label{enumi21}
\end{enumerate}
\end{enumerate}

\verb|\ref{enumi1}| $\to$ \ref{enumi1}.

\verb|\ref{enumi21}| $\to$ \ref{enumi21}.

\end{document}

在此輸入影像描述

相關內容