\phantomsection 表格内:对齐问题

\phantomsection 表格内:对齐问题

我想在表中使用\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段落开头的则有效:

点击链接后,只有行尾的 $x$ 和 $y$ 可见,但对于 $z$,读者会看到行首的文本

可以清楚地看到,PDF 阅读器是在分数条的垂直位置发送的,而不是在线的顶部。

我怎样才能让超链接锚点位于行的顶部,而不是位于基线上?

以下是整个文档的截图:

屏幕截图,顶部的链接 $x$ 和 $y$ 均用红色框起来,下方的表格中有两行,后面是表格外段落中的 $z$ 行

我可以进行破解并将其\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 阅读器指向上面标记的行。

相关内容