Xindy 作为排序引擎

Xindy 作为排序引擎

请节省您的时间和精力来完成此任务。它已部分解决。

我正在一步步尝试解决这个问题xindy 为古埃及语音译。有一些有趣的附带问题,这是第一个。如何将 Xindy 仅用作排序引擎?所以我的任务是获得与 Linux 程序类似的结果种类

我们运行任何 LaTeX 引擎,例如

lualatex 毒素迪问题.tex
xindy -M texindy -L czech -C utf8 毒素迪问题.idx
lualatex 毒素迪问题.tex

让其成为 MWE:

% run: *latex toxindy-question.tex
\documentclass[a4paper]{article}
\usepackage{makeidx}
\makeindex
\usepackage{filecontents}
\begin{document}
Text before.
\index{first}\index{první}
\index{bread}\index{chléb}
\index{beer}\index{pivo}
\index{cibule}\index{mrkev}\index{řeřicha}\index{čmuchal}
\index{lenost}
\index{lenost}
\index{6@six}
\index{testv}
\index{testD!testE}
\index{testA!testB!testC}
\index{levelw}
\newpage
\index{lenostem}
\index{mark|textit}
\printindex
\end{document}

请求的输出toxindy-question.ind应该是:

six
beer
bread
cibule
čmuchal
first
chléb
lenost
lenostem
levelw
mark
mrkev
pivo
první
řeřicha
testA testB testC
testD testE
testv

实际输出是这样的(toxindy-question.ind):

\begin{theindex}
  \providecommand*\lettergroupDefault[1]{}
  \providecommand*\lettergroup[1]{%
      \par\textbf{#1}\par
      \nopagebreak
  }

  \lettergroupDefault{default}
  \item six, 1

  \indexspace

  \lettergroup{B}
  \item beer, 1
  \item bread, 1

  \indexspace

  \lettergroup{C}
  \item cibule, 1

  \indexspace

  \lettergroup{Č}
  \item čmuchal, 1

  \indexspace

  \lettergroup{F}
  \item first, 1

  \indexspace

  \lettergroup{Ch}
  \item chléb, 1

  \indexspace

  \lettergroup{L}
  \item lenost, 1
  \item levelw, 1

  \indexspace

  \lettergroup{M}
  \item mrkev, 1

  \indexspace

  \lettergroup{P}
  \item pivo, 1
  \item první, 1

  \indexspace

  \lettergroup{Ř}
  \item řeřicha, 1

  \indexspace

  \lettergroup{T}
  \item testA
    \subitem testB
      \subsubitem testC, 1
  \item testD
    \subitem testE, 1
  \item testv, 1

\end{theindex}

答案1

其中一个问题是,据我所知,捷克语的排序并非 100% 有效sort(不考虑字母/二合字母ch)。我们不能使用合并规则,而且在那里设置新语言也不是一项典型的任务。因此 Xindy 仍然是第一选择。

我的主要任务是排版捷克语、古埃及象形文字和英国语音词典/索引,我需要对索引条目进行排序和分组,但不提供任何标签,以便以后在 Lua 中使用。我附上了我的尝试,我离完全解决这个任务已经很近了,但是我仍然无法摆脱索引页码的困扰。这可以在 TeX 级别轻松完成(使用 TeX 命令包装索引页码并使用类似\def\getmelost#1{}),或者,我们可以删除 Lua 中百分号后面包括 和 的部分,例如通过string.gsub。我想知道我们是否可以在 Xindy 级别做到这一点。

我准备了一个附加文件,clearme.xdy以便我们可以轻松地从捷克语切换到另一种语言。在此示例中,我们运行任何 LaTeX 引擎,例如:

lualatex toxindy.tex
xindy -M texindy -L czech -C utf8 -M clearme toxindy.idx
lualatex toxindy.tex

我附上了一个最小的工作示例:

% run: *latex toxindy.tex
\documentclass[a4paper]{article}
\usepackage{makeidx}
\makeindex
%\usepackage{hyperref}
\usepackage{filecontents}
\begin{filecontents*}{clearme.xdy}
(define-letter-groups (""))
(markup-index :open  "" :close "" :tree)
(markup-letter-group-list :sep "")
(markup-letter-group :open-head "" :close-head "")
(markup-letter-group :open-head "" :close-head "" :group "default")
(markup-indexentry :open "" :close "~n" :depth 0)
(markup-indexentry :open " " :close "" :depth 1)
(markup-indexentry :open " " :close "" :depth 2)
(markup-locclass-list :open "" :sep "") 
(markup-locref-list :sep "")
(markup-range :sep "")
(markup-crossref-list :open "" :close "" :class "see")
;(markup-locref :class "page-numbers" :open "pivo" :close "nepivo")
(markup-locref :open "% " :close "" :attr "default")
(markup-locref :open "% " :close "" :attr "textbf")
(markup-locref :open "% " :close "" :attr "textit")
(markup-locref :open "% " :close "" :attr "hyperpage")
;(define-location-class "page-numbers" ("arabic-numbers"))
; :minimum-range-length 3
; (markup-attribute-group :open "<group0>" :close "</group0>" :group 0)
; (markup-trace :open "%%" :close "~n")
;(define-location-class-order (""))
;(define-attributes ("see"))
\end{filecontents*}

\begin{document}
Text before.
\index{first}\index{první}
\index{bread}\index{chléb}
\index{beer}\index{pivo}
\index{cibule}\index{mrkev}\index{řeřicha}\index{čmuchal}
\index{lenost}
\index{lenost}
\index{6@six}
\index{testv}
\index{testD!testE}
\index{testA!testB!testC}
\index{levelw}
\newpage
\index{lenostem}
\index{mark|textit}
\printindex
\end{document}

这是我努力的结果(toxindy.ind)。这个结果可以用,但并不完美。

six% 1 
beer% 1 
bread% 1 
cibule% 1 
čmuchal% 1 
first% 1 
chléb% 1 
lenost% 1 
lenostem% 2 
levelw% 1 
mark% 2 
mrkev% 1 
pivo% 1 
první% 1 
řeřicha% 1 
testA testB testC% 1 
testD testE% 1 
testv% 1 

相关内容