\documentclass{article}
\usepackage{hyperref}
\usepackage{lipsum}
\title{My notes for Bla}
\author{myself}
\newcommand{\thingnamestyle}[1]{\textsc{#1}}
\newcommand{\thingnamerefstyle}[1]{[\textsc{#1}]}
% This works, but is unnecessarily complicated
% \newcounter{thing}
% \newcommand{\thing}[1]{%
% \thingnamestyle{#1}%
% \renewcommand{\thething}{\thingnamerefstyle{#1}}%
% \refstepcounter{thing}%
% }
\makeatletter
\newcommand{\thing}[1]{%
\thingnamestyle{#1}%
\def\@currentlabel{\thingnamerefstyle{#1}}%
}
\makeatother
\begin{document}
\section{Bla}
\lipsum[1]
\thing{thing-Quick} \label{quick}
\lipsum[1]
\thing{Task-Brown} \label{brown}
\lipsum[1]
And \ref{quick} has been completed.
\end{document}
这有效,但hyperref
在\ref
:单击它会跳转到章节标题,我想,这是\@currentlable
除了我的\thing
宏之外设置的最后一件事。
如果按照上面的注释代码定义\thing
使用参考计数器,则链接似乎可以正常工作。
缺少什么才能\thing
兼容hyperref
?
答案1
为了产生适当的超链接,请\phantomsection
在末尾发出\thing
:
\makeatletter
\newcommand{\thing}[1]{%
\thingnamestyle{#1}%
\def\@currentlabel{\thingnamerefstyle{#1}}%
\phantomsection%
}
\makeatother
注意,如果\thingnamerefstyle
扩展了写入.aux
文件的内容。有时更习惯\protect
这样做:
...
\def\@currentlabel{\protect\thingnamerefstyle{#1}}$
...