我想要一个列表,其中大多数项目使用标准标签,但有一两个项目有自定义标签。我希望能够引用每个项目并显示其标签。我使用enumitem
,这一切都适用于非内联列表:
\documentclass{article}
\usepackage[inline]{enumitem}
\makeatletter
\newcommand{\myitem}[1][]{
\protected@edef\@currentlabel{#1}%
\item[#1]
}
\makeatother
\begin{document}
\begin{enumerate}
\item \label{1} Item one
\myitem[A] \label{A} Item A
\item \label{3} Item three
\end{enumerate}
\ref{1} \ref{A} \ref{3}
\end{document}
产生输出
1. Item one
A Item A
2. Item three
1 A 2
这正是我想要的。但是,我真正想做的是将其放在内联列表中,如果我更改enumerate
为enumerate*
,\ref{A}
则打印 1 而不是 A。
我猜测内联列表可能不会使用\@currentlabel
或者以不同的方式使用它,但我不知道该怎么做。
答案1
内联列表是方框,因此您的定义会丢失。请使用 mode=unboxed 或移动 \@currentlabel 定义,使其更靠近标签:
\documentclass{article}
\usepackage[inline]{enumitem}
\makeatletter
\newcommand{\myitem}[1][]{%
\item[#1]\protected@edef\@currentlabel{#1}\ignorespaces%
}
\makeatother
\begin{document}
\begin{enumerate*}%[mode=unboxed] %would work too
\item \label{1} Item one
\myitem[A] \label{A} Item A
\item \label{3} Item three
\end{enumerate*}
\ref{1} \ref{A} \ref{3}
\end{document}