自定义 xindy 索引布局

自定义 xindy 索引布局

我正在使用该songs软件包制作一本歌本。这本书是挪威语的,因此我们需要在 z 之后索引挪威语字母 æ、ø、å。据我所知,这只有使用 xindy 软件包才有可能。创建索引没有问题,但我想自定义它的外观。现在,它看起来像这样:

当前布局

使用 makeindex,我可以让它看起来正确 正确的布局

这是 makeindex 的代码

\usepackage[makeindex]{imakeidx} % Normal LaTeX indexing
\makeindex[columns=1, title=Sangregister,program=makeindex,intoc=true,options=-s idxconf.ist] % Properties of index

这是给 xindy 的

\usepackage[texindy]{imakeidx} 
\def\xindylangopt{-M lang/norwegian/latin1-test }
\makeindex[columns=1,name=master,title =Sangregister,intoc=true,options=\xindylangopt]

布局选项位于文件中idxconf.ist,其工作makeindex原理如下

headings_flag 1
heading_prefix "{\\bfseries "
heading_suffix "}\\nopagebreak\n"
delim_0 " \\dotfill "
delim_1 " \\dotfill "
delim_2 " \\dotfill "

是否可以将 idxconf.ist 文件与 xindy 一起使用?如果不行,我该如何自定义 xindy 使其看起来像最后一张图片。

这是一个最小工作示例:

xindy:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[norsk]{babel}
\usepackage[texindy]{imakeidx}
\def\xindylangopt{-M lang/norwegian/latin1-test}
\makeindex[columns=1,name=xindytest,title =Sangregister,  options=\xindylangopt]
\begin{document}
start
\index{a}\index{æ}\index{ø}\index{å}
end
blabla
\printindex
\end{document}

makeindex,看起来正确,但是 æøå 被视为符号。

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[norsk]{babel}
\usepackage[makeindex]{imakeidx}
\makeindex[columns=1, title=Sangregister,program=makeindex,intoc=true,options=-s idxconf.ist] % Egenskaper til indeks
\begin{document}
start
\index{a}\index{æ}\index{ø}\index{å}
end
blabla
\printindex
\end{document}

答案1

对于类似的作品,意大利语(歌曲集以重音字母开头的歌曲),我使用了这个样式文件(indicealfabetico.xdy

 (markup-index :open  "\begin{theindex}\sffamily~n
 \providecommand*\lettergroupDefault[1]{}
 \providecommand*\lettergroup[1]{%
 \par\textbf{\large#1}\par
   \nopagebreak
  }"
          :close "~n~n\end{theindex}~n"
          :tree)


;; The indexentries (item_<..> specifiers)

(markup-indexentry :open "~n  \item "           :depth 0)
(markup-indexentry :open "~n    \subitem "     :depth 1)
(markup-indexentry :open "~n      \subsubitem " :depth 2)

;; Location-references

;; delim_0 <string>         ", "
;; delim_1 <string>         ", "
;; delim_2 <string>         ", "

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

;; delim_n <string>         ", "

(markup-locref-list   :sep ", ")

;; delim_r <string>         "--"

(markup-range :sep "--")

以这样的方式使用 xindy:

% arara: xelatex: { shell : yes }
\documentclass[12pt]{book}
\usepackage{imakeidx} 
\makeindex[name=alfabetico,title=Indice alfabetico,program=truexindy,options=-M texindy -C utf8 -L italian -M indicealfabetico]

一个可编译的示例,与 xelatex 一起使用:

% arara: xelatex: { shell : yes}
\begin{filecontents*}{style.xdy}
(markup-index :open  "\begin{theindex}\sffamily~n
 \providecommand*\lettergroupDefault[1]{}
 \providecommand*\lettergroup[1]{%
 \par\textbf{\large#1}\par
   \nopagebreak
  }"
          :close "~n~n\end{theindex}~n"
          :tree)

(markup-locclass-list :open "\dotfill " :sep ", ")
;; End
\end{filecontents*}
\documentclass{article}
\usepackage{fontspec}
\usepackage{imakeidx}
\makeindex[columns=1,title=Sangregister,program=truexindy,options=-M texindy -C utf8 -L norwegian -M style]
\begin{document}
start
\index{a}\index{æ}\index{ø}\index{å}\index{Song}
end
blabla
\printindex
\end{document}

得出:在此处输入图片描述

答案2

不完全确定我是否充分回答了您的问题,但是使用提供的 MWE,我使用“词汇表”包创建了所需的结果,而不是尝试调整“imakeidx”。

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[norsk]{babel}
\usepackage[xindy]{glossaries}
\renewcommand*\glspostdescription{\dotfill}      % Dotted line to page numbers
\renewcommand*{\glsnamefont}[1]{\textnormal{#1}} % No bold font on index names

\makeglossaries

\begin{document}

\newglossaryentry{a}{name={a},description={}}
\newglossaryentry{ae}{name = {{æ}},description = {}} %Improtant to note the double curly
\newglossaryentry{oe}{name = {{ø}},description = {}} %brackets around the special caracters,
\newglossaryentry{aa}{name = {{å}},description = {}} %and only ASCII (afaik) in the handle.

start \gls{ae} \gls{aa} \gls{oe} \gls{a}
end
blabla

\printglossary[style=indexgroup, title=Sangregister]
\end{document}

得出:

LaTeX xindy 词汇表结果

我对我认为需要解释的地方进行了评论。我建议阅读此处的用户文档:CTAN 词汇表

如果你正在使用 MiKTeX,并且尚未完全安装 xindy 和 pearl,我推荐用户 Speravir 的这三篇帖子:

如果您正在使用 TeXmaker (或其衍生产品之一):这里有一个很好的答案,关于在哪里添加“makeglossaries”命令:

希望这可以帮助!

答案3

我对 Francesco 的回答做了一些小修改。

  • 我使用文件内容环境的覆盖选项,以便保存我的格式更改。

  • 您不需要(markup-index ...)这里给出的形式,因为这是默认的。

  • 引用列表中的分隔符由(markup-locref-list :sep "; ") 而不是:sep的变量 设置(markup-locclass-list :open "\dotfill " :sep ", ")

  • 添加语言包,如 luatex 中的 polyglossia 或 pdftex 中的 babel,以获取“参见”的当地术语,例如挪威语中的“Sjå”。

所以我的修改版本如下。

% !TeX program = lualatex
% !TEX encoding = UTF-8 Unicode
% !TeX spellcheck = en_NO
\begin{filecontents*}[overwrite]{style.xdy}
(markup-locclass-list :open "\dotfill ")
(markup-locref-list            :sep "; ")
\end{filecontents*}
\documentclass{article}
\usepackage{fontspec}
\usepackage[babelshorthands=true]{polyglossia}
\setdefaultlanguage{norwegian}
\usepackage[texindy]{imakeidx}
\makeindex[columns=1,title=Sangregister,options= -C utf8 -L norwegian  -M style]
\begin{document}
  a\index{a}, æ\index{æ}, ø\index{ø}, å\index{å}, Song\index{Song}\newpage
  a\index{a}, æ\index{æ}, ø\index{ø}, å\index{å}, Lied\index{Lied|see{Song}}
  \printindex
\end{document

相关内容