如何获取表格中的行高和列宽?

如何获取表格中的行高和列宽?

您知道我如何以点 (pt) 为单位指定表格中单元格的大小,即行高和列宽吗?在文本模式下,有类似\textwidth或的命令,\baselineskip但这在环境中不起作用tabular。我不想调整这些参数,我只想知道它们的值。

\documentclass{scrreprt}

\begin{document}
\centering
\begin{tabular}[t]{rl}
  Row Height:   & "\textbackslash{}the \textbackslash{}getRowHeight" \\
  Column Width: & "\textbackslash{}the \textbackslash{}getColWidth"
\end{tabular}

\end{document}

谢谢你! :)

答案1

在 环境中{NiceTabular}nicematrix您会在单元格、行和列下创建 PGF/Tikz 节点。可以使用这些节点计算当前单元格的尺寸,然后再次使用 Tikz 将结果放入单元格中。

\documentclass{article}
\usepackage{nicematrix,tikz}
\usetikzlibrary{calc}

\makeatletter
\ExplSyntaxOn
\cs_new_protected:Nn \__pantigny_SizeOfCell:nn 
  {
    \begin{tikzpicture}
    \path let \p1 = (#1-|#2) ,
              \p2 = (\int_eval:n{#1+1}-|\int_eval:n{#2+1}) 
          in node at (#1-#2) 
             { \dim_eval:n { \x2 - \x1 } $\times$ \dim_eval:n{\y1-\y2} } ;
    \end{tikzpicture}
  }

\NewDocumentCommand \SizeOfCell {}
  {
    \NotEmpty
    \tl_gput_right:Nx \g_nicematrix_code_after_tl
      { \__pantigny_SizeOfCell:nn { \arabic { iRow } } { \arabic { jCol } } }
  }
\ExplSyntaxOff
\makeatother

\begin{document}
\begin{NiceTabular}{ccc}[hvlines]
AAAA & AAAAAAAAAAAAAA AAAAAA & BB \\
BB & \SizeOfCell  & CCC \\
CC & BBBBB  & DD
\end{NiceTabular}
\end{document}

您需要多次编译(因为nicematrix使用 PGF/Tikz 节点)。

上述代码的输出

答案2

tabstackengine共享了 提供的一些功能tabular。它还提供了另一个功能,即\TABwd{}提供最近创建的 TABstack 的列宽。同样,\TABht{}\TABdp{}可用于行高/行深。

从 MWE 中可以看出,这些数量在 TABstack 内部以及之后也可用。

这些量提供了行/列的高度和宽度(不包括边框)。为了考虑堆栈的额外边框,\tabular@gap内部列之间有分隔(但不围绕外边缘),并且(在这种较短的堆栈的情况下,\Sstackgap行之间有空间)。

\documentclass{scrreprt}
\usepackage{tabstackengine}
\begin{document}
\centering
\begin{tabular}[t]{rl}
  Row Height:    & "\textbackslash{}the \textbackslash{}getRowHeight" \\
  Columdn Width: & "\textbackslash{}the \textbackslash{}getColWidth"
\end{tabular}

\the\tabcolsep

\setstacktabulargap{12pt}% COMPARABLE TO 2\tabcolsep
\tabularShortstack{rl}{
  Row Height:    & "\textbackslash{}the \textbackslash{}getRowHeight" \\
  Columdn Width: & "\textbackslash{}the \textbackslash{}getColWidth"\\
  \rule{\TABwd{1}}{\dimexpr\TABht{2}+\TABdp{1}}& 
  \rule{\TABwd{2}}{\dimexpr\TABht{2}+\TABdp{1}}
}

\bigskip
Column widths:
\TABwd{1}, \TABwd{2}

\medskip
Row heights/depths:
\TABht{1}/\TABdp{1}, \TABht{2}/\TABdp{2}
\end{document}

在此处输入图片描述

答案3

一种演示用法的方法zsavepos

替代方案(使用\vadjust这样您就不需要\noalign在表格行周围放置):

\documentclass{article}
\usepackage{zref-savepos}
\usepackage{xcolor}
\pagenumbering{gobble}
\begin{document}

\begin{tabular}{|c|c|c|}
  \hline
  \noalign{\zsaveposy{celltop}}
  \textcolor{red}{\rule[-50pt]{0.25pt}{100pt}} & 456 &  \zsaveposx{cellleft} \hfill 789 \hfill \zsaveposx{cellright}  \\
  \noalign{\zsaveposy{cellbottom}}
  \hline
  123 & 456 & \textcolor{blue}{\rule{99pt}{0.25pt}} \\\hline
\end{tabular}

height of cell: \the\dimexpr \zposy{celltop}sp-\zposy{cellbottom}sp \relax

width of cell: \the\dimexpr \zposx{cellright}sp-\zposx{cellleft}sp \relax

\end{document}

输出图像:

输出图像

相关内容