我需要您提供以下帮助。我在 的行中设置了超目标longtable
,但当我通过单击相应的超链接跳转到这些超目标时,我最终到达了行的底部,而不是顶部。
实际上,我以前也遇到过这个问题tabular
,但令我惊讶和高兴的是,我发现如果超目标位于手动调整大小的m{<size>}
列中,而不是l
列中,则跳转会正确地发生在表格行的顶部。但是,对于longtable
s ,即使这个技巧也无法解决问题。请考虑以下示例。当跳转到虚拟短语表时,目标行的顶部被切断。陈词滥调的短语表运行良好,但在表格定义中更改为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}
我的问题是:
- 表格中的
m
和列之间到底有什么区别?l
- 为什么同样的事情在 中不会产生差异
longtable
? - 如何使这个超目标跳转
longtable
也能正常工作?
我发现类似问题的答案都带有一些 TeX 级别的魔法。但是难道没有更简单的解决方案吗(就像表格的情况一样)?非常感谢!
答案1
链接目标设置在基线上,应该移动到前当前行。一般来说,\vadjust pre{...}
有助于将内容放入垂直列表中前当前行。关键字pre
是 pdfTeX 发明的附加功能,也可用于 XeTeX 和 LuaTeX:
\vadjust pre{\hypertarget{dummy2}{}}
第一列的垂直列表为m
,它基于p
列类型。这意味着,单元格包含\parbox
垂直模式下的材料。因此,\vadjust pre
进入此列表,并且它取决于此单元格和其他单元格的高度(如果此单元格位于整个表格行的顶部)。对于列类型l
和r
,目标位于表格单元格之前,不对齐到当前文本行的左侧,而不是表格的左侧。
也可以使用 来将内容移开对齐\noalign
,这仅限于当前一个表格行完成并且新行即将开始时的位置:
... previous table row\\
\noalign{\hypertarget{dummy2}{}} First cell & ...
答案2
各位,我最终采纳了 John Kormylo 的建议\raisebox{\normalbaselineskip}[0pt][0pt]{\hypertarget{dummy2}{\strut}}
。它运行良好,尽管如果行包含多行,它不会将您带到行的最顶部。(我仍在寻找为什么 hypertarget 在 longtable 中无法正确运行的完整解释)。