我正在尝试重新安排@Alan Munn 回答在索引中的“另见”引用前放置分号。但没有显示任何结果。我做错了什么?
代码:
\documentclass{article}
\begin{filecontents}{\jobname.mst}
delim_0 "\\idxdelim"
delim_1 "\\idxdelim"
delim_2 "\\idxdelim"
\end{filecontents}
\usepackage{imakeidx}
\makeindex
\makeatletter
\def\idxdelim{\@ifnextchar{\see}{\space}{\@ifnextchar{\seealso}{;\space}{\space}}}
\makeatother
\begin{document}
Some words. A test.
\index{words}
\index{phrases|see{words}}
\newpage
Words and sentences.\index{words}\index{sentences}
\newpage
Sentences.\index{sentences}
\index{sentences|seealso{words}}
\printindex
\end{document}
答案1
在.mst
文件中,
delim_0
指第0级索引项与其首页页码之间的分隔符。delim_1
参考第一级索引条目delim_2
参考第二级索引条目
这意味着您的代码没有明确配置与每个索引条目关联的不同“页码”之间会发生什么。我认为您想要的是设置键delim_n
;这将控制两个页码之间的分隔符。
以下代码应满足此评论。
\documentclass{article}
\begin{filecontents}{\jobname.mst}
delim_0 "\\space"
delim_1 "\\space"
delim_2 "\\space"
delim_n "\\idxBdelim"
\end{filecontents}
\usepackage{imakeidx}
\makeindex
\makeatletter
\def\idxBdelim{\@ifnextchar{\seealso}{;\space}{,\space}}
\makeatother
\begin{document}
Some words. A test.
\index{words}
\index{phrases|see{words}}
\newpage
Words and sentences.\index{words}\index{sentences}
\newpage
Sentences.\index{sentences}
\index{sentences|seealso{words}}
\printindex
\end{document}
答案2
楼主还问了询问hyperref
。我可以让它在测试用例中工作,这要归功于这个答案,但我非常担心潜在的副作用。在生产文档中使用它需要您自担风险!
\documentclass{article}
\begin{filecontents}{\jobname.mst}
delim_0 "\\space"
delim_1 "\\space"
delim_2 "\\space"
delim_n "\\idxBdelim"
\end{filecontents}
\usepackage{imakeidx}
\usepackage{hyperref}
\makeindex
\makeatletter
\def\idxBdelim{\@ifnextchar{\hyperindexformat}{;\space}{,\space}}
\def\@commahyperpage#1{\@@commahyperpage#1\idxBdelim{}\idxBdelim{}\\}
\def\@@commahyperpage#1\idxBdelim#2\idxBdelim#3\\{%
\ifx\\#2\\%
\HyInd@pagelink{#1}%
\else
\HyInd@pagelink{#1}\idxBdelim\HyInd@pagelink{#2}%
\fi
}
\makeatother
\begin{document}
Some words. A test.
\index{words}
\index{phrases|see{words}}
\newpage
Words and sentences.\index{words}\index{sentences}
\newpage
Sentences.\index{sentences}
\index{sentences|seealso{words}}
\printindex
\end{document}
可能的副作用:
- 这实际上破坏了
\hyperpage
以逗号分隔的元素列表的工作方式。 - 我无法检测到;我只检测到放在周围的
\seealso
包装器;但是相同的包装器也被放在周围,因此使用它需要您自担风险。\hyperref
\seealso
\see
一个可能更好的解决方案是尝试完全扩展(比如说)1\idxBdelim2
将扩展为的内容,然后再将其传递到\hyperpage
;这不需要修改的底层机制\hyperpage
。不幸的是,我无法让它工作。