Referências e listas enumeradas redefinidas

Referências e listas enumeradas redefinidas

Eu redefini \theenumii, o que é bastante simples, mas quando faço referência a ele no texto, o resultado \ref{enumi21}abaixo é 22,1, em vez de 2,1.

Se eu redefinir \renewcommand{\theenumii}{\theenumi.\arabic{enumii}}como \renewcommand{\theenumii}{.\arabic{enumii}}, \ref{enumi21}a saída será correta como 2.1, mas é claro que o rótulo está confuso.

Se, por outro lado, isso resolver o problema:

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

O texto está OK,mas \theenumiiretorna .1no texto. É claro que nunca precisarei usar \theenumii, mas gostaria apenas de entender a lógica por trás disso.

\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}

Responder1

Isso parece funcionar:

\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} 

insira a descrição da imagem aqui

Alternativamente, se você não quiser carregar chngcntr, substitua \counterwithin{…}por esta linha:

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

Responder2

Se você perguntar o significado de \labelenumiie \theenumii, você obterá

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

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

(Eu usei texdef). Se você pedir \p@enumii, você recebe

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

e esta é a chave do seu problema. A macro \p@enumiié anexada ao valor fornecido por \theenumiiquando o rótulo está sendo processado.

\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}

insira a descrição da imagem aqui

informação relacionada