Referencias y listas de enumeración redefinidas.

Referencias y listas de enumeración redefinidas.

Redefiní \theenumii, que es bastante simple, pero cuando hago referencia a él en el texto, el resultado \ref{enumi21}a continuación es 22.1, en lugar de 2.1.

Si redefino \renewcommand{\theenumii}{\theenumi.\arabic{enumii}}como \renewcommand{\theenumii}{.\arabic{enumii}}, \ref{enumi21}el resultado es correctamente 2.1, pero, por supuesto, la etiqueta está desordenada.

Si por el contrario esto soluciona el problema:

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

El texto está bien,pero \theenumiiregresa .1en el texto. Por supuesto, nunca necesitaré usarlo \theenumii, pero me gustaría entender la lógica detrás de esto.

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

Respuesta1

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

ingrese la descripción de la imagen aquí

Alternativamente, si no desea cargar chngcntr, reemplace \counterwithin{…}con esta línea:

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

Respuesta2

Si preguntas por el significado de \labelenumiiy \theenumii, obtendrás

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

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

(Solía texdef​​). Si pides \p@enumii, obtienes

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

y esta es la clave de tu problema. La macro \p@enumiise antepone al valor dado \theenumiicuando se procesa la etiqueta.

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

ingrese la descripción de la imagen aquí

información relacionada