问题
在表格中,如何确保所有行的内容垂直居中和高度是否大于或等于给定值(例如 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
等)。tabularx
booktab
- 我不会删除右侧分隔列的垂直线,因为这可以将措辞和学生的答案清楚地区分开来。
答案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}
(红线表示文字边框)