\ref 应使用枚举标签名称

\ref 应使用枚举标签名称

我已经这样做了:

\begin{enumerate}
\renewcommand{\labelenumi}{\textbf{S.\theenumi}}
\item a
\item \label{l} b
\item c. goto \ref{l}
\end{enumerate}

只是\ref使用枚举数字。但我希望它是完整的enumerate标签。

我也可以打字,S.\ref{l}但这样做有两个缺点

  1. 如果我更新枚举标签,我也必须更新此引用,
  2. 再加上hyperref,这看上去就不太好了。

有什么干净/好的方法可以解决这个问题?

答案1

您可以使用enumitem包裹:

\documentclass{article}
\usepackage{enumitem}

\begin{document}

\begin{enumerate}[label=\textbf{S.\arabic*}]
\item a
\item \label{l} b
\item c. goto \ref{l}
\end{enumerate}

\end{document}

在此处输入图片描述

或者

\begin{enumerate}[label=\textbf{S.\arabic*},ref=S.\arabic*]
\item a
\item \label{l} b
\item c. goto \ref{l}
\end{enumerate}

如果您不想将引用以粗体显示。

答案2

为了使您的尝试正常工作,您需要重新定义计数器表示(\theenumi)以及与其关联的标签(\labelenumi)。当您使用时,这会将格式与计数器分开\ref

在此处输入图片描述

\documentclass{article}
\begin{document}
\begin{enumerate}
\renewcommand{\labelenumi}{\textbf{\theenumi}}
\renewcommand{\theenumi}{S.\arabic{enumi}}
\item a
\makeatletter
\show\@currentlabel
\makeatother
\item \label{l} b
\item c. goto \ref{l}
\end{enumerate}
\end{document}

这也适用于hyperref。不过,总体来说,使用起来要容易得多enumitem因为它可以在全球范围内使用或者采用键值对的方式进行本地化设置,非常方便。

答案3

对于 LaTeX 中的所有计数器(不需要包),都有一个宏 \p@柜台用作该计数器的标签/引用中的前缀。因此匹配的定义集将是

\makeatletter
\renewcommand{\labelenumi}{\textbf{\theenumi}}
\renewcommand{\theenumi}{S.\arabic{enumi}}
\renewcommand{\p@enumi}{S.}
\makeatother

更自然的做法是将 \theenumi 保留为计数器值,并将所有装饰放在其他值中

\makeatletter
\renewcommand{\labelenumi}{\textbf{S.\theenumi}}
\renewcommand{\theenumi}{\arabic{enumi}}
\renewcommand{\p@enumi}{S.}
\makeatother

答案4

使用包 paralist 也可以

\documentclass{article}
\begin{document}
\usepackage{paralist}
\begin{enumerate}[\bfseries{S}.1]
\item a
\makeatletter
\show\@currentlabel
\makeatother
\item \label{l} b
\item c. goto \ref{l}
\end{enumerate}
\end{document}

相关内容