跳转到长表中的超目标时,行位置太低

跳转到长表中的超目标时,行位置太低

我需要您提供以下帮助。我在 的行中设置了超目标longtable,但当我通过单击相应的超链接跳转到这些超目标时,我最终到达了行的底部,而不是顶部。

实际上,我以前也遇到过这个问题tabular,但令我惊讶和高兴的是,我发现如果超目标位于手动调整大小的m{<size>}列中,而不是l列中,则跳转会正确地发生在表格行的顶部。但是,对于longtables ,即使这个技巧也无法解决问题。请考虑以下示例。当跳转到虚拟短语表时,目标行的顶部被切断。陈词滥调的短语表运行良好,但在表格定义中更改为m{1cm}l它会显示与定位相同的问题。

\documentclass{article}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{caption}
\usepackage{tabularx}
\usepackage[colorlinks,linkcolor=blue,urlcolor=blue]{hyperref}

\begin{document}

\begin{longtable}{ m{1cm} l }
\caption{Dummy Phrase Repo} \\
\toprule
\textbf{ID} & \textbf{Text} \\
\midrule
\endhead
\midrule
\endfoot
\bottomrule
\endlastfoot
\hypertarget{dummy1}{}1 & Lorem ipsum \\
\hypertarget{dummy2}{}2 & Quick brown fox \\
\hypertarget{dummy3}{}3 & Foo bar baz \\
\end{longtable}

\begin{table}[htbp]
\centering
\caption{Corny Phrase Repo}
\begin{tabular}{ m{1cm} l }
\toprule
\textbf{ID} & \textbf{Text} \\
\midrule
\hypertarget{corny1}{}1 & Attaboy! \\
\hypertarget{corny2}{}2 & Ahoy matey! \\
\hypertarget{corny3}{}3 & Thanks a lot, Lancelot! \\
\bottomrule
\end{tabular}
\end{table}

\newpage

Angelina used dummy phrase \hyperlink{dummy2}{\#2} in her slides, evoking corny phrase \hyperlink{corny1}{\#1} from Billybob.

\end{document}

我的问题是:

  1. 表格中的m和列之间到底有什么区别?l
  2. 为什么同样的事情在 中不会产生差异longtable
  3. 如何使这个超目标跳转longtable也能正常工作?

我发现类似问题的答案都带有一些 TeX 级别的魔法。但是难道没有更简单的解决方案吗(就像表格的情况一样)?非常感谢!

答案1

链接目标设置在基线上,应该移动到当前行。一般来说,\vadjust pre{...}有助于将内容放入垂直列表中当前行。关键字pre是 pdfTeX 发明的附加功能,也可用于 XeTeX 和 LuaTeX:

\vadjust pre{\hypertarget{dummy2}{}}

第一列的垂直列表为m,它基于p列类型。这意味着,单元格包含\parbox垂直模式下的材料。因此,\vadjust pre进入此列表,并且它取决于此单元格和其他单元格的高度(如果此单元格位于整个表格行的顶部)。对于列类型lr,目标位于表格单元格之前,不对齐到当前文本行的左侧,而不是表格的左侧。

也可以使用 来将内容移开对齐\noalign,这仅限于当前一个表格行完成并且新行即将开始时的位置:

... previous table row\\
\noalign{\hypertarget{dummy2}{}} First cell & ...

答案2

各位,我最终采纳了 John Kormylo 的建议\raisebox{\normalbaselineskip}[0pt][0pt]{\hypertarget{dummy2‌​}{\strut}}。它运行良好,尽管如果行包含多行,它不会将您带到行的最顶部。(我仍在寻找为什么 hypertarget 在 longtable 中无法正确运行的完整解释)。

相关内容