![如何将 xindy 与 XeTeX/LuaTeX 一起使用?](https://linux22.com/image/239650/%E5%A6%82%E4%BD%95%E5%B0%86%20xindy%20%E4%B8%8E%20XeTeX%2FLuaTeX%20%E4%B8%80%E8%B5%B7%E4%BD%BF%E7%94%A8%EF%BC%9F.png)
根据Xindy 回顾:UTF-8 时代的多语言索引创建(TUGboat), “如果一个人有一个由 [XeTeX] 生成的原始索引文件,那么他就可以使用 xindy;它会‘正常工作’。”
不幸的是我无法让它“正常工作”。如何将 Xindy 与 XeLaTeX 或 LuaLaTeX 一起使用?
LaTeX 文件示例:
\documentclass{article}
\makeindex
\begin{document}
start
\index{a}\index{b}\index{ä}\index{ü}
end
\end{document}
然后 LaTeX Companion (2ed) 告诉我运行
texindy -L german-duden test.idx
但是,当我这样做时,所有变音符号都排在 O 下。
答案1
根据 Ulrike 的回答,这里有一种方法可以调用xindy
它来对.idx
Xe/LuaLaTeX 创建的文件进行排序。诀窍是xindy
直接使用(而不是texindy
)并传递-C utf8
标志。
最小示例
\documentclass{article}
\usepackage{luatextra}
\usepackage{makeidx}
\makeindex
\begin{document}
üäö
start
\index{a}\index{b}\index{ä}\index{ü}
end
\printindex
\end{document}
汇编
lualatex filename.tex
xindy -M texindy -C utf8 -L german-duden filename.idx
lualatex filename.tex
您可以按(pdf)latex
以下方式使用 UTF-8 编码和 xindy:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{makeidx}
\makeindex
\begin{document}
start
\index{a}\index{b}\index{ä}\index{ü}
end
\printindex
\end{document}
然后只需运行即可texindy -L ⟨language⟩ ⟨filename⟩.idx
。
在 LuaTeX 中您还可以使用该luainputenc
包来使用旧式编码。
\documentclass{article}
\usepackage{fontspec}
\usepackage[utf8]{luainputenc}
\usepackage{makeidx}
\makeindex
\begin{document}
start
\index{a}\index{b}\index{ä}\index{ü}
end
\printindex
\end{document}
再次运行texindy -L ⟨language⟩ ⟨filename⟩.idx
。
以下是两个例子的结果:
答案2
这里有一个带有自己的样式文件的示例xindy
。使用以下命令运行
lualatex <file>
xindy -C utf8 -I latex -M myModuleE <file>.idx
lualatex <file>
然后我得到附加的输出
\documentclass[]{article}
\usepackage{fontspec}
\usepackage[ngerman]{babel}
\usepackage{filecontents,multicol}
\begin{filecontents*}{myModuleE.xdy}
(define-attributes ("default"))
(define-location-class "page-numbers" ("arabic-numbers"))
(markup-index :open "~n\begin{theindex}~n"
:close "~n\end{theindex}~n"
:tree)
(markup-locclass-list :open "\quad{}")
(markup-locref-list :sep ", ")
(markup-indexentry :open "~n \item " :depth 0)
( define-letter-group "A--D" :prefixes ("A" "B" "C" "D") )
( define-letter-group "E--G" :after "A--D" :prefixes ("E" "F" "G") )
( define-letter-group "H--K" :after "E--G" :prefixes ("H" "I" "J" "K") )
( define-letter-group "L--N" :after "H--K" :prefixes ("L" "M" "N" ) )
( define-letter-group "O--R" :after "L--N" :prefixes ("O" "P" "Q" "R") )
( define-letter-group "S--V" :after "O--R" :prefixes ("S" "T" "U" "V") )
( define-letter-group "W--Z" :after "S--V" :prefixes ("W" "X" "Y" "Z") )
(sort-rule "a" "A")
(sort-rule "b" "B")
(sort-rule "c" "C")
(sort-rule "d" "D")
(sort-rule "e" "E")
(sort-rule "f" "F")
(sort-rule "g" "G")
(sort-rule "h" "H")
(sort-rule "i" "I")
(sort-rule "j" "J")
(sort-rule "k" "K")
(sort-rule "l" "L")
(sort-rule "m" "M")
(sort-rule "n" "N")
(sort-rule "o" "O")
(sort-rule "p" "P")
(sort-rule "q" "Q")
(sort-rule "r" "R")
(sort-rule "s" "S")
(sort-rule "t" "T")
(sort-rule "u" "U")
(sort-rule "v" "V")
(sort-rule "w" "W")
(sort-rule "x" "X")
(sort-rule "y" "Y")
(sort-rule "z" "Z")
(markup-letter-group-list :sep "~n\indexspace")
(sort-rule "Ä" "A")
(sort-rule "ä" "A")
(sort-rule "Ö" "O")
(sort-rule "ö" "O")
(sort-rule "Ü" "U")
(sort-rule "ü" "U")
(merge-rule "\\[a-zA-Z@]+ *" "" :eregexp)
(merge-rule "\\[^a-zA-Z@]" "" :eregexp)
(merge-rule "^[{}$]" "" :eregexp)
\end{filecontents*}
\makeatletter
\renewenvironment{theindex}
{\raggedright\small\let\item\@idxitem \parskip .0pt\@plus .3\p@\relax
\begin{multicols}{2}}{\end{multicols}}
\makeatother
\usepackage{makeidx}\makeindex
% xindy -C utf8 -I latex -M myModuleE datei.idx
\begin{document}
\printindex \newpage foo \index{ä}\index{ü}
\index{Aal} \index{Berg}\index{Cäsar}
\index{Donau} \index{Emil}\index{Flora}
\index{Garten}\index{Ober}\index{Zucker}
\index{Österreich}\index{klein}\index{groß}
\end{document}
答案3
我没有可以工作的 xindy。但是根据这条消息http://sourceforge.net/mailarchive/message.php?msg_id=26841124我认为您至少需要选项 -C utf8,也许还需要一种新的 xindy 风格。