我想在表中使用\ref
和表示两行,可以使用以下方法完成:\label
\phantomsection
\documentclass{article}
\usepackage{hyperref}
\usepackage{lipsum}
\begin{document}
Cross-references to line \ref{line:x} and line
\ref{line:y} and \ref{line:z}.
\makeatletter
\begin{tabular}{ll}
\phantomsection\edef\@currentlabel{$x$}\label{line:x} Line $x$ & $\frac{1}{2}$ \\
\phantomsection\edef\@currentlabel{$y$}\label{line:y} Line $y$ & $\frac{3}{4}$ \\
\end{tabular}
\phantomsection\edef\@currentlabel{$z$}\label{line:z}Line $z$. This one works.
\lipsum
\end{document}
问题是,当点击顶部红色框中的 $x$ 和 $y$ 时,PDF 阅读器会被发送到基线目标行,而\phantomsection
段落开头的则有效:
可以清楚地看到,PDF 阅读器是在分数条的垂直位置发送的,而不是在线的顶部。
我怎样才能让超链接锚点位于行的顶部,而不是位于基线上?
以下是整个文档的截图:
我可以进行破解并将其\phantomsection
放在前一行,但这不会考虑到深线(基线以下有很多东西)。
我试过摆弄\begin{minipage}[t]
或使用负面的东西\vspace
,但仍然无法摆脱这种错位。
答案1
\raisebox
有帮助。或者如果使用 pdfTeX 作为 TeX 编译器,那么它的功能\vadjust pre
可用于在当前行之前插入一些内容:
\begin{tabular}{ll}
\vadjust pre{\phantomsection}%
\edef\@currentlabel{$x$}%
\label{line:x}%
Line $x$ & $\frac{1}{2}$ \\
\vadjust pre{\phantomsection}%
\edef\@currentlabel{$y$}%
\label{line:y}%
Line $y$ & $\frac{3}{4}$ \\
\end{tabular}
答案2
我不明白为什么您使用 \phantom 部分。如果只是引用行,我会使用新的计数器和\refstepcounter
宏:
\documentclass{article}
\usepackage{hyperref}
\usepackage{lipsum}
\newcounter{linenumber}
\newcommand{\linelabel}[1]{\refstepcounter{linenumber}\label{#1}}
\begin{document}
Cross-references to line \ref{line:x} and line
\ref{line:y} and \ref{line:z}.
\begin{tabular}{ll}
\linelabel{line:x} Line $x$ & $\frac{1}{2}$ \\
\linelabel{line:y} Line $y$ & $\frac{3}{4}$ \\
\end{tabular}
\linelabel{line:z}Line $z$. This one works.
\lipsum[1]
\end{document}
编辑: 只是出于好奇,这是否符合您的期望:
\newcounter{linenumber}
\newcommand{\linelabel}[1]{\raisebox{1em}%
\refstepcounter{linenumber}\label{#1}}}
我无法测试这个,因为我不知道你的最终宏。我的 pdf 阅读器指向上面标记的行。