向索引文件添加行以避免页码

向索引文件添加行以避免页码

是否可以将自定义行写入索引文件?

考虑一下:

\documentclass{scrbook}
\usepackage[splitindex]{imakeidx}

\makeindex[name=date]

\newcommand\dateindex[1]{\index[date]{#1}}

\begin{document}
 \section{Diary, April 4th, 1891}
 \dateindex{1891!04!27}

Just some text

\immediate\write\@indexfile{???}{}


   \printindex[date]
   \end{document}

我的问题是:我该如何改变这一点

\immediate\write\@indexfile{???}{}

将一些没有页码的内容写入 idx 文件?

当然,这没有任何意义,因为我可以使用 sty-file。但在我的最终版本中,我会为书中不在日记条目中的部分添加日期和页码。

答案1

这个例子展示了一种抑制页码以及逗号的简单方法。

\documentclass{article}
\usepackage{makeidx}
\newcommand{\idxnopage}[1]{{}}
\providecommand{\gobble}[1]{{}}
\newcommand{\idxsechead}[1]{\textbf{#1}\gobble}
\makeindex

\begin{document}
Here is some text\index{some text} that we want indexed.

We also want a ``header'' in the index.

\index{00@\idxsechead{Header} |idxnopage}
\printindex
\end{document}

结果索引:

示例代码的输出

当然,您有责任创建适当的排序字段,以便这些条目按所需的顺序排序。

更新: 根据@florian 的评论,这不适用于xindy

imakeindex只要makeindex用作后端就可以使用。

答案2

\dateindex用于添加页码和\dateindex*抑制页码。

\documentclass{scrbook}
\usepackage{imakeidx}

\makeindex[name=date]

\makeatletter
\newcommand\dateindex{\@ifstar{\dateindex@noshow}{\index[date]}}
\newcommand\dateindex@noshow[1]{\index[date]{#1|noshowdate}}
\let\noshowdate\@gobble
\makeatother

\begin{document}

Not in the diary\dateindex{1892!04!27}\dateindex{1892!05!27}

\section{Diary, April 4th, 1891}
\dateindex*{1891!04!04}

\section{Diary, April 5th, 1891}
\dateindex*{1891!04!05}

Just some text

\printindex[date]

\end{document}

如果您想抑制“无页面”条目中的逗号,则需要一个样式文件。

\begin{filecontents*}{checkcomma.ist}
delim_0 "\\checkcomma"
delim_1 "\\checkcomma"
delim_2 "\\checkcomma"
\end{filecontents*}

\documentclass{scrbook}
\usepackage{imakeidx}

\makeindex[name=date,options=-s checkcomma]

\makeatletter
\newcommand\dateindex{\@ifstar{\dateindex@noshow}{\index[date]}}
\newcommand\dateindex@noshow[1]{\index[date]{#1|noshowdate}}
\let\noshowdate\@gobble
\newcommand\checkcomma{\@ifnextchar\noshowdate{}{, }}
\makeatother

\begin{document}

Not in the diary\dateindex{1892!04!27}\dateindex{1892!05!27}

\section{Diary, April 4th, 1891}
\dateindex*{1891!04!04}

\section{Diary, April 5th, 1891}
\dateindex*{1891!04!05}

Just some text

\printindex[date]

\end{document}

相关内容