makeindex:非法罗马数字

makeindex:非法罗马数字

我目前正在写一些附录,我想知道为什么一些关键字没有出现在索引中。

附录的每个部分(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 时遇到的页码问题:

Adobe Reader

答案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}

相关内容