我使用 great 软件包zref
来创建自己的参考系统。我可以为 pdftex(和 tex4ht)创建超链接吗?
请参阅以下代码。我想让命令\showref
可点击,这样我就可以跳转到使用该命令的地方\setdest
。这(容易)实现吗?
\documentclass{article}
\usepackage{zref}
\makeatletter
\zref@newlist{zoo}
\zref@newprop{animal}{\currentanimal}
\zref@addprop{zoo}{animal}
\newcommand\setdest[2]{\def\currentanimal{#2}\zref@labelbylist{#1}{zoo}}
\newcommand\showref[1]{\zref@extract{#1}{animal}}
\makeatother
\begin{document}
\section{My favorite pets}
\setdest{label}{Cat}
See the animal \showref{label}.
\end{document}
答案1
按照zref
手册来说,hyperref
留作以后的工作。
但是,您至少可以使用常规\phantomsection
技巧和另一个标签:
\documentclass{article}
\usepackage{zref}
\makeatletter
\zref@newlist{zoo}
\zref@newprop{animal}{\currentanimal}
\zref@addprop{zoo}{animal}
\newcommand\setdest[2]{\def\currentanimal{#2}\zref@labelbylist{#1}{zoo}\phantomsection\label{zref:#1}}
\newcommand\showref[1]{\hyperref[zref:#1]{\zref@extract{#1}{animal}}}
\makeatother
\usepackage{lipsum}
\usepackage{hyperref}
\begin{document}
\section{My favorite pets}
\lipsum[1]
\setdest{label}{Cat}
Cat goes here.
\lipsum[2]
\section{Other}
See the animal \showref{label}.
\end{document}
答案2
我知道这是一个非常古老的问题,但它似乎是对zref
支持的“状态”最明确的问题hyperref
(即使不是唯一的问题),而公认的答案声称“它留作未来的工作”,这并不完全正确。确实没有 的用户文档,zref-hyperref
并且它的实现留下了“未完成 :-(”作为一个警告。但模块功能齐全,并且加载它确实提供了anchor
属性(并将其包含在main
属性列表中),该属性可用于使用标准hyperref
用户宏构建指向引用的超链接。因此,即使事情还不够完善和记录,它们也可以工作:
\documentclass{article}
\usepackage{zref}
\usepackage{zref-hyperref}
\usepackage{hyperref}
\makeatletter
\zref@newlist{zoo}
\zref@newprop{animal}{\currentanimal}
\zref@addprop{zoo}{animal}
\zref@addprop{zoo}{anchor}
\newcommand\setdest[2]{\def\currentanimal{#2}\zref@labelbylist{#1}{zoo}}
\newcommand\showref[1]{%
\hyperlink{\zref@extractdefault{#1}{anchor}{}}{\zref@extract{#1}{animal}}}
\makeatother
\begin{document}
\section{My favorite pets}
\setdest{label}{Cat}
See the animal \showref{label}.
\end{document}
生成:
我还没有测试过tex4ht
,但我认为它应该和一样能工作\hyperlink
(因此,取决于hyperref
,而不是zref
)。