带页码和故事编号的索引

带页码和故事编号的索引

我有一本书,里面有大量编号的短篇小说,在书的最后,我希望主题索引看起来有点像这样:

funny ... 100 (222-225, 227), 200 (555)

括号内是故事编号。

我该如何使用xindy或其他工具来完成此操作?

MWE可能是这样的:

\documentclass[twoside]{book}
\usepackage{fontspec}
\usepackage{xunicode}
\usepackage{xltxtra}
% \usepackage[T2A]{fontenc}
\usepackage{fix-cm,anyfontsize}
\setmainfont[Mapping=tex-text, FakeStretch=0.97]{Cambria}
\newfontfamily\cyrillicfont[Mapping=tex-text, FakeStretch=0.97]{Cambria}
\usepackage[protrusion=all]{microtype}
\usepackage{polyglossia}
\setdefaultlanguage{russian}
\usepackage{makeidx}
\usepackage{multind}
\makeindex{subj}
\makeindex{name}
\newcommand{\subj}[1]{\index{subj}{#1}}
\newcommand{\name}[1]{\index{name}{#1}}
\newcounter{story}
\setcounter{story}{1}
\newcommand{\newstory}{%
    \pagebreak[3]%
    \vspace{1cm}%
    \noindent\textbf{\thestory. }\stepcounter{story}\ignorespaces
}


\begin{document}
\newstory
Была одна история…
\subj{funny}

\newstory
Была другая история…
\subj{funny}

\newstory
Была третья история…
\subj{sad}

\clearpage

\newstory
Была и ещё такая история…
\subj{funny}

\clearpage
\printindex{subj}{Тематический указатель}

\end{document}

编译者

xelatex mwe
xindy -M texindy -M page-ranges -L russian -C utf8 -o subj.ind subj.idx
xelatex mwe

答案1

编辑:我改变了的定义\thepagestory,因为旧的定义有时会给出错误的页码(在分页符附近)。

我改变了文档以使用\usepackage{index}而不是\usepackage{multind}因为index索引中可以有页码以外的其他数字,并且multind不能这样做。笔记:使用该index软件包,您必须先在文档上运行两次 LaTeX,然后才能运行xindy

我还复制了两个故事,以便故事编号有一个范围。我还将页码加粗,但您可以在文件中轻松更改xdy

以下是文档:

\documentclass[twoside]{book}
\usepackage{fontspec}
\usepackage{xunicode}
\usepackage{xltxtra}
% \usepackage[T2A]{fontenc}
\usepackage{fix-cm,anyfontsize}
\setmainfont[Mapping=tex-text, FakeStretch=0.97]{Cambria}
\newfontfamily\cyrillicfont[Mapping=tex-text, FakeStretch=0.97]{Cambria}
\usepackage[protrusion=all]{microtype}
\usepackage{polyglossia}
\setdefaultlanguage{russian}
\usepackage{makeidx}
\usepackage{index}
\makeindex
\newcommand\thepagestory{\noexpand\thepage-\thestory}
\newindex[thepagestory]{subj}{sidx}{sind}{Тематический указатель}
\newcommand{\subj}[1]{\index[subj]{#1}}
\newcounter{story}
\setcounter{story}{0}
\newcommand{\newstory}{%
    \pagebreak[3]%
    \vspace{1cm}%
    \stepcounter{story}\noindent\textbf{\thestory. }\ignorespaces
}

\begin{document}
\newstory
Была одна история…
\subj{funny}

\newstory
Была другая история…
\subj{funny}

\newstory
Была одна история…
\subj{funny}

\newstory
Была другая история…
\subj{funny}

\newstory
Была третья история…
\subj{sad}

\clearpage

\newstory
Была и ещё такая история…
\subj{funny}

\clearpage
\printindex[subj]%{Тематический указатель}

\end{document}

这是xindy样式文件stories.xdy

(require "latex.xdy") 
(require "latex-loc-fmts.xdy") 

(markup-locref :open "" :close "" :attr "hyperpage")


(define-location-class "stories" ("arabic-numbers" :sep "-" "arabic-numbers")
                      :hierdepth 2)

(markup-locref-list            :sep " "
                       :depth 0  :class "stories")
(markup-locref-list  :open " (" :sep ", " :close ")"
                       :depth 1  :class "stories")
;;
;; Put page numbers in bold
;;
(markup-locref-layer :open "\textbf{" :close "}" :layer 0
                       :depth 0  :class "stories")

(markup-range :sep "-" :class "stories")

运行的命令是,storyindex.tex我的文档在哪里:(我没有俄语文件所以我-L russian自己遗漏了)

xindy -M stories -L russian -C utf8 -o storyindex.sind storyindex.sidx

这是最终的索引: 在此处输入图片描述

相关内容