![通过编号和名称引用枚举项](https://linux22.com/image/270927/%E9%80%9A%E8%BF%87%E7%BC%96%E5%8F%B7%E5%92%8C%E5%90%8D%E7%A7%B0%E5%BC%95%E7%94%A8%E6%9E%9A%E4%B8%BE%E9%A1%B9.png)
我目前使用enumitem
自动编号来为论文中的几个要求编号。但是,由于每个要求不仅有编号,还有简称,因此在使用\ref
(或\cref
,如果这样更方便的话)引用它时,我希望输出同时包含这两个内容。
以下是 MWE:
\documentclass{article}
\usepackage{enumitem}
\newcommand*{\req}[1]{\item \emph{#1}\quad}
\begin{document}
\begin{enumerate}[label=R \arabic*,widest*=20,leftmargin=*,series=reqs]
\req{First One} First requirement.
\req{Other One} \label{req:other_one} Some other requirement.
\end{enumerate}
Some text....
\begin{enumerate}[resume*=reqs]
\req{Yet Another Requirement} Text.
\end{enumerate}
As mentioned in \ref{req:other_one}, ...
\end{document}
在最后一行,它目前只显示“如 R 2 中所述”。我想要实现的是“如 R 2(其他)中所述”。
答案1
如果所有参考文献都是“R 2(其他)”的形式,您可以通过将所需文本添加到来实现\@currentlabel
。
\documentclass{article}
\usepackage{enumitem}
\usepackage{etoolbox}
\makeatletter
\newcommand*{\req}[1]{%
\item
\appto\@currentlabel{ (#1)}%
\emph{#1}\quad}
\makeatother
\begin{document}
\begin{enumerate}[label=R~\arabic*,widest*=20,leftmargin=*,series=reqs]
\req{First One} First requirement.
\req{Other One} \label{req:other_one} Some other requirement.
\end{enumerate}
Some text....
\begin{enumerate}[resume*=reqs]
\req{Yet Another Requirement} Text.
\end{enumerate}
As mentioned in \ref{req:other_one}, ...
\end{document}
R
注意和数字之间的联系。
如果要在“R 2(其他)”和“R 2”这两种形式之间进行选择,那么要么定义两个标签,这很笨拙,要么使用不同的命令来引用要求:
\documentclass{article}
\usepackage{enumitem,etoolbox}
\makeatletter
\newcommand*{\req}[1]{%
\item
\appto\@currentlabel{\req@print{#1}}%
\emph{#1}\quad}
\newif\if@reqprint
\newrobustcmd{\reqref}{%
\@ifstar{\@reqprintfalse\ref}{\@reqprinttrue\ref}%
}
\newrobustcmd{\req@print}[1]{\if@reqprint\ (#1)\fi}
\makeatother
\begin{document}
\begin{enumerate}[label=R~\arabic*,widest*=20,leftmargin=*,series=reqs]
\req{First One} \label{req:first_one} First requirement.
\req{Other One} \label{req:other_one} Some other requirement.
\end{enumerate}
Some text....
\begin{enumerate}[resume*=reqs]
\req{Yet Another Requirement} Text.
\end{enumerate}
As mentioned in \reqref{req:other_one}, and in \reqref*{req:first_one}
\end{document}