我已经这样做了:
\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}
但这样做有两个缺点
- 如果我更新枚举标签,我也必须更新此引用,
- 再加上
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}