2

这是一个奇怪的问题。我不得不做一些有趣的变通方法来让它发挥作用,甚至一点点,但我们还有另一个绊脚石。

我一直在努力创建一个单独的文档,该文档使用一个大的 .ind 文件(使用 makeindex 从连接的小型单个 .idx 文件创建的索引),我的想法是我最终将拥有一个指示 SUB 文档和索引数据出现的页码。

为此,我必须定义一个收集所有索引条目的命令:

\newcommand{\myindexer}[3]
    {\index{myindex}{#1 : #2.#3!\href{\doctitle.pdf}}}

结果是 myindex.idx 文件中的索引条目为:

\indexentry{IndexedItemA : 55.iii!\href{Volume 1.pdf}{Volume 1.pdf}}{30}}
\indexentry{IndexedItemB : 23.vi!\href{Volume 3.pdf}{Volume 3.pdf}}{114}}

然而,在尝试创建目标 PDF 的超引用时存在问题。为了在特定页面打开 PDF,需要使用以下格式(感谢此板上的其他人指出 hyperref 包中的#page.xx 语法):

\href{FILENAME#page.XX}{Link Text}

这意味着在声明 myindex 时需要在 \newcommand 的输出流中包含一个哈希标记,可能使用转义的哈希标记 # 为:

\newcommand{\myindexer}[3]
    {\index{myindex}{#1 : #2.#3!\href{\doctitle.pdf\#page.\thepage}}}

或者根据我在某处使用双哈希标记找到的一些片段:

\newcommand{\myindexer}[3]
    {\index{myindex}{#1 : #2.#3!\href{\doctitle.pdf##page.\thepage}}}

前者在为被索引的多个文档编译乳胶源期间导致以下错误:

! Illegal parameter number in definition of \@gtempa.
<to be read again>
                   \thepage
l.31 \myindex{IndexedItemA}{55}{iii}

而后者会导致生成的 myindex.idx 文件中出现不需要的反斜杠,如下所示:

\indexentry{IndexedItemA : 55.iii!\href  {Volume 1.pdf\#page.33}{Volume 1}}{33}

这会导致目标 PDF 无法正确打开。

知道如何强制 newcommand 以这种方式输出哈希标记以支持 PDF 的超链接吗?

4

2 回答 2

0

\href进去怎么样\protect

于 2010-03-05T03:09:23.660 回答
0

您可以交换 # 和 % 的catcode

\catcode`\%=6 \catcode`\#=12

然后使用 % 来标记参数:

\newcommand{\myindexer}[3]
    {\index{myindex}{%1 : %2.%3!\href{\doctitle.pdf#page.\thepage}}}

之后,恢复通常的 catcode:

\catcode`\%=12 \catcode`\#=6

这有点笨拙,但即使某些东西干扰了通常的转义机制,它也应该可以工作,并且它允许\href在使用时进行扩展\myindexer

于 2010-03-05T07:25:24.213 回答