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