在 LyX 中重新排序长项目符号列表

在 LyX 中重新排序长项目符号列表

在某些文档中,我有一些长的项目符号列表(编号或未编号),例如:

  1. 2001年:……
  2. 2002年:....
  3. 2003年:.....

但我只想按照相反的顺序重新排列列表,以便最终得到如下结果:

  1. 2003年:……
  2. 2002年:....
  3. 2001年:.....

这个简单的例子很简单,但我有 200 个条目的列表。我该怎么做?

答案1

使用一些技术enumerate自动对环境中的物品进行排序,您可以在 LaTeX 端反转列表。它仍将按您在 LyX 中放置它们的顺序显示,但在输出中将被反转。

将以下内容添加到您的文档 > 设置... > 本地布局:

Format 60

Style Reverse_Enumerate
Category              List
Margin                Static
LatexType             Item_Environment
LatexName             reverseenum
NextNoIndent          1
ToggleIndent          Never
LeftMargin            MMN
LabelSep              xx
ParSkip               0.0
ItemSep               0.2
TopSep                0.7
BottomSep             0.7
ParSep                0.3
Align                 Block
AlignPossible         Block, Left
LabelType             Enumerate
LabelCounter          "enum"
HTMLTag               ol
HTMLItem              li
HTMLLabel             NONE
RefPrefix             enu
End

上面定义了一个新环境Reverse Enumerate,您可以从段落下拉菜单中选择:

在此处输入图片描述

它实际上与Enumerate构造类似,只是名称不同,与不同的 LaTeX 环境相关联reverseenum,并且删除了插入 > 自定义项目选项。现在将环境的定义添加reverseenum到您的文档 > 设置... > LaTeX 序言中:

% Using some ideas from
%   https://tex.stackexchange.com/q/128297/5764
\usepackage{environ}

\makeatletter
\newcounter{reverseenum}\newcounter{listcount}[reverseenum]%
\let\olditem\item% Store regular \item macro
\NewEnviron{reverseenum}{%
  \stepcounter{reverseenum}% New reverseenum environment (also resets listcount)
  \g@addto@macro{\BODY}{\item\relax\item}% Used to delimit the items; last item identified by \item\relax\item
  \def\item##1\item{% Redefine \item to capture contents
    \def\optarg{##1}%
    \expandafter\ifx\optarg\relax\else% Last item not reached
      \stepcounter{listcount}% Next item being processed
      \global\@namedef{reverseenum@\thereverseenum @\thelistcount}{##1}% Store item in control sequence
      \expandafter\item% Recursively continue processing items
    \fi
  }
  \BODY% Process environment (save items)
  \def\reverselist{% How to reverse list, recursively
    \ifnum\value{listcount}>0
      \olditem \csname reverseenum@\thereverseenum @\thelistcount\endcsname
      \addtocounter{listcount}{-1}%
      \reverselist
    \fi
  }
  \enumerate\reverselist\endenumerate% Process items
}
\makeatother

上述定义处理列表一次,将每个列表存储\item在一个专门命名的宏中。处理完整个环境并\item存储 s 后,它会通过以相反的顺序设置现在存储的 s 来重新处理列表\item,并向后遍历专门命名的宏列表。

为此,请考虑以下 LyX 输入:

在此处输入图片描述

第一个列表设置在 下Enumerate。第二个列表设置在 下Reverse Enumerate。它生成以下 PDF 输出:

在此处输入图片描述

Itemize修改上述内容以使其同样适用于列表将是微不足道的。

相关内容