样式文件

样式文件

对于我的博士论文,我需要列出引用的作品。我认为使用 LaTeX 索引是个好主意。但不幸的是,索引中不能有超过 3 个级别。顺便说一句,我使用的是类memoirxelatex

索引的示例可以是:

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} 

得出的结果为:

输出的第 3 页

答案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}

排序条目中的数字确保它们分组,其中“基督教著作”排在第一位。有关此论坛的人们向我建议的解决方案的详细信息,请参阅如何在项目级别向索引中添加没有页码的条目?

相关内容