我有一个 tabularx 表,使用multirow
并且所有列都垂直居中。以下是表格:
\usepackage{multirow,tabularx}
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\newcolumntype{N}{@{}m{0pt}@{}}
\def\tabularxcolumn#1{C{#1}}
\begin{tabularx}{\textwidth}{|C{3cm}|X|C{3cm}|N}
\hline
\multirow{2}{*}{\includegraphics[width=2.5cm]{logo}} &
\multirow{2}{*}{\Large{Title of this document}} &
Doc.ref. &\\
\cline{3-3}
& & Revision &\\
\hline
\end{tabularx}%
我正在寻找一种方法来强制该表中特定行的最小行高,但由于这样或那样的原因,我尝试的所有方法都没有起作用。
\setlength{\extrarowheight}{1cm}
破坏最右侧单元格的垂直对齐(它们将不再垂直居中)- 分行时添加额外空间,例如
&\\[1cm]
破坏前两个单元格(使用 的单元格\multirow
)的垂直对齐 - 增加数组拉伸因子(例如
\renewcommand{\arraystretch}{2.5}
)似乎对垂直对齐不太好(它似乎将单元格的内容推到垂直中心以下)
更新:由于这是一个模板,因此手动调整位置将不起作用——实际的文档标题稍后填写,可能需要一两行。
还有其他想法吗?
答案1
修订的解决方案,消除了multirow
,而是使用嵌套表格。重新修订以将所有内容合并到中\makemytable{height}
,只是为了更轻松地对各种高度进行游戏测试。
这里我只是\addstackgap[<length>]{object}
为了在该行的上方和下方添加一个垂直缓冲区。添加的缓冲区大小取决于自动地插入图像的高度。
\documentclass{article}
\usepackage{graphicx,stackengine}
\usepackage{multirow,tabularx}
\newsavebox\customimg
\def\bufferA{.5\dimexpr\ht\customimg+\dp\customimg+1\normalbaselineskip}
\def\bufferB{.25\dimexpr\ht\customimg+\dp\customimg+.5\normalbaselineskip}
\def\setimgheight#1{\savebox\customimg{%
\raisebox{\dimexpr-\height+.5\normalbaselineskip} %
{\includegraphics[width=2.5cm,height=#1]{example-image}}}
}
\def\makemytable#1{\setimgheight{#1}
\begin{tabularx}{\textwidth}{|C{3cm}|X|@{\hspace{0pt}}C{3cm}@{\hspace{0pt}}|N}
\hline
\usebox{\customimg} &
\addstackgap[\bufferA]{\Large{Title of this document}} &
\begin{tabular}{@{\hspace{0pt}}c@{\hspace{0pt}}}
\addstackgap[\bufferB]{\makebox[3.0cm]{Doc.ref.}} \\
\hline
\addstackgap[\bufferB]{Revision} \\
\end{tabular}&\\
\hline
\end{tabularx}\par\medskip
}
\begin{document}
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\newcolumntype{N}{@{}m{0pt}@{}}
\def\tabularxcolumn#1{C{#1}}
\makemytable{1cm}
\makemytable{3cm}
\makemytable{5cm}
\end{document}