如何按规定顺序排列第二级枚举的项目

如何按规定顺序排列第二级枚举的项目

假设我有以下文档:

  1. 例子。

    a)示例1;

    b)示例2;

    c)示例3;

    d)示例4.

在不同版本的文档中,我想要以下内容:

  1. 例子。

    a)示例4;

    b)示例3;

    c)示例1;

    d)示例2.

(请注意顺序的改变。)

也就是说,在第二个版本的文档中,我想指示 LaTeX 按照 DCAB 顺序写入项目。这可以在不更改第一个文档的枚举代码的情况下实现吗?也就是说,不更改以下代码?

\begin{enumerate}

\item Examples.

\begin{enumerate}

\item Example 1;

\item Example 2;

\item Example 3;

\item Example 4.

\end{enumerate}

\end{enumerate}

提前致谢,

保罗

答案1

从字面上理解 OP(“在我的示例中,规则是:DCAB”),即列表顺序是预先指定的,这是一种listofitems对预先指定的列表进行排序的方法。请注意,如 MWE 中所示,预先指定的列表可以直接作为环境参数给出,也可以预先存储在宏中,然后由宏代替它传递。

请注意,该方法\item也可以处理可选参数。

已编辑,允许每个项目中有多个段落,以及tabulars 等。

我已经按以下方式设置了标点符号...我建议从\item输入中省略尾随标点符号prenumerate,然后将其作为输出的一部分插入。

\documentclass{article}
\usepackage{listofitems,environ}
\NewEnviron{prenumerate}[1]{%
  \ignoreemptyitems
  \setsepchar{,}%
  \readlist\listorder{#1}%
  \setsepchar{\item||\par\item}%
  \expandafter\readlist\expandafter*\expandafter
    \prenumlist\expandafter{\expandafter\item\expandafter\relax\BODY}%
  \begin{enumerate}
  \foreachitem\x\in\listorder[]{%
    \expandafter\expandafter\expandafter\item 
      \prenumlist[\the\numexpr\x+1\relax]%
    \ifnum\xcnt=\listlen\listorder[]\relax.\else;\fi%
  }%
  \end{enumerate}
}
\begin{document}
\newcommand\preordA{4,3,1,2}
\newcommand\preordB{3,1,4,2}
\begin{prenumerate}{\preordA}
\item Example 1

Multiple paragraphs

and another paragraph
\item Example 2
\item Example 3---tabular

\begin{tabular}{|c|c|}
 \hline
  a & b\\c & d\\\hline
\end{tabular}
\item Example 4
\end{prenumerate}

The prenumerate environment can be embedded inside enumerate, but
not nested with other prenumerates.

\begin{enumerate}
\item Examples.
\begin{prenumerate}{4,3,1,2}

\item Example 1

\item Example 2
\item Example 3
\item Example 4

\end{prenumerate}
\item Examples ordered differently.
\begin{prenumerate}{\preordB}
\item Example 1
\item Example 2
\item[$\bullet$] Example 3
\item Example 4
\end{prenumerate}
\end{enumerate}
\end{document}

在此处输入图片描述

相关内容