我试图在打印第一个多索引之前添加章节标题“索引”。但是,printindex 会刷新页面,因此如果我这样做,我将得到标题、页面的其余部分为空以及第一个索引。我希望先打印“索引”标题,然后在其下方立即打印第一个索引,然后第二个索引以刷新的页面正常开始。
因此,不要:
------------- ------------- ------------- -------------
| | | | | | | |
| Indices | | Names | | ---- ---- | | Places |
| | | ---- ---- | | ---- ---- | | ---- ---- |
| | | ---- ---- | | ---- ---- | | ---- ---- |
| | | ---- ---- | | ---- ---- | | ---- ---- |
| | | ---- ---- | | | | ---- ---- |
| 124 | | 125 | | 126 | | 127 |
|-----------| |-----------| |-----------| |-----------|
我想要实现:
------------- ------------- ------------- -------------
| | | | | | | |
| Indices | | ---- ---- | | ---- ---- | | Places |
| | | ---- ---- | | | | ---- ---- |
| Names | | ---- ---- | | | | ---- ---- |
| ---- ---- | | ---- ---- | | | | ---- ---- |
| ---- ---- | | ---- ---- | | | | ---- ---- |
| 124 | | 125 | | 126 | | 127 |
|-----------| |-----------| |-----------| |-----------|
我正在使用书籍。任何帮助都将不胜感激。
梅威瑟:
\documentclass{book}
\usepackage{multind}
\makeindex{names}
\makeindex{places}
\usepackage{lipsum}
\begin{document}
\chapter{Chapter one}
\index{names}{John}\index{places}{London}
\lipsum
\index{names}{Tim}\index{places}{York}
\chapter{Chapter two}
\index{names}{John}\index{places}{York}
\lipsum
\index{names}{Tim}\index{places}{London}
\chapter*{Indices}
\printindex{names}{Index of names}
\printindex{places}{Index of places}
\end{document}
答案1
multind.sty
定义\printindex
为
\def\printindex#1#2{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
\columnseprule \z@ \columnsep 35pt
\newpage \twocolumn[{\Large\bf #2 \vskip4ex}]
\markright{\uppercase{#2}}
\addcontentsline{toc}{section}{#2}
\@input{#1.ind}}
和强制打开新页面。在下面的例子中,我重新定义了抑制\newpage
和使用;我改用包来生成两列布局;此外,我使用而不是简单地排版标题。\twocolumn
\printindex
\newpage
\twocolumn
multicol
{\Large\bf #2 \vskip4ex}
\section*
\documentclass{book}
\usepackage{multind}
\usepackage{multicol}
\usepackage{lipsum}
\makeindex{names}
\makeindex{places}
\makeatletter
\def\printindex#1#2{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
\columnseprule \z@ \columnsep 35pt
\csname phantomsection\endcsname
\section*{#2}
\markright{\uppercase{#2}}
\addcontentsline{toc}{section}{#2}
\begin{multicols}{2}
\@input{#1.ind}%
\end{multicols}%
}
\makeatother
\begin{document}
\chapter{Chapter one}
\index{names}{John}\index{places}{London}
\lipsum
\index{names}{Tim}\index{places}{York}
\chapter{Chapter two}
\index{names}{John}\index{places}{York}
\lipsum
\index{names}{Tim}\index{places}{London}
\chapter*{Indices}
\printindex{names}{Index of names}
\newpage
\printindex{places}{Index of places}
\end{document}
指数第一页的图片:
也许您可以考虑使用另一个更现代的包来构建您的索引;splitindex
似乎是个不错的选择。
答案2
具有比以下更现代的软件包的解决方案multind
:
\documentclass{book}
\usepackage{imakeidx}
\makeindex[name=names,title=Index of names]
\makeindex[name=places,title=Index of places]
\newcommand{\startindices}{%
\chapter*{Indices}
\let\latexcleardoublepage\cleardoublepage
\def\cleardoublepage{%
\def\cleardoublepage{%
\global\let\cleardoublepage\latexcleardoublepage}}%
}
\usepackage{lipsum}
\begin{document}
\chapter{Chapter one}
\index[names]{John}\index[places]{London}
\lipsum
\index[names]{Tim}\index[places]{York}
\chapter{Chapter two}
\index[names]{John}\index[places]{York}
\lipsum
\index[names]{Tim}\index[places]{London}
\startindices
\printindex[names]
\printindex[places]
\end{document}
请注意,这些条目的语法不同\index
,如果您已经编写了许多条目,这可能会给您带来不便。在这种情况下,添加
\let\imkiindex\index
\renewcommand\index[1]{\imkiindex[#1]}
before\end{document}
允许您保留multind
索引条目的语法。
修改\makeindex
和\printindex
命令应该不是什么大问题。
使用的优点imakeidx
是,您不必记住运行 MakeIndex,因为该包会为您完成此操作。它还具有将索引添加到目录中的可能性,
\makeindex[name=names,title=Index of names,intoc]
\makeindex[name=places,title=Index of places,intoc]