假设我创建了一个包含一些西里尔字符的大型编号列表,但现在我想按字母顺序重新排列它们。顺便说一下,每个项目的数字也应该重新排序。我已阅读按字母顺序显示 itemize 中的项目文章,但这里的方法在我的案例中失败了(也许我做错了什么)。将整个代码放入 Excel 中并对其排序工具感到满意不是更容易吗?
以下是我所拥有的:
1)БВГ
2)АБВ
3) ДЕЖ
4) ХАУ
这就是我需要的:
1) АБВ
2)БВГ
3) ДЕЖ
4) ХАУ
要使用的代码:
\documentclass{article}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english,russian]{babel}
\begin{document}
\begin{enumerate}
\item БВГ
\item АБВ
\item ДЕЖ
\item ХАУ
\end{enumerate}
\end{document}
答案1
xindy
分类做得很好,而且TeX.SX 中有很多关于它的问题。但是,如果你接受基于 LuaTeX 的解决方案而不需要外部软件,那么有一个新的包lua-uca
它支持 Unicode 排序算法的基础知识。你真幸运!俄语是该包中预定义的语言之一,所以让我们使用它:
%!TEX program = lualatex
\documentclass{article}
\usepackage{fontspec}
%Change the font if necessary
\setmainfont{Noto Sans}
%For using \luadirect and luacode* environment
\usepackage{luacode}
\begin{luacode*}
%Copied from the documentation almost literally
kpse.set_program_name "luatex"
ducet = require "lua-uca.lua-uca-ducet"
collator = require "lua-uca.lua-uca-collator"
languages = require "lua-uca.lua-uca-languages"
collator_obj = collator.new(ducet)
collator_obj = languages.ru(collator_obj)
%Sorting
function russian_sort(mylist)
table.sort(mylist, function(a,b)return collator_obj:compare_strings(a,b)end)
return mylist
end
%Printing as list
function table_to_tex(mylist)
tex.print([[\begin{enumerate}]])
for _, v in ipairs(mylist) do
tex.print([[\item]].." "..v)
end
tex.print([[\end{enumerate}]])
end
ourlist = ourlist or {}
\end{luacode*}
%Passing TeX content to Lua
\newcommand{\addtoourlist}[1]{\luadirect{table.insert(ourlist, \luastringN{#1})}}
%Print an ordered list
\newcommand\printtoourlist{\directlua{russian_sort(ourlist) table_to_tex(ourlist)}}
\begin{document}
\addtoourlist{БВГ}
\addtoourlist{АБВ}
\addtoourlist{ДЕЖ}
\addtoourlist{ХАУ}
\printtoourlist
\end{document}