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