枚举 tabularx 行的 Hyperref 问题

枚举 tabularx 行的 Hyperref 问题

我尝试使用列进行枚举,该枚举引用同一列表中的另一个项目。我发现最好的方法是制作一个带有枚举行的表格。我有一个可行的解决方案,但接下来我尝试做的是使用hyperref包添加 PDF 引用。然而,这产生了相当奇怪的结果。

我的解决方案是三列表格:第一张表按行号右对齐,第二张表有指定的长度,第三张表使用所有剩余空间,因此tabularx是必要的。简短的代码示例:

\usepackage{tabularx}
\usepackage{hyperref}
\newcounter{hdItemCounter}
\setcounter{hdItemCounter}{0}

\begin{document}

\begin{tabularx}{\textwidth}{@{}rp{50pt}X}
    \refstepcounter{hdItemCounter}\thehdItemCounter.\label{hdItem1} & Some text to fill at least two lines. & Some text\\
    \refstepcounter{hdItemCounter}\thehdItemCounter.\label{hdItem2} & Some text. & Some text\\
    \refstepcounter{hdItemCounter}\thehdItemCounter.\label{hdItem3} & Some text. & Some text \ref{hdItem2} ir \ref{hdItem1}\\
    \refstepcounter{hdItemCounter}\thehdItemCounter.\label{hdItem4} & Some text. & Some text\\
    \refstepcounter{hdItemCounter}\thehdItemCounter.\label{hdItem5} & Some text. & Some text \ref{hdItem3} ir \ref{hdItem4} \\
\end{tabularx}
%Some text to fill at least several pages to see the strange effect with hyperref.
\end{document}

我需要很多这样的表,因此,我创建了新的环境和新\item样式的命令:

\newenvironment{someenvironment}[1]%
    {\tabularx{\textwidth}{@{}rp{#1}X}}
    {\endtabularx}
\newcommand{\someitem}[1]{\refstepcounter{hdItemCounter}\thehdItemCounter.\label{#1} &}

一开始我尝试用 来做这件事listliketab,但我无法将它放入我的新环境中。然而,即使没有新环境,hyperref行为也很奇怪。所有引用都生成了,但它们指向错误的位置:页面顶部位于行底部而不是顶部:

在此处输入图片描述

可以通过将第一列的类型更改为以下方式来更改p

\begin{tabularx}{\textwidth}{@{}p{10pt}p{50pt}X}

但话说回来——我需要右对齐的第一列。然而,这产生了更奇怪的结果:现在引用指向数字的顶部,但数字并不位于行的顶部:

在此处输入图片描述

可以通过在前面写一些内容来解决此问题\refstepcounter

I\refstepcounter{hdItemCounter}\thehdItemCounter.\label{hdItem1}

顺便说一句, \phantom{I} 不起作用,但是强制空格符号可以:

\ \refstepcounter{hdItemCounter}\thehdItemCounter.\label{hdItem1}

很抱歉发了这么长的帖子,但我想尽可能具体。有人能为我的问题提出更好的解决方案吗?我需要每一pt页的宽度才能尽可能清晰地显示公式,因此最好有列r,避免在每一行都留有空格。

我将非常感谢任何帮助和评论。

答案1

要指定类型的列的对齐,p{<width>}您可以使用命令插入不同的声明>{decl.}

获取具有特定宽度设置的右对齐列>{\raggedleft}p{10pt}

为了简化修改,您可以使用下表标题:

\documentclass{article}
\usepackage{tabularx}
\usepackage{hyperref}
\newcounter{hdItemCounter}
\setcounter{hdItemCounter}{0}
\usepackage{showframe}
\begin{document}

\noindent\begin{tabularx}{\textwidth}%
  {@{\makebox[30pt][l]{\refstepcounter{hdItemCounter}\thehdItemCounter.\label{hdItem\thehdItemCounter}}}p{50pt}X}
Some text to fill at least two lines. & Some text\\
Some text. & Some text\\
Some text. & Some text \ref{hdItem2} ir \ref{hdItem1}\\
Some text. & Some text\\
Some text. & Some text \ref{hdItem3} ir \ref{hdItem4} \\
\end{tabularx}
Some text to fill at least several pages to see the strange effect with hyperref.
\end{document}

这可以通过您自己的环境来简化:

\documentclass{article}
\usepackage{tabularx}
\usepackage{hyperref}
\newcounter{hdItemCounter}
\setcounter{hdItemCounter}{0}
\usepackage{showframe}
\newenvironment{specifictable}{%
\tabularx\linewidth{@{\makebox[30pt][l]{\refstepcounter{hdItemCounter}\thehdItemCounter.\label{hdItem\thehdItemCounter}}}p{50pt}X}}{\endtabularx}
\begin{document}

\noindent\begin{tabularx}{\textwidth}%
  {@{\makebox[30pt][l]{\refstepcounter{hdItemCounter}\thehdItemCounter.\label{hdItem\thehdItemCounter}}}p{50pt}X}
Some text to fill at least two lines. & Some text\\
Some text. & Some text\\
Some text. & Some text \ref{hdItem2} ir \ref{hdItem1}\\
Some text. & Some text\\
Some text. & Some text \ref{hdItem3} ir \ref{hdItem4} \\
\end{tabularx}
Some text to fill at least several pages to see the strange effect with hyperref.

\noindent\begin{specifictable}
Some text to fill at least two lines. & Some text\\
Some text. & Some text\\
Some text. & Some text \ref{hdItem2} ir \ref{hdItem1}\\
Some text. & Some text\\
Some text. & Some text \ref{hdItem3} ir \ref{hdItem4} \\
\end{specifictable}
\end{document}

上面的代码产生: 在此处输入图片描述

相关内容