我正在编写一个文档,其中必须放置许多类似的表格(并且必须使它们保持“相似”)。因此,我正在编写一些宏来自动生成并部分填充表格。(我生成表格并将项目键传递给宏,以便我可以自动获取 ID、标题和其他一些信息。)这是为了解释我需要使用宏。
效果(令人惊讶)不错,除了表格链接位置稍微有点错误,它会“切断”标题行。也就是说,如果您单击“链接”,它会在页面上(稍微)向下移动太远,表格无法完全显示,您必须向上滚动。我认为这取决于使用的查看器(一些链接到页面,一些链接到确切的行)。我使用的是 TexStudio 中集成的查看器。
这是一个最小的工作示例:
\documentclass[11pt]{report}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{tabularx}
\usepackage{hyperref}
\newcommand\mytitle[1]{\phantomsection A title generated from a key\label{test}}
\newcommand\mytab[1]{
\begin{center}
\begin{tabularx}{\textwidth}{ l X }
\toprule
\multicolumn{2}{c}{\mytitle} \\
\midrule
ID & \dots \\
\addlinespace[1em]
etc. & \dots \\
\bottomrule
\end{tabularx}
\end{center}
}
\begin{document}
Link to title table: \hyperref[test]{link}
\pagebreak
\mytab
\end{document}
我究竟做错了什么?
非常感谢!
答案1
正如@ChristianHupfer 在评论中指出的那样,您遇到的问题主要与您使用的 pdf 浏览器有关。
如果切换 pdf 浏览器不是一个可行的选择,您可以尝试以下补救措施:将\phantomsection
和\label
语句移动到宏的最开始\mytab
。
\documentclass[11pt]{report}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{tabularx}
\usepackage{hyperref}
\newcommand\mylink[1]{\phantomsection\label{#1}}
\newcommand\mytitle[1]{\textbf{#1}} % set appearance of title string
% \mytab now takes two arguments: the label string and the title string
\newcommand\mytab[2]{\mylink{#1}
\begin{center}
\begin{tabularx}{\textwidth}{ l X }
\toprule
\multicolumn{2}{c}{\mytitle{#2}} \\
\midrule
ID & \dots \\
\addlinespace[1em]
etc. & \dots \\
\bottomrule
\end{tabularx}
\end{center}
}
\begin{document}
Link to table's title line: \hyperref[lab:test]{link}
\pagebreak
\mytab{lab:test}{A title generated from a key}
\end{document}