2010-03-04 98 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時被擴展。