我将尝试尽可能清楚地描述我的问题。首先是一个可行的示例。
\documentclass[french,11pt]{article}
\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{kpfonts}
\usepackage{geometry}
\geometry{ a4paper, total={170mm,257mm}, left=20mm, top=20mm}
\usepackage{blindtext}
\setlength{\parskip}{1.2ex} \setlength{\parindent}{0em} \clubpenalty = 10000 \widowpenalty = 10000
\usepackage{graphicx,bm,url, amsfonts, latexsym, verbatim, xspace, setspace,mathrsfs,marvosym,wasysym,amsmath, amssymb}
\usepackage{caption}
\usepackage[caption=false]{subfig}
\usepackage{epstopdf}
\usepackage[colorlinks=true, linkcolor=red, urlcolor=blue, pdftitle={article}, pdfauthor={DSA}]{hyperref}
\usepackage{authblk}
\begin{document}
\title{BlaBlaBla} \author[,1]{Dimitrios\thanks{\texttt{\url{[email protected]}}}} %
\date{}
\clearpage\maketitle \thispagestyle{empty}
\begin{itemize}
\item \blindtext
See reference \ref{foo3}.
\item \blindtext
See reference \ref{foo1}.
\item \blindtext
See reference \ref{foo2}.
\end{itemize}
\newpage
\blindtext
\begin{enumerate}
\item\label{foo1} \textbf{The foo1 reference}
\item\label{foo2} \blindtext
\textbf{The foo2 reference}
\item\label{foo3} \textbf{The foo3 reference}.
\end{enumerate}
\end{document}
当我点击链接时,我会转到相关的参考资料。我想要实现的是,通过点击参考资料旁边的小三角形或垂直向上的箭头,向后移动到链接所在的文本。也就是说,就像维基百科文章的来回效果(见下图)。
答案1
这是一个etoolbox
基于 backref-able 的实现\ref
。
用于\backrefref{<label>}
创建可以链接回的 的\ref
链接。用于设置标签并输出反向引用标记。请注意,应在锚点附加处直接调用。否则,您可能会得到错误的链接目标。<label>
\backreflabel{<label>}
\backreflabel
<label>
该解决方案通过将信息写入.aux
文件来工作,因此可能需要至少两次 LaTeX 运行。
\documentclass[french,11pt]{article}
\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{blindtext}
\usepackage{etoolbox}
\usepackage[colorlinks]{hyperref}
\newcommand*{\backrefmarker}{$\uparrow$}
\newcommand*{\backrefmultformat}{\textsuperscript}
\makeatletter
\newcommand*{\br@currlabels}{}
\newcommand*{\br@linklabels}{}
\newcommand*{\backrefref}[1]{%
\listgadd{\br@currlabels}{#1}%
\ifltxcounter{br@curr@#1}
{}
{\newcounter{br@curr@#1}
\csgdef{thebr@curr@#1}{\alph{br@curr@#1}}}%
{\refstepcounter{br@curr@#1}%
\label{br@#1@\the\value{br@curr@#1}}}%
\ref{#1}}
\newcommand*{\backreflabel}[1]{%
\label{#1}%
\backreflabel@display{#1}}
\newcommand*{\backreflabel@display}[1]{%
\ifltxcounter{br@link@#1}
{\ifnumequal{\value{br@link@#1}}{1}
{\hyperref[br@#1@1]{\backrefmarker}}
{\ifnumgreater{\value{br@link@#1}}{1}
{\backrefmarker
\backrefmultformat{\backreflabel@display@loop{#1}}}
{\textbf{??}}}}
{\textbf{??}}}
\newcounter{br@label@loop}
\newcommand*{\backreflabel@display@loop}[1]{%
\setcounter{br@label@loop}{0}%
\whileboolexpr{test {\ifnumless{\value{br@label@loop}}{\value{br@link@#1}}}}
{\stepcounter{br@label@loop}%
\ref{br@#1@\the\value{br@label@loop}}}}
\newcommand*{\br@aux@readlabel}[2]{%
\ifinlist{#1}{\br@linklabels}
{}
{\listgadd{\br@linklabels}{#1}}%
\ifltxcounter{br@link@#1}
{}
{\newcounter{br@link@#1}}%
\setcounter{br@link@#1}{#2}}
\newcommand*{\br@writelabel}[1]{%
\ifltxcounter{br@link@#1}
{\ifnumequal{\value{br@curr@#1}}{\value{br@link@#1}}
{}
{\@latex@warning@no@line{%
Label(s) may have changed.
Rerun to get cross-references right}}}
{\@latex@warning@no@line{%
Label(s) may have changed.
Rerun to get cross-references right}}%
\immediate\write\@mainaux{\string\br@aux@readlabel{#1}{\the\value{br@curr@#1}}}}
\AtEndDocument{%
\forlistloop{\br@writelabel}{\br@currlabels}}
\makeatother
\begin{document}
\begin{itemize}
\item \blindtext
See reference \backrefref{foo3}.
\item \blindtext
See reference \backrefref{foo1}.
\item \blindtext
See reference \backrefref{foo2}.
\end{itemize}
\clearpage
\blindtext
\begin{enumerate}
\item\backreflabel{foo1} \textbf{The foo1 reference}
\item\backreflabel{foo2} \blindtext
\textbf{The foo2 reference}
\item\backreflabel{foo3} \textbf{The foo3 reference}.
\end{enumerate}
\clearpage
See reference \backrefref{foo1}.
See reference \backrefref{foo2}.
\clearpage
See reference \backrefref{foo2}.
\end{document}
答案2
这更像是一个扩展的评论,而不是真正的答案。
我同意之前的评论,使用 backref 包或更准确地说,在加载时 backref
传递给的选项可以轻松实现这一点。但将其扩展到而不仅仅是扩展到可能会很有趣。hyperref
\label
\cite
。在我回答这个问题时所有标题与相应的目录条目反向链接
我提供了一个可以作为起点的解决方案。
但这引发了一个歧义问题:对标签的引用是唯一的,但反方向却不是,因为您可以多次引用单个标签。
此外,在创建标签时并不知道未来的引用,即使您决定通过选择反向链接到最后一个(或第一个)引用来解决歧义问题,您也必须将其写入.aux
文件并在下次编译时读回,这会变得更加复杂。
如果您确实需要,并且给我留几天时间,我可以将上面引用的解决方案扩展到标签。
顺便说一下,所请求的功能在几个流行的 pdf 查看器中是开箱即用的,因为它们可以保留浏览历史记录,从而消除歧义问题。