2010-03-04 97 views
2

这很奇怪。我必须做一些有趣的解决方法才能让它起作用,但我们还有另一个绊脚石。将散列标记包含在用 newcommand替换的LaTeX indexentry中

我一直在努力创建一个单独的文档,该文档使用了一个大的.ind文件(使用来自连接的小型单独.idx文件的makeindex创建的索引),这个想法是我最终将有一个文档,子文档和索引数据发生的页码。

为此,我不得不定义其收集所有索引条目的命令:

\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} 

wihch手段该散列标记需要被包括在\ newcommand的输出流中时myindex被声明,可能使用转义散列标记#为:

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

或根据一些片段,我发现某处使用双 - 标记为:

对多个文档的胶乳源的编译过程中在以下错误3210
\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超链接?

回答

0

那么在\protect包装\href怎么样?

+0

是否需要立即扩展'\ thepage'? – 2010-03-05 08:36:56

0

您可以把排名的catcode和%:

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

然后用%来标记参数:

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

之后,恢复通常的catcodes:

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

这种做法笨拙,但即使出现干扰通常的逃避机制的情况,并且它允许\href在使用\myindexer时被扩展。