按编号列表对西里尔字母项目进行排序

按编号列表对西里尔字母项目进行排序

假设我创建了一个包含一些西里尔字符的大型编号列表,但现在我想按字母顺序重新排列它们。顺便说一下,每个项目的数字也应该重新排序。我已阅读按字母顺序显示 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}

在此处输入图片描述

相关内容