对于我的博士论文,我需要列出引用的作品。我认为使用 LaTeX 索引是个好主意。但不幸的是,索引中不能有超过 3 个级别。顺便说一句,我使用的是类memoir
和xelatex
。
索引的示例可以是:
Christian Writings
Origen
Homilies on Joshua
1.1, 5
2.2, 6
Homilies on Numbers
1.1, 7
New Testament
Matthew
1.1, 8
John
2.2, 9
Shepherd of Hermas
1.1, 8
Jewish Writings
Old Testament
Genesis
1.1, 11
我必须以代码模式输入它才能看清楚结构。这是一个最简单的例子:
\documentclass[12pt]{memoir}
\makeindex
\begin{document}
Lorem ipsum
\index{Christian Writings!Origen!Homilies!1.1}
\index{Christian Writings!New Testament!Matthew!1.1}
\index{Christian Writings!Shepherd of Hermas!1.1}
\printindex
\end{document}
这仅输出第三个索引条目(因为其他两个有太多“!”)。
有人可以帮忙吗?
答案1
xindy
是一个索引处理器,比 更强大makeindex
,具有完整的 Unicode 支持,并且允许索引内有多个级别。
但是,由于默认定义的级别不超过三个,因此它无法“开箱即用”:您必须定义自己的xindy
样式文件,并重新定义index
环境。我从 Herbert 那里偷了一些代码,他将其发布在xindy 邮件列表,并使其适应memoir
。
样式文件
您可以创建一个名为 eg 的新文件style1.xdy
,其中包含以下行:
(markup-indexentry :open "~n \subIIIitem " :depth 3)
并将其放在与文档相同的文件夹中。在下面的示例中,与 Herberts 代码一样,这是由环境完成的filecontents*
。我想将文件放在找到 s 样式文件的文件夹中xindy
也可以,例如texmf/xindy/modules/styles/
。
文件
编译使用:
xelatex file.tex
texindy -M style1.xdy file.idx
xelatex file.tex
\documentclass[12pt]{memoir}
\usepackage{filecontents}
\begin{filecontents*}{style1.xdy}
(markup-indexentry :open "~n \subIIIitem " :depth 3)
\end{filecontents*}
\makeatletter
\newcommand\subIIIitem{\@idxitem \hspace*{40\p@}}
\renewenvironment{theindex}{%
\clearforchapter
\if@twocolumn
\@restonecolfalse
\else
\@restonecoltrue
\fi
\ifonecolindex
\onecolumn
\chapter*{\indexname}
\preindexhook
\else
\setlength{\columnseprule}{\indexrule}%
\setlength{\columnsep}{\indexcolsep}%
\twocolumn[\@makeschapterhead{\indexname}
\preindexhook]%
\fi
\indexmark
\ifnoindexintoc\else
\phantomsection
\addcontentsline{toc}{chapter}{\indexname}%
\fi
\thispagestyle{indextitlepagestyle}\parindent\z@
\parskip\z@ \@plus .3\p@\relax
\let\item\@idxitem%
\raggedright\small\let\item\@idxitem \parskip .0pt\@plus .3\p@{}}
\makeatother
\usepackage{makeidx}\makeindex
\begin{document}
Lorem ipsum.
\index{Christian Writings!Origen!Homilies!1.1}
\index{Christian Writings!New Testament!Matthew!1.1}
\index{Christian Writings!Shepherd of Hermas!1.1}
\printindex
\end{document}
得出的结果为:
答案2
由于还没有人(目前?)提出全面的解决方案,我想建议一种解决方法,即仅使用最多两级索引。附带的好处是,在我看来,这种索引比多级索引更具可读性:
\documentclass[12pt]{memoir}
\makeindex
\begin{document}
Lorem ipsum
\index{Christian Writings|seealso{Origen,
New Testament, Shepherd of Hermas}}
\index{Origen!Homilies!1.1}
\index{New Testament!Matthew!1.1}
\index{Shepherd of Hermas!1.1}
\printindex
\end{document}
答案3
为了寻找类似问题的解决方案,我决定创建一个空的第一级条目 - 在您的情况下为“基督教著作”(没有页码),后面跟着同一级别的条目“Origen”等。此解决方案在 imakeidx 中有效,但可能在 makeindex 中也有效:
\index{010Christian Writings@\idxsechead{Christian Writings}|idxnopage}
\index{01Origen@Origen}
\index{010Ignatius@Ignatius}
排序条目中的数字确保它们分组,其中“基督教著作”排在第一位。有关此论坛的人们向我建议的解决方案的详细信息,请参阅如何在项目级别向索引中添加没有页码的条目?