在带有\ newcommand的别名的LaTeX \ indexentry中包含哈希标记

时间:2010-03-04 21:44:45

标签: pdf latex hash hyperref

这是一个奇怪的。我必须做一些有趣的解决方法才能让它运行一点点,但我们还有另一个绊脚石。

我一直在努力创建一个单独的文档,它使用一个大的.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创建hyperref时存在问题。为了在特定页面打开PDF,需要采用以下格式(感谢此板上的其他人指出hyperref包中的#page.xx语法):

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

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

\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无法正确打开。

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

2 个答案:

答案 0 :(得分:0)

如何将\href包裹在\protect

答案 1 :(得分:0)

您可以交换#{3}}和%:

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

然后使用%来标记参数:

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

之后,恢复通常的catcodes:

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

这有点笨拙,但即使某些事情干扰了通常的转义机制,它也应该有效,并且允许\href\myindexer使用时被扩展。