我使用enumitem来枚举我的变量列表。
我有一个变量列表,如:
\begin{enumerate}
\item My First Cool Variable \label{var:myvar1}
\item My Second not so Cool Variable \label{var:myvar2}
\item My Third so so \label{var:myvar3}
\end{enumerate}
当我交叉引用其中一个项目时,我会得到列表键。例如,
Let us reference \ref{var:myvar2} and then my other variable \ref{var:myvar3}
给出:
Let us reference 2 and then my other variable 3
我想要的是不仅能够获得列表键,还能获得整个项目文本,因此输出可能如下:
Let us reference My Second not so Cool Variable and then my other variable My Third so so
目标是只能将变量名称写入一次,并且如果变量名称被修改为更具体的名称,则不会在任何地方进行更改。
有什么想法吗?我已经看过enumitem-zref,但我找不到我想要的东西:/
答案 0 :(得分:0)
使用Macro to capture until end-of-line as argument中的一些提示,您可以捕获\item
后面的内容:
\documentclass{article}
\usepackage{environ}
% https://tex.stackexchange.com/q/127005/5764
\makeatletter
\NewEnviron{wordenumerate}{%
\begin{enumerate}
\let\olditem\item
\def\item##1\item{\dosomething{##1}}%
\expandafter\@empty\BODY\item
\end{enumerate}%
}
\let\oldlabel\label
\newcommand{\dosomething}[1]{%
\def\elvitaluz@arg{#1}%
\ifx\elvitaluz@arg\elvitaluz@stop
\end{enumerate}
\expandafter\env@ignore % to end the recursion
\else
\def\label##1{\def\@textlabel{##1}\let\label\relax}% Capture \label
\olditem #1
\ifx\label\relax
\def\label##1{\@bsphack\@esphack}%
\edef\@currentlabel{#1}% % what to do with #1
\expandafter\oldlabel\expandafter{\@textlabel}%
\fi
\expandafter\item % to continue the recursion
\fi}
\edef\elvitaluz@stop{\noexpand\end{enumerate}\noexpand\env@ignore\space}
\makeatother
\begin{document}
\begin{wordenumerate}
\item First
\item Second\label{second}
\item \label{third}Last
\end{wordenumerate}
Item~2 is \ref{second}. Item~3 is \ref{third}.
\end{document}
建议使用新环境wordenumerate
,因为完全不同的\label
- \ref
正在发挥作用。我不建议将此环境嵌套在其他任何东西中(也是因为使用了environ
)。