我目前正在写一些附录,我想知道为什么一些关键字没有出现在索引中。
附录的每个部分(A...,B...,C...等)的页码都重新定义。
我发现,总是存在这个错误:
扫描输入文件 testfile.idx...完成(接受 0 个条目,拒绝 4 个)。
文件内容testfile.idx
:
\indexentry{A}{C1}
\indexentry{B}{C1}
\indexentry{C}{C2}
\indexentry{D}{C2}
makeindex-logfile的内容:
Scanning input testfile.idx...
!! Input index error (file = testfile.idx, line = 1):
-- Illegal Roman number: position 2 in C1.
!! Input index error (file = testfile.idx, line = 2):
-- Illegal Roman number: position 2 in C1.
!! Input index error (file = testfile.idx, line = 3):
-- Illegal Roman number: position 2 in C2.
!! Input index error (file = testfile.idx, line = 4):
-- Illegal Roman number: position 2 in C2.
done (0 entries accepted, 4 rejected).
这对于以 A、B 和 E(可能更多)开头的页面工作正常,但对于 C 和 D 则失败。因此,我担心 makeindex 会将 C 和 D 分别解释为代表 100 和 500 的罗马数字。
梅威瑟:
\documentclass{scrbook}
\usepackage{makeidx}
\makeindex
\begin{document}
\pagenumbering{arabic}\renewcommand{\thepage}{C\arabic{page}}
A\index{A} B\index{B}
\clearpage
C\index{C} D\index{D}
\cleardoublepage
\printindex
\end{document}
我必须做什么才能让 makeindex 解释“C1”等等?
更新:
使用 hyperref 时遇到的页码问题:
答案1
如果你不完全遵守该页面格式,makeindex 会更乐意使用-
分隔符:
\documentclass{scrbook}
\usepackage{makeidx}
\makeindex
\begin{document}
\pagenumbering{arabic}\renewcommand{\thepage}{A-\arabic{page}}
A\index{A} B\index{B}
\clearpage
C\index{C} D\index{D}
\cleardoublepage
\pagenumbering{arabic}\renewcommand{\thepage}{C-\arabic{page}}
A\index{A} B\index{B}
\clearpage
C\index{C} D\index{D}
\cleardoublepage
\printindex
\end{document}
正如 egreg 在评论中指出的那样(并经过许可包含在此处:-),拥有不可见页面分隔符的技巧是使用 makeindex 样式进行“page_compositor_”设置。
\protected\def\?{}
\renewcommand\thepage{C\?\arabic{page}
在 LaTeX 文件中
page_compositor "\\?"
foo.ist
在要调用的文件中
makeindex -s foo filename
或filename.mst
答案2
如果你真的不想要 C-1、C-2……,有一个便宜的解决方法:
无论如何,继续使用 C- 进行操作。LaTeXfoo.idx
将从您的foo.tex
文件中生成,然后 MakeIndex 将创建foo.ind
不会拒绝的内容。当您对其他所有内容都满意并且索引中仍然有那些讨厌的 C- 页码时,打开foo.ind
并进行全局搜索和替换,将每个 C- 更改为 C。修复您的foo.tex
文件以在附录中使用 C 而不是 C- 并最后一次使用 LaTeX 进行处理,这样您就完成了。
答案3
hyperref
大卫·卡莱尔的补充回答:
\usepackage{hyperref}
% disable \? in page labels, destinations and links
\pdfstringdefDisableCommands{\let\?\relax}
\makeatletter
\g@addto@macro\theindex{\let\?\@empty}
\makeatother
\jobname.mst
使用makeindex 样式文件的完整示例。
\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.mst}
page_compositor "\\?"
\end{filecontents*}
\documentclass{scrbook}
\usepackage{makeidx}
\makeindex
\usepackage{hyperref}
\newcommand*{\?}{}
\protected\def\?{}
%%% hyperref support
\pdfstringdefDisableCommands{\let\?\relax}
\makeatletter
\g@addto@macro\theindex{\let\?\@empty}
\makeatother
%%%
\begin{document}
\pagenumbering{arabic}\renewcommand{\thepage}{C\?\arabic{page}}
A\index{A} B\index{B}
\clearpage
C\index{C} D\index{D}
\cleardoublepage
\printindex
\end{document}