使用重新定义的 \labelenumi 引用枚举项

使用重新定义的 \labelenumi 引用枚举项

我遇到了以下问题。我重新定义了\labelenumi命令以获取字母顺序的一阶枚举。如果我标记此枚举中的某个项目并生成对它的引用,则引用的是该项目的编号而不是修改后的标签。

一个简单的例子:

\documentclass[a4paper,10pt]{article}
\usepackage[utf8x]{inputenc}
\renewcommand{\labelenumi}{\alph{enumi}.)}

\begin{document}
\begin{enumerate}
 \item\label{part1} This is the first part. 
 \item We have seen in~\ref{part1}, that this does not work.
\end{enumerate}


\end{document}

给出:

   a.) This is the first part.
   b.) We have seen in 1, that this does not work.

需要改进什么才能\ref打印字符而不是数字?

答案1

一个简单的解决方案就是重新定义\theenumi(并且,如果需要的话,\labelenumi在此基础上进行)。

\documentclass{article}

\renewcommand{\theenumi}{\alph{enumi}}
\renewcommand{\labelenumi}{\theenumi)}

\begin{document}

\begin{enumerate}
 \item\label{part1} This is the first part. 
 \item We have seen in~\ref{part1} that this does not work.
\end{enumerate}

\end{document}

在此处输入图片描述

答案2

每当你自定义列表时,enumitem是你最好的朋友。

在下面的代码中,我使用了\setlist命令来自定义enumerate环境。特别是,我更改了label使用

label*=\alph*)

这会将标签更改为a)b)等。我还更改了ref使用

ref=\alph*

这意味着当您引用它时,您将获得a, bc而不带括号。如果您没有指定 的格式,ref那么它只会继承 指定的格式label

当然,您可以根据自己的需要进行自定义。

截屏

\documentclass{article}
\usepackage{enumitem}
\setlist[enumerate]{label*=\alph*),ref=\alph*}

\begin{document}
\begin{enumerate}
 \item\label{part1} This is the first part. 
 \item We have seen in~\ref{part1}, that this does not work.
\end{enumerate}


\end{document}

答案3

仅仅因为您使用了像 cleveref 这样的花哨软件包并不意味着您应该忘记所有老式的技术 :-)

自古以来,在 LaTeX 中格式化计数器的方式就是重新定义命令\the<counter>。使用 cleveref 不会改变这一点。(事实上,et al.#2中的论点是\crefformat格式化正是出于这个原因,产生的计数器\the<counter>,而不是原始计数器值。)

尝试以下 MWE:

\documentclass{memoir}
\usepackage{cleveref}

\newtheorem{theorem}{Theorem}

\renewcommand{\theenumi}{\thetheorem(\alph{enumi})}
\renewcommand{\labelenumi}{\alph{enumi}}

\begin{document}
\begin{theorem}\label{thm}
My big theorem
\begin{enumerate}
\item\label[theorem]{thm!simple} Simple case
\item\label[theorem]{thm!complex} Complex case
\end{enumerate}
\end{theorem}

\cref{thm!simple}%  theorem 1(a)

\ref{thm!simple}%   1(a)

\end{document}

请注意,我使用了 cleveref 的可选参数来\label告诉它将这些标签格式化为定理,而不是(自动推断的)枚举。如果您经常使用它,定义一个新的枚举列表变体(带有自己的计数器)并告诉 cleveref 如何以通常的方式格式化这种新标签类型可能会更方便。这将允许您删除可选参数并让 cleveref 自动推断标签类型。

但无论如何,这个 MWE 只是为了说明基本思想。它重新格式化所有枚举以包含枚举项之前的最后一个定理编号,如果您想在定理之外的任何地方使用枚举列表,这是没用的。对于实际文档,有各种解决方案,从简单但范围有限到复杂但提供充分的灵活性。目前想到的最好的一个如上所述:定义一个单独的枚举列表变体以在定理中使用。但其他人可能有更好的主意。

相关内容