是否可以将自定义行写入索引文件?
考虑一下:
\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}