Таблица поиска в латексе - PullRequest
6 голосов
/ 08 июня 2009

У меня есть набор автоматически сгенерированного LaTeX-кода с гиперцелями вида «имя_функции_2093840289fad1337», т.е. имя функции с добавленным хешем Я хотел бы сослаться на эти функции из остальной части документа, ссылаясь только на имя функции, которое, как я знаю, уникально. Я хотел бы функцию поиска что-то вроде этого:

\hyperdyperlink{functionname}

который излучает

\hyperlink{functionname_2093840289fad1337}{functionname}

Обратите внимание, что я не могу вычислить хеш, но я готов написать таблицу, которая отображает каждое имя функции на имя функции + хеш. Как лучше написать такую ​​функцию?

Ответы [ 2 ]

7 голосов
/ 08 июня 2009

Это работает?

    \makeatletter
    \newcommand\hashlink[2]{%
      \@namedef{hashlink-#1}{#2}%
    }
    \newcommand\hyperdyperlink[1]{%
      \hyperlink
        {#1_\@nameuse{hashlink-#1}}
        {#1}%
    }
    \hashlink{functionname}{2093840289fad1337}
    \hyperdyperlink{functionname}
    \makeatother

(непроверенная.)


Позже: Чтобы разветвлять код в зависимости от того, если вы определили цель ссылки, вы можете написать что-то вроде

    \newcommand\hyperdyperlink[1]{%
      \@ifundefined{hashlink-#1}{%
        [whatever else you want to do]
      }{%
        \hyperlink{#1_\@nameuse{hashlink-#1}}{#1}%
      }%
    }

( Обновление: упс; это было довольно сломано, как только что опубликовано, извините. Теперь исправлено, я надеюсь.)

5 голосов
/ 08 июня 2009

Поскольку имена функций уникальны, не могли бы вы определить цели гиперссылок без добавленного хеша?

Кроме того, вы можете создать новый макрос LaTeX для каждой функции. Код, который генерирует код LaTeX, может сделать это путем вывода кода, подобного следующему:

\newcommand{\linkFoo}{\hyperlink{foo_2093840289fad1337}{foo}}
\newcommand{\linkBar}{\hyperlink{bar_4323812312asf1342}{bar}}

Тогда используйте \linkFoo и друзей в своей рукописной части.

Вы также можете реализовать правильную таблицу поиска с макросами TeX, если вы действительно этого хотите - см. этот поток для примера - но это решение довольно легко и просто понять (ИМХО). *

...