如何在索引中的“另请参阅”参考文献前添加分号?

如何在索引中的“另请参阅”参考文献前添加分号?

我正在尝试重新安排@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。不幸的是,我无法让它工作。

相关内容