Ссылки и переопределенные списки перечислений

Ссылки и переопределенные списки перечислений

Я переопределил \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}

введите описание изображения здесь

Связанный контент