用重音词对索引条目进行排序

用重音词对索引条目进行排序

朋友们,我已经为 TeX 力中的这个干扰挣扎了一段时间:

我有一组带重音的葡萄牙语单词。在对这些单词进行排序时,我们将带重音的字母与不带重音的字母视为相同的字母。因此,列出以下单词:

abacate
ábaco
alavanca
árvore
arte
ácaro
aba

排序为

aba
abacate
ábaco
ácaro
alavanca
arte
árvore

makeindex当使用这些单词作为索引条目时,重音字母按符号排序:

\begin{filecontents*}{mystyle.ist}
headings_flag 1
heading_prefix "\\textit{"
heading_suffix "}\\nopagebreak\n"
delim_0 " \\dotfill "
delim_1 " \\dotfill "
delim_2 " \\dotfill "
\end{filecontents*}

\documentclass{memoir}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{imakeidx}[2012/05/09]

\def\pfill{\unskip~\dotfill\penalty500 
  \strut\nobreak\dotfil~\ignorespaces}

\def\efill{\hfill\nopagebreak}

\def\dotfil{\leaders\hbox to.6em{\hss.\hss}\hfil}

\makeindex[name=words,columns=1,options=-s mystyle]
\begin{document}

Hello world.

\index[words]{abacate}
\index[words]{ábaco}
\index[words]{alavanca}
\index[words]{árvore}
\index[words]{arte}
\index[words]{ácaro}
\index[words]{aba}

\printindex[words]
\end{document}

输出

Marco Daniel 在聊天中巧妙地建议我尝试xindy一下makeindex。所以

xindy -M texindy -C utf8 -L portuguese filename.idx

产生“正确”的排序(当然是葡萄牙语,我知道其他语言有不同的规则)。

不幸的是,我对索引使用了一些自定义样式(我们可以在上面看到其中一种)。令​​我失望的是,它的xindy工作原理与 完全不同makeindex,而且.ist据我所知,我的样式不受支持。

xindy如果我也可以移植我的.ist风格,那么转移对我来说就很好了。

我现在使用的解决方法是在“正确”的单词之前提供一个无重音的单词:

\index[words]{abacate}
\index[words]{abaco@ábaco}
\index[words]{alavanca}
\index[words]{arvore@árvore}
\index[words]{arte}
\index[words]{acaro@ácaro}
\index[words]{aba}

输出 2

这个有效。:)

是否可以为 提供排序规则makeindex,或者提供类似的.ist样式xindy?我对当前的解决方法很满意,但从索引条目中删除每个重音符号非常麻烦。如果可能的话,我宁愿坚持使用makeindex:)

答案1

这是简单的解决方案。好吧,毕竟不是那么简单。:)

一个小问题,我将在下一个版本中解决imakeidx:出于某种原因(我现在不记得了),我们决定还是program=xindy调用它texindy。但不幸的是,似乎调用

xindy -M mystyle -C utf8 -L portuguese words.idx

texindy -M mystyle -C utf8 -L portuguese words.idx

不是等效,因为后者会引发难以理解的错误(可能是texindy脚本中的错误)。

因此,以下文档将需要手动运行xindy(但您有 Arara,所以这不是问题),直到小问题得到纠正。

请注意,xindy为字母组提供了两个命令,应该在序言中重新定义这些命令以执行所需的操作。

\begin{filecontents*}{mystyle.xdy}
(markup-locclass-list :open "\dotfill " :sep "\dotfill ")
\end{filecontents*}

\documentclass{memoir}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{imakeidx}[2012/05/09]
\newcommand*{\lettergroupDefault}[1]{}
\newcommand*\lettergroup[1]{%
  \par\textit{#1}\par
  \nopagebreak
  }

\def\pfill{\unskip~\dotfill\penalty500 
  \strut\nobreak\dotfil~\ignorespaces}

\def\efill{\hfill\nopagebreak}

\def\dotfil{\leaders\hbox to.6em{\hss.\hss}\hfil}

\makeindex[name=words,columns=1,program=xindy,options=-M texindy -M mystyle -C utf8 -L portuguese]
\begin{document}

Hello world.

\index[words]{abacate}
\index[words]{ábaco}
\index[words]{alavanca}
\index[words]{árvore}
\index[words]{arte}
\index[words]{ácaro}
\index[words]{aba}

\printindex[words]
\end{document}

答案2

另一种方法是在索引条目中使用 @,然后输入要索引的不带重音符号的单词。

\index{Etica@Ética}

这将使单词在索引中显示如下内容: 在此处输入图片描述

答案3

这里有一个仅使用样式文件的解决方案。

该样式仅由两行组成:

(markup-locclass-list  :open " \dotfill\ "   ) 

(markup-letter-group  :open-head "\textit{" :close-head "}" ) 

这里有一个完整的 MWE,需要进行 shell 转义。

\RequirePackage{filecontents}
\begin{filecontents*}{mystyle.xdy}
;;; xindy style file

;;;dotted line between name and page number
(markup-locclass-list  :open " \dotfill\ "   ) 

(markup-letter-group  :open-head "\textit{" :close-head "}" ) 

\end{filecontents*}

\documentclass{memoir}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{imakeidx}[2012/05/09]

\def\pfill{\unskip~\dotfill\penalty500 
  \strut\nobreak\dotfil~\ignorespaces}

\def\efill{\hfill\nopagebreak}

\def\dotfil{\leaders\hbox to.6em{\hss.\hss}\hfil}

\makeindex[program=texindy,options=-M mystyle.xdy,name=words,columns=1]


\begin{document}

Hello world.

\index[words]{abacate}
\index[words]{ábaco}
\index[words]{alavanca}
\index[words]{árvore}
\index[words]{arte}
\index[words]{ácaro}
\index[words]{aba}

\printindex[words]
\end{document}

答案4

我需要更多一点的空间,但是像这样:

\newcommand\lettergroup[1]{%
  \par\textit{#1}\par
  \nopagebreak}
\newcommand\lettergroupDefault[1]{\lettergroup{#1}}

以及一个新模块(mystyle.xdy):

(markup-locclass-list :open "\dotfil ")

然后texindy通过调用

texindy -M mystyle.xdy ....

这似乎和你的 MWE 作用相同,texindy只是

相关内容