settowidth 在表格环境中不准确

settowidth 在表格环境中不准确

我需要自动设置表格环境的宽度;由于某些原因,该tabularc/x/y环境无法正常工作。我有一些用于\settowidth测量示例表格宽度的代码;然后我可以在此基础上进行所需的计算。但不幸的是,\settowidth似乎没有产生一致的结果。在我的(大型且复杂的)实际文档中,计算出的宽度忽略了表格左侧和右侧规则的宽度;这最终会产生一个过满的水平盒子。

以下简短文件演示了这个问题。如果您格式化文件(使用 latex 或 pdflatex)并查看放大的结果,您会看到水平线的宽度不如表格那么宽,而垂直线的高度恰好与表格的高度相匹配。我附上了左下角的屏幕截图作为其外观的示例:

这肯定不是错误吧?但显然还有更多文字\settowidth声称……

在此处输入图片描述

\documentclass{article}

\begin{document}

\newcommand{\tabletest}{%
    \begin{tabular}[b]{|l|r|}
        \hline
        Some & data\\
        \hline
        Some more & stuff\\
        \hline
    \end{tabular}%
}

\newlength{\tabledepth}
\newlength{\tableheight}
\newlength{\tablewidth}
\settodepth{\tabledepth}{\tabletest}
\settoheight{\tableheight}{\tabletest}
\settowidth{\tablewidth}{\tabletest}

\addtolength{\tableheight}{\tabledepth}

\noindent\rule{4pt}{\tableheight}\hspace*{2pt}\tabletest
\\[-6pt]
\noindent\hspace*{6pt}\rule{\tablewidth}{4pt}

\end{document}

答案1

数组包实现表格规则的方式与 TeX 不同,它负责处理水平/垂直规则宽度。

\documentclass{article}
\usepackage{array}
\begin{document}

\newcommand{\tabletest}{%
    \begin{tabular}[b]{|l|r|}
        \hline
        Some & data\\
        \hline
        Some more & stuff\\
        \hline
    \end{tabular}%
}

\newlength{\tabledepth}
\newlength{\tableheight}
\newlength{\tablewidth}
\settodepth{\tabledepth}{\tabletest}
\settoheight{\tableheight}{\tabletest}
\settowidth{\tablewidth}{\tabletest}

\addtolength{\tableheight}{\tabledepth}

\noindent\rule{4pt}{\tableheight}\hspace*{2pt}\tabletest
\\[-6pt]
\noindent\hspace*{6pt}\rule{\tablewidth}{4pt}

\end{document}

在此处输入图片描述

相关内容