如何定义表格所有行的最小高度?

如何定义表格所有行的最小高度?

问题

在表格中,如何确保所有行的内容垂直居中高度是否大于或等于给定值(例如 0.8 厘米)?(请参阅问题底部的 MWE)。(单元格的内容不应缩小或放大)。

在此处输入图片描述

背景和细节

我正在编写一款自动创建 LaTeX 文档的软件:学生数学工作表。其中有“心算”系列文档,其中所有问题都组织在一个包含 10 个或更多问题的表格中。

可以看到三列:

  • 左边的(问题编号),
  • 中间一个(问题本身,可能是一两行文本,有时包括几何图形,需要更多空间),
  • 和正确的一页(第一页为空白,学生可在此写答案,第二页则填上答案)。

它看起来像这样(文本是法语,但你能明白大概的意思吗?):

在此处输入图片描述

问题

中心列单元格的内容大致垂直居中,但这种居中是利用包中的一个错误实现的,array该错误现已修复(参见这个问题)。因此,使用较新版本的array垂直顶部对齐的单元格代替垂直居中就像上图那样的细胞。

尽管如此,我仍然希望垂直居中左列和中间列的内容,无论是文本还是图形(或两者)。

另外,还有第二个约束需要满足:我想确保任何行都是至少0.8厘米高(不固定为 0.8 厘米,但至少0.8 厘米),因为学生需要在右侧的单元格中书写,并且行高必须足够高。并非所有学生的笔迹都很小!

@Bernard 的回答我知道该cellspace包可以帮助保持垂直对齐。所以我想我可以将顶部和底部的空间值设置为0.3cm,这样就可以使0.6cm总和(加上单元格内容的高度,至少0.8cm总和)。但在包含几何图形的单元格中,这样的额外空间是不必要的,并且会给单元格增加太多无用的高度(这会导致一些表格无法放入一页,只是因为一些单元格太高)。

我不知道如何使用\arraystretch来确保最小高度为 0.8 厘米(这只是一个系数)。

有可能满足这两个约束吗?可以从这个例子开始(如果你使用最新版本的,单元格垂直居中array):

\documentclass[a4paper, 12pt]{article}

\usepackage{amsmath}
\usepackage{array}

\begin{document}
\normalsize
\textbf{Some title}
\newline 
\newline 
\begin{tabular}{m{0.5 cm}>{}m{10 cm}|>{}m{4 cm}@{}m{0pt}@{}}
\hline 
\textbf{1.} & $11 \times \text{?} = 9$ & & \tabularnewline [0.8cm] \hline 
\textbf{2.} & $\text{?} \times \text{?} = 72$ & & \tabularnewline [0.8cm] \hline 

\end{tabular}

\end{document}

笔记:

  • 我不想使用其他表格包(如、longtable等)。tabularxbooktab
  • 我不会删除右侧分隔列的垂直线,因为这可以将措辞和学生的答案清楚地区分开来。

答案1

大部分都离题了(因为如何解决问题的想法已在问题的评论中进行了解释):

  • 对于表使用array
  • 为了插入图像(pdf、png、... 文件),使用包\adjustimage{<keays>}{image file name>}中的宏adjustbox
  • 用于包含图像的代码也使用\adjustbox{<keys>}{<image code>}来自包的宏adjustbox
  • 添加表格行的自动编号
  • 对于单位,我建议使用包siunity
  • \rule[-2ex]{0pt}{5ex}行的最小垂直尺寸由插入到第一列末尾的行决定(不再需要这个额外的列)
  • 列的宽度通过使用来定义,\dimexpr以便表格的宽度与文本一样宽

    \documentclass[a4paper, 12pt]{article}
    
    \usepackage{amsmath}
    \usepackage{array}
    \newcounter{task}
    \newcolumntype{N}{>{\refstepcounter{task}\thetask%
                         \bfseries}p{\dimexpr0.05\linewidth-1.33\tabcolsep-0.33\arrayrulewidth}%
                      <{.\rule[-2ex]{0pt}{5ex}}}
    \usepackage[export]{adjustbox}
    \usepackage{siunitx}
    \usepackage{tikz}
    
    %---------------- show page layout. don't use in a real document!
    \usepackage{showframe}
    \renewcommand\ShowFrameLinethickness{0.15pt}
    \renewcommand*\ShowFrameColor{\color{red}}
    %---------------------------------------------------------------%
    \begin{document}
    \section*{Some title}
    
    \begin{center}
    \adjustboxset{margin=0pt 3pt 0pt 6pt}
    \setlength\arrayrulewidth{0.5pt}
    \begin{tabular}{@{}
                    N  
                    m{\dimexpr0.625\linewidth-1.33\tabcolsep-0.33\arrayrulewidth} | 
                    m{\dimexpr0.325\linewidth-1.33\tabcolsep-0.33\arrayrulewidth} 
                    @{}}
        \hline
    & $11 \times \text{?} = 9$          &                           \\ \hline
    & $\text{?} \times \text{?} = 72$   & some long\newline
                                              long long\newline
                                              long text             \\ \hline
    &  \adjustimage{width=3cm}{example-image-duck}
                                        & \si{\square\deci\metre}   \\ \hline
    & some long\newline long long\newline long text
                                        & ~                         \\ \hline
    &  \adjustbox{width=2cm}{\tikz\node[draw,minimum size=12mm] {tikz image};}
                                        & \si{\cubic\metre}         \\ \hline
    \end{tabular}
    \end{center}
    \end{document}
    

在此处输入图片描述

(红线表示文字边框)

相关内容