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