Включение хеш-меток в LaTeX \ indexentry с псевдонимом \ newcommand - PullRequest
2 голосов
/ 05 марта 2010

Это странно. Мне пришлось сделать несколько интересных обходных путей, чтобы заставить его функционировать хоть немного, но у нас есть еще один камень преткновения.

Я изо всех сил пытался создать отдельный документ, в котором бы использовался большой файл .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-файл на определенной странице, необходимо использовать следующий формат (спасибо кому-то еще на этой доске за указание синтаксиса # page.xx в пакете hyperref):

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

что означает, что хеш-метка должна быть включена в выходной поток \ newcommand при объявлении myindex, возможно с использованием экранированной хеш-метки # как:

\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 голосов
/ 05 марта 2010

Вы можете поменять катод на # и%:

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

Затем используйте%, чтобы отметить параметры:

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

После этого восстановить обычные каткоды:

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

Это немного неуклюже, но оно должно работать, даже если что-то мешает обычным механизмам побега, и позволяет расширять \href в точке, где используется \myindexer.

0 голосов
/ 05 марта 2010

Как насчет упаковки \href в \protect?

...