我希望枚举列表以不同的顺序重复(例如,两个语句的列表,然后是两个证明的列表:首先是第二个语句证明,然后是第一个语句证明)。我期望以下代码可以做到这一点,但出于某种原因,它只会生成一个包含“0”字符串的常规列表。
请帮忙查找并纠正我的错误。
\documentclass[english]{article}
\usepackage{enumitem}
\setlist[enumerate,1]{label=\arabic*$^\circ$.,ref=\arabic*$^\circ$}
\newlist{enumeratex}{enumerate}{5}
\setlist[enumeratex]%
{label=\arabic*$^\circ$.,%
before={\let\olditem=\item\renewcommand\item[1][]{\olditem[#1.]}},%
after={\let\item=\olditem}}
\begin{document}
\begin{enumerate}
\item \label{a} a
\item \label{b} b
\end{enumerate}
into
\begin{enumeratex}
\item[\ref{b}] proof of b
\item[\ref{a}] proof of a
\end{enumeratex}
\end{document}
期望的输出是:
或者,我希望第二个列表标签成为第一个列表标签的超链接。
答案1
以下是改编\item 的可选参数,显示在计数器后的括号中针对你的情况:
笔记:
- 如果你想重新定义一个具有可选参数的宏,你必须
\LetLtxMacro
使用包裹letltxmacro
。 的详细描述\LetLtxMacro
可以在这个问题中找到何时使用 \LetLtxMacro?。
代码:
\documentclass{article}
\usepackage{enumitem}
\usepackage{letltxmacro}
\setlist[enumerate,1]{label=\arabic*$^\circ$.,ref=\arabic*$^\circ$}
\LetLtxMacro{\OldItem}{\item}
\newcommand*{\LabelText}{}%
\newcommand*{\MyItem}[1][]{%
\renewcommand{\LabelText}{#1}\OldItem\leavevmode%
}%
\newlist{enumeratex}{enumerate}{5}
\setlist[enumeratex]%
{label=\noexpand\LabelText.,%
before={\let\item\MyItem},%
after={\let\item\OldItem}}
\begin{document}
\begin{enumerate}
\item \label{a} a
\item \label{b} b
\end{enumerate}
into
\begin{enumeratex}
\item[\ref{b}] proof of b
\item[\ref{a}] proof of a
\end{enumeratex}
\end{document}