![svindd.ist 中有漏洞吗?](https://linux22.com/image/375211/svindd.ist%20%E4%B8%AD%E6%9C%89%E6%BC%8F%E6%B4%9E%E5%90%97%EF%BC%9F.png)
让我们将 Springer 的类与makeindex 应该使用的svmono
文件一起考虑;参见svindd.ist
Springer 的指南,其中引用了模板.让我们编译输入
\documentclass{svmono}
\usepackage{multicol}
\usepackage{makeidx}
\usepackage{hyperref}
\usepackage{lipsum}
\makeindex
\begin{document}
\pagenumbering{none}%%% Makes sure that if we drop "-s svindd.ist", the hyperlinks point where they should point.
\title{Book's title}
\maketitle
\mainmatter
\chapter{Chapter's title}
\lipsum[1-2]
keyword\index{keyword}
\lipsum[1-2]\section{Section's title}keyword\index{keyword}%%% culprit line
\printindex
\end{document}
book.tex
使用标准循环存储:
pdflatex book && makeindex -s svindd.ist book && pdflatex book
(备注:当然,以上只是 MWE;真正的书籍还使用了更多的类选项、包和 bibtex。)
我们在输出 PDF 的最后一页看到的是索引,其中两个参考文献合并为一个:
点击红色框会转到标题页,而不是关键字定义。在日志中,您会看到警告:
name{page.1,\\relax\040\\hskip\0400.2em\\ignorespaces\0402} has been referenced but does not exist, replaced by a fixed one
可以有两种解决方法:
删除源文件中的罪魁祸首行(但你确实希望索引中包含这两个页面),
删除
-s svindd.ist
(但德国书籍应该这么用)。
现在,我们是否以错误的方式使用 Springer 的课程文件或者是否svindd.ist
有误?
svindd.ist的内容如下:
quote '+'
headings_flag 1
heading_prefix "{\\bf "
heading_suffix "}\\nopagebreak%\n \\indexspace\\nopagebreak%"
delim_0 "\\idxquad "
delim_1 "\\idxquad "
delim_2 "\\idxquad "
delim_n ",\\,"
答案1
hyerrref 尝试按,
(逗号空格)拆分页面列表,但svindd.ist
使列表被,\,
(逗号细空格)分隔,因此您需要调整拆分循环,将其替换为
\,
\documentclass{svmono}
\usepackage{multicol}
\usepackage{makeidx}
\usepackage{hyperref}
\makeatletter
\def\@commahyperpage#1{\@@commahyperpage#1,\,,\\}
\def\@@commahyperpage#1,\,#2,#3\\{%
\ifx\\#2\\%
\HyInd@pagelink{#1}%
\else
\HyInd@pagelink{#1},\,\HyInd@pagelink{#2}%
\fi
}
\makeatother
\usepackage{lipsum}
\makeindex
\begin{document}
\pagenumbering{none}
\title{Book's title}
\maketitle
\mainmatter
\chapter{Chapter's title}
\lipsum[1-2]
keyword\index{keyword}
\lipsum[1-2]\section{Section's title}keyword\index{keyword}%%% culprit line
\printindex
\end{document}