2009-06-08 2 views
6

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

\hyperdyperlink{functionname} 

, испускающий

\hyperlink{functionname_2093840289fad1337}{functionname} 

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

ответ

7

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

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

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

+0

Казалось, что он отлично работает! Спасибо – Laserallan

+0

Единственная проблема, которую я обнаружил, это то, что я получаю действительно волосатую ошибку, если еще не определил цель ссылки. Можно ли увидеть, существует ли имя и что-то другое (например, привязка к {} или тому подобное?) – Laserallan

5

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

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

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

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

Вы также можете реализовать правильную таблицу поиска с помощью макросов TeX, если хотите - см. this thread for an example - но это решение довольно легко и проще понять (IMHO).

+0

Спасибо за комментарий. Хеши представляют списки параметров и типы возвращаемых данных, но мы работаем только с символами C, которые не поддерживают перегрузку имен функций. – Laserallan

+0

Я не думаю, что \ ifcase будет работать с такими хэшами :) –

+0

@Will: ah, я предполагаю, что вы хотите указать, что \ ifcase - только для целых случаев ... что имеет смысл теперь, когда я думаю об этом с the \ today macro :-) –

Смежные вопросы