在某些文档中,我有一些长的项目符号列表(编号或未编号),例如:
- 2001年:……
- 2002年:....
- 2003年:.....
但我只想按照相反的顺序重新排列列表,以便最终得到如下结果:
- 2003年:……
- 2002年:....
- 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
修改上述内容以使其同样适用于列表将是微不足道的。